| Index: import_locales.py |
| =================================================================== |
| new file mode 100755 |
| --- /dev/null |
| +++ b/import_locales.py |
| @@ -0,0 +1,115 @@ |
| +#!/usr/bin/env python |
| + |
| +import codecs |
| +from ConfigParser import ConfigParser |
|
Wladimir Palant
2014/08/06 06:09:04
We generally use SafeConfigParser
|
| +import os |
| + |
| +from buildtools import localeTools |
| + |
| +ie_locales = [ |
| + "ar", |
| + "bg", |
| + "ca", |
| + "cs", |
| + "da", |
| + "de", |
| + "el", |
| + "en", |
| + "es-ES", |
| + "et", |
| + "fi", |
| + "fil", |
| + "fr", |
| + "he", |
| + "hi", |
| + "hr", |
| + "hu", |
| + "it", |
| + "ja", |
| + "kn", |
| + "mr", |
| + "ms", |
| + "nb", |
| + "nl", |
| + "nn-NO", |
| + "pl", |
| + "pt-BR", |
| + "pt-PT", |
| + "ro", |
| + "ru", |
| + "sk", |
| + "sv-SE", |
| + "th", |
| + "tr", |
| + "uk", |
| + "ur-PK", |
| + "zh-CN", |
| + "zh-TW" |
| +] |
|
Felix Dahlke
2014/08/06 10:32:08
Yes, I just took the list of locales we currently
|
| + |
| +locale_mapping = { |
| + "en": "en-US", |
| + "hi": "hi-IN", |
| + "nb": "nb-NO" |
|
Felix Dahlke
2014/08/06 10:32:08
Here's a follow-up for that:
https://issues.adbloc
|
| +} |
| + |
| +strings_to_import = { |
| + "firstRun.properties/firstRun_acceptableAdsHeadline": "first-run/first-run-aa-title", |
| + "firstRun.properties/firstRun_acceptableAdsExplanation": "first-run/first-run-aa-text", |
| + "filters.dtd/acceptableAds2.label": "settings/settings-acceptable-ads" |
| +} |
| + |
| +def read_gecko_locale_strings(locale): |
| + locale_base_path = "libadblockplus/adblockplus/chrome/locale" |
| + locale_files = ["firstRun.properties", "filters.dtd"] |
| + locale_strings = {} |
| + for locale_file in locale_files: |
| + locale_file_path = "%s/%s/%s" % ( |
| + locale_base_path, locale, locale_file) |
| + if os.path.exists(locale_file_path): |
| + locale_strings[locale_file] = localeTools.readFile(locale_file_path) |
| + else: |
| + locale_strings[locale_file] = {} |
| + return locale_strings |
| + |
| +# This is to keep the locale file format largely intact - ConfigParser.write() |
| +# puts spaces around equal signs. |
| +def write_ini(config, file): |
| + for index, section in enumerate(config.sections()): |
| + if index > 0: |
| + file.write("\n") |
| + file.write("[%s]\n" % section) |
| + items = config.items(section) |
| + for item in items: |
| + file.write("%s=%s\n" % item) |
|
Felix Dahlke
2014/08/06 10:32:08
Done.
|
| + |
| +def import_locale(ie_locale): |
| + if ie_locale in locale_mapping: |
| + gecko_locale = locale_mapping[ie_locale] |
| + else: |
| + gecko_locale = ie_locale |
| + gecko_locale_strings = read_gecko_locale_strings(gecko_locale) |
| + |
| + ie_locale_path = "locales/%s.ini" % ie_locale |
| + config = ConfigParser() |
| + config.optionxform = str |
| + with codecs.open(ie_locale_path, "r", "utf-8") as ie_locale_file: |
| + config.readfp(ie_locale_file) |
| + |
| + for source, target in strings_to_import.iteritems(): |
| + source_section, source_key = source.split("/") |
| + target_section, target_key = target.split("/") |
| + if source_key in gecko_locale_strings[source_section]: |
| + value = gecko_locale_strings[source_section][source_key] |
| + value = value.replace("&", "") |
|
Wladimir Palant
2014/08/06 06:11:04
This won't do the job for CJK locales. The strings
|
| + config.set(target_section, target_key, value) |
| + |
| + with codecs.open(ie_locale_path, "w", "utf-8") as ie_locale_file: |
| + write_ini(config, ie_locale_file) |
| + |
| +def import_locales(): |
| + for ie_locale in ie_locales: |
| + import_locale(ie_locale) |
| + |
| +if __name__ == "__main__": |
| + import_locales() |