mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 00:15:32 +00:00
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
43 lines
1.4 KiB
Python
Executable file
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]}")
|