def test_message_with_plural(self):
     po_file = PoFile()
     entry = po_file.add_entry("message", "plural message")
     self.assertEqual("message", entry.message)
     self.assertEqual("plural message", entry.plural)
     self.assertIn("message", po_file.entries)
     self.assertIs(entry, po_file.entries["message"])
    def test_dump_embedded_and_terminal_newlines(self):
        po_file = PoFile()
        entry = po_file.add_entry("\nmultiline\nmessage\n", "\nmultiline\nplural\n", "\nmultiline\ncontext\n")
        entry.add_location("filename.py", 42)
        entry.add_plural_translation(0, "\ntranslated\nmultiline\nmessage\n")
        entry.add_plural_translation(1, "\ntranslated\nmultiline\nplural\n")
        self.assertEqual(r"""msgctxt ""
"\n"
"multiline\n"
"context\n"
msgid ""
"\n"
"multiline\n"
"message\n"
msgid_plural ""
"\n"
"multiline\n"
"plural\n"
msgstr[0] ""
"\n"
"translated\n"
"multiline\n"
"message\n"
msgstr[1] ""
"\n"
"translated\n"
"multiline\n"
"plural\n"
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
 def test_location(self):
     po_file = PoFile()
     entry = po_file.add_entry("message")
     entry.add_location("filename.py", 42)
     entry.add_location("filename.py", 4242)
     self.assertEqual([("filename.py", 42), ("filename.py", 4242)],
                      entry.locations)
 def test_message_with_context(self):
     po_file = PoFile()
     entry = po_file.add_entry("message", context="context")
     self.assertEqual("message", entry.message)
     self.assertEqual("context", entry.context)
     self.assertIn("context\x04message", po_file.entries)
     self.assertIs(entry, po_file.entries["context\x04message"])
 def test_message_with_context(self):
     po_file = PoFile()
     entry = po_file.add_entry("message", context="context")
     self.assertEqual("message", entry.message)
     self.assertEqual("context", entry.context)
     self.assertIn("context\x04message", po_file.entries)
     self.assertIs(entry, po_file.entries["context\x04message"])
    def test_dump_embedded_and_terminal_newlines(self):
        po_file = PoFile()
        entry = po_file.add_entry("\nmultiline\nmessage\n",
                                  "\nmultiline\nplural\n",
                                  "\nmultiline\ncontext\n")
        entry.add_location("filename.py", 42)
        entry.add_plural_translation(0, "\ntranslated\nmultiline\nmessage\n")
        entry.add_plural_translation(1, "\ntranslated\nmultiline\nplural\n")
        self.assertEqual(
            r"""msgctxt ""
"\n"
"multiline\n"
"context\n"
msgid ""
"\n"
"multiline\n"
"message\n"
msgid_plural ""
"\n"
"multiline\n"
"plural\n"
msgstr[0] ""
"\n"
"translated\n"
"multiline\n"
"message\n"
msgstr[1] ""
"\n"
"translated\n"
"multiline\n"
"plural\n"
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
 def test_message_with_plural(self):
     po_file = PoFile()
     entry = po_file.add_entry("message", "plural message")
     self.assertEqual("message", entry.message)
     self.assertEqual("plural message", entry.plural)
     self.assertIn("message", po_file.entries)
     self.assertIs(entry, po_file.entries["message"])
    def test_header_parsing(self):
        file_object = StringIO(r"""
msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
"Language-Team: French <None>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
""")
        po_file = PoFile()
        self.assertListEqual(po_file.header_fields, [])
        self.assertIsNone(po_file.get_nplurals())
        parser = Parser(po_file)
        parser.parse_po_file(file_object)
        self.assertListEqual(po_file.header_fields,
                             [('Project-Id-Version', 'Django'),
                              ('Report-Msgid-Bugs-To', ''),
                              ('Language-Team', 'French <None>'),
                              ('Language', 'fr'), ('MIME-Version', '1.0'),
                              ('Content-Type', 'text/plain; charset=UTF-8'),
                              ('Content-Transfer-Encoding', '8bit'),
                              ('Plural-Forms', 'nplurals=2; plural=(n > 1)')])
        self.assertEqual(po_file.get_nplurals(), 2)
    def test_header_parsing(self):
        file_object = StringIO(r"""
msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
"Language-Team: French <None>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
""")
        po_file = PoFile()
        self.assertListEqual(po_file.header_fields, [])
        self.assertIsNone(po_file.get_nplurals())
        parser = Parser(po_file)
        parser.parse_po_file(file_object)
        self.assertListEqual(po_file.header_fields, [
            ('Project-Id-Version', 'Django'),
            ('Report-Msgid-Bugs-To', ''),
            ('Language-Team', 'French <None>'),
            ('Language', 'fr'),
            ('MIME-Version', '1.0'),
            ('Content-Type', 'text/plain; charset=UTF-8'),
            ('Content-Transfer-Encoding', '8bit'),
            ('Plural-Forms', 'nplurals=2; plural=(n > 1)')])
        self.assertEqual(po_file.get_nplurals(), 2)
 def test_plural_translation(self):
     po_file = PoFile()
     entry = po_file.add_entry("message", "plural")
     entry.add_plural_translation(0, "translation")
     entry.add_plural_translation(1, "plural translation")
     self.assertEqual({0: "translation", 1: "plural translation"}, entry.translations)
     self.assertEqual(
         {
             ("message", 0): "translation",
             ("message", 1): "plural translation"},
         po_file.get_catalog())
 def test_plural_translation(self):
     po_file = PoFile()
     entry = po_file.add_entry("message", "plural")
     entry.add_plural_translation(0, "translation")
     entry.add_plural_translation(1, "plural translation")
     self.assertEqual({
         0: "translation",
         1: "plural translation"
     }, entry.translations)
     self.assertEqual(
         {
             ("message", 0): "translation",
             ("message", 1): "plural translation"
         }, po_file.get_catalog())
Exemple #12
0
 def test_scoping(self):
     po_file = PoFile()
     extract_messages(os.path.join(os.path.dirname(__file__), 'sample.py'),
                      po_file, 'sample.py')
     po_keys = po_file.entries.keys()
     self.assertNotIn('not a translation', po_keys)
     self.assertIn('a translation', po_keys)
     self.assertNotIn('still not a translation', po_keys)
 def test_catalog(self):
     po_file = PoFile()
     po_file.add_entry("non translated message")
     po_file.add_entry("translated message").add_translation("translation")
     entry = po_file.add_entry("translated message 2", "plural")
     entry.add_plural_translation(0, "translation 2")
     entry.add_plural_translation(1, "plural translation 2")
     po_file.add_entry("translated message 3", context="context").add_translation("translation 3")
     entry = po_file.add_entry("translated message 4", "plural", "context")
     entry.add_plural_translation(0, "translation 4")
     entry.add_plural_translation(1, "plural translation 4")
     self.assertEqual(
         {
             "translated message": "translation",
             ("translated message 2", 0): "translation 2",
             ("translated message 2", 1): "plural translation 2",
             "context\x04translated message 3": "translation 3",
             ("context\x04translated message 4", 0): "translation 4",
             ("context\x04translated message 4", 1): "plural translation 4"},
         po_file.get_catalog())
Exemple #14
0
 def test_module_alias(self):
     po_file = PoFile()
     extract_messages(os.path.join(os.path.dirname(__file__), 'sample.py'),
                      po_file, 'sample.py')
     po_keys = po_file.entries.keys()
     self.assertIn('test', po_keys)
     self.assertIn('test_lazy', po_keys)
     self.assertIn('test_noop', po_keys)
     self.assertIn('utest', po_keys)
     self.assertIn('utest_lazy', po_keys)
     self.assertIn('utest_noop', po_keys)
     self.assertIn('context\x04ptest', po_keys)
     self.assertIn('context\x04ptest_lazy', po_keys)
     self.assertIn('context\x04ptest', po_keys)
     self.assertIn('ntest', po_keys)
     self.assertIn('ntest_lazy', po_keys)
     self.assertIn('untest', po_keys)
     self.assertIn('untest_lazy', po_keys)
     self.assertIn('context\x04nptest', po_keys)
     self.assertIn('context\x04nptest_lazy', po_keys)
Exemple #15
0
 def test_function_aliases(self):
     po_file = PoFile()
     extract_messages(os.path.join(os.path.dirname(__file__), 'sample.py'),
                      po_file, 'sample.py')
     po_keys = po_file.entries.keys()
     self.assertIn('alias_test', po_keys)
     self.assertIn('alias_test_lazy', po_keys)
     self.assertIn('alias_test_noop', po_keys)
     self.assertIn('alias_utest', po_keys)
     self.assertIn('alias_utest_lazy', po_keys)
     self.assertIn('alias_utest_noop', po_keys)
     self.assertIn('context\x04alias_ptest', po_keys)
     self.assertIn('context\x04alias_ptest_lazy', po_keys)
     self.assertIn('context\x04alias_ptest', po_keys)
     self.assertIn('alias_ntest', po_keys)
     self.assertIn('alias_ntest_lazy', po_keys)
     self.assertIn('alias_untest', po_keys)
     self.assertIn('alias_untest_lazy', po_keys)
     self.assertIn('context\x04alias_nptest', po_keys)
     self.assertIn('context\x04alias_nptest_lazy', po_keys)
    def test_dump_nplurals(self):
        po_file = PoFile()
        entry = po_file.add_entry("message", "plural")
        entry.add_location("filename.py", 42)
        self.assertEqual("""msgid "message"
msgid_plural "plural"
msgstr[0] ""
msgstr[1] ""
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
        po_file.add_header_field("Plural-Forms", "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;")
        self.assertEqual("""msgid ""
msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\\n"

msgid "message"
msgid_plural "plural"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
    def test_dump_nplurals(self):
        po_file = PoFile()
        entry = po_file.add_entry("message", "plural")
        entry.add_location("filename.py", 42)
        self.assertEqual(
            """msgid "message"
msgid_plural "plural"
msgstr[0] ""
msgstr[1] ""
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
        po_file.add_header_field(
            "Plural-Forms",
            "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;")
        self.assertEqual(
            """msgid ""
msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\\n"

msgid "message"
msgid_plural "plural"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
 def setUp(self):
     po_file = PoFile()
     extract_messages(
         os.path.join(os.path.dirname(__file__), 'sample.html'), po_file)
     self.po_keys = po_file.entries.keys()
    def test_dump(self):
        po_file = PoFile()
        po_file.add_entry("non translated message")
        po_file.add_entry("non translated message with plural", "plural")
        po_file.add_entry("translated message").add_translation("translation")
        entry_2 = po_file.add_entry("translated message 2", "plural")
        entry_2.add_plural_translation(0, "translation 2")
        entry_2.add_plural_translation(1, "plural translation 2")
        po_file.add_entry("translated message 3", context="context").add_translation("translation 3")
        entry_4 = po_file.add_entry("translated message 4", "plural", "context")
        entry_4.add_plural_translation(0, "translation 4")
        entry_4.add_plural_translation(1, "plural translation 4")
        entry_5 = po_file.add_entry("translated message 5")
        entry_5.add_location("filename.py", 42)
        entry_5.add_location("filename.py", 4242)
        self.assertEqual("""#. obsolete entry
msgid "translated message"
msgstr "translation"

#. obsolete entry
msgid "translated message 2"
msgid_plural "plural"
msgstr[0] "translation 2"
msgstr[1] "plural translation 2"

#. obsolete entry
msgctxt "context"
msgid "translated message 3"
msgstr "translation 3"

#. obsolete entry
msgctxt "context"
msgid "translated message 4"
msgid_plural "plural"
msgstr[0] "translation 4"
msgstr[1] "plural translation 4"

msgid "translated message 5"
msgstr ""
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
        self.assertEqual("""msgid "translated message 5"
msgstr ""
""", po_file.dumps(include_locations=False, prune_obsoletes=True))
        self.assertEqual("""#: filename.py:42 filename.py:4242
msgid "translated message 5"
msgstr ""
""", po_file.dumps(include_locations=True, prune_obsoletes=True))
 def test_nplurals(self):
     po_file = PoFile()
     po_file.add_header_field("Plural-Forms", "nplurals=2; plural=(n > 1)")
     self.assertEqual(2, po_file.get_nplurals())
 def test_header_overwrite(self):
     po_file = PoFile()
     po_file.add_header_field("Language", "fr")
     po_file.add_header_field("Language", "en")
     self.assertEqual([("Language", "en")], po_file.header_fields)
 def test_catalog(self):
     po_file = PoFile()
     po_file.add_entry("non translated message")
     po_file.add_entry("translated message").add_translation("translation")
     entry = po_file.add_entry("translated message 2", "plural")
     entry.add_plural_translation(0, "translation 2")
     entry.add_plural_translation(1, "plural translation 2")
     po_file.add_entry("translated message 3",
                       context="context").add_translation("translation 3")
     entry = po_file.add_entry("translated message 4", "plural", "context")
     entry.add_plural_translation(0, "translation 4")
     entry.add_plural_translation(1, "plural translation 4")
     self.assertEqual(
         {
             "translated message": "translation",
             ("translated message 2", 0): "translation 2",
             ("translated message 2", 1): "plural translation 2",
             "context\x04translated message 3": "translation 3",
             ("context\x04translated message 4", 0): "translation 4",
             ("context\x04translated message 4", 1): "plural translation 4"
         }, po_file.get_catalog())
 def test_location(self):
     po_file = PoFile()
     entry = po_file.add_entry("message")
     entry.add_location("filename.py", 42)
     entry.add_location("filename.py", 4242)
     self.assertEqual([("filename.py", 42), ("filename.py", 4242)], entry.locations)
 def test_translation(self):
     po_file = PoFile()
     entry = po_file.add_entry("message")
     entry.add_translation("translation")
     self.assertEqual({0: "translation"}, entry.translations)
     self.assertEqual({"message": "translation"}, po_file.get_catalog())
 def test_translation(self):
     po_file = PoFile()
     entry = po_file.add_entry("message")
     entry.add_translation("translation")
     self.assertEqual({0: "translation"}, entry.translations)
     self.assertEqual({"message": "translation"}, po_file.get_catalog())
 def test_header(self):
     po_file = PoFile()
     po_file.add_header_field("Language", "fr")
     po_file.add_header_field("MIME-Version", "1.0")
     self.assertEqual([("Language", "fr"), ("MIME-Version", "1.0")],
                      po_file.header_fields)
 def test_header_overwrite(self):
     po_file = PoFile()
     po_file.add_header_field("Language", "fr")
     po_file.add_header_field("Language", "en")
     self.assertEqual([("Language", "en")], po_file.header_fields)
 def test_header(self):
     po_file = PoFile()
     po_file.add_header_field("Language", "fr")
     po_file.add_header_field("MIME-Version", "1.0")
     self.assertEqual([("Language", "fr"), ("MIME-Version", "1.0")], po_file.header_fields)
    def test_dump(self):
        po_file = PoFile()
        po_file.add_entry("non translated message")
        po_file.add_entry("non translated message with plural", "plural")
        po_file.add_entry("translated message").add_translation("translation")
        entry_2 = po_file.add_entry("translated message 2", "plural")
        entry_2.add_plural_translation(0, "translation 2")
        entry_2.add_plural_translation(1, "plural translation 2")
        po_file.add_entry("translated message 3",
                          context="context").add_translation("translation 3")
        entry_4 = po_file.add_entry("translated message 4", "plural",
                                    "context")
        entry_4.add_plural_translation(0, "translation 4")
        entry_4.add_plural_translation(1, "plural translation 4")
        entry_5 = po_file.add_entry("translated message 5")
        entry_5.add_location("filename.py", 42)
        entry_5.add_location("filename.py", 4242)
        self.assertEqual(
            """#. obsolete entry
msgid "translated message"
msgstr "translation"

#. obsolete entry
msgid "translated message 2"
msgid_plural "plural"
msgstr[0] "translation 2"
msgstr[1] "plural translation 2"

#. obsolete entry
msgctxt "context"
msgid "translated message 3"
msgstr "translation 3"

#. obsolete entry
msgctxt "context"
msgid "translated message 4"
msgid_plural "plural"
msgstr[0] "translation 4"
msgstr[1] "plural translation 4"

msgid "translated message 5"
msgstr ""
""", po_file.dumps(include_locations=False, prune_obsoletes=False))
        self.assertEqual(
            """msgid "translated message 5"
msgstr ""
""", po_file.dumps(include_locations=False, prune_obsoletes=True))
        self.assertEqual(
            """#: filename.py:42 filename.py:4242
msgid "translated message 5"
msgstr ""
""", po_file.dumps(include_locations=True, prune_obsoletes=True))
 def test_nplurals(self):
     po_file = PoFile()
     po_file.add_header_field("Plural-Forms", "nplurals=2; plural=(n > 1)")
     self.assertEqual(2, po_file.get_nplurals())
Exemple #31
0
def parse_po_file(fp, filename=None):
    po_file = PoFile()
    Parser(po_file).parse_po_file(fp, filename)
    return po_file.get_catalog()
Exemple #32
0
def parse_po_file(fp, filename=None):
    po_file = PoFile()
    Parser(po_file).parse_po_file(fp, filename)
    return po_file.get_catalog()