Mercurial > genshi > genshi-test
comparison genshi/filters/tests/i18n.py @ 858:df860bdad9ca
Yet more 2to3 diff size reduction.
author | cmlenz |
---|---|
date | Thu, 12 Nov 2009 16:23:53 +0000 |
parents | 47297fd93363 |
children | 38c44e2f4232 |
comparison
equal
deleted
inserted
replaced
857:24733a5854d9 | 858:df860bdad9ca |
---|---|
86 ${ngettext("Singular", "Plural", num)} | 86 ${ngettext("Singular", "Plural", num)} |
87 </html>""") | 87 </html>""") |
88 translator = Translator(extract_text=False) | 88 translator = Translator(extract_text=False) |
89 messages = list(translator.extract(tmpl.stream)) | 89 messages = list(translator.extract(tmpl.stream)) |
90 self.assertEqual(1, len(messages)) | 90 self.assertEqual(1, len(messages)) |
91 self.assertEqual((3, 'ngettext', (u'Singular', u'Plural', None), []), | 91 self.assertEqual((3, 'ngettext', ('Singular', 'Plural', None), []), |
92 messages[0]) | 92 messages[0]) |
93 | 93 |
94 def test_extract_plural_form(self): | 94 def test_extract_plural_form(self): |
95 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 95 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
96 ${ngettext("Singular", "Plural", num)} | 96 ${ngettext("Singular", "Plural", num)} |
97 </html>""") | 97 </html>""") |
98 translator = Translator() | 98 translator = Translator() |
99 messages = list(translator.extract(tmpl.stream)) | 99 messages = list(translator.extract(tmpl.stream)) |
100 self.assertEqual(1, len(messages)) | 100 self.assertEqual(1, len(messages)) |
101 self.assertEqual((2, 'ngettext', (u'Singular', u'Plural', None), []), | 101 self.assertEqual((2, 'ngettext', ('Singular', 'Plural', None), []), |
102 messages[0]) | 102 messages[0]) |
103 | 103 |
104 def test_extract_funky_plural_form(self): | 104 def test_extract_funky_plural_form(self): |
105 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 105 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
106 ${ngettext(len(items), *widget.display_names)} | 106 ${ngettext(len(items), *widget.display_names)} |
124 <span title="Foo"></span> | 124 <span title="Foo"></span> |
125 </html>""") | 125 </html>""") |
126 translator = Translator() | 126 translator = Translator() |
127 messages = list(translator.extract(tmpl.stream)) | 127 messages = list(translator.extract(tmpl.stream)) |
128 self.assertEqual(1, len(messages)) | 128 self.assertEqual(1, len(messages)) |
129 self.assertEqual((2, None, u'Foo', []), messages[0]) | 129 self.assertEqual((2, None, 'Foo', []), messages[0]) |
130 | 130 |
131 def test_extract_attribute_expr(self): | 131 def test_extract_attribute_expr(self): |
132 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 132 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
133 <input type="submit" value="${_('Save')}" /> | 133 <input type="submit" value="${_('Save')}" /> |
134 </html>""") | 134 </html>""") |
135 translator = Translator() | 135 translator = Translator() |
136 messages = list(translator.extract(tmpl.stream)) | 136 messages = list(translator.extract(tmpl.stream)) |
137 self.assertEqual(1, len(messages)) | 137 self.assertEqual(1, len(messages)) |
138 self.assertEqual((2, '_', u'Save', []), messages[0]) | 138 self.assertEqual((2, '_', 'Save', []), messages[0]) |
139 | 139 |
140 def test_extract_non_included_attribute_interpolated(self): | 140 def test_extract_non_included_attribute_interpolated(self): |
141 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 141 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
142 <a href="#anchor_${num}">Foo</a> | 142 <a href="#anchor_${num}">Foo</a> |
143 </html>""") | 143 </html>""") |
144 translator = Translator() | 144 translator = Translator() |
145 messages = list(translator.extract(tmpl.stream)) | 145 messages = list(translator.extract(tmpl.stream)) |
146 self.assertEqual(1, len(messages)) | 146 self.assertEqual(1, len(messages)) |
147 self.assertEqual((2, None, u'Foo', []), messages[0]) | 147 self.assertEqual((2, None, 'Foo', []), messages[0]) |
148 | 148 |
149 def test_extract_text_from_sub(self): | 149 def test_extract_text_from_sub(self): |
150 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 150 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
151 <py:if test="foo">Foo</py:if> | 151 <py:if test="foo">Foo</py:if> |
152 </html>""") | 152 </html>""") |
153 translator = Translator() | 153 translator = Translator() |
154 messages = list(translator.extract(tmpl.stream)) | 154 messages = list(translator.extract(tmpl.stream)) |
155 self.assertEqual(1, len(messages)) | 155 self.assertEqual(1, len(messages)) |
156 self.assertEqual((2, None, u'Foo', []), messages[0]) | 156 self.assertEqual((2, None, 'Foo', []), messages[0]) |
157 | 157 |
158 def test_ignore_tag_with_fixed_xml_lang(self): | 158 def test_ignore_tag_with_fixed_xml_lang(self): |
159 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 159 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
160 <p xml:lang="en">(c) 2007 Edgewall Software</p> | 160 <p xml:lang="en">(c) 2007 Edgewall Software</p> |
161 </html>""") | 161 </html>""") |
168 <p xml:lang="${lang}">(c) 2007 Edgewall Software</p> | 168 <p xml:lang="${lang}">(c) 2007 Edgewall Software</p> |
169 </html>""") | 169 </html>""") |
170 translator = Translator() | 170 translator = Translator() |
171 messages = list(translator.extract(tmpl.stream)) | 171 messages = list(translator.extract(tmpl.stream)) |
172 self.assertEqual(1, len(messages)) | 172 self.assertEqual(1, len(messages)) |
173 self.assertEqual((2, None, u'(c) 2007 Edgewall Software', []), | 173 self.assertEqual((2, None, '(c) 2007 Edgewall Software', []), |
174 messages[0]) | 174 messages[0]) |
175 | 175 |
176 def test_ignore_attribute_with_expression(self): | 176 def test_ignore_attribute_with_expression(self): |
177 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> | 177 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"> |
178 <input type="submit" value="Reply" title="Reply to comment $num" /> | 178 <input type="submit" value="Reply" title="Reply to comment $num" /> |
466 </html>""") | 466 </html>""") |
467 translator = Translator() | 467 translator = Translator() |
468 tmpl.add_directives(Translator.NAMESPACE, translator) | 468 tmpl.add_directives(Translator.NAMESPACE, translator) |
469 messages = list(translator.extract(tmpl.stream)) | 469 messages = list(translator.extract(tmpl.stream)) |
470 self.assertEqual(1, len(messages)) | 470 self.assertEqual(1, len(messages)) |
471 self.assertEqual((3, None, u'Foo', ['As in foo bar']), messages[0]) | 471 self.assertEqual((3, None, 'Foo', ['As in foo bar']), messages[0]) |
472 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 472 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
473 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 473 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
474 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p> | 474 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p> |
475 </html>""") | 475 </html>""") |
476 translator = Translator() | 476 translator = Translator() |
477 tmpl.add_directives(Translator.NAMESPACE, translator) | 477 tmpl.add_directives(Translator.NAMESPACE, translator) |
478 messages = list(translator.extract(tmpl.stream)) | 478 messages = list(translator.extract(tmpl.stream)) |
479 self.assertEqual(1, len(messages)) | 479 self.assertEqual(1, len(messages)) |
480 self.assertEqual((3, None, u'Foo', ['As in foo bar']), messages[0]) | 480 self.assertEqual((3, None, 'Foo', ['As in foo bar']), messages[0]) |
481 | 481 |
482 def test_translate_i18n_msg_with_comment(self): | 482 def test_translate_i18n_msg_with_comment(self): |
483 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 483 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
484 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 484 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
485 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p> | 485 <p i18n:msg="" i18n:comment="As in foo bar">Foo</p> |
497 <p i18n:msg="" title="Foo bar">Foo</p> | 497 <p i18n:msg="" title="Foo bar">Foo</p> |
498 </html>""") | 498 </html>""") |
499 translator = Translator() | 499 translator = Translator() |
500 messages = list(translator.extract(tmpl.stream)) | 500 messages = list(translator.extract(tmpl.stream)) |
501 self.assertEqual(2, len(messages)) | 501 self.assertEqual(2, len(messages)) |
502 self.assertEqual((3, None, u'Foo bar', []), messages[0]) | 502 self.assertEqual((3, None, 'Foo bar', []), messages[0]) |
503 self.assertEqual((3, None, u'Foo', []), messages[1]) | 503 self.assertEqual((3, None, 'Foo', []), messages[1]) |
504 | 504 |
505 def test_translate_i18n_msg_with_attr(self): | 505 def test_translate_i18n_msg_with_attr(self): |
506 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 506 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
507 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 507 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
508 <p i18n:msg="" title="Foo bar">Foo</p> | 508 <p i18n:msg="" title="Foo bar">Foo</p> |
509 </html>""") | 509 </html>""") |
510 gettext = lambda s: u"Voh" | 510 gettext = lambda s: u"Voh" |
511 translator = Translator(DummyTranslations({ | 511 translator = Translator(DummyTranslations({ |
512 'Foo': u'Voh', | 512 'Foo': 'Voh', |
513 'Foo bar': u'Voh bär' | 513 'Foo bar': u'Voh bär' |
514 })) | 514 })) |
515 tmpl.filters.insert(0, translator) | 515 tmpl.filters.insert(0, translator) |
516 tmpl.add_directives(Translator.NAMESPACE, translator) | 516 tmpl.add_directives(Translator.NAMESPACE, translator) |
517 self.assertEqual("""<html> | 517 self.assertEqual("""<html> |
552 translator = Translator() | 552 translator = Translator() |
553 tmpl.add_directives(Translator.NAMESPACE, translator) | 553 tmpl.add_directives(Translator.NAMESPACE, translator) |
554 messages = list(translator.extract(tmpl.stream)) | 554 messages = list(translator.extract(tmpl.stream)) |
555 self.assertEqual(1, len(messages)) | 555 self.assertEqual(1, len(messages)) |
556 self.assertEqual( | 556 self.assertEqual( |
557 (3, None, u'Changed %(date)s ago by %(author)s', []), messages[0] | 557 (3, None, 'Changed %(date)s ago by %(author)s', []), messages[0] |
558 ) | 558 ) |
559 | 559 |
560 def test_i18n_msg_ticket_300_translate(self): | 560 def test_i18n_msg_ticket_300_translate(self): |
561 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 561 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
562 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 562 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
563 <i18n:msg params="date, author"> | 563 <i18n:msg params="date, author"> |
564 Changed ${ date } ago by ${ author } | 564 Changed ${ date } ago by ${ author } |
565 </i18n:msg> | 565 </i18n:msg> |
566 </html>""") | 566 </html>""") |
567 translations = DummyTranslations({ | 567 translations = DummyTranslations({ |
568 u'Changed %(date)s ago by %(author)s': u'Modificado à %(date)s por %(author)s' | 568 'Changed %(date)s ago by %(author)s': u'Modificado à %(date)s por %(author)s' |
569 }) | 569 }) |
570 translator = Translator(translations) | 570 translator = Translator(translations) |
571 translator.setup(tmpl) | 571 translator.setup(tmpl) |
572 self.assertEqual("""<html> | 572 self.assertEqual("""<html> |
573 Modificado à um dia por Pedro | 573 Modificado à um dia por Pedro |
617 translator = Translator() | 617 translator = Translator() |
618 translator.setup(tmpl) | 618 translator.setup(tmpl) |
619 messages = list(translator.extract(tmpl.stream)) | 619 messages = list(translator.extract(tmpl.stream)) |
620 self.assertEqual(1, len(messages)) | 620 self.assertEqual(1, len(messages)) |
621 self.assertEqual( | 621 self.assertEqual( |
622 u'Before you do that, though, please first try\n ' | 622 'Before you do that, though, please first try\n ' |
623 u'[1:[2:searching]\n for similar issues], as it is ' | 623 '[1:[2:searching]\n for similar issues], as it is ' |
624 u'quite likely that this problem\n has been reported ' | 624 'quite likely that this problem\n has been reported ' |
625 u'before. For questions about installation\n and ' | 625 'before. For questions about installation\n and ' |
626 u'configuration of Trac, please try the\n ' | 626 'configuration of Trac, please try the\n ' |
627 u'[3:mailing list]\n instead of filing a ticket.', | 627 '[3:mailing list]\n instead of filing a ticket.', |
628 messages[0][2] | 628 messages[0][2] |
629 ) | 629 ) |
630 | 630 |
631 def test_translate_i18n_msg_with_other_directives_nested(self): | 631 def test_translate_i18n_msg_with_other_directives_nested(self): |
632 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 632 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
639 <a href="${trac.homepage}wiki/MailingList">mailing list</a> | 639 <a href="${trac.homepage}wiki/MailingList">mailing list</a> |
640 instead of filing a ticket. | 640 instead of filing a ticket. |
641 </p> | 641 </p> |
642 </html>""") | 642 </html>""") |
643 translations = DummyTranslations({ | 643 translations = DummyTranslations({ |
644 u'Before you do that, though, please first try\n ' | 644 'Before you do that, though, please first try\n ' |
645 u'[1:[2:searching]\n for similar issues], as it is ' | 645 '[1:[2:searching]\n for similar issues], as it is ' |
646 u'quite likely that this problem\n has been reported ' | 646 'quite likely that this problem\n has been reported ' |
647 u'before. For questions about installation\n and ' | 647 'before. For questions about installation\n and ' |
648 u'configuration of Trac, please try the\n ' | 648 'configuration of Trac, please try the\n ' |
649 u'[3:mailing list]\n instead of filing a ticket.': | 649 '[3:mailing list]\n instead of filing a ticket.': |
650 u'Antes de o fazer, porém,\n ' | 650 u'Antes de o fazer, porém,\n ' |
651 u'[1:por favor tente [2:procurar]\n por problemas semelhantes], uma vez que ' | 651 u'[1:por favor tente [2:procurar]\n por problemas semelhantes], uma vez que ' |
652 u'é muito provável que este problema\n já tenha sido reportado ' | 652 u'é muito provável que este problema\n já tenha sido reportado ' |
653 u'anteriormente. Para questões relativas à instalação\n e ' | 653 u'anteriormente. Para questões relativas à instalação\n e ' |
654 u'configuração do Trac, por favor tente a\n ' | 654 u'configuração do Trac, por favor tente a\n ' |
679 <code><a href="${ 'href.wiki(TracIni)' }">trac.ini</a></code> | 679 <code><a href="${ 'href.wiki(TracIni)' }">trac.ini</a></code> |
680 and cannot be edited on this page. | 680 and cannot be edited on this page. |
681 </p> | 681 </p> |
682 </html>""") | 682 </html>""") |
683 translations = DummyTranslations({ | 683 translations = DummyTranslations({ |
684 u'[1:Note:] This repository is defined in\n ' | 684 '[1:Note:] This repository is defined in\n ' |
685 u'[2:[3:trac.ini]]\n and cannot be edited on this page.': | 685 '[2:[3:trac.ini]]\n and cannot be edited on this page.': |
686 u'[1:Nota:] Este repositório está definido em \n ' | 686 u'[1:Nota:] Este repositório está definido em \n ' |
687 u'[2:[3:trac.ini]]\n e não pode ser editado nesta página.', | 687 u'[2:[3:trac.ini]]\n e não pode ser editado nesta página.', |
688 }) | 688 }) |
689 translator = Translator(translations) | 689 translator = Translator(translations) |
690 translator.setup(tmpl) | 690 translator.setup(tmpl) |
691 messages = list(translator.extract(tmpl.stream)) | 691 messages = list(translator.extract(tmpl.stream)) |
692 self.assertEqual(1, len(messages)) | 692 self.assertEqual(1, len(messages)) |
693 self.assertEqual( | 693 self.assertEqual( |
694 u'[1:Note:] This repository is defined in\n ' | 694 '[1:Note:] This repository is defined in\n ' |
695 u'[2:[3:trac.ini]]\n and cannot be edited on this page.', | 695 '[2:[3:trac.ini]]\n and cannot be edited on this page.', |
696 messages[0][2] | 696 messages[0][2] |
697 ) | 697 ) |
698 self.assertEqual("""<html> | 698 self.assertEqual("""<html> |
699 <p class="hint"><strong>Nota:</strong> Este repositório está definido em | 699 <p class="hint"><strong>Nota:</strong> Este repositório está definido em |
700 <code><a href="href.wiki(TracIni)">trac.ini</a></code> | 700 <code><a href="href.wiki(TracIni)">trac.ini</a></code> |
1001 </html>""") | 1001 </html>""") |
1002 translator = Translator() | 1002 translator = Translator() |
1003 tmpl.add_directives(Translator.NAMESPACE, translator) | 1003 tmpl.add_directives(Translator.NAMESPACE, translator) |
1004 messages = list(translator.extract(tmpl.stream)) | 1004 messages = list(translator.extract(tmpl.stream)) |
1005 self.assertEqual(2, len(messages)) | 1005 self.assertEqual(2, len(messages)) |
1006 self.assertEqual((3, 'ngettext', (u'FooBar', u'FooBars'), []), messages[0]) | 1006 self.assertEqual((3, 'ngettext', ('FooBar', 'FooBars'), []), messages[0]) |
1007 self.assertEqual((7, 'ngettext', (u'FooBar', u'FooBars'), []), messages[1]) | 1007 self.assertEqual((7, 'ngettext', ('FooBar', 'FooBars'), []), messages[1]) |
1008 | 1008 |
1009 def test_extract_i18n_choose_as_directive(self): | 1009 def test_extract_i18n_choose_as_directive(self): |
1010 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1010 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1011 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1011 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1012 <i18n:choose numeral="two"> | 1012 <i18n:choose numeral="two"> |
1020 </html>""") | 1020 </html>""") |
1021 translator = Translator() | 1021 translator = Translator() |
1022 tmpl.add_directives(Translator.NAMESPACE, translator) | 1022 tmpl.add_directives(Translator.NAMESPACE, translator) |
1023 messages = list(translator.extract(tmpl.stream)) | 1023 messages = list(translator.extract(tmpl.stream)) |
1024 self.assertEqual(2, len(messages)) | 1024 self.assertEqual(2, len(messages)) |
1025 self.assertEqual((3, 'ngettext', (u'FooBar', u'FooBars'), []), messages[0]) | 1025 self.assertEqual((3, 'ngettext', ('FooBar', 'FooBars'), []), messages[0]) |
1026 self.assertEqual((7, 'ngettext', (u'FooBar', u'FooBars'), []), messages[1]) | 1026 self.assertEqual((7, 'ngettext', ('FooBar', 'FooBars'), []), messages[1]) |
1027 | 1027 |
1028 def test_extract_i18n_choose_as_attribute_with_params(self): | 1028 def test_extract_i18n_choose_as_attribute_with_params(self): |
1029 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1029 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1030 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1030 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1031 <div i18n:choose="two; fname, lname"> | 1031 <div i18n:choose="two; fname, lname"> |
1035 </html>""") | 1035 </html>""") |
1036 translator = Translator() | 1036 translator = Translator() |
1037 tmpl.add_directives(Translator.NAMESPACE, translator) | 1037 tmpl.add_directives(Translator.NAMESPACE, translator) |
1038 messages = list(translator.extract(tmpl.stream)) | 1038 messages = list(translator.extract(tmpl.stream)) |
1039 self.assertEqual(1, len(messages)) | 1039 self.assertEqual(1, len(messages)) |
1040 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1040 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1041 u'Foos %(fname)s %(lname)s'), []), | 1041 'Foos %(fname)s %(lname)s'), []), |
1042 messages[0]) | 1042 messages[0]) |
1043 | 1043 |
1044 def test_extract_i18n_choose_as_attribute_with_params_and_domain_as_param(self): | 1044 def test_extract_i18n_choose_as_attribute_with_params_and_domain_as_param(self): |
1045 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1045 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1046 xmlns:i18n="http://genshi.edgewall.org/i18n" | 1046 xmlns:i18n="http://genshi.edgewall.org/i18n" |
1052 </html>""") | 1052 </html>""") |
1053 translator = Translator() | 1053 translator = Translator() |
1054 tmpl.add_directives(Translator.NAMESPACE, translator) | 1054 tmpl.add_directives(Translator.NAMESPACE, translator) |
1055 messages = list(translator.extract(tmpl.stream)) | 1055 messages = list(translator.extract(tmpl.stream)) |
1056 self.assertEqual(1, len(messages)) | 1056 self.assertEqual(1, len(messages)) |
1057 self.assertEqual((4, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1057 self.assertEqual((4, 'ngettext', ('Foo %(fname)s %(lname)s', |
1058 u'Foos %(fname)s %(lname)s'), []), | 1058 'Foos %(fname)s %(lname)s'), []), |
1059 messages[0]) | 1059 messages[0]) |
1060 | 1060 |
1061 def test_extract_i18n_choose_as_directive_with_params(self): | 1061 def test_extract_i18n_choose_as_directive_with_params(self): |
1062 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1062 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1063 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1063 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1072 </html>""") | 1072 </html>""") |
1073 translator = Translator() | 1073 translator = Translator() |
1074 tmpl.add_directives(Translator.NAMESPACE, translator) | 1074 tmpl.add_directives(Translator.NAMESPACE, translator) |
1075 messages = list(translator.extract(tmpl.stream)) | 1075 messages = list(translator.extract(tmpl.stream)) |
1076 self.assertEqual(2, len(messages)) | 1076 self.assertEqual(2, len(messages)) |
1077 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1077 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1078 u'Foos %(fname)s %(lname)s'), []), | 1078 'Foos %(fname)s %(lname)s'), []), |
1079 messages[0]) | 1079 messages[0]) |
1080 self.assertEqual((7, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1080 self.assertEqual((7, 'ngettext', ('Foo %(fname)s %(lname)s', |
1081 u'Foos %(fname)s %(lname)s'), []), | 1081 'Foos %(fname)s %(lname)s'), []), |
1082 messages[1]) | 1082 messages[1]) |
1083 | 1083 |
1084 def test_extract_i18n_choose_as_directive_with_params_and_domain_as_directive(self): | 1084 def test_extract_i18n_choose_as_directive_with_params_and_domain_as_directive(self): |
1085 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1085 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1086 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1086 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1097 </html>""") | 1097 </html>""") |
1098 translator = Translator() | 1098 translator = Translator() |
1099 tmpl.add_directives(Translator.NAMESPACE, translator) | 1099 tmpl.add_directives(Translator.NAMESPACE, translator) |
1100 messages = list(translator.extract(tmpl.stream)) | 1100 messages = list(translator.extract(tmpl.stream)) |
1101 self.assertEqual(2, len(messages)) | 1101 self.assertEqual(2, len(messages)) |
1102 self.assertEqual((4, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1102 self.assertEqual((4, 'ngettext', ('Foo %(fname)s %(lname)s', |
1103 u'Foos %(fname)s %(lname)s'), []), | 1103 'Foos %(fname)s %(lname)s'), []), |
1104 messages[0]) | 1104 messages[0]) |
1105 self.assertEqual((9, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1105 self.assertEqual((9, 'ngettext', ('Foo %(fname)s %(lname)s', |
1106 u'Foos %(fname)s %(lname)s'), []), | 1106 'Foos %(fname)s %(lname)s'), []), |
1107 messages[1]) | 1107 messages[1]) |
1108 | 1108 |
1109 def test_extract_i18n_choose_as_attribute_with_params_and_comment(self): | 1109 def test_extract_i18n_choose_as_attribute_with_params_and_comment(self): |
1110 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1110 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1111 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1111 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1116 </html>""") | 1116 </html>""") |
1117 translator = Translator() | 1117 translator = Translator() |
1118 tmpl.add_directives(Translator.NAMESPACE, translator) | 1118 tmpl.add_directives(Translator.NAMESPACE, translator) |
1119 messages = list(translator.extract(tmpl.stream)) | 1119 messages = list(translator.extract(tmpl.stream)) |
1120 self.assertEqual(1, len(messages)) | 1120 self.assertEqual(1, len(messages)) |
1121 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1121 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1122 u'Foos %(fname)s %(lname)s'), | 1122 'Foos %(fname)s %(lname)s'), |
1123 [u'As in Foo Bar']), | 1123 ['As in Foo Bar']), |
1124 messages[0]) | 1124 messages[0]) |
1125 | 1125 |
1126 def test_extract_i18n_choose_as_directive_with_params_and_comment(self): | 1126 def test_extract_i18n_choose_as_directive_with_params_and_comment(self): |
1127 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1127 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1128 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1128 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1133 </html>""") | 1133 </html>""") |
1134 translator = Translator() | 1134 translator = Translator() |
1135 tmpl.add_directives(Translator.NAMESPACE, translator) | 1135 tmpl.add_directives(Translator.NAMESPACE, translator) |
1136 messages = list(translator.extract(tmpl.stream)) | 1136 messages = list(translator.extract(tmpl.stream)) |
1137 self.assertEqual(1, len(messages)) | 1137 self.assertEqual(1, len(messages)) |
1138 self.assertEqual((3, 'ngettext', (u'Foo %(fname)s %(lname)s', | 1138 self.assertEqual((3, 'ngettext', ('Foo %(fname)s %(lname)s', |
1139 u'Foos %(fname)s %(lname)s'), | 1139 'Foos %(fname)s %(lname)s'), |
1140 [u'As in Foo Bar']), | 1140 ['As in Foo Bar']), |
1141 messages[0]) | 1141 messages[0]) |
1142 | 1142 |
1143 def test_translate_i18n_domain_with_nested_inlcudes(self): | 1143 def test_translate_i18n_domain_with_nested_inlcudes(self): |
1144 import os, shutil, tempfile | 1144 import os, shutil, tempfile |
1145 from genshi.template.loader import TemplateLoader | 1145 from genshi.template.loader import TemplateLoader |
1367 </html>""") | 1367 </html>""") |
1368 translator = Translator() | 1368 translator = Translator() |
1369 tmpl.add_directives(Translator.NAMESPACE, translator) | 1369 tmpl.add_directives(Translator.NAMESPACE, translator) |
1370 messages = list(translator.extract(tmpl.stream)) | 1370 messages = list(translator.extract(tmpl.stream)) |
1371 self.assertEqual(1, len(messages)) | 1371 self.assertEqual(1, len(messages)) |
1372 self.assertEqual((3, None, u'Please see [1:Help] for details.', []), | 1372 self.assertEqual((3, None, 'Please see [1:Help] for details.', []), |
1373 messages[0]) | 1373 messages[0]) |
1374 | 1374 |
1375 def test_extract_i18n_msg_with_py_strip_and_comment(self): | 1375 def test_extract_i18n_msg_with_py_strip_and_comment(self): |
1376 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1376 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1377 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1377 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1381 </html>""") | 1381 </html>""") |
1382 translator = Translator() | 1382 translator = Translator() |
1383 tmpl.add_directives(Translator.NAMESPACE, translator) | 1383 tmpl.add_directives(Translator.NAMESPACE, translator) |
1384 messages = list(translator.extract(tmpl.stream)) | 1384 messages = list(translator.extract(tmpl.stream)) |
1385 self.assertEqual(1, len(messages)) | 1385 self.assertEqual(1, len(messages)) |
1386 self.assertEqual((3, None, u'Please see [1:Help] for details.', | 1386 self.assertEqual((3, None, 'Please see [1:Help] for details.', |
1387 ['Foo']), messages[0]) | 1387 ['Foo']), messages[0]) |
1388 | 1388 |
1389 def test_extract_i18n_choose_as_attribute_and_py_strip(self): | 1389 def test_extract_i18n_choose_as_attribute_and_py_strip(self): |
1390 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1390 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1391 xmlns:i18n="http://genshi.edgewall.org/i18n"> | 1391 xmlns:i18n="http://genshi.edgewall.org/i18n"> |
1396 </html>""") | 1396 </html>""") |
1397 translator = Translator() | 1397 translator = Translator() |
1398 tmpl.add_directives(Translator.NAMESPACE, translator) | 1398 tmpl.add_directives(Translator.NAMESPACE, translator) |
1399 messages = list(translator.extract(tmpl.stream)) | 1399 messages = list(translator.extract(tmpl.stream)) |
1400 self.assertEqual(1, len(messages)) | 1400 self.assertEqual(1, len(messages)) |
1401 self.assertEqual((3, 'ngettext', (u'FooBar', u'FooBars'), []), messages[0]) | 1401 self.assertEqual((3, 'ngettext', ('FooBar', 'FooBars'), []), messages[0]) |
1402 | 1402 |
1403 def test_translate_i18n_domain_with_inline_directive_on_START_NS(self): | 1403 def test_translate_i18n_domain_with_inline_directive_on_START_NS(self): |
1404 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" | 1404 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" |
1405 xmlns:i18n="http://genshi.edgewall.org/i18n" i18n:domain="foo"> | 1405 xmlns:i18n="http://genshi.edgewall.org/i18n" i18n:domain="foo"> |
1406 <p i18n:msg="">FooBar</p> | 1406 <p i18n:msg="">FooBar</p> |
1440 <p>${ngettext("You have %d item", "You have %d items", num)}</p> | 1440 <p>${ngettext("You have %d item", "You have %d items", num)}</p> |
1441 </body> | 1441 </body> |
1442 </html>""") | 1442 </html>""") |
1443 results = list(extract(buf, ['_', 'ngettext'], [], {})) | 1443 results = list(extract(buf, ['_', 'ngettext'], [], {})) |
1444 self.assertEqual([ | 1444 self.assertEqual([ |
1445 (3, None, u'Example', []), | 1445 (3, None, 'Example', []), |
1446 (6, None, u'Example', []), | 1446 (6, None, 'Example', []), |
1447 (7, '_', u'Hello, %(name)s', []), | 1447 (7, '_', 'Hello, %(name)s', []), |
1448 (8, 'ngettext', (u'You have %d item', u'You have %d items', None), | 1448 (8, 'ngettext', ('You have %d item', 'You have %d items', None), |
1449 []), | 1449 []), |
1450 ], results) | 1450 ], results) |
1451 | 1451 |
1452 def test_extraction_without_text(self): | 1452 def test_extraction_without_text(self): |
1453 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> | 1453 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> |
1456 </html>""") | 1456 </html>""") |
1457 results = list(extract(buf, ['_', 'ngettext'], [], { | 1457 results = list(extract(buf, ['_', 'ngettext'], [], { |
1458 'extract_text': 'no' | 1458 'extract_text': 'no' |
1459 })) | 1459 })) |
1460 self.assertEqual([ | 1460 self.assertEqual([ |
1461 (3, 'ngettext', (u'Singular', u'Plural', None), []), | 1461 (3, 'ngettext', ('Singular', 'Plural', None), []), |
1462 ], results) | 1462 ], results) |
1463 | 1463 |
1464 def test_text_template_extraction(self): | 1464 def test_text_template_extraction(self): |
1465 buf = StringIO("""${_("Dear %(name)s") % {'name': name}}, | 1465 buf = StringIO("""${_("Dear %(name)s") % {'name': name}}, |
1466 | 1466 |
1473 Foobar""") | 1473 Foobar""") |
1474 results = list(extract(buf, ['_', 'ngettext'], [], { | 1474 results = list(extract(buf, ['_', 'ngettext'], [], { |
1475 'template_class': 'genshi.template:TextTemplate' | 1475 'template_class': 'genshi.template:TextTemplate' |
1476 })) | 1476 })) |
1477 self.assertEqual([ | 1477 self.assertEqual([ |
1478 (1, '_', u'Dear %(name)s', []), | 1478 (1, '_', 'Dear %(name)s', []), |
1479 (3, 'ngettext', (u'Your item:', u'Your items', None), []), | 1479 (3, 'ngettext', ('Your item:', 'Your items', None), []), |
1480 (7, None, u'All the best,\n Foobar', []) | 1480 (7, None, 'All the best,\n Foobar', []) |
1481 ], results) | 1481 ], results) |
1482 | 1482 |
1483 def test_extraction_with_keyword_arg(self): | 1483 def test_extraction_with_keyword_arg(self): |
1484 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> | 1484 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> |
1485 ${gettext('Foobar', foo='bar')} | 1485 ${gettext('Foobar', foo='bar')} |
1486 </html>""") | 1486 </html>""") |
1487 results = list(extract(buf, ['gettext'], [], {})) | 1487 results = list(extract(buf, ['gettext'], [], {})) |
1488 self.assertEqual([ | 1488 self.assertEqual([ |
1489 (2, 'gettext', (u'Foobar'), []), | 1489 (2, 'gettext', ('Foobar'), []), |
1490 ], results) | 1490 ], results) |
1491 | 1491 |
1492 def test_extraction_with_nonstring_arg(self): | 1492 def test_extraction_with_nonstring_arg(self): |
1493 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> | 1493 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> |
1494 ${dgettext(curdomain, 'Foobar')} | 1494 ${dgettext(curdomain, 'Foobar')} |
1495 </html>""") | 1495 </html>""") |
1496 results = list(extract(buf, ['dgettext'], [], {})) | 1496 results = list(extract(buf, ['dgettext'], [], {})) |
1497 self.assertEqual([ | 1497 self.assertEqual([ |
1498 (2, 'dgettext', (None, u'Foobar'), []), | 1498 (2, 'dgettext', (None, 'Foobar'), []), |
1499 ], results) | 1499 ], results) |
1500 | 1500 |
1501 def test_extraction_inside_ignored_tags(self): | 1501 def test_extraction_inside_ignored_tags(self): |
1502 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> | 1502 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> |
1503 <script type="text/javascript"> | 1503 <script type="text/javascript"> |
1507 }); | 1507 }); |
1508 </script> | 1508 </script> |
1509 </html>""") | 1509 </html>""") |
1510 results = list(extract(buf, ['_'], [], {})) | 1510 results = list(extract(buf, ['_'], [], {})) |
1511 self.assertEqual([ | 1511 self.assertEqual([ |
1512 (5, '_', u'Please wait...', []), | 1512 (5, '_', 'Please wait...', []), |
1513 ], results) | 1513 ], results) |
1514 | 1514 |
1515 def test_extraction_inside_ignored_tags_with_directives(self): | 1515 def test_extraction_inside_ignored_tags_with_directives(self): |
1516 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> | 1516 buf = StringIO("""<html xmlns:py="http://genshi.edgewall.org/"> |
1517 <script type="text/javascript"> | 1517 <script type="text/javascript"> |
1563 translator = Translator() | 1563 translator = Translator() |
1564 tmpl.add_directives(Translator.NAMESPACE, translator) | 1564 tmpl.add_directives(Translator.NAMESPACE, translator) |
1565 messages = list(translator.extract(tmpl.stream)) | 1565 messages = list(translator.extract(tmpl.stream)) |
1566 self.assertEqual(10, len(messages)) | 1566 self.assertEqual(10, len(messages)) |
1567 self.assertEqual([ | 1567 self.assertEqual([ |
1568 (3, None, u'View differences', []), | 1568 (3, None, 'View differences', []), |
1569 (6, None, u'inline', []), | 1569 (6, None, 'inline', []), |
1570 (8, None, u'side by side', []), | 1570 (8, None, 'side by side', []), |
1571 (10, None, u'Show', []), | 1571 (10, None, 'Show', []), |
1572 (13, None, u'lines around each change', []), | 1572 (13, None, 'lines around each change', []), |
1573 (16, None, u'Ignore:', []), | 1573 (16, None, 'Ignore:', []), |
1574 (20, None, u'Blank lines', []), | 1574 (20, None, 'Blank lines', []), |
1575 (25, None, u'Case changes',[]), | 1575 (25, None, 'Case changes',[]), |
1576 (30, None, u'White space changes', []), | 1576 (30, None, 'White space changes', []), |
1577 (34, '_', u'Update', [])], messages) | 1577 (34, '_', 'Update', [])], messages) |
1578 | 1578 |
1579 | 1579 |
1580 def suite(): | 1580 def suite(): |
1581 suite = unittest.TestSuite() | 1581 suite = unittest.TestSuite() |
1582 suite.addTest(doctest.DocTestSuite(Translator.__module__)) | 1582 suite.addTest(doctest.DocTestSuite(Translator.__module__)) |