New upstream version 0.6.3
Sascha Steinbiss
4 years ago
0 | 0 | Metadata-Version: 1.2 |
1 | 1 | Name: BabelGladeExtractor |
2 | Version: 0.6.1 | |
2 | Version: 0.6.3 | |
3 | 3 | Summary: Babel Glade XML files translatable strings extractor |
4 | 4 | Home-page: https://github.com/GNOME-Keysign/babel-glade |
5 | 5 | Author: Pedro Algarvio |
0 | MANIFEST.in | |
0 | 1 | setup.cfg |
1 | 2 | setup.py |
2 | 3 | BabelGladeExtractor.egg-info/PKG-INFO |
7 | 8 | BabelGladeExtractor.egg-info/top_level.txt |
8 | 9 | babelglade/__init__.py |
9 | 10 | babelglade/extract.py |
10 | babelglade/translate.py⏎ | |
11 | babelglade/translate.py | |
12 | babelglade/tests/__init__.py | |
13 | babelglade/tests/test.raw.appdata.xml | |
14 | babelglade/tests/test.raw.desktop | |
15 | babelglade/tests/test_extract.py | |
16 | babelglade/tests/test_translate.py | |
17 | babelglade/tests/locale/fr/LC_MESSAGES/test.po | |
18 | babelglade/tests/locale/nl/LC_MESSAGES/test.po⏎ |
0 | 0 | Metadata-Version: 1.2 |
1 | 1 | Name: BabelGladeExtractor |
2 | Version: 0.6.1 | |
2 | Version: 0.6.3 | |
3 | 3 | Summary: Babel Glade XML files translatable strings extractor |
4 | 4 | Home-page: https://github.com/GNOME-Keysign/babel-glade |
5 | 5 | Author: Pedro Algarvio |
0 | # -*- coding: utf-8 -*- | |
1 | # vim: sw=4 ts=4 fenc=utf-8 | |
2 | # ============================================================================= | |
3 | # $Id$ | |
4 | # ============================================================================= | |
5 | # $URL$ | |
6 | # $LastChangedDate$ | |
7 | # $Rev$ | |
8 | # $LastChangedBy$ | |
9 | # ============================================================================= | |
10 | # Copyright (C) 2007 Ufsoft.org - Pedro Algarvio <ufs@ufsoft.org> | |
11 | # | |
12 | # Please view LICENSE for additional licensing information. | |
13 | # ============================================================================= | |
14 | ||
15 | ||
16 | import unittest | |
17 | ||
18 | def suite(): | |
19 | from babelglade.tests import test_extract, test_translate | |
20 | suite = unittest.TestSuite() | |
21 | suite.addTest(unittest.makeSuite(test_extract.GladeExtractTests)) | |
22 | suite.addTest(unittest.makeSuite(test_translate.TranslateTestCase)) | |
23 | return suite | |
24 | ||
25 | if __name__ == '__main__': | |
26 | unittest.main(defaultTest='suite') |
0 | msgid "" | |
1 | msgstr "" | |
2 | "Language: fr\n" | |
3 | "MIME-Version: 1.0\n" | |
4 | "Content-Type: text/plain; charset=UTF-8\n" | |
5 | "Content-Transfer-Encoding: 8bit\n" | |
6 | ||
7 | msgid "This should be translated." | |
8 | msgstr "Cela devrait être traduit." | |
9 | ||
10 | msgid "" | |
11 | "\n" | |
12 | " Multi line\n" | |
13 | " text.\n" | |
14 | " " | |
15 | msgstr "" | |
16 | "\n" | |
17 | " Texte\n" | |
18 | " multi-ligne.\n" | |
19 | " "⏎ |
0 | msgid "" | |
1 | msgstr "" | |
2 | "Language: nl\n" | |
3 | "MIME-Version: 1.0\n" | |
4 | "Content-Type: text/plain; charset=UTF-8\n" | |
5 | "Content-Transfer-Encoding: 8bit\n" | |
6 | ||
7 | msgid "This should be translated." | |
8 | msgstr "Dit moet worden vertaald." | |
9 | ||
10 | msgid "" | |
11 | "\n" | |
12 | " Multi line\n" | |
13 | " text.\n" | |
14 | " " | |
15 | msgstr "" | |
16 | "\n" | |
17 | " Meerregelige\n" | |
18 | " tekst.\n" | |
19 | " "⏎ |
0 | <?xml version="1.0" encoding="UTF-8"?> | |
1 | <!-- Copyright 2019 Tobias Mueller <tobiasmue@gnome.org> --> | |
2 | <component type="desktop"> | |
3 | <id>babelglade.test</id> | |
4 | ||
5 | <description> | |
6 | <p translatable="yes">This should be translated.</p> | |
7 | <p translatable="yes"> | |
8 | Multi line | |
9 | text. | |
10 | </p> | |
11 | </description> | |
12 | </component> |
0 | [Desktop Entry] | |
1 | Name=Keysign | |
2 | Comment=This should be translated. | |
3 | Keywords=python;gpg;gnupg;key;openpgp; | |
4 | Type=Application | |
5 | Exec=python3 -m keysign | |
6 | Icon=org.gnome.Keysign | |
7 | Categories=GTK;GNOME;Utility; | |
8 | StartupNotify=true⏎ |
0 | # -*- coding: utf-8 -*- | |
1 | # vim: sw=4 ts=4 fenc=utf-8 | |
2 | # ============================================================================= | |
3 | # $Id$ | |
4 | # ============================================================================= | |
5 | # $URL$ | |
6 | # $LastChangedDate$ | |
7 | # $Rev$ | |
8 | # $LastChangedBy$ | |
9 | # ============================================================================= | |
10 | # Copyright (C) 2007 Ufsoft.org - Pedro Algarvio <ufs@ufsoft.org> | |
11 | # | |
12 | # Please view LICENSE for additional licensing information. | |
13 | # ============================================================================= | |
14 | ||
15 | import unittest | |
16 | try: | |
17 | from StringIO import StringIO ## for Python 2 | |
18 | except ImportError: | |
19 | from io import StringIO ## for Python 3from babel.messages.extract import DEFAULT_KEYWORDS | |
20 | from babelglade.extract import extract_glade | |
21 | ||
22 | DEFAULT_KEYWORDS = "" | |
23 | ||
24 | class GladeExtractTests(unittest.TestCase): | |
25 | ||
26 | def setUp(self): | |
27 | self.glade_fileobj = StringIO("""\ | |
28 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
29 | <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> | |
30 | <glade-interface> | |
31 | <widget class="GtkWindow" id="window1"> | |
32 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> | |
33 | <child> | |
34 | <widget class="GtkVBox" id="vbox1"> | |
35 | <property name="visible">True</property> | |
36 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> | |
37 | <child> | |
38 | <widget class="GtkLabel" id="label1"> | |
39 | <property name="visible">True</property> | |
40 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> | |
41 | <property name="label" translatable="yes" comments="A label with translator comments">This is a Label</property> | |
42 | </widget> | |
43 | </child> | |
44 | <child> | |
45 | <widget class="GtkButton" id="button1"> | |
46 | <property name="visible">True</property> | |
47 | <property name="can_focus">True</property> | |
48 | <property name="receives_default">True</property> | |
49 | <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> | |
50 | <property name="label" translatable="yes" comments="This button also includes translator comments">A button</property> | |
51 | </widget> | |
52 | <packing> | |
53 | <property name="position">1</property> | |
54 | </packing> | |
55 | </child> | |
56 | </widget> | |
57 | </child> | |
58 | </widget> | |
59 | </glade-interface> | |
60 | """) | |
61 | ||
62 | def test_yield_four_item_tuples_with_comments(self): | |
63 | extracted = extract_glade(self.glade_fileobj, DEFAULT_KEYWORDS, True, {}) | |
64 | for entry in list(extracted): | |
65 | assert len(entry) == 4, "extract_galde did not return a 4 tupple item" | |
66 | ||
67 | def test_yield_four_item_tuples_without_comments(self): | |
68 | extracted = extract_glade(self.glade_fileobj, DEFAULT_KEYWORDS, False, {}) | |
69 | for entry in list(extracted): | |
70 | assert len(entry) == 4, "extract_galde did not return a 4 tupple item" |
0 | ||
1 | import os | |
2 | import unittest | |
3 | from babelglade.translate import translate_desktop_file, translate_appdata_file | |
4 | ||
5 | def relative(test_file): | |
6 | return os.path.join(os.path.dirname(__file__), test_file) | |
7 | ||
8 | ||
9 | class TranslateTestCase(unittest.TestCase): | |
10 | ||
11 | def test_desktop_file(self): | |
12 | translate_desktop_file(relative("test.raw.desktop"), "test.desktop", relative("locale")) | |
13 | ||
14 | with open("test.desktop") as desktop: | |
15 | content = desktop.read() | |
16 | ||
17 | assert "Comment=This should be translated." in content | |
18 | assert "Comment[nl]=Dit moet worden vertaald." in content | |
19 | assert "Comment[fr]=Cela devrait être traduit." in content | |
20 | ||
21 | def test_appdata_xml(self): | |
22 | translate_appdata_file(relative("test.raw.appdata.xml"), "test.appdata.xml", relative("locale")) | |
23 | ||
24 | with open("test.appdata.xml") as desktop: | |
25 | content = desktop.read() | |
26 | ||
27 | assert "<p>This should be translated.</p>" in content | |
28 | assert '<p xml:lang="fr">Cela devrait être traduit.</p>' in content | |
29 | assert '<p xml:lang="nl">Dit moet worden vertaald.</p>' in content | |
30 | assert """<p> | |
31 | Multi line | |
32 | text. | |
33 | </p>""" in content | |
34 | assert """<p xml:lang="fr"> | |
35 | Texte | |
36 | multi-ligne. | |
37 | </p>""" in content | |
38 | assert """<p xml:lang="nl"> | |
39 | Meerregelige | |
40 | tekst. | |
41 | </p>""" in content⏎ |
47 | 47 | # First the original line found it in the file, then the translations. |
48 | 48 | outfp.writelines((outline+'\n' for outline in ([line] + additional_lines))) |
49 | 49 | |
50 | infp.close() | |
51 | outfp.close() | |
52 | ||
50 | 53 | |
51 | 54 | def translate_appdata_file(infile, outfile, localedir): |
52 | 55 | catalogs = get_catalogs(localedir) |
93 | 96 | catalogs = {} |
94 | 97 | |
95 | 98 | for pofile in pofiles: |
96 | catalog = read_po(open(pofile, 'r')) | |
99 | with open(pofile, 'r') as f: | |
100 | catalog = read_po(f) | |
97 | 101 | catalogs[catalog.locale] = catalog |
98 | 102 | logging.info("Found %d strings for %s", len(catalog), catalog.locale) |
99 | 103 | # logging.debug("Strings for %r", catalog, catalog.values()) |
17 | 17 | |
18 | 18 | setup( |
19 | 19 | name = 'BabelGladeExtractor', |
20 | version = '0.6.1', | |
20 | version = '0.6.3', | |
21 | 21 | license = 'BSD', |
22 | 22 | author = 'Pedro Algarvio', |
23 | 23 | author_email = 'ufs@ufsoft.org', |
36 | 36 | [distutils.commands] |
37 | 37 | compile_catalog = babel.messages.frontend:compile_catalog |
38 | 38 | """, |
39 | packages = ['babelglade'] | |
40 | ||
39 | packages = ['babelglade', 'babelglade.tests'], | |
40 | include_package_data=True | |
41 | 41 | ) |