Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 # coding: utf-8 | 1 # coding: utf-8 |
2 | 2 |
3 # This Source Code Form is subject to the terms of the Mozilla Public | 3 # This Source Code Form is subject to the terms of the Mozilla Public |
4 # License, v. 2.0. If a copy of the MPL was not distributed with this | 4 # License, v. 2.0. If a copy of the MPL was not distributed with this |
5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
6 | 6 |
7 import sys | 7 import sys |
8 import os | 8 import os |
9 import re | 9 import re |
10 import json | 10 import json |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 | 160 |
161 def toJson(data): | 161 def toJson(data): |
162 return json.dumps( | 162 return json.dumps( |
163 data, ensure_ascii=False, sort_keys=True, | 163 data, ensure_ascii=False, sort_keys=True, |
164 indent=2, separators=(',', ': ') | 164 indent=2, separators=(',', ': ') |
165 ).encode('utf-8') + '\n' | 165 ).encode('utf-8') + '\n' |
166 | 166 |
167 def importGeckoLocales(params, files): | 167 def importGeckoLocales(params, files): |
168 import localeTools | 168 import localeTools |
169 | 169 |
170 # We need to map Gecko locales to Chrome locales. Start by mapping Chrome | 170 # FIXME: localeTools doesn't use real Chrome locales, it uses dash as |
171 # locales to themselves. | 171 # separator instead. |
172 locale_mapping = {l: l for l in localeTools.chromeLocales} | 172 convert_locale_code = lambda code: code.replace('-', '_') |
173 | |
174 # We need to map Chrome locales to Gecko locales. Start by mapping Chrome | |
175 # locales to themselves, merely with the dash as separator. | |
176 locale_mapping = {convert_locale_code(l): l for l in localeTools.chromeLocales } | |
173 | 177 |
174 # Convert values to Crowdin locales first (use Chrome => Crowdin mapping). | 178 # Convert values to Crowdin locales first (use Chrome => Crowdin mapping). |
175 for chrome_locale, crowdin_locale in localeTools.langMappingChrome.iteritems() : | 179 for chrome_locale, crowdin_locale in localeTools.langMappingChrome.iteritems() : |
176 locale_mapping[chrome_locale] = crowdin_locale | 180 locale_mapping[convert_locale_code(chrome_locale)] = crowdin_locale |
177 | 181 |
178 # Now convert values to Gecko locales (use Gecko => Crowdin mapping). | 182 # Now convert values to Gecko locales (use Gecko => Crowdin mapping). |
179 def get_key(dict, value): | 183 reverse_mapping = {v: k for k, v in locale_mapping.iteritems()} |
Sebastian Noack
2014/12/17 09:04:06
Maybe I overlook something here? But it seems that
Wladimir Palant
2014/12/17 10:09:54
This will produce lots of duplicates - we need eac
Sebastian Noack
2014/12/17 10:18:36
Well, I were hoping to get rid of get_key() by doi
Wladimir Palant
2014/12/17 10:25:49
I think we can only do this by reversing the mappi
Sebastian Noack
2014/12/17 10:31:49
Both sounds good to me.
Wladimir Palant
2014/12/17 13:21:12
Ok, the current approach removes unnecessary steps
| |
180 for k, v in dict.iteritems(): | |
181 if v == value: | |
182 return k | |
183 return None | |
184 | |
185 for gecko_locale, crowdin_locale in localeTools.langMappingGecko.iteritems(): | 184 for gecko_locale, crowdin_locale in localeTools.langMappingGecko.iteritems(): |
186 chrome_locale = get_key(locale_mapping, crowdin_locale) | 185 if crowdin_locale in reverse_mapping: |
187 if chrome_locale is not None: | 186 locale_mapping[reverse_mapping[crowdin_locale]] = gecko_locale |
188 locale_mapping[chrome_locale] = gecko_locale | 187 |
189 | 188 for target, source in locale_mapping.iteritems(): |
190 # Reverse mapping and make sure keys use underscores as separator | |
191 locale_mapping = {v: k.replace('-', '_') for k, v in locale_mapping.iteritems( )} | |
192 | |
193 for source, target in locale_mapping.iteritems(): | |
194 targetFile = '_locales/%s/messages.json' % target | 189 targetFile = '_locales/%s/messages.json' % target |
195 if not targetFile in files: | 190 if not targetFile in files: |
196 continue | 191 continue |
197 | 192 |
198 for item in params['metadata'].items('import_locales'): | 193 for item in params['metadata'].items('import_locales'): |
199 fileName, keys = item | 194 fileName, keys = item |
200 parts = map(lambda n: source if n == '*' else n, fileName.split('/')) | 195 parts = map(lambda n: source if n == '*' else n, fileName.split('/')) |
201 sourceFile = os.path.join(os.path.dirname(item.source), *parts) | 196 sourceFile = os.path.join(os.path.dirname(item.source), *parts) |
202 incompleteMarker = os.path.join(os.path.dirname(sourceFile), '.incomplete' ) | 197 incompleteMarker = os.path.join(os.path.dirname(sourceFile), '.incomplete' ) |
203 if not os.path.exists(sourceFile) or os.path.exists(incompleteMarker): | 198 if not os.path.exists(sourceFile) or os.path.exists(incompleteMarker): |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
377 'lib/info.js' not in files): | 372 'lib/info.js' not in files): |
378 files['lib/info.js'] = createInfoModule(params) | 373 files['lib/info.js'] = createInfoModule(params) |
379 | 374 |
380 zipdata = files.zipToString() | 375 zipdata = files.zipToString() |
381 signature = None | 376 signature = None |
382 pubkey = None | 377 pubkey = None |
383 if keyFile != None: | 378 if keyFile != None: |
384 signature = signBinary(zipdata, keyFile) | 379 signature = signBinary(zipdata, keyFile) |
385 pubkey = getPublicKey(keyFile) | 380 pubkey = getPublicKey(keyFile) |
386 writePackage(outFile, pubkey, signature, zipdata) | 381 writePackage(outFile, pubkey, signature, zipdata) |
LEFT | RIGHT |