73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
import sys
|
|
import os
|
|
from args import args
|
|
from assetcache import assetCache, assetGetCache
|
|
from assethelpers import getAssetRelativePath
|
|
import polib
|
|
import re
|
|
|
|
LANGUAGE_DATA = {}
|
|
LANGUAGE_KEYS = []
|
|
|
|
def processLanguageList():
|
|
# Language keys header data
|
|
headerKeys = "// Auto-generated language keys header file.\n"
|
|
headerKeys += "#pragma once\n"
|
|
headerKeys += "#include \"dusk.h\"\n\n"
|
|
|
|
keyIndex = 0
|
|
for key in LANGUAGE_KEYS:
|
|
headerKeys += f"#define {getLanguageVariableName(key)} {keyIndex}\n"
|
|
keyIndex += 1
|
|
|
|
for lang in LANGUAGE_DATA:
|
|
if key not in LANGUAGE_DATA[lang]:
|
|
print(f"Warning: Missing translation for key '{key}' in language '{lang}'")
|
|
sys.exit(1)
|
|
|
|
headerKeys += f"\n#define LANG_KEY_COUNT {len(LANGUAGE_KEYS)}\n"
|
|
|
|
# Write out the language keys header file
|
|
outputFile = os.path.join(args.headers_dir, "locale", "language", "keys.h")
|
|
os.makedirs(os.path.dirname(outputFile), exist_ok=True)
|
|
with open(outputFile, "w") as f:
|
|
f.write(headerKeys)
|
|
|
|
def getLanguageVariableName(languageKey):
|
|
# Take the language key, prepend LANG_, uppercase, replace any non symbols
|
|
# with _
|
|
key = languageKey.strip().upper()
|
|
key = re.sub(r'[^A-Z0-9]', '_', key)
|
|
return f"LANG_{key}"
|
|
|
|
def processLanguage(asset):
|
|
cache = assetGetCache(asset['path'])
|
|
if cache is not None:
|
|
return cache
|
|
|
|
# Load PO File
|
|
po = polib.pofile(asset['path'])
|
|
|
|
langName = po.metadata.get('Language')
|
|
if langName not in LANGUAGE_DATA:
|
|
LANGUAGE_DATA[langName] = {}
|
|
|
|
for entry in po:
|
|
key = entry.msgid
|
|
val = entry.msgstr
|
|
|
|
if key not in LANGUAGE_KEYS:
|
|
LANGUAGE_KEYS.append(key)
|
|
|
|
if key not in LANGUAGE_DATA[langName]:
|
|
LANGUAGE_DATA[langName][key] = val
|
|
else:
|
|
print(f"Error: Duplicate translation key '{key}' in language '{langName}'")
|
|
sys.exit(1)
|
|
|
|
outLanguageData = {
|
|
'data': po,
|
|
'path': asset['path'],
|
|
'files': []
|
|
}
|
|
return assetCache(asset['path'], outLanguageData) |