diff --git a/Po2Lex.py b/Po2Lex.py index 74546fa..b5a2b6b 100644 --- a/Po2Lex.py +++ b/Po2Lex.py @@ -1,29 +1,32 @@ -import os import re +import os from pathlib import Path # Function to read and process .po file def process_po_file(file_name): - with open(file_name, "r") as file: - content = file.read() + try: + with open(file_name, "r") as file: + content = file.read() - entries = re.findall(r"(msgctxt\s+\".+?\"\nmsgid\s+\".+?\"\nmsgstr\s+\".+?\")", content, re.DOTALL) + entries = re.findall(r"(msgctxt\s+\".+?\"\nmsgid\s+\".+?\"\nmsgstr\s+\".+?\")", content, re.DOTALL) - result = [] - for entry in entries: - lines = entry.split("\n") + result = [] + for entry in entries: + lines = entry.split("\n") + msgctxt_line = lines[0] + msgid_lines = [line for line in lines if line.startswith("msgid")] + msgstr_lines = [line for line in lines if line.startswith("msgstr")] - msgctxt_line = lines[0] - msgid_lines = [line for line in lines if line.startswith("msgid")] - msgstr_lines = [line for line in lines if line.startswith("msgstr")] + msgctxt = re.findall(r"msgctxt\s+\"(.+?)\"", msgctxt_line)[0] + msgid = " ".join(re.findall(r"msgid\s+\"(.+?)\"", "\n".join(msgid_lines))) + msgstr = " ".join(re.findall(r"msgstr\s+\"(.+?)\"", "\n".join(msgstr_lines))) - msgctxt = re.findall(r"msgctxt\s+\"(.+?)\"", msgctxt_line)[0] - msgid = " ".join(re.findall(r"msgid\s+\"(.+?)\"", "\n".join(msgid_lines))) - msgstr = " ".join(re.findall(r"msgstr\s+\"(.+?)\"", "\n".join(msgstr_lines))) + result.append({"msgctxt": msgctxt, "msgid": msgid, "msgstr": msgstr}) - result.append({"msgctxt": msgctxt, "msgid": msgid, "msgstr": msgstr}) - - return result + return result + except Exception as e: + print(f"Process_po_file Exception {e} in {file_name} {msgctxt_line}") + quit() # Function to create .lex file def create_lex_file(translations, lex_file_name): @@ -32,22 +35,22 @@ def create_lex_file(translations, lex_file_name): file.write(f"'{translation['msgctxt']}' => '{translation['msgstr']}',\n") # Main program -SOURCE_POFILES_DIR = Path("/home/brianr/Documents/smeserver-manager-locale/root/usr/share/smanager/lib/SrvMngr/I18N/Modules") -TARGET_LEXFILES_DIR = Path("/home/brianr/Documents/smeserver-manager/root/usr/share/smanager/lib/SrvMngr/I18N/Modules") +SOURCE_BASE_DIR = Path("/home/brianr/Documents/smeserver-manager-locale/root/usr/share/smanager/lib/SrvMngr/I18N/Modules") -# ensuring the target directory exists -TARGET_LEXFILES_DIR.mkdir(parents=True, exist_ok=True) +# Iterate over subdirectories in SOURCE_BASE_DIR +for subdir in [subdir.path for subdir in os.scandir(SOURCE_BASE_DIR) if subdir.is_dir()]: + module_name = Path(subdir).name + print(f"Processing {module_name}") + po_dir = Path(os.path.join(subdir, "pofiles")) + #print(po_dir) + lex_dir = Path(os.path.join(subdir, "newlex")) + #print(lex_dir) + # Ensure the newlex directory exists + lex_dir.mkdir(parents=True, exist_ok=True) -# Iterate over subdirectories in SOURCE_POFILES_DIR (only one level down) -# Iterate over subdirectories in SOURCE_POFILES_DIR (only one level down) -for subdir in [subdir.path for subdir in os.scandir(SOURCE_POFILES_DIR) if subdir.is_dir()]: - po_subdir_path = Path(subdir + "/pofiles") - newlex_subdir_path = Path(subdir + "/newlex") - newlex_subdir_path.mkdir(parents=True, exist_ok=True) - - for file in os.listdir(subdir): - if file.endswith(".po"): - po_file_path = Path(os.path.join(subdir, file)) - translations = process_po_file(po_file_path) - lex_file_name = newlex_subdir_path / (po_file_path.stem + ".lex") - create_lex_file(translations, lex_file_name) + for file in os.listdir(po_dir): + if file.endswith(".po"): + po_file_path = Path(os.path.join(po_dir, file)) + translations = process_po_file(po_file_path) + lex_file_name = lex_dir / (po_file_path.stem + ".lex") + create_lex_file(translations, lex_file_name)