A4

Merge lp:~francesco-marella/a4/i18n into lp:a4

Proposed by Francesco Marella
Status: Merged
Merged at revision: 113
Proposed branch: lp:~francesco-marella/a4/i18n
Merge into: lp:a4
Diff against target: 389 lines (+216/-17)
8 files modified
a4lib/app.py (+10/-6)
a4lib/i18n.py (+29/-0)
data/a4.desktop.in (+3/-2)
data/window_main.glade (+9/-9)
po/LINGUAS (+1/-0)
po/POTFILES.in (+14/-0)
po/POTFILES.skip (+3/-0)
po/a4.pot (+147/-0)
To merge this branch: bzr merge lp:~francesco-marella/a4/i18n
Reviewer Review Type Date Requested Status
Andrea Gasparini Approve
Review via email: mp+50412@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Andrea Gasparini (gaspa) wrote :

The old functionalities are ok, and strings are correct. Unfortunately I don't know enough the translation engine to make further tests, but to me the code is ok.

Just one remark (and a note for the merger), we usually try to keep the code clean with some tools.
A brief test with pep8 gives:
a4lib/i18n.py:12:1: E302 expected 2 blank lines, found 1
(It's just one blank line, I guess the one of us that will merge can correct this as well)

review: Approve
lp:~francesco-marella/a4/i18n updated
109. By Francesco Marella

Add support for i18n

Revision history for this message
Francesco Marella (francesco-marella) wrote :

>
> The old functionalities are ok, and strings are correct. Unfortunately I don't
> know enough the translation engine to make further tests, but to me the code
> is ok.
>
> Just one remark (and a note for the merger), we usually try to keep the code
> clean with some tools.
> A brief test with pep8 gives:
> a4lib/i18n.py:12:1: E302 expected 2 blank lines, found 1
> (It's just one blank line, I guess the one of us that will merge can correct
> this as well)
Fixed, thanks.

lp:~francesco-marella/a4/i18n updated
110. By Francesco Marella

i18n: when running from source, fetch the mo files from the build dir

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'a4lib/app.py'
--- a4lib/app.py 2010-12-30 20:30:01 +0000
+++ a4lib/app.py 2011-02-24 16:56:48 +0000
@@ -13,6 +13,7 @@
13from a4lib.presentation import PresentationError, NoMetadataError13from a4lib.presentation import PresentationError, NoMetadataError
14from a4lib.player import GtkCairoPlayer14from a4lib.player import GtkCairoPlayer
15from a4lib.editor import Editor15from a4lib.editor import Editor
16import a4lib.i18n
1617
17UI_PATHS = ('data', '/usr/local/share/a4/data', '/usr/share/a4/data')18UI_PATHS = ('data', '/usr/local/share/a4/data', '/usr/share/a4/data')
1819
@@ -22,6 +23,7 @@
2223
23 def __init__(self):24 def __init__(self):
24 self.builder = gtk.Builder()25 self.builder = gtk.Builder()
26 self.builder.set_translation_domain("a4")
25 for path in UI_PATHS:27 for path in UI_PATHS:
26 file_name = os.path.join(path, 'window_main.glade')28 file_name = os.path.join(path, 'window_main.glade')
27 try:29 try:
@@ -81,7 +83,7 @@
81 dialog.destroy()83 dialog.destroy()
82 except NoMetadataError as error:84 except NoMetadataError as error:
83 msg = 'No A4 data found into file,\nwould you like to convert this file into an A4 presentation?'85 msg = 'No A4 data found into file,\nwould you like to convert this file into an A4 presentation?'
84 dialog = gtk.Dialog('Import', self.gtk_window,86 dialog = gtk.Dialog(_("Import"), self.gtk_window,
85 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,87 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
86 (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,88 (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
87 gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))89 gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
@@ -142,7 +144,7 @@
142 """Event called when the 'Open' button is clicked."""144 """Event called when the 'Open' button is clicked."""
143 # Set up the file chooser dialog.145 # Set up the file chooser dialog.
144 dialog = gtk.FileChooserDialog(146 dialog = gtk.FileChooserDialog(
145 None, None, gtk.FILE_CHOOSER_ACTION_OPEN, (147 _("Open a presentation"), None, gtk.FILE_CHOOSER_ACTION_OPEN, (
146 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,148 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
147 gtk.STOCK_OPEN, gtk.RESPONSE_OK))149 gtk.STOCK_OPEN, gtk.RESPONSE_OK))
148 dialog.set_default_response(gtk.RESPONSE_OK)150 dialog.set_default_response(gtk.RESPONSE_OK)
@@ -166,7 +168,7 @@
166168
167 def on_save_as_clicked(self, widget):169 def on_save_as_clicked(self, widget):
168 dialog = gtk.FileChooserDialog(170 dialog = gtk.FileChooserDialog(
169 None, None, gtk.FILE_CHOOSER_ACTION_SAVE, (171 _("Save presentation as..."), None, gtk.FILE_CHOOSER_ACTION_SAVE, (
170 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,172 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
171 gtk.STOCK_SAVE, gtk.RESPONSE_OK))173 gtk.STOCK_SAVE, gtk.RESPONSE_OK))
172 dialog.set_default_response(gtk.RESPONSE_OK)174 dialog.set_default_response(gtk.RESPONSE_OK)
@@ -342,15 +344,17 @@
342 dialog = gtk.AboutDialog()344 dialog = gtk.AboutDialog()
343 dialog.set_name('A4')345 dialog.set_name('A4')
344 dialog.set_version(__version__)346 dialog.set_version(__version__)
345 dialog.set_comments('A stylish tool to create and view cute presentations.')347 dialog.set_comments(_('A stylish tool to create and view cute presentations.'))
346 dialog.set_website('http://launchpad.net/a4')348 dialog.set_website('http://launchpad.net/a4')
347 dialog.set_website_label('A4 website')349 dialog.set_website_label(_("A4 website"))
348 dialog.set_copyright('Copyright (C) 2010 A4 Developers')350 dialog.set_copyright('Copyright (C) 2010 A4 Developers')
349 #dialog.set_logo("LOGO_GOES_HERE")351 #dialog.set_logo("LOGO_GOES_HERE")
350 #dialog.set_icon_from_file("ICON_GOES_HERE")352 #dialog.set_icon_from_file("ICON_GOES_HERE")
351 #code to automagically fetch authors and license should be used here353 #code to automagically fetch authors and license should be used here
352 dialog.set_authors(['A4 Developers'])354 dialog.set_authors(['A4 Developers'])
353 dialog.set_license('A4 is released under the terms of GNU GPL, version 3.')355 dialog.set_license(_("A4 is released under the terms of GNU GPL, version 3."))
356 #name surname email of the translator(s)
357 dialog.set_translator_credits(_("translator-credits"))
354 dialog.run()358 dialog.run()
355 dialog.destroy()359 dialog.destroy()
356360
357361
=== added file 'a4lib/i18n.py'
--- a4lib/i18n.py 1970-01-01 00:00:00 +0000
+++ a4lib/i18n.py 2011-02-24 16:56:48 +0000
@@ -0,0 +1,29 @@
1# -*- coding: utf-8 -*-
2
3# Copyright 2010 A4 Developers. This software is licensed under the
4# GNU General Public License version 3 (see the file COPYING).
5
6import os
7import gettext
8import locale
9
10MESSAGES_DIR = "build/mo"
11if not (os.path.isdir(MESSAGES_DIR) and os.path.exists(MESSAGES_DIR)):
12 MESSAGES_DIR = "/usr/share/locale"
13
14
15def setup_locale_and_gettext():
16 package_name = 'a4'
17 # Install _() builtin for gettext; always returning unicode objects
18 # also install ngettext()
19 gettext.install(package_name, localedir=MESSAGES_DIR, unicode=True,
20 names=("ngettext",))
21 locale.bindtextdomain(package_name, MESSAGES_DIR)
22 locale.bind_textdomain_codeset(package_name, "UTF-8")
23
24 try:
25 locale.setlocale(locale.LC_ALL, "")
26 except locale.Error, e:
27 pass
28
29setup_locale_and_gettext()
030
=== renamed file 'data/a4.desktop' => 'data/a4.desktop.in'
--- data/a4.desktop 2010-08-02 13:02:07 +0000
+++ data/a4.desktop.in 2011-02-24 16:56:48 +0000
@@ -1,9 +1,10 @@
1[Desktop Entry]1[Desktop Entry]
2Type=Application2Type=Application
3Version=1.03Version=1.0
4Name=A44_Name=A4
5Comment=A stylish tool to create and view cool presentations5_Comment=A stylish tool to create and view cool presentations
6Icon=a46Icon=a4
7Exec=a47Exec=a4
8Terminal=false8Terminal=false
9Categories=Office;Presentation;9Categories=Office;Presentation;
10StartupNotify=true
1011
=== modified file 'data/window_main.glade'
--- data/window_main.glade 2011-01-18 17:57:15 +0000
+++ data/window_main.glade 2011-02-24 16:56:48 +0000
@@ -135,7 +135,7 @@
135 <child>135 <child>
136 <object class="GtkToolButton" id="toolbutton_open">136 <object class="GtkToolButton" id="toolbutton_open">
137 <property name="visible">True</property>137 <property name="visible">True</property>
138 <property name="tooltip_markup">Open presentation</property>138 <property name="tooltip_text" translatable="yes">Open presentation</property>
139 <property name="use_underline">True</property>139 <property name="use_underline">True</property>
140 <property name="stock_id">gtk-open</property>140 <property name="stock_id">gtk-open</property>
141 <signal name="clicked" handler="on_open_clicked"/>141 <signal name="clicked" handler="on_open_clicked"/>
@@ -148,7 +148,7 @@
148 <child>148 <child>
149 <object class="GtkToolButton" id="toolbutton_save">149 <object class="GtkToolButton" id="toolbutton_save">
150 <property name="visible">True</property>150 <property name="visible">True</property>
151 <property name="tooltip_markup">Save presentation</property>151 <property name="tooltip_text" translatable="yes">Save presentation</property>
152 <property name="use_underline">True</property>152 <property name="use_underline">True</property>
153 <property name="stock_id">gtk-save</property>153 <property name="stock_id">gtk-save</property>
154 <signal name="clicked" handler="on_save_clicked"/>154 <signal name="clicked" handler="on_save_clicked"/>
@@ -161,7 +161,7 @@
161 <child>161 <child>
162 <object class="GtkToolButton" id="toolbutton_close">162 <object class="GtkToolButton" id="toolbutton_close">
163 <property name="visible">True</property>163 <property name="visible">True</property>
164 <property name="tooltip_markup">Close presentation</property>164 <property name="tooltip_text" translatable="yes">Close presentation</property>
165 <property name="use_underline">True</property>165 <property name="use_underline">True</property>
166 <property name="stock_id">gtk-close</property>166 <property name="stock_id">gtk-close</property>
167 <signal name="clicked" handler="on_close_clicked"/>167 <signal name="clicked" handler="on_close_clicked"/>
@@ -183,7 +183,7 @@
183 <child>183 <child>
184 <object class="GtkToolButton" id="toolbutton_previous">184 <object class="GtkToolButton" id="toolbutton_previous">
185 <property name="visible">True</property>185 <property name="visible">True</property>
186 <property name="tooltip_markup">Previous view</property>186 <property name="tooltip_text" translatable="yes">Previous view</property>
187 <property name="use_underline">True</property>187 <property name="use_underline">True</property>
188 <property name="stock_id">gtk-go-back</property>188 <property name="stock_id">gtk-go-back</property>
189 <signal name="clicked" handler="on_previous_clicked"/>189 <signal name="clicked" handler="on_previous_clicked"/>
@@ -196,7 +196,7 @@
196 <child>196 <child>
197 <object class="GtkToolButton" id="toolbutton_next">197 <object class="GtkToolButton" id="toolbutton_next">
198 <property name="visible">True</property>198 <property name="visible">True</property>
199 <property name="tooltip_markup">Next view</property>199 <property name="tooltip_text" translatable="yes">Next view</property>
200 <property name="use_underline">True</property>200 <property name="use_underline">True</property>
201 <property name="stock_id">gtk-go-forward</property>201 <property name="stock_id">gtk-go-forward</property>
202 <signal name="clicked" handler="on_next_clicked"/>202 <signal name="clicked" handler="on_next_clicked"/>
@@ -218,7 +218,7 @@
218 <child>218 <child>
219 <object class="GtkToolButton" id="toolbutton_zoom_in">219 <object class="GtkToolButton" id="toolbutton_zoom_in">
220 <property name="visible">True</property>220 <property name="visible">True</property>
221 <property name="tooltip_markup">Zoom in</property>221 <property name="tooltip_text" translatable="yes">Zoom in</property>
222 <property name="use_underline">True</property>222 <property name="use_underline">True</property>
223 <property name="stock_id">gtk-zoom-in</property>223 <property name="stock_id">gtk-zoom-in</property>
224 <signal name="clicked" handler="on_zoom_in_clicked"/>224 <signal name="clicked" handler="on_zoom_in_clicked"/>
@@ -231,7 +231,7 @@
231 <child>231 <child>
232 <object class="GtkToolButton" id="toolbutton_zoom_out">232 <object class="GtkToolButton" id="toolbutton_zoom_out">
233 <property name="visible">True</property>233 <property name="visible">True</property>
234 <property name="tooltip_markup">Zoom out</property>234 <property name="tooltip_text" translatable="yes">Zoom out</property>
235 <property name="use_underline">True</property>235 <property name="use_underline">True</property>
236 <property name="stock_id">gtk-zoom-out</property>236 <property name="stock_id">gtk-zoom-out</property>
237 <signal name="clicked" handler="on_zoom_out_clicked"/>237 <signal name="clicked" handler="on_zoom_out_clicked"/>
@@ -244,7 +244,7 @@
244 <child>244 <child>
245 <object class="GtkToolButton" id="toolbutton_fullscreen">245 <object class="GtkToolButton" id="toolbutton_fullscreen">
246 <property name="visible">True</property>246 <property name="visible">True</property>
247 <property name="tooltip_markup">Fullscreen</property>247 <property name="tooltip_text" translatable="yes">Fullscreen</property>
248 <property name="use_underline">True</property>248 <property name="use_underline">True</property>
249 <property name="stock_id">gtk-fullscreen</property>249 <property name="stock_id">gtk-fullscreen</property>
250 <signal name="clicked" handler="on_fullscreen_activate"/>250 <signal name="clicked" handler="on_fullscreen_activate"/>
@@ -285,7 +285,7 @@
285 <child>285 <child>
286 <object class="GtkToggleToolButton" id="toolbutton_editor">286 <object class="GtkToggleToolButton" id="toolbutton_editor">
287 <property name="visible">True</property>287 <property name="visible">True</property>
288 <property name="tooltip_markup">Editor</property>288 <property name="tooltip_text" translatable="yes">Editor</property>
289 <property name="use_underline">True</property>289 <property name="use_underline">True</property>
290 <property name="stock_id">gtk-edit</property>290 <property name="stock_id">gtk-edit</property>
291 <signal name="clicked" handler="on_editor_clicked"/>291 <signal name="clicked" handler="on_editor_clicked"/>
292292
=== added directory 'po'
=== added file 'po/LINGUAS'
--- po/LINGUAS 1970-01-01 00:00:00 +0000
+++ po/LINGUAS 2011-02-24 16:56:48 +0000
@@ -0,0 +1,1 @@
1# Set of available languages. Keep it alphabatical. One lingua per line.
02
=== added file 'po/POTFILES.in'
--- po/POTFILES.in 1970-01-01 00:00:00 +0000
+++ po/POTFILES.in 2011-02-24 16:56:48 +0000
@@ -0,0 +1,14 @@
1# encoding: UTF-8
2
3# order: data files, modules, others
4
5data/a4.desktop.in
6
7[type: gettext/glade] data/window_main.glade
8
9a4lib/app.py
10a4lib/editor.py
11a4lib/player.py
12a4lib/presentation_objects.py
13a4lib/presentation.py
14a4lib/region.py
015
=== added file 'po/POTFILES.skip'
--- po/POTFILES.skip 1970-01-01 00:00:00 +0000
+++ po/POTFILES.skip 2011-02-24 16:56:48 +0000
@@ -0,0 +1,3 @@
1# files to skip
2
3a4lib/__init__.py
04
=== added file 'po/a4.pot'
--- po/a4.pot 1970-01-01 00:00:00 +0000
+++ po/a4.pot 2011-02-24 16:56:48 +0000
@@ -0,0 +1,147 @@
1# SOME DESCRIPTIVE TITLE.
2# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3# This file is distributed under the same license as the PACKAGE package.
4# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5#
6#, fuzzy
7msgid ""
8msgstr ""
9"Project-Id-Version: PACKAGE VERSION\n"
10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2011-01-26 17:23+0100\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"
15"Language: \n"
16"MIME-Version: 1.0\n"
17"Content-Type: text/plain; charset=CHARSET\n"
18"Content-Transfer-Encoding: 8bit\n"
19
20#: ../data/a4.desktop.in.h:1
21msgid "A stylish tool to create and view cool presentations"
22msgstr ""
23
24#: ../data/a4.desktop.in.h:2 ../data/window_main.glade.h:1
25msgid "A4"
26msgstr ""
27
28#: ../data/window_main.glade.h:2
29msgid "Close presentation"
30msgstr ""
31
32#: ../data/window_main.glade.h:3
33msgid "Editor"
34msgstr ""
35
36#: ../data/window_main.glade.h:4
37msgid "Frames"
38msgstr ""
39
40#: ../data/window_main.glade.h:5
41msgid "Fullscreen"
42msgstr ""
43
44#: ../data/window_main.glade.h:6
45msgid "Hidden Frame"
46msgstr ""
47
48#: ../data/window_main.glade.h:7
49msgid "Image"
50msgstr ""
51
52#: ../data/window_main.glade.h:8
53msgid "Next view"
54msgstr ""
55
56#: ../data/window_main.glade.h:9
57msgid "Normal frame"
58msgstr ""
59
60#: ../data/window_main.glade.h:10
61msgid "Notes"
62msgstr ""
63
64#: ../data/window_main.glade.h:11
65msgid "Open presentation"
66msgstr ""
67
68#: ../data/window_main.glade.h:12
69msgid "Path"
70msgstr ""
71
72#: ../data/window_main.glade.h:13
73msgid "Polaroid"
74msgstr ""
75
76#: ../data/window_main.glade.h:14
77msgid "Previous view"
78msgstr ""
79
80#: ../data/window_main.glade.h:15
81msgid "Rect"
82msgstr ""
83
84#: ../data/window_main.glade.h:16
85msgid "Save presentation"
86msgstr ""
87
88#: ../data/window_main.glade.h:17
89msgid "Selector"
90msgstr ""
91
92#: ../data/window_main.glade.h:18
93msgid "Shapes"
94msgstr ""
95
96#: ../data/window_main.glade.h:19
97msgid "Text"
98msgstr ""
99
100#: ../data/window_main.glade.h:20
101msgid "Zoom in"
102msgstr ""
103
104#: ../data/window_main.glade.h:21
105msgid "Zoom out"
106msgstr ""
107
108#: ../data/window_main.glade.h:22
109msgid "_File"
110msgstr ""
111
112#: ../data/window_main.glade.h:23
113msgid "_Help"
114msgstr ""
115
116#: ../data/window_main.glade.h:24
117msgid "_View"
118msgstr ""
119
120#: ../a4lib/app.py:86
121msgid "Import"
122msgstr ""
123
124#: ../a4lib/app.py:147
125msgid "Open a presentation"
126msgstr ""
127
128#: ../a4lib/app.py:171
129msgid "Save presentation as..."
130msgstr ""
131
132#: ../a4lib/app.py:347
133msgid "A stylish tool to create and view cute presentations."
134msgstr ""
135
136#: ../a4lib/app.py:349
137msgid "A4 website"
138msgstr ""
139
140#: ../a4lib/app.py:355
141msgid "A4 is released under the terms of GNU GPL, version 3."
142msgstr ""
143
144#. name surname email of the translator(s)
145#: ../a4lib/app.py:357
146msgid "translator-credits"
147msgstr ""

Subscribers

People subscribed via source and target branches