def testEscapeUnescaped(self): text = '© & "<hello>"' unescaped = util.UnescapeHtml(text) self.failUnless(unescaped == u'\u00a9\u00a0 & "<hello>"') escaped_unescaped = util.EscapeHtml(unescaped, True) self.failUnless(escaped_unescaped == u'\u00a9\u00a0 & "<hello>"')
def Translations(self): if "message-entries" not in self: return {} translations = {} for _seq, node in sorted(self["message-entries"].values()): clique = node.GetCliques() if not clique: continue clique = clique[0] message_id = clique.GetId() for lang in clique.clique.keys(): translations.setdefault(lang, {}) translated = clique.AllMessagesThatMatch(re.compile(".*")) if isinstance(translated, dict): for lang, tmessage in translated.items(): parts = tmessage.GetContent() text = "".join([ (util.EscapeHtml(x) if isinstance(x, (str, )) else """<ph name="%s" />""" % x.GetPresentation()) for x in parts ]) translations.setdefault(lang, {})[message_id] = text return translations
def Translate(self, lang, pseudo_if_not_available=True, skeleton_gatherer=None, fallback_to_english=False): '''Returns this document with translateable messages filled with the translation for language 'lang'. Args: lang: 'en' pseudo_if_not_available: True Return: 'ID_THIS_SECTION TYPE\n...BEGIN\n "Translated message"\n......\nEND Raises: grit.exception.NotReady() if used before Parse() has been successfully called. grit.exception.NoSuchTranslation() if 'pseudo_if_not_available' is false and there is no translation for the requested language. ''' if len(self.skeleton_) == 0: raise exception.NotReady() # TODO(joi) Implement support for skeleton gatherers here. out = [] for item in self.skeleton_: if isinstance(item, types.StringTypes): out.append(item) else: msg = item.MessageForLanguage(lang, pseudo_if_not_available, fallback_to_english) for content in msg.GetContent(): if isinstance(content, tclib.Placeholder): out.append(content.GetOriginal()) else: # We escape " characters to increase the chance that attributes # will be properly escaped. out.append(util.EscapeHtml(content, True)) return ''.join(out)