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

   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 September
2001.  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 cs da de el en eo es et fi fr gl he hr id it ja
                     +----------------------------------------------------+
     a2ps            |          []             []    []                   |
     bash            |          []       [] []       []                   |
     bfd             |                                                    |
     binutils        |                               []                   |
     bison           |          []          [] []    []                [] |
     clisp           |          []    []    []       []                   |
     cpio            |       [] []          []       [] []                |
     diffutils       |       [] []       [] []       [] []       []       |
     enscript        |          []                   []                   |
     error           |                      []       []                   |
     fetchmail       |                                                    |
     fileutils       |    [] [] [] []       []       [] []             [] |
     findutils       |       [] []          [] []    [] []       [] []    |
     flex            |       []             []       []                   |
     freetype        |                                                    |
     gas             |                                                    |
     gawk            |                               []    []             |
     gcal            |                                                    |
     gcc             |                                                    |
     gettext         |    [] [] [] []       []       [] []       [] [] [] |
     gnupg           |          []       []    []    [] []          [] [] |
     gprof           |                                                    |
     grep            |    []    []       [] [] []    [] []          []    |
     hello           |       [] [] []    [] [] [] [] [] []          [] [] |
     id-utils        |       [] []                   []                   |
     indent          |       [] []             []    [] []                |
     jpilot          |                               []                   |
     kbd             |                                                    |
     ld              |                               []                   |
     libc            |    [] [] [] []       []       [] []             [] |
     lilypond        |                                                 [] |
     lynx            |    [] [] []                                     [] |
     m4              |    [] [] [] []                [] []       []    [] |
     make            |       [] []          []       [] []             [] |
     mysecretdiary   |          []                                        |
     nano            |                      []          []       []       |
     opcodes         |                                                    |
     parted          |          []                      []             [] |
     ptx             |       [] []          [] []    [] []       []       |
     python          |                                                    |
     recode          |       [] [] []    [] []       [] [] []       []    |
     sed             |    [] [] [] []    []    []    [] [] []    [] [] [] |
     sh-utils        |    [] [] [] []       [] []    [] []          [] [] |
     sharutils       |    [] [] [] []       []       [] []             [] |
     sketch          |                                                    |
     soundtracker    |          []          []          []                |
     sp              |                                                    |
     tar             |    [] [] []          [] []    []             [] [] |
     texinfo         |    [] [] []       []          []                [] |
     textutils       |    [] [] [] []       []       [] []             [] |
     util-linux      |    [] []                                           |
     wdiff           |       [] []             []                         |
     wget            |    [] [] [] []       [] []    [] [] []          [] |
                     +----------------------------------------------------+
                       bg cs da de el en eo es et fi fr gl he hr id it ja
                        0 14 24 32 11  1  8 23 13  1 33 22  4  0  7  9 18
     
                       ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
                     +----------------------------------------------------+
     a2ps            |          []                   []    []             |  6
     bash            |                                                    |  4
     bfd             |                                                    |  0
     binutils        |                                                    |  1
     bison           |                               []                   |  6
     clisp           |          []                                        |  5
     cpio            | []       []       []     []   []                   | 10
     diffutils       |                   []          []       [] []       | 11
     enscript        |          []              []   []                   |  5
     error           |                                  []       []       |  4
     fetchmail       |                                                    |  0
     fileutils       | []       []       []     []   [] [] [] [] []       | 17
     findutils       | []       []       []     []   []    [] [] []       | 16
     flex            | []                            []       []          |  6
     freetype        |                                                    |  0
     gas             |                                                    |  0
     gawk            |                                           []       |  3
     gcal            |                                                    |  0
     gcc             |                                                    |  0
     gettext         | []                []     []   []    [] [] []    [] | 18
     gnupg           |                   []                   [] []       | 10
     gprof           |                                                    |  0
     grep            |                   []                [] [] []       | 12
     hello           | [] [] [] []    [] []          [] []    [] [] []    | 22
     id-utils        |          []                   []       []          |  6
     indent          | []       []       []          [] []    [] []       | 12
     jpilot          |                                                    |  1
     kbd             |                                           []       |  1
     ld              |                                                    |  1
     libc            | []    []       [] []     []      []    [] []       | 16
     lilypond        |          []                            []          |  3
     lynx            |          []              []   []       []          |  8
     m4              |          []       []          []       []          | 12
     make            | []       []       []     []   []          []       | 12
     mysecretdiary   |                                                    |  1
     nano            |                                        []          |  4
     opcodes         |                                           []       |  1
     parted          |          []                   []                   |  5
     ptx             |       [] []    [] [] []       []       [] []       | 15
     python          |                                                    |  0
     recode          |                   []          []    [] []          | 13
     sed             |          []              []   [] [] [] [] []       | 19
     sh-utils        |       [] []    [] []     []   [] [] [] [] []    [] | 21
     sharutils       |          []                   []       []          | 11
     sketch          |                                                    |  0
     soundtracker    |                                                    |  3
     sp              |                                                    |  0
     tar             |       []       [] []     []         [] [] []       | 15
     texinfo         |                               []                   |  7
     textutils       |       [] []    [] []     []   [] [] []             | 16
     util-linux      |                          []               []       |  4
     wdiff           |                               [] []    [] []       |  7
     wget            |          []                   [] [] [] [] [] []    | 17
                     +----------------------------------------------------+
       33 teams        ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
       53 domains       9  1  6 20  0  6 17  1  13   25 10 11 23 21  2  2  387

   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 September 2001 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.

