 Issue 29317015:
  Issue 2625 - [cms] Crowdin synchronisation script  (Closed)
    
  
    Issue 29317015:
  Issue 2625 - [cms] Crowdin synchronisation script  (Closed) 
  | Left: | ||
| Right: | 
| OLD | NEW | 
|---|---|
| 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 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 118 self._key = key | 118 self._key = key | 
| 119 self._attribute_parser = AttributeParser(self.whitelist) | 119 self._attribute_parser = AttributeParser(self.whitelist) | 
| 120 | 120 | 
| 121 # Read in any parameters specified at the beginning of the file | 121 # Read in any parameters specified at the beginning of the file | 
| 122 lines = params[key].splitlines(True) | 122 lines = params[key].splitlines(True) | 
| 123 while lines and re.search(r"^\s*[\w\-]+\s*=", lines[0]): | 123 while lines and re.search(r"^\s*[\w\-]+\s*=", lines[0]): | 
| 124 name, value = lines.pop(0).split("=", 1) | 124 name, value = lines.pop(0).split("=", 1) | 
| 125 params[name.strip()] = value.strip() | 125 params[name.strip()] = value.strip() | 
| 126 params[key] = "".join(lines) | 126 params[key] = "".join(lines) | 
| 127 | 127 | 
| 128 def localize_string(self, name, default, localedata, escapes): | 128 def localize_string(self, page, name, default, comment, localedata, escapes): | 
| 129 def escape(s): | 129 def escape(s): | 
| 130 return re.sub(r".", | 130 return re.sub(r".", | 
| 131 lambda match: escapes.get(match.group(0), match.group(0)), | 131 lambda match: escapes.get(match.group(0), match.group(0)), | 
| 132 s, flags=re.S) | 132 s, flags=re.S) | 
| 133 def re_escape(s): | 133 def re_escape(s): | 
| 134 return re.escape(escape(s)) | 134 return re.escape(escape(s)) | 
| 135 | 135 | 
| 136 # Extract tag attributes from default string | 136 # Extract tag attributes from default string | 
| 137 default, saved_attributes, fixed_strings = self._attribute_parser.parse(defa ult, self._params["page"]) | 137 default, saved_attributes, fixed_strings = self._attribute_parser.parse(defa ult, self._params["page"]) | 
| 138 | 138 | 
| 139 # Get translation | 139 # Get translation | 
| 140 locale = self._params["locale"] | 140 locale = self._params["locale"] | 
| 141 if locale == self._params["defaultlocale"]: | 141 if locale == self._params["defaultlocale"]: | 
| 142 result = default | 142 result = default | 
| 143 elif name in localedata: | 143 elif name in localedata: | 
| 144 result = localedata[name].strip() | 144 result = localedata[name].strip() | 
| 145 else: | 145 else: | 
| 146 result = default | 146 result = default | 
| 147 self.missing_translations += 1 | 147 self.missing_translations += 1 | 
| 148 self.total_translations += 1 | 148 self.total_translations += 1 | 
| 149 | 149 | 
| 150 # Perform callback with the string if required, e.g. for the translations sc ript | |
| 151 if self._params["localized_string_callback"]: | |
| 
Sebastian Noack
2015/07/14 11:31:08
I would rather not duplicate the key lookup:
  ca
 
kzar
2015/07/14 12:54:31
Done.
 | |
