This is gettext.info, produced by makeinfo version 4.0 from
gettext.texi.

INFO-DIR-SECTION GNU Gettext Utilities
START-INFO-DIR-ENTRY
* Gettext: (gettext).                           GNU gettext utilities.
* gettextize: (gettext)gettextize Invocation.   Prepare a package for gettext.
* msgfmt: (gettext)msgfmt Invocation.           Make MO files out of PO files.
* msgmerge: (gettext)msgmerge Invocation.       Update two PO files into one.
* xgettext: (gettext)xgettext Invocation.       Extract strings into a PO file.
END-INFO-DIR-ENTRY

   This file provides documentation for GNU `gettext' utilities.  It
also serves as a reference for the free Translation Project.

   Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software
Foundation, Inc.

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided that
the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be stated in a
translation approved by the Foundation.


File: gettext.info,  Node: librep-format,  Next: smalltalk-format,  Prev: elisp-format,  Up: Translators for other Languages

librep Format Strings
---------------------

   librep format strings are documented in the librep manual, section
Formatted Output,
<http://librep.sourceforge.net/librep-manual.html#Formatted%20Output>,
<http://www.gwinnup.org/research/docs/librep.html#SEC122>.


File: gettext.info,  Node: smalltalk-format,  Next: java-format,  Prev: librep-format,  Up: Translators for other Languages

Smalltalk Format Strings
------------------------

   Smalltalk format strings are described in the GNU Smalltalk
documentation, class `CharArray', methods `bindWith:' and
`bindWithArguments:'.
`http://www.gnu.org/software/smalltalk/gst-manual/gst_68.html#SEC238'.
In summary, a directive starts with `%' and is followed by `%' or a
nonzero digit (`1' to `9').


File: gettext.info,  Node: java-format,  Next: awk-format,  Prev: smalltalk-format,  Up: Translators for other Languages

Java Format Strings
-------------------

   Java format strings are described in the JDK documentation for class
`java.text.MessageFormat',
`http://java.sun.com/j2se/1.4/docs/api/java/text/MessageFormat.html'.
See also the ICU documentation
`http://oss.software.ibm.com/icu/apiref/classMessageFormat.html'.


File: gettext.info,  Node: awk-format,  Next: object-pascal-format,  Prev: java-format,  Up: Translators for other Languages

awk Format Strings
------------------

   awk format strings are described in the gawk documentation, section
Printf, `http://www.gnu.org/manual/gawk/html_node/Printf.html#Printf'.


File: gettext.info,  Node: object-pascal-format,  Next: ycp-format,  Prev: awk-format,  Up: Translators for other Languages

Object Pascal Format Strings
----------------------------

   Where is this documented?


File: gettext.info,  Node: ycp-format,  Next: tcl-format,  Prev: object-pascal-format,  Up: Translators for other Languages

YCP Format Strings
------------------

   YCP sformat strings are described in the libycp documentation
`file:/usr/share/doc/packages/libycp/YCP-builtins.html'.  In summary, a
directive starts with `%' and is followed by `%' or a nonzero digit
(`1' to `9').


File: gettext.info,  Node: tcl-format,  Prev: ycp-format,  Up: Translators for other Languages

Tcl Format Strings
------------------

   Tcl format strings are described in the `format.n' manual page,
`http://www.scriptics.com/man/tcl8.3/TclCmd/format.htm'.


File: gettext.info,  Node: Maintainers for other Languages,  Next: List of Programming Languages,  Prev: Translators for other Languages,  Up: Programming Languages

The Maintainer's View
=====================

   For the maintainer, the general procedure differs from the C language
case in two ways.

   * For those languages that don't use GNU gettext, the `intl/'
     directory is not needed and can be omitted.  This means that the
     maintainer calls the `gettextize' program without the `--intl'
     option, and that he invokes the `AM_GNU_GETTEXT' autoconf macro via
     `AM_GNU_GETTEXT([external])'.

   * If only a single programming language is used, the
     `XGETTEXT_OPTIONS' variable in `po/Makevars' (*note po/Makevars::)
     should be adjusted to match the `xgettext' options for that
     particular programming language.  If the package uses more than
     one programming language with `gettext' support, it becomes
     necessary to change the POT file construction rule in
     `po/Makefile.in.in'. It is recommended to make one `xgettext'
     invocation per programming language, each with the options
     appropriate for that language, and to combine the resulting files
     using `msgcat'.


File: gettext.info,  Node: List of Programming Languages,  Next: List of Data Formats,  Prev: Maintainers for other Languages,  Up: Programming Languages

Individual Programming Languages
================================

* Menu:

* C::                           C, C++, Objective C
* sh::                          sh - Shell Script
* bash::                        bash - Bourne-Again Shell Script
* Python::                      Python
* Common Lisp::                 GNU clisp - Common Lisp
* clisp C::                     GNU clisp C sources
* Emacs Lisp::                  Emacs Lisp
* librep::                      librep
* Smalltalk::                   GNU Smalltalk
* Java::                        Java
* gawk::                        GNU awk
* Pascal::                      Pascal - Free Pascal Compiler
* wxWindows::                   wxWindows library
* YCP::                         YCP - YaST2 scripting language
* Tcl::                         Tcl - Tk's scripting language
* Perl::                        Perl
* PHP::                         PHP Hypertext Preprocessor
* Pike::                        Pike


File: gettext.info,  Node: C,  Next: sh,  Prev: List of Programming Languages,  Up: List of Programming Languages

C, C++, Objective C
-------------------

RPMs
     gcc, gpp, gobjc, glibc, gettext

File extension
     For C: `c', `h'.
     For C++: `C', `c++', `cc', `cxx', `cpp', `hpp'.
     For Objective C: `m'.

String syntax
     `"abc"'

gettext shorthand
     `_("abc")'

gettext/ngettext functions
     `gettext', `dgettext', `dcgettext', `ngettext', `dngettext',
     `dcngettext'

textdomain
     `textdomain' function

bindtextdomain
     `bindtextdomain' function

setlocale
     Programmer must call `setlocale (LC_ALL, "")'

Prerequisite
     `#include <libintl.h>'
     `#include <locale.h>'
     `#define _(string) gettext (string)'

Use or emulate GNU gettext
     Use

Extractor
     `xgettext -k_'

Formatting with positions
     `fprintf "%2$d %1$d"' (POSIX but not C 99)

Portability
     autoconf (gettext.m4) and #if ENABLE_NLS

po-mode marking
     yes


File: gettext.info,  Node: sh,  Next: bash,  Prev: C,  Up: List of Programming Languages

sh - Shell Script
-----------------

RPMs
     bash, gettext

File extension
     `sh'

String syntax
     `"abc"', `'abc'', `abc'

gettext shorthand
     `"`gettext "abc"`"'

gettext/ngettext functions
     `gettext', `ngettext' programs

textdomain
     environment variable `TEXTDOMAIN'

bindtextdomain
     environment variable `TEXTDOMAINDIR'

setlocale
     automatic

Prerequisite
     --

Use or emulate GNU gettext
     use

Extractor
     --

Formatting with positions
     --

Portability
     --

po-mode marking
     --


File: gettext.info,  Node: bash,  Next: Python,  Prev: sh,  Up: List of Programming Languages

bash - Bourne-Again Shell Script
--------------------------------

RPMs
     bash 2.0 or newer, gettext

File extension
     `sh'

String syntax
     `"abc"', `'abc'', `abc'

gettext shorthand
     `$"abc"'

gettext/ngettext functions
     `gettext', `ngettext' programs

textdomain
     environment variable `TEXTDOMAIN'

bindtextdomain
     environment variable `TEXTDOMAINDIR'

setlocale
     automatic

Prerequisite
     --

Use or emulate GNU gettext
     use

Extractor
     `bash --dump-po-strings'

Formatting with positions
     --

Portability
     --

po-mode marking
     --


File: gettext.info,  Node: Python,  Next: Common Lisp,  Prev: bash,  Up: List of Programming Languages

Python
------

RPMs
     python

File extension
     `py'

String syntax
     `'abc'', `u'abc'', `r'abc'', `ur'abc'',
     `"abc"', `u"abc"', `r"abc"', `ur"abc"',
     `'''abc'''', `u'''abc'''', `r'''abc'''', `ur'''abc'''',
     `"""abc"""', `u"""abc"""', `r"""abc"""', `ur"""abc"""'

gettext shorthand
     `_('abc')' etc.

gettext/ngettext functions
     `gettext.gettext', `gettext.dgettext', also `ugettext'

textdomain
     `gettext.textdomain' function, or `gettext.install(DOMAIN)'
     function

bindtextdomain
     `gettext.bindtextdomain' function, or
     `gettext.install(DOMAIN,LOCALEDIR)' function

setlocale
     not used by the gettext emulation

Prerequisite
     `import gettext'

Use or emulate GNU gettext
     emulate. Bug: uses only the first found .mo file, not all of them

Extractor
     `xgettext'

Formatting with positions
     `'...%(ident)d...' % { 'ident': value }'

Portability
     fully portable

po-mode marking
     --


File: gettext.info,  Node: Common Lisp,  Next: clisp C,  Prev: Python,  Up: List of Programming Languages

GNU clisp - Common Lisp
-----------------------

RPMs
     clisp 2.28 or newer

File extension
     `lisp'

String syntax
     `"abc"'

gettext shorthand
     `(_ "abc")', `(ENGLISH "abc")'

gettext/ngettext functions
     `i18n:gettext', `i18n:ngettext'

textdomain
     `i18n:textdomain'

bindtextdomain
     `i18n:textdomaindir'

setlocale
     automatic

Prerequisite
     --

Use or emulate GNU gettext
     use

Extractor
     `xgettext -k_ -kENGLISH'

Formatting with positions
     `format "~1@*~D ~0@*~D"'

Portability
     On platforms without gettext, no translation.

po-mode marking
     --


File: gettext.info,  Node: clisp C,  Next: Emacs Lisp,  Prev: Common Lisp,  Up: List of Programming Languages

GNU clisp C sources
-------------------

RPMs
     clisp

File extension
     `d'

String syntax
     `"abc"'

gettext shorthand
     `ENGLISH ? "abc" : ""'
     `GETTEXT("abc")'
     `GETTEXTL("abc")'

gettext/ngettext functions
     `clgettext', `clgettextl'

textdomain
     --

bindtextdomain
     --

setlocale
     automatic

Prerequisite
     `#include "lispbibl.c"'

Use or emulate GNU gettext
     use

Extractor
     `clisp-xgettext'

Formatting with positions
     `fprintf "%2$d %1$d"' (POSIX but not C 99)

Portability
     On platforms without gettext, no translation.

po-mode marking
     --


File: gettext.info,  Node: Emacs Lisp,  Next: librep,  Prev: clisp C,  Up: List of Programming Languages

Emacs Lisp
----------

RPMs
     emacs, xemacs

File extension
     `el'

String syntax
     `"abc"'

gettext shorthand
     `(_"abc")'

gettext/ngettext functions
     `gettext', `dgettext' (xemacs only)

textdomain
     `domain' special form (xemacs only)

bindtextdomain
     `bind-text-domain' function (xemacs only)

setlocale
     automatic

Prerequisite
     --

Use or emulate GNU gettext
     use

Extractor
     `xgettext'

Formatting with positions
     `format "%2$d %1$d"'

Portability
     Only XEmacs. Without `I18N3' defined at build time, no translation.

po-mode marking
     --


File: gettext.info,  Node: librep,  Next: Smalltalk,  Prev: Emacs Lisp,  Up: List of Programming Languages

librep
------

RPMs
     librep 0.15.3 or newer

File extension
     `jl'

String syntax
     `"abc"'

gettext shorthand
     `(_"abc")'

gettext/ngettext functions
     `gettext'

textdomain
     `textdomain' function

bindtextdomain
     `bindtextdomain' function

setlocale
     --

Prerequisite
     `(require 'rep.i18n.gettext)'

Use or emulate GNU gettext
     use

Extractor
     `xgettext'

Formatting with positions
     `format "%2$d %1$d"'

Portability
     On platforms without gettext, no translation.

po-mode marking
     --


File: gettext.info,  Node: Smalltalk,  Next: Java,  Prev: librep,  Up: List of Programming Languages

GNU Smalltalk
-------------

RPMs
     smalltalk

File extension
     `st'

String syntax
     `''abc'''

gettext shorthand
     `NLS? ''abc'''
     `self? ''abc'''

gettext/ngettext functions
     `LcMessagesDomain>>#at:', `LcMessagesDomain>>#at:plural:with:'

textdomain
     `LcMessages>>#?' (returns a `LcMessagesDomain' object).
     Example: `Locale default messages ? 'gettext''

bindtextdomain
     `LcMessages>>#domain:directory:' (returns a `LcMessagesDomain'
     object)

setlocale
     You can obtain any `Locale' object from `Locale' class methods
     such as `#fromString:' or `#default'.
     Example: `Locale default messages' gives the `LcMessages' object
     for the default locale.

Prerequisite
     The gettext code is contained in the `I18N' package.

Use or emulate GNU gettext
     emulate

Extractor
     --

Formatting with positions
     `'%1 %2' bindWith: 'Hello' with: 'world''

Portability
     fully portable

po-mode marking
     --


File: gettext.info,  Node: Java,  Next: gawk,  Prev: Smalltalk,  Up: List of Programming Languages

Java
----

RPMs
     java, java2

File extension
     `java'

String syntax
     "abc"

gettext shorthand
     _("abc")

gettext/ngettext functions
     `GettextResource.gettext', `GettextResource.ngettext'

textdomain
     --, use `ResourceBundle.getResource' instead

bindtextdomain
     --, use CLASSPATH instead

setlocale
     automatic

Prerequisite
     --

Use or emulate GNU gettext
     --, uses a Java specific message catalog format

Extractor
     `xgettext -k_'

Formatting with positions
     `MessageFormat.format "{1,number} {0,number}"'

Portability
     fully portable

po-mode marking
     --

   Before marking strings as internationalizable, uses of the string
concatenation operator need to be converted to `MessageFormat'
applications. For example, `"file "+filename+" not found"' becomes
`MessageFormat.format("file {0} not found", new Object[] { filename })'.
Only after this is done, can the strings be marked and extracted.

   GNU gettext uses the native Java internationalization mechanism,
namely `ResourceBundle's. To convert a PO file to a ResourceBundle, the
`msgfmt' program can be used with the option `--java' or `--java2'. To
convert a ResourceBundle back to a PO file, the `msgunfmt' program can
be used with the option `--java'.

   Two different programmatic APIs can be used to access
ResourceBundles.  Note that both APIs work with all kinds of
ResourceBundles, whether GNU gettext generated classes, or other
`.class' or `.properties' files.

  1. The `java.util.ResourceBundle' API.

     In particular, its `getString' function returns a string
     translation.  Note that a missing translation yields a
     `MissingResourceException'.

     This has the advantage of being the standard API. And it does not
     require any additional libraries, only the `msgfmt' generated
     `.class' files. But it cannot do plural handling, even if the
     resource was generated from a PO file with plural handling.

  2. The `gnu.gettext.GettextResource' API.

     Reference documentation in Javadoc 1.1 style format is in the
     javadoc1 directory (javadoc1/tree.html) and in Javadoc 2 style
     format in the javadoc2 directory (javadoc2/index.html).

     Its `gettext' function returns a string translation. Note that when
     a translation is missing, the MSGID argument is returned unchanged.

     This has the advantage of having the `ngettext' function for plural
     handling.

     To use this API, one needs the `libintl.jar' file which is part of
     the GNU gettext package and distributed under the LGPL.


File: gettext.info,  Node: gawk,  Next: Pascal,  Prev: Java,  Up: List of Programming Languages

GNU awk
-------

RPMs
     gawk 3.1 or newer

File extension
     `awk'

String syntax
     `"abc"'

gettext shorthand
     `_"abc"'

gettext/ngettext functions
     `dcgettext', missing `dcngettext' in gawk-3.1.0

textdomain
     `TEXTDOMAIN' variable

bindtextdomain
     `bindtextdomain' function

setlocale
     automatic, but missing `setlocale (LC_MESSAGES, "")' in gawk-3.1.0

Prerequisite
     --

Use or emulate GNU gettext
     use

Extractor
     `xgettext'

Formatting with positions
     `printf "%2$d %1$d"' (GNU awk only)

Portability
     On platforms without gettext, no translation.  On non-GNU awks,
     you must define `dcgettext', `dcngettext' and `bindtextdomain'
     yourself.

po-mode marking
     --


File: gettext.info,  Node: Pascal,  Next: wxWindows,  Prev: gawk,  Up: List of Programming Languages

Pascal - Free Pascal Compiler
-----------------------------

RPMs
     fpk

File extension
     `pp', `pas'

String syntax
     `'abc''

gettext shorthand
     automatic

gettext/ngettext functions
     --, use `ResourceString' data type instead

textdomain
     --, use `TranslateResourceStrings' function instead

bindtextdomain
     --, use `TranslateResourceStrings' function instead

setlocale
     automatic, but uses only LANG, not LC_MESSAGES or LC_ALL

Prerequisite
     `{$mode delphi}' or `{$mode objfpc}'
     `uses gettext;'

Use or emulate GNU gettext
     emulate partially

Extractor
     `ppc386' followed by `xgettext' or `rstconv'

Formatting with positions
     `uses sysutils;'
     `format "%1:d %0:d"'

Portability
     ?

po-mode marking
     --

   The Pascal compiler has special support for the `ResourceString' data
type. It generates a `.rst' file. This is then converted to a `.pot'
file by use of `xgettext' or `rstconv'. At runtime, a `.mo' file
corresponding to translations of this `.pot' file can be loaded using
the `TranslateResourceStrings' function in the `gettext' unit.


File: gettext.info,  Node: wxWindows,  Next: YCP,  Prev: Pascal,  Up: List of Programming Languages

wxWindows library
-----------------

RPMs
     wxGTK, gettext

File extension
     `cpp'

String syntax
     `"abc"'

gettext shorthand
     `_("abc")'

gettext/ngettext functions
     `wxLocale::GetString', `wxGetTranslation'

textdomain
     `wxLocale::AddCatalog'

bindtextdomain
     `wxLocale::AddCatalogLookupPathPrefix'

setlocale
     `wxLocale::Init', `wxSetLocale'

Prerequisite
     `#include <wx/intl.h>'

Use or emulate GNU gettext
     emulate, see `include/wx/intl.h' and `src/common/intl.cpp'

Extractor
     `xgettext'

Formatting with positions
     --

Portability
     fully portable

po-mode marking
     yes


File: gettext.info,  Node: YCP,  Next: Tcl,  Prev: wxWindows,  Up: List of Programming Languages

YCP - YaST2 scripting language
------------------------------

RPMs
     libycp, libycp-devel, yast2-core-translator

File extension
     `ycp'

String syntax
     `"abc"'

gettext shorthand
     `_("abc")'

gettext/ngettext functions
     `_()' with 1 or 3 arguments

textdomain
     `textdomain' statement

bindtextdomain
     --

setlocale
     --

Prerequisite
     --

Use or emulate GNU gettext
     use maps instead

Extractor
     `xgettext'

Formatting with positions
     `sformat "%2 %1"'

Portability
     fully portable

po-mode marking
     --


File: gettext.info,  Node: Tcl,  Next: Perl,  Prev: YCP,  Up: List of Programming Languages

Tcl - Tk's scripting language
-----------------------------

RPMs
     tcl

File extension
     `tcl'

String syntax
     `"abc"'

gettext shorthand
     `[_ "abc"]'

gettext/ngettext functions
     `::msgcat::mc'

textdomain
     --

bindtextdomain
     --, use `::msgcat::mcload' instead

setlocale
     automatic, uses LANG, but ignores LC_MESSAGES and LC_ALL

Prerequisite
     `package require msgcat'
     `proc _ {s} {return [::msgcat::mc $s]}'

Use or emulate GNU gettext
     --, uses a Tcl specific message catalog format

Extractor
     `xgettext -k_'

Formatting with positions
     `format "%2\$d %1\$d"'

Portability
     fully portable

po-mode marking
     --

   Before marking strings as internationalizable, substitutions of
variables into the string need to be converted to `format'
applications. For example, `"file $filename not found"' becomes
`[format "file %s not found" $filename]'.  Only after this is done, can
the strings be marked and extracted.  After marking, this example
becomes `[format [_ "file %s not found"] $filename]' or `[msgcat::mc
"file %s not found" $filename]'. Note that the `msgcat::mc' function
implicitly calls `format' when more than one argument is given.


File: gettext.info,  Node: Perl,  Next: PHP,  Prev: Tcl,  Up: List of Programming Languages

Perl
----

RPMs
     perl, perl-gettext

File extension
     `pl', `PL'

String syntax
     `"abc"'

gettext shorthand
     --

gettext/ngettext functions
     `gettext', `dgettext', `dcgettext'

textdomain
     `textdomain' function

bindtextdomain
     `bindtextdomain' function

setlocale
     Use `setlocale (LC_ALL, "");'

Prerequisite
     `use POSIX;'
     `use Locale::gettext;'

Use or emulate GNU gettext
     use

Extractor
     ?

Formatting with positions
     --

Portability
     ?

po-mode marking
     --


File: gettext.info,  Node: PHP,  Next: Pike,  Prev: Perl,  Up: List of Programming Languages

PHP Hypertext Preprocessor
--------------------------

RPMs
     mod_php4, phplib, phpdoc

File extension
     `php', `php3', `php4'

String syntax
     `"abc"'

gettext shorthand
     `_("abc")'

gettext/ngettext functions
     `gettext', `dgettext', `dcgettext'

textdomain
     `textdomain' function

bindtextdomain
     `bindtextdomain' function

setlocale
     `setlocale' function

Prerequisite
     --

Use or emulate GNU gettext
     use

Extractor
     --

Formatting with positions
     --

Portability
     On platforms without gettext, the functions are not available.

po-mode marking
     --


File: gettext.info,  Node: Pike,  Prev: PHP,  Up: List of Programming Languages

Pike
----

RPMs
     roxen

File extension
     `pike'

String syntax
     `"abc"'

gettext shorthand
     --

gettext/ngettext functions
     `gettext', `dgettext', `dcgettext'

textdomain
     `textdomain' function

bindtextdomain
     `bindtextdomain' function

setlocale
     `setlocale' function

Prerequisite
     `import Locale.Gettext;'

Use or emulate GNU gettext
     use

Extractor
     --

Formatting with positions
     --

Portability
     On platforms without gettext, the functions are not available.

po-mode marking
     --


File: gettext.info,  Node: List of Data Formats,  Prev: List of Programming Languages,  Up: Programming Languages

Internationalizable Data
========================

   Here is a list of other data formats which can be internationalized
using GNU gettext.

* Menu:

* POT::                         POT - Portable Object Template
* RST::                         Resource String Table
* Glade::                       Glade - GNOME user interface description


File: gettext.info,  Node: POT,  Next: RST,  Prev: List of Data Formats,  Up: List of Data Formats

POT - Portable Object Template
------------------------------

RPMs
     gettext

File extension
     `pot', `po'

Extractor
     `xgettext'


File: gettext.info,  Node: RST,  Next: Glade,  Prev: POT,  Up: List of Data Formats

Resource String Table
---------------------

RPMs
     fpk

File extension
     `rst'

Extractor
     `xgettext', `rstconv'


File: gettext.info,  Node: Glade,  Prev: RST,  Up: List of Data Formats

Glade - GNOME user interface description
----------------------------------------

RPMs
     glade, libglade, xml-i18n-tools

File extension
     `glade'

Extractor
     `xgettext', `libglade-xgettext'


File: gettext.info,  Node: Conclusion,  Next: Language Codes,  Prev: Programming Languages,  Up: Top

Concluding Remarks
******************

   We would like to conclude this GNU `gettext' manual by presenting an
history of the Translation Project so far.  We finally give a few
pointers for those who want to do further research or readings about
Native Language Support matters.

* Menu:

* History::                     History of GNU `gettext'
* References::                  Related Readings


File: gettext.info,  Node: History,  Next: References,  Prev: Conclusion,  Up: Conclusion

History of GNU `gettext'
========================

   Internationalization concerns and algorithms have been informally
and casually discussed for years in GNU, sometimes around GNU `libc',
maybe around the incoming `Hurd', or otherwise (nobody clearly
remembers).  And even then, when the work started for real, this was
somewhat independently of these previous discussions.

   This all began in July 1994, when Patrick D'Cruze had the idea and
initiative of internationalizing version 3.9.2 of GNU `fileutils'.  He
then asked Jim Meyering, the maintainer, how to get those changes
folded into an official release.  That first draft was full of
`#ifdef's and somewhat disconcerting, and Jim wanted to find nicer
ways.  Patrick and Jim shared some tries and experimentations in this
area.  Then, feeling that this might eventually have a deeper impact on
GNU, Jim wanted to know what standards were, and contacted Richard
Stallman, who very quickly and verbally described an overall design for
what was meant to become `glocale', at that time.

   Jim implemented `glocale' and got a lot of exhausting feedback from
Patrick and Richard, of course, but also from Mitchum DSouza (who wrote
a `catgets'-like package), Roland McGrath, maybe David MacKenzie,
Franc,ois Pinard, and Paul Eggert, all pushing and pulling in various
directions, not always compatible, to the extent that after a couple of
test releases, `glocale' was torn apart.

   While Jim took some distance and time and became dad for a second
time, Roland wanted to get GNU `libc' internationalized, and got Ulrich
Drepper involved in that project.  Instead of starting from `glocale',
Ulrich rewrote something from scratch, but more conformant to the set
of guidelines who emerged out of the `glocale' effort.  Then, Ulrich
got people from the previous forum to involve themselves into this new
project, and the switch from `glocale' to what was first named
`msgutils', renamed `nlsutils', and later `gettext', became officially
accepted by Richard in May 1995 or so.

   Let's summarize by saying that Ulrich Drepper wrote GNU `gettext' in
April 1995.  The first official release of the package, including PO
mode, occurred in July 1995, and was numbered 0.7.  Other people
contributed to the effort by providing a discussion forum around
Ulrich, writing little pieces of code, or testing.  These are quoted in
the `THANKS' file which comes with the GNU `gettext' distribution.

   While this was being done, Franc,ois adapted half a dozen of GNU
packages to `glocale' first, then later to `gettext', putting them in
pretest, so providing along the way an effective user environment for
fine tuning the evolving tools.  He also took the responsibility of
organizing and coordinating the Translation Project.  After nearly a
year of informal exchanges between people from many countries,
translator teams started to exist in May 1995, through the creation and
support by Patrick D'Cruze of twenty unmoderated mailing lists for that
many native languages, and two moderated lists: one for reaching all
teams at once, the other for reaching all willing maintainers of
internationalized free software packages.

   Franc,ois also wrote PO mode in June 1995 with the collaboration of
Greg McGary, as a kind of contribution to Ulrich's package.  He also
gave a hand with the GNU `gettext' Texinfo manual.

   In 1997, Ulrich Drepper released the GNU libc 2.0, which included the
`gettext', `textdomain' and `bindtextdomain' functions.

   In 2000, Ulrich Drepper added plural form handling (the `ngettext'
function) to GNU libc.  Later, in 2001, he released GNU libc 2.2.x,
which is the first free C library with full internationalization
support.

   Ulrich being quite busy in his role of General Maintainer of GNU
libc, he handed over the GNU `gettext' maintenance to Bruno Haible in
2000.  Bruno added the plural form handling to the tools as well, added
support for UTF-8 and CJK locales, and wrote a few new tools for
manipulating PO files.


File: gettext.info,  Node: References,  Prev: History,  Up: Conclusion

Related Readings
================

   Eugene H. Dorr (`dorre@well.com') maintains an interesting
bibliography on internationalization matters, called
`Internationalization Reference List', which is available as:
     ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/i18n-books.txt

   Michael Gschwind (`mike@vlsivie.tuwien.ac.at') maintains a
Frequently Asked Questions (FAQ) list, entitled `Programming for
Internationalisation'.  This FAQ discusses writing programs which can
handle different language conventions, character sets, etc.; and is
applicable to all character set encodings, with particular emphasis on
ISO 8859-1.  It is regularly published in Usenet groups
`comp.unix.questions', `comp.std.internat',
`comp.software.international', `comp.lang.c', `comp.windows.x',
`comp.std.c', `comp.answers' and `news.answers'.  The home location of
this document is:
     ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/ISO-programming

   Patrick D'Cruze (`pdcruze@li.org') wrote a tutorial about NLS
matters, and Jochen Hein (`Hein@student.tu-clausthal.de') took over the
responsibility of maintaining it.  It may be found as:
     ftp://sunsite.unc.edu/pub/Linux/utils/nls/catalogs/Incoming/...
          ...locale-tutorial-0.8.txt.gz

This site is mirrored in:
     ftp://ftp.ibp.fr/pub/linux/sunsite/

   A French version of the same tutorial should be findable at:
     ftp://ftp.ibp.fr/pub/linux/french/docs/

together with French translations of many Linux-related documents.


File: gettext.info,  Node: Language Codes,  Next: Country Codes,  Prev: Conclusion,  Up: Top

Language Codes
**************

   The ISO 639 standard defines two character codes for many languages.
All abbreviations for languages used in the Translation Project should
come from this standard.

`aa'
     Afar.

`ab'
     Abkhazian.

`ae'
     Avestan.

`af'
     Afrikaans.

`am'
     Amharic.

`ar'
     Arabic.

`as'
     Assamese.

`ay'
     Aymara.

`az'
     Azerbaijani.

`ba'
     Bashkir.

`be'
     Byelorussian; Belarusian.

`bg'
     Bulgarian.

`bh'
     Bihari.

`bi'
     Bislama.

`bn'
     Bengali; Bangla.

`bo'
     Tibetan.

`br'
     Breton.

`bs'
     Bosnian.

`ca'
     Catalan.

`ce'
     Chechen.

`ch'
     Chamorro.

`co'
     Corsican.

`cs'
     Czech.

`cu'
     Church Slavic.

`cv'
     Chuvash.

`cy'
     Welsh.

`da'
     Danish.

`de'
     German.

`dz'
     Dzongkha; Bhutani.

`el'
     Greek.

`en'
     English.

`eo'
     Esperanto.

`es'
     Spanish.

`et'
     Estonian.

`eu'
     Basque.

`fa'
     Persian.

`fi'
     Finnish.

`fj'
     Fijian; Fiji.

`fo'
     Faroese.

`fr'
     French.

`fy'
     Frisian.

`ga'
     Irish.

`gd'
     Scots; Gaelic.

`gl'
     Gallegan; Galician.

`gn'
     Guarani.

`gu'
     Gujarati.

`gv'
     Manx.

`ha'
     Hausa (?).

`he'
     Hebrew (formerly iw).

`hi'
     Hindi.

`ho'
     Hiri Motu.

`hr'
     Croatian.

`hu'
     Hungarian.

`hy'
     Armenian.

`hz'
     Herero.

`ia'
     Interlingua.

`id'
     Indonesian (formerly in).

`ie'
     Interlingue.

`ik'
     Inupiak.

`io'
     Ido.

`is'
     Icelandic.

`it'
     Italian.

`iu'
     Inuktitut.

`ja'
     Japanese.

`jv'
     Javanese.

`ka'
     Georgian.

`ki'
     Kikuyu.

`kj'
     Kuanyama.

`kk'
     Kazakh.

`kl'
     Kalaallisut; Greenlandic.

`km'
     Khmer; Cambodian.

`kn'
     Kannada.

`ko'
     Korean.

`ks'
     Kashmiri.

`ku'
     Kurdish.

`kv'
     Komi.

`kw'
     Cornish.

`ky'
     Kirghiz.

`la'
     Latin.

`lb'
     Letzeburgesch.

`ln'
     Lingala.

`lo'
     Lao; Laotian.

`lt'
     Lithuanian.

`lv'
     Latvian; Lettish.

`mg'
     Malagasy.

`mh'
     Marshall.

`mi'
     Maori.

`mk'
     Macedonian.

`ml'
     Malayalam.

`mn'
     Mongolian.

`mo'
     Moldavian.

`mr'
     Marathi.

`ms'
     Malay.

`mt'
     Maltese.

`my'
     Burmese.

`na'
     Nauru.

`nb'
     Norwegian Bokmaal.

`nd'
     Ndebele, North.

`ne'
     Nepali.

`ng'
     Ndonga.

`nl'
     Dutch.

`nn'
     Norwegian Nynorsk.

`no'
     Norwegian.

`nr'
     Ndebele, South.

`nv'
     Navajo.

`ny'
     Chichewa; Nyanja.

`oc'
     Occitan; Provenc,al.

`om'
     (Afan) Oromo.

`or'
     Oriya.

`os'
     Ossetian; Ossetic.

`pa'
     Panjabi; Punjabi.

`pi'
     Pali.

`pl'
     Polish.

`ps'
     Pashto, Pushto.

`pt'
     Portuguese.

`qu'
     Quechua.

`rm'
     Rhaeto-Romance.

`rn'
     Rundi; Kirundi.

`ro'
     Romanian.

`ru'
     Russian.

`rw'
     Kinyarwanda.

`sa'
     Sanskrit.

`sc'
     Sardinian.

`sd'
     Sindhi.

`se'
     Northern Sami.

`sg'
     Sango; Sangro.

`si'
     Sinhalese.

`sk'
     Slovak.

`sl'
     Slovenian.

`sm'
     Samoan.

`sn'
     Shona.

`so'
     Somali.

`sq'
     Albanian.

`sr'
     Serbian.

`ss'
     Swati; Siswati.

`st'
     Sesotho; Sotho, Southern.

`su'
     Sundanese.

`sv'
     Swedish.

`sw'
     Swahili.

`ta'
     Tamil.

`te'
     Telugu.

`tg'
     Tajik.

`th'
     Thai.

`ti'
     Tigrinya.

`tk'
     Turkmen.

`tl'
     Tagalog.

`tn'
     Tswana; Setswana.

`to'
     Tonga (?).

`tr'
     Turkish.

`ts'
     Tsonga.

`tt'
     Tatar.

`tw'
     Twi.

`ty'
     Tahitian.

`ug'
     Uighur.

`uk'
     Ukrainian.

`ur'
     Urdu.

`uz'
     Uzbek.

`vi'
     Vietnamese.

`vo'
     Volapu"k; Volapuk.

`wa'
     Walloon.

`wo'
     Wolof.

`xh'
     Xhosa.

`yi'
     Yiddish (formerly ji).

`yo'
     Yoruba.

`za'
     Zhuang.

`zh'
     Chinese.

`zu'
     Zulu.


File: gettext.info,  Node: Country Codes,  Next: Program Index,  Prev: Language Codes,  Up: Top

Country Codes
*************

   The ISO 3166 standard defines two character codes for many countries
and territories.  All abbreviations for countries used in the
Translation Project should come from this standard.

`AD'
     Andorra.

`AE'
     United Arab Emirates.

`AF'
     Afghanistan.

`AG'
     Antigua and Barbuda.

`AI'
     Anguilla.

`AL'
     Albania.

`AM'
     Armenia.

`AN'
     Netherlands Antilles.

`AO'
     Angola.

`AQ'
     Antarctica.

`AR'
     Argentina.

`AS'
     Samoa (American).

`AT'
     Austria.

`AU'
     Australia.

`AW'
     Aruba.

`AZ'
     Azerbaijan.

`BA'
     Bosnia and Herzegovina.

`BB'
     Barbados.

`BD'
     Bangladesh.

`BE'
     Belgium.

`BF'
     Burkina Faso.

`BG'
     Bulgaria.

`BH'
     Bahrain.

`BI'
     Burundi.

`BJ'
     Benin.

`BM'
     Bermuda.

`BN'
     Brunei.

`BO'
     Bolivia.

`BR'
     Brazil.

`BS'
     Bahamas.

`BT'
     Bhutan.

`BV'
     Bouvet Island.

`BW'
     Botswana.

`BY'
     Belarus.

`BZ'
     Belize.

`CA'
     Canada.

`CC'
     Cocos (Keeling) Islands.

`CD'
     Congo (Dem. Rep.).

`CF'
     Central African Rep..

`CG'
     Congo (Rep.).

`CH'
     Switzerland.

`CI'
     Cote d'Ivoire.

`CK'
     Cook Islands.

`CL'
     Chile.

`CM'
     Cameroon.

`CN'
     China.

`CO'
     Colombia.

`CR'
     Costa Rica.

`CU'
     Cuba.

`CV'
     Cape Verde.

`CX'
     Christmas Island.

`CY'
     Cyprus.

`CZ'
     Czech Republic.

`DE'
     Germany.

`DJ'
     Djibouti.

`DK'
     Denmark.

`DM'
     Dominica.

`DO'
     Dominican Republic.

`DZ'
     Algeria.

`EC'
     Ecuador.

`EE'
     Estonia.

`EG'
     Egypt.

`EH'
     Western Sahara.

`ER'
     Eritrea.

`ES'
     Spain.

`ET'
     Ethiopia.

`FI'
     Finland.

`FJ'
     Fiji.

`FK'
     Falkland Islands.

`FM'
     Micronesia.

`FO'
     Faeroe Islands.

`FR'
     France.

`GA'
     Gabon.

`GB'
     Britain (UK).

`GD'
     Grenada.

`GE'
     Georgia.

`GF'
     French Guiana.

`GH'
     Ghana.

`GI'
     Gibraltar.

`GL'
     Greenland.

`GM'
     Gambia.

`GN'
     Guinea.

`GP'
     Guadeloupe.

`GQ'
     Equatorial Guinea.

`GR'
     Greece.

`GS'
     South Georgia and the South Sandwich Islands.

`GT'
     Guatemala.

`GU'
     Guam.

`GW'
     Guinea-Bissau.

`GY'
     Guyana.

`HK'
     Hong Kong.

`HM'
     Heard Island and McDonald Islands.

`HN'
     Honduras.

`HR'
     Croatia.

`HT'
     Haiti.

`HU'
     Hungary.

`ID'
     Indonesia.

`IE'
     Ireland.

`IL'
     Israel.

`IN'
     India.

`IO'
     British Indian Ocean Territory.

`IQ'
     Iraq.

`IR'
     Iran.

`IS'
     Iceland.

`IT'
     Italy.

`JM'
     Jamaica.

`JO'
     Jordan.

`JP'
     Japan.

`KE'
     Kenya.

`KG'
     Kyrgyzstan.

`KH'
     Cambodia.

`KI'
     Kiribati.

`KM'
     Comoros.

`KN'
     St Kitts and Nevis.

`KP'
     Korea (North).

`KR'
     Korea (South).

`KW'
     Kuwait.

`KY'
     Cayman Islands.

`KZ'
     Kazakhstan.

`LA'
     Laos.

`LB'
     Lebanon.

`LC'
     St Lucia.

`LI'
     Liechtenstein.

`LK'
     Sri Lanka.

`LR'
     Liberia.

`LS'
     Lesotho.

`LT'
     Lithuania.

`LU'
     Luxembourg.

`LV'
     Latvia.

`LY'
     Libya.

`MA'
     Morocco.

`MC'
     Monaco.

`MD'
     Moldova.

`MG'
     Madagascar.

`MH'
     Marshall Islands.

`MK'
     Macedonia.

`ML'
     Mali.

`MM'
     Myanmar (Burma).

`MN'
     Mongolia.

`MO'
     Macao.

`MP'
     Northern Mariana Islands.

`MQ'
     Martinique.

`MR'
     Mauritania.

`MS'
     Montserrat.

`MT'
     Malta.

`MU'
     Mauritius.

`MV'
     Maldives.

`MW'
     Malawi.

`MX'
     Mexico.

`MY'
     Malaysia.

`MZ'
     Mozambique.

`NA'
     Namibia.

`NC'
     New Caledonia.

`NE'
     Niger.

`NF'
     Norfolk Island.

`NG'
     Nigeria.

`NI'
     Nicaragua.

`NL'
     Netherlands.

`NO'
     Norway.

`NP'
     Nepal.

`NR'
     Nauru.

`NU'
     Niue.

`NZ'
     New Zealand.

`OM'
     Oman.

`PA'
     Panama.

`PE'
     Peru.

`PF'
     French Polynesia.

`PG'
     Papua New Guinea.

`PH'
     Philippines.

`PK'
     Pakistan.

`PL'
     Poland.

`PM'
     St Pierre and Miquelon.

`PN'
     Pitcairn.

`PR'
     Puerto Rico.

`PS'
     Palestine.

`PT'
     Portugal.

`PW'
     Palau.

`PY'
     Paraguay.

`QA'
     Qatar.

`RE'
     Reunion.

`RO'
     Romania.

`RU'
     Russia.

`RW'
     Rwanda.

`SA'
     Saudi Arabia.

`SB'
     Solomon Islands.

`SC'
     Seychelles.

`SD'
     Sudan.

`SE'
     Sweden.

`SG'
     Singapore.

`SH'
     St Helena.

`SI'
     Slovenia.

`SJ'
     Svalbard and Jan Mayen.

`SK'
     Slovakia.

`SL'
     Sierra Leone.

`SM'
     San Marino.

`SN'
     Senegal.

`SO'
     Somalia.

`SR'
     Suriname.

`ST'
     Sao Tome and Principe.

`SV'
     El Salvador.

`SY'
     Syria.

`SZ'
     Swaziland.

`TC'
     Turks and Caicos Is.

`TD'
     Chad.

`TF'
     French Southern and Antarctic Lands.

`TG'
     Togo.

`TH'
     Thailand.

`TJ'
     Tajikistan.

`TK'
     Tokelau.

`TM'
     Turkmenistan.

`TN'
     Tunisia.

`TO'
     Tonga.

`TP'
     East Timor.

`TR'
     Turkey.

`TT'
     Trinidad and Tobago.

`TV'
     Tuvalu.

`TW'
     Taiwan.

`TZ'
     Tanzania.

`UA'
     Ukraine.

`UG'
     Uganda.

`UM'
     US minor outlying islands.

`US'
     United States.

`UY'
     Uruguay.

`UZ'
     Uzbekistan.

`VA'
     Vatican City.

`VC'
     St Vincent.

`VE'
     Venezuela.

`VG'
     Virgin Islands (UK).

`VI'
     Virgin Islands (US).

`VN'
     Vietnam.

`VU'
     Vanuatu.

`WF'
     Wallis and Futuna.

`WS'
     Samoa (Western).

`YE'
     Yemen.

`YT'
     Mayotte.

`YU'
     Yugoslavia.

`ZA'
     South Africa.

`ZM'
     Zambia.

`ZW'
     Zimbabwe.


File: gettext.info,  Node: Program Index,  Next: Option Index,  Prev: Country Codes,  Up: Top

Program Index
*************

* Menu:

* autopoint:                             autopoint Invocation.
* gettext <1>:                           bash.
* gettext:                               sh.
* gettextize:                            gettextize Invocation.
* msgattrib:                             msgattrib Invocation.
* msgcat:                                msgcat Invocation.
* msgcmp:                                msgcmp Invocation.
* msgcomm:                               msgcomm Invocation.
* msgconv:                               msgconv Invocation.
* msgen:                                 msgen Invocation.
* msgexec:                               msgexec Invocation.
* msgfilter:                             msgfilter Invocation.
* msgfmt:                                msgfmt Invocation.
* msggrep:                               msggrep Invocation.
* msginit:                               msginit Invocation.
* msgmerge:                              msgmerge Invocation.
* msgunfmt:                              msgunfmt Invocation.
* msguniq:                               msguniq Invocation.
* ngettext <1>:                          bash.
* ngettext:                              sh.
* xgettext:                              xgettext Invocation.

