Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: localeTools.py

Issue 29690867: Issue 104 - Added translation checking Base URL: https://hg.adblockplus.org/buildtools/file/097b8d9c43a8
Patch Set: Created Feb. 6, 2018, 2:22 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: localeTools.py
diff --git a/localeTools.py b/localeTools.py
index 38c937b4bb26f0d00fb76f6e974e1a5fc0b8dcb4..b8596f96a4177af5501f80fa136cefa16adc73aa 100644
--- a/localeTools.py
+++ b/localeTools.py
@@ -325,3 +325,37 @@ def getTranslations(localeConfig, projectName, key):
valid_extension = file.endswith('.json')
if os.path.isfile(path) and valid_extension and not file in files:
os.remove(path)
+
+
+def check_translations(localeConfig):
+ base_path = localeConfig['base_path']
+ for locale in os.listdir(base_path):
+ jsonpath = os.path.join(base_path, locale, 'messages.json')
+
+ if not os.path.exists(jsonpath):
+ continue
+
+ with codecs.open(jsonpath, 'rb', encoding='utf-8') as f:
+ try:
+ data = json.load(f)
+ for key, value in data.iteritems():
+ variables = set()
+ max_length = value.get('maxLength')
+ length = len(value['message'])
+ if (max_length is not None and
+ length > max_length or length > 160):
+ print >>sys.stderr, (
+ '{} {} -> translation might be too long.'
+ 'More then 160 chars or maxLength exceeded'
+ ).format(locale, key)
+
+ for match in re.finditer(r'\$(\S+?)\$', value['message']):
+ variables.add(match.group(1))
+ expected = set(value.get('placeholders', {}).iterkeys())
+ if variables != expected:
+ print >>sys.stderr, (
+ '{} {}: Variables used are {} '
+ 'expected. Variables: {}'
+ ).format(locale, key, variables, expected)
+ except ValueError:
+ print >>sys.stderr, locale + ', messages.json is not valid.'
« no previous file with comments | « build.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld