From d56452ead11fafb0396617eb96bdb0d0ed39ae22 Mon Sep 17 00:00:00 2001 From: Brian Read Date: Sat, 20 Jul 2024 10:59:35 +0100 Subject: [PATCH] Move po2lex to use polib and (Lex2Po.py) add more info to entries in .lex file not found in _en file --- .gitignore | 1 + Lex2Po.py | 4 ++-- Po2Lex.py | 62 ++++++++++++++++++++---------------------------------- 3 files changed, 26 insertions(+), 41 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..397b4a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.log diff --git a/Lex2Po.py b/Lex2Po.py index f635fbb..3dafc0f 100644 --- a/Lex2Po.py +++ b/Lex2Po.py @@ -9,7 +9,7 @@ SOURCE_LOCALE_DIR = Path("/home/brianr/Documents/smeserver-manager-locale/root/u SOURCE_MANAGER_DIR = Path("/home/brianr/Documents/smeserver-manager/root/usr/share/smanager/lib/SrvMngr/I18N/Modules") def extract_language_from_filename(filename): - match = re.search(r'[_-]([a-z]{2}(?:-[a-z]{2})?)\.lex', filename, re.IGNORECASE) + match = re.search(r'[_-]([a-z]{2}(?:-[a-z]{2})?)\..*', filename, re.IGNORECASE) if match: return match.group(1).replace("-", "_").lower() return None @@ -101,7 +101,7 @@ def convert_lex_to_po(lex_file, po_file, en_entries, general_en_entries,IsGenera for msgctxt, msgstr in translated_entries.items(): msgid = en_entries.get(msgctxt, "") # Find the original text using msgctxt (Msg ID) if not msgid: - print(f"Warning: Could not find original text for Msg ID '{msgctxt}'") + print(f"Warning: Could not find original text for Msg ID '{msgctxt} ({language_code})") # See if in General msgid = general_en_entries.get(msgctxt, "") if not msgid: diff --git a/Po2Lex.py b/Po2Lex.py index b5a2b6b..7e22aff 100644 --- a/Po2Lex.py +++ b/Po2Lex.py @@ -1,32 +1,18 @@ -import re import os from pathlib import Path +import polib # Function to read and process .po file def process_po_file(file_name): - try: - with open(file_name, "r") as file: - content = file.read() - - entries = re.findall(r"(msgctxt\s+\".+?\"\nmsgid\s+\".+?\"\nmsgstr\s+\".+?\")", content, re.DOTALL) - - 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 = 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}) - - return result - except Exception as e: - print(f"Process_po_file Exception {e} in {file_name} {msgctxt_line}") - quit() + try: + po = polib.pofile(file_name) + result = [] + for entry in po: + result.append({"msgctxt": entry.msgctxt, "msgid": entry.msgid, "msgstr": entry.msgstr}) + return result + except Exception as e: + print(f"Process_po_file Exception {e} in {file_name}") + quit() # Function to create .lex file def create_lex_file(translations, lex_file_name): @@ -39,18 +25,16 @@ SOURCE_BASE_DIR = Path("/home/brianr/Documents/smeserver-manager-locale/root/usr # 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) - - 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) + module_name = Path(subdir).name + if module_name == 'Backup': + print(f"Processing {module_name}") + po_dir = Path(os.path.join(subdir, "pofiles")) + lex_dir = Path(os.path.join(subdir, "newlex")) + # Ensure the newlex directory exists + lex_dir.mkdir(parents=True, exist_ok=True) + 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)