Codebase list python-babelgladeextractor / 2fdae50
New upstream version 0.6.3 Sascha Steinbiss 4 years ago
13 changed file(s) with 223 addition(s) and 7 deletion(s). Raw diff Collapse all Expand all
00 Metadata-Version: 1.2
11 Name: BabelGladeExtractor
2 Version: 0.6.1
2 Version: 0.6.3
33 Summary: Babel Glade XML files translatable strings extractor
44 Home-page: https://github.com/GNOME-Keysign/babel-glade
55 Author: Pedro Algarvio
0 MANIFEST.in
01 setup.cfg
12 setup.py
23 BabelGladeExtractor.egg-info/PKG-INFO
78 BabelGladeExtractor.egg-info/top_level.txt
89 babelglade/__init__.py
910 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 include babelglade/tests/test.raw.*
1 recursive-include babelglade/tests/locale *
00 Metadata-Version: 1.2
11 Name: BabelGladeExtractor
2 Version: 0.6.1
2 Version: 0.6.3
33 Summary: Babel Glade XML files translatable strings extractor
44 Home-page: https://github.com/GNOME-Keysign/babel-glade
55 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
4747 # First the original line found it in the file, then the translations.
4848 outfp.writelines((outline+'\n' for outline in ([line] + additional_lines)))
4949
50 infp.close()
51 outfp.close()
52
5053
5154 def translate_appdata_file(infile, outfile, localedir):
5255 catalogs = get_catalogs(localedir)
9396 catalogs = {}
9497
9598 for pofile in pofiles:
96 catalog = read_po(open(pofile, 'r'))
99 with open(pofile, 'r') as f:
100 catalog = read_po(f)
97101 catalogs[catalog.locale] = catalog
98102 logging.info("Found %d strings for %s", len(catalog), catalog.locale)
99103 # logging.debug("Strings for %r", catalog, catalog.values())
1717
1818 setup(
1919 name = 'BabelGladeExtractor',
20 version = '0.6.1',
20 version = '0.6.3',
2121 license = 'BSD',
2222 author = 'Pedro Algarvio',
2323 author_email = 'ufs@ufsoft.org',
3636 [distutils.commands]
3737 compile_catalog = babel.messages.frontend:compile_catalog
3838 """,
39 packages = ['babelglade']
40
39 packages = ['babelglade', 'babelglade.tests'],
40 include_package_data=True
4141 )