1
Notes on the Free Translation Project
2
*************************************
4
Free software is going international! The Free Translation Project is
5
a way to get maintainers of free software, translators, and users all
6
together, so that will gradually become able to speak many languages.
7
A few packages already provide translations for their messages.
9
If you found this `ABOUT-NLS' file inside a distribution, you may
10
assume that the distributed package does use GNU `gettext' internally,
11
itself available at your nearest GNU archive site. But you do _not_
12
need to install GNU `gettext' prior to configuring, installing or using
13
this package with messages translated.
15
Installers will find here some useful hints. These notes also
16
explain how users should proceed for getting the programs to use the
17
available translations. They tell how people wanting to contribute and
18
work at translations should contact the appropriate team.
20
When reporting bugs in the `intl/' directory or bugs which may be
21
related to internationalization, you should tell about the version of
22
`gettext' which is used. The information can be found in the
23
`intl/VERSION' file, in internationalized packages.
25
Quick configuration advice
26
==========================
28
If you want to exploit the full power of internationalization, you
29
should configure it using
31
./configure --with-included-gettext
33
to force usage of internationalizing routines provided within this
34
package, despite the existence of internationalizing capabilities in the
35
operating system where this package is being installed. So far, only
36
the `gettext' implementation in the GNU C library version 2 provides as
37
many features (such as locale alias, message inheritance, automatic
38
charset conversion or plural form handling) as the implementation here.
39
It is also not possible to offer this additional functionality on top
40
of a `catgets' implementation. Future versions of GNU `gettext' will
41
very likely convey even more functionality. So it might be a good idea
42
to change to GNU `gettext' as soon as possible.
44
So you need _not_ provide this option if you are using GNU libc 2 or
45
you have installed a recent copy of the GNU gettext package with the
51
Some packages are "localizable" when properly installed; the programs
52
they contain can be made to speak your own native language. Most such
53
packages use GNU `gettext'. Other packages have their own ways to
54
internationalization, predating GNU `gettext'.
56
By default, this package will be installed to allow translation of
57
messages. It will automatically detect whether the system already
58
provides the GNU `gettext' functions. If not, the GNU `gettext' own
59
library will be used. This library is wholly contained within this
60
package, usually in the `intl/' subdirectory, so prior installation of
61
the GNU `gettext' package is _not_ required. Installers may use
62
special options at configuration time for changing the default
63
behaviour. The commands:
65
./configure --with-included-gettext
66
./configure --disable-nls
68
will respectively bypass any pre-existing `gettext' to use the
69
internationalizing routines provided within this package, or else,
70
_totally_ disable translation of messages.
72
When you already have GNU `gettext' installed on your system and run
73
configure without an option for your new package, `configure' will
74
probably detect the previously built and installed `libintl.a' file and
75
will decide to use this. This might be not what is desirable. You
76
should use the more recent version of the GNU `gettext' library. I.e.
77
if the file `intl/VERSION' shows that the library which comes with this
78
package is more recent, you should use
80
./configure --with-included-gettext
82
to prevent auto-detection.
84
The configuration process will not test for the `catgets' function
85
and therefore it will not be used. The reason is that even an
86
emulation of `gettext' on top of `catgets' could not provide all the
87
extensions of the GNU `gettext' library.
89
Internationalized packages have usually many `po/LL.po' files, where
90
LL gives an ISO 639 two-letter code identifying the language. Unless
91
translations have been forbidden at `configure' time by using the
92
`--disable-nls' switch, all available translations are installed
93
together with the package. However, the environment variable `LINGUAS'
94
may be set, prior to configuration, to limit the installed set.
95
`LINGUAS' should then contain a space separated list of two-letter
96
codes, stating which languages are allowed.
101
As a user, if your language has been installed for this package, you
102
only have to set the `LANG' environment variable to the appropriate
103
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
104
and `CC' is an ISO 3166 two-letter country code. For example, let's
105
suppose that you speak German and live in Germany. At the shell
106
prompt, merely execute `setenv LANG de_DE' (in `csh'),
107
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
108
This can be done from your `.login' or `.profile' file, once and for
111
You might think that the country code specification is redundant.
112
But in fact, some languages have dialects in different countries. For
113
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
114
country code serves to distinguish the dialects.
116
The locale naming convention of `LL_CC', with `LL' denoting the
117
language and `CC' denoting the country, is the one use on systems based
118
on GNU libc. On other systems, some variations of this scheme are
119
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
120
locales supported by your system for your country by running the command
121
`locale -a | grep '^LL''.
123
Not all programs have translations for all languages. By default, an
124
English message is shown in place of a nonexistent translation. If you
125
understand other languages, you can set up a priority list of languages.
126
This is done through a different environment variable, called
127
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
128
for the purpose of message handling, but you still need to have `LANG'
129
set to the primary language; this is required by other parts of the
130
system libraries. For example, some Swedish users who would rather
131
read translations in German than English for when Swedish is not
132
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
134
Special advice for Norwegian users: The language code for Norwegian
135
bokma*l changed from `no' to `nb' recently (in 2003). During the
136
transition period, while some message catalogs for this language are
137
installed under `nb' and some older ones under `no', it's recommended
138
for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
139
older translations are used.
141
In the `LANGUAGE' environment variable, but not in the `LANG'
142
environment variable, `LL_CC' combinations can be abbreviated as `LL'
143
to denote the language's main dialect. For example, `de' is equivalent
144
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
145
(Portuguese as spoken in Portugal) in this context.
150
For the Free Translation Project to be a success, we need interested
151
people who like their own language and write it well, and who are also
152
able to synergize with other translators speaking the same language.
153
Each translation team has its own mailing list. The up-to-date list of
154
teams can be found at the Free Translation Project's homepage,
155
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
158
If you'd like to volunteer to _work_ at translating messages, you
159
should become a member of the translating team for your own language.
160
The subscribing address is _not_ the same as the list itself, it has
161
`-request' appended. For example, speakers of Swedish can send a
162
message to `sv-request@li.org', having this message body:
166
Keep in mind that team members are expected to participate
167
_actively_ in translations, or at solving translational difficulties,
168
rather than merely lurking around. If your team does not exist yet and
169
you want to start one, or if you are unsure about what to do or how to
170
get started, please write to `translation@iro.umontreal.ca' to reach the
171
coordinator for all translator teams.
173
The English team is special. It works at improving and uniformizing
174
the terminology in use. Proven linguistic skill are praised more than
175
programming skill, here.
180
Languages are not equally supported in all packages. The following
181
matrix shows the current state of internationalization, as of January
182
2004. The matrix shows, in regard of each package, for which languages
183
PO files have been submitted to translation coordination, with a
184
translation percentage of at least 50%.
186
Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es
187
+----------------------------------------------------+
199
bluez-pin | [] [] [] |
202
console-tools | [] [] |
203
coreutils | [] [] [] [] |
205
darkstat | [] () [] |
206
diffutils | [] [] [] [] [] [] [] |
207
e2fsprogs | [] [] [] |
208
enscript | [] [] [] [] |
209
error | [] [] [] [] [] |
210
fetchmail | [] () [] [] [] [] |
211
fileutils | [] [] [] |
212
findutils | [] [] [] [] [] [] [] |
220
gettext | [] [] [] [] [] |
221
gettext-examples | [] [] [] [] |
222
gettext-runtime | [] [] [] [] [] |
223
gettext-tools | [] [] [] |
224
gimp-print | [] [] [] [] [] |
226
glunarclock | [] [] |
228
gnucash | [] () [] [] |
229
gnucash-glossary | [] () [] |
230
gnupg | [] () [] [] [] [] |
233
gpe-calendar | [] [] |
236
gpe-contacts | [] [] |
240
gpe-ownerinfo | [] [] |
241
gpe-sketchbook | [] [] |
243
gpe-taskmanager | [] [] |
247
gphoto2 | [] [] [] [] |
249
gpsdrive | () () () |
251
grep | [] [] [] [] [] [] |
254
hello | [] [] [] [] [] [] |
256
indent | [] [] [] [] |
257
iso_3166 | [] [] [] [] [] [] [] [] [] [] |
258
iso_3166_1 | [] [] [] [] [] [] |
261
iso_4217 | [] [] [] [] |
266
kbd | [] [] [] [] [] |
269
libc | [] [] [] [] [] [] |
270
libgpewidget | [] [] |
271
libiconv | [] [] [] [] [] |
275
lingoteach_lessons | () () |
280
man-db | [] () [] [] () |
282
mysecretdiary | [] [] [] |
283
nano | [] () [] [] [] |
284
nano_1_0 | [] () [] [] [] |
286
parted | [] [] [] [] [] |
287
ptx | [] [] [] [] [] |
290
recode | [] [] [] [] [] [] [] |
293
scrollkeeper | [] [] [] [] [] [] |
294
sed | [] [] [] [] [] [] |
295
sh-utils | [] [] [] |
297
sharutils | [] [] [] [] [] [] |
301
soundtracker | [] [] [] |
305
textutils | [] [] [] [] |
308
tuxpaint | [] [] [] [] [] [] [] |
309
unicode-han-tra... | |
310
unicode-transla... | |
311
util-linux | [] [] [] [] [] |
312
vorbis-tools | [] [] [] [] |
314
wdiff | [] [] [] [] |
315
wget | [] [] [] [] [] [] |
316
xchat | [] [] [] [] |
317
xfree86_xkb_xml | [] [] |
319
+----------------------------------------------------+
320
af am ar az be bg bs ca cs da de el en en_GB eo es
321
4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68
323
et eu fa fi fr ga gl he hr hu id is it ja ko lg
324
+-------------------------------------------------+
325
a2ps | [] [] [] () () |
335
bison | [] [] [] [] |
336
bluez-pin | [] [] [] [] [] |
340
coreutils | [] [] [] [] [] [] |
342
darkstat | () [] [] [] |
343
diffutils | [] [] [] [] [] [] [] |
346
error | [] [] [] [] |
348
fileutils | [] [] [] [] [] [] |
349
findutils | [] [] [] [] [] [] [] [] [] [] [] |
358
gettext-examples | [] [] |
359
gettext-runtime | [] [] [] [] [] |
360
gettext-tools | [] [] [] |
363
glunarclock | [] [] [] [] |
366
gnucash-glossary | [] |
367
gnupg | [] [] [] [] [] [] [] |
370
gpe-calendar | [] [] [] |
373
gpe-contacts | [] [] |
377
gpe-ownerinfo | [] [] [] |
378
gpe-sketchbook | [] |
380
gpe-taskmanager | [] |
381
gpe-timesheet | [] [] [] |
386
gpsdrive | () () () |
388
grep | [] [] [] [] [] [] [] [] [] [] [] |
391
hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
392
id-utils | [] [] [] [] |
393
indent | [] [] [] [] [] [] [] [] [] |
394
iso_3166 | [] [] [] [] [] [] [] |
395
iso_3166_1 | [] [] [] [] [] |
398
iso_4217 | [] [] [] [] [] [] |
402
jwhois | [] [] [] [] |
406
libc | [] [] [] [] [] [] |
407
libgpewidget | [] [] [] [] |
408
libiconv | [] [] [] [] [] [] [] [] [] |
412
lingoteach_lessons | |
416
make | [] [] [] [] [] [] |
418
minicom | [] [] [] [] |
419
mysecretdiary | [] [] |
421
nano_1_0 | [] [] [] [] |
424
ptx | [] [] [] [] [] [] [] |
427
recode | [] [] [] [] [] [] |
431
sed | [] [] [] [] [] [] [] [] [] |
432
sh-utils | [] [] [] [] [] [] [] |
433
shared-mime-info | [] [] [] |
434
sharutils | [] [] [] [] [] |
435
silky | () [] () () |
438
soundtracker | [] [] |
440
tar | [] [] [] [] [] [] [] [] [] |
441
texinfo | [] [] [] [] |
442
textutils | [] [] [] [] [] [] |
445
tuxpaint | [] [] [] [] [] [] [] [] [] |
446
unicode-han-tra... | |
447
unicode-transla... | [] [] |
448
util-linux | [] [] [] [] () [] |
451
wdiff | [] [] [] [] [] [] |
452
wget | [] [] [] [] [] [] [] |
454
xfree86_xkb_xml | [] [] |
456
+-------------------------------------------------+
457
et eu fa fi fr ga gl he hr hu id is it ja ko lg
458
22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0
460
lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
461
+-----------------------------------------------------+
462
a2ps | [] [] () () [] [] [] |
465
anubis | [] [] [] [] [] [] |
466
ap-utils | [] () [] |
472
bison | [] [] [] [] [] |
473
bluez-pin | [] [] [] |
478
cpio | [] [] [] [] [] |
479
darkstat | [] [] [] [] |
480
diffutils | [] [] [] [] [] [] |
482
enscript | [] [] [] [] |
484
fetchmail | [] [] () [] |
485
fileutils | [] [] [] |
486
findutils | [] [] [] [] [] |
495
gettext-examples | [] [] [] |
496
gettext-runtime | [] [] [] [] |
497
gettext-tools | [] [] |
500
glunarclock | [] [] [] [] |
502
gnucash | [] [] () [] |
503
gnucash-glossary | [] [] |
505
gpe-aerial | [] [] [] [] |
506
gpe-beam | [] [] [] [] |
507
gpe-calendar | [] [] [] [] |
508
gpe-clock | [] [] [] [] |
509
gpe-conf | [] [] [] [] |
510
gpe-contacts | [] [] [] [] |
511
gpe-edit | [] [] [] [] |
513
gpe-login | [] [] [] [] |
514
gpe-ownerinfo | [] [] [] [] |
515
gpe-sketchbook | [] [] [] [] |
516
gpe-su | [] [] [] [] |
517
gpe-taskmanager | [] [] [] [] |
518
gpe-timesheet | [] [] [] [] |
519
gpe-today | [] [] [] [] |
520
gpe-todo | [] [] [] [] |
523
gpsdrive | () () [] |
525
grep | [] [] [] [] [] |
528
hello | [] [] [] [] [] [] [] [] [] [] |
529
id-utils | [] [] [] [] |
530
indent | [] [] [] [] |
531
iso_3166 | [] [] [] |
535
iso_4217 | [] [] [] [] [] [] [] [] |
539
jwhois | [] [] [] [] () |
544
libgpewidget | [] [] [] |
545
libiconv | [] [] [] [] [] |
549
lingoteach_lessons | |
551
m4 | [] [] [] [] [] |
552
mailutils | [] [] [] |
555
minicom | [] [] [] [] |
556
mysecretdiary | [] [] [] |
557
nano | [] [] [] [] [] |
558
nano_1_0 | [] [] [] [] [] [] |
560
parted | [] [] [] [] |
561
ptx | [] [] [] [] [] [] [] [] |
564
recode | [] [] [] [] |
567
scrollkeeper | [] [] [] [] [] |
570
shared-mime-info | [] [] |
577
tar | [] [] [] [] [] [] |
578
texinfo | [] [] [] [] |
582
tuxpaint | [] [] [] [] [] [] [] [] |
583
unicode-han-tra... | |
584
unicode-transla... | |
585
util-linux | [] [] [] |
586
vorbis-tools | [] [] [] |
588
wdiff | [] [] [] [] [] |
591
xfree86_xkb_xml | [] [] |
593
+-----------------------------------------------------+
594
lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru
595
1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63
597
sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
598
+-----------------------------------------------------+
599
a2ps | [] [] [] [] | 16
608
binutils | [] [] [] | 8
610
bluez-pin | [] [] [] | 14
614
coreutils | [] [] [] [] | 16
616
darkstat | [] [] [] () () | 12
617
diffutils | [] [] [] | 23
618
e2fsprogs | [] [] | 6
619
enscript | [] [] | 12
620
error | [] [] [] | 15
621
fetchmail | [] [] | 11
622
fileutils | [] [] [] [] [] | 17
623
findutils | [] [] [] [] [] [] | 29
631
gettext | [] [] [] [] [] | 16
632
gettext-examples | [] [] [] [] [] | 14
633
gettext-runtime | [] [] [] [] [] [] [] [] | 22
634
gettext-tools | [] [] [] [] [] [] | 14
635
gimp-print | [] [] | 10
637
glunarclock | [] [] [] | 13
640
gnucash-glossary | [] [] [] | 8
641
gnupg | [] [] [] [] | 17
644
gpe-calendar | [] [] [] [] | 13
645
gpe-clock | [] [] [] | 10
647
gpe-contacts | [] [] [] | 11
648
gpe-edit | [] [] [] [] [] | 12
650
gpe-login | [] [] [] [] [] | 13
651
gpe-ownerinfo | [] [] [] [] | 13
652
gpe-sketchbook | [] [] | 9
653
gpe-su | [] [] [] | 10
654
gpe-taskmanager | [] [] [] | 10
655
gpe-timesheet | [] [] [] [] | 12
656
gpe-today | [] [] [] [] [] | 13
657
gpe-todo | [] [] [] [] | 12
658
gphoto2 | [] [] [] | 11
662
grep | [] [] [] [] | 26
665
hello | [] [] [] [] [] | 34
666
id-utils | [] [] | 12
667
indent | [] [] [] [] | 21
668
iso_3166 | [] [] [] [] [] [] [] | 27
669
iso_3166_1 | [] [] [] | 16
672
iso_4217 | [] [] [] [] [] [] | 24
674
jpilot | [] [] [] [] [] | 9
676
jwhois | () [] [] | 11
680
libc | [] [] [] [] | 20
681
libgpewidget | [] [] [] [] | 13
682
libiconv | [] [] [] [] [] [] [] [] | 27
686
lingoteach_lessons | () | 0
693
mysecretdiary | [] [] | 10
694
nano | [] [] [] [] | 17
695
nano_1_0 | [] [] [] | 17
697
parted | [] [] [] | 15
701
recode | [] [] [] | 20
704
scrollkeeper | [] [] [] | 15
705
sed | [] [] [] [] [] [] | 24
706
sh-utils | [] [] | 14
707
shared-mime-info | [] [] | 7
708
sharutils | [] [] [] [] | 17
712
soundtracker | [] [] | 7
714
tar | [] [] [] [] [] | 24
715
texinfo | [] [] [] | 14
716
textutils | [] [] [] [] | 16
719
tuxpaint | [] [] [] [] [] | 29
720
unicode-han-tra... | | 0
721
unicode-transla... | | 2
722
util-linux | [] [] | 15
725
wdiff | [] [] [] | 18
726
wget | [] [] [] [] [] [] [] [] | 24
727
xchat | [] [] [] [] [] | 15
728
xfree86_xkb_xml | [] [] [] [] [] | 11
730
+-----------------------------------------------------+
731
63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu
732
131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373
734
Some counters in the preceding matrix are higher than the number of
735
visible blocks let us expect. This is because a few extra PO files are
736
used for implementing regional variants of languages, or language
739
For a PO file in the matrix above to be effective, the package to
740
which it applies should also have been internationalized and
741
distributed as such by its maintainer. There might be an observable
742
lag between the mere existence a PO file and its wide availability in a
745
If January 2004 seems to be old, you may fetch a more recent copy of
746
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
747
matrix with full percentage details can be found at
748
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
750
Using `gettext' in new packages
751
===============================
753
If you are writing a freely available program and want to
754
internationalize it you are welcome to use GNU `gettext' in your
755
package. Of course you have to respect the GNU Library General Public
756
License which covers the use of the GNU `gettext' library. This means
757
in particular that even non-free programs can use `libintl' as a shared
758
library, whereas only free software can use `libintl' as a static
759
library or use modified versions of `libintl'.
761
Once the sources are changed appropriately and the setup can handle
762
the use of `gettext' the only thing missing are the translations. The
763
Free Translation Project is also available for packages which are not
764
developed inside the GNU project. Therefore the information given above
765
applies also for every other Free Software Project. Contact
766
`translation@iro.umontreal.ca' to make the `.pot' files available to
767
the translation teams.