annotate genshi/filters/tests/i18n.py @ 849:878c4313c7d5 trunk

Merged advanced-i18n branch back into trunk.
author cmlenz
date Tue, 10 Nov 2009 20:54:06 +0000
parents da90cee22560
children e8f596c726c4
rev   line source
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
2 #
719
4bc6741b2811 Fix copyright years.
cmlenz
parents: 709
diff changeset
3 # Copyright (C) 2007-2008 Edgewall Software
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
4 # All rights reserved.
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
5 #
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
8 # are also available at http://genshi.edgewall.org/wiki/License.
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
9 #
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
12 # history and logs, available at http://genshi.edgewall.org/log/.
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
13
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
14 from datetime import datetime
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
15 import doctest
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
16 from gettext import NullTranslations
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
17 from StringIO import StringIO
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
18 import unittest
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
19
667
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
20 from genshi.core import Attrs
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
21 from genshi.template import MarkupTemplate, Context
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
22 from genshi.filters.i18n import Translator, extract
667
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
23 from genshi.input import HTML
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
24
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
25
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
26 class DummyTranslations(NullTranslations):
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
27 _domains = {}
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
28
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
29 def __init__(self, catalog=()):
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
30 NullTranslations.__init__(self)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
31 self._catalog = catalog or {}
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
32 self.plural = lambda n: n != 1
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
33
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
34 def add_domain(self, domain, catalog):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
35 translation = DummyTranslations(catalog)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
36 translation.add_fallback(self)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
37 self._domains[domain] = translation
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
38
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
39 def _domain_call(self, func, domain, *args, **kwargs):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
40 return getattr(self._domains.get(domain, self), func)(*args, **kwargs)
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
41
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
42 def ugettext(self, message):
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
43 missing = object()
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
44 tmsg = self._catalog.get(message, missing)
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
45 if tmsg is missing:
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
46 if self._fallback:
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
47 return self._fallback.ugettext(message)
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
48 return unicode(message)
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
49 return tmsg
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
50
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
51 def dugettext(self, domain, message):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
52 return self._domain_call('ugettext', domain, message)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
53
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
54 def ungettext(self, msgid1, msgid2, n):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
55 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
56 return self._catalog[(msgid1, self.plural(n))]
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
57 except KeyError:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
58 if self._fallback:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
59 return self._fallback.ngettext(msgid1, msgid2, n)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
60 if n == 1:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
61 return msgid1
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
62 else:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
63 return msgid2
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
64
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
65 def dungettext(self, domain, singular, plural, numeral):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
66 return self._domain_call('ungettext', domain, singular, plural, numeral)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
67
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
68
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
69 class TranslatorTestCase(unittest.TestCase):
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
70
667
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
71 def test_translate_included_attribute_text(self):
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
72 """
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
73 Verify that translated attributes end up in a proper `Attrs` instance.
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
74 """
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
75 html = HTML("""<html>
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
76 <span title="Foo"></span>
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
77 </html>""")
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
78 translator = Translator(lambda s: u"Voh")
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
79 stream = list(html.filter(translator))
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
80 kind, data, pos = stream[2]
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
81 assert isinstance(data[1], Attrs)
c9a084ffaee6 Fix case where attributes weren't properly wrapped in an `Attrs` instance if one or more of them were translated by the I18n filter, potentially breaking things further down the chain. Closes #162.
cmlenz
parents: 600
diff changeset
82
594
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
83 def test_extract_without_text(self):
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
84 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
85 <p title="Bar">Foo</p>
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
86 ${ngettext("Singular", "Plural", num)}
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
87 </html>""")
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
88 translator = Translator(extract_text=False)
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
89 messages = list(translator.extract(tmpl.stream))
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
90 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
91 self.assertEqual((3, 'ngettext', (u'Singular', u'Plural', None), []),
594
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
92 messages[0])
2bbaa61b328f Add option to I18n filter to only extract strings in gettext function calls.
cmlenz
parents: 565
diff changeset
93
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
94 def test_extract_plural_form(self):
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
95 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
96 ${ngettext("Singular", "Plural", num)}
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
97 </html>""")
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
98 translator = Translator()
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
99 messages = list(translator.extract(tmpl.stream))
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
100 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
101 self.assertEqual((2, 'ngettext', (u'Singular', u'Plural', None), []),
565
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
102 messages[0])
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
103
600
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
104 def test_extract_funky_plural_form(self):
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
105 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
106 ${ngettext(len(items), *widget.display_names)}
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
107 </html>""")
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
108 translator = Translator()
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
109 messages = list(translator.extract(tmpl.stream))
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
110 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
111 self.assertEqual((2, 'ngettext', (None, None), []), messages[0])
600
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
112
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
113 def test_extract_gettext_with_unicode_string(self):
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
114 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
115 ${gettext("Grüße")}
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
116 </html>""")
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
117 translator = Translator()
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
118 messages = list(translator.extract(tmpl.stream))
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
119 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
120 self.assertEqual((2, 'gettext', u'Gr\xfc\xdfe', []), messages[0])
600
23a4784203ae Handle starargs and dstarargs in the I18n extraction code.
cmlenz
parents: 596
diff changeset
121
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
122 def test_extract_included_attribute_text(self):
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
123 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
124 <span title="Foo"></span>
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
125 </html>""")
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
126 translator = Translator()
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
127 messages = list(translator.extract(tmpl.stream))
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
128 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
129 self.assertEqual((2, None, u'Foo', []), messages[0])
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
130
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
131 def test_extract_attribute_expr(self):
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
132 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
133 <input type="submit" value="${_('Save')}" />
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
134 </html>""")
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
135 translator = Translator()
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
136 messages = list(translator.extract(tmpl.stream))
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
137 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
138 self.assertEqual((2, '_', u'Save', []), messages[0])
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
139
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
140 def test_extract_non_included_attribute_interpolated(self):
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
141 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
142 <a href="#anchor_${num}">Foo</a>
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
143 </html>""")
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
144 translator = Translator()
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
145 messages = list(translator.extract(tmpl.stream))
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
146 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
147 self.assertEqual((2, None, u'Foo', []), messages[0])
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
148
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
149 def test_extract_text_from_sub(self):
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
150 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
151 <py:if test="foo">Foo</py:if>
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
152 </html>""")
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
153 translator = Translator()
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
154 messages = list(translator.extract(tmpl.stream))
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
155 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
156 self.assertEqual((2, None, u'Foo', []), messages[0])
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
157
522
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
158 def test_ignore_tag_with_fixed_xml_lang(self):
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
159 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
160 <p xml:lang="en">(c) 2007 Edgewall Software</p>
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
161 </html>""")
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
162 translator = Translator()
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
163 messages = list(translator.extract(tmpl.stream))
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
164 self.assertEqual(0, len(messages))
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
165
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
166 def test_extract_tag_with_variable_xml_lang(self):
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
167 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
168 <p xml:lang="${lang}">(c) 2007 Edgewall Software</p>
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
169 </html>""")
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
170 translator = Translator()
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
171 messages = list(translator.extract(tmpl.stream))
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
172 self.assertEqual(1, len(messages))
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
173 self.assertEqual((2, None, u'(c) 2007 Edgewall Software', []),
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
174 messages[0])
522
082535e5087c The I18n filter now skips the content of elements that have an `xml:lang` attribute with a fixed string value. Basically, `xml:lang` can now be used as a flag to mark specific sections as not needing localization.
cmlenz
parents: 485
diff changeset
175
535
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
176 def test_ignore_attribute_with_expression(self):
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
177 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
178 <input type="submit" value="Reply" title="Reply to comment $num" />
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
179 </html>""")
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
180 translator = Translator()
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
181 messages = list(translator.extract(tmpl.stream))
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
182 self.assertEqual(0, len(messages))
35a413f3f1dd The I18n filter no longer extracts or translates literal strings in attribute values that also contain expressions.
cmlenz
parents: 528
diff changeset
183
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
184 def test_extract_i18n_msg(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
185 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
186 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
187 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
188 Please see <a href="help.html">Help</a> for details.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
189 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
190 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
191 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
192 tmpl.add_directives(Translator.NAMESPACE, translator)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
193 messages = list(translator.extract(tmpl.stream))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
194 self.assertEqual(1, len(messages))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
195 self.assertEqual('Please see [1:Help] for details.', messages[0][2])
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
196
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
197 def test_translate_i18n_msg(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
198 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
199 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
200 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
201 Please see <a href="help.html">Help</a> for details.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
202 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
203 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
204 gettext = lambda s: u"Für Details siehe bitte [1:Hilfe]."
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
205 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
206 translator.setup(tmpl)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
207 self.assertEqual("""<html>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
208 <p>Für Details siehe bitte <a href="help.html">Hilfe</a>.</p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
209 </html>""", tmpl.generate().render())
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
210
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
211 def test_extract_i18n_msg_nested(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
212 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
213 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
214 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
215 Please see <a href="help.html"><em>Help</em> page</a> for details.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
216 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
217 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
218 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
219 tmpl.add_directives(Translator.NAMESPACE, translator)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
220 messages = list(translator.extract(tmpl.stream))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
221 self.assertEqual(1, len(messages))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
222 self.assertEqual('Please see [1:[2:Help] page] for details.',
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
223 messages[0][2])
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
224
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
225 def test_translate_i18n_msg_nested(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
226 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
227 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
228 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
229 Please see <a href="help.html"><em>Help</em> page</a> for details.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
230 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
231 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
232 gettext = lambda s: u"Für Details siehe bitte [1:[2:Hilfeseite]]."
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
233 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
234 translator.setup(tmpl)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
235 self.assertEqual("""<html>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
236 <p>Für Details siehe bitte <a href="help.html"><em>Hilfeseite</em></a>.</p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
237 </html>""", tmpl.generate().render())
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
238
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
239 def test_extract_i18n_msg_label_with_nested_input(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
240 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
241 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
242 <div i18n:msg="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
243 <label><input type="text" size="3" name="daysback" value="30" /> days back</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
244 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
245 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
246 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
247 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
248 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
249 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
250 self.assertEqual('[1:[2:] days back]',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
251 messages[0][2])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
252
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
253 def test_translate_i18n_msg_label_with_nested_input(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
254 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
255 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
256 <div i18n:msg="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
257 <label><input type="text" size="3" name="daysback" value="30" /> foo bar</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
258 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
259 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
260 gettext = lambda s: "[1:[2:] foo bar]"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
261 translator = Translator(gettext)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
262 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
263 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
264 <div><label><input type="text" size="3" name="daysback" value="30"/> foo bar</label></div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
265 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
266
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
267 def test_extract_i18n_msg_empty(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
268 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
269 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
270 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
271 Show me <input type="text" name="num" /> entries per page.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
272 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
273 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
274 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
275 tmpl.add_directives(Translator.NAMESPACE, translator)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
276 messages = list(translator.extract(tmpl.stream))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
277 self.assertEqual(1, len(messages))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
278 self.assertEqual('Show me [1:] entries per page.', messages[0][2])
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
279
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
280 def test_translate_i18n_msg_empty(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
281 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
282 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
283 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
284 Show me <input type="text" name="num" /> entries per page.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
285 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
286 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
287 gettext = lambda s: u"[1:] Einträge pro Seite anzeigen."
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
288 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
289 translator.setup(tmpl)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
290 self.assertEqual("""<html>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
291 <p><input type="text" name="num"/> Einträge pro Seite anzeigen.</p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
292 </html>""", tmpl.generate().render())
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
293
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
294 def test_extract_i18n_msg_multiple(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
295 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
296 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
297 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
298 Please see <a href="help.html">Help</a> for <em>details</em>.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
299 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
300 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
301 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
302 tmpl.add_directives(Translator.NAMESPACE, translator)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
303 messages = list(translator.extract(tmpl.stream))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
304 self.assertEqual(1, len(messages))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
305 self.assertEqual('Please see [1:Help] for [2:details].', messages[0][2])
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
306
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
307 def test_translate_i18n_msg_multiple(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
308 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
309 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
310 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
311 Please see <a href="help.html">Help</a> for <em>details</em>.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
312 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
313 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
314 gettext = lambda s: u"Für [2:Details] siehe bitte [1:Hilfe]."
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
315 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
316 translator.setup(tmpl)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
317 self.assertEqual("""<html>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
318 <p>Für <em>Details</em> siehe bitte <a href="help.html">Hilfe</a>.</p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
319 </html>""", tmpl.generate().render())
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
320
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
321 def test_extract_i18n_msg_multiple_empty(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
322 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
323 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
324 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
325 Show me <input type="text" name="num" /> entries per page, starting at page <input type="text" name="num" />.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
326 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
327 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
328 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
329 tmpl.add_directives(Translator.NAMESPACE, translator)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
330 messages = list(translator.extract(tmpl.stream))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
331 self.assertEqual(1, len(messages))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
332 self.assertEqual('Show me [1:] entries per page, starting at page [2:].',
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
333 messages[0][2])
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
334
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
335 def test_translate_i18n_msg_multiple_empty(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
336 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
337 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
338 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
339 Show me <input type="text" name="num" /> entries per page, starting at page <input type="text" name="num" />.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
340 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
341 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
342 gettext = lambda s: u"[1:] Einträge pro Seite, beginnend auf Seite [2:]."
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
343 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
344 translator.setup(tmpl)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
345 self.assertEqual("""<html>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
346 <p><input type="text" name="num"/> Eintr\xc3\xa4ge pro Seite, beginnend auf Seite <input type="text" name="num"/>.</p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
347 </html>""", tmpl.generate().render())
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
348
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
349 def test_extract_i18n_msg_with_param(self):
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
350 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
351 xmlns:i18n="http://genshi.edgewall.org/i18n">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
352 <p i18n:msg="name">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
353 Hello, ${user.name}!
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
354 </p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
355 </html>""")
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
356 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
357 tmpl.add_directives(Translator.NAMESPACE, translator)
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
358 messages = list(translator.extract(tmpl.stream))
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
359 self.assertEqual(1, len(messages))
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
360 self.assertEqual('Hello, %(name)s!', messages[0][2])
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
361
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
362 def test_translate_i18n_msg_with_param(self):
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
363 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
364 xmlns:i18n="http://genshi.edgewall.org/i18n">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
365 <p i18n:msg="name">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
366 Hello, ${user.name}!
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
367 </p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
368 </html>""")
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
369 gettext = lambda s: u"Hallo, %(name)s!"
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
370 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
371 translator.setup(tmpl)
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
372 self.assertEqual("""<html>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
373 <p>Hallo, Jim!</p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
374 </html>""", tmpl.generate(user=dict(name='Jim')).render())
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
375
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
376 def test_translate_i18n_msg_with_param_reordered(self):
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
377 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
378 xmlns:i18n="http://genshi.edgewall.org/i18n">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
379 <p i18n:msg="name">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
380 Hello, ${user.name}!
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
381 </p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
382 </html>""")
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
383 gettext = lambda s: u"%(name)s, sei gegrüßt!"
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
384 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
385 translator.setup(tmpl)
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
386 self.assertEqual("""<html>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
387 <p>Jim, sei gegrüßt!</p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
388 </html>""", tmpl.generate(user=dict(name='Jim')).render())
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
389
785
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
390 def test_translate_i18n_msg_with_attribute_param(self):
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
391 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
392 xmlns:i18n="http://genshi.edgewall.org/i18n">
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
393 <p i18n:msg="">
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
394 Hello, <a href="#${anchor}">dude</a>!
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
395 </p>
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
396 </html>""")
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
397 gettext = lambda s: u"Sei gegrüßt, [1:Alter]!"
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
398 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
399 translator.setup(tmpl)
785
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
400 self.assertEqual("""<html>
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
401 <p>Sei gegrüßt, <a href="#42">Alter</a>!</p>
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
402 </html>""", tmpl.generate(anchor='42').render())
36fb0a57fe74 Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents: 776
diff changeset
403
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
404 def test_extract_i18n_msg_with_two_params(self):
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
405 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
406 xmlns:i18n="http://genshi.edgewall.org/i18n">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
407 <p i18n:msg="name, time">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
408 Posted by ${post.author} at ${entry.time.strftime('%H:%m')}
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
409 </p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
410 </html>""")
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
411 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
412 tmpl.add_directives(Translator.NAMESPACE, translator)
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
413 messages = list(translator.extract(tmpl.stream))
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
414 self.assertEqual(1, len(messages))
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
415 self.assertEqual('Posted by %(name)s at %(time)s', messages[0][2])
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
416
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
417 def test_translate_i18n_msg_with_two_params(self):
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
418 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
419 xmlns:i18n="http://genshi.edgewall.org/i18n">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
420 <p i18n:msg="name, time">
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
421 Written by ${entry.author} at ${entry.time.strftime('%H:%M')}
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
422 </p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
423 </html>""")
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
424 gettext = lambda s: u"%(name)s schrieb dies um %(time)s"
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
425 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
426 translator.setup(tmpl)
776
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
427 entry = {
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
428 'author': 'Jim',
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
429 'time': datetime(2008, 4, 1, 14, 30)
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
430 }
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
431 self.assertEqual("""<html>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
432 <p>Jim schrieb dies um 14:30</p>
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
433 </html>""", tmpl.generate(entry=entry).render())
ddb58d74c8ee Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents: 719
diff changeset
434
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
435 def test_extract_i18n_msg_with_directive(self):
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
436 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
437 xmlns:i18n="http://genshi.edgewall.org/i18n">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
438 <p i18n:msg="">
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
439 Show me <input type="text" name="num" py:attrs="{'value': x}" /> entries per page.
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
440 </p>
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
441 </html>""")
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
442 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
443 tmpl.add_directives(Translator.NAMESPACE, translator)
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
444 messages = list(translator.extract(tmpl.stream))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
445 self.assertEqual(1, len(messages))
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
446 self.assertEqual('Show me [1:] entries per page.', messages[0][2])
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
447
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
448 def test_translate_i18n_msg_with_directive(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
449 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
450 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
451 <p i18n:msg="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
452 Show me <input type="text" name="num" py:attrs="{'value': 'x'}" /> entries per page.
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
453 </p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
454 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
455 gettext = lambda s: u"[1:] Einträge pro Seite anzeigen."
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
456 translator = Translator(gettext)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
457 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
458 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
459 <p><input type="text" name="num" value="x"/> Einträge pro Seite anzeigen.</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
460 </html>""", tmpl.generate().render())
560
7e83be231f96 Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
cmlenz
parents: 549
diff changeset
461
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
462 def test_extract_i18n_msg_with_comment(self):
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
463 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
464 xmlns:i18n="http://genshi.edgewall.org/i18n">
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
465 <p i18n:comment="As in foo bar" i18n:msg="">Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
466 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
467 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
468 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
469 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
470 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
471 self.assertEqual((3, None, u'Foo', ['As in foo bar']), messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
472 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
473 xmlns:i18n="http://genshi.edgewall.org/i18n">
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
474 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p>
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
475 </html>""")
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
476 translator = Translator()
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
477 tmpl.add_directives(Translator.NAMESPACE, translator)
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
478 messages = list(translator.extract(tmpl.stream))
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
479 self.assertEqual(1, len(messages))
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
480 self.assertEqual((3, None, u'Foo', ['As in foo bar']), messages[0])
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
481
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
482 def test_translate_i18n_msg_with_comment(self):
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
483 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
484 xmlns:i18n="http://genshi.edgewall.org/i18n">
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
485 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p>
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
486 </html>""")
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
487 gettext = lambda s: u"Voh"
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
488 translator = Translator(gettext)
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
489 translator.setup(tmpl)
787
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
490 self.assertEqual("""<html>
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
491 <p>Voh</p>
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
492 </html>""", tmpl.generate().render())
d7366797440f Add support for supplying comments on localizable messages in the i18n filter. Based on patch by Pedro Algarvio on #129.
cmlenz
parents: 785
diff changeset
493
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
494 def test_extract_i18n_msg_with_attr(self):
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
495 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
496 xmlns:i18n="http://genshi.edgewall.org/i18n">
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
497 <p i18n:msg="" title="Foo bar">Foo</p>
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
498 </html>""")
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
499 translator = Translator()
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
500 messages = list(translator.extract(tmpl.stream))
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
501 self.assertEqual(2, len(messages))
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
502 self.assertEqual((3, None, u'Foo bar', []), messages[0])
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
503 self.assertEqual((3, None, u'Foo', []), messages[1])
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
504
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
505 def test_translate_i18n_msg_with_attr(self):
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
506 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
507 xmlns:i18n="http://genshi.edgewall.org/i18n">
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
508 <p i18n:msg="" title="Foo bar">Foo</p>
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
509 </html>""")
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
510 gettext = lambda s: u"Voh"
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
511 translator = Translator(DummyTranslations({
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
512 'Foo': u'Voh',
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
513 'Foo bar': u'Voh bär'
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
514 }))
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
515 tmpl.filters.insert(0, translator)
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
516 tmpl.add_directives(Translator.NAMESPACE, translator)
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
517 self.assertEqual("""<html>
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
518 <p title="Voh bär">Voh</p>
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
519 </html>""", tmpl.generate().render())
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
520
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
521 def test_translate_with_translations_object(self):
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
522 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
523 xmlns:i18n="http://genshi.edgewall.org/i18n">
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
524 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p>
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
525 </html>""")
790
da90cee22560 Merged the custom-directives branch back into trunk.
cmlenz
parents: 788
diff changeset
526 translator = Translator(DummyTranslations({'Foo': 'Voh'}))
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
527 translator.setup(tmpl)
788
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
528 self.assertEqual("""<html>
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
529 <p>Voh</p>
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
530 </html>""", tmpl.generate().render())
31432f30a6fb Change `Translator` class to accept either a `gettext`-style function, or an object compatible with the `NullTranslations` / `GNUTranslations` interface.
cmlenz
parents: 787
diff changeset
531
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
532 def test_translate_i18n_msg_and_py_strip_directives(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
533 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
534 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
535 <p i18n:msg="" py:strip="">Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
536 <p py:strip="" i18n:msg="">Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
537 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
538 translator = Translator(DummyTranslations({'Foo': 'Voh'}))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
539 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
540 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
541 Voh
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
542 Voh
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
543 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
544
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
545 def test_i18n_msg_ticket_300_extract(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
546 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
547 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
548 <i18n:msg params="date, author">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
549 Changed ${ '10/12/2008' } ago by ${ 'me, the author' }
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
550 </i18n:msg>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
551 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
552 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
553 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
554 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
555 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
556 self.assertEqual(
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
557 (3, None, u'Changed %(date)s ago by %(author)s', []), messages[0]
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
558 )
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
559
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
560 def test_i18n_msg_ticket_300_translate(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
561 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
562 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
563 <i18n:msg params="date, author">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
564 Changed ${ date } ago by ${ author }
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
565 </i18n:msg>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
566 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
567 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
568 u'Changed %(date)s ago by %(author)s': u'Modificado à %(date)s por %(author)s'
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
569 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
570 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
571 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
572 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
573 Modificado à um dia por Pedro
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
574 </html>""", tmpl.generate(date='um dia', author="Pedro").render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
575
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
576
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
577 def test_i18n_msg_ticket_251_extract(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
578 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
579 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
580 <p i18n:msg=""><tt><b>Translation[&nbsp;0&nbsp;]</b>: <em>One coin</em></tt></p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
581 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
582 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
583 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
584 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
585 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
586 self.assertEqual(
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
587 (3, None, u'[1:[2:Translation\\[\xa00\xa0\\]]: [3:One coin]]', []), messages[0]
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
588 )
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
589
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
590 def test_i18n_msg_ticket_251_translate(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
591 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
592 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
593 <p i18n:msg=""><tt><b>Translation[&nbsp;0&nbsp;]</b>: <em>One coin</em></tt></p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
594 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
595 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
596 u'[1:[2:Translation\\[\xa00\xa0\\]]: [3:One coin]]':
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
597 u'[1:[2:Trandução\\[\xa00\xa0\\]]: [3:Uma moeda]]'
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
598 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
599 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
600 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
601 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
602 <p><tt><b>Trandução[ 0 ]</b>: <em>Uma moeda</em></tt></p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
603 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
604
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
605 def test_extract_i18n_msg_with_other_directives_nested(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
606 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
607 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
608 <p i18n:msg="" py:with="q = quote_plus(message[:80])">Before you do that, though, please first try
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
609 <strong><a href="${trac.homepage}search?ticket=yes&amp;noquickjump=1&amp;q=$q">searching</a>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
610 for similar issues</strong>, as it is quite likely that this problem
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
611 has been reported before. For questions about installation
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
612 and configuration of Trac, please try the
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
613 <a href="${trac.homepage}wiki/MailingList">mailing list</a>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
614 instead of filing a ticket.
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
615 </p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
616 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
617 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
618 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
619 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
620 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
621 self.assertEqual(
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
622 u'Before you do that, though, please first try\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
623 u'[1:[2:searching]\n for similar issues], as it is '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
624 u'quite likely that this problem\n has been reported '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
625 u'before. For questions about installation\n and '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
626 u'configuration of Trac, please try the\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
627 u'[3:mailing list]\n instead of filing a ticket.',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
628 messages[0][2]
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
629 )
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
630
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
631 def test_translate_i18n_msg_with_other_directives_nested(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
632 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
633 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
634 <p i18n:msg="">Before you do that, though, please first try
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
635 <strong><a href="${trac.homepage}search?ticket=yes&amp;noquickjump=1&amp;q=q">searching</a>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
636 for similar issues</strong>, as it is quite likely that this problem
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
637 has been reported before. For questions about installation
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
638 and configuration of Trac, please try the
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
639 <a href="${trac.homepage}wiki/MailingList">mailing list</a>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
640 instead of filing a ticket.
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
641 </p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
642 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
643 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
644 u'Before you do that, though, please first try\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
645 u'[1:[2:searching]\n for similar issues], as it is '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
646 u'quite likely that this problem\n has been reported '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
647 u'before. For questions about installation\n and '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
648 u'configuration of Trac, please try the\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
649 u'[3:mailing list]\n instead of filing a ticket.':
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
650 u'Antes de o fazer, porém,\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
651 u'[1:por favor tente [2:procurar]\n por problemas semelhantes], uma vez que '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
652 u'é muito provável que este problema\n já tenha sido reportado '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
653 u'anteriormente. Para questões relativas à instalação\n e '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
654 u'configuração do Trac, por favor tente a\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
655 u'[3:mailing list]\n em vez de criar um assunto.'
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
656 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
657 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
658 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
659 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
660 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
661 ctx = Context()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
662 ctx.push({'trac': {'homepage': 'http://trac.edgewall.org/'}})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
663 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
664 <p>Antes de o fazer, porém,
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
665 <strong>por favor tente <a href="http://trac.edgewall.org/search?ticket=yes&amp;noquickjump=1&amp;q=q">procurar</a>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
666 por problemas semelhantes</strong>, uma vez que é muito provável que este problema
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
667 já tenha sido reportado anteriormente. Para questões relativas à instalação
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
668 e configuração do Trac, por favor tente a
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
669 <a href="http://trac.edgewall.org/wiki/MailingList">mailing list</a>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
670 em vez de criar um assunto.</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
671 </html>""", tmpl.generate(ctx).render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
672
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
673 def test_i18n_msg_with_other_nested_directives_with_reordered_content(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
674 # See: http://genshi.edgewall.org/ticket/300#comment:10
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
675 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
676 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
677 <p py:if="not editable" class="hint" i18n:msg="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
678 <strong>Note:</strong> This repository is defined in
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
679 <code><a href="${ 'href.wiki(TracIni)' }">trac.ini</a></code>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
680 and cannot be edited on this page.
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
681 </p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
682 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
683 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
684 u'[1:Note:] This repository is defined in\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
685 u'[2:[3:trac.ini]]\n and cannot be edited on this page.':
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
686 u'[1:Nota:] Este repositório está definido em \n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
687 u'[2:[3:trac.ini]]\n e não pode ser editado nesta página.',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
688 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
689 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
690 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
691 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
692 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
693 self.assertEqual(
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
694 u'[1:Note:] This repository is defined in\n '
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
695 u'[2:[3:trac.ini]]\n and cannot be edited on this page.',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
696 messages[0][2]
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
697 )
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
698 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
699 <p class="hint"><strong>Nota:</strong> Este repositório está definido em
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
700 <code><a href="href.wiki(TracIni)">trac.ini</a></code>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
701 e não pode ser editado nesta página.</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
702 </html>""", tmpl.generate(editable=False).render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
703
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
704 def test_translate_i18n_domain_with_msg_directives(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
705 #"""translate with i18n:domain and nested i18n:msg directives """
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
706
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
707 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
708 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
709 <div i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
710 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
711 <p i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
712 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
713 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
714 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
715 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'PT_Foo'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
716 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
717 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
718 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
719 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
720 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
721 <p>PT_Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
722 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
723 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
724
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
725 def test_translate_i18n_domain_with_inline_directives(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
726 #"""translate with inlined i18n:domain and i18n:msg directives"""
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
727 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
728 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
729 <p i18n:msg="" i18n:domain="foo">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
730 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
731 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
732 translations.add_domain('foo', {'FooBar': 'BarFoo'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
733 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
734 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
735 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
736 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
737 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
738
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
739 def test_translate_i18n_domain_without_msg_directives(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
740 #"""translate domain call without i18n:msg directives still uses current domain"""
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
741
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
742 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
743 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
744 <p i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
745 <div i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
746 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
747 <p i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
748 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
749 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
750 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
751 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
752 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
753 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'PT_Foo'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
754 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
755 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
756 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
757 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
758 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
759 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
760 <p>PT_Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
761 <p>PT_Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
762 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
763 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
764 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
765
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
766 def test_translate_i18n_domain_as_directive_not_attribute(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
767 #"""translate with domain as directive"""
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
768
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
769 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
770 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
771 <i18n:domain name="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
772 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
773 <p i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
774 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
775 </i18n:domain>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
776 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
777 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
778 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
779 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'PT_Foo'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
780 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
781 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
782 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
783 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
784 <p>PT_Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
785 <p>PT_Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
786 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
787 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
788
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
789 def test_translate_i18n_domain_nested_directives(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
790 #"""translate with nested i18n:domain directives"""
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
791
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
792 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
793 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
794 <p i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
795 <div i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
796 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
797 <p i18n:domain="bar" i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
798 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
799 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
800 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
801 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
802 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
803 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'foo_Bar'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
804 translations.add_domain('bar', {'Bar': 'bar_Bar'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
805 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
806 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
807 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
808 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
809 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
810 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
811 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
812 <p>foo_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
813 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
814 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
815 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
816
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
817 def test_translate_i18n_domain_with_empty_nested_domain_directive(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
818 #"""translate with empty nested i18n:domain directive does not use dngettext"""
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
819
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
820 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
821 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
822 <p i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
823 <div i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
824 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
825 <p i18n:domain="" i18n:msg="">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
826 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
827 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
828 <p>Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
829 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
830 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
831 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'foo_Bar'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
832 translations.add_domain('bar', {'Bar': 'bar_Bar'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
833 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
834 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
835 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
836 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
837 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
838 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
839 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
840 <p>foo_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
841 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
842 <p>Voh</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
843 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
844
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
845 def test_translate_i18n_choose_as_attribute(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
846 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
847 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
848 <div i18n:choose="one">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
849 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
850 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
851 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
852 <div i18n:choose="two">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
853 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
854 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
855 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
856 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
857 translations = DummyTranslations()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
858 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
859 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
860 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
861 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
862 <p>FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
863 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
864 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
865 <p>FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
866 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
867 </html>""", tmpl.generate(one=1, two=2).render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
868
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
869 def test_translate_i18n_choose_as_directive(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
870 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
871 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
872 <i18n:choose numeral="two">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
873 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
874 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
875 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
876 <i18n:choose numeral="one">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
877 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
878 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
879 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
880 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
881 translations = DummyTranslations()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
882 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
883 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
884 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
885 <p>FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
886 <p>FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
887 </html>""", tmpl.generate(one=1, two=2).render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
888
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
889 def test_translate_i18n_choose_as_attribute_with_params(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
890 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
891 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
892 <div i18n:choose="two; fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
893 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
894 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
895 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
896 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
897 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
898 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
899 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
900 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
901 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
902 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
903 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
904 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
905 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
906 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
907 <p>Vohs John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
908 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
909 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
910
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
911 def test_translate_i18n_choose_as_attribute_with_params_and_domain_as_param(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
912 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
913 xmlns:i18n="http://genshi.edgewall.org/i18n"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
914 i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
915 <div i18n:choose="two; fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
916 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
917 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
918 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
919 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
920 translations = DummyTranslations()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
921 translations.add_domain('foo', {
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
922 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
923 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
924 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
925 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
926 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
927 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
928 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
929 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
930 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
931 <p>Vohs John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
932 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
933 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
934
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
935 def test_translate_i18n_choose_as_directive_with_params(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
936 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
937 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
938 <i18n:choose numeral="two" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
939 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
940 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
941 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
942 <i18n:choose numeral="one" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
943 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
944 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
945 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
946 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
947 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
948 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
949 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
950 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
951 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
952 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
953 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
954 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
955 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
956 <p>Vohs John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
957 <p>Voh John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
958 </html>""", tmpl.generate(one=1, two=2,
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
959 fname='John', lname='Doe').render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
960
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
961 def test_translate_i18n_choose_as_directive_with_params_and_domain_as_directive(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
962 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
963 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
964 <i18n:domain name="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
965 <i18n:choose numeral="two" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
966 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
967 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
968 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
969 </i18n:domain>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
970 <i18n:choose numeral="one" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
971 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
972 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
973 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
974 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
975 translations = DummyTranslations()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
976 translations.add_domain('foo', {
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
977 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
978 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
979 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
980 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
981 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
982 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
983 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
984 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
985 <p>Vohs John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
986 <p>Foo John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
987 </html>""", tmpl.generate(one=1, two=2,
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
988 fname='John', lname='Doe').render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
989
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
990 def test_extract_i18n_choose_as_attribute(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
991 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
992 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
993 <div i18n:choose="one">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
994 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
995 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
996 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
997 <div i18n:choose="two">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
998 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
999 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1000 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1001 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1002 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1003 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1004 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1005 self.assertEqual(2, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1006 self.assertEqual((3, 'ngettext', (u'FooBar', u'FooBars'), []), messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1007 self.assertEqual((7, 'ngettext', (u'FooBar', u'FooBars'), []), messages[1])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1008
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1009 def test_extract_i18n_choose_as_directive(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1010 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1011 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1012 <i18n:choose numeral="two">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1013 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1014 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1015 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1016 <i18n:choose numeral="one">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1017 <p i18n:singular="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1018 <p i18n:plural="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1019 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1020 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1021 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1022 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1023 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1024 self.assertEqual(2, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1025 self.assertEqual((3, 'ngettext', (u'FooBar', u'FooBars'), []), messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1026 self.assertEqual((7, 'ngettext', (u'FooBar', u'FooBars'), []), messages[1])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1027
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1028 def test_extract_i18n_choose_as_attribute_with_params(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1029 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1030 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1031 <div i18n:choose="two; fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1032 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1033 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1034 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1035 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1036 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1037 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1038 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1039 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1040 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1041 u'Foos %(fname)s %(lname)s'), []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1042 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1043
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1044 def test_extract_i18n_choose_as_attribute_with_params_and_domain_as_param(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1045 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1046 xmlns:i18n="http://genshi.edgewall.org/i18n"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1047 i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1048 <div i18n:choose="two; fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1049 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1050 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1051 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1052 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1053 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1054 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1055 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1056 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1057 self.assertEqual((4, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1058 u'Foos %(fname)s %(lname)s'), []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1059 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1060
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1061 def test_extract_i18n_choose_as_directive_with_params(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1062 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1063 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1064 <i18n:choose numeral="two" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1065 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1066 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1067 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1068 <i18n:choose numeral="one" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1069 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1070 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1071 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1072 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1073 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1074 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1075 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1076 self.assertEqual(2, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1077 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1078 u'Foos %(fname)s %(lname)s'), []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1079 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1080 self.assertEqual((7, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1081 u'Foos %(fname)s %(lname)s'), []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1082 messages[1])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1083
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1084 def test_extract_i18n_choose_as_directive_with_params_and_domain_as_directive(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1085 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1086 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1087 <i18n:domain name="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1088 <i18n:choose numeral="two" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1089 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1090 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1091 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1092 </i18n:domain>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1093 <i18n:choose numeral="one" params="fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1094 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1095 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1096 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1097 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1098 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1099 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1100 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1101 self.assertEqual(2, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1102 self.assertEqual((4, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1103 u'Foos %(fname)s %(lname)s'), []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1104 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1105 self.assertEqual((9, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1106 u'Foos %(fname)s %(lname)s'), []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1107 messages[1])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1108
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1109 def test_extract_i18n_choose_as_attribute_with_params_and_comment(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1110 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1111 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1112 <div i18n:choose="two; fname, lname" i18n:comment="As in Foo Bar">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1113 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1114 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1115 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1116 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1117 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1118 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1119 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1120 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1121 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1122 u'Foos %(fname)s %(lname)s'),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1123 [u'As in Foo Bar']),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1124 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1125
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1126 def test_extract_i18n_choose_as_directive_with_params_and_comment(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1127 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1128 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1129 <i18n:choose numeral="two" params="fname, lname" i18n:comment="As in Foo Bar">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1130 <p i18n:singular="">Foo ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1131 <p i18n:plural="">Foos ${fname} ${lname}</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1132 </i18n:choose>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1133 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1134 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1135 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1136 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1137 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1138 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1139 u'Foos %(fname)s %(lname)s'),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1140 [u'As in Foo Bar']),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1141 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1142
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1143 def test_translate_i18n_domain_with_nested_inlcudes(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1144 import os, shutil, tempfile
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1145 from genshi.template.loader import TemplateLoader
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1146 dirname = tempfile.mkdtemp(suffix='genshi_test')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1147 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1148 for idx in range(7):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1149 file1 = open(os.path.join(dirname, 'tmpl%d.html' % idx), 'w')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1150 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1151 file1.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1152 xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1153 xmlns:i18n="http://genshi.edgewall.org/i18n" py:strip="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1154 <div>Included tmpl$idx</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1155 <p i18n:msg="idx">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1156 <p i18n:domain="bar">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1157 <p i18n:msg="idx" i18n:domain="">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1158 <p i18n:domain="" i18n:msg="idx">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1159 <py:if test="idx &lt; 6">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1160 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1161 </py:if>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1162 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1163 finally:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1164 file1.close()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1165
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1166 file2 = open(os.path.join(dirname, 'tmpl10.html'), 'w')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1167 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1168 file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1169 xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1170 xmlns:i18n="http://genshi.edgewall.org/i18n"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1171 i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1172 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1173 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1174 finally:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1175 file2.close()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1176
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1177 def callback(template):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1178 translations = DummyTranslations({'Bar %(idx)s': 'Voh %(idx)s'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1179 translations.add_domain('foo', {'Bar %(idx)s': 'foo_Bar %(idx)s'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1180 translations.add_domain('bar', {'Bar': 'bar_Bar'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1181 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1182 translator.setup(template)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1183 loader = TemplateLoader([dirname], callback=callback)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1184 tmpl = loader.load('tmpl10.html')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1185
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1186 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1187 <div>Included tmpl0</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1188 <p>foo_Bar 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1189 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1190 <p>Voh 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1191 <p>Voh 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1192 <div>Included tmpl1</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1193 <p>foo_Bar 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1194 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1195 <p>Voh 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1196 <p>Voh 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1197 <div>Included tmpl2</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1198 <p>foo_Bar 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1199 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1200 <p>Voh 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1201 <p>Voh 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1202 <div>Included tmpl3</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1203 <p>foo_Bar 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1204 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1205 <p>Voh 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1206 <p>Voh 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1207 <div>Included tmpl4</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1208 <p>foo_Bar 4</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1209 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1210 <p>Voh 4</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1211 <p>Voh 4</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1212 <div>Included tmpl5</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1213 <p>foo_Bar 5</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1214 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1215 <p>Voh 5</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1216 <p>Voh 5</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1217 <div>Included tmpl6</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1218 <p>foo_Bar 6</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1219 <p>bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1220 <p>Voh 6</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1221 <p>Voh 6</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1222 </html>""", tmpl.generate(idx=-1).render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1223 finally:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1224 shutil.rmtree(dirname)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1225
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1226 def test_translate_i18n_domain_with_nested_inlcudes_with_translatable_attrs(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1227 import os, shutil, tempfile
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1228 from genshi.template.loader import TemplateLoader
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1229 dirname = tempfile.mkdtemp(suffix='genshi_test')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1230 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1231 for idx in range(4):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1232 file1 = open(os.path.join(dirname, 'tmpl%d.html' % idx), 'w')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1233 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1234 file1.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1235 xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1236 xmlns:i18n="http://genshi.edgewall.org/i18n" py:strip="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1237 <div>Included tmpl$idx</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1238 <p title="${dg('foo', 'Bar %(idx)s') % dict(idx=idx)}" i18n:msg="idx">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1239 <p title="Bar" i18n:domain="bar">Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1240 <p title="Bar" i18n:msg="idx" i18n:domain="">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1241 <p i18n:msg="idx" i18n:domain="" title="Bar">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1242 <p i18n:domain="" i18n:msg="idx" title="Bar">Bar $idx</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1243 <py:if test="idx &lt; 3">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1244 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1245 </py:if>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1246 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1247 finally:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1248 file1.close()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1249
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1250 file2 = open(os.path.join(dirname, 'tmpl10.html'), 'w')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1251 try:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1252 file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1253 xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1254 xmlns:i18n="http://genshi.edgewall.org/i18n"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1255 i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1256 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1257 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1258 finally:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1259 file2.close()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1260
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1261 translations = DummyTranslations({'Bar %(idx)s': 'Voh %(idx)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1262 'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1263 translations.add_domain('foo', {'Bar %(idx)s': 'foo_Bar %(idx)s'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1264 translations.add_domain('bar', {'Bar': 'bar_Bar'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1265 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1266
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1267 def callback(template):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1268 translator.setup(template)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1269 loader = TemplateLoader([dirname], callback=callback)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1270 tmpl = loader.load('tmpl10.html')
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1271
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1272 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1273 <div>Included tmpl0</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1274 <p title="foo_Bar 0">foo_Bar 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1275 <p title="bar_Bar">bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1276 <p title="Voh">Voh 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1277 <p title="Voh">Voh 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1278 <p title="Voh">Voh 0</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1279 <div>Included tmpl1</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1280 <p title="foo_Bar 1">foo_Bar 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1281 <p title="bar_Bar">bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1282 <p title="Voh">Voh 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1283 <p title="Voh">Voh 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1284 <p title="Voh">Voh 1</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1285 <div>Included tmpl2</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1286 <p title="foo_Bar 2">foo_Bar 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1287 <p title="bar_Bar">bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1288 <p title="Voh">Voh 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1289 <p title="Voh">Voh 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1290 <p title="Voh">Voh 2</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1291 <div>Included tmpl3</div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1292 <p title="foo_Bar 3">foo_Bar 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1293 <p title="bar_Bar">bar_Bar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1294 <p title="Voh">Voh 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1295 <p title="Voh">Voh 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1296 <p title="Voh">Voh 3</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1297 </html>""", tmpl.generate(idx=-1,
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1298 dg=translations.dugettext).render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1299 finally:
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1300 shutil.rmtree(dirname)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1301
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1302 def test_translate_i18n_msg_and_comment_with_py_strip_directives(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1303 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1304 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1305 <p i18n:msg="" i18n:comment="As in foo bar" py:strip="">Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1306 <p py:strip="" i18n:msg="" i18n:comment="As in foo bar">Foo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1307 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1308 translator = Translator(DummyTranslations({'Foo': 'Voh'}))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1309 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1310 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1311 Voh
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1312 Voh
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1313 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1314
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1315 def test_translate_i18n_choose_and_py_strip(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1316 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1317 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1318 <div i18n:choose="two; fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1319 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1320 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1321 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1322 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1323 translations = DummyTranslations({
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1324 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1325 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1326 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1327 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1328 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1329 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1330 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1331 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1332 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1333 <p>Vohs John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1334 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1335 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1336
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1337 def test_translate_i18n_choose_and_domain_and_py_strip(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1338 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1339 xmlns:i18n="http://genshi.edgewall.org/i18n"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1340 i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1341 <div i18n:choose="two; fname, lname">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1342 <p i18n:singular="">Foo $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1343 <p i18n:plural="">Foos $fname $lname</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1344 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1345 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1346 translations = DummyTranslations()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1347 translations.add_domain('foo', {
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1348 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1349 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1350 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1351 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1352 })
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1353 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1354 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1355 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1356 <div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1357 <p>Vohs John Doe</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1358 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1359 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1360
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1361 def test_extract_i18n_msg_with_py_strip(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1362 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1363 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1364 <p i18n:msg="" py:strip="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1365 Please see <a href="help.html">Help</a> for details.
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1366 </p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1367 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1368 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1369 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1370 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1371 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1372 self.assertEqual((3, None, u'Please see [1:Help] for details.', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1373 messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1374
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1375 def test_extract_i18n_msg_with_py_strip_and_comment(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1376 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1377 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1378 <p i18n:msg="" py:strip="" i18n:comment="Foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1379 Please see <a href="help.html">Help</a> for details.
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1380 </p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1381 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1382 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1383 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1384 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1385 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1386 self.assertEqual((3, None, u'Please see [1:Help] for details.',
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1387 ['Foo']), messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1388
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1389 def test_extract_i18n_choose_as_attribute_and_py_strip(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1390 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1391 xmlns:i18n="http://genshi.edgewall.org/i18n">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1392 <div i18n:choose="one" py:strip="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1393 <p i18n:singular="" py:strip="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1394 <p i18n:plural="" py:strip="">FooBars</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1395 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1396 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1397 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1398 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1399 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1400 self.assertEqual(1, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1401 self.assertEqual((3, 'ngettext', (u'FooBar', u'FooBars'), []), messages[0])
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1402
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1403 def test_translate_i18n_domain_with_inline_directive_on_START_NS(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1404 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1405 xmlns:i18n="http://genshi.edgewall.org/i18n" i18n:domain="foo">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1406 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1407 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1408 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1409 translations.add_domain('foo', {'FooBar': 'BarFoo'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1410 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1411 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1412 self.assertEqual("""<html>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1413 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1414 </html>""", tmpl.generate().render())
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1415
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1416 def test_translate_i18n_domain_with_inline_directive_on_START_NS_with_py_strip(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1417 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1418 xmlns:i18n="http://genshi.edgewall.org/i18n"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1419 i18n:domain="foo" py:strip="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1420 <p i18n:msg="">FooBar</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1421 </html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1422 translations = DummyTranslations({'Bar': 'Voh'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1423 translations.add_domain('foo', {'FooBar': 'BarFoo'})
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1424 translator = Translator(translations)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1425 translator.setup(tmpl)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1426 self.assertEqual("""
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1427 <p>BarFoo</p>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1428 """, tmpl.generate().render())
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1429
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1430 class ExtractTestCase(unittest.TestCase):
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1431
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1432 def test_markup_template_extraction(self):
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1433 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/">
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1434 <head>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1435 <title>Example</title>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1436 </head>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1437 <body>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1438 <h1>Example</h1>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1439 <p>${_("Hello, %(name)s") % dict(name=username)}</p>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1440 <p>${ngettext("You have %d item", "You have %d items", num)}</p>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1441 </body>
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1442 </html>""")
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1443 results = list(extract(buf, ['_', 'ngettext'], [], {}))
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1444 self.assertEqual([
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1445 (3, None, u'Example', []),
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1446 (6, None, u'Example', []),
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1447 (7, '_', u'Hello, %(name)s', []),
565
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1448 (8, 'ngettext', (u'You have %d item', u'You have %d items', None),
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1449 []),
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1450 ], results)
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1451
596
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1452 def test_extraction_without_text(self):
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1453 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/">
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1454 <p title="Bar">Foo</p>
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1455 ${ngettext("Singular", "Plural", num)}
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1456 </html>""")
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1457 results = list(extract(buf, ['_', 'ngettext'], [], {
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1458 'extract_text': 'no'
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1459 }))
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1460 self.assertEqual([
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1461 (3, 'ngettext', (u'Singular', u'Plural', None), []),
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1462 ], results)
badb5e5b7bb9 Follow-up to [708]. The added `extract_text` option wasn't actually being handled by the Babel extraction plugin.
cmlenz
parents: 594
diff changeset
1463
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1464 def test_text_template_extraction(self):
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1465 buf = StringIO("""${_("Dear %(name)s") % {'name': name}},
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1466
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1467 ${ngettext("Your item:", "Your items", len(items))}
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1468 #for item in items
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1469 * $item
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1470 #end
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1471
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1472 All the best,
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1473 Foobar""")
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1474 results = list(extract(buf, ['_', 'ngettext'], [], {
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1475 'template_class': 'genshi.template:TextTemplate'
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1476 }))
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1477 self.assertEqual([
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1478 (1, '_', u'Dear %(name)s', []),
565
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1479 (3, 'ngettext', (u'Your item:', u'Your items', None), []),
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1480 (7, None, u'All the best,\n Foobar', [])
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1481 ], results)
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1482
565
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1483 def test_extraction_with_keyword_arg(self):
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1484 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/">
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1485 ${gettext('Foobar', foo='bar')}
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1486 </html>""")
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1487 results = list(extract(buf, ['gettext'], [], {}))
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1488 self.assertEqual([
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1489 (2, 'gettext', (u'Foobar'), []),
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1490 ], results)
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1491
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1492 def test_extraction_with_nonstring_arg(self):
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1493 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/">
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1494 ${dgettext(curdomain, 'Foobar')}
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1495 </html>""")
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1496 results = list(extract(buf, ['dgettext'], [], {}))
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1497 self.assertEqual([
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1498 (2, 'dgettext', (None, u'Foobar'), []),
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1499 ], results)
53b37e4f2921 * The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents: 560
diff changeset
1500
549
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1501 def test_extraction_inside_ignored_tags(self):
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1502 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/">
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1503 <script type="text/javascript">
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1504 $('#llist').tabs({
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1505 remote: true,
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1506 spinner: "${_('Please wait...')}"
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1507 });
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1508 </script>
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1509 </html>""")
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1510 results = list(extract(buf, ['_'], [], {}))
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1511 self.assertEqual([
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1512 (5, '_', u'Please wait...', []),
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1513 ], results)
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1514
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1515 def test_extraction_inside_ignored_tags_with_directives(self):
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1516 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/">
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1517 <script type="text/javascript">
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1518 <py:if test="foobar">
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1519 alert("This shouldn't be extracted");
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1520 </py:if>
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1521 </script>
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1522 </html>""")
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1523 self.assertEqual([], list(extract(buf, ['_'], [], {})))
7214c1bdb383 The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents: 535
diff changeset
1524
849
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1525 def test_extract_py_def_directive_with_py_strip(self):
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1526 # Failed extraction from Trac
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1527 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" py:strip="">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1528 <py:def function="diff_options_fields(diff)">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1529 <label for="style">View differences</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1530 <select id="style" name="style">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1531 <option selected="${diff.style == 'inline' or None}"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1532 value="inline">inline</option>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1533 <option selected="${diff.style == 'sidebyside' or None}"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1534 value="sidebyside">side by side</option>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1535 </select>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1536 <div class="field">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1537 Show <input type="text" name="contextlines" id="contextlines" size="2"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1538 maxlength="3" value="${diff.options.contextlines &lt; 0 and 'all' or diff.options.contextlines}" />
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1539 <label for="contextlines">lines around each change</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1540 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1541 <fieldset id="ignore" py:with="options = diff.options">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1542 <legend>Ignore:</legend>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1543 <div class="field">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1544 <input type="checkbox" id="ignoreblanklines" name="ignoreblanklines"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1545 checked="${options.ignoreblanklines or None}" />
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1546 <label for="ignoreblanklines">Blank lines</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1547 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1548 <div class="field">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1549 <input type="checkbox" id="ignorecase" name="ignorecase"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1550 checked="${options.ignorecase or None}" />
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1551 <label for="ignorecase">Case changes</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1552 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1553 <div class="field">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1554 <input type="checkbox" id="ignorewhitespace" name="ignorewhitespace"
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1555 checked="${options.ignorewhitespace or None}" />
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1556 <label for="ignorewhitespace">White space changes</label>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1557 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1558 </fieldset>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1559 <div class="buttons">
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1560 <input type="submit" name="update" value="${_('Update')}" />
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1561 </div>
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1562 </py:def></html>""")
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1563 translator = Translator()
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1564 tmpl.add_directives(Translator.NAMESPACE, translator)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1565 messages = list(translator.extract(tmpl.stream))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1566 self.assertEqual(10, len(messages))
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1567 self.assertEqual([
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1568 (3, None, u'View differences', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1569 (6, None, u'inline', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1570 (8, None, u'side by side', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1571 (10, None, u'Show', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1572 (13, None, u'lines around each change', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1573 (16, None, u'Ignore:', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1574 (20, None, u'Blank lines', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1575 (25, None, u'Case changes',[]),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1576 (30, None, u'White space changes', []),
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1577 (34, '_', u'Update', [])], messages)
878c4313c7d5 Merged advanced-i18n branch back into trunk.
cmlenz
parents: 790
diff changeset
1578
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1579
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1580 def suite():
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1581 suite = unittest.TestSuite()
709
9dd5f370a70e Python 2.3 compatibility fixes for transformer and (specifically for 2.3.1) i18n.
athomas
parents: 667
diff changeset
1582 suite.addTest(doctest.DocTestSuite(Translator.__module__))
485
fb66fb3e4b49 Follow-up to [583]: Don't extract strings from interpolated attribute values for attributes that shouldn't be included.
cmlenz
parents: 446
diff changeset
1583 suite.addTest(unittest.makeSuite(TranslatorTestCase, 'test'))
528
24df908da22d Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents: 522
diff changeset
1584 suite.addTest(unittest.makeSuite(ExtractTestCase, 'test'))
446
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1585 return suite
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1586
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1587 if __name__ == '__main__':
fd9c4f7a249a Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff changeset
1588 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software