Mercurial > genshi > mirror
annotate genshi/filters/tests/i18n.py @ 953:ea40c6ff63da stable-0.6.x
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
author | hodgestar |
---|---|
date | Sat, 03 Sep 2011 01:13:08 +0000 |
parents | 64f04a2c5e66 |
children | fa0e84724fee |
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 # |
897 | 3 # Copyright (C) 2007-2010 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 | 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 | 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 | 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 | 31 self._catalog = catalog or {} |
32 self.plural = lambda n: n != 1 | |
33 | |
34 def add_domain(self, domain, catalog): | |
35 translation = DummyTranslations(catalog) | |
36 translation.add_fallback(self) | |
37 self._domains[domain] = translation | |
38 | |
39 def _domain_call(self, func, domain, *args, **kwargs): | |
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 | 51 def dugettext(self, domain, message): |
52 return self._domain_call('ugettext', domain, message) | |
53 | |
54 def ungettext(self, msgid1, msgid2, n): | |
55 try: | |
56 return self._catalog[(msgid1, self.plural(n))] | |
57 except KeyError: | |
58 if self._fallback: | |
59 return self._fallback.ngettext(msgid1, msgid2, n) | |
60 if n == 1: | |
61 return msgid1 | |
62 else: | |
63 return msgid2 | |
64 | |
65 def dungettext(self, domain, singular, plural, numeral): | |
66 return self._domain_call('ungettext', domain, singular, plural, numeral) | |
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)) |
858 | 91 self.assertEqual((3, 'ngettext', ('Singular', '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)) |
858 | 101 self.assertEqual((2, 'ngettext', ('Singular', '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)) |
858 | 129 self.assertEqual((2, None, '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)) |
858 | 138 self.assertEqual((2, '_', '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)) |
858 | 147 self.assertEqual((2, None, '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)) |
858 | 156 self.assertEqual((2, None, '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)) |
858 | 173 self.assertEqual((2, None, '(c) 2007 Edgewall Software', []), |
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
|
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 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
184 def test_translate_with_translations_object(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
185 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
186 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
187 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
188 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
189 translator = Translator(DummyTranslations({'Foo': 'Voh'})) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
190 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
191 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
192 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
193 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
194 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
195 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
196 class MsgDirectiveTestCase(unittest.TestCase): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
197 |
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
|
198 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
|
199 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
|
200 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
|
201 <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
|
202 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
|
203 </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
|
204 </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
|
205 translator = Translator() |
849 | 206 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
|
207 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
|
208 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
|
209 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
|
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_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
|
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">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
|
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 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
|
219 translator = Translator(gettext) |
849 | 220 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
|
221 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
|
222 <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
|
223 </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
|
224 |
869
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
225 def test_extract_i18n_msg_nonewline(self): |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
226 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
227 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
228 <p i18n:msg="">Please see <a href="help.html">Help</a></p> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
229 </html>""") |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
230 translator = Translator() |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
231 tmpl.add_directives(Translator.NAMESPACE, translator) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
232 messages = list(translator.extract(tmpl.stream)) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
233 self.assertEqual(1, len(messages)) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
234 self.assertEqual('Please see [1:Help]', messages[0][2]) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
235 |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
236 def test_translate_i18n_msg_nonewline(self): |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
237 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
238 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
239 <p i18n:msg="">Please see <a href="help.html">Help</a></p> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
240 </html>""") |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
241 gettext = lambda s: u"Für Details siehe bitte [1:Hilfe]" |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
242 translator = Translator(gettext) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
243 translator.setup(tmpl) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
244 self.assertEqual("""<html> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
245 <p>Für Details siehe bitte <a href="help.html">Hilfe</a></p> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
246 </html>""", tmpl.generate().render()) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
247 |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
248 def test_extract_i18n_msg_elt_nonewline(self): |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
249 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
250 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
251 <i18n:msg>Please see <a href="help.html">Help</a></i18n:msg> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
252 </html>""") |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
253 translator = Translator() |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
254 tmpl.add_directives(Translator.NAMESPACE, translator) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
255 messages = list(translator.extract(tmpl.stream)) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
256 self.assertEqual(1, len(messages)) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
257 self.assertEqual('Please see [1:Help]', messages[0][2]) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
258 |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
259 def test_translate_i18n_msg_elt_nonewline(self): |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
260 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
261 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
262 <i18n:msg>Please see <a href="help.html">Help</a></i18n:msg> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
263 </html>""") |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
264 gettext = lambda s: u"Für Details siehe bitte [1:Hilfe]" |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
265 translator = Translator(gettext) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
266 translator.setup(tmpl) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
267 self.assertEqual("""<html> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
268 Für Details siehe bitte <a href="help.html">Hilfe</a> |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
269 </html>""", tmpl.generate().render()) |
013623773357
Apply patch for I18n message extraction bug as reported in #358. Thanks to cboos for the patch, again.
cmlenz
parents:
858
diff
changeset
|
270 |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
271 def test_extract_i18n_msg_with_attributes(self): |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
272 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
273 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
274 <p i18n:msg="" title="A helpful paragraph"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
275 Please see <a href="help.html" title="Click for help">Help</a> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
276 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
277 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
278 translator = Translator() |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
279 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
280 messages = list(translator.extract(tmpl.stream)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
281 self.assertEqual(3, len(messages)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
282 self.assertEqual('A helpful paragraph', messages[0][2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
283 self.assertEqual(3, messages[0][0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
284 self.assertEqual('Click for help', messages[1][2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
285 self.assertEqual(4, messages[1][0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
286 self.assertEqual('Please see [1:Help]', messages[2][2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
287 self.assertEqual(3, messages[2][0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
288 |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
289 def test_translate_i18n_msg_with_attributes(self): |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
290 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
291 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
292 <p i18n:msg="" title="A helpful paragraph"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
293 Please see <a href="help.html" title="Click for help">Help</a> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
294 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
295 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
296 translator = Translator(lambda msgid: { |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
297 'A helpful paragraph': 'Ein hilfreicher Absatz', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
298 'Click for help': u'Klicken für Hilfe', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
299 'Please see [1:Help]': u'Siehe bitte [1:Hilfe]' |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
300 }[msgid]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
301 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
302 self.assertEqual(u"""<html> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
303 <p title="Ein hilfreicher Absatz">Siehe bitte <a href="help.html" title="Klicken für Hilfe">Hilfe</a></p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
304 </html>""", tmpl.generate().render(encoding=None)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
305 |
893 | 306 def test_extract_i18n_msg_with_dynamic_attributes(self): |
307 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
308 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
309 <p i18n:msg="" title="${_('A helpful paragraph')}"> | |
310 Please see <a href="help.html" title="${_('Click for help')}">Help</a> | |
311 </p> | |
312 </html>""") | |
313 translator = Translator() | |
314 translator.setup(tmpl) | |
315 messages = list(translator.extract(tmpl.stream)) | |
316 self.assertEqual(3, len(messages)) | |
317 self.assertEqual('A helpful paragraph', messages[0][2]) | |
318 self.assertEqual(3, messages[0][0]) | |
319 self.assertEqual('Click for help', messages[1][2]) | |
320 self.assertEqual(4, messages[1][0]) | |
321 self.assertEqual('Please see [1:Help]', messages[2][2]) | |
322 self.assertEqual(3, messages[2][0]) | |
323 | |
324 def test_translate_i18n_msg_with_dynamic_attributes(self): | |
325 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
326 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
327 <p i18n:msg="" title="${_('A helpful paragraph')}"> | |
328 Please see <a href="help.html" title="${_('Click for help')}">Help</a> | |
329 </p> | |
330 </html>""") | |
331 translator = Translator(lambda msgid: { | |
332 'A helpful paragraph': 'Ein hilfreicher Absatz', | |
333 'Click for help': u'Klicken für Hilfe', | |
334 'Please see [1:Help]': u'Siehe bitte [1:Hilfe]' | |
335 }[msgid]) | |
336 translator.setup(tmpl) | |
337 self.assertEqual(u"""<html> | |
338 <p title="Ein hilfreicher Absatz">Siehe bitte <a href="help.html" title="Klicken für Hilfe">Hilfe</a></p> | |
339 </html>""", tmpl.generate(_=translator.translate).render(encoding=None)) | |
340 | |
341 def test_extract_i18n_msg_as_element_with_attributes(self): | |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
342 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
343 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
344 <i18n:msg params=""> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
345 Please see <a href="help.html" title="Click for help">Help</a> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
346 </i18n:msg> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
347 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
348 translator = Translator() |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
349 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
350 messages = list(translator.extract(tmpl.stream)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
351 self.assertEqual(2, len(messages)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
352 self.assertEqual('Click for help', messages[0][2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
353 self.assertEqual(4, messages[0][0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
354 self.assertEqual('Please see [1:Help]', messages[1][2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
355 self.assertEqual(3, messages[1][0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
356 |
893 | 357 def test_translate_i18n_msg_as_element_with_attributes(self): |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
358 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
359 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
360 <i18n:msg params=""> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
361 Please see <a href="help.html" title="Click for help">Help</a> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
362 </i18n:msg> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
363 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
364 translator = Translator(lambda msgid: { |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
365 'Click for help': u'Klicken für Hilfe', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
366 'Please see [1:Help]': u'Siehe bitte [1:Hilfe]' |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
367 }[msgid]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
368 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
369 self.assertEqual(u"""<html> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
370 Siehe bitte <a href="help.html" title="Klicken für Hilfe">Hilfe</a> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
371 </html>""", tmpl.generate().render(encoding=None)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
372 |
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
|
373 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
|
374 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
|
375 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
|
376 <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
|
377 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
|
378 </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
|
379 </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
|
380 translator = Translator() |
849 | 381 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
|
382 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
|
383 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
|
384 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
|
385 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
|
386 |
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
|
387 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
|
388 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
|
389 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
|
390 <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
|
391 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
|
392 </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
|
393 </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
|
394 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
|
395 translator = Translator(gettext) |
849 | 396 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
|
397 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
|
398 <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
|
399 </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
|
400 |
849 | 401 def test_extract_i18n_msg_label_with_nested_input(self): |
402 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
403 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
404 <div i18n:msg=""> | |
405 <label><input type="text" size="3" name="daysback" value="30" /> days back</label> | |
406 </div> | |
407 </html>""") | |
408 translator = Translator() | |
409 tmpl.add_directives(Translator.NAMESPACE, translator) | |
410 messages = list(translator.extract(tmpl.stream)) | |
411 self.assertEqual(1, len(messages)) | |
412 self.assertEqual('[1:[2:] days back]', | |
413 messages[0][2]) | |
414 | |
415 def test_translate_i18n_msg_label_with_nested_input(self): | |
416 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
417 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
418 <div i18n:msg=""> | |
419 <label><input type="text" size="3" name="daysback" value="30" /> foo bar</label> | |
420 </div> | |
421 </html>""") | |
422 gettext = lambda s: "[1:[2:] foo bar]" | |
423 translator = Translator(gettext) | |
424 translator.setup(tmpl) | |
425 self.assertEqual("""<html> | |
426 <div><label><input type="text" size="3" name="daysback" value="30"/> foo bar</label></div> | |
427 </html>""", tmpl.generate().render()) | |
428 | |
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
|
429 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
|
430 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
|
431 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
|
432 <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
|
433 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
|
434 </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
|
435 </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
|
436 translator = Translator() |
849 | 437 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
|
438 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
|
439 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
|
440 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
|
441 |
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 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
|
443 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
|
444 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
|
445 <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
|
446 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
|
447 </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
|
448 </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
|
449 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
|
450 translator = Translator(gettext) |
849 | 451 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
|
452 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
|
453 <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
|
454 </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
|
455 |
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
|
456 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
|
457 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
|
458 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
|
459 <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
|
460 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
|
461 </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
|
462 </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
|
463 translator = Translator() |
849 | 464 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
|
465 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
|
466 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
|
467 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
|
468 |
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
|
469 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
|
470 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
|
471 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
|
472 <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
|
473 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
|
474 </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
|
475 </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
|
476 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
|
477 translator = Translator(gettext) |
849 | 478 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
|
479 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
|
480 <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
|
481 </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
|
482 |
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
|
483 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
|
484 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
|
485 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
|
486 <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
|
487 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
|
488 </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
|
489 </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
|
490 translator = Translator() |
849 | 491 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
|
492 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
|
493 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
|
494 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
|
495 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
|
496 |
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
|
497 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
|
498 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
|
499 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
|
500 <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
|
501 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
|
502 </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
|
503 </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
|
504 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
|
505 translator = Translator(gettext) |
849 | 506 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
|
507 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
|
508 <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
|
509 </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
|
510 |
776
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
511 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
|
512 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
|
513 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
|
514 <p i18n:msg="name"> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
515 Hello, ${user.name}! |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
516 </p> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
517 </html>""") |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
518 translator = Translator() |
849 | 519 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
|
520 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
|
521 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
|
522 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
|
523 |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
524 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
|
525 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
|
526 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
|
527 <p i18n:msg="name"> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
528 Hello, ${user.name}! |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
529 </p> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
530 </html>""") |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
531 gettext = lambda s: u"Hallo, %(name)s!" |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
532 translator = Translator(gettext) |
849 | 533 translator.setup(tmpl) |
776
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
534 self.assertEqual("""<html> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
535 <p>Hallo, Jim!</p> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
536 </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
|
537 |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
538 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
|
539 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
|
540 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
|
541 <p i18n:msg="name"> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
542 Hello, ${user.name}! |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
543 </p> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
544 </html>""") |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
545 gettext = lambda s: u"%(name)s, sei gegrüßt!" |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
546 translator = Translator(gettext) |
849 | 547 translator.setup(tmpl) |
776
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
548 self.assertEqual("""<html> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
549 <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
|
550 </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
|
551 |
785
36fb0a57fe74
Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents:
776
diff
changeset
|
552 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
|
553 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
|
554 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
|
555 <p i18n:msg=""> |
36fb0a57fe74
Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents:
776
diff
changeset
|
556 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
|
557 </p> |
36fb0a57fe74
Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents:
776
diff
changeset
|
558 </html>""") |
36fb0a57fe74
Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents:
776
diff
changeset
|
559 gettext = lambda s: u"Sei gegrüßt, [1:Alter]!" |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
560 translator = Translator(gettext) |
849 | 561 translator.setup(tmpl) |
785
36fb0a57fe74
Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents:
776
diff
changeset
|
562 self.assertEqual("""<html> |
36fb0a57fe74
Fix for #250: ignore expressions in attribute values when inside `i18n:msg` elements.
cmlenz
parents:
776
diff
changeset
|
563 <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
|
564 </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
|
565 |
776
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
566 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
|
567 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
|
568 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
|
569 <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
|
570 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
|
571 </p> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
572 </html>""") |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
573 translator = Translator() |
849 | 574 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
|
575 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
|
576 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
|
577 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
|
578 |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
579 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
|
580 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
|
581 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
|
582 <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
|
583 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
|
584 </p> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
585 </html>""") |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
586 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
|
587 translator = Translator(gettext) |
849 | 588 translator.setup(tmpl) |
776
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
589 entry = { |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
590 'author': 'Jim', |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
591 '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
|
592 } |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
593 self.assertEqual("""<html> |
ddb58d74c8ee
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
cmlenz
parents:
719
diff
changeset
|
594 <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
|
595 </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
|
596 |
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
|
597 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
|
598 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
|
599 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
|
600 <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
|
601 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
|
602 </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
|
603 </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
|
604 translator = Translator() |
849 | 605 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
|
606 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
|
607 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
|
608 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
|
609 |
849 | 610 def test_translate_i18n_msg_with_directive(self): |
611 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
612 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
613 <p i18n:msg=""> | |
614 Show me <input type="text" name="num" py:attrs="{'value': 'x'}" /> entries per page. | |
615 </p> | |
616 </html>""") | |
617 gettext = lambda s: u"[1:] Einträge pro Seite anzeigen." | |
618 translator = Translator(gettext) | |
619 translator.setup(tmpl) | |
620 self.assertEqual("""<html> | |
621 <p><input type="text" name="num" value="x"/> Einträge pro Seite anzeigen.</p> | |
622 </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
|
623 |
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
|
624 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
|
625 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
|
626 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
849 | 627 <p i18n:comment="As in foo bar" i18n:msg="">Foo</p> |
628 </html>""") | |
629 translator = Translator() | |
630 tmpl.add_directives(Translator.NAMESPACE, translator) | |
631 messages = list(translator.extract(tmpl.stream)) | |
632 self.assertEqual(1, len(messages)) | |
858 | 633 self.assertEqual((3, None, 'Foo', ['As in foo bar']), messages[0]) |
849 | 634 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
635 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
|
636 <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
|
637 </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
|
638 translator = Translator() |
849 | 639 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
|
640 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
|
641 self.assertEqual(1, len(messages)) |
858 | 642 self.assertEqual((3, None, 'Foo', ['As in foo bar']), messages[0]) |
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
|
643 |
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
|
644 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
|
645 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
|
646 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
|
647 <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
|
648 </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
|
649 gettext = lambda s: u"Voh" |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
650 translator = Translator(gettext) |
849 | 651 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
|
652 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
|
653 <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
|
654 </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
|
655 |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
656 def test_extract_i18n_msg_with_attr(self): |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
657 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
658 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
659 <p i18n:msg="" title="Foo bar">Foo</p> |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
660 </html>""") |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
661 translator = Translator() |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
662 messages = list(translator.extract(tmpl.stream)) |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
663 self.assertEqual(2, len(messages)) |
858 | 664 self.assertEqual((3, None, 'Foo bar', []), messages[0]) |
665 self.assertEqual((3, None, 'Foo', []), messages[1]) | |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
666 |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
667 def test_translate_i18n_msg_with_attr(self): |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
668 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
669 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
670 <p i18n:msg="" title="Foo bar">Foo</p> |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
671 </html>""") |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
672 gettext = lambda s: u"Voh" |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
673 translator = Translator(DummyTranslations({ |
858 | 674 'Foo': 'Voh', |
790
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
675 'Foo bar': u'Voh bär' |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
676 })) |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
677 tmpl.filters.insert(0, translator) |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
678 tmpl.add_directives(Translator.NAMESPACE, translator) |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
679 self.assertEqual("""<html> |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
680 <p title="Voh bär">Voh</p> |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
681 </html>""", tmpl.generate().render()) |
da90cee22560
Merged the custom-directives branch back into trunk.
cmlenz
parents:
788
diff
changeset
|
682 |
849 | 683 def test_translate_i18n_msg_and_py_strip_directives(self): |
684 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
685 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
686 <p i18n:msg="" py:strip="">Foo</p> | |
687 <p py:strip="" i18n:msg="">Foo</p> | |
688 </html>""") | |
689 translator = Translator(DummyTranslations({'Foo': 'Voh'})) | |
690 translator.setup(tmpl) | |
691 self.assertEqual("""<html> | |
692 Voh | |
693 Voh | |
694 </html>""", tmpl.generate().render()) | |
695 | |
696 def test_i18n_msg_ticket_300_extract(self): | |
697 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
698 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
699 <i18n:msg params="date, author"> | |
700 Changed ${ '10/12/2008' } ago by ${ 'me, the author' } | |
701 </i18n:msg> | |
702 </html>""") | |
703 translator = Translator() | |
704 tmpl.add_directives(Translator.NAMESPACE, translator) | |
705 messages = list(translator.extract(tmpl.stream)) | |
706 self.assertEqual(1, len(messages)) | |
707 self.assertEqual( | |
858 | 708 (3, None, 'Changed %(date)s ago by %(author)s', []), messages[0] |
849 | 709 ) |
710 | |
711 def test_i18n_msg_ticket_300_translate(self): | |
712 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
713 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
714 <i18n:msg params="date, author"> | |
715 Changed ${ date } ago by ${ author } | |
716 </i18n:msg> | |
717 </html>""") | |
718 translations = DummyTranslations({ | |
858 | 719 'Changed %(date)s ago by %(author)s': u'Modificado à %(date)s por %(author)s' |
849 | 720 }) |
721 translator = Translator(translations) | |
722 translator.setup(tmpl) | |
723 self.assertEqual("""<html> | |
724 Modificado à um dia por Pedro | |
725 </html>""", tmpl.generate(date='um dia', author="Pedro").render()) | |
726 | |
727 | |
728 def test_i18n_msg_ticket_251_extract(self): | |
729 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
730 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
731 <p i18n:msg=""><tt><b>Translation[ 0 ]</b>: <em>One coin</em></tt></p> | |
732 </html>""") | |
733 translator = Translator() | |
734 tmpl.add_directives(Translator.NAMESPACE, translator) | |
735 messages = list(translator.extract(tmpl.stream)) | |
736 self.assertEqual(1, len(messages)) | |
737 self.assertEqual( | |
738 (3, None, u'[1:[2:Translation\\[\xa00\xa0\\]]: [3:One coin]]', []), messages[0] | |
739 ) | |
740 | |
741 def test_i18n_msg_ticket_251_translate(self): | |
742 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
743 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
744 <p i18n:msg=""><tt><b>Translation[ 0 ]</b>: <em>One coin</em></tt></p> | |
745 </html>""") | |
746 translations = DummyTranslations({ | |
747 u'[1:[2:Translation\\[\xa00\xa0\\]]: [3:One coin]]': | |
748 u'[1:[2:Trandução\\[\xa00\xa0\\]]: [3:Uma moeda]]' | |
749 }) | |
750 translator = Translator(translations) | |
751 translator.setup(tmpl) | |
752 self.assertEqual("""<html> | |
753 <p><tt><b>Trandução[ 0 ]</b>: <em>Uma moeda</em></tt></p> | |
754 </html>""", tmpl.generate().render()) | |
755 | |
756 def test_extract_i18n_msg_with_other_directives_nested(self): | |
757 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
758 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
759 <p i18n:msg="" py:with="q = quote_plus(message[:80])">Before you do that, though, please first try | |
760 <strong><a href="${trac.homepage}search?ticket=yes&noquickjump=1&q=$q">searching</a> | |
761 for similar issues</strong>, as it is quite likely that this problem | |
762 has been reported before. For questions about installation | |
763 and configuration of Trac, please try the | |
764 <a href="${trac.homepage}wiki/MailingList">mailing list</a> | |
765 instead of filing a ticket. | |
766 </p> | |
767 </html>""") | |
768 translator = Translator() | |
769 translator.setup(tmpl) | |
770 messages = list(translator.extract(tmpl.stream)) | |
771 self.assertEqual(1, len(messages)) | |
772 self.assertEqual( | |
858 | 773 'Before you do that, though, please first try\n ' |
774 '[1:[2:searching]\n for similar issues], as it is ' | |
775 'quite likely that this problem\n has been reported ' | |
776 'before. For questions about installation\n and ' | |
777 'configuration of Trac, please try the\n ' | |
778 '[3:mailing list]\n instead of filing a ticket.', | |
849 | 779 messages[0][2] |
780 ) | |
781 | |
782 def test_translate_i18n_msg_with_other_directives_nested(self): | |
783 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
784 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
785 <p i18n:msg="">Before you do that, though, please first try | |
786 <strong><a href="${trac.homepage}search?ticket=yes&noquickjump=1&q=q">searching</a> | |
787 for similar issues</strong>, as it is quite likely that this problem | |
788 has been reported before. For questions about installation | |
789 and configuration of Trac, please try the | |
790 <a href="${trac.homepage}wiki/MailingList">mailing list</a> | |
791 instead of filing a ticket. | |
792 </p> | |
793 </html>""") | |
794 translations = DummyTranslations({ | |
858 | 795 'Before you do that, though, please first try\n ' |
796 '[1:[2:searching]\n for similar issues], as it is ' | |
797 'quite likely that this problem\n has been reported ' | |
798 'before. For questions about installation\n and ' | |
799 'configuration of Trac, please try the\n ' | |
800 '[3:mailing list]\n instead of filing a ticket.': | |
849 | 801 u'Antes de o fazer, porém,\n ' |
802 u'[1:por favor tente [2:procurar]\n por problemas semelhantes], uma vez que ' | |
803 u'é muito provável que este problema\n já tenha sido reportado ' | |
804 u'anteriormente. Para questões relativas à instalação\n e ' | |
805 u'configuração do Trac, por favor tente a\n ' | |
806 u'[3:mailing list]\n em vez de criar um assunto.' | |
807 }) | |
808 translator = Translator(translations) | |
809 translator.setup(tmpl) | |
810 messages = list(translator.extract(tmpl.stream)) | |
811 self.assertEqual(1, len(messages)) | |
812 ctx = Context() | |
813 ctx.push({'trac': {'homepage': 'http://trac.edgewall.org/'}}) | |
814 self.assertEqual("""<html> | |
815 <p>Antes de o fazer, porém, | |
816 <strong>por favor tente <a href="http://trac.edgewall.org/search?ticket=yes&noquickjump=1&q=q">procurar</a> | |
817 por problemas semelhantes</strong>, uma vez que é muito provável que este problema | |
818 já tenha sido reportado anteriormente. Para questões relativas à instalação | |
819 e configuração do Trac, por favor tente a | |
820 <a href="http://trac.edgewall.org/wiki/MailingList">mailing list</a> | |
821 em vez de criar um assunto.</p> | |
822 </html>""", tmpl.generate(ctx).render()) | |
823 | |
824 def test_i18n_msg_with_other_nested_directives_with_reordered_content(self): | |
825 # See: http://genshi.edgewall.org/ticket/300#comment:10 | |
826 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
827 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
828 <p py:if="not editable" class="hint" i18n:msg=""> | |
829 <strong>Note:</strong> This repository is defined in | |
830 <code><a href="${ 'href.wiki(TracIni)' }">trac.ini</a></code> | |
831 and cannot be edited on this page. | |
832 </p> | |
833 </html>""") | |
834 translations = DummyTranslations({ | |
858 | 835 '[1:Note:] This repository is defined in\n ' |
836 '[2:[3:trac.ini]]\n and cannot be edited on this page.': | |
849 | 837 u'[1:Nota:] Este repositório está definido em \n ' |
838 u'[2:[3:trac.ini]]\n e não pode ser editado nesta página.', | |
839 }) | |
840 translator = Translator(translations) | |
841 translator.setup(tmpl) | |
842 messages = list(translator.extract(tmpl.stream)) | |
843 self.assertEqual(1, len(messages)) | |
844 self.assertEqual( | |
858 | 845 '[1:Note:] This repository is defined in\n ' |
846 '[2:[3:trac.ini]]\n and cannot be edited on this page.', | |
849 | 847 messages[0][2] |
848 ) | |
849 self.assertEqual("""<html> | |
850 <p class="hint"><strong>Nota:</strong> Este repositório está definido em | |
851 <code><a href="href.wiki(TracIni)">trac.ini</a></code> | |
852 e não pode ser editado nesta página.</p> | |
853 </html>""", tmpl.generate(editable=False).render()) | |
854 | |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
855 def test_extract_i18n_msg_with_py_strip(self): |
849 | 856 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
857 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
858 <p i18n:msg="" py:strip=""> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
859 Please see <a href="help.html">Help</a> for details. |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
860 </p> |
849 | 861 </html>""") |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
862 translator = Translator() |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
863 tmpl.add_directives(Translator.NAMESPACE, translator) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
864 messages = list(translator.extract(tmpl.stream)) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
865 self.assertEqual(1, len(messages)) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
866 self.assertEqual((3, None, 'Please see [1:Help] for details.', []), |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
867 messages[0]) |
849 | 868 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
869 def test_extract_i18n_msg_with_py_strip_and_comment(self): |
849 | 870 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
871 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
872 <p i18n:msg="" py:strip="" i18n:comment="Foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
873 Please see <a href="help.html">Help</a> for details. |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
874 </p> |
849 | 875 </html>""") |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
876 translator = Translator() |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
877 tmpl.add_directives(Translator.NAMESPACE, translator) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
878 messages = list(translator.extract(tmpl.stream)) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
879 self.assertEqual(1, len(messages)) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
880 self.assertEqual((3, None, 'Please see [1:Help] for details.', |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
881 ['Foo']), messages[0]) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
882 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
883 def test_translate_i18n_msg_and_comment_with_py_strip_directives(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
884 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
885 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
886 <p i18n:msg="" i18n:comment="As in foo bar" py:strip="">Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
887 <p py:strip="" i18n:msg="" i18n:comment="As in foo bar">Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
888 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
889 translator = Translator(DummyTranslations({'Foo': 'Voh'})) |
849 | 890 translator.setup(tmpl) |
891 self.assertEqual("""<html> | |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
892 Voh |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
893 Voh |
849 | 894 </html>""", tmpl.generate().render()) |
895 | |
953
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
896 def test_translate_i18n_msg_ticket_404(self): |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
897 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
898 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
899 <p i18n:msg="first,second"> |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
900 $first <span>$second</span> KEPT <span>Inside a tag</span> tail |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
901 </p></html>""") |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
902 translator = Translator(DummyTranslations()) |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
903 translator.setup(tmpl) |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
904 self.assertEqual("""<html> |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
905 <p>FIRST <span>SECOND</span> KEPT <span>Inside a tag</span> tail""" |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
906 """</p></html>""", |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
907 tmpl.generate(first="FIRST", second="SECOND").render()) |
ea40c6ff63da
Merge r1177 from trunk (support multiple stream events around tags inside translated messages -- see #404).
hodgestar
parents:
897
diff
changeset
|
908 |
849 | 909 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
910 class ChooseDirectiveTestCase(unittest.TestCase): |
849 | 911 |
912 def test_translate_i18n_choose_as_attribute(self): | |
913 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
914 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
915 <div i18n:choose="one"> | |
916 <p i18n:singular="">FooBar</p> | |
917 <p i18n:plural="">FooBars</p> | |
918 </div> | |
919 <div i18n:choose="two"> | |
920 <p i18n:singular="">FooBar</p> | |
921 <p i18n:plural="">FooBars</p> | |
922 </div> | |
923 </html>""") | |
924 translations = DummyTranslations() | |
925 translator = Translator(translations) | |
926 translator.setup(tmpl) | |
927 self.assertEqual("""<html> | |
928 <div> | |
929 <p>FooBar</p> | |
930 </div> | |
931 <div> | |
932 <p>FooBars</p> | |
933 </div> | |
934 </html>""", tmpl.generate(one=1, two=2).render()) | |
935 | |
936 def test_translate_i18n_choose_as_directive(self): | |
937 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
938 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
939 <i18n:choose numeral="two"> | |
940 <p i18n:singular="">FooBar</p> | |
941 <p i18n:plural="">FooBars</p> | |
942 </i18n:choose> | |
943 <i18n:choose numeral="one"> | |
944 <p i18n:singular="">FooBar</p> | |
945 <p i18n:plural="">FooBars</p> | |
946 </i18n:choose> | |
947 </html>""") | |
948 translations = DummyTranslations() | |
949 translator = Translator(translations) | |
950 translator.setup(tmpl) | |
951 self.assertEqual("""<html> | |
952 <p>FooBars</p> | |
953 <p>FooBar</p> | |
954 </html>""", tmpl.generate(one=1, two=2).render()) | |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
955 |
873
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
956 def test_translate_i18n_choose_as_directive_singular_and_plural_with_strip(self): |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
957 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
958 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
959 <i18n:choose numeral="two"> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
960 <p i18n:singular="" py:strip="">FooBar Singular with Strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
961 <p i18n:plural="">FooBars Plural without Strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
962 </i18n:choose> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
963 <i18n:choose numeral="two"> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
964 <p i18n:singular="">FooBar singular without strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
965 <p i18n:plural="" py:strip="">FooBars plural with strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
966 </i18n:choose> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
967 <i18n:choose numeral="one"> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
968 <p i18n:singular="">FooBar singular without strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
969 <p i18n:plural="" py:strip="">FooBars plural with strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
970 </i18n:choose> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
971 <i18n:choose numeral="one"> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
972 <p i18n:singular="" py:strip="">FooBar singular with strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
973 <p i18n:plural="">FooBars plural without strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
974 </i18n:choose> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
975 </html>""") |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
976 translations = DummyTranslations() |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
977 translator = Translator(translations) |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
978 translator.setup(tmpl) |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
979 self.assertEqual("""<html> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
980 <p>FooBars Plural without Strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
981 FooBars plural with strip |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
982 <p>FooBar singular without strip</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
983 FooBar singular with strip |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
984 </html>""", tmpl.generate(one=1, two=2).render()) |
849 | 985 |
871
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
986 def test_translate_i18n_choose_plural_singular_as_directive(self): |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
987 # Ticket 371 |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
988 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
989 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
990 <i18n:choose numeral="two"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
991 <i18n:singular>FooBar</i18n:singular> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
992 <i18n:plural>FooBars</i18n:plural> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
993 </i18n:choose> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
994 <i18n:choose numeral="one"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
995 <i18n:singular>FooBar</i18n:singular> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
996 <i18n:plural>FooBars</i18n:plural> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
997 </i18n:choose> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
998 </html>""") |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
999 translations = DummyTranslations({ |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1000 ('FooBar', 0): 'FuBar', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1001 ('FooBars', 1): 'FuBars', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1002 'FooBar': 'FuBar', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1003 'FooBars': 'FuBars', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1004 }) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1005 translator = Translator(translations) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1006 translator.setup(tmpl) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1007 self.assertEqual("""<html> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1008 FuBars |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1009 FuBar |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1010 </html>""", tmpl.generate(one=1, two=2).render()) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1011 |
849 | 1012 def test_translate_i18n_choose_as_attribute_with_params(self): |
1013 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1014 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1015 <div i18n:choose="two; fname, lname"> | |
1016 <p i18n:singular="">Foo $fname $lname</p> | |
1017 <p i18n:plural="">Foos $fname $lname</p> | |
1018 </div> | |
1019 </html>""") | |
1020 translations = DummyTranslations({ | |
1021 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', | |
1022 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', | |
1023 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', | |
1024 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', | |
1025 }) | |
1026 translator = Translator(translations) | |
1027 translator.setup(tmpl) | |
1028 self.assertEqual("""<html> | |
1029 <div> | |
1030 <p>Vohs John Doe</p> | |
1031 </div> | |
1032 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render()) | |
1033 | |
1034 def test_translate_i18n_choose_as_attribute_with_params_and_domain_as_param(self): | |
1035 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1036 xmlns:i18n="http://genshi.edgewall.org/i18n" | |
1037 i18n:domain="foo"> | |
1038 <div i18n:choose="two; fname, lname"> | |
1039 <p i18n:singular="">Foo $fname $lname</p> | |
1040 <p i18n:plural="">Foos $fname $lname</p> | |
1041 </div> | |
1042 </html>""") | |
1043 translations = DummyTranslations() | |
1044 translations.add_domain('foo', { | |
1045 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', | |
1046 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', | |
1047 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', | |
1048 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', | |
1049 }) | |
1050 translator = Translator(translations) | |
1051 translator.setup(tmpl) | |
1052 self.assertEqual("""<html> | |
1053 <div> | |
1054 <p>Vohs John Doe</p> | |
1055 </div> | |
1056 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render()) | |
1057 | |
1058 def test_translate_i18n_choose_as_directive_with_params(self): | |
1059 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1060 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1061 <i18n:choose numeral="two" params="fname, lname"> | |
1062 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1063 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1064 </i18n:choose> | |
1065 <i18n:choose numeral="one" params="fname, lname"> | |
1066 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1067 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1068 </i18n:choose> | |
1069 </html>""") | |
1070 translations = DummyTranslations({ | |
1071 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', | |
1072 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', | |
1073 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', | |
1074 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', | |
1075 }) | |
1076 translator = Translator(translations) | |
1077 translator.setup(tmpl) | |
1078 self.assertEqual("""<html> | |
1079 <p>Vohs John Doe</p> | |
1080 <p>Voh John Doe</p> | |
1081 </html>""", tmpl.generate(one=1, two=2, | |
1082 fname='John', lname='Doe').render()) | |
1083 | |
1084 def test_translate_i18n_choose_as_directive_with_params_and_domain_as_directive(self): | |
1085 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1086 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1087 <i18n:domain name="foo"> | |
1088 <i18n:choose numeral="two" params="fname, lname"> | |
1089 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1090 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1091 </i18n:choose> | |
1092 </i18n:domain> | |
1093 <i18n:choose numeral="one" params="fname, lname"> | |
1094 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1095 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1096 </i18n:choose> | |
1097 </html>""") | |
1098 translations = DummyTranslations() | |
1099 translations.add_domain('foo', { | |
1100 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', | |
1101 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', | |
1102 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', | |
1103 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', | |
1104 }) | |
1105 translator = Translator(translations) | |
1106 translator.setup(tmpl) | |
1107 self.assertEqual("""<html> | |
1108 <p>Vohs John Doe</p> | |
1109 <p>Foo John Doe</p> | |
1110 </html>""", tmpl.generate(one=1, two=2, | |
1111 fname='John', lname='Doe').render()) | |
1112 | |
1113 def test_extract_i18n_choose_as_attribute(self): | |
1114 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1115 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1116 <div i18n:choose="one"> | |
1117 <p i18n:singular="">FooBar</p> | |
1118 <p i18n:plural="">FooBars</p> | |
1119 </div> | |
1120 <div i18n:choose="two"> | |
1121 <p i18n:singular="">FooBar</p> | |
1122 <p i18n:plural="">FooBars</p> | |
1123 </div> | |
1124 </html>""") | |
1125 translator = Translator() | |
1126 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1127 messages = list(translator.extract(tmpl.stream)) | |
1128 self.assertEqual(2, len(messages)) | |
858 | 1129 self.assertEqual((3, 'ngettext', ('FooBar', 'FooBars'), []), messages[0]) |
1130 self.assertEqual((7, 'ngettext', ('FooBar', 'FooBars'), []), messages[1]) | |
849 | 1131 |
1132 def test_extract_i18n_choose_as_directive(self): | |
1133 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1134 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1135 <i18n:choose numeral="two"> | |
1136 <p i18n:singular="">FooBar</p> | |
1137 <p i18n:plural="">FooBars</p> | |
1138 </i18n:choose> | |
1139 <i18n:choose numeral="one"> | |
1140 <p i18n:singular="">FooBar</p> | |
1141 <p i18n:plural="">FooBars</p> | |
1142 </i18n:choose> | |
1143 </html>""") | |
1144 translator = Translator() | |
1145 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1146 messages = list(translator.extract(tmpl.stream)) | |
1147 self.assertEqual(2, len(messages)) | |
858 | 1148 self.assertEqual((3, 'ngettext', ('FooBar', 'FooBars'), []), messages[0]) |
1149 self.assertEqual((7, 'ngettext', ('FooBar', 'FooBars'), []), messages[1]) | |
849 | 1150 |
1151 def test_extract_i18n_choose_as_attribute_with_params(self): | |
1152 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1153 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1154 <div i18n:choose="two; fname, lname"> | |
1155 <p i18n:singular="">Foo $fname $lname</p> | |
1156 <p i18n:plural="">Foos $fname $lname</p> | |
1157 </div> | |
1158 </html>""") | |
1159 translator = Translator() | |
1160 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1161 messages = list(translator.extract(tmpl.stream)) | |
1162 self.assertEqual(1, len(messages)) | |
858 | 1163 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1164 'Foos %(fname)s %(lname)s'), []), | |
849 | 1165 messages[0]) |
1166 | |
1167 def test_extract_i18n_choose_as_attribute_with_params_and_domain_as_param(self): | |
1168 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1169 xmlns:i18n="http://genshi.edgewall.org/i18n" | |
1170 i18n:domain="foo"> | |
1171 <div i18n:choose="two; fname, lname"> | |
1172 <p i18n:singular="">Foo $fname $lname</p> | |
1173 <p i18n:plural="">Foos $fname $lname</p> | |
1174 </div> | |
1175 </html>""") | |
1176 translator = Translator() | |
1177 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1178 messages = list(translator.extract(tmpl.stream)) | |
1179 self.assertEqual(1, len(messages)) | |
858 | 1180 self.assertEqual((4, 'ngettext', ('Foo %(fname)s %(lname)s', |
1181 'Foos %(fname)s %(lname)s'), []), | |
849 | 1182 messages[0]) |
1183 | |
1184 def test_extract_i18n_choose_as_directive_with_params(self): | |
1185 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1186 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1187 <i18n:choose numeral="two" params="fname, lname"> | |
1188 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1189 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1190 </i18n:choose> | |
1191 <i18n:choose numeral="one" params="fname, lname"> | |
1192 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1193 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1194 </i18n:choose> | |
1195 </html>""") | |
1196 translator = Translator() | |
1197 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1198 messages = list(translator.extract(tmpl.stream)) | |
1199 self.assertEqual(2, len(messages)) | |
858 | 1200 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1201 'Foos %(fname)s %(lname)s'), []), | |
849 | 1202 messages[0]) |
858 | 1203 self.assertEqual((7, 'ngettext', ('Foo %(fname)s %(lname)s', |
1204 'Foos %(fname)s %(lname)s'), []), | |
849 | 1205 messages[1]) |
1206 | |
1207 def test_extract_i18n_choose_as_directive_with_params_and_domain_as_directive(self): | |
1208 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1209 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1210 <i18n:domain name="foo"> | |
1211 <i18n:choose numeral="two" params="fname, lname"> | |
1212 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1213 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1214 </i18n:choose> | |
1215 </i18n:domain> | |
1216 <i18n:choose numeral="one" params="fname, lname"> | |
1217 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1218 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1219 </i18n:choose> | |
1220 </html>""") | |
1221 translator = Translator() | |
1222 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1223 messages = list(translator.extract(tmpl.stream)) | |
1224 self.assertEqual(2, len(messages)) | |
858 | 1225 self.assertEqual((4, 'ngettext', ('Foo %(fname)s %(lname)s', |
1226 'Foos %(fname)s %(lname)s'), []), | |
849 | 1227 messages[0]) |
858 | 1228 self.assertEqual((9, 'ngettext', ('Foo %(fname)s %(lname)s', |
1229 'Foos %(fname)s %(lname)s'), []), | |
849 | 1230 messages[1]) |
1231 | |
1232 def test_extract_i18n_choose_as_attribute_with_params_and_comment(self): | |
1233 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1234 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1235 <div i18n:choose="two; fname, lname" i18n:comment="As in Foo Bar"> | |
1236 <p i18n:singular="">Foo $fname $lname</p> | |
1237 <p i18n:plural="">Foos $fname $lname</p> | |
1238 </div> | |
1239 </html>""") | |
1240 translator = Translator() | |
1241 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1242 messages = list(translator.extract(tmpl.stream)) | |
1243 self.assertEqual(1, len(messages)) | |
858 | 1244 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1245 'Foos %(fname)s %(lname)s'), | |
1246 ['As in Foo Bar']), | |
849 | 1247 messages[0]) |
1248 | |
1249 def test_extract_i18n_choose_as_directive_with_params_and_comment(self): | |
1250 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1251 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1252 <i18n:choose numeral="two" params="fname, lname" i18n:comment="As in Foo Bar"> | |
1253 <p i18n:singular="">Foo ${fname} ${lname}</p> | |
1254 <p i18n:plural="">Foos ${fname} ${lname}</p> | |
1255 </i18n:choose> | |
1256 </html>""") | |
1257 translator = Translator() | |
1258 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1259 messages = list(translator.extract(tmpl.stream)) | |
1260 self.assertEqual(1, len(messages)) | |
858 | 1261 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1262 'Foos %(fname)s %(lname)s'), | |
1263 ['As in Foo Bar']), | |
849 | 1264 messages[0]) |
1265 | |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1266 def test_extract_i18n_choose_with_attributes(self): |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1267 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1268 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1269 <p i18n:choose="num; num" title="Things"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1270 <i18n:singular> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1271 There is <a href="$link" title="View thing">${num} thing</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1272 </i18n:singular> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1273 <i18n:plural> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1274 There are <a href="$link" title="View things">${num} things</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1275 </i18n:plural> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1276 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1277 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1278 translator = Translator() |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1279 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1280 messages = list(translator.extract(tmpl.stream)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1281 self.assertEqual(4, len(messages)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1282 self.assertEqual((3, None, 'Things', []), messages[0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1283 self.assertEqual((5, None, 'View thing', []), messages[1]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1284 self.assertEqual((8, None, 'View things', []), messages[2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1285 self.assertEqual( |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1286 (3, 'ngettext', ('There is [1:%(num)s thing].', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1287 'There are [1:%(num)s things].'), []), |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1288 messages[3]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1289 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1290 def test_translate_i18n_choose_with_attributes(self): |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1291 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1292 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1293 <p i18n:choose="num; num" title="Things"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1294 <i18n:singular> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1295 There is <a href="$link" title="View thing">${num} thing</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1296 </i18n:singular> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1297 <i18n:plural> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1298 There are <a href="$link" title="View things">${num} things</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1299 </i18n:plural> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1300 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1301 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1302 translations = DummyTranslations({ |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1303 'Things': 'Sachen', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1304 'View thing': 'Sache betrachten', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1305 'View things': 'Sachen betrachten', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1306 ('There is [1:%(num)s thing].', 0): 'Da ist [1:%(num)s Sache].', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1307 ('There is [1:%(num)s thing].', 1): 'Da sind [1:%(num)s Sachen].' |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1308 }) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1309 translator = Translator(translations) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1310 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1311 self.assertEqual(u"""<html> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1312 <p title="Sachen"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1313 Da ist <a href="/things" title="Sache betrachten">1 Sache</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1314 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1315 </html>""", tmpl.generate(link="/things", num=1).render(encoding=None)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1316 self.assertEqual(u"""<html> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1317 <p title="Sachen"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1318 Da sind <a href="/things" title="Sachen betrachten">3 Sachen</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1319 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1320 </html>""", tmpl.generate(link="/things", num=3).render(encoding=None)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1321 |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1322 def test_extract_i18n_choose_as_element_with_attributes(self): |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1323 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1324 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1325 <i18n:choose numeral="num" params="num"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1326 <p i18n:singular="" title="Things"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1327 There is <a href="$link" title="View thing">${num} thing</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1328 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1329 <p i18n:plural="" title="Things"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1330 There are <a href="$link" title="View things">${num} things</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1331 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1332 </i18n:choose> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1333 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1334 translator = Translator() |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1335 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1336 messages = list(translator.extract(tmpl.stream)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1337 self.assertEqual(5, len(messages)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1338 self.assertEqual((4, None, 'Things', []), messages[0]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1339 self.assertEqual((5, None, 'View thing', []), messages[1]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1340 self.assertEqual((7, None, 'Things', []), messages[2]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1341 self.assertEqual((8, None, 'View things', []), messages[3]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1342 self.assertEqual( |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1343 (3, 'ngettext', ('There is [1:%(num)s thing].', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1344 'There are [1:%(num)s things].'), []), |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1345 messages[4]) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1346 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1347 def test_translate_i18n_choose_as_element_with_attributes(self): |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1348 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1349 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1350 <i18n:choose numeral="num" params="num"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1351 <p i18n:singular="" title="Things"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1352 There is <a href="$link" title="View thing">${num} thing</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1353 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1354 <p i18n:plural="" title="Things"> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1355 There are <a href="$link" title="View things">${num} things</a>. |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1356 </p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1357 </i18n:choose> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1358 </html>""") |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1359 translations = DummyTranslations({ |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1360 'Things': 'Sachen', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1361 'View thing': 'Sache betrachten', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1362 'View things': 'Sachen betrachten', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1363 ('There is [1:%(num)s thing].', 0): 'Da ist [1:%(num)s Sache].', |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1364 ('There is [1:%(num)s thing].', 1): 'Da sind [1:%(num)s Sachen].' |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1365 }) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1366 translator = Translator(translations) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1367 translator.setup(tmpl) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1368 self.assertEqual(u"""<html> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1369 <p title="Sachen">Da ist <a href="/things" title="Sache betrachten">1 Sache</a>.</p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1370 </html>""", tmpl.generate(link="/things", num=1).render(encoding=None)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1371 self.assertEqual(u"""<html> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1372 <p title="Sachen">Da sind <a href="/things" title="Sachen betrachten">3 Sachen</a>.</p> |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1373 </html>""", tmpl.generate(link="/things", num=3).render(encoding=None)) |
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1374 |
849 | 1375 def test_translate_i18n_choose_and_py_strip(self): |
1376 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1377 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1378 <div i18n:choose="two; fname, lname"> | |
1379 <p i18n:singular="">Foo $fname $lname</p> | |
1380 <p i18n:plural="">Foos $fname $lname</p> | |
1381 </div> | |
1382 </html>""") | |
1383 translations = DummyTranslations({ | |
1384 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', | |
1385 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', | |
1386 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', | |
1387 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', | |
1388 }) | |
1389 translator = Translator(translations) | |
1390 translator.setup(tmpl) | |
1391 self.assertEqual("""<html> | |
1392 <div> | |
1393 <p>Vohs John Doe</p> | |
1394 </div> | |
1395 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render()) | |
1396 | |
1397 def test_translate_i18n_choose_and_domain_and_py_strip(self): | |
1398 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1399 xmlns:i18n="http://genshi.edgewall.org/i18n" | |
1400 i18n:domain="foo"> | |
1401 <div i18n:choose="two; fname, lname"> | |
1402 <p i18n:singular="">Foo $fname $lname</p> | |
1403 <p i18n:plural="">Foos $fname $lname</p> | |
1404 </div> | |
1405 </html>""") | |
1406 translations = DummyTranslations() | |
1407 translations.add_domain('foo', { | |
1408 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', | |
1409 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', | |
1410 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', | |
1411 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', | |
1412 }) | |
1413 translator = Translator(translations) | |
1414 translator.setup(tmpl) | |
1415 self.assertEqual("""<html> | |
1416 <div> | |
1417 <p>Vohs John Doe</p> | |
1418 </div> | |
1419 </html>""", tmpl.generate(two=2, fname='John', lname='Doe').render()) | |
871
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1420 |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1421 def test_translate_i18n_choose_and_singular_with_py_strip(self): |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1422 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1423 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1424 <div i18n:choose="two; fname, lname"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1425 <p i18n:singular="" py:strip="">Foo $fname $lname</p> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1426 <p i18n:plural="">Foos $fname $lname</p> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1427 </div> |
873
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1428 <div i18n:choose="one; fname, lname"> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1429 <p i18n:singular="" py:strip="">Foo $fname $lname</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1430 <p i18n:plural="">Foos $fname $lname</p> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1431 </div> |
871
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1432 </html>""") |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1433 translations = DummyTranslations({ |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1434 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1435 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1436 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1437 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1438 }) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1439 translator = Translator(translations) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1440 translator.setup(tmpl) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1441 self.assertEqual("""<html> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1442 <div> |
873
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1443 <p>Vohs John Doe</p> |
871
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1444 </div> |
873
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1445 <div> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1446 Voh John Doe |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1447 </div> |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1448 </html>""", tmpl.generate( |
4e8100e83bdd
Any `py:strip` involved on `i18n:singular` or `i18n:plural` is now handled separately, ie, if one has `py:strip` on a `i18n:singular` element or directive and the plural form is the one chosen, no stripping will be performed. Refs #371.
palgarvio
parents:
871
diff
changeset
|
1449 one=1, two=2, fname='John',lname='Doe').render()) |
871
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1450 |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1451 def test_translate_i18n_choose_and_plural_with_py_strip(self): |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1452 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1453 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1454 <div i18n:choose="two; fname, lname"> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1455 <p i18n:singular="" py:strip="">Foo $fname $lname</p> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1456 <p i18n:plural="">Foos $fname $lname</p> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1457 </div> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1458 </html>""") |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1459 translations = DummyTranslations({ |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1460 ('Foo %(fname)s %(lname)s', 0): 'Voh %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1461 ('Foo %(fname)s %(lname)s', 1): 'Vohs %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1462 'Foo %(fname)s %(lname)s': 'Voh %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1463 'Foos %(fname)s %(lname)s': 'Vohs %(fname)s %(lname)s', |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1464 }) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1465 translator = Translator(translations) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1466 translator.setup(tmpl) |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1467 self.assertEqual("""<html> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1468 <div> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1469 Voh John Doe |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1470 </div> |
b6deffd8ecce
Allow the use of `i18n:singular` and `i18n:plural` as directives and not just as attributes.
palgarvio
parents:
869
diff
changeset
|
1471 </html>""", tmpl.generate(two=1, fname='John', lname='Doe').render()) |
849 | 1472 |
1473 def test_extract_i18n_choose_as_attribute_and_py_strip(self): | |
1474 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1475 xmlns:i18n="http://genshi.edgewall.org/i18n"> | |
1476 <div i18n:choose="one" py:strip=""> | |
1477 <p i18n:singular="" py:strip="">FooBar</p> | |
1478 <p i18n:plural="" py:strip="">FooBars</p> | |
1479 </div> | |
1480 </html>""") | |
1481 translator = Translator() | |
1482 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1483 messages = list(translator.extract(tmpl.stream)) | |
1484 self.assertEqual(1, len(messages)) | |
858 | 1485 self.assertEqual((3, 'ngettext', ('FooBar', 'FooBars'), []), messages[0]) |
849 | 1486 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1487 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1488 class DomainDirectiveTestCase(unittest.TestCase): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1489 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1490 def test_translate_i18n_domain_with_msg_directives(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1491 #"""translate with i18n:domain and nested i18n:msg directives """ |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1492 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1493 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1494 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1495 <div i18n:domain="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1496 <p i18n:msg="">FooBar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1497 <p i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1498 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1499 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1500 translations = DummyTranslations({'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1501 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'PT_Foo'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1502 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1503 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1504 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1505 <div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1506 <p>BarFoo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1507 <p>PT_Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1508 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1509 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1510 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1511 def test_translate_i18n_domain_with_inline_directives(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1512 #"""translate with inlined i18n:domain and i18n:msg directives""" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1513 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1514 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1515 <p i18n:msg="" i18n:domain="foo">FooBar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1516 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1517 translations = DummyTranslations({'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1518 translations.add_domain('foo', {'FooBar': 'BarFoo'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1519 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1520 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1521 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1522 <p>BarFoo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1523 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1524 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1525 def test_translate_i18n_domain_without_msg_directives(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1526 #"""translate domain call without i18n:msg directives still uses current domain""" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1527 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1528 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1529 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1530 <p i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1531 <div i18n:domain="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1532 <p i18n:msg="">FooBar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1533 <p i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1534 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1535 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1536 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1537 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1538 translations = DummyTranslations({'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1539 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'PT_Foo'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1540 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1541 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1542 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1543 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1544 <div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1545 <p>BarFoo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1546 <p>PT_Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1547 <p>PT_Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1548 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1549 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1550 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1551 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1552 def test_translate_i18n_domain_as_directive_not_attribute(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1553 #"""translate with domain as directive""" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1554 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1555 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1556 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1557 <i18n:domain name="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1558 <p i18n:msg="">FooBar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1559 <p i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1560 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1561 </i18n:domain> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1562 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1563 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1564 translations = DummyTranslations({'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1565 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'PT_Foo'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1566 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1567 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1568 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1569 <p>BarFoo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1570 <p>PT_Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1571 <p>PT_Foo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1572 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1573 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1574 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1575 def test_translate_i18n_domain_nested_directives(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1576 #"""translate with nested i18n:domain directives""" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1577 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1578 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1579 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1580 <p i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1581 <div i18n:domain="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1582 <p i18n:msg="">FooBar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1583 <p i18n:domain="bar" i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1584 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1585 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1586 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1587 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1588 translations = DummyTranslations({'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1589 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'foo_Bar'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1590 translations.add_domain('bar', {'Bar': 'bar_Bar'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1591 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1592 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1593 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1594 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1595 <div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1596 <p>BarFoo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1597 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1598 <p>foo_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1599 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1600 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1601 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1602 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1603 def test_translate_i18n_domain_with_empty_nested_domain_directive(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1604 #"""translate with empty nested i18n:domain directive does not use dngettext""" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1605 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1606 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1607 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1608 <p i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1609 <div i18n:domain="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1610 <p i18n:msg="">FooBar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1611 <p i18n:domain="" i18n:msg="">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1612 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1613 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1614 <p>Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1615 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1616 translations = DummyTranslations({'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1617 translations.add_domain('foo', {'FooBar': 'BarFoo', 'Bar': 'foo_Bar'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1618 translations.add_domain('bar', {'Bar': 'bar_Bar'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1619 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1620 translator.setup(tmpl) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1621 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1622 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1623 <div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1624 <p>BarFoo</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1625 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1626 <p>foo_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1627 </div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1628 <p>Voh</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1629 </html>""", tmpl.generate().render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1630 |
849 | 1631 def test_translate_i18n_domain_with_inline_directive_on_START_NS(self): |
1632 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1633 xmlns:i18n="http://genshi.edgewall.org/i18n" i18n:domain="foo"> | |
1634 <p i18n:msg="">FooBar</p> | |
1635 </html>""") | |
1636 translations = DummyTranslations({'Bar': 'Voh'}) | |
1637 translations.add_domain('foo', {'FooBar': 'BarFoo'}) | |
1638 translator = Translator(translations) | |
1639 translator.setup(tmpl) | |
1640 self.assertEqual("""<html> | |
1641 <p>BarFoo</p> | |
1642 </html>""", tmpl.generate().render()) | |
1643 | |
1644 def test_translate_i18n_domain_with_inline_directive_on_START_NS_with_py_strip(self): | |
1645 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | |
1646 xmlns:i18n="http://genshi.edgewall.org/i18n" | |
1647 i18n:domain="foo" py:strip=""> | |
1648 <p i18n:msg="">FooBar</p> | |
1649 </html>""") | |
1650 translations = DummyTranslations({'Bar': 'Voh'}) | |
1651 translations.add_domain('foo', {'FooBar': 'BarFoo'}) | |
1652 translator = Translator(translations) | |
1653 translator.setup(tmpl) | |
1654 self.assertEqual(""" | |
1655 <p>BarFoo</p> | |
1656 """, tmpl.generate().render()) | |
446
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1657 |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1658 def test_translate_i18n_domain_with_nested_includes(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1659 import os, shutil, tempfile |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1660 from genshi.template.loader import TemplateLoader |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1661 dirname = tempfile.mkdtemp(suffix='genshi_test') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1662 try: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1663 for idx in range(7): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1664 file1 = open(os.path.join(dirname, 'tmpl%d.html' % idx), 'w') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1665 try: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1666 file1.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1667 xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1668 xmlns:i18n="http://genshi.edgewall.org/i18n" py:strip=""> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1669 <div>Included tmpl$idx</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1670 <p i18n:msg="idx">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1671 <p i18n:domain="bar">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1672 <p i18n:msg="idx" i18n:domain="">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1673 <p i18n:domain="" i18n:msg="idx">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1674 <py:if test="idx < 6"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1675 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1676 </py:if> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1677 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1678 finally: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1679 file1.close() |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1680 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1681 file2 = open(os.path.join(dirname, 'tmpl10.html'), 'w') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1682 try: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1683 file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1684 xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1685 xmlns:i18n="http://genshi.edgewall.org/i18n" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1686 i18n:domain="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1687 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1688 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1689 finally: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1690 file2.close() |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1691 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1692 def callback(template): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1693 translations = DummyTranslations({'Bar %(idx)s': 'Voh %(idx)s'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1694 translations.add_domain('foo', {'Bar %(idx)s': 'foo_Bar %(idx)s'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1695 translations.add_domain('bar', {'Bar': 'bar_Bar'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1696 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1697 translator.setup(template) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1698 loader = TemplateLoader([dirname], callback=callback) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1699 tmpl = loader.load('tmpl10.html') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1700 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1701 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1702 <div>Included tmpl0</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1703 <p>foo_Bar 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1704 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1705 <p>Voh 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1706 <p>Voh 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1707 <div>Included tmpl1</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1708 <p>foo_Bar 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1709 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1710 <p>Voh 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1711 <p>Voh 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1712 <div>Included tmpl2</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1713 <p>foo_Bar 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1714 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1715 <p>Voh 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1716 <p>Voh 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1717 <div>Included tmpl3</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1718 <p>foo_Bar 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1719 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1720 <p>Voh 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1721 <p>Voh 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1722 <div>Included tmpl4</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1723 <p>foo_Bar 4</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1724 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1725 <p>Voh 4</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1726 <p>Voh 4</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1727 <div>Included tmpl5</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1728 <p>foo_Bar 5</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1729 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1730 <p>Voh 5</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1731 <p>Voh 5</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1732 <div>Included tmpl6</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1733 <p>foo_Bar 6</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1734 <p>bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1735 <p>Voh 6</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1736 <p>Voh 6</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1737 </html>""", tmpl.generate(idx=-1).render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1738 finally: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1739 shutil.rmtree(dirname) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1740 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1741 def test_translate_i18n_domain_with_nested_includes_with_translatable_attrs(self): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1742 import os, shutil, tempfile |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1743 from genshi.template.loader import TemplateLoader |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1744 dirname = tempfile.mkdtemp(suffix='genshi_test') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1745 try: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1746 for idx in range(4): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1747 file1 = open(os.path.join(dirname, 'tmpl%d.html' % idx), 'w') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1748 try: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1749 file1.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1750 xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1751 xmlns:i18n="http://genshi.edgewall.org/i18n" py:strip=""> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1752 <div>Included tmpl$idx</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1753 <p title="${dg('foo', 'Bar %(idx)s') % dict(idx=idx)}" i18n:msg="idx">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1754 <p title="Bar" i18n:domain="bar">Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1755 <p title="Bar" i18n:msg="idx" i18n:domain="">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1756 <p i18n:msg="idx" i18n:domain="" title="Bar">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1757 <p i18n:domain="" i18n:msg="idx" title="Bar">Bar $idx</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1758 <py:if test="idx < 3"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1759 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1760 </py:if> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1761 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1762 finally: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1763 file1.close() |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1764 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1765 file2 = open(os.path.join(dirname, 'tmpl10.html'), 'w') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1766 try: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1767 file2.write("""<html xmlns:xi="http://www.w3.org/2001/XInclude" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1768 xmlns:py="http://genshi.edgewall.org/" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1769 xmlns:i18n="http://genshi.edgewall.org/i18n" |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1770 i18n:domain="foo"> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1771 <xi:include href="tmpl${idx}.html" py:with="idx = idx+1"/> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1772 </html>""") |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1773 finally: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1774 file2.close() |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1775 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1776 translations = DummyTranslations({'Bar %(idx)s': 'Voh %(idx)s', |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1777 'Bar': 'Voh'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1778 translations.add_domain('foo', {'Bar %(idx)s': 'foo_Bar %(idx)s'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1779 translations.add_domain('bar', {'Bar': 'bar_Bar'}) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1780 translator = Translator(translations) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1781 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1782 def callback(template): |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1783 translator.setup(template) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1784 loader = TemplateLoader([dirname], callback=callback) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1785 tmpl = loader.load('tmpl10.html') |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1786 |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1787 self.assertEqual("""<html> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1788 <div>Included tmpl0</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1789 <p title="foo_Bar 0">foo_Bar 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1790 <p title="bar_Bar">bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1791 <p title="Voh">Voh 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1792 <p title="Voh">Voh 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1793 <p title="Voh">Voh 0</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1794 <div>Included tmpl1</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1795 <p title="foo_Bar 1">foo_Bar 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1796 <p title="bar_Bar">bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1797 <p title="Voh">Voh 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1798 <p title="Voh">Voh 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1799 <p title="Voh">Voh 1</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1800 <div>Included tmpl2</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1801 <p title="foo_Bar 2">foo_Bar 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1802 <p title="bar_Bar">bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1803 <p title="Voh">Voh 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1804 <p title="Voh">Voh 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1805 <p title="Voh">Voh 2</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1806 <div>Included tmpl3</div> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1807 <p title="foo_Bar 3">foo_Bar 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1808 <p title="bar_Bar">bar_Bar</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1809 <p title="Voh">Voh 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1810 <p title="Voh">Voh 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1811 <p title="Voh">Voh 3</p> |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1812 </html>""", tmpl.generate(idx=-1, |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1813 dg=translations.dugettext).render()) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1814 finally: |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1815 shutil.rmtree(dirname) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1816 |
892
a6a23b889708
i18n: Support extraction of attributes in markup embedded in ``i18n:msg`` and ``i18n:choose`` directives. See also #380.
cmlenz
parents:
873
diff
changeset
|
1817 |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1818 class ExtractTestCase(unittest.TestCase): |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1819 |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1820 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
|
1821 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
|
1822 <head> |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1823 <title>Example</title> |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1824 </head> |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1825 <body> |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1826 <h1>Example</h1> |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1827 <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
|
1828 <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
|
1829 </body> |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1830 </html>""") |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1831 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
|
1832 self.assertEqual([ |
858 | 1833 (3, None, 'Example', []), |
1834 (6, None, 'Example', []), | |
1835 (7, '_', 'Hello, %(name)s', []), | |
1836 (8, 'ngettext', ('You have %d item', 'You have %d items', 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
|
1837 []), |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1838 ], results) |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1839 |
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
|
1840 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
|
1841 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
|
1842 <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
|
1843 ${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
|
1844 </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
|
1845 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
|
1846 '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
|
1847 })) |
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
|
1848 self.assertEqual([ |
858 | 1849 (3, 'ngettext', ('Singular', 'Plural', None), []), |
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
|
1850 ], 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
|
1851 |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1852 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
|
1853 buf = StringIO("""${_("Dear %(name)s") % {'name': name}}, |
849 | 1854 |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1855 ${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
|
1856 #for item in items |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1857 * $item |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1858 #end |
849 | 1859 |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1860 All the best, |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1861 Foobar""") |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1862 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
|
1863 '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
|
1864 })) |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1865 self.assertEqual([ |
858 | 1866 (1, '_', 'Dear %(name)s', []), |
1867 (3, 'ngettext', ('Your item:', 'Your items', None), []), | |
1868 (7, None, 'All the best,\n Foobar', []) | |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1869 ], results) |
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1870 |
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
|
1871 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
|
1872 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
|
1873 ${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
|
1874 </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
|
1875 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
|
1876 self.assertEqual([ |
858 | 1877 (2, 'gettext', ('Foobar'), []), |
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
|
1878 ], 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
|
1879 |
53b37e4f2921
* The I18n extractor now handles gettext function calls that use non-string parameters as well as keyword arguments.
cmlenz
parents:
560
diff
changeset
|
1880 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
|
1881 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
|
1882 ${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
|
1883 </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
|
1884 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
|
1885 self.assertEqual([ |
858 | 1886 (2, 'dgettext', (None, 'Foobar'), []), |
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
|
1887 ], 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
|
1888 |
549
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1889 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
|
1890 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
|
1891 <script type="text/javascript"> |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1892 $('#llist').tabs({ |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1893 remote: true, |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1894 spinner: "${_('Please wait...')}" |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1895 }); |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1896 </script> |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1897 </html>""") |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1898 results = list(extract(buf, ['_'], [], {})) |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1899 self.assertEqual([ |
858 | 1900 (5, '_', 'Please wait...', []), |
549
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1901 ], results) |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1902 |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1903 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
|
1904 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
|
1905 <script type="text/javascript"> |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1906 <py:if test="foobar"> |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1907 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
|
1908 </py:if> |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1909 </script> |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1910 </html>""") |
7214c1bdb383
The I18n filter now extracts text from translation functions in ignored tags. Fixes #132.
cmlenz
parents:
535
diff
changeset
|
1911 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
|
1912 |
849 | 1913 def test_extract_py_def_directive_with_py_strip(self): |
1914 # Failed extraction from Trac | |
1915 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" py:strip=""> | |
1916 <py:def function="diff_options_fields(diff)"> | |
1917 <label for="style">View differences</label> | |
1918 <select id="style" name="style"> | |
1919 <option selected="${diff.style == 'inline' or None}" | |
1920 value="inline">inline</option> | |
1921 <option selected="${diff.style == 'sidebyside' or None}" | |
1922 value="sidebyside">side by side</option> | |
1923 </select> | |
1924 <div class="field"> | |
1925 Show <input type="text" name="contextlines" id="contextlines" size="2" | |
1926 maxlength="3" value="${diff.options.contextlines < 0 and 'all' or diff.options.contextlines}" /> | |
1927 <label for="contextlines">lines around each change</label> | |
1928 </div> | |
1929 <fieldset id="ignore" py:with="options = diff.options"> | |
1930 <legend>Ignore:</legend> | |
1931 <div class="field"> | |
1932 <input type="checkbox" id="ignoreblanklines" name="ignoreblanklines" | |
1933 checked="${options.ignoreblanklines or None}" /> | |
1934 <label for="ignoreblanklines">Blank lines</label> | |
1935 </div> | |
1936 <div class="field"> | |
1937 <input type="checkbox" id="ignorecase" name="ignorecase" | |
1938 checked="${options.ignorecase or None}" /> | |
1939 <label for="ignorecase">Case changes</label> | |
1940 </div> | |
1941 <div class="field"> | |
1942 <input type="checkbox" id="ignorewhitespace" name="ignorewhitespace" | |
1943 checked="${options.ignorewhitespace or None}" /> | |
1944 <label for="ignorewhitespace">White space changes</label> | |
1945 </div> | |
1946 </fieldset> | |
1947 <div class="buttons"> | |
1948 <input type="submit" name="update" value="${_('Update')}" /> | |
1949 </div> | |
1950 </py:def></html>""") | |
1951 translator = Translator() | |
1952 tmpl.add_directives(Translator.NAMESPACE, translator) | |
1953 messages = list(translator.extract(tmpl.stream)) | |
1954 self.assertEqual(10, len(messages)) | |
1955 self.assertEqual([ | |
858 | 1956 (3, None, 'View differences', []), |
1957 (6, None, 'inline', []), | |
1958 (8, None, 'side by side', []), | |
1959 (10, None, 'Show', []), | |
1960 (13, None, 'lines around each change', []), | |
1961 (16, None, 'Ignore:', []), | |
1962 (20, None, 'Blank lines', []), | |
1963 (25, None, 'Case changes',[]), | |
1964 (30, None, 'White space changes', []), | |
1965 (34, '_', 'Update', [])], messages) | |
849 | 1966 |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1967 |
446
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1968 def suite(): |
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1969 suite = unittest.TestSuite() |
709
9dd5f370a70e
Python 2.3 compatibility fixes for transformer and (specifically for 2.3.1) i18n.
athomas
parents:
667
diff
changeset
|
1970 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
|
1971 suite.addTest(unittest.makeSuite(TranslatorTestCase, 'test')) |
894
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1972 suite.addTest(unittest.makeSuite(MsgDirectiveTestCase, 'test')) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1973 suite.addTest(unittest.makeSuite(ChooseDirectiveTestCase, 'test')) |
9ee2565885dd
Split up the i18n unit tests into per-directive test cases.
cmlenz
parents:
893
diff
changeset
|
1974 suite.addTest(unittest.makeSuite(DomainDirectiveTestCase, 'test')) |
528
24df908da22d
Integrated [http://babel.edgewall.org/ Babel] message extraction plugin, and added I18n doc page.
cmlenz
parents:
522
diff
changeset
|
1975 suite.addTest(unittest.makeSuite(ExtractTestCase, 'test')) |
446
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1976 return suite |
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1977 |
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1978 if __name__ == '__main__': |
fd9c4f7a249a
Add basic I18n/L10n functionality, based on GenshiRecipes/Localization.
cmlenz
parents:
diff
changeset
|
1979 unittest.main(defaultTest='suite') |