\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 PO mode Commands}{2}{3}{11} \secentry{Entry Positioning}{2}{4}{13} \secentry{Normalizing Strings in Entries}{2}{5}{14} \chapentry{Preparing Program Sources}{3}{17} \secentry{Triggering \code {gettext} Operations}{3}{1}{17} \secentry{How Marks Appears in Sources}{3}{2}{18} \secentry{Marking Translatable Strings}{3}{3}{19} \secentry{Special Comments preceding Keywords}{3}{4}{21} \secentry{Special Cases of Translatable Strings}{3}{5}{22} \chapentry{Making the Initial PO File}{4}{24} \secentry{Invoking the \code {xgettext} Program}{4}{1}{24} \secentry{C Sources Context}{4}{2}{26} \secentry{Using Translation Compendiums}{4}{3}{27} \chapentry{Updating Existing PO Files}{5}{28} \secentry{Invoking the \code {msgmerge} Program}{5}{1}{28} \secentry{Translated Entries}{5}{2}{28} \secentry{Fuzzy Entries}{5}{3}{28} \secentry{Untranslated Entries}{5}{4}{29} \secentry{Obsolete Entries}{5}{5}{30} \secentry{Modifying Translations}{5}{6}{31} \secentry{Modifying Comments}{5}{7}{33} \secentry{Consulting Auxiliary PO Files}{5}{8}{35} \chapentry{Producing Binary MO Files}{6}{36} \secentry{Invoking the \code {msgfmt} Program}{6}{1}{36} \secentry{The Format of GNU MO Files}{6}{2}{37} \chapentry{The User's View}{7}{40} \secentry{The Current \file {ABOUT-NLS} Matrix}{7}{1}{40} \secentry{Magic for Installers}{7}{2}{40} \secentry{Magic for End Users}{7}{3}{41} \chapentry{The Programmer's View}{8}{42} \secentry{About \code {catgets}}{8}{1}{42} \subsecentry{The Interface}{8}{1}{1}{42} \subsecentry{Problems with the \code {catgets} Interface?!}{8}{1}{2}{43} \secentry{About \code {gettext}}{8}{2}{43} \subsecentry{The Interface}{8}{2}{1}{43} \subsecentry{Solving Ambiguities}{8}{2}{2}{44} \subsecentry{Locating Message Catalog Files}{8}{2}{3}{45} \subsecentry{Optimization of the *gettext functions}{8}{2}{4}{45} \secentry{Comparing the Two Interfaces}{8}{3}{47} \secentry{Using libintl.a in own programs}{8}{4}{49} \secentry{Being a \code {gettext} grok}{8}{5}{49} \secentry{Temporary Notes for the Programmers Chapter}{8}{6}{50} \subsecentry{Temporary - Two Possible Implementations}{8}{6}{1}{50} \subsecentry{Temporary - About \code {catgets}}{8}{6}{2}{50} \subsecentry{Temporary - Why a single implementation}{8}{6}{3}{51} \subsecentry{Temporary - Notes}{8}{6}{4}{51} \chapentry{The Translator's View}{9}{52} \secentry{Introduction 0}{9}{1}{52} \secentry{Introduction 1}{9}{2}{52} \secentry{Discussions}{9}{3}{53} \secentry{Organization}{9}{4}{54} \subsecentry{Central Coordination}{9}{4}{1}{54} \subsecentry{National Teams}{9}{4}{2}{55} \subsubsecentry{Sub-Cultures}{9}{4}{2}{1}{55} \subsubsecentry{Organizational Ideas}{9}{4}{2}{2}{56} \subsecentry{Mailing Lists}{9}{4}{3}{56} \secentry{Information Flow}{9}{5}{57} \chapentry{The Maintainer's View}{10}{58} \secentry{Flat or Non-Flat Directory Structures}{10}{1}{58} \secentry{Prerequisite Works}{10}{2}{58} \secentry{Invoking the \code {gettextize} Program}{10}{3}{60} \secentry{Files You Must Create or Alter}{10}{4}{61} \subsecentry{\file {POTFILES.in} in \file {po/}}{10}{4}{1}{61} \subsecentry{\file {configure.in} at top level}{10}{4}{2}{61} \subsecentry{\file {aclocal.m4} at top level}{10}{4}{3}{62} \subsecentry{\file {acconfig.h} at top level}{10}{4}{4}{63} \subsecentry{\file {Makefile.in} at top level}{10}{4}{5}{63} \subsecentry{\file {Makefile.in} in \file {src/}}{10}{4}{6}{64} \chapentry{Concluding Remarks}{11}{65} \secentry{History of GNU \code {gettext}}{11}{1}{65} \secentry{Related Readings}{11}{2}{66} \chapentry{Country Codes}{Appendix{} \char 65}{67}