Index: cms/converters.py |
=================================================================== |
--- a/cms/converters.py |
+++ b/cms/converters.py |
@@ -127,31 +127,39 @@ class Converter: |
s, flags=re.S) |
def re_escape(s): |
return re.escape(escape(s)) |
# Extract tag attributes from default string |
default, saved_attributes, fixed_strings = self._attribute_parser.parse(default, self._params["page"]) |
# Get translation |
- if self._params["locale"] != self._params["defaultlocale"] and name in localedata: |
+ locale = self._params["locale"] |
+ if locale != self._params["defaultlocale"] and name in localedata: |
result = localedata[name].strip() |
else: |
result = default |
# Insert fixed strings |
for i in range(len(fixed_strings)): |
result = re.sub(r"\{%d\}" % (i + 1), fixed_strings[i], result, 1) |
# Insert attributes |
result = escape(result) |
+ def stringify_attribute((name, value)): |
+ if name == "href": |
+ link_locale, link = self._params["source"].resolve_link(value, locale) |
+ if link: |
+ return 'href="%s" hreflang="%s"' % (escape(link), escape(link_locale)) |
+ return '%s="%s"' % (escape(name), escape(value)) |
+ |
for tag in self.whitelist: |
saved = saved_attributes.get(tag, []) |
for attrs in saved: |
- attrs = map(lambda (name, value): '%s="%s"' % (escape(name), escape(value)), attrs) |
+ attrs = map(stringify_attribute, attrs) |
result = re.sub( |
r"%s([^<>]*?)%s" % (re_escape("<%s>" % tag), re_escape("</%s>" % tag)), |
r'<%s %s>\1</%s>' % (tag, " ".join(attrs), tag), |
result, 1, flags=re.S |
) |
result = re.sub( |
r"%s([^<>]*?)%s" % (re_escape("<%s>" % tag), re_escape("</%s>" % tag)), |
r"<%s>\1</%s>" % (tag, tag), |