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_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_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())
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())
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)
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_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_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 parse_po_file(fp, filename=None): po_file = PoFile() Parser(po_file).parse_po_file(fp, filename) return po_file.get_catalog()