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 August
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    be bg ca cs da de el en eo es et fi fr
                     +----------------------------------------+
     a2ps            |             [] []             []    [] |
     ap-utils        |                                        |
     bash            |                []       [] []       [] |
     bfd             |                            []       [] |
     binutils        |                            []       [] |
     bison           |                []          [] []    [] |
     clisp           |                                        |
     clisp           |                []    []    []       [] |
     clisplow        |                                        |
     cpio            |             [] []          []       [] |
     darkstat        |             ()                         |
     diffutils       |          [] [] []       [] []       [] |
     enscript        |                []                   [] |
     error           |                []          []       [] |
     fetchmail       |       [] () [] []          []       () |
     fileutils       |             [] []          [] []    [] |
     findutils       |             [] []       [] [] []    [] |
     flex            |       []    [] []          []       [] |
     gas             |                            []       [] |
     gawk            |                []          []       [] |
     gcal            |       []                            [] |
     gcc             |                            []       [] |
     gettext         |       []    [] []          []       [] |
     gnupg           |       []       [] []    [] [] []    [] |
     gprof           |                            []       [] |
     gpsdrive        |             () ()    ()    ()       () |
     grep            |    [] []       [] []       [] [] [] [] |
     gretl           |                            []          |
     gthumb          |                ()          ()       () |
     hello           |       []    [] [] []    [] [] [] [] [] |
     id-utils        |             [] []                   [] |
     indent          |       []       []       []    []    [] |
     jpilot          |          () [] []                   [] |
     jwhois          |                            []       [] |
     kbd             |                []          []       [] |
     ld              |                            []       [] |
     libc            |       [] [] [] [] []       []    [] [] |
     libiconv        |       []       []       [] []          |
     lifelines       |                ()                   () |
     lilypond        |             []                      [] |
     lingoteach      |                         []          [] |
     lingoteach_lessons|                ()          ()          |
     lynx            |       [] [] [] []             []       |
     m4              |          [] [] [] []                [] |
     make            |             [] []          []       [] |
     man-db          |       [] () () []          ()       () |
     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            |    [] [] [] [] [] []       [] [] [] [] |
                     +----------------------------------------+
                       be bg ca cs da de el en eo es et fi fr
                        0  2 19 10 30 44  9  1 12 44 17  6 53
     
                       gl he hr hu id it ja ko lv nb nl nn
                     +-------------------------------------+
     a2ps            |                ()    ()       []    |
     ap-utils        |                                     |
     bash            |          []                         |
     bfd             |                   []                |
     binutils        |                   []                |
     bison           |       []       [] []          []    |
     clisp           |                                     |
     clisp           |                               []    |
     clisplow        |                                     |
     cpio            | []       []          []       []    |
     darkstat        |                                     |
     diffutils       | [] []    [] []    []                |
     enscript        |       []                      []    |
     error           |          []                         |
     fetchmail       |                   []                |
     fileutils       |          []    [] []                |
     findutils       | []    [] [] [] [] [] []       []    |
     flex            |                      []             |
     gas             |                                     |
     gawk            |    []                               |
     gcal            |                                     |
     gcc             |                   []                |
     gettext         |                   [] []             |
     gnupg           | []          [] [] []                |
     gprof           |             []                      |
     gpsdrive        |          []    ()             ()    |
     grep            | [] [] [] [] [] [] []                |
     gretl           |                                     |
     gthumb          |                () ()                |
     hello           | [] [] [] [] [] [] [] [] [] [] [] [] |
     id-utils        |          []                   []    |
     indent          | []       []       []          []    |
     jpilot          |                   ()          ()    |
     jwhois          |          [] []                      |
     kbd             |                                     |
     ld              |                                     |
     libc            | []                [] []    []       |
     libiconv        | []    [] []                         |
     lifelines       |                                     |
     lilypond        |                               []    |
     lingoteach      |          []                         |
     lingoteach_lessons|                                     |
     lynx            |          []    [] []          []    |
     m4              | []          []    []          []    |
     make            | [] [] []          [] []       []    |
     man-db          |                () ()                |
     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 12 19 16 13 26  9  1  7 19  3
     
                       no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
                     +----------------------------------------------+
     a2ps            | () () ()  []   []    [] [] []                | 10
     ap-utils        |                               ()             |  0
     bash            |           []                                 |  6
     bfd             |                         [] []                |  5
     binutils        |                         [] []                |  5
     bison           |           []   []       [] []                | 12
     clisp           |                                              |  0
     clisp           |                                              |  5
     clisplow        |                                              |  0
     cpio            |    []     []   []       []                   | 12
     darkstat        |           []            []        ()    ()   |  2
     diffutils       |    []     []   []       [] []           []   | 17
     enscript        |           []   []       [] []                |  8
     error           |                   []       []           []   |  7
     fetchmail       |    ()     ()               []                |  6
     fileutils       |                []    [] [] []     []    []   | 14
     findutils       |    []     []   [] [] [] [] []                | 21
     flex            |                []       [] []                |  9
     gas             |                            []                |  3
     gawk            |                         [] []                |  6
     gcal            |                         [] []                |  4
     gcc             |                            []                |  4
     gettext         |                [] [] [] [] []           []   | 13
     gnupg           |    []                   [] []                | 14
     gprof           |                         [] []                |  5
     gpsdrive        |                   []    []                   |  3
     grep            |    []     []   []    []    []                | 20
     gretl           |                                              |  1
     gthumb          |           ()   ()       []                   |  1
     hello           | [] []          [] []    [] [] []             | 28
     id-utils        |           []   []       [] []                |  9
     indent          |           []   [] []    [] []                | 14
     jpilot          | ()                      () []           []   |  5
     jwhois          |           []   ()       () []           []   |  7
     kbd             |                         [] []                |  5
     ld              |                         [] []                |  4
     libc            | [] []     []      []    [] []                | 18
     libiconv        |           []   [] []    [] []                | 12
     lifelines       |                         []                   |  1
     lilypond        |                         []                   |  4
     lingoteach      |           []            []                   |  5
     lingoteach_lessons|                                   ()         |  0
     lynx            |           []   []       [] []                | 13
     m4              |    []     []   []       []                   | 13
     make            |    []     []   []       [] []                | 15
     man-db          |                                              |  3
     mysecretdiary   |           []            [] []                |  7
     nano            |    []          []       []    []             | 13
     nano_1_0        |    []          []       []    []             | 14
     opcodes         |           []            [] []                |  8
     parted          |       []  []            [] []                | 12
     ptx             | [] [] []  []   []       [] []                | 19
     python          |                                              |  0
     recode          |    []     []   []    [] [] []                | 15
     sed             |           []   [] [] [] [] []                | 24
     sh-utils        |                []          []                |  9
     sharutils       |                []       [] []           []   | 14
     sketch          |           []   ()       []                   |  4
     soundtracker    |                         []                   |  6
     sp              |                                              |  1
     tar             | [] []     []      [] [] [] []                | 19
     texinfo         |                []       []                   | 10
     textutils       |                []    [] [] []           []   | 14
     util-linux      |           []            [] []                | 10
     vorbis-tools    |                         []                   |  3
     wastesedge      |                                              |  0
     wdiff           |           []   [] []    [] []                | 14
     wget            |    []          [] [] [] [] [] []        []   | 24
                     +----------------------------------------------+
       37 teams        no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW
       68 domains       4 15  2  28   28 12 10 49 43  4   1     9    609

   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 August 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.

