pull_locales_postprocess.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #! python2
  2. import io, os, json, re
  3. from collections import OrderedDict
  4. with io.open('../_locales/en/messages.json', 'r', encoding='utf-8') as f:
  5. items = json.load(f).items()
  6. english = [(k, v['message']) for k, v in items if 'message' in v]
  7. english_placeholders = [(k, v['placeholders']) for k,v in items
  8. if 'placeholders' in v]
  9. for locale_name in os.listdir('../_locales'):
  10. if locale_name == 'en':
  11. continue
  12. if not re.match(r'^\w{2}(_\w{2,3})?$', locale_name):
  13. print('Skipped %s: not a locale dir' % locale_name)
  14. continue
  15. loc_path = '../_locales/' + locale_name + '/messages.json'
  16. with io.open(loc_path, 'r+', encoding='utf-8') as f:
  17. loc = json.load(f, object_pairs_hook=OrderedDict)
  18. deduplicated = 0
  19. for msgId, message in english:
  20. if msgId in loc and loc[msgId].get('message', '') == message:
  21. del loc[msgId]
  22. deduplicated += 1
  23. changed = 0
  24. for msgId, placeholder in english_placeholders:
  25. if msgId in loc and cmp(placeholder, loc[msgId].get('placeholders', None)) != 0:
  26. loc[msgId]['placeholders'] = placeholder
  27. changed += 1
  28. if deduplicated > 0 or changed > 0:
  29. f.seek(0)
  30. json_str = json.dumps(loc, indent=1, ensure_ascii=False,
  31. separators=(',', ': '), encoding='utf-8')
  32. json_tabs = re.sub(r'^\s+', lambda s: s.group(0).replace(' ', '\t'),
  33. json_str, flags=re.MULTILINE)
  34. f.write(json_tabs)
  35. f.truncate()
  36. print('%s: %d deduplicated%s' % (
  37. locale_name,
  38. deduplicated,
  39. ', %d placeholder(s) added' % changed if changed else ''
  40. ))