Notes on the Free Translation Project
*************************************

   Free software is going international!  The Free Translation Project
is a way to get maintainers of free software, translators, and users all
together, so that will gradually become able to speak many languages.
A few packages already provide translations for their messages.

   If you found this `ABOUT-NLS' file inside a distribution, you may
assume that the distributed package does use GNU `gettext' internally,
itself available at your nearest GNU archive site.  But you do _not_
need to install GNU `gettext' prior to configuring, installing or using
this package with messages translated.

   Installers will find here some useful hints.  These notes also
explain how users should proceed for getting the programs to use the
available translations.  They tell how people wanting to contribute and
work at translations should contact the appropriate team.

   When reporting bugs in the `intl/' directory or bugs which may be
related to internationalization, you should tell about the version of
`gettext' which is used.  The information can be found in the
`intl/VERSION' file, in internationalized packages.

Quick configuration advice
==========================

   If you want to exploit the full power of internationalization, you
should configure it using

     ./configure --with-included-gettext

to force usage of internationalizing routines provided within this
package, despite the existence of internationalizing capabilities in the
operating system where this package is being installed.  So far, only
the `gettext' implementation in the GNU C library version 2 provides as
many features (such as locale alias, message inheritance, automatic
charset conversion or plural form handling) as the implementation here.
It is also not possible to offer this additional functionality on top
of a `catgets' implementation.  Future versions of GNU `gettext' will
very likely convey even more functionality.  So it might be a good idea
to change to GNU `gettext' as soon as possible.

   So you need _not_ provide this option if you are using GNU libc 2 or
you have installed a recent copy of the GNU gettext package with the
included `libintl'.

INSTALL Matters
===============

   Some packages are "localizable" when properly installed; the
programs they contain can be made to speak your own native language.
Most such packages use GNU `gettext'.  Other packages have their own
ways to internationalization, predating GNU `gettext'.

   By default, this package will be installed to allow translation of
messages.  It will automatically detect whether the system already
provides the GNU `gettext' functions.  If not, the GNU `gettext' own
library will be used.  This library is wholly contained within this
package, usually in the `intl/' subdirectory, so prior installation of
the GNU `gettext' package is _not_ required.  Installers may use
special options at configuration time for changing the default
behaviour.  The commands:

     ./configure --with-included-gettext
     ./configure --disable-nls

will respectively bypass any pre-existing `gettext' to use the
internationalizing routines provided within this package, or else,
_totally_ disable translation of messages.

   When you already have GNU `gettext' installed on your system and run
configure without an option for your new package, `configure' will
probably detect the previously built and installed `libintl.a' file and
will decide to use this.  This might be not what is desirable.  You
should use the more recent version of the GNU `gettext' library.  I.e.
if the file `intl/VERSION' shows that the library which comes with this
package is more recent, you should use

     ./configure --with-included-gettext

to prevent auto-detection.

   The configuration process will not test for the `catgets' function
and therefore it will not be used.  The reason is that even an
emulation of `gettext' on top of `catgets' could not provide all the
extensions of the GNU `gettext' library.

   Internationalized packages have usually many `po/LL.po' files, where
LL gives an ISO 639 two-letter code identifying the language.  Unless
translations have been forbidden at `configure' time by using the
`--disable-nls' switch, all available translations are installed
together with the package.  However, the environment variable `LINGUAS'
may be set, prior to configuration, to limit the installed set.
`LINGUAS' should then contain a space separated list of two-letter
codes, stating which languages are allowed.

Using This Package
==================

   As a user, if your language has been installed for this package, you
only have to set the `LANG' environment variable to the appropriate
`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
and `CC' is an ISO 3166 two-letter country code.  For example, let's
suppose that you speak German and live in Germany.  At the shell
prompt, merely execute `setenv LANG de_DE' (in `csh'),
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
This can be done from your `.login' or `.profile' file, once and for
all.

   You might think that the country code specification is redundant.
