130 lines
5.5 KiB
Plaintext
130 lines
5.5 KiB
Plaintext
Ardour User Interface Translation How-To
|
|
|
|
Ardour's user interface can be translated into many languages. For this the
|
|
application uses gettext engine. It works like this: there is a plain text
|
|
editable PO file for every language that contains a number of sequences like: a
|
|
line in English, a line in target language and a reference to a line in source
|
|
code where original text in English comes from. The build system then creates a
|
|
binary version of each PO file with MO file extension and places it in a system
|
|
directory where running instance of Ardour will pick and use it.
|
|
|
|
Ardour has two main PO files to translate: for user interface and for Ardour's
|
|
library. Some messages from the library are actually passed to user interface
|
|
(various warnings, for example), so ideally you have to translate both. For
|
|
example, Russian translations are located here:
|
|
|
|
gtk2_ardour/po/ru.po
|
|
libs/ardour/po/ru.po
|
|
|
|
There are few supplementation translations that can be found here (again,
|
|
showing the case for Russian):
|
|
|
|
libs/gtkmm2ext/po/ru.po
|
|
gtk2_ardour/appdata/po/fr.po
|
|
|
|
Every PO file's name is a two-character code, e.g. 'de' for German, 'es' for
|
|
Spanish, and so on. However it's fairly common to have localizations for local
|
|
versions of a language, e.g. 'pt_BR' would stand for Brazilian Portuguese, and
|
|
'es_MX' would stand for Mexican Spanish. Please refer to ISO language code
|
|
table for details.
|
|
|
|
Here is the best workflow for existing translations.
|
|
|
|
1. Build Ardour using './waf' command (this step is actually optional).
|
|
|
|
2a. If there is no existing translation for your language, run './waf i18n_pot'
|
|
which will generate a POT (.pot) file for each of the directories shown
|
|
above. For each directory you plan to translate, rename the POT file to end in
|
|
.po and then continue with step 3.
|
|
|
|
2b. If there is an existing translation for your language, run './waf
|
|
i18n_po' which will bring it up to date (along with all other PO files)
|
|
|
|
3. Open the relevant PO file in you PO editor of choice (see below).
|
|
|
|
4. Open Ardour, find something untranslated, locate this phrase in PO file,
|
|
translate.
|
|
|
|
5. Repeat previous step several times, save the PO file.
|
|
|
|
6. Run './waf i18n_mo' to regenerate binary MO files and 'sudo ./waf install'
|
|
to install them.
|
|
|
|
7. Restart Ardour to see what your translation looks like and whether it needs
|
|
fixes, e.g. has to be shorter.
|
|
|
|
Note that as of Ardour 4 the translations are only installed when you run
|
|
'./waf i18n' after './waf' and before 'sudo ./waf install'.
|
|
|
|
When you are done translating, it's best to get credited for your contribution.
|
|
Here is how you can do it:
|
|
|
|
1. Run 'git commit -a' (assuming you only modified translation files) and
|
|
describe the changes you made. Typically the commit message looks like
|
|
'Update German translation'. That should be sufficient.
|
|
|
|
2. Run 'git format-patch origin/master' (assuming you worked on a clone of the
|
|
master branch. That should generate a file called something like
|
|
'0001-Update-German-translation.patch'.
|
|
|
|
3. Run 'bzip2 0001-Update-German-translation.patch' to compress the file.
|
|
|
|
4. File a new bug report at http://tracker.ardour.org and attach the resulted
|
|
compressed file and tell either rgareus (Robin Gareus) or las (Paul Davis) on
|
|
the project's IRC channel (#ardour at irc.freenode.net) about your patch.
|
|
|
|
There are some more things you need to know.
|
|
|
|
1. Where does a phrase come from?
|
|
|
|
Often when you go through translation hunting for untranslated messages, you
|
|
stumble upon things you have no idea where they come from. To assist you there
|
|
most advanced PO editors have means to tell you which source code file it comes
|
|
from, or, in some cases, even show the context in source code. Ardour has
|
|
pretty much meaningful names for source code files, so it should help. If it
|
|
doesn't, please ask on IRC for help.
|
|
|
|
2. Variables
|
|
|
|
You will often meet things like "%1" or "%2" in the translation files. This is
|
|
a variable that should be left intact. Here is an example:
|
|
|
|
"Cannot load XML for session from %1"
|
|
|
|
When Ardour runs, this "%1" will be substituted with "Ardour" so that the whole
|
|
phrase will be "Cannot load XML for session from Ardour". If Mixbus (an
|
|
commercial Ardour's spin-off) runs, this will be "Cannot load XML for session
|
|
from Mixbus" instead. You get the idea. So just place this variable in your
|
|
translation in a way that makes the phrase sound natural in your language and
|
|
make sure you know where the phrase comes from (see above) so that you know how
|
|
to translate it correctly.
|
|
|
|
3. Plural forms
|
|
|
|
English has two plural forms, but many other languages have three and even four
|
|
plural forms. Some parts of Ardour's code respect that, but some not (check for
|
|
existing bug reports). A PO editor usually simplifies translating every plural
|
|
form by putting every plural form into a dedicated tab.
|
|
|
|
Not every PO editor can calculate the equation for the plural forms in your
|
|
language, but you can look it up in headers of PO files from some application
|
|
such a GIMP or Inkscape. Here is an example for Russian:
|
|
|
|
http://git.gnome.org/browse/gimp/plain/po/ru.po
|
|
|
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
|
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 10<=4 && (n%100<10 || n"
|
|
"%100>=20) ? 1 : 2);\n"
|
|
|
|
4. PO editors
|
|
|
|
It's really up to you which PO editor you choose. These ones are most popular:
|
|
|
|
poEdit. It works on Linux, Mac and Windows. The user interface is fairly simple.
|
|
|
|
Lokalize. Part of KDE desktop environment. It's a fairly advanced translation tool.
|
|
|
|
GTranslator. Usually considered as GNOME translation tool, but has very few
|
|
actual GNOME dependencies. Feature-wise it's somewhere between poEdit and
|
|
Lokalize.
|