Index: packagerChrome.py |
diff --git a/packagerChrome.py b/packagerChrome.py |
index 3e1a452a1a5b79fa7ff7316930ac911aab8162a6..3996953cd753312a47bcfeef4814234e85f7e521 100644 |
--- a/packagerChrome.py |
+++ b/packagerChrome.py |
@@ -190,7 +190,7 @@ def toJson(data): |
).encode('utf-8') + '\n' |
-def importGeckoLocales(params, files): |
+def import_locales(params, files): |
import localeTools |
# FIXME: localeTools doesn't use real Chrome locales, it uses dash as |
@@ -227,12 +227,29 @@ def importGeckoLocales(params, files): |
data = json.loads(files[targetFile].decode('utf-8')) |
try: |
+ # .json and other formats provide translations differently and |
+ # / or provide additional information like e.g. "placeholders". |
+ # We want to adhere to that / preserve the addtional info |
if sourceFile.endswith('.json'): |
with io.open(sourceFile, 'r', encoding='utf-8') as handle: |
- sourceData = {k: v['message'] for k, v in json.load(handle).iteritems()} |
+ sourceData = json.load(handle) |
+ |
+ def get_value(data, stringID): |
+ return data[stringID]['message'] |
+ |
+ def set_translation(data, key, value, source, stringID): |
+ data[key] = {'messages': value} |
+ for k, v in source[stringID].items(): |
+ data[key].setdefault(k, v) |
else: |
sourceData = localeTools.readFile(sourceFile) |
+ def get_value(data, stringID): |
+ return data[stringID] |
+ |
+ def set_translation(data, key, value, *args): |
+ data[key] = {'message': value} |
+ |
# Resolve wildcard imports |
if keys == '*' or keys == '=*': |
importList = sourceData.keys() |
@@ -256,7 +273,7 @@ def importGeckoLocales(params, files): |
print 'Warning: locale string %s defined multiple times' % key |
# Remove access keys |
- value = sourceData[stringID] |
+ value = get_value(sourceData, stringID) |
match = re.search(r'^(.*?)\s*\(&.\)$', value) |
Sebastian Noack
2017/08/18 07:44:28
The logic to strip the access keys here is actuall
tlucas
2017/08/18 12:59:37
Ok - i will move this to the specific "get_value"
|
if match: |
value = match.group(1) |
@@ -264,7 +281,8 @@ def importGeckoLocales(params, files): |
index = value.find('&') |
if index >= 0: |
value = value[0:index] + value[index + 1:] |
- data[key] = {'message': value} |
+ |
+ set_translation(data, key, value, sourceData, stringID) |
except Exception as e: |
print 'Warning: error importing locale data from %s: %s' % (sourceFile, e) |
@@ -380,7 +398,7 @@ def createBuild(baseDir, type='chrome', outFile=None, buildNum=None, releaseBuil |
) |
if metadata.has_section('import_locales'): |
- importGeckoLocales(params, files) |
+ import_locales(params, files) |
files['manifest.json'] = createManifest(params, files) |
if type == 'chrome': |