1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
<%!
title = "Translation Guide"
uses_toc = True
%>
<%inherit file="/page.mako" />
<%def name="preface()">
<p>
Portato supports native languages. Nevertheless the translations into these languages have to be created. This page shows how to add a new translation or how to extend an existing translation.
</p>
</%def>
<%self:h2>Short introduction about NLS in Linux</%self:h2>
<p>
All translatable strings of a program are listed in a *.pot file. For each translation a single $LANG.po file is created, which holds each translatable string and the corresponding translation. During installation these po-files are compiled into .mo files, which are then used to get the translations during runtime.
If you are wondering, what is meant by $LANG: It is a code defining a language. It normally consists of two letters as defined by <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">ISO 639-1</a>, e.g. en, de, fr... If you want to differentiate between different kinds of one language, you append a modifier: en_US, en_GB, de_DE, de_AT etc.
</p>
<%self:h2>Programs you (might) need</%self:h2>
<p>
The recommended program for the translation is <strong>app-i18n/poedit</strong>, however you may want to try out <strong>kde-base/kbabel</strong> or <strong>app-text/gtranslator</strong>. Another simple option would be to use your normal text editor :)
</p>
<p>
This guide will assume you are using poedit.
</p>
<%self:h2>Getting the sources</%self:h2>
<p>
You do need the sources to make translations, as the installed program is not sufficient. Please see <a href=${"/development" | url}>the development page</a> for how to get them and what is needed to run portato locally.
</p>
<%self:h2>Updating an incomplete translation</%self:h2>
<p>
If there is a translation for your language already, then open the $LANG.po file in portato's <em>i18n/</em> directory with poedit. Select "Update from POT file" from the "Catalog" menu, then choose the messages.pot file in the <em>i18n/</em> directory. Untranslated strings will be highlighted and placed at the top of the list. Translate them and save the file!
</p>
<%self:h2>Creating a new translation</%self:h2>
<p>
Open poedit and Select "New catalog from POT file" from the "File" menu, and choose the messages.pot file in portato's <em>i18n/</em> directory. Translate, then save the file (also in the i18n/ directory) as $LANG.po.
</p>
<%self:h2>Placeholders</%self:h2>
<p>
The translatable strings in the messages.pot catalogue and the $LANG.po files are partially in Python's string format, partially in GTK's. The following items should be included in translated strings as placeholders for names or figures:
</p>
<ul>
<li>"%s" : string placeholder</li>
<li>"%d" : number placeholder</li>
<li>"%(days)d" : placeholder named "days", do not translate the name</li>
<li>pretty much anything starting with "%"</li>
</ul>
<p>
Html-Tags (${"<b>some_text</b>" | h}) should be kept as is and only the text in between has to be changed.<br/>
In addition, the underscore (_) is used to indicate that the next character will be used as the accelerator key. When the user presses "CTRL" + this key, it will perform the item's action. These are not required, but if you use them the characters chosen must all be different.
</p>
<p>Strings like "gtk-quit", "gtk-cancel" etc. must not be translated.</p>
<%self:h2>Test your translation</%self:h2>
<p>
Before testing, run the "pocompile" script in the portato directory, which will compile all the .po files in <em>i18n/</em> into .mo files and place them in the necessary subdirectories (<em>$LANG/LC_MESSAGES</em>):
</p>
<%self:hl lang="bash">
./pocompile.sh
</%self:hl>
<p>Now you can run the local portato version in your language (the <code>-F</code> makes portato run as the current user and thus saves you having to enter your root-password over and over again):</p>
<%self:hl lang="bash">
./portato.py -F
</%self:hl>
<p>If you are not seeing your language, make sure the environment variable "LANG" is set to your language code. For example, to run portato using the German translation:</p>
<%self:hl lang="bash">
LANG="de_DE" ./portato.py -F
</%self:hl>
<%self:h2>Submit your translation</%self:h2>
<p>
The easiest way to submit your translation is to create a bug in the <a href=${"/r/bugs" | url}>bugtracker</a> or to send a mail to <a href="mailto:portato@necoro.net">portato@necoro.net</a>.
</p>
<%self:h2>I found an untranslatable string</%self:h2>
<p>
Post a bug in the <a href=${"/r/bugs" | url}>bugtracker</a>. Include the untranslatable string and where in Portato you came across it. It's easy for us to mark the strings for translation, but we may have missed some!
</p>
<%self:h2>GUIs suck - I want to use a text editor</%self:h2>
<p>
The .po files are plain text files. If you don't want to use poedit for some reason, these gettext commands might come in handy:<br/>
Update a .po file from the messages.pot file:
</p>
<%self:hl lang="bash">
msgmerge $LANG.po messages.pot > newpofile.po
</%self:hl>
<p>Create a new .po file from the messages.pot file:</p>
<%self:hl lang="bash">
msginit -i messages.pot -l $LANG
</%self:hl>
|