| 152 self._params["localized_string_callback"](page, locale, name, result, | |
| 153 comment, fixed_strings) | |
| 154 | |
| 155 | |
| 150 # Insert fixed strings | 156 # Insert fixed strings | 
| 151 for i, fixed_string in enumerate(fixed_strings, 1): | 157 for i, fixed_string in enumerate(fixed_strings, 1): | 
| 152 result = result.replace("{%d}" % i, fixed_string) | 158 result = result.replace("{%d}" % i, fixed_string) | 
| 153 | 159 | 
| 154 # Insert attributes | 160 # Insert attributes | 
| 155 result = escape(result) | 161 result = escape(result) | 
| 156 def stringify_attribute((name, value)): | 162 def stringify_attribute((name, value)): | 
| 157 return '%s="%s"' % ( | 163 return '%s="%s"' % ( | 
| 158 escape(name), | 164 escape(name), | 
| 159 escape(self.insert_localized_strings(value, {})) | 165 escape(self.insert_localized_strings(value, {})) | 
| (...skipping 18 matching lines...) Expand all Loading... | |
| 178 r"<%s>\1</%s>" % (tag, tag), | 184 r"<%s>\1</%s>" % (tag, tag), | 
| 179 result, flags=re.S | 185 result, flags=re.S | 
| 180 ) | 186 ) | 
| 181 return result | 187 return result | 
| 182 | 188 | 
| 183 def insert_localized_strings(self, text, escapes, to_html=lambda s: s): | 189 def insert_localized_strings(self, text, escapes, to_html=lambda s: s): | 
| 184 def lookup_string(match): | 190 def lookup_string(match): | 
| 185 name, comment, default = match.groups() | 191 name, comment, default = match.groups() | 
| 186 default = to_html(default).strip() | 192 default = to_html(default).strip() | 
| 187 | 193 | 
| 188 # Note: We currently ignore the comment, it is only relevant when | 194 return self.localize_string(self._params["page"], name, default, | 
| 189 # generating the master translation. | 195 comment, self._params["localedata"], escapes) | 
| 190 return self.localize_string(name, default, self._params["localedata"], esc apes) | |
| 191 | 196 | 
| 192 return re.sub( | 197 return re.sub( | 
| 193 r"{{\s*" | 198 r"{{\s*" | 
| 194 r"([\w\-]+)" # String ID | 199 r"([\w\-]+)" # String ID | 
| 195 r"(?:\[(.*?)\])?" # Optional comment | 200 r"(?:\[(.*?)\])?" # Optional comment | 
| 196 r"\s+" | 201 r"\s+" | 
| 197 r"((?:(?!{{).|" # Translatable text | 202 r"((?:(?!{{).|" # Translatable text | 
| 198 r"{{(?:(?!}}).)*}}" # Nested translation | 203 r"{{(?:(?!}}).)*}}" # Nested translation | 
| 199 r")*?)" | 204 r")*?)" | 
| 200 r"}}", | 205 r"}}", | 
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 345 module = template.make_module(self._params) | 350 module = template.make_module(self._params) | 
| 346 for key, value in module.__dict__.iteritems(): | 351 for key, value in module.__dict__.iteritems(): | 
| 347 if not key.startswith("_"): | 352 if not key.startswith("_"): | 
| 348 self._params[key] = value | 353 self._params[key] = value | 
| 349 | 354 | 
| 350 result = unicode(module) | 355 result = unicode(module) | 
| 351 result = self.process_links(result) | 356 result = self.process_links(result) | 
| 352 return result | 357 return result | 
| 353 | 358 | 
| 354 def translate(self, default, name, comment=None): | 359 def translate(self, default, name, comment=None): | 
| 355 # Note: We currently ignore the comment, it is only relevant when | 360 return jinja2.Markup(self.localize_string( | 
| 356 # generating the master translation. | 361 self._params["page"], name, default, comment, | 
| 357 localedata = self._params["localedata"] | 362 self._params["localedata"], html_escapes | 
| 358 return jinja2.Markup(self.localize_string(name, default, localedata, html_es capes)) | 363 )) | 
| 359 | 364 | 
| 360 def get_string(self, name, page): | 365 def get_string(self, name, page): | 
| 361 localedata = self._params["source"].read_locale(self._params["locale"], page ) | 366 localedata = self._params["source"].read_locale(self._params["locale"], page ) | 
| 362 default = localedata[name] | 367 default = localedata[name] | 
| 363 return jinja2.Markup(self.localize_string(name, default, localedata, html_es capes)) | 368 return jinja2.Markup(self.localize_string( | 
| 369 page, name, default, "", localedata, html_escapes | |
| 370 )) | |
| 364 | 371 | 
| 365 def get_page_content(self, page, locale=None): | 372 def get_page_content(self, page, locale=None): | 
| 366 from cms.utils import get_page_params | 373 from cms.utils import get_page_params | 
| 367 | 374 | 
| 368 if locale is None: | 375 if locale is None: | 
| 369 locale = self._params["locale"] | 376 locale = self._params["locale"] | 
| 370 return get_page_params(self._params["source"], locale, page) | 377 return get_page_params(self._params["source"], locale, page) | 
| 371 | 378 | 
| 372 def linkify(self, page, locale=None, **attrs): | 379 def linkify(self, page, locale=None, **attrs): | 
| 373 if locale is None: | 380 if locale is None: | 
| (...skipping 24 matching lines...) Expand all Loading... | |
| 398 stack.pop() | 405 stack.pop() | 
| 399 stack[-1]["subitems"].append(item) | 406 stack[-1]["subitems"].append(item) | 
| 400 stack.append(item) | 407 stack.append(item) | 
| 401 return structured | 408 return structured | 
| 402 | 409 | 
| 403 converters = { | 410 converters = { | 
| 404 "html": RawConverter, | 411 "html": RawConverter, | 
| 405 "md": MarkdownConverter, | 412 "md": MarkdownConverter, | 
| 406 "tmpl": TemplateConverter, | 413 "tmpl": TemplateConverter, | 
| 407 } | 414 } | 
| OLD | NEW |