pull_locales_postprocess: deduplicate and placeholderize
This commit is contained in:
		
							parent
							
								
									50a2b5dd72
								
							
						
					
					
						commit
						bf94aa93cf
					
				|  | @ -1,2 +1,2 @@ | ||||||
| ruby pull_locales.rb | ruby pull_locales.rb | ||||||
| python fill_locale_placeholders.py | python pull_locales_postprocess.py | ||||||
|  |  | ||||||
|  | @ -3,23 +3,34 @@ import io, os, json, re | ||||||
| from collections import OrderedDict | from collections import OrderedDict | ||||||
| 
 | 
 | ||||||
| with io.open('_locales/en/messages.json', 'r', encoding='utf-8') as f: | with io.open('_locales/en/messages.json', 'r', encoding='utf-8') as f: | ||||||
|     english_placeholders = [(k, v['placeholders']) for k,v in json.load(f).items() |     items = json.load(f).items() | ||||||
|  |     english = [(k, v['message']) for k, v in items if 'message' in v] | ||||||
|  |     english_placeholders = [(k, v['placeholders']) for k,v in items | ||||||
|                             if 'placeholders' in v] |                             if 'placeholders' in v] | ||||||
| 
 | 
 | ||||||
| for locale_name in os.listdir('_locales'): | for locale_name in os.listdir('_locales'): | ||||||
|     if locale_name == 'en': |     if locale_name == 'en': | ||||||
|         continue |         continue | ||||||
|  |     if not re.match(r'^\w{2}(_\w{2,3})?$', locale_name): | ||||||
|  |         print('Skipped %s: not a locale dir' % locale_name) | ||||||
|  |         continue | ||||||
|     loc_path = '_locales/' + locale_name + '/messages.json' |     loc_path = '_locales/' + locale_name + '/messages.json' | ||||||
|     with io.open(loc_path, 'r+', encoding='utf-8') as f: |     with io.open(loc_path, 'r+', encoding='utf-8') as f: | ||||||
|         loc = json.load(f, object_pairs_hook=OrderedDict) |         loc = json.load(f, object_pairs_hook=OrderedDict) | ||||||
| 
 | 
 | ||||||
|  |         deduplicated = 0 | ||||||
|  |         for msgId, message in english: | ||||||
|  |             if msgId in loc and loc[msgId].get('message', '') == message: | ||||||
|  |                 del loc[msgId] | ||||||
|  |                 deduplicated += 1 | ||||||
|  | 
 | ||||||
|         changed = 0 |         changed = 0 | ||||||
|         for msgId, placeholder in english_placeholders: |         for msgId, placeholder in english_placeholders: | ||||||
|             if msgId in loc and cmp(placeholder, loc[msgId].get('placeholders', None))!=0: |             if msgId in loc and cmp(placeholder, loc[msgId].get('placeholders', None)) != 0: | ||||||
|                 loc[msgId]['placeholders'] = placeholder |                 loc[msgId]['placeholders'] = placeholder | ||||||
|                 changed += 1 |                 changed += 1 | ||||||
| 
 | 
 | ||||||
|         if changed > 0: |         if deduplicated > 0 or changed > 0: | ||||||
|             f.seek(0) |             f.seek(0) | ||||||
|             json_str = json.dumps(loc, indent=1, ensure_ascii=False, |             json_str = json.dumps(loc, indent=1, ensure_ascii=False, | ||||||
|                                   separators=(',', ': '), encoding='utf-8') |                                   separators=(',', ': '), encoding='utf-8') | ||||||
|  | @ -27,4 +38,8 @@ for locale_name in os.listdir('_locales'): | ||||||
|                                json_str, flags=re.MULTILINE) |                                json_str, flags=re.MULTILINE) | ||||||
|             f.write(json_tabs) |             f.write(json_tabs) | ||||||
|             f.truncate() |             f.truncate() | ||||||
|             print 'Placeholders added to %s: %d' % (locale_name, changed) |             print('%s: %d deduplicated%s' % ( | ||||||
|  |                 locale_name, | ||||||
|  |                 deduplicated, | ||||||
|  |                 ', %d placeholder(s) added' % changed if changed else '' | ||||||
|  |             )) | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user