Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 # coding: utf-8 | 1 # coding: utf-8 |
2 | 2 |
3 # This file is part of the Adblock Plus web scripts, | 3 # This file is part of the Adblock Plus web scripts, |
4 # Copyright (C) 2006-2015 Eyeo GmbH | 4 # Copyright (C) 2006-2015 Eyeo GmbH |
5 # | 5 # |
6 # Adblock Plus is free software: you can redistribute it and/or modify | 6 # Adblock Plus is free software: you can redistribute it and/or modify |
7 # it under the terms of the GNU General Public License version 3 as | 7 # it under the terms of the GNU General Public License version 3 as |
8 # published by the Free Software Foundation. | 8 # published by the Free Software Foundation. |
9 # | 9 # |
10 # Adblock Plus is distributed in the hope that it will be useful, | 10 # Adblock Plus is distributed in the hope that it will be useful, |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
121 def configure_locales(crowdin_api, local_locales, enabled_locales, | 121 def configure_locales(crowdin_api, local_locales, enabled_locales, |
122 defaultlocale): | 122 defaultlocale): |
123 logger.info("Checking which locales are supported by Crowdin...") | 123 logger.info("Checking which locales are supported by Crowdin...") |
124 response = crowdin_api.request("GET", "supported-languages") | 124 response = crowdin_api.request("GET", "supported-languages") |
125 | 125 |
126 supported_locales = {l["crowdin_code"] for l in response} | 126 supported_locales = {l["crowdin_code"] for l in response} |
127 | 127 |
128 # We need to map the locale names we use to the ones that Crowdin is expecting | 128 # We need to map the locale names we use to the ones that Crowdin is expecting |
129 # and at the same time ensure that they are supported. | 129 # and at the same time ensure that they are supported. |
130 required_locales = {} | 130 required_locales = {} |
131 skipped_locales = [] | |
132 for locale in local_locales: | 131 for locale in local_locales: |
133 if "_" in locale: | 132 if "_" in locale: |
134 crowdin_locale = locale.replace("_", "-") | 133 crowdin_locale = locale.replace("_", "-") |
135 elif locale in supported_locales: | 134 elif locale in supported_locales: |
136 crowdin_locale = locale | 135 crowdin_locale = locale |
137 else: | 136 else: |
138 crowdin_locale = "%s-%s" % (locale, locale.upper()) | 137 crowdin_locale = "%s-%s" % (locale, locale.upper()) |
139 | 138 |
140 if crowdin_locale in supported_locales: | 139 if crowdin_locale in supported_locales: |
141 required_locales[locale] = crowdin_locale | 140 required_locales[locale] = crowdin_locale |
142 else: | 141 else: |
143 skipped_locales.append(locale) | 142 logger.warning("Ignoring locale '%s', which Crowdin doesn't support", |
Sebastian Noack
2015/09/17 11:03:24
This code past hasn't been tested, obviously. ;)
Sebastian Noack
2015/09/17 12:42:15
Never mind. I just realized you turned it into a l
kzar
2015/09/17 14:43:55
Done.
| |
144 | 143 locale) |
145 if skipped_locales: | |
146 logger.warning("Ignoring locales that Crowdin doesn't support: %s", | |
147 ", ".join(skipped_locales)) | |
148 | 144 |
149 required_crowdin_locales = set(required_locales.values()) | 145 required_crowdin_locales = set(required_locales.values()) |
150 if not required_crowdin_locales.issubset(enabled_locales): | 146 if not required_crowdin_locales.issubset(enabled_locales): |
151 logger.info("Enabling the required locales for the Crowdin project...") | 147 logger.info("Enabling the required locales for the Crowdin project...") |
152 crowdin_api.request( | 148 crowdin_api.request( |
153 "POST", "edit-project", | 149 "POST", "edit-project", |
154 data={"languages": enabled_locales | required_crowdin_locales} | 150 data={"languages": enabled_locales | required_crowdin_locales} |
155 ) | 151 ) |
156 | 152 |
157 return required_locales | 153 return required_locales |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
259 for member in archive.namelist(): | 255 for member in archive.namelist(): |
260 path, file_name = posixpath.split(member) | 256 path, file_name = posixpath.split(member) |
261 ext = posixpath.splitext(file_name)[1] | 257 ext = posixpath.splitext(file_name)[1] |
262 path_parts = path.split(posixpath.sep) | 258 path_parts = path.split(posixpath.sep) |
263 locale, file_path = path_parts[0], path_parts[1:] | 259 locale, file_path = path_parts[0], path_parts[1:] |
264 if ext.lower() == ".json" and locale in inverted_required_locales: | 260 if ext.lower() == ".json" and locale in inverted_required_locales: |
265 output_path = os.path.join( | 261 output_path = os.path.join( |
266 locale_path, inverted_required_locales[locale], | 262 locale_path, inverted_required_locales[locale], |
267 *file_path + [file_name] | 263 *file_path + [file_name] |
268 ) | 264 ) |
269 with archive.open(member) as f, open(output_path, "wb") as f_target: | 265 with archive.open(member) as source_file, \ |
Sebastian Noack
2015/09/17 11:03:24
Nit: Please use consistent and more descriptive va
kzar
2015/09/17 14:43:55
Done.
| |
270 shutil.copyfileobj(f, f_target) | 266 open(output_path, "wb") as target_file: |
267 shutil.copyfileobj(source_file, target_file) | |
271 | 268 |
272 def crowdin_sync(source_dir, crowdin_api_key): | 269 def crowdin_sync(source_dir, crowdin_api_key): |
273 with FileSource(source_dir) as source: | 270 with FileSource(source_dir) as source: |
274 config = source.read_config() | 271 config = source.read_config() |
275 defaultlocale = config.get("general", "defaultlocale") | 272 defaultlocale = config.get("general", "defaultlocale") |
276 crowdin_project_name = config.get("general", "crowdin-project-name") | 273 crowdin_project_name = config.get("general", "crowdin-project-name") |
277 | 274 |
278 crowdin_api = CrowdinAPI(crowdin_api_key, crowdin_project_name) | 275 crowdin_api = CrowdinAPI(crowdin_api_key, crowdin_project_name) |
279 | 276 |
280 logger.info("Requesting project information...") | 277 logger.info("Requesting project information...") |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
316 if __name__ == "__main__": | 313 if __name__ == "__main__": |
317 if len(sys.argv) < 3: | 314 if len(sys.argv) < 3: |
318 print >>sys.stderr, "Usage: python -m cms.bin.translate www_directory crowdi n_project_api_key [logging_level]" | 315 print >>sys.stderr, "Usage: python -m cms.bin.translate www_directory crowdi n_project_api_key [logging_level]" |
319 sys.exit(1) | 316 sys.exit(1) |
320 | 317 |
321 logging.basicConfig() | 318 logging.basicConfig() |
322 logger.setLevel(sys.argv[3] if len(sys.argv) > 3 else logging.INFO) | 319 logger.setLevel(sys.argv[3] if len(sys.argv) > 3 else logging.INFO) |
323 | 320 |
324 source_dir, crowdin_api_key = sys.argv[1:3] | 321 source_dir, crowdin_api_key = sys.argv[1:3] |
325 crowdin_sync(source_dir, crowdin_api_key) | 322 crowdin_sync(source_dir, crowdin_api_key) |
LEFT | RIGHT |