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.