Move po2lex to use polib and (Lex2Po.py) add more info to entries in .lex file not found in _en file

This commit is contained in:
Brian Read 2024-07-20 10:59:35 +01:00
parent aa70bcaa46
commit d56452ead1
3 changed files with 26 additions and 41 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.log

View File

@ -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") SOURCE_MANAGER_DIR = Path("/home/brianr/Documents/smeserver-manager/root/usr/share/smanager/lib/SrvMngr/I18N/Modules")
def extract_language_from_filename(filename): 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: if match:
return match.group(1).replace("-", "_").lower() return match.group(1).replace("-", "_").lower()
return None 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(): for msgctxt, msgstr in translated_entries.items():
msgid = en_entries.get(msgctxt, "") # Find the original text using msgctxt (Msg ID) msgid = en_entries.get(msgctxt, "") # Find the original text using msgctxt (Msg ID)
if not msgid: 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 # See if in General
msgid = general_en_entries.get(msgctxt, "") msgid = general_en_entries.get(msgctxt, "")
if not msgid: if not msgid:

View File

@ -1,31 +1,17 @@
import re
import os import os
from pathlib import Path from pathlib import Path
import polib
# Function to read and process .po file # Function to read and process .po file
def process_po_file(file_name): def process_po_file(file_name):
try: try:
with open(file_name, "r") as file: po = polib.pofile(file_name)
content = file.read()
entries = re.findall(r"(msgctxt\s+\".+?\"\nmsgid\s+\".+?\"\nmsgstr\s+\".+?\")", content, re.DOTALL)
result = [] result = []
for entry in entries: for entry in po:
lines = entry.split("\n") result.append({"msgctxt": entry.msgctxt, "msgid": entry.msgid, "msgstr": entry.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)))
result.append({"msgctxt": msgctxt, "msgid": msgid, "msgstr": msgstr})
return result return result
except Exception as e: except Exception as e:
print(f"Process_po_file Exception {e} in {file_name} {msgctxt_line}") print(f"Process_po_file Exception {e} in {file_name}")
quit() quit()
# Function to create .lex file # Function to create .lex file
@ -40,14 +26,12 @@ SOURCE_BASE_DIR = Path("/home/brianr/Documents/smeserver-manager-locale/root/usr
# Iterate over subdirectories in SOURCE_BASE_DIR # Iterate over subdirectories in SOURCE_BASE_DIR
for subdir in [subdir.path for subdir in os.scandir(SOURCE_BASE_DIR) if subdir.is_dir()]: for subdir in [subdir.path for subdir in os.scandir(SOURCE_BASE_DIR) if subdir.is_dir()]:
module_name = Path(subdir).name module_name = Path(subdir).name
if module_name == 'Backup':
print(f"Processing {module_name}") print(f"Processing {module_name}")
po_dir = Path(os.path.join(subdir, "pofiles")) po_dir = Path(os.path.join(subdir, "pofiles"))
#print(po_dir)
lex_dir = Path(os.path.join(subdir, "newlex")) lex_dir = Path(os.path.join(subdir, "newlex"))
#print(lex_dir)
# Ensure the newlex directory exists # Ensure the newlex directory exists
lex_dir.mkdir(parents=True, exist_ok=True) lex_dir.mkdir(parents=True, exist_ok=True)
for file in os.listdir(po_dir): for file in os.listdir(po_dir):
if file.endswith(".po"): if file.endswith(".po"):
po_file_path = Path(os.path.join(po_dir, file)) po_file_path = Path(os.path.join(po_dir, file))