| Index: cms/converters.py |
| diff --git a/cms/converters.py b/cms/converters.py |
| index b853f78c4eb0625671a797a6640006c772929ad6..86c934b7fe70d7454bdf7f0cf3af76e3b8527a90 100644 |
| --- a/cms/converters.py |
| +++ b/cms/converters.py |
| @@ -145,6 +145,7 @@ class Converter: |
| # Insert attributes |
| result = escape(result) |
| def stringify_attribute((name, value)): |
| + value = self.insert_localized_strings(value, escapes) |
| if name == "href": |
| link_locale, link = self._params["source"].resolve_link(value, locale) |
| if link: |
| @@ -168,20 +169,40 @@ class Converter: |
| return result |
| def insert_localized_strings(self, text, escapes, to_html=lambda s: s): |
| - def lookup_string(match): |
| - name, comment, default = match.groups() |
| - default = to_html(default).strip() |
| - |
| - # Note: We currently ignore the comment, it is only relevant when |
| - # generating the master translation. |
| - return self.localize_string(name, default, self._params["localedata"], escapes) |
| - |
| - return re.sub( |
| - r"\{\{\s*([\w\-]+)(?:\[(.*?)\])?\s+(.*?)\}\}", |
| - lookup_string, |
| - text, |
| - flags=re.S |
| - ) |
| + # Find the positions for the top-level translatable strings |
| + level = 0 |
| + start = None |
| + positions = [] |
| + for m in re.finditer(r"(\{\{|\}\})", text): |
| + if m.group(0) == "{{": |
| + if level == 0: |
| + start = m.start() |
| + level += 1 |
| + else: |
| + level -= 1 |
| + if level == 0: |
| + positions.append((start, m.end())) |
| + |
| + # Replace each string with it's translation |
| + parts = [] |
| + last_end = 0 |
| + for start, end in positions: |
| + # Append any text before this tag since the last one |
| + parts.append(text[last_end:start]) |
| + # Append our localized string |
| + name, comment, default = re.match( |
| + r"\{\{\s*([\w\-]+)(?:\[(.*?)\])?\s+(.*)\}\}", |
|
Wladimir Palant
2015/04/16 21:01:13
Only one nesting level is actually allowed here. S
kzar
2015/04/21 11:28:57
With a couple of tweaks I managed to get your rege
kzar
2015/04/21 14:44:53
OK I made another change to the regexp to hopefull
|
| + text[start:end], |
| + flags=re.S |
| + ).groups() |
| + parts.append(self.localize_string( |
| + name, |
| + to_html(default).strip(), |
| + self._params["localedata"], |
| + escapes |
| + )) |
| + last_end = end |
| + return "".join(parts) + text[last_end:] |
| def process_links(self, text): |
| def process_link(match): |