Left: | ||
Right: |
OLD | NEW |
---|---|
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, os, re, json, struct | 7 import sys |
8 import os | |
9 import re | |
10 import json | |
11 import struct | |
12 import io | |
8 from StringIO import StringIO | 13 from StringIO import StringIO |
9 | 14 |
10 import packager | 15 import packager |
11 from packager import readMetadata, getMetadataPath, getDefaultFileName, getBuild Version, getTemplate, Files | 16 from packager import readMetadata, getMetadataPath, getDefaultFileName, getBuild Version, getTemplate, Files |
12 | 17 |
13 defaultLocale = 'en_US' | 18 defaultLocale = 'en_US' |
14 | 19 |
15 def getIgnoredFiles(params): | 20 def getIgnoredFiles(params): |
16 result = set(('store.description',)) | 21 result = set(('store.description',)) |
17 | 22 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 | 160 |
156 def toJson(data): | 161 def toJson(data): |
157 return json.dumps( | 162 return json.dumps( |
158 data, ensure_ascii=False, sort_keys=True, | 163 data, ensure_ascii=False, sort_keys=True, |
159 indent=2, separators=(',', ': ') | 164 indent=2, separators=(',', ': ') |
160 ).encode('utf-8') + '\n' | 165 ).encode('utf-8') + '\n' |
161 | 166 |
162 def importGeckoLocales(params, files): | 167 def importGeckoLocales(params, files): |
163 import localeTools | 168 import localeTools |
164 | 169 |
165 localeCodeMapping = { | 170 # We need to map Chrome locales to Gecko locales. Start by mapping Chrome |
166 'ar': 'ar', | 171 # locales to themselves, merely with the minus sign as separator. |
167 'bg': 'bg', | 172 locale_mapping = {l.replace('-', '_'): l for l in localeTools.chromeLocales} |
168 'ca': 'ca', | |
169 'cs': 'cs', | |
170 'da': 'da', | |
171 'de': 'de', | |
172 'el': 'el', | |
173 'en-US': 'en_US', | |
174 'en-GB': 'en_GB', | |
175 'es-ES': 'es', | |
176 'es-AR': 'es_419', | |
177 'et': 'et', | |
178 'fi': 'fi', | |
179 # '': 'fil', ??? | |
180 'fr': 'fr', | |
181 'he': 'he', | |
182 'hi-IN': 'hi', | |
183 'hr': 'hr', | |
184 'hu': 'hu', | |
185 'id': 'id', | |
186 'it': 'it', | |
187 'ja': 'ja', | |
188 'ko': 'ko', | |
189 'lt': 'lt', | |
190 'lv': 'lv', | |
191 'nl': 'nl', | |
192 # 'nb-NO': 'no', ??? | |
193 'pl': 'pl', | |
194 'pt-BR': 'pt_BR', | |
195 'pt-PT': 'pt_PT', | |
196 'ro': 'ro', | |
197 'ru': 'ru', | |
198 'sk': 'sk', | |
199 'sl': 'sl', | |
200 'sr': 'sr', | |
201 'sv-SE': 'sv', | |
202 'th': 'th', | |
203 'tr': 'tr', | |
204 'uk': 'uk', | |
205 'vi': 'vi', | |
206 'zh-CN': 'zh_CN', | |
207 'zh-TW': 'zh_TW', | |
208 } | |
209 | 173 |
210 for source, target in localeCodeMapping.iteritems(): | 174 # Convert values to Crowdin locales first (use Chrome => Crowdin mapping). |
175 for chrome_locale, crowdin_locale in localeTools.langMappingChrome.iteritems() : | |
176 locale_mapping[chrome_locale.replace('-', '_')] = crowdin_locale | |
Sebastian Noack
2014/12/17 14:11:46
I'd rather not duplicate the logic replacing the d
Wladimir Palant
2014/12/17 14:59:33
Done.
| |
177 | |
178 # Now convert values to Gecko locales (use Gecko => Crowdin mapping). | |
179 reverse_mapping = {v: k for k, v in locale_mapping.iteritems()} | |
180 for gecko_locale, crowdin_locale in localeTools.langMappingGecko.iteritems(): | |
181 if crowdin_locale in reverse_mapping: | |
182 locale_mapping[reverse_mapping[crowdin_locale]] = gecko_locale | |
183 | |
184 for target, source in locale_mapping.iteritems(): | |
211 targetFile = '_locales/%s/messages.json' % target | 185 targetFile = '_locales/%s/messages.json' % target |
186 if not targetFile in files: | |
187 continue | |
212 | 188 |
213 for item in params['metadata'].items('import_locales'): | 189 for item in params['metadata'].items('import_locales'): |
214 fileName, keys = item | 190 fileName, keys = item |
215 parts = map(lambda n: source if n == '*' else n, fileName.split('/')) | 191 parts = map(lambda n: source if n == '*' else n, fileName.split('/')) |
216 sourceFile = os.path.join(os.path.dirname(item.source), *parts) | 192 sourceFile = os.path.join(os.path.dirname(item.source), *parts) |
217 incompleteMarker = os.path.join(os.path.dirname(sourceFile), '.incomplete' ) | 193 incompleteMarker = os.path.join(os.path.dirname(sourceFile), '.incomplete' ) |
218 if not os.path.exists(sourceFile) or os.path.exists(incompleteMarker): | 194 if not os.path.exists(sourceFile) or os.path.exists(incompleteMarker): |
219 continue | 195 continue |
220 | 196 |
221 data = {} | 197 data = json.loads(files[targetFile].decode('utf-8')) |
222 if targetFile in files: | |
223 data = json.loads(files[targetFile].decode('utf-8')) | |
224 | 198 |
225 try: | 199 try: |
226 sourceData = localeTools.readFile(sourceFile) | 200 if sourceFile.endswith('.json'): |
201 with io.open(sourceFile, 'r', encoding='utf-8') as handle: | |
202 sourceData = {k: v['message'] for k, v in json.load(handle).iteritem s()} | |
203 else: | |
204 sourceData = localeTools.readFile(sourceFile) | |
227 | 205 |
228 # Resolve wildcard imports | 206 # Resolve wildcard imports |
229 if keys == '*' or keys == '=*': | 207 if keys == '*' or keys == '=*': |
230 importList = sourceData.keys() | 208 importList = sourceData.keys() |
231 importList = filter(lambda k: not k.startswith('_'), importList) | 209 importList = filter(lambda k: not k.startswith('_'), importList) |
232 if keys == '=*': | 210 if keys == '=*': |
233 importList = map(lambda k: '=' + k, importList) | 211 importList = map(lambda k: '=' + k, importList) |
234 keys = ' '.join(importList) | 212 keys = ' '.join(importList) |
235 | 213 |
236 for stringID in re.split(r'\s+', keys): | 214 for stringID in re.split(r'\s+', keys): |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
390 'lib/info.js' not in files): | 368 'lib/info.js' not in files): |
391 files['lib/info.js'] = createInfoModule(params) | 369 files['lib/info.js'] = createInfoModule(params) |
392 | 370 |
393 zipdata = files.zipToString() | 371 zipdata = files.zipToString() |
394 signature = None | 372 signature = None |
395 pubkey = None | 373 pubkey = None |
396 if keyFile != None: | 374 if keyFile != None: |
397 signature = signBinary(zipdata, keyFile) | 375 signature = signBinary(zipdata, keyFile) |
398 pubkey = getPublicKey(keyFile) | 376 pubkey = getPublicKey(keyFile) |
399 writePackage(outFile, pubkey, signature, zipdata) | 377 writePackage(outFile, pubkey, signature, zipdata) |
OLD | NEW |