spiegel-keyman/linux/scripts/create-test-po.py
Eberhard Beilharz 9d2b17613c
chore(linux): add manual test for localization
This change adds a manual test that allows to see if all strings are
localizable. It also fixes the `update-template` target in the
`Makefile`.

Build-bot: skip
Test-bot: skip
2025-12-15 19:05:58 +01:00

43 lines
1.4 KiB
Python
Executable file

#!/usr/bin/python3
# This script is used to convert all strings in a .po file to uppercase.
# It is used to test the .po file translations.
import polib
import sys
import re
# Requires installation of python3-polib
def uppercase_except_braces(s):
# Replace all text outside braces and %... (to next space) with uppercase, keep inside braces and %... as is
def repl(match):
text = match.group(0)
if text.startswith('{') and text.endswith('}'):
return text
return text if text.startswith('%') else text.upper()
# This regex splits the string into:
# - brace blocks: { ... }
# - percent blocks: %... (up to next space or end of string)
# - everything else
pattern = r'\{[^}]*\}|%[^\s]*|[^{%]+'
return re.sub(pattern, repl, s)
if len(sys.argv) != 3:
print(f"Usage: {sys.argv[0]} <file.po> <outfile.po>")
sys.exit(1)
po = polib.pofile(sys.argv[1])
for entry in po:
# Only update if not a fuzzy translation and not the header
if not entry.obsolete and entry.msgid and not entry.msgid_plural:
entry.msgstr = uppercase_except_braces(entry.msgid)
elif not entry.obsolete and entry.msgid:
# For plural forms
for idx in entry.msgstr_plural:
entry.msgstr_plural[idx] = uppercase_except_braces(entry.msgid_plural)
po.save(f"{sys.argv[2]}")
print(f"Updated file written to {sys.argv[2]}")