 Issue 29587910:
  Issue 104 - added checktranslations function
    
  
    Issue 29587910:
  Issue 104 - added checktranslations function 
  | Index: localeTools.py | 
| diff --git a/localeTools.py b/localeTools.py | 
| index b6554e0aa52461a7347c843a3b251d035ec34652..0dcbc91c6e7b0045c29dcb979545efa744b39414 100644 | 
| --- a/localeTools.py | 
| +++ b/localeTools.py | 
| @@ -300,3 +300,36 @@ 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) | 
| + except ValueError: | 
| + print >>sys.stderr, locale + ', messages.json is not valid.' | 
| + | 
| + for key, value in data.iteritems(): | 
| 
tlucas
2017/11/13 12:23:51
NOT LGTM, found a late error. sorry.
When a messa
 
erick
2017/11/20 11:41:09
Done. tox and flake8 were fine, too.
 | 
| + 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) |