\chapentry {Introduction}{1}{1} \secentry {The Purpose of GNU \code {gettext}}{1}{1}{1} \secentry {I18n, L10n, and Such}{1}{2}{2} \secentry {Aspects in Native Language Support}{1}{3}{3} \secentry {Files Conveying Translations}{1}{4}{5} \secentry {Overview of GNU \code {gettext}}{1}{5}{5} \chapentry {PO Files and PO Mode Basics}{2}{9} \secentry {Completing GNU \code {gettext} Installation}{2}{1}{9} \secentry {The Format of PO Files}{2}{2}{9} \secentry {Main Commands}{2}{3}{11} \secentry {Entry Positioning}{2}{4}{12} \secentry {Normalizing Strings in Entries}{2}{5}{14} \chapentry {Preparing Program Sources}{3}{16} \secentry {Triggering \code {gettext} Operations}{3}{1}{16} \secentry {How Marks Appears in Sources}{3}{2}{17} \secentry {Marking Translatable Strings}{3}{3}{18} \secentry {Special Cases of Translatable Strings}{3}{4}{20} \chapentry {Making the Initial PO File}{4}{22} \secentry {Invoking the \code {xgettext} Program}{4}{1}{22} \secentry {C Sources Context}{4}{2}{23} \secentry {Using Translation Compendiums}{4}{3}{25} \chapentry {Updating Existing PO Files}{5}{26} \secentry {Invoking the \code {tupdate} Program}{5}{1}{26} \secentry {Untranslated Entries}{5}{2}{26} \secentry {Obsolete Entries}{5}{3}{27} \secentry {Modifying Translations}{5}{4}{28} \secentry {Modifying Comments}{5}{5}{30} \secentry {Consulting Auxiliary PO Files}{5}{6}{31} \chapentry {Producing Binary MO Files}{6}{32} \secentry {Invoking the \code {msgfmt} Program}{6}{1}{32} \secentry {The Format of GNU MO Files}{6}{2}{33} \chapentry {The User's View}{7}{36} \secentry {The Current \file {NLS} Matrix for GNU}{7}{1}{36} \secentry {Magic for Installers}{7}{2}{36} \secentry {Magic for End Users}{7}{3}{37} \chapentry {The Programmer's View}{8}{38} \secentry {About \code {catgets}}{8}{1}{38} \subsecentry {The Interface}{8}{1}{1}{38} \subsecentry {Problems with the \code {catgets} Interface?!}{8}{1}{2}{39} \secentry {About \code {gettext}}{8}{2}{39} \subsecentry {The Interface}{8}{2}{1}{39} \subsecentry {Solving Ambiguities}{8}{2}{2}{40} \subsecentry {Locating Message Catalog Files}{8}{2}{3}{41} \subsecentry {Optimization of the *gettext functions}{8}{2}{4}{41} \secentry {Comparing the Two Interfaces}{8}{3}{43} \secentry {Using libintl.a in own programs}{8}{4}{44} \secentry {Being a \code {gettext} grok}{8}{5}{44} \secentry {Temporary Notes for the Programmers Chapter}{8}{6}{45} \subsecentry {Temporary - Two Possible Implementations}{8}{6}{1}{45} \subsecentry {Temporary - About \code {catgets}}{8}{6}{2}{46} \subsecentry {Temporary - Why a single implementation}{8}{6}{3}{46} \subsecentry {Temporary - Double layer solution}{8}{6}{4}{47} \subsecentry {Temporary - Notes}{8}{6}{5}{47} \chapentry {The Translator's View}{9}{48} \secentry {Introduction 0}{9}{1}{48} \secentry {Introduction 1}{9}{2}{48} \secentry {Discussions}{9}{3}{49} \secentry {Organization}{9}{4}{50} \subsecentry {Central Coordination}{9}{4}{1}{50} \subsecentry {National Teams}{9}{4}{2}{51} \subsubsecentry {Sub-Cultures} {9}{4}{2}{1} {51} \subsubsecentry {Organizational Ideas} {9}{4}{2}{2} {52} \subsecentry {Mailing Lists}{9}{4}{3}{52} \secentry {Information Flow}{9}{5}{53} \chapentry {The Maintainer's View}{10}{54} \secentry {Flat or Non-Flat Directory Structures}{10}{1}{54} \secentry {Prerequisite Works}{10}{2}{54} \secentry {Invoking the \code {gettextize} Program}{10}{3}{55} \secentry {Files You Must Create or Alter}{10}{4}{56} \subsecentry {\file {POTFILES} in \file {po/}}{10}{4}{1}{57} \subsecentry {\file {configure.in} at top level}{10}{4}{2}{57} \subsecentry {\file {aclocal.m4} at top level}{10}{4}{3}{58} \subsecentry {\file {acconfig.h} at top level}{10}{4}{4}{59} \subsecentry {\file {Makefile.in} at top level}{10}{4}{5}{59} \subsecentry {\file {Makefile.in} in \file {src/}}{10}{4}{6}{60} \chapentry {Concluding Remarks}{11}{61} \secentry {History of GNU \code {gettext}}{11}{1}{61} \secentry {Related Readings}{11}{2}{62}