But in fact, some languages have dialects in different countries.  For
example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
country code serves to distinguish the dialects.

   The locale naming convention of `LL_CC', with `LL' denoting the
language and `CC' denoting the country, is the one use on systems based
on GNU libc.  On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
locales supported by your system for your country by running the command
`locale -a | grep '^LL''.

   Not all programs have translations for all languages.  By default, an
English message is shown in place of a nonexistent translation.  If you
understand other languages, you can set up a priority list of languages.
This is done through a different environment variable, called
`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
for the purpose of message handling, but you still need to have `LANG'
set to the primary language; this is required by other parts of the
system libraries.  For example, some Swedish users who would rather
read translations in German than English for when Swedish is not
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.

   In the `LANGUAGE' environment variable, but not in the `LANG'
environment variable, `LL_CC' combinations can be abbreviated as `LL'
to denote the language's main dialect.  For example, `de' is equivalent
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
(Portuguese as spoken in Portugal) in this context.

Translating Teams
=================

   For the Free Translation Project to be a success, we need interested
people who like their own language and write it well, and who are also
able to synergize with other translators speaking the same language.
Each translation team has its own mailing list.  The up-to-date list of
teams can be found at the Free Translation Project's homepage,
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
area.

   If you'd like to volunteer to _work_ at translating messages, you
should become a member of the translating team for your own language.
The subscribing address is _not_ the same as the list itself, it has
`-request' appended.  For example, speakers of Swedish can send a
message to `sv-request@li.org', having this message body:

     subscribe

   Keep in mind that team members are expected to participate
_actively_ in translations, or at solving translational difficulties,
rather than merely lurking around.  If your team does not exist yet and
you want to start one, or if you are unsure about what to do or how to
get started, please write to `translation@iro.umontreal.ca' to reach the
coordinator for all translator teams.

   The English team is special.  It works at improving and uniformizing
the terminology in use.  Proven linguistic skill are praised more than
programming skill, here.

Available Packages
==================

   Languages are not equally supported in all packages.  The following
matrix shows the current state of internationalization, as of April
2002.  The matrix shows, in regard of each package, for which languages
PO files have been submitted to translation coordination, with a
translation percentage of at least 50%.

     Ready PO files    bg ca cs da de el en eo es et fi fr
                     +-------------------------------------+
     a2ps            |          [] []             []    [] |
     bash            |             []       [] []       [] |
     bfd             |                         []       [] |
     binutils        |                         []       [] |
     bison           |             []          [] []    [] |
     clisp           |             []    []    []       [] |
     cpio            |          [] []          []       [] |
     diffutils       |       [] [] []       [] []       [] |
     enscript        |             []                   [] |
     error           |                         []       [] |
     fetchmail       |    [] () [] []          []       () |
     fileutils       |          [] []          [] []    [] |
     findutils       |          [] []          [] []    [] |
     flex            |    []    [] []          []       [] |
     gas             |                         []       [] |
     gawk            |             []          []       [] |
     gcal            |    []                            [] |
     gcc             |                         []       [] |
     gettext         |    []    [] []          []       [] |
     gnupg           |             [] []    [] [] []    [] |
     gprof           |                         []       [] |
     gpsdrive        |          () ()    ()    ()       () |
     grep            | [] []       [] []       [] []    [] |
     gretl           |                                     |
     hello           |          [] [] []    [] [] [] [] [] |
     id-utils        |          [] []                   [] |
     indent          |    []       []       []    []    [] |
     jpilot          |       () [] []                   [] |
     jwhois          |                         []       [] |
     kbd             |                         []       [] |
     ld              |                         []       [] |
     libc            |    [] [] [] [] []       []       [] |
     lilypond        |          []                      [] |
     lynx            |       [] [] []             []       |
     m4              |       [] [] [] []                [] |
     make            |          [] []          []       [] |
     mysecretdiary   |             []                   [] |
     nano            |    [] () [] []          []       [] |
     nano_1_0        |    [] () [] []          []       [] |
     opcodes         |          []             []       [] |
     parted          |    []    [] []          []       [] |
     ptx             |          [] []          [] []    [] |
     python          |                                     |
     recode          |          [] [] []    [] []       [] |
     sed             |       [] [] [] []    [] [] []    [] |
     sh-utils        |    [] [] [] [] []       [] []    [] |
     sharutils       |       [] [] [] []       []       [] |
     sketch          |             ()          []       () |
     soundtracker    |             []          []       [] |
     sp              |             []                      |
     tar             |       [] [] []          [] []    [] |
     texinfo         |       [] [] []       []          [] |
     textutils       |    []    [] []          []       [] |
     util-linux      |       [] [] []          [] []    [] |
     vorbis-tools    |                                     |
     wastesedge      |                                     |
     wdiff           |    []    [] []          [] []    [] |
     wget            | [] [] [] [] [] []       [] []    [] |
                     +-------------------------------------+
                       bg ca cs da de el en eo es et fi fr
                        2 14 11 31 40 10  1  8 41 16  1 50
     
                       gl he hr hu id it ja ko lv nb nl nn
                     +-------------------------------------+
     a2ps            |                ()    ()       []    |
     bash            |                                     |
     bfd             |                   []                |
     binutils        |                   []                |
     bison           |                   []          []    |
     clisp           |                               []    |
     cpio            | []                   []       []    |
     diffutils       | [] []       []    []                |
     enscript        |       []                      []    |
     error           |          []                         |
     fetchmail       |                   []                |
     fileutils       |          []    [] []                |
     findutils       | []    []    [] [] [] []       []    |
     flex            |                      []             |
     gas             |                                     |
     gawk            |    []                               |
     gcal            |                                     |
     gcc             |                                     |
     gettext         |                   [] []             |
     gnupg           | []          [] [] []                |
     gprof           |                                     |
     gpsdrive        |                ()             ()    |
     grep            | [] [] []    [] [] []                |
     gretl           |                                     |
     hello           | [] [] [] [] [] [] [] [] [] [] [] [] |
     id-utils        |                               []    |
     indent          | []                []          []    |
     jpilot          |                   ()          ()    |
     jwhois          |             []                      |
     kbd             |                                     |
     ld              |                                     |
     libc            | []                [] []    []       |
     lilypond        |                   []          []    |
     lynx            |                [] []          []    |
     m4              | []          []    []          []    |
     make            | [] [] []          [] []       []    |
     mysecretdiary   |                                     |
     nano            | []          [] [] ()       [] [] [] |
     nano_1_0        | []          [] [] ()       []    [] |
     opcodes         |                               []    |
     parted          | []                []             [] |
     ptx             | []          []             [] []    |
     python          |                                     |
     recode          | [] []          []                   |
     sed             | [] []       [] [] [] []       []    |
     sh-utils        | []             [] []       [] []    |
     sharutils       | []                []          []    |
     sketch          |                ()                   |
     soundtracker    | []                                  |
     sp              |                                     |
     tar             | []    []       [] []       []       |
     texinfo         |    [] []          []                |
     textutils       | []                   []    []       |
     util-linux      |                () []                |
     vorbis-tools    |                                     |
     wastesedge      |                                     |
     wdiff           | []          []                      |
     wget            | [] [] [] []       []          []    |
                     +-------------------------------------+
                       gl he hr hu id it ja ko lv nb nl nn
                       23  9  8  4 12 12 25  9  1  8 20  4
     
                       no pl pt pt_BR ru sk sl sv tr uk zh_TW
                     +----------------------------------------+
     a2ps            | () () ()  []   []    [] [] ()          |  9
     bash            |                                        |  4
     bfd             |                         [] []          |  5
     binutils        |                            []          |  4
     bison           |                []       [] []          |  9
     clisp           |                                        |  5
     cpio            |    []     []   []       []             | 11
     diffutils       |    []     []   []       [] []     []   | 16
     enscript        |           []   []       []             |  7
     error           |                   []       []     []   |  6
     fetchmail       |    ()     ()               []          |  6
     fileutils       |                []    [] [] []     []   | 13
     findutils       |    []     []   [] [] [] [] []          | 19
     flex            |                []       [] []          |  9
     gas             |                            []          |  3
     gawk            |                         [] []          |  6
     gcal            |                         [] []          |  4
     gcc             |                            []          |  3
     gettext         |                [] [] [] [] []     []   | 13
     gnupg           |    []                   [] []          | 13
     gprof           |                         [] []          |  4
     gpsdrive        |                            ()          |  0
     grep            |    []          []    []    []          | 17
     gretl           |                                        |  0
     hello           | [] []          [] []    [] [] []       | 27
     id-utils        |                []       []             |  6
     indent          |                [] []    [] []          | 12
     jpilot          | ()                      () []          |  4
     jwhois          |                ()       () []     []   |  5
     kbd             |                         [] []          |  4
     ld              |                         [] []          |  4
     libc            | [] []     []      []    [] []          | 17
     lilypond        |                         []             |  5
     lynx            |           []   []       []             | 10
     m4              |    []          []       []             | 12
     make            |    []     []   []          []          | 14
     mysecretdiary   |                         [] []          |  4
     nano            | () []          []       []    []       | 15
     nano_1_0        | () []          []       []    []       | 14
     opcodes         |                         [] []          |  6
     parted          |       []  []            []             | 11
     ptx             | [] [] []       []       [] []          | 15
     python          |                                        |  0
     recode          |    []          []    [] []             | 13
     sed             |           []   [] [] [] [] []          | 21
     sh-utils        | [] []     []   [] [] [] [] []     []   | 22
     sharutils       |                []       [] []     []   | 13
     sketch          |           []   ()                      |  3
     soundtracker    |                         []             |  5
     sp              |                                        |  1
     tar             | [] []     []      [] [] [] []          | 18
     texinfo         |                []       []             | 10
     textutils       |                []    [] [] []     []   | 13
     util-linux      |           []            [] []          | 10
     vorbis-tools    |                         []             |  1
     wastesedge      |                                        |  0
     wdiff           |                [] []    [] []          | 12
     wget            |    []          [] [] [] [] [] []  []   | 23
                     +----------------------------------------+
       35 teams        no pl pt pt_BR ru sk sl sv tr uk zh_TW
       58 domains       5 16  2  14   27 11 11 41 36  4   9    536

   Some counters in the preceding matrix are higher than the number of
visible blocks let us expect.  This is because a few extra PO files are
used for implementing regional variants of languages, or language
dialects.

   For a PO file in the matrix above to be effective, the package to
which it applies should also have been internationalized and
distributed as such by its maintainer.  There might be an observable
lag between the mere existence a PO file and its wide availability in a
distribution.

   If April 2002 seems to be old, you may fetch a more recent copy of
this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
matrix with full percentage details can be found at
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.

Using `gettext' in new packages
===============================

   If you are writing a freely available program and want to
internationalize it you are welcome to use GNU `gettext' in your
package.  Of course you have to respect the GNU Library General Public
License which covers the use of the GNU `gettext' library.  This means
in particular that even non-free programs can use `libintl' as a shared
library, whereas only free software can use `libintl' as a static
library or use modified versions of `libintl'.

   Once the sources are changed appropriately and the setup can handle
to use of `gettext' the only thing missing are the translations.  The
Free Translation Project is also available for packages which are not
developed inside the GNU project.  Therefore the information given above
applies also for every other Free Software Project.  Contact
`translation@iro.umontreal.ca' to make the `.pot' files available to
the translation teams.

