| OLD | NEW |
| 1 # This Source Code Form is subject to the terms of the Mozilla Public | 1 # This Source Code Form is subject to the terms of the Mozilla Public |
| 2 # License, v. 2.0. If a copy of the MPL was not distributed with this | 2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. | 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| 4 | 4 |
| 5 import re | 5 import re |
| 6 import os | 6 import os |
| 7 import sys | 7 import sys |
| 8 import codecs | 8 import codecs |
| 9 import json | 9 import json |
| 10 import urllib | 10 import urllib |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 | 30 |
| 31 langMappingChrome = { | 31 langMappingChrome = { |
| 32 'es-419': 'es-MX', | 32 'es-419': 'es-MX', |
| 33 'es': 'es-ES', | 33 'es': 'es-ES', |
| 34 'sv': 'sv-SE', | 34 'sv': 'sv-SE', |
| 35 'ml': 'ml-IN', | 35 'ml': 'ml-IN', |
| 36 'gu': 'gu-IN', | 36 'gu': 'gu-IN', |
| 37 } | 37 } |
| 38 | 38 |
| 39 chromeLocales = [ | 39 chromeLocales = [ |
| 40 "am", | 40 'am', |
| 41 "ar", | 41 'ar', |
| 42 "bg", | 42 'bg', |
| 43 "bn", | 43 'bn', |
| 44 "ca", | 44 'ca', |
| 45 "cs", | 45 'cs', |
| 46 "da", | 46 'da', |
| 47 "de", | 47 'de', |
| 48 "el", | 48 'el', |
| 49 "en-GB", | 49 'en-GB', |
| 50 "en-US", | 50 'en-US', |
| 51 "es-419", | 51 'es-419', |
| 52 "es", | 52 'es', |
| 53 "et", | 53 'et', |
| 54 "fa", | 54 'fa', |
| 55 "fi", | 55 'fi', |
| 56 "fil", | 56 'fil', |
| 57 "fr", | 57 'fr', |
| 58 "gu", | 58 'gu', |
| 59 "he", | 59 'he', |
| 60 "hi", | 60 'hi', |
| 61 "hr", | 61 'hr', |
| 62 "hu", | 62 'hu', |
| 63 "id", | 63 'id', |
| 64 "it", | 64 'it', |
| 65 "ja", | 65 'ja', |
| 66 "kn", | 66 'kn', |
| 67 "ko", | 67 'ko', |
| 68 "lt", | 68 'lt', |
| 69 "lv", | 69 'lv', |
| 70 "ml", | 70 'ml', |
| 71 "mr", | 71 'mr', |
| 72 "ms", | 72 'ms', |
| 73 "nb", | 73 'nb', |
| 74 "nl", | 74 'nl', |
| 75 "pl", | 75 'pl', |
| 76 "pt-BR", | 76 'pt-BR', |
| 77 "pt-PT", | 77 'pt-PT', |
| 78 "ro", | 78 'ro', |
| 79 "ru", | 79 'ru', |
| 80 "sk", | 80 'sk', |
| 81 "sl", | 81 'sl', |
| 82 "sr", | 82 'sr', |
| 83 "sv", | 83 'sv', |
| 84 "sw", | 84 'sw', |
| 85 "ta", | 85 'ta', |
| 86 "te", | 86 'te', |
| 87 "th", | 87 'th', |
| 88 "tr", | 88 'tr', |
| 89 "uk", | 89 'uk', |
| 90 "vi", | 90 'vi', |
| 91 "zh-CN", | 91 'zh-CN', |
| 92 "zh-TW", | 92 'zh-TW', |
| 93 ] | 93 ] |
| 94 | 94 |
| 95 | 95 |
| 96 class OrderedDict(dict): | 96 class OrderedDict(dict): |
| 97 def __init__(self): | 97 def __init__(self): |
| 98 self.__order = [] | 98 self.__order = [] |
| 99 | 99 |
| 100 def __setitem__(self, key, value): | 100 def __setitem__(self, key, value): |
| 101 self.__order.append(key) | 101 self.__order.append(key) |
| 102 dict.__setitem__(self, key, value) | 102 dict.__setitem__(self, key, value) |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 | 262 |
| 263 | 263 |
| 264 def preprocessChromeLocale(path, metadata, isMaster): | 264 def preprocessChromeLocale(path, metadata, isMaster): |
| 265 fileHandle = codecs.open(path, 'rb', encoding='utf-8') | 265 fileHandle = codecs.open(path, 'rb', encoding='utf-8') |
| 266 data = json.load(fileHandle) | 266 data = json.load(fileHandle) |
| 267 fileHandle.close() | 267 fileHandle.close() |
| 268 | 268 |
| 269 for key, value in data.iteritems(): | 269 for key, value in data.iteritems(): |
| 270 if isMaster: | 270 if isMaster: |
| 271 # Make sure the key name is listed in the description | 271 # Make sure the key name is listed in the description |
| 272 if "description" in value: | 272 if 'description' in value: |
| 273 value["description"] = "%s: %s" % (key, value["description"]) | 273 value['description'] = '%s: %s' % (key, value['description']) |
| 274 else: | 274 else: |
| 275 value["description"] = key | 275 value['description'] = key |
| 276 else: | 276 else: |
| 277 # Delete description from translations | 277 # Delete description from translations |
| 278 if "description" in value: | 278 if 'description' in value: |
| 279 del value["description"] | 279 del value['description'] |
| 280 | 280 |
| 281 return json.dumps(data, ensure_ascii=False, sort_keys=True, indent=2) | 281 return json.dumps(data, ensure_ascii=False, sort_keys=True, indent=2) |
| 282 | 282 |
| 283 | 283 |
| 284 def postprocessChromeLocale(path, data): | 284 def postprocessChromeLocale(path, data): |
| 285 parsed = json.loads(data) | 285 parsed = json.loads(data) |
| 286 if isinstance(parsed, list): | 286 if isinstance(parsed, list): |
| 287 return | 287 return |
| 288 | 288 |
| 289 # Delete description from translations | 289 # Delete description from translations |
| 290 for key, value in parsed.iteritems(): | 290 for key, value in parsed.iteritems(): |
| 291 if "description" in value: | 291 if 'description' in value: |
| 292 del value["description"] | 292 del value['description'] |
| 293 | 293 |
| 294 file = codecs.open(path, 'wb', encoding='utf-8') | 294 file = codecs.open(path, 'wb', encoding='utf-8') |
| 295 json.dump(parsed, file, ensure_ascii=False, sort_keys=True, indent=2, separa
tors=(',', ': ')) | 295 json.dump(parsed, file, ensure_ascii=False, sort_keys=True, indent=2, separa
tors=(',', ': ')) |
| 296 file.close() | 296 file.close() |
| 297 | 297 |
| 298 | 298 |
| 299 def setupTranslations(localeConfig, projectName, key): | 299 def setupTranslations(localeConfig, projectName, key): |
| 300 # Make a new set from the locales list, mapping to Crowdin friendly format | 300 # Make a new set from the locales list, mapping to Crowdin friendly format |
| 301 locales = {mapLocale(localeConfig['name_format'], locale) | 301 locales = {mapLocale(localeConfig['name_format'], locale) |
| 302 for locale in localeConfig['locales']} | 302 for locale in localeConfig['locales']} |
| (...skipping 12 matching lines...) Expand all Loading... |
| 315 if match.group(0).find('Install Language Pack') >= 0: | 315 if match.group(0).find('Install Language Pack') >= 0: |
| 316 match2 = re.search(r'lang="([\w\-]+)"', match.group(0)) | 316 match2 = re.search(r'lang="([\w\-]+)"', match.group(0)) |
| 317 if match2: | 317 if match2: |
| 318 locales.add(mapLocale('BCP-47', match2.group(1))) | 318 locales.add(mapLocale('BCP-47', match2.group(1))) |
| 319 | 319 |
| 320 allowed = set() | 320 allowed = set() |
| 321 allowedLocales = urllib2.urlopen('http://crowdin.net/page/language-codes').r
ead() | 321 allowedLocales = urllib2.urlopen('http://crowdin.net/page/language-codes').r
ead() |
| 322 for match in re.finditer(r'<tr>\s*<td\b[^<>]*>([\w\-]+)</td>', allowedLocale
s, re.S): | 322 for match in re.finditer(r'<tr>\s*<td\b[^<>]*>([\w\-]+)</td>', allowedLocale
s, re.S): |
| 323 allowed.add(match.group(1)) | 323 allowed.add(match.group(1)) |
| 324 if not allowed.issuperset(locales): | 324 if not allowed.issuperset(locales): |
| 325 print 'Warning, following locales aren\'t allowed by server: ' + ', '.jo
in(locales - allowed) | 325 print "Warning, following locales aren't allowed by server: " + ', '.joi
n(locales - allowed) |
| 326 | 326 |
| 327 locales = list(locales & allowed) | 327 locales = list(locales & allowed) |
| 328 locales.sort() | 328 locales.sort() |
| 329 params = urllib.urlencode([('languages[]', locale) for locale in locales]) | 329 params = urllib.urlencode([('languages[]', locale) for locale in locales]) |
| 330 result = urllib2.urlopen('http://api.crowdin.net/api/project/%s/edit-project
?key=%s' % (projectName, key), params).read() | 330 result = urllib2.urlopen('http://api.crowdin.net/api/project/%s/edit-project
?key=%s' % (projectName, key), params).read() |
| 331 if result.find('<success') < 0: | 331 if result.find('<success') < 0: |
| 332 raise Exception('Server indicated that the operation was not successful\
n' + result) | 332 raise Exception('Server indicated that the operation was not successful\
n' + result) |
| 333 | 333 |
| 334 | 334 |
| 335 def postFiles(files, url): | 335 def postFiles(files, url): |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 | 482 |
| 483 # Remove any extra files | 483 # Remove any extra files |
| 484 for dir, files in dirs.iteritems(): | 484 for dir, files in dirs.iteritems(): |
| 485 baseDir = os.path.join(localeConfig['base_path'], dir) | 485 baseDir = os.path.join(localeConfig['base_path'], dir) |
| 486 if not os.path.exists(baseDir): | 486 if not os.path.exists(baseDir): |
| 487 continue | 487 continue |
| 488 for file in os.listdir(baseDir): | 488 for file in os.listdir(baseDir): |
| 489 path = os.path.join(baseDir, file) | 489 path = os.path.join(baseDir, file) |
| 490 if os.path.isfile(path) and (file.endswith('.json') or file.endswith
('.properties') or file.endswith('.dtd')) and not file in files: | 490 if os.path.isfile(path) and (file.endswith('.json') or file.endswith
('.properties') or file.endswith('.dtd')) and not file in files: |
| 491 os.remove(path) | 491 os.remove(path) |
| OLD | NEW |