summaryrefslogtreecommitdiff
path: root/package/gettext-tiny
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2013-10-04 18:42:48 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2013-10-04 18:42:48 +0200
commitf057e4a2dc1d6d2db4ec7750a43054fe15a1c71e (patch)
treef9186263483b6dbc68bce8c1fa1ef36f3e011316 /package/gettext-tiny
parentfa9bd9d822a4053714e9448adcc591b7fe38c34e (diff)
use gettext-tiny instead of gettext
Diffstat (limited to 'package/gettext-tiny')
-rw-r--r--package/gettext-tiny/Makefile7
-rw-r--r--package/gettext-tiny/patches/patch-Makefile37
-rw-r--r--package/gettext-tiny/src/LICENSE21
-rw-r--r--package/gettext-tiny/src/Makefile73
-rwxr-xr-xpackage/gettext-tiny/src/create-dist.sh21
-rw-r--r--package/gettext-tiny/src/docs/gettext.html18036
-rw-r--r--package/gettext-tiny/src/docs/msgfmt.txt74
-rw-r--r--package/gettext-tiny/src/docs/msgmerge.txt81
-rw-r--r--package/gettext-tiny/src/docs/xgettext.txt101
-rw-r--r--package/gettext-tiny/src/include/libintl.h61
-rw-r--r--package/gettext-tiny/src/libintl/libintl.c82
-rw-r--r--package/gettext-tiny/src/src/StringEscape.c111
-rw-r--r--package/gettext-tiny/src/src/StringEscape.h7
-rw-r--r--package/gettext-tiny/src/src/msgfmt.c278
-rw-r--r--package/gettext-tiny/src/src/msgmerge.c222
-rw-r--r--package/gettext-tiny/src/src/poparser.c144
-rw-r--r--package/gettext-tiny/src/src/poparser.h36
-rwxr-xr-xpackage/gettext-tiny/src/src/xgettext.sh112
18 files changed, 41 insertions, 19463 deletions
diff --git a/package/gettext-tiny/Makefile b/package/gettext-tiny/Makefile
index a61061cd6..181e5f974 100644
--- a/package/gettext-tiny/Makefile
+++ b/package/gettext-tiny/Makefile
@@ -4,14 +4,15 @@
include $(TOPDIR)/rules.mk
PKG_NAME:= gettext-tiny
-PKG_VERSION:= 0.1
+PKG_VERSION:= 0.0.3
PKG_RELEASE:= 1
+PKG_MD5SUM:= 3af6fd8a9042603b61f634b1c6f49e7e
PKG_DESCR:= Gettext stub and replacement
PKG_SECTION:= libs
PKG_URL:= https://github.com/rofl0r/gettext-tiny
+PKG_SITES:= http://ftp.barfooze.de/pub/sabotage/tarballs/
-WRKDIST= ${WRKDIR}/${PKG_NAME}-${PKG_VERSION}
-NO_DISTFILES:= 1
+DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.bz2
include $(TOPDIR)/mk/package.mk
diff --git a/package/gettext-tiny/patches/patch-Makefile b/package/gettext-tiny/patches/patch-Makefile
new file mode 100644
index 000000000..45cbae4dc
--- /dev/null
+++ b/package/gettext-tiny/patches/patch-Makefile
@@ -0,0 +1,37 @@
+--- gettext-tiny-0.0.3.orig/Makefile 2013-06-30 06:48:42.000000000 +0200
++++ gettext-tiny-0.0.3/Makefile 2013-10-04 11:58:03.000000000 +0200
+@@ -1,4 +1,4 @@
+-prefix=/usr/local
++prefix=/usr
+ bindir=$(prefix)/bin
+ includedir=$(prefix)/include
+ libdir=$(prefix)/lib
+@@ -19,7 +19,7 @@ ALL_INCLUDES = $(HEADERS)
+ ALL_LIBS=libintl.a
+ ALL_TOOLS=msgfmt msgmerge xgettext
+
+-CFLAGS=-O0 -fPIC
++CFLAGS?=-O0 -fPIC
+
+ AR ?= $(CROSS_COMPILE)ar
+ RANLIB ?= $(CROSS_COMPILE)ranlib
+@@ -56,13 +56,16 @@ xgettext:
+ cp src/xgettext.sh ./xgettext
+
+ $(DESTDIR)$(libdir)/%.a: %.a
+- install -D -m 755 $< $@
++ mkdir -p $(DESTDIR)$(libdir)
++ install -m 755 $< $@
+
+ $(DESTDIR)$(includedir)/%.h: include/%.h
+- install -D -m 644 $< $@
++ mkdir -p $(DESTDIR)$(includedir)
++ install -m 644 $< $@
+
+ $(DESTDIR)$(bindir)/%: %
+- install -D -m 755 $< $@
++ mkdir -p $(DESTDIR)$(bindir)
++ install -m 755 $< $@
+
+ .PHONY: all clean install
+
diff --git a/package/gettext-tiny/src/LICENSE b/package/gettext-tiny/src/LICENSE
deleted file mode 100644
index 465ec8a88..000000000
--- a/package/gettext-tiny/src/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (C) 2012 rofl0r
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
diff --git a/package/gettext-tiny/src/Makefile b/package/gettext-tiny/src/Makefile
deleted file mode 100644
index 6709ad1e8..000000000
--- a/package/gettext-tiny/src/Makefile
+++ /dev/null
@@ -1,73 +0,0 @@
-prefix=/usr
-bindir=$(prefix)/bin
-includedir=$(prefix)/include
-libdir=$(prefix)/lib
-sysconfdir=$(prefix)/etc
-
-LIBSRC = $(sort $(wildcard libintl/*.c))
-PROGSRC = $(sort $(wildcard src/*.c))
-
-PARSEROBJS = src/poparser.o src/StringEscape.o
-PROGOBJS = $(PROGSRC:.c=.o)
-LIBOBJS = $(LIBSRC:.c=.o)
-OBJS = $(PROGOBJS) $(LIBOBJS)
-
-
-HEADERS = libintl.h
-ALL_INCLUDES = $(HEADERS)
-
-ALL_LIBS=libintl.a
-ALL_TOOLS=msgfmt msgmerge xgettext
-
-CFLAGS?=-O0 -fPIC
-
-AR ?= $(CROSS_COMPILE)ar
-RANLIB ?= $(CROSS_COMPILE)ranlib
-CC ?= $(CROSS_COMPILE)cc
-
--include config.mak
-
-BUILDCFLAGS=$(CFLAGS)
-
-all: $(ALL_LIBS) $(ALL_TOOLS)
-
-install: $(ALL_LIBS:lib%=$(DESTDIR)$(libdir)/lib%) $(ALL_INCLUDES:%=$(DESTDIR)$(includedir)/%) $(ALL_TOOLS:%=$(DESTDIR)$(bindir)/%)
-
-clean:
- rm -f $(ALL_LIBS)
- rm -f $(OBJS)
- rm -f $(ALL_TOOLS)
-
-%.o: %.c
- $(CC) $(BUILDCFLAGS) -c -o $@ $<
-
-libintl.a: $(LIBOBJS)
- rm -f $@
- $(AR) rc $@ $(LIBOBJS)
- $(RANLIB) $@
-
-msgmerge: $(OBJS)
- $(CC) $(LDFLAGS) -static -o $@ src/msgmerge.o $(PARSEROBJS)
-
-msgfmt: $(OBJS)
- $(CC) $(LDFLAGS) -static -o $@ src/msgfmt.o $(PARSEROBJS)
-
-xgettext:
- cp src/xgettext.sh ./xgettext
-
-$(DESTDIR)$(libdir)/%.a: %.a
- mkdir -p $(DESTDIR)$(libdir)
- install -m 755 $< $@
-
-$(DESTDIR)$(includedir)/%.h: include/%.h
- mkdir -p $(DESTDIR)$(includedir)
- install -m 644 $< $@
-
-$(DESTDIR)$(bindir)/%: %
- mkdir -p $(DESTDIR)$(bindir)
- install -m 755 $< $@
-
-.PHONY: all clean install
-
-
-
diff --git a/package/gettext-tiny/src/create-dist.sh b/package/gettext-tiny/src/create-dist.sh
deleted file mode 100755
index b1d1b7a89..000000000
--- a/package/gettext-tiny/src/create-dist.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-if [[ -z "$VER" ]] ; then
- echo set VER!
- exit
-fi
-me=`pwd`
-
-proj=gettext-tiny
-projver=${proj}-${VER}
-
-tempdir=/tmp/${proj}-0000
-rm -rf $tempdir
-mkdir -p $tempdir
-
-cd $tempdir
-git clone http://github.com/rofl0r/$proj $projver
-rm -rf $projver/.git
-rm -rf $projver/docs
-
-tar cjf $proj.tar.bz2 $projver/
-mv $proj.tar.bz2 $me/$projver.tar.bz2
diff --git a/package/gettext-tiny/src/docs/gettext.html b/package/gettext-tiny/src/docs/gettext.html
deleted file mode 100644
index 05d4c9c43..000000000
--- a/package/gettext-tiny/src/docs/gettext.html
+++ /dev/null
@@ -1,18036 +0,0 @@
-<html lang="en">
-<head>
-<title>GNU `gettext' utilities</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta name="description" content="GNU `gettext' utilities">
-<meta name="generator" content="makeinfo 4.13">
-<link title="Top" rel="top" href="#Top">
-<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<style type="text/css"><!--
- pre.display { font-family:inherit }
- pre.format { font-family:inherit }
- pre.smalldisplay { font-family:inherit; font-size:smaller }
- pre.smallformat { font-family:inherit; font-size:smaller }
- pre.smallexample { font-size:smaller }
- pre.smalllisp { font-size:smaller }
- span.sc { font-variant:small-caps }
- span.roman { font-family:serif; font-weight:normal; }
- span.sansserif { font-family:sans-serif; font-weight:normal; }
---></style>
-</head>
-<body>
-<h1 class="settitle">GNU `gettext' utilities</h1>
- <div class="contents">
-<h2>Table of Contents</h2>
-<ul>
-<li><a name="toc_Top" href="#Top">GNU <code>gettext</code> utilities</a>
-<li><a name="toc_Introduction" href="#Introduction">1 Introduction</a>
-<ul>
-<li><a href="#Why">1.1 The Purpose of GNU <code>gettext</code></a>
-<li><a href="#Concepts">1.2 I18n, L10n, and Such</a>
-<li><a href="#Aspects">1.3 Aspects in Native Language Support</a>
-<li><a href="#Files">1.4 Files Conveying Translations</a>
-<li><a href="#Overview">1.5 Overview of GNU <code>gettext</code></a>
-</li></ul>
-<li><a name="toc_Users" href="#Users">2 The User's View</a>
-<ul>
-<li><a href="#System-Installation">2.1 Operating System Installation</a>
-<li><a href="#Setting-the-GUI-Locale">2.2 Setting the Locale Used by GUI Programs</a>
-<li><a href="#Setting-the-POSIX-Locale">2.3 Setting the Locale through Environment Variables</a>
-<ul>
-<li><a href="#Locale-Names">2.3.1 Locale Names</a>
-<li><a href="#Locale-Environment-Variables">2.3.2 Locale Environment Variables</a>
-<li><a href="#The-LANGUAGE-variable">2.3.3 Specifying a Priority List of Languages</a>
-</li></ul>
-<li><a href="#Installing-Localizations">2.4 Installing Translations for Particular Programs</a>
-</li></ul>
-<li><a name="toc_PO-Files" href="#PO-Files">3 The Format of PO Files</a>
-<li><a name="toc_Sources" href="#Sources">4 Preparing Program Sources</a>
-<ul>
-<li><a href="#Importing">4.1 Importing the <code>gettext</code> declaration</a>
-<li><a href="#Triggering">4.2 Triggering <code>gettext</code> Operations</a>
-<li><a href="#Preparing-Strings">4.3 Preparing Translatable Strings</a>
-<li><a href="#Mark-Keywords">4.4 How Marks Appear in Sources</a>
-<li><a href="#Marking">4.5 Marking Translatable Strings</a>
-<li><a href="#c_002dformat-Flag">4.6 Special Comments preceding Keywords</a>
-<li><a href="#Special-cases">4.7 Special Cases of Translatable Strings</a>
-<li><a href="#Bug-Report-Address">4.8 Letting Users Report Translation Bugs</a>
-<li><a href="#Names">4.9 Marking Proper Names for Translation</a>
-<li><a href="#Libraries">4.10 Preparing Library Sources</a>
-</li></ul>
-<li><a name="toc_Template" href="#Template">5 Making the PO Template File</a>
-<ul>
-<li><a href="#xgettext-Invocation">5.1 Invoking the <code>xgettext</code> Program</a>
-<ul>
-<li><a href="#xgettext-Invocation">5.1.1 Input file location</a>
-<li><a href="#xgettext-Invocation">5.1.2 Output file location</a>
-<li><a href="#xgettext-Invocation">5.1.3 Choice of input file language</a>
-<li><a href="#xgettext-Invocation">5.1.4 Input file interpretation</a>
-<li><a href="#xgettext-Invocation">5.1.5 Operation mode</a>
-<li><a href="#xgettext-Invocation">5.1.6 Language specific options</a>
-<li><a href="#xgettext-Invocation">5.1.7 Output details</a>
-<li><a href="#xgettext-Invocation">5.1.8 Informative output</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_Creating" href="#Creating">6 Creating a New PO File</a>
-<ul>
-<li><a href="#msginit-Invocation">6.1 Invoking the <code>msginit</code> Program</a>
-<ul>
-<li><a href="#msginit-Invocation">6.1.1 Input file location</a>
-<li><a href="#msginit-Invocation">6.1.2 Output file location</a>
-<li><a href="#msginit-Invocation">6.1.3 Input file syntax</a>
-<li><a href="#msginit-Invocation">6.1.4 Output details</a>
-<li><a href="#msginit-Invocation">6.1.5 Informative output</a>
-</li></ul>
-<li><a href="#Header-Entry">6.2 Filling in the Header Entry</a>
-</li></ul>
-<li><a name="toc_Updating" href="#Updating">7 Updating Existing PO Files</a>
-<ul>
-<li><a href="#msgmerge-Invocation">7.1 Invoking the <code>msgmerge</code> Program</a>
-<ul>
-<li><a href="#msgmerge-Invocation">7.1.1 Input file location</a>
-<li><a href="#msgmerge-Invocation">7.1.2 Operation mode</a>
-<li><a href="#msgmerge-Invocation">7.1.3 Output file location</a>
-<li><a href="#msgmerge-Invocation">7.1.4 Output file location in update mode</a>
-<li><a href="#msgmerge-Invocation">7.1.5 Operation modifiers</a>
-<li><a href="#msgmerge-Invocation">7.1.6 Input file syntax</a>
-<li><a href="#msgmerge-Invocation">7.1.7 Output details</a>
-<li><a href="#msgmerge-Invocation">7.1.8 Informative output</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_Editing" href="#Editing">8 Editing PO Files</a>
-<ul>
-<li><a href="#KBabel">8.1 KDE's PO File Editor</a>
-<li><a href="#Gtranslator">8.2 GNOME's PO File Editor</a>
-<li><a href="#PO-Mode">8.3 Emacs's PO File Editor</a>
-<ul>
-<li><a href="#Installation">8.3.1 Completing GNU <code>gettext</code> Installation</a>
-<li><a href="#Main-PO-Commands">8.3.2 Main PO mode Commands</a>
-<li><a href="#Entry-Positioning">8.3.3 Entry Positioning</a>
-<li><a href="#Normalizing">8.3.4 Normalizing Strings in Entries</a>
-<li><a href="#Translated-Entries">8.3.5 Translated Entries</a>
-<li><a href="#Fuzzy-Entries">8.3.6 Fuzzy Entries</a>
-<li><a href="#Untranslated-Entries">8.3.7 Untranslated Entries</a>
-<li><a href="#Obsolete-Entries">8.3.8 Obsolete Entries</a>
-<li><a href="#Modifying-Translations">8.3.9 Modifying Translations</a>
-<li><a href="#Modifying-Comments">8.3.10 Modifying Comments</a>
-<li><a href="#Subedit">8.3.11 Details of Sub Edition</a>
-<li><a href="#C-Sources-Context">8.3.12 C Sources Context</a>
-<li><a href="#Auxiliary">8.3.13 Consulting Auxiliary PO Files</a>
-</li></ul>
-<li><a href="#Compendium">8.4 Using Translation Compendia</a>
-<ul>
-<li><a href="#Creating-Compendia">8.4.1 Creating Compendia</a>
-<ul>
-<li><a href="#Creating-Compendia">8.4.1.1 Concatenate PO Files</a>
-<li><a href="#Creating-Compendia">8.4.1.2 Extract a Message Subset from a PO File</a>
-</li></ul>
-<li><a href="#Using-Compendia">8.4.2 Using Compendia</a>
-<ul>
-<li><a href="#Using-Compendia">8.4.2.1 Initialize a New Translation File</a>
-<li><a href="#Using-Compendia">8.4.2.2 Update an Existing Translation File</a>
-</li></ul>
-</li></ul>
-</li></ul>
-<li><a name="toc_Manipulating" href="#Manipulating">9 Manipulating PO Files</a>
-<ul>
-<li><a href="#msgcat-Invocation">9.1 Invoking the <code>msgcat</code> Program</a>
-<ul>
-<li><a href="#msgcat-Invocation">9.1.1 Input file location</a>
-<li><a href="#msgcat-Invocation">9.1.2 Output file location</a>
-<li><a href="#msgcat-Invocation">9.1.3 Message selection</a>
-<li><a href="#msgcat-Invocation">9.1.4 Input file syntax</a>
-<li><a href="#msgcat-Invocation">9.1.5 Output details</a>
-<li><a href="#msgcat-Invocation">9.1.6 Informative output</a>
-</li></ul>
-<li><a href="#msgconv-Invocation">9.2 Invoking the <code>msgconv</code> Program</a>
-<ul>
-<li><a href="#msgconv-Invocation">9.2.1 Input file location</a>
-<li><a href="#msgconv-Invocation">9.2.2 Output file location</a>
-<li><a href="#msgconv-Invocation">9.2.3 Conversion target</a>
-<li><a href="#msgconv-Invocation">9.2.4 Input file syntax</a>
-<li><a href="#msgconv-Invocation">9.2.5 Output details</a>
-<li><a href="#msgconv-Invocation">9.2.6 Informative output</a>
-</li></ul>
-<li><a href="#msggrep-Invocation">9.3 Invoking the <code>msggrep</code> Program</a>
-<ul>
-<li><a href="#msggrep-Invocation">9.3.1 Input file location</a>
-<li><a href="#msggrep-Invocation">9.3.2 Output file location</a>
-<li><a href="#msggrep-Invocation">9.3.3 Message selection</a>
-<li><a href="#msggrep-Invocation">9.3.4 Input file syntax</a>
-<li><a href="#msggrep-Invocation">9.3.5 Output details</a>
-<li><a href="#msggrep-Invocation">9.3.6 Informative output</a>
-<li><a href="#msggrep-Invocation">9.3.7 Examples</a>
-</li></ul>
-<li><a href="#msgfilter-Invocation">9.4 Invoking the <code>msgfilter</code> Program</a>
-<ul>
-<li><a href="#msgfilter-Invocation">9.4.1 Input file location</a>
-<li><a href="#msgfilter-Invocation">9.4.2 Output file location</a>
-<li><a href="#msgfilter-Invocation">9.4.3 The filter</a>
-<li><a href="#msgfilter-Invocation">9.4.4 Useful <var>filter-option</var>s when the <var>filter</var> is &lsquo;<samp><span class="samp">sed</span></samp>&rsquo;</a>
-<li><a href="#msgfilter-Invocation">9.4.5 Built-in <var>filter</var>s</a>
-<li><a href="#msgfilter-Invocation">9.4.6 Input file syntax</a>
-<li><a href="#msgfilter-Invocation">9.4.7 Output details</a>
-<li><a href="#msgfilter-Invocation">9.4.8 Informative output</a>
-<li><a href="#msgfilter-Invocation">9.4.9 Examples</a>
-</li></ul>
-<li><a href="#msguniq-Invocation">9.5 Invoking the <code>msguniq</code> Program</a>
-<ul>
-<li><a href="#msguniq-Invocation">9.5.1 Input file location</a>
-<li><a href="#msguniq-Invocation">9.5.2 Output file location</a>
-<li><a href="#msguniq-Invocation">9.5.3 Message selection</a>
-<li><a href="#msguniq-Invocation">9.5.4 Input file syntax</a>
-<li><a href="#msguniq-Invocation">9.5.5 Output details</a>
-<li><a href="#msguniq-Invocation">9.5.6 Informative output</a>
-</li></ul>
-<li><a href="#msgcomm-Invocation">9.6 Invoking the <code>msgcomm</code> Program</a>
-<ul>
-<li><a href="#msgcomm-Invocation">9.6.1 Input file location</a>
-<li><a href="#msgcomm-Invocation">9.6.2 Output file location</a>
-<li><a href="#msgcomm-Invocation">9.6.3 Message selection</a>
-<li><a href="#msgcomm-Invocation">9.6.4 Input file syntax</a>
-<li><a href="#msgcomm-Invocation">9.6.5 Output details</a>
-<li><a href="#msgcomm-Invocation">9.6.6 Informative output</a>
-</li></ul>
-<li><a href="#msgcmp-Invocation">9.7 Invoking the <code>msgcmp</code> Program</a>
-<ul>
-<li><a href="#msgcmp-Invocation">9.7.1 Input file location</a>
-<li><a href="#msgcmp-Invocation">9.7.2 Operation modifiers</a>
-<li><a href="#msgcmp-Invocation">9.7.3 Input file syntax</a>
-<li><a href="#msgcmp-Invocation">9.7.4 Informative output</a>
-</li></ul>
-<li><a href="#msgattrib-Invocation">9.8 Invoking the <code>msgattrib</code> Program</a>
-<ul>
-<li><a href="#msgattrib-Invocation">9.8.1 Input file location</a>
-<li><a href="#msgattrib-Invocation">9.8.2 Output file location</a>
-<li><a href="#msgattrib-Invocation">9.8.3 Message selection</a>
-<li><a href="#msgattrib-Invocation">9.8.4 Attribute manipulation</a>
-<li><a href="#msgattrib-Invocation">9.8.5 Input file syntax</a>
-<li><a href="#msgattrib-Invocation">9.8.6 Output details</a>
-<li><a href="#msgattrib-Invocation">9.8.7 Informative output</a>
-</li></ul>
-<li><a href="#msgen-Invocation">9.9 Invoking the <code>msgen</code> Program</a>
-<ul>
-<li><a href="#msgen-Invocation">9.9.1 Input file location</a>
-<li><a href="#msgen-Invocation">9.9.2 Output file location</a>
-<li><a href="#msgen-Invocation">9.9.3 Input file syntax</a>
-<li><a href="#msgen-Invocation">9.9.4 Output details</a>
-<li><a href="#msgen-Invocation">9.9.5 Informative output</a>
-</li></ul>
-<li><a href="#msgexec-Invocation">9.10 Invoking the <code>msgexec</code> Program</a>
-<ul>
-<li><a href="#msgexec-Invocation">9.10.1 Input file location</a>
-<li><a href="#msgexec-Invocation">9.10.2 Input file syntax</a>
-<li><a href="#msgexec-Invocation">9.10.3 Informative output</a>
-</li></ul>
-<li><a href="#Colorizing">9.11 Highlighting parts of PO files</a>
-<ul>
-<li><a href="#The-_002d_002dcolor-option">9.11.1 The <code>--color</code> option</a>
-<li><a href="#The-TERM-variable">9.11.2 The environment variable <code>TERM</code></a>
-<li><a href="#The-_002d_002dstyle-option">9.11.3 The <code>--style</code> option</a>
-<li><a href="#Style-rules">9.11.4 Style rules for PO files</a>
-<li><a href="#Customizing-less">9.11.5 Customizing <code>less</code> for viewing PO files</a>
-</li></ul>
-<li><a href="#libgettextpo">9.12 Writing your own programs that process PO files</a>
-</li></ul>
-<li><a name="toc_Binaries" href="#Binaries">10 Producing Binary MO Files</a>
-<ul>
-<li><a href="#msgfmt-Invocation">10.1 Invoking the <code>msgfmt</code> Program</a>
-<ul>
-<li><a href="#msgfmt-Invocation">10.1.1 Input file location</a>
-<li><a href="#msgfmt-Invocation">10.1.2 Operation mode</a>
-<li><a href="#msgfmt-Invocation">10.1.3 Output file location</a>
-<li><a href="#msgfmt-Invocation">10.1.4 Output file location in Java mode</a>
-<li><a href="#msgfmt-Invocation">10.1.5 Output file location in C# mode</a>
-<li><a href="#msgfmt-Invocation">10.1.6 Output file location in Tcl mode</a>
-<li><a href="#msgfmt-Invocation">10.1.7 Input file syntax</a>
-<li><a href="#msgfmt-Invocation">10.1.8 Input file interpretation</a>
-<li><a href="#msgfmt-Invocation">10.1.9 Output details</a>
-<li><a href="#msgfmt-Invocation">10.1.10 Informative output</a>
-</li></ul>
-<li><a href="#msgunfmt-Invocation">10.2 Invoking the <code>msgunfmt</code> Program</a>
-<ul>
-<li><a href="#msgunfmt-Invocation">10.2.1 Operation mode</a>
-<li><a href="#msgunfmt-Invocation">10.2.2 Input file location</a>
-<li><a href="#msgunfmt-Invocation">10.2.3 Input file location in Java mode</a>
-<li><a href="#msgunfmt-Invocation">10.2.4 Input file location in C# mode</a>
-<li><a href="#msgunfmt-Invocation">10.2.5 Input file location in Tcl mode</a>
-<li><a href="#msgunfmt-Invocation">10.2.6 Output file location</a>
-<li><a href="#msgunfmt-Invocation">10.2.7 Output details</a>
-<li><a href="#msgunfmt-Invocation">10.2.8 Informative output</a>
-</li></ul>
-<li><a href="#MO-Files">10.3 The Format of GNU MO Files</a>
-</li></ul>
-<li><a name="toc_Programmers" href="#Programmers">11 The Programmer's View</a>
-<ul>
-<li><a href="#catgets">11.1 About <code>catgets</code></a>
-<ul>
-<li><a href="#Interface-to-catgets">11.1.1 The Interface</a>
-<li><a href="#Problems-with-catgets">11.1.2 Problems with the <code>catgets</code> Interface?!</a>
-</li></ul>
-<li><a href="#gettext">11.2 About <code>gettext</code></a>
-<ul>
-<li><a href="#Interface-to-gettext">11.2.1 The Interface</a>
-<li><a href="#Ambiguities">11.2.2 Solving Ambiguities</a>
-<li><a href="#Locating-Catalogs">11.2.3 Locating Message Catalog Files</a>
-<li><a href="#Charset-conversion">11.2.4 How to specify the output character set <code>gettext</code> uses</a>
-<li><a href="#Contexts">11.2.5 Using contexts for solving ambiguities</a>
-<li><a href="#Plural-forms">11.2.6 Additional functions for plural forms</a>
-<li><a href="#Optimized-gettext">11.2.7 Optimization of the *gettext functions</a>
-</li></ul>
-<li><a href="#Comparison">11.3 Comparing the Two Interfaces</a>
-<li><a href="#Using-libintl_002ea">11.4 Using libintl.a in own programs</a>
-<li><a href="#gettext-grok">11.5 Being a <code>gettext</code> grok</a>
-<li><a href="#Temp-Programmers">11.6 Temporary Notes for the Programmers Chapter</a>
-<ul>
-<li><a href="#Temp-Implementations">11.6.1 Temporary - Two Possible Implementations</a>
-<li><a href="#Temp-catgets">11.6.2 Temporary - About <code>catgets</code></a>
-<li><a href="#Temp-WSI">11.6.3 Temporary - Why a single implementation</a>
-<li><a href="#Temp-Notes">11.6.4 Temporary - Notes</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_Translators" href="#Translators">12 The Translator's View</a>
-<ul>
-<li><a href="#Trans-Intro-0">12.1 Introduction 0</a>
-<li><a href="#Trans-Intro-1">12.2 Introduction 1</a>
-<li><a href="#Discussions">12.3 Discussions</a>
-<li><a href="#Organization">12.4 Organization</a>
-<ul>
-<li><a href="#Central-Coordination">12.4.1 Central Coordination</a>
-<li><a href="#National-Teams">12.4.2 National Teams</a>
-<ul>
-<li><a href="#Sub_002dCultures">12.4.2.1 Sub-Cultures</a>
-<li><a href="#Organizational-Ideas">12.4.2.2 Organizational Ideas</a>
-</li></ul>
-<li><a href="#Mailing-Lists">12.4.3 Mailing Lists</a>
-</li></ul>
-<li><a href="#Information-Flow">12.5 Information Flow</a>
-<li><a href="#Translating-plural-forms">12.6 Translating plural forms</a>
-<li><a href="#Prioritizing-messages">12.7 Prioritizing messages: How to determine which messages to translate first</a>
-</li></ul>
-<li><a name="toc_Maintainers" href="#Maintainers">13 The Maintainer's View</a>
-<ul>
-<li><a href="#Flat-and-Non_002dFlat">13.1 Flat or Non-Flat Directory Structures</a>
-<li><a href="#Prerequisites">13.2 Prerequisite Works</a>
-<li><a href="#gettextize-Invocation">13.3 Invoking the <code>gettextize</code> Program</a>
-<li><a href="#Adjusting-Files">13.4 Files You Must Create or Alter</a>
-<ul>
-<li><a href="#po_002fPOTFILES_002ein">13.4.1 <samp><span class="file">POTFILES.in</span></samp> in <samp><span class="file">po/</span></samp></a>
-<li><a href="#po_002fLINGUAS">13.4.2 <samp><span class="file">LINGUAS</span></samp> in <samp><span class="file">po/</span></samp></a>
-<li><a href="#po_002fMakevars">13.4.3 <samp><span class="file">Makevars</span></samp> in <samp><span class="file">po/</span></samp></a>
-<li><a href="#po_002fRules_002d_002a">13.4.4 Extending <samp><span class="file">Makefile</span></samp> in <samp><span class="file">po/</span></samp></a>
-<li><a href="#configure_002eac">13.4.5 <samp><span class="file">configure.ac</span></samp> at top level</a>
-<li><a href="#config_002eguess">13.4.6 <samp><span class="file">config.guess</span></samp>, <samp><span class="file">config.sub</span></samp> at top level</a>
-<li><a href="#mkinstalldirs">13.4.7 <samp><span class="file">mkinstalldirs</span></samp> at top level</a>
-<li><a href="#aclocal">13.4.8 <samp><span class="file">aclocal.m4</span></samp> at top level</a>
-<li><a href="#acconfig">13.4.9 <samp><span class="file">acconfig.h</span></samp> at top level</a>
-<li><a href="#config_002eh_002ein">13.4.10 <samp><span class="file">config.h.in</span></samp> at top level</a>
-<li><a href="#Makefile">13.4.11 <samp><span class="file">Makefile.in</span></samp> at top level</a>
-<li><a href="#src_002fMakefile">13.4.12 <samp><span class="file">Makefile.in</span></samp> in <samp><span class="file">src/</span></samp></a>
-<li><a href="#lib_002fgettext_002eh">13.4.13 <samp><span class="file">gettext.h</span></samp> in <samp><span class="file">lib/</span></samp></a>
-</li></ul>
-<li><a href="#autoconf-macros">13.5 Autoconf macros for use in <samp><span class="file">configure.ac</span></samp></a>
-<ul>
-<li><a href="#AM_005fGNU_005fGETTEXT">13.5.1 AM_GNU_GETTEXT in <samp><span class="file">gettext.m4</span></samp></a>
-<li><a href="#AM_005fGNU_005fGETTEXT_005fVERSION">13.5.2 AM_GNU_GETTEXT_VERSION in <samp><span class="file">gettext.m4</span></samp></a>
-<li><a href="#AM_005fGNU_005fGETTEXT_005fNEED">13.5.3 AM_GNU_GETTEXT_NEED in <samp><span class="file">gettext.m4</span></samp></a>
-<li><a href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">13.5.4 AM_GNU_GETTEXT_INTL_SUBDIR in <samp><span class="file">intldir.m4</span></samp></a>
-<li><a href="#AM_005fPO_005fSUBDIRS">13.5.5 AM_PO_SUBDIRS in <samp><span class="file">po.m4</span></samp></a>
-<li><a href="#AM_005fXGETTEXT_005fOPTION">13.5.6 AM_XGETTEXT_OPTION in <samp><span class="file">po.m4</span></samp></a>
-<li><a href="#AM_005fICONV">13.5.7 AM_ICONV in <samp><span class="file">iconv.m4</span></samp></a>
-</li></ul>
-<li><a href="#CVS-Issues">13.6 Integrating with CVS</a>
-<ul>
-<li><a href="#Distributed-CVS">13.6.1 Avoiding version mismatch in distributed development</a>
-<li><a href="#Files-under-CVS">13.6.2 Files to put under CVS version control</a>
-<li><a href="#autopoint-Invocation">13.6.3 Invoking the <code>autopoint</code> Program</a>
-<ul>
-<li><a href="#autopoint-Invocation">13.6.3.1 Options</a>
-<li><a href="#autopoint-Invocation">13.6.3.2 Informative output</a>
-</li></ul>
-</li></ul>
-<li><a href="#Release-Management">13.7 Creating a Distribution Tarball</a>
-</li></ul>
-<li><a name="toc_Installers" href="#Installers">14 The Installer's and Distributor's View</a>
-<li><a name="toc_Programming-Languages" href="#Programming-Languages">15 Other Programming Languages</a>
-<ul>
-<li><a href="#Language-Implementors">15.1 The Language Implementor's View</a>
-<li><a href="#Programmers-for-other-Languages">15.2 The Programmer's View</a>
-<li><a href="#Translators-for-other-Languages">15.3 The Translator's View</a>
-<ul>
-<li><a href="#c_002dformat">15.3.1 C Format Strings</a>
-<li><a href="#objc_002dformat">15.3.2 Objective C Format Strings</a>
-<li><a href="#sh_002dformat">15.3.3 Shell Format Strings</a>
-<li><a href="#python_002dformat">15.3.4 Python Format Strings</a>
-<li><a href="#lisp_002dformat">15.3.5 Lisp Format Strings</a>
-<li><a href="#elisp_002dformat">15.3.6 Emacs Lisp Format Strings</a>
-<li><a href="#librep_002dformat">15.3.7 librep Format Strings</a>
-<li><a href="#scheme_002dformat">15.3.8 Scheme Format Strings</a>
-<li><a href="#smalltalk_002dformat">15.3.9 Smalltalk Format Strings</a>
-<li><a href="#java_002dformat">15.3.10 Java Format Strings</a>
-<li><a href="#csharp_002dformat">15.3.11 C# Format Strings</a>
-<li><a href="#awk_002dformat">15.3.12 awk Format Strings</a>
-<li><a href="#object_002dpascal_002dformat">15.3.13 Object Pascal Format Strings</a>
-<li><a href="#ycp_002dformat">15.3.14 YCP Format Strings</a>
-<li><a href="#tcl_002dformat">15.3.15 Tcl Format Strings</a>
-<li><a href="#perl_002dformat">15.3.16 Perl Format Strings</a>
-<li><a href="#php_002dformat">15.3.17 PHP Format Strings</a>
-<li><a href="#gcc_002dinternal_002dformat">15.3.18 GCC internal Format Strings</a>
-<li><a href="#gfc_002dinternal_002dformat">15.3.19 GFC internal Format Strings</a>
-<li><a href="#qt_002dformat">15.3.20 Qt Format Strings</a>
-<li><a href="#qt_002dplural_002dformat">15.3.21 Qt Format Strings</a>
-<li><a href="#kde_002dformat">15.3.22 KDE Format Strings</a>
-<li><a href="#boost_002dformat">15.3.23 Boost Format Strings</a>
-</li></ul>
-<li><a href="#Maintainers-for-other-Languages">15.4 The Maintainer's View</a>
-<li><a href="#List-of-Programming-Languages">15.5 Individual Programming Languages</a>
-<ul>
-<li><a href="#C">15.5.1 C, C++, Objective C</a>
-<li><a href="#sh">15.5.2 sh - Shell Script</a>
-<ul>
-<li><a href="#Preparing-Shell-Scripts">15.5.2.1 Preparing Shell Scripts for Internationalization</a>
-<li><a href="#gettext_002esh">15.5.2.2 Contents of <code>gettext.sh</code></a>
-<li><a href="#gettext-Invocation">15.5.2.3 Invoking the <code>gettext</code> program</a>
-<li><a href="#ngettext-Invocation">15.5.2.4 Invoking the <code>ngettext</code> program</a>
-<li><a href="#envsubst-Invocation">15.5.2.5 Invoking the <code>envsubst</code> program</a>
-<li><a href="#eval_005fgettext-Invocation">15.5.2.6 Invoking the <code>eval_gettext</code> function</a>
-<li><a href="#eval_005fngettext-Invocation">15.5.2.7 Invoking the <code>eval_ngettext</code> function</a>
-</li></ul>
-<li><a href="#bash">15.5.3 bash - Bourne-Again Shell Script</a>
-<li><a href="#Python">15.5.4 Python</a>
-<li><a href="#Common-Lisp">15.5.5 GNU clisp - Common Lisp</a>
-<li><a href="#clisp-C">15.5.6 GNU clisp C sources</a>
-<li><a href="#Emacs-Lisp">15.5.7 Emacs Lisp</a>
-<li><a href="#librep">15.5.8 librep</a>
-<li><a href="#Scheme">15.5.9 GNU guile - Scheme</a>
-<li><a href="#Smalltalk">15.5.10 GNU Smalltalk</a>
-<li><a href="#Java">15.5.11 Java</a>
-<li><a href="#C_0023">15.5.12 C#</a>
-<li><a href="#gawk">15.5.13 GNU awk</a>
-<li><a href="#Pascal">15.5.14 Pascal - Free Pascal Compiler</a>
-<li><a href="#wxWidgets">15.5.15 wxWidgets library</a>
-<li><a href="#YCP">15.5.16 YCP - YaST2 scripting language</a>
-<li><a href="#Tcl">15.5.17 Tcl - Tk's scripting language</a>
-<li><a href="#Perl">15.5.18 Perl</a>
-<ul>
-<li><a href="#General-Problems">15.5.18.1 General Problems Parsing Perl Code</a>
-<li><a href="#Default-Keywords">15.5.18.2 Which keywords will xgettext look for?</a>
-<li><a href="#Special-Keywords">15.5.18.3 How to Extract Hash Keys</a>
-<li><a href="#Quote_002dlike-Expressions">15.5.18.4 What are Strings And Quote-like Expressions?</a>
-<li><a href="#Interpolation-I">15.5.18.5 Invalid Uses Of String Interpolation</a>
-<li><a href="#Interpolation-II">15.5.18.6 Valid Uses Of String Interpolation</a>
-<li><a href="#Parentheses">15.5.18.7 When To Use Parentheses</a>
-<li><a href="#Long-Lines">15.5.18.8 How To Grok with Long Lines</a>
-<li><a href="#Perl-Pitfalls">15.5.18.9 Bugs, Pitfalls, And Things That Do Not Work</a>
-</li></ul>
-<li><a href="#PHP">15.5.19 PHP Hypertext Preprocessor</a>
-<li><a href="#Pike">15.5.20 Pike</a>
-<li><a href="#GCC_002dsource">15.5.21 GNU Compiler Collection sources</a>
-</li></ul>
-<li><a href="#List-of-Data-Formats">15.6 Internationalizable Data</a>
-<ul>
-<li><a href="#POT">15.6.1 POT - Portable Object Template</a>
-<li><a href="#RST">15.6.2 Resource String Table</a>
-<li><a href="#Glade">15.6.3 Glade - GNOME user interface description</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_Conclusion" href="#Conclusion">16 Concluding Remarks</a>
-<ul>
-<li><a href="#History">16.1 History of GNU <code>gettext</code></a>
-<li><a href="#References">16.2 Related Readings</a>
-</li></ul>
-<li><a name="toc_Language-Codes" href="#Language-Codes">Appendix A Language Codes</a>
-<ul>
-<li><a href="#Usual-Language-Codes">A.1 Usual Language Codes</a>
-<li><a href="#Rare-Language-Codes">A.2 Rare Language Codes</a>
-</li></ul>
-<li><a name="toc_Country-Codes" href="#Country-Codes">Appendix B Country Codes</a>
-<li><a name="toc_Licenses" href="#Licenses">Appendix C Licenses</a>
-<ul>
-<li><a href="#GNU-GPL">C.1 GNU GENERAL PUBLIC LICENSE</a>
-<ul>
-<li><a href="#GNU-GPL">Preamble</a>
-<li><a href="#GNU-GPL">Appendix: How to Apply These Terms to Your New Programs</a>
-</li></ul>
-<li><a href="#GNU-LGPL">C.2 GNU LESSER GENERAL PUBLIC LICENSE</a>
-<ul>
-<li><a href="#GNU-LGPL">Preamble</a>
-<li><a href="#GNU-LGPL">How to Apply These Terms to Your New Libraries</a>
-</li></ul>
-<li><a href="#GNU-FDL">C.3 GNU Free Documentation License</a>
-<ul>
-<li><a href="#GNU-FDL">ADDENDUM: How to use this License for your documents</a>
-</li></ul>
-</li></ul>
-<li><a name="toc_Program-Index" href="#Program-Index">Program Index</a>
-<li><a name="toc_Option-Index" href="#Option-Index">Option Index</a>
-<li><a name="toc_Variable-Index" href="#Variable-Index">Variable Index</a>
-<li><a name="toc_PO-Mode-Index" href="#PO-Mode-Index">PO Mode Index</a>
-<li><a name="toc_Autoconf-Macro-Index" href="#Autoconf-Macro-Index">Autoconf Macro Index</a>
-<li><a name="toc_Index" href="#Index">General Index</a>
-</li></ul>
-</div>
-
-
-
-<div class="node">
-<a name="Top"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Introduction">Introduction</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#dir">(dir)</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
-
-</div>
-
-<h2 class="unnumbered">GNU <code>gettext</code> utilities</h2>
-
- <p>This manual documents the GNU gettext tools and the GNU libintl library,
-version 0.18.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Introduction">Introduction</a>: Introduction
-<li><a accesskey="2" href="#Users">Users</a>: The User's View
-<li><a accesskey="3" href="#PO-Files">PO Files</a>: The Format of PO Files
-<li><a accesskey="4" href="#Sources">Sources</a>: Preparing Program Sources
-<li><a accesskey="5" href="#Template">Template</a>: Making the PO Template File
-<li><a accesskey="6" href="#Creating">Creating</a>: Creating a New PO File
-<li><a accesskey="7" href="#Updating">Updating</a>: Updating Existing PO Files
-<li><a accesskey="8" href="#Editing">Editing</a>: Editing PO Files
-<li><a accesskey="9" href="#Manipulating">Manipulating</a>: Manipulating PO Files
-<li><a href="#Binaries">Binaries</a>: Producing Binary MO Files
-<li><a href="#Programmers">Programmers</a>: The Programmer's View
-<li><a href="#Translators">Translators</a>: The Translator's View
-<li><a href="#Maintainers">Maintainers</a>: The Maintainer's View
-<li><a href="#Installers">Installers</a>: The Installer's and Distributor's View
-<li><a href="#Programming-Languages">Programming Languages</a>: Other Programming Languages
-<li><a href="#Conclusion">Conclusion</a>: Concluding Remarks
-
-<li><a href="#Language-Codes">Language Codes</a>: ISO 639 language codes
-<li><a href="#Country-Codes">Country Codes</a>: ISO 3166 country codes
-<li><a href="#Licenses">Licenses</a>: Licenses
-
-<li><a href="#Program-Index">Program Index</a>: Index of Programs
-<li><a href="#Option-Index">Option Index</a>: Index of Command-Line Options
-<li><a href="#Variable-Index">Variable Index</a>: Index of Environment Variables
-<li><a href="#PO-Mode-Index">PO Mode Index</a>: Index of Emacs PO Mode Commands
-<li><a href="#Autoconf-Macro-Index">Autoconf Macro Index</a>: Index of Autoconf Macros
-<li><a href="#Index">Index</a>: General Index
-
-</li></ul>
-<p>--- The Detailed Node Listing ---
-
-<p>Introduction
-
-</p>
-<ul class="menu">
-<li><a href="#Why">Why</a>: The Purpose of GNU <code>gettext</code>
-<li><a href="#Concepts">Concepts</a>: I18n, L10n, and Such
-<li><a href="#Aspects">Aspects</a>: Aspects in Native Language Support
-<li><a href="#Files">Files</a>: Files Conveying Translations
-<li><a href="#Overview">Overview</a>: Overview of GNU <code>gettext</code>
-
-</li></ul>
-<p>The User's View
-
-</p>
-<ul class="menu">
-<li><a href="#System-Installation">System Installation</a>: Questions During Operating System Installation
-<li><a href="#Setting-the-GUI-Locale">Setting the GUI Locale</a>: How to Specify the Locale Used by GUI Programs
-<li><a href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>: How to Specify the Locale According to POSIX
-<li><a href="#Installing-Localizations">Installing Localizations</a>: How to Install Additional Translations
-
-</li></ul>
-<p>Setting the POSIX Locale
-
-</p>
-<ul class="menu">
-<li><a href="#Locale-Names">Locale Names</a>: How a Locale Specification Looks Like
-<li><a href="#Locale-Environment-Variables">Locale Environment Variables</a>: Which Environment Variable Specfies What
-<li><a href="#The-LANGUAGE-variable">The LANGUAGE variable</a>: How to Specify a Priority List of Languages
-
-</li></ul>
-<p>Preparing Program Sources
-
-</p>
-<ul class="menu">
-<li><a href="#Importing">Importing</a>: Importing the <code>gettext</code> declaration
-<li><a href="#Triggering">Triggering</a>: Triggering <code>gettext</code> Operations
-<li><a href="#Preparing-Strings">Preparing Strings</a>: Preparing Translatable Strings
-<li><a href="#Mark-Keywords">Mark Keywords</a>: How Marks Appear in Sources
-<li><a href="#Marking">Marking</a>: Marking Translatable Strings
-<li><a href="#c_002dformat-Flag">c-format Flag</a>: Telling something about the following string
-<li><a href="#Special-cases">Special cases</a>: Special Cases of Translatable Strings
-<li><a href="#Bug-Report-Address">Bug Report Address</a>: Letting Users Report Translation Bugs
-<li><a href="#Names">Names</a>: Marking Proper Names for Translation
-<li><a href="#Libraries">Libraries</a>: Preparing Library Sources
-
-</li></ul>
-<p>Making the PO Template File
-
-</p>
-<ul class="menu">
-<li><a href="#xgettext-Invocation">xgettext Invocation</a>: Invoking the <code>xgettext</code> Program
-
-</li></ul>
-<p>Creating a New PO File
-
-</p>
-<ul class="menu">
-<li><a href="#msginit-Invocation">msginit Invocation</a>: Invoking the <code>msginit</code> Program
-<li><a href="#Header-Entry">Header Entry</a>: Filling in the Header Entry
-
-</li></ul>
-<p>Updating Existing PO Files
-
-</p>
-<ul class="menu">
-<li><a href="#msgmerge-Invocation">msgmerge Invocation</a>: Invoking the <code>msgmerge</code> Program
-
-</li></ul>
-<p>Editing PO Files
-
-</p>
-<ul class="menu">
-<li><a href="#KBabel">KBabel</a>: KDE's PO File Editor
-<li><a href="#Gtranslator">Gtranslator</a>: GNOME's PO File Editor
-<li><a href="#PO-Mode">PO Mode</a>: Emacs's PO File Editor
-<li><a href="#Compendium">Compendium</a>: Using Translation Compendia
-
-</li></ul>
-<p>Emacs's PO File Editor
-
-</p>
-<ul class="menu">
-<li><a href="#Installation">Installation</a>: Completing GNU <code>gettext</code> Installation
-<li><a href="#Main-PO-Commands">Main PO Commands</a>: Main Commands
-<li><a href="#Entry-Positioning">Entry Positioning</a>: Entry Positioning
-<li><a href="#Normalizing">Normalizing</a>: Normalizing Strings in Entries
-<li><a href="#Translated-Entries">Translated Entries</a>: Translated Entries
-<li><a href="#Fuzzy-Entries">Fuzzy Entries</a>: Fuzzy Entries
-<li><a href="#Untranslated-Entries">Untranslated Entries</a>: Untranslated Entries
-<li><a href="#Obsolete-Entries">Obsolete Entries</a>: Obsolete Entries
-<li><a href="#Modifying-Translations">Modifying Translations</a>: Modifying Translations
-<li><a href="#Modifying-Comments">Modifying Comments</a>: Modifying Comments
-<li><a href="#Subedit">Subedit</a>: Mode for Editing Translations
-<li><a href="#C-Sources-Context">C Sources Context</a>: C Sources Context
-<li><a href="#Auxiliary">Auxiliary</a>: Consulting Auxiliary PO Files
-
-</li></ul>
-<p>Using Translation Compendia
-
-</p>
-<ul class="menu">
-<li><a href="#Creating-Compendia">Creating Compendia</a>: Merging translations for later use
-<li><a href="#Using-Compendia">Using Compendia</a>: Using older translations if they fit
-
-</li></ul>
-<p>Manipulating PO Files
-
-</p>
-<ul class="menu">
-<li><a href="#msgcat-Invocation">msgcat Invocation</a>: Invoking the <code>msgcat</code> Program
-<li><a href="#msgconv-Invocation">msgconv Invocation</a>: Invoking the <code>msgconv</code> Program
-<li><a href="#msggrep-Invocation">msggrep Invocation</a>: Invoking the <code>msggrep</code> Program
-<li><a href="#msgfilter-Invocation">msgfilter Invocation</a>: Invoking the <code>msgfilter</code> Program
-<li><a href="#msguniq-Invocation">msguniq Invocation</a>: Invoking the <code>msguniq</code> Program
-<li><a href="#msgcomm-Invocation">msgcomm Invocation</a>: Invoking the <code>msgcomm</code> Program
-<li><a href="#msgcmp-Invocation">msgcmp Invocation</a>: Invoking the <code>msgcmp</code> Program
-<li><a href="#msgattrib-Invocation">msgattrib Invocation</a>: Invoking the <code>msgattrib</code> Program
-<li><a href="#msgen-Invocation">msgen Invocation</a>: Invoking the <code>msgen</code> Program
-<li><a href="#msgexec-Invocation">msgexec Invocation</a>: Invoking the <code>msgexec</code> Program
-<li><a href="#Colorizing">Colorizing</a>: Highlighting parts of PO files
-<li><a href="#libgettextpo">libgettextpo</a>: Writing your own programs that process PO files
-
-</li></ul>
-<p>Highlighting parts of PO files
-
-</p>
-<ul class="menu">
-<li><a href="#The-_002d_002dcolor-option">The --color option</a>: Triggering colorized output
-<li><a href="#The-TERM-variable">The TERM variable</a>: The environment variable <code>TERM</code>
-<li><a href="#The-_002d_002dstyle-option">The --style option</a>: The <code>--style</code> option
-<li><a href="#Style-rules">Style rules</a>: Style rules for PO files
-<li><a href="#Customizing-less">Customizing less</a>: Customizing <code>less</code> for viewing PO files
-
-</li></ul>
-<p>Producing Binary MO Files
-
-</p>
-<ul class="menu">
-<li><a href="#msgfmt-Invocation">msgfmt Invocation</a>: Invoking the <code>msgfmt</code> Program
-<li><a href="#msgunfmt-Invocation">msgunfmt Invocation</a>: Invoking the <code>msgunfmt</code> Program
-<li><a href="#MO-Files">MO Files</a>: The Format of GNU MO Files
-
-</li></ul>
-<p>The Programmer's View
-
-</p>
-<ul class="menu">
-<li><a href="#catgets">catgets</a>: About <code>catgets</code>
-<li><a href="#gettext">gettext</a>: About <code>gettext</code>
-<li><a href="#Comparison">Comparison</a>: Comparing the two interfaces
-<li><a href="#Using-libintl_002ea">Using libintl.a</a>: Using libintl.a in own programs
-<li><a href="#gettext-grok">gettext grok</a>: Being a <code>gettext</code> grok
-<li><a href="#Temp-Programmers">Temp Programmers</a>: Temporary Notes for the Programmers Chapter
-
-</li></ul>
-<p>About <code>catgets</code>
-
-</p>
-<ul class="menu">
-<li><a href="#Interface-to-catgets">Interface to catgets</a>: The interface
-<li><a href="#Problems-with-catgets">Problems with catgets</a>: Problems with the <code>catgets</code> interface?!
-
-</li></ul>
-<p>About <code>gettext</code>
-
-</p>
-<ul class="menu">
-<li><a href="#Interface-to-gettext">Interface to gettext</a>: The interface
-<li><a href="#Ambiguities">Ambiguities</a>: Solving ambiguities
-<li><a href="#Locating-Catalogs">Locating Catalogs</a>: Locating message catalog files
-<li><a href="#Charset-conversion">Charset conversion</a>: How to request conversion to Unicode
-<li><a href="#Contexts">Contexts</a>: Solving ambiguities in GUI programs
-<li><a href="#Plural-forms">Plural forms</a>: Additional functions for handling plurals
-<li><a href="#Optimized-gettext">Optimized gettext</a>: Optimization of the *gettext functions
-
-</li></ul>
-<p>Temporary Notes for the Programmers Chapter
-
-</p>
-<ul class="menu">
-<li><a href="#Temp-Implementations">Temp Implementations</a>: Temporary - Two Possible Implementations
-<li><a href="#Temp-catgets">Temp catgets</a>: Temporary - About <code>catgets</code>
-<li><a href="#Temp-WSI">Temp WSI</a>: Temporary - Why a single implementation
-<li><a href="#Temp-Notes">Temp Notes</a>: Temporary - Notes
-
-</li></ul>
-<p>The Translator's View
-
-</p>
-<ul class="menu">
-<li><a href="#Trans-Intro-0">Trans Intro 0</a>: Introduction 0
-<li><a href="#Trans-Intro-1">Trans Intro 1</a>: Introduction 1
-<li><a href="#Discussions">Discussions</a>: Discussions
-<li><a href="#Organization">Organization</a>: Organization
-<li><a href="#Information-Flow">Information Flow</a>: Information Flow
-<li><a href="#Translating-plural-forms">Translating plural forms</a>: How to fill in <code>msgstr[0]</code>, <code>msgstr[1]</code>
-<li><a href="#Prioritizing-messages">Prioritizing messages</a>: How to find which messages to translate first
-
-</li></ul>
-<p>Organization
-
-</p>
-<ul class="menu">
-<li><a href="#Central-Coordination">Central Coordination</a>: Central Coordination
-<li><a href="#National-Teams">National Teams</a>: National Teams
-<li><a href="#Mailing-Lists">Mailing Lists</a>: Mailing Lists
-
-</li></ul>
-<p>National Teams
-
-</p>
-<ul class="menu">
-<li><a href="#Sub_002dCultures">Sub-Cultures</a>: Sub-Cultures
-<li><a href="#Organizational-Ideas">Organizational Ideas</a>: Organizational Ideas
-
-</li></ul>
-<p>The Maintainer's View
-
-</p>
-<ul class="menu">
-<li><a href="#Flat-and-Non_002dFlat">Flat and Non-Flat</a>: Flat or Non-Flat Directory Structures
-<li><a href="#Prerequisites">Prerequisites</a>: Prerequisite Works
-<li><a href="#gettextize-Invocation">gettextize Invocation</a>: Invoking the <code>gettextize</code> Program
-<li><a href="#Adjusting-Files">Adjusting Files</a>: Files You Must Create or Alter
-<li><a href="#autoconf-macros">autoconf macros</a>: Autoconf macros for use in <samp><span class="file">configure.ac</span></samp>
-<li><a href="#CVS-Issues">CVS Issues</a>: Integrating with CVS
-<li><a href="#Release-Management">Release Management</a>: Creating a Distribution Tarball
-
-</li></ul>
-<p>Files You Must Create or Alter
-
-</p>
-<ul class="menu">
-<li><a href="#po_002fPOTFILES_002ein">po/POTFILES.in</a>: <samp><span class="file">POTFILES.in</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a href="#po_002fLINGUAS">po/LINGUAS</a>: <samp><span class="file">LINGUAS</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a href="#po_002fMakevars">po/Makevars</a>: <samp><span class="file">Makevars</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a href="#po_002fRules_002d_002a">po/Rules-*</a>: Extending <samp><span class="file">Makefile</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a href="#configure_002eac">configure.ac</a>: <samp><span class="file">configure.ac</span></samp> at top level
-<li><a href="#config_002eguess">config.guess</a>: <samp><span class="file">config.guess</span></samp>, <samp><span class="file">config.sub</span></samp> at top level
-<li><a href="#mkinstalldirs">mkinstalldirs</a>: <samp><span class="file">mkinstalldirs</span></samp> at top level
-<li><a href="#aclocal">aclocal</a>: <samp><span class="file">aclocal.m4</span></samp> at top level
-<li><a href="#acconfig">acconfig</a>: <samp><span class="file">acconfig.h</span></samp> at top level
-<li><a href="#config_002eh_002ein">config.h.in</a>: <samp><span class="file">config.h.in</span></samp> at top level
-<li><a href="#Makefile">Makefile</a>: <samp><span class="file">Makefile.in</span></samp> at top level
-<li><a href="#src_002fMakefile">src/Makefile</a>: <samp><span class="file">Makefile.in</span></samp> in <samp><span class="file">src/</span></samp>
-<li><a href="#lib_002fgettext_002eh">lib/gettext.h</a>: <samp><span class="file">gettext.h</span></samp> in <samp><span class="file">lib/</span></samp>
-
-</li></ul>
-<p>Autoconf macros for use in <samp><span class="file">configure.ac</span></samp>
-
-</p>
-<ul class="menu">
-<li><a href="#AM_005fGNU_005fGETTEXT">AM_GNU_GETTEXT</a>: AM_GNU_GETTEXT in <samp><span class="file">gettext.m4</span></samp>
-<li><a href="#AM_005fGNU_005fGETTEXT_005fVERSION">AM_GNU_GETTEXT_VERSION</a>: AM_GNU_GETTEXT_VERSION in <samp><span class="file">gettext.m4</span></samp>
-<li><a href="#AM_005fGNU_005fGETTEXT_005fNEED">AM_GNU_GETTEXT_NEED</a>: AM_GNU_GETTEXT_NEED in <samp><span class="file">gettext.m4</span></samp>
-<li><a href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">AM_GNU_GETTEXT_INTL_SUBDIR</a>: AM_GNU_GETTEXT_INTL_SUBDIR in <samp><span class="file">intldir.m4</span></samp>
-<li><a href="#AM_005fPO_005fSUBDIRS">AM_PO_SUBDIRS</a>: AM_PO_SUBDIRS in <samp><span class="file">po.m4</span></samp>
-<li><a href="#AM_005fICONV">AM_ICONV</a>: AM_ICONV in <samp><span class="file">iconv.m4</span></samp>
-
-</li></ul>
-<p>Integrating with CVS
-
-</p>
-<ul class="menu">
-<li><a href="#Distributed-CVS">Distributed CVS</a>: Avoiding version mismatch in distributed development
-<li><a href="#Files-under-CVS">Files under CVS</a>: Files to put under CVS version control
-<li><a href="#autopoint-Invocation">autopoint Invocation</a>: Invoking the <code>autopoint</code> Program
-
-</li></ul>
-<p>Other Programming Languages
-
-</p>
-<ul class="menu">
-<li><a href="#Language-Implementors">Language Implementors</a>: The Language Implementor's View
-<li><a href="#Programmers-for-other-Languages">Programmers for other Languages</a>: The Programmer's View
-<li><a href="#Translators-for-other-Languages">Translators for other Languages</a>: The Translator's View
-<li><a href="#Maintainers-for-other-Languages">Maintainers for other Languages</a>: The Maintainer's View
-<li><a href="#List-of-Programming-Languages">List of Programming Languages</a>: Individual Programming Languages
-<li><a href="#List-of-Data-Formats">List of Data Formats</a>: Internationalizable Data
-
-</li></ul>
-<p>The Translator's View
-
-</p>
-<ul class="menu">
-<li><a href="#c_002dformat">c-format</a>: C Format Strings
-<li><a href="#objc_002dformat">objc-format</a>: Objective C Format Strings
-<li><a href="#sh_002dformat">sh-format</a>: Shell Format Strings
-<li><a href="#python_002dformat">python-format</a>: Python Format Strings
-<li><a href="#lisp_002dformat">lisp-format</a>: Lisp Format Strings
-<li><a href="#elisp_002dformat">elisp-format</a>: Emacs Lisp Format Strings
-<li><a href="#librep_002dformat">librep-format</a>: librep Format Strings
-<li><a href="#scheme_002dformat">scheme-format</a>: Scheme Format Strings
-<li><a href="#smalltalk_002dformat">smalltalk-format</a>: Smalltalk Format Strings
-<li><a href="#java_002dformat">java-format</a>: Java Format Strings
-<li><a href="#csharp_002dformat">csharp-format</a>: C# Format Strings
-<li><a href="#awk_002dformat">awk-format</a>: awk Format Strings
-<li><a href="#object_002dpascal_002dformat">object-pascal-format</a>: Object Pascal Format Strings
-<li><a href="#ycp_002dformat">ycp-format</a>: YCP Format Strings
-<li><a href="#tcl_002dformat">tcl-format</a>: Tcl Format Strings
-<li><a href="#perl_002dformat">perl-format</a>: Perl Format Strings
-<li><a href="#php_002dformat">php-format</a>: PHP Format Strings
-<li><a href="#gcc_002dinternal_002dformat">gcc-internal-format</a>: GCC internal Format Strings
-<li><a href="#gfc_002dinternal_002dformat">gfc-internal-format</a>: GFC internal Format Strings
-<li><a href="#qt_002dformat">qt-format</a>: Qt Format Strings
-<li><a href="#qt_002dplural_002dformat">qt-plural-format</a>: Qt Plural Format Strings
-<li><a href="#kde_002dformat">kde-format</a>: KDE Format Strings
-<li><a href="#boost_002dformat">boost-format</a>: Boost Format Strings
-
-</li></ul>
-<p>Individual Programming Languages
-
-</p>
-<ul class="menu">
-<li><a href="#C">C</a>: C, C++, Objective C
-<li><a href="#sh">sh</a>: sh - Shell Script
-<li><a href="#bash">bash</a>: bash - Bourne-Again Shell Script
-<li><a href="#Python">Python</a>: Python
-<li><a href="#Common-Lisp">Common Lisp</a>: GNU clisp - Common Lisp
-<li><a href="#clisp-C">clisp C</a>: GNU clisp C sources
-<li><a href="#Emacs-Lisp">Emacs Lisp</a>: Emacs Lisp
-<li><a href="#librep">librep</a>: librep
-<li><a href="#Scheme">Scheme</a>: GNU guile - Scheme
-<li><a href="#Smalltalk">Smalltalk</a>: GNU Smalltalk
-<li><a href="#Java">Java</a>: Java
-<li><a href="#C_0023">C#</a>: C#
-<li><a href="#gawk">gawk</a>: GNU awk
-<li><a href="#Pascal">Pascal</a>: Pascal - Free Pascal Compiler
-<li><a href="#wxWidgets">wxWidgets</a>: wxWidgets library
-<li><a href="#YCP">YCP</a>: YCP - YaST2 scripting language
-<li><a href="#Tcl">Tcl</a>: Tcl - Tk's scripting language
-<li><a href="#Perl">Perl</a>: Perl
-<li><a href="#PHP">PHP</a>: PHP Hypertext Preprocessor
-<li><a href="#Pike">Pike</a>: Pike
-<li><a href="#GCC_002dsource">GCC-source</a>: GNU Compiler Collection sources
-
-</li></ul>
-<p>sh - Shell Script
-
-</p>
-<ul class="menu">
-<li><a href="#Preparing-Shell-Scripts">Preparing Shell Scripts</a>: Preparing Shell Scripts for Internationalization
-<li><a href="#gettext_002esh">gettext.sh</a>: Contents of <code>gettext.sh</code>
-<li><a href="#gettext-Invocation">gettext Invocation</a>: Invoking the <code>gettext</code> program
-<li><a href="#ngettext-Invocation">ngettext Invocation</a>: Invoking the <code>ngettext</code> program
-<li><a href="#envsubst-Invocation">envsubst Invocation</a>: Invoking the <code>envsubst</code> program
-<li><a href="#eval_005fgettext-Invocation">eval_gettext Invocation</a>: Invoking the <code>eval_gettext</code> function
-<li><a href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a>: Invoking the <code>eval_ngettext</code> function
-
-</li></ul>
-<p>Perl
-
-</p>
-<ul class="menu">
-<li><a href="#General-Problems">General Problems</a>: General Problems Parsing Perl Code
-<li><a href="#Default-Keywords">Default Keywords</a>: Which Keywords Will xgettext Look For?
-<li><a href="#Special-Keywords">Special Keywords</a>: How to Extract Hash Keys
-<li><a href="#Quote_002dlike-Expressions">Quote-like Expressions</a>: What are Strings And Quote-like Expressions?
-<li><a href="#Interpolation-I">Interpolation I</a>: Invalid String Interpolation
-<li><a href="#Interpolation-II">Interpolation II</a>: Valid String Interpolation
-<li><a href="#Parentheses">Parentheses</a>: When To Use Parentheses
-<li><a href="#Long-Lines">Long Lines</a>: How To Grok with Long Lines
-<li><a href="#Perl-Pitfalls">Perl Pitfalls</a>: Bugs, Pitfalls, and Things That Do Not Work
-
-</li></ul>
-<p>Internationalizable Data
-
-</p>
-<ul class="menu">
-<li><a href="#POT">POT</a>: POT - Portable Object Template
-<li><a href="#RST">RST</a>: Resource String Table
-<li><a href="#Glade">Glade</a>: Glade - GNOME user interface description
-
-</li></ul>
-<p>Concluding Remarks
-
-</p>
-<ul class="menu">
-<li><a href="#History">History</a>: History of GNU <code>gettext</code>
-<li><a href="#References">References</a>: Related Readings
-
-</li></ul>
-<p>Language Codes
-
-</p>
-<ul class="menu">
-<li><a href="#Usual-Language-Codes">Usual Language Codes</a>: Two-letter ISO 639 language codes
-<li><a href="#Rare-Language-Codes">Rare Language Codes</a>: Three-letter ISO 639 language codes
-
-</li></ul>
-<p>Licenses
-
-</p>
-<ul class="menu">
-<li><a href="#GNU-GPL">GNU GPL</a>: GNU General Public License
-<li><a href="#GNU-LGPL">GNU LGPL</a>: GNU Lesser General Public License
-<li><a href="#GNU-FDL">GNU FDL</a>: GNU Free Documentation License
-
- </ul>
-
-<div class="node">
-<a name="Introduction"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Users">Users</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Top">Top</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">1 Introduction</h2>
-
- <p>This chapter explains the goals sought in the creation
-of GNU <code>gettext</code> and the free Translation Project.
-Then, it explains a few broad concepts around
-Native Language Support, and positions message translation with regard
-to other aspects of national and cultural variance, as they apply
-to programs. It also surveys those files used to convey the
-translations. It explains how the various tools interact in the
-initial generation of these files, and later, how the maintenance
-cycle should usually operate.
-
- <p><a name="index-sex-1"></a><a name="index-he_002c-she_002c-and-they-2"></a><a name="index-she_002c-he_002c-and-they-3"></a>In this manual, we use <em>he</em> when speaking of the programmer or
-maintainer, <em>she</em> when speaking of the translator, and <em>they</em>
-when speaking of the installers or end users of the translated program.
-This is only a convenience for clarifying the documentation. It is
-<em>absolutely</em> not meant to imply that some roles are more appropriate
-to males or females. Besides, as you might guess, GNU <code>gettext</code>
-is meant to be useful for people using computers, whatever their sex,
-race, religion or nationality!
-
- <p><a name="index-bug-report-address-4"></a>Please send suggestions and corrections to:
-
-<pre class="example"> <span class="roman">Internet address:</span>
- bug-gnu-gettext@gnu.org
-</pre>
- <p class="noindent">Please include the manual's edition number and update date in your messages.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Why">Why</a>: The Purpose of GNU <code>gettext</code>
-<li><a accesskey="2" href="#Concepts">Concepts</a>: I18n, L10n, and Such
-<li><a accesskey="3" href="#Aspects">Aspects</a>: Aspects in Native Language Support
-<li><a accesskey="4" href="#Files">Files</a>: Files Conveying Translations
-<li><a accesskey="5" href="#Overview">Overview</a>: Overview of GNU <code>gettext</code>
-</ul>
-
-<div class="node">
-<a name="Why"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Concepts">Concepts</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Introduction">Introduction</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Introduction">Introduction</a>
-
-</div>
-
-<h3 class="section">1.1 The Purpose of GNU <code>gettext</code></h3>
-
- <p>Usually, programs are written and documented in English, and use
-English at execution time to interact with users. This is true
-not only of GNU software, but also of a great deal of proprietary
-and free software. Using a common language is quite handy for
-communication between developers, maintainers and users from all
-countries. On the other hand, most people are less comfortable with
-English than with their own native language, and would prefer to
-use their mother tongue for day to day's work, as far as possible.
-Many would simply <em>love</em> to see their computer screen showing
-a lot less of English, and far more of their own language.
-
- <p><a name="index-Translation-Project-5"></a>However, to many people, this dream might appear so far fetched that
-they may believe it is not even worth spending time thinking about
-it. They have no confidence at all that the dream might ever
-become true. Yet some have not lost hope, and have organized themselves.
-The Translation Project is a formalization of this hope into a
-workable structure, which has a good chance to get all of us nearer
-the achievement of a truly multi-lingual set of programs.
-
- <p>GNU <code>gettext</code> is an important step for the Translation Project,
-as it is an asset on which we may build many other steps. This package
-offers to programmers, translators and even users, a well integrated
-set of tools and documentation. Specifically, the GNU <code>gettext</code>
-utilities are a set of tools that provides a framework within which
-other free packages may produce multi-lingual messages. These tools
-include
-
- <ul>
-<li>A set of conventions about how programs should be written to support
-message catalogs.
-
- <li>A directory and file naming organization for the message catalogs
-themselves.
-
- <li>A runtime library supporting the retrieval of translated messages.
-
- <li>A few stand-alone programs to massage in various ways the sets of
-translatable strings, or already translated strings.
-
- <li>A library supporting the parsing and creation of files containing
-translated messages.
-
- <li>A special mode for Emacs<a rel="footnote" href="#fn-1" name="fnd-1"><sup>1</sup></a> which helps preparing these sets
-and bringing them up to date.
-</ul>
-
- <p>GNU <code>gettext</code> is designed to minimize the impact of
-internationalization on program sources, keeping this impact as small
-and hardly noticeable as possible. Internationalization has better
-chances of succeeding if it is very light weighted, or at least,
-appear to be so, when looking at program sources.
-
- <p>The Translation Project also uses the GNU <code>gettext</code> distribution
-as a vehicle for documenting its structure and methods. This goes
-beyond the strict technicalities of documenting the GNU <code>gettext</code>
-proper. By so doing, translators will find in a single place, as
-far as possible, all they need to know for properly doing their
-translating work. Also, this supplemental documentation might also
-help programmers, and even curious users, in understanding how GNU
-<code>gettext</code> is related to the remainder of the Translation
-Project, and consequently, have a glimpse at the <em>big picture</em>.
-
-<div class="node">
-<a name="Concepts"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Aspects">Aspects</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Why">Why</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Introduction">Introduction</a>
-
-</div>
-
-<h3 class="section">1.2 I18n, L10n, and Such</h3>
-
- <p><a name="index-i18n-6"></a><a name="index-l10n-7"></a>Two long words appear all the time when we discuss support of native
-language in programs, and these words have a precise meaning, worth
-being explained here, once and for all in this document. The words are
-<em>internationalization</em> and <em>localization</em>. Many people,
-tired of writing these long words over and over again, took the
-habit of writing <dfn>i18n</dfn> and <dfn>l10n</dfn> instead, quoting the first
-and last letter of each word, and replacing the run of intermediate
-letters by a number merely telling how many such letters there are.
-But in this manual, in the sake of clarity, we will patiently write
-the names in full, each time<small class="dots">...</small>
-
- <p><a name="index-internationalization-8"></a>By <dfn>internationalization</dfn>, one refers to the operation by which a
-program, or a set of programs turned into a package, is made aware of and
-able to support multiple languages. This is a generalization process,
-by which the programs are untied from calling only English strings or
-other English specific habits, and connected to generic ways of doing
-the same, instead. Program developers may use various techniques to
-internationalize their programs. Some of these have been standardized.
-GNU <code>gettext</code> offers one of these standards. See <a href="#Programmers">Programmers</a>.
-
- <p><a name="index-localization-9"></a>By <dfn>localization</dfn>, one means the operation by which, in a set
-of programs already internationalized, one gives the program all
-needed information so that it can adapt itself to handle its input
-and output in a fashion which is correct for some native language and
-cultural habits. This is a particularisation process, by which generic
-methods already implemented in an internationalized program are used
-in specific ways. The programming environment puts several functions
-to the programmers disposal which allow this runtime configuration.
-The formal description of specific set of cultural habits for some
-country, together with all associated translations targeted to the
-same native language, is called the <dfn>locale</dfn> for this language
-or country. Users achieve localization of programs by setting proper
-values to special environment variables, prior to executing those
-programs, identifying which locale should be used.
-
- <p>In fact, locale message support is only one component of the cultural
-data that makes up a particular locale. There are a whole host of
-routines and functions provided to aid programmers in developing
-internationalized software and which allow them to access the data
-stored in a particular locale. When someone presently refers to a
-particular locale, they are obviously referring to the data stored
-within that particular locale. Similarly, if a programmer is referring
-to &ldquo;accessing the locale routines&rdquo;, they are referring to the
-complete suite of routines that access all of the locale's information.
-
- <p><a name="index-NLS-10"></a><a name="index-Native-Language-Support-11"></a><a name="index-Natural-Language-Support-12"></a>One uses the expression <dfn>Native Language Support</dfn>, or merely NLS,
-for speaking of the overall activity or feature encompassing both
-internationalization and localization, allowing for multi-lingual
-interactions in a program. In a nutshell, one could say that
-internationalization is the operation by which further localizations
-are made possible.
-
- <p>Also, very roughly said, when it comes to multi-lingual messages,
-internationalization is usually taken care of by programmers, and
-localization is usually taken care of by translators.
-
-<div class="node">
-<a name="Aspects"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Files">Files</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Concepts">Concepts</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Introduction">Introduction</a>
-
-</div>
-
-<h3 class="section">1.3 Aspects in Native Language Support</h3>
-
- <p><a name="index-translation-aspects-13"></a>For a totally multi-lingual distribution, there are many things to
-translate beyond output messages.
-
- <ul>
-<li>As of today, GNU <code>gettext</code> offers a complete toolset for
-translating messages output by C programs. Perl scripts and shell
-scripts will also need to be translated. Even if there are today some hooks
-by which this can be done, these hooks are not integrated as well as they
-should be.
-
- <li>Some programs, like <code>autoconf</code> or <code>bison</code>, are able
-to produce other programs (or scripts). Even if the generating
-programs themselves are internationalized, the generated programs they
-produce may need internationalization on their own, and this indirect
-internationalization could be automated right from the generating
-program. In fact, quite usually, generating and generated programs
-could be internationalized independently, as the effort needed is
-fairly orthogonal.
-
- <li>A few programs include textual tables which might need translation
-themselves, independently of the strings contained in the program
-itself. For example, RFC&nbsp;1345<!-- /@w --> gives an English description for each
-character which the <code>recode</code> program is able to reconstruct at execution.
-Since these descriptions are extracted from the RFC by mechanical means,
-translating them properly would require a prior translation of the RFC
-itself.
-
- <li>Almost all programs accept options, which are often worded out so to
-be descriptive for the English readers; one might want to consider
-offering translated versions for program options as well.
-
- <li>Many programs read, interpret, compile, or are somewhat driven by
-input files which are texts containing keywords, identifiers, or
-replies which are inherently translatable. For example, one may want
-<code>gcc</code> to allow diacriticized characters in identifiers or use
-translated keywords; &lsquo;<samp><span class="samp">rm -i</span></samp>&rsquo; might accept something else than
-&lsquo;<samp><span class="samp">y</span></samp>&rsquo; or &lsquo;<samp><span class="samp">n</span></samp>&rsquo; for replies, etc. Even if the program will
-eventually make most of its output in the foreign languages, one has
-to decide whether the input syntax, option values, etc., are to be
-localized or not.
-
- <li>The manual accompanying a package, as well as all documentation files
-in the distribution, could surely be translated, too. Translating a
-manual, with the intent of later keeping up with updates, is a major
-undertaking in itself, generally.
-
- </ul>
-
- <p>As we already stressed, translation is only one aspect of locales.
-Other internationalization aspects are system services and are handled
-in GNU <code>libc</code>. There
-are many attributes that are needed to define a country's cultural
-conventions. These attributes include beside the country's native
-language, the formatting of the date and time, the representation of
-numbers, the symbols for currency, etc. These local <dfn>rules</dfn> are
-termed the country's locale. The locale represents the knowledge
-needed to support the country's native attributes.
-
- <p><a name="index-locale-categories-14"></a>There are a few major areas which may vary between countries and
-hence, define what a locale must describe. The following list helps
-putting multi-lingual messages into the proper context of other tasks
-related to locales. See the GNU <code>libc</code> manual for details.
-
- <dl>
-<dt><em>Characters and Codesets</em><dd><a name="index-codeset-15"></a><a name="index-encoding-16"></a><a name="index-character-encoding-17"></a><a name="index-locale-category_002c-LC_005fCTYPE-18"></a>
-The codeset most commonly used through out the USA and most English
-speaking parts of the world is the ASCII codeset. However, there are
-many characters needed by various locales that are not found within
-this codeset. The 8-bit ISO&nbsp;8859-1<!-- /@w --> code set has most of the special
-characters needed to handle the major European languages. However, in
-many cases, choosing ISO&nbsp;8859-1<!-- /@w --> is nevertheless not adequate: it
-doesn't even handle the major European currency. Hence each locale
-will need to specify which codeset they need to use and will need
-to have the appropriate character handling routines to cope with
-the codeset.
-
- <br><dt><em>Currency</em><dd><a name="index-currency-symbols-19"></a><a name="index-locale-category_002c-LC_005fMONETARY-20"></a>
-The symbols used vary from country to country as does the position
-used by the symbol. Software needs to be able to transparently
-display currency figures in the native mode for each locale.
-
- <br><dt><em>Dates</em><dd><a name="index-date-format-21"></a><a name="index-locale-category_002c-LC_005fTIME-22"></a>
-The format of date varies between locales. For example, Christmas day
-in 1994 is written as 12/25/94 in the USA and as 25/12/94 in Australia.
-Other countries might use ISO&nbsp;8601<!-- /@w --> dates, etc.
-
- <p>Time of the day may be noted as <var>hh</var>:<var>mm</var>, <var>hh</var>.<var>mm</var>,
-or otherwise. Some locales require time to be specified in 24-hour
-mode rather than as AM or PM. Further, the nature and yearly extent
-of the Daylight Saving correction vary widely between countries.
-
- <br><dt><em>Numbers</em><dd><a name="index-number-format-23"></a><a name="index-locale-category_002c-LC_005fNUMERIC-24"></a>
-Numbers can be represented differently in different locales.
-For example, the following numbers are all written correctly for
-their respective locales:
-
- <pre class="example"> 12,345.67 English
- 12.345,67 German
- 12345,67 French
- 1,2345.67 Asia
-</pre>
- <p>Some programs could go further and use different unit systems, like
-English units or Metric units, or even take into account variants
-about how numbers are spelled in full.
-
- <br><dt><em>Messages</em><dd><a name="index-messages-25"></a><a name="index-locale-category_002c-LC_005fMESSAGES-26"></a>
-The most obvious area is the language support within a locale. This is
-where GNU <code>gettext</code> provides the means for developers and users to
-easily change the language that the software uses to communicate to
-the user.
-
- </dl>
-
- <p><a name="index-locale-categories-27"></a>These areas of cultural conventions are called <em>locale categories</em>.
-It is an unfortunate term; <em>locale aspects</em> or <em>locale feature
-categories</em> would be a better term, because each &ldquo;locale category&rdquo;
-describes an area or task that requires localization. The concrete data
-that describes the cultural conventions for such an area and for a particular
-culture is also called a <em>locale category</em>. In this sense, a locale
-is composed of several locale categories: the locale category describing
-the codeset, the locale category describing the formatting of numbers,
-the locale category containing the translated messages, and so on.
-
- <p><a name="index-Linux-28"></a>Components of locale outside of message handling are standardized in
-the ISO C standard and the POSIX:2001 standard (also known as the SUSV3
-specification). GNU <code>libc</code>
-fully implements this, and most other modern systems provide a more
-or less reasonable support for at least some of the missing components.
-
-<div class="node">
-<a name="Files"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Overview">Overview</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Aspects">Aspects</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Introduction">Introduction</a>
-
-</div>
-
-<h3 class="section">1.4 Files Conveying Translations</h3>
-
- <p><a name="index-files_002c-_0040file_007b_002epo_007d-and-_0040file_007b_002emo_007d-29"></a>The letters PO in <samp><span class="file">.po</span></samp> files means Portable Object, to
-distinguish it from <samp><span class="file">.mo</span></samp> files, where MO stands for Machine
-Object. This paradigm, as well as the PO file format, is inspired
-by the NLS standard developed by Uniforum, and first implemented by
-Sun in their Solaris system.
-
- <p>PO files are meant to be read and edited by humans, and associate each
-original, translatable string of a given package with its translation
-in a particular target language. A single PO file is dedicated to
-a single target language. If a package supports many languages,
-there is one such PO file per language supported, and each package
-has its own set of PO files. These PO files are best created by
-the <code>xgettext</code> program, and later updated or refreshed through
-the <code>msgmerge</code> program. Program <code>xgettext</code> extracts all
-marked messages from a set of C files and initializes a PO file with
-empty translations. Program <code>msgmerge</code> takes care of adjusting
-PO files between releases of the corresponding sources, commenting
-obsolete entries, initializing new ones, and updating all source
-line references. Files ending with <samp><span class="file">.pot</span></samp> are kind of base
-translation files found in distributions, in PO file format.
-
- <p>MO files are meant to be read by programs, and are binary in nature.
-A few systems already offer tools for creating and handling MO files
-as part of the Native Language Support coming with the system, but the
-format of these MO files is often different from system to system,
-and non-portable. The tools already provided with these systems don't
-support all the features of GNU <code>gettext</code>. Therefore GNU
-<code>gettext</code> uses its own format for MO files. Files ending with
-<samp><span class="file">.gmo</span></samp> are really MO files, when it is known that these files use
-the GNU format.
-
-<div class="node">
-<a name="Overview"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Files">Files</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Introduction">Introduction</a>
-
-</div>
-
-<h3 class="section">1.5 Overview of GNU <code>gettext</code></h3>
-
- <p><a name="index-overview-of-_0040code_007bgettext_007d-30"></a><a name="index-big-picture-31"></a><a name="index-tutorial-of-_0040code_007bgettext_007d-usage-32"></a>The following diagram summarizes the relation between the files
-handled by GNU <code>gettext</code> and the tools acting on these files.
-It is followed by somewhat detailed explanations, which you should
-read while keeping an eye on the diagram. Having a clear understanding
-of these interrelations will surely help programmers, translators
-and maintainers.
-
-<pre class="example"> Original C Sources ───&gt; Preparation ───&gt; Marked C Sources ───╮
- │
- ╭─────────&lt;─── GNU gettext Library │
- ╭─── make &lt;───┤ │
- │ ╰─────────&lt;────────────────────┬───────────────╯
- │ │
- │ ╭─────&lt;─── PACKAGE.pot &lt;─── xgettext &lt;───╯ ╭───&lt;─── PO Compendium
- │ │ │ ↑
- │ │ ╰───╮ │
- │ ╰───╮ ├───&gt; PO editor ───╮
- │ ├────&gt; msgmerge ──────&gt; LANG.po ────&gt;────────╯ │
- │ ╭───╯ │
- │ │ │
- │ ╰─────────────&lt;───────────────╮ │
- │ ├─── New LANG.po &lt;────────────────────╯
- │ ╭─── LANG.gmo &lt;─── msgfmt &lt;───╯
- │ │
- │ ╰───&gt; install ───&gt; /.../LANG/PACKAGE.mo ───╮
- │ ├───&gt; "Hello world!"
- ╰───────&gt; install ───&gt; /.../bin/PROGRAM ───────╯
-</pre>
- <p><a name="index-marking-translatable-strings-33"></a>As a programmer, the first step to bringing GNU <code>gettext</code>
-into your package is identifying, right in the C sources, those strings
-which are meant to be translatable, and those which are untranslatable.
-This tedious job can be done a little more comfortably using emacs PO
-mode, but you can use any means familiar to you for modifying your
-C sources. Beside this some other simple, standard changes are needed to
-properly initialize the translation library. See <a href="#Sources">Sources</a>, for
-more information about all this.
-
- <p>For newly written software the strings of course can and should be
-marked while writing it. The <code>gettext</code> approach makes this
-very easy. Simply put the following lines at the beginning of each file
-or in a central header file:
-
-<pre class="example"> #define _(String) (String)
- #define N_(String) String
- #define textdomain(Domain)
- #define bindtextdomain(Package, Directory)
-</pre>
- <p class="noindent">Doing this allows you to prepare the sources for internationalization.
-Later when you feel ready for the step to use the <code>gettext</code> library
-simply replace these definitions by the following:
-
- <p><a name="index-include-file-_0040file_007blibintl_002eh_007d-34"></a>
-<pre class="example"> #include &lt;libintl.h&gt;
- #define _(String) gettext (String)
- #define gettext_noop(String) String
- #define N_(String) gettext_noop (String)
-</pre>
- <p><a name="index-link-with-_0040file_007blibintl_007d-35"></a><a name="index-Linux-36"></a>and link against <samp><span class="file">libintl.a</span></samp> or <samp><span class="file">libintl.so</span></samp>. Note that on
-GNU systems, you don't need to link with <code>libintl</code> because the
-<code>gettext</code> library functions are already contained in GNU libc.
-That is all you have to change.
-
- <p><a name="index-template-PO-file-37"></a><a name="index-files_002c-_0040file_007b_002epot_007d-38"></a>Once the C sources have been modified, the <code>xgettext</code> program
-is used to find and extract all translatable strings, and create a
-PO template file out of all these. This <samp><var>package</var><span class="file">.pot</span></samp> file
-contains all original program strings. It has sets of pointers to
-exactly where in C sources each string is used. All translations
-are set to empty. The letter <code>t</code> in <samp><span class="file">.pot</span></samp> marks this as
-a Template PO file, not yet oriented towards any particular language.
-See <a href="#xgettext-Invocation">xgettext Invocation</a>, for more details about how one calls the
-<code>xgettext</code> program. If you are <em>really</em> lazy, you might
-be interested at working a lot more right away, and preparing the
-whole distribution setup (see <a href="#Maintainers">Maintainers</a>). By doing so, you
-spare yourself typing the <code>xgettext</code> command, as <code>make</code>
-should now generate the proper things automatically for you!
-
- <p>The first time through, there is no <samp><var>lang</var><span class="file">.po</span></samp> yet, so the
-<code>msgmerge</code> step may be skipped and replaced by a mere copy of
-<samp><var>package</var><span class="file">.pot</span></samp> to <samp><var>lang</var><span class="file">.po</span></samp>, where <var>lang</var>
-represents the target language. See <a href="#Creating">Creating</a> for details.
-
- <p>Then comes the initial translation of messages. Translation in
-itself is a whole matter, still exclusively meant for humans,
-and whose complexity far overwhelms the level of this manual.
-Nevertheless, a few hints are given in some other chapter of this
-manual (see <a href="#Translators">Translators</a>). You will also find there indications
-about how to contact translating teams, or becoming part of them,
-for sharing your translating concerns with others who target the same
-native language.
-
- <p>While adding the translated messages into the <samp><var>lang</var><span class="file">.po</span></samp>
-PO file, if you are not using one of the dedicated PO file editors
-(see <a href="#Editing">Editing</a>), you are on your own
-for ensuring that your efforts fully respect the PO file format, and quoting
-conventions (see <a href="#PO-Files">PO Files</a>). This is surely not an impossible task,
-as this is the way many people have handled PO files around 1995.
-On the other hand, by using a PO file editor, most details
-of PO file format are taken care of for you, but you have to acquire
-some familiarity with PO file editor itself.
-
- <p>If some common translations have already been saved into a compendium
-PO file, translators may use PO mode for initializing untranslated
-entries from the compendium, and also save selected translations into
-the compendium, updating it (see <a href="#Compendium">Compendium</a>). Compendium files
-are meant to be exchanged between members of a given translation team.
-
- <p>Programs, or packages of programs, are dynamic in nature: users write
-bug reports and suggestion for improvements, maintainers react by
-modifying programs in various ways. The fact that a package has
-already been internationalized should not make maintainers shy
-of adding new strings, or modifying strings already translated.
-They just do their job the best they can. For the Translation
-Project to work smoothly, it is important that maintainers do not
-carry translation concerns on their already loaded shoulders, and that
-translators be kept as free as possible of programming concerns.
-
- <p>The only concern maintainers should have is carefully marking new
-strings as translatable, when they should be, and do not otherwise
-worry about them being translated, as this will come in proper time.
-Consequently, when programs and their strings are adjusted in various
-ways by maintainers, and for matters usually unrelated to translation,
-<code>xgettext</code> would construct <samp><var>package</var><span class="file">.pot</span></samp> files which are
-evolving over time, so the translations carried by <samp><var>lang</var><span class="file">.po</span></samp>
-are slowly fading out of date.
-
- <p><a name="index-evolution-of-packages-39"></a>It is important for translators (and even maintainers) to understand
-that package translation is a continuous process in the lifetime of a
-package, and not something which is done once and for all at the start.
-After an initial burst of translation activity for a given package,
-interventions are needed once in a while, because here and there,
-translated entries become obsolete, and new untranslated entries
-appear, needing translation.
-
- <p>The <code>msgmerge</code> program has the purpose of refreshing an already
-existing <samp><var>lang</var><span class="file">.po</span></samp> file, by comparing it with a newer
-<samp><var>package</var><span class="file">.pot</span></samp> template file, extracted by <code>xgettext</code>
-out of recent C sources. The refreshing operation adjusts all
-references to C source locations for strings, since these strings
-move as programs are modified. Also, <code>msgmerge</code> comments out as
-obsolete, in <samp><var>lang</var><span class="file">.po</span></samp>, those already translated entries
-which are no longer used in the program sources (see <a href="#Obsolete-Entries">Obsolete Entries</a>). It finally discovers new strings and inserts them in
-the resulting PO file as untranslated entries (see <a href="#Untranslated-Entries">Untranslated Entries</a>). See <a href="#msgmerge-Invocation">msgmerge Invocation</a>, for more information about what
-<code>msgmerge</code> really does.
-
- <p>Whatever route or means taken, the goal is to obtain an updated
-<samp><var>lang</var><span class="file">.po</span></samp> file offering translations for all strings.
-
- <p>The temporal mobility, or fluidity of PO files, is an integral part of
-the translation game, and should be well understood, and accepted.
-People resisting it will have a hard time participating in the
-Translation Project, or will give a hard time to other participants! In
-particular, maintainers should relax and include all available official
-PO files in their distributions, even if these have not recently been
-updated, without exerting pressure on the translator teams to get the
-job done. The pressure should rather come
-from the community of users speaking a particular language, and
-maintainers should consider themselves fairly relieved of any concern
-about the adequacy of translation files. On the other hand, translators
-should reasonably try updating the PO files they are responsible for,
-while the package is undergoing pretest, prior to an official
-distribution.
-
- <p>Once the PO file is complete and dependable, the <code>msgfmt</code> program
-is used for turning the PO file into a machine-oriented format, which
-may yield efficient retrieval of translations by the programs of the
-package, whenever needed at runtime (see <a href="#MO-Files">MO Files</a>). See <a href="#msgfmt-Invocation">msgfmt Invocation</a>, for more information about all modes of execution
-for the <code>msgfmt</code> program.
-
- <p>Finally, the modified and marked C sources are compiled and linked
-with the GNU <code>gettext</code> library, usually through the operation of
-<code>make</code>, given a suitable <samp><span class="file">Makefile</span></samp> exists for the project,
-and the resulting executable is installed somewhere users will find it.
-The MO files themselves should also be properly installed. Given the
-appropriate environment variables are set (see <a href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>),
-the program should localize itself automatically, whenever it executes.
-
- <p>The remainder of this manual has the purpose of explaining in depth the various
-steps outlined above.
-
-<div class="node">
-<a name="Users"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PO-Files">PO Files</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Introduction">Introduction</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">2 The User's View</h2>
-
- <p>Nowadays, when users log into a computer, they usually find that all
-their programs show messages in their native language &ndash; at least for
-users of languages with an active free software community, like French or
-German; to a lesser extent for languages with a smaller participation in
-free software and the GNU project, like Hindi and Filipino.
-
- <p>How does this work? How can the user influence the language that is used
-by the programs? This chapter will answer it.
-
-<ul class="menu">
-<li><a accesskey="1" href="#System-Installation">System Installation</a>: Questions During Operating System Installation
-<li><a accesskey="2" href="#Setting-the-GUI-Locale">Setting the GUI Locale</a>: How to Specify the Locale Used by GUI Programs
-<li><a accesskey="3" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>: How to Specify the Locale According to POSIX
-<li><a accesskey="4" href="#Installing-Localizations">Installing Localizations</a>: How to Install Additional Translations
-</ul>
-
-<div class="node">
-<a name="System-Installation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Setting-the-GUI-Locale">Setting the GUI Locale</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Users">Users</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Users">Users</a>
-
-</div>
-
-<h3 class="section">2.1 Operating System Installation</h3>
-
- <p>The default language is often already specified during operating system
-installation. When the operating system is installed, the installer
-typically asks for the language used for the installation process and,
-separately, for the language to use in the installed system. Some OS
-installers only ask for the language once.
-
- <p>This determines the system-wide default language for all users. But the
-installers often give the possibility to install extra localizations for
-additional languages. For example, the localizations of KDE (the K
-Desktop Environment) and OpenOffice.org are often bundled separately,
-as one installable package per language.
-
- <p>At this point it is good to consider the intended use of the machine: If
-it is a machine designated for personal use, additional localizations are
-probably not necessary. If, however, the machine is in use in an
-organization or company that has international relationships, one can
-consider the needs of guest users. If you have a guest from abroad, for
-a week, what could be his preferred locales? It may be worth installing
-these additional localizations ahead of time, since they cost only a bit
-of disk space at this point.
-
- <p>The system-wide default language is the locale configuration that is used
-when a new user account is created. But the user can have his own locale
-configuration that is different from the one of the other users of the
-same machine. He can specify it, typically after the first login, as
-described in the next section.
-
-<div class="node">
-<a name="Setting-the-GUI-Locale"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#System-Installation">System Installation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Users">Users</a>
-
-</div>
-
-<h3 class="section">2.2 Setting the Locale Used by GUI Programs</h3>
-
- <p>The immediately available programs in a user's desktop come from a group
-of programs called a &ldquo;desktop environment&rdquo;; it usually includes the window
-manager, a web browser, a text editor, and more. The most common free
-desktop environments are KDE, GNOME, and Xfce.
-
- <p>The locale used by GUI programs of the desktop environment can be specified
-in a configuration screen called &ldquo;control center&rdquo;, &ldquo;language settings&rdquo;
-or &ldquo;country settings&rdquo;.
-
- <p>Individual GUI programs that are not part of the desktop environment can
-have their locale specified either in a settings panel, or through environment
-variables.
-
- <p>For some programs, it is possible to specify the locale through environment
-variables, possibly even to a different locale than the desktop's locale.
-This means, instead of starting a program through a menu or from the file
-system, you can start it from the command-line, after having set some
-environment variables. The environment variables can be those specified
-in the next section (<a href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>); for some versions of
-KDE, however, the locale is specified through a variable <code>KDE_LANG</code>,
-rather than <code>LANG</code> or <code>LC_ALL</code>.
-
-<div class="node">
-<a name="Setting-the-POSIX-Locale"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Installing-Localizations">Installing Localizations</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Setting-the-GUI-Locale">Setting the GUI Locale</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Users">Users</a>
-
-</div>
-
-<h3 class="section">2.3 Setting the Locale through Environment Variables</h3>
-
- <p>As a user, if your language has been installed for this package, in the
-simplest case, you only have to set the <code>LANG</code> environment variable
-to the appropriate &lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo; combination. For example,
-let's suppose that you speak German and live in Germany. At the shell
-prompt, merely execute
-&lsquo;<samp><span class="samp">setenv&nbsp;LANG&nbsp;de_DE</span></samp>&rsquo;<!-- /@w --> (in <code>csh</code>),
-&lsquo;<samp><span class="samp">export&nbsp;LANG;&nbsp;LANG=de_DE</span></samp>&rsquo;<!-- /@w --> (in <code>sh</code>) or
-&lsquo;<samp><span class="samp">export&nbsp;LANG=de_DE</span></samp>&rsquo;<!-- /@w --> (in <code>bash</code>). This can be done from your
-<samp><span class="file">.login</span></samp> or <samp><span class="file">.profile</span></samp> file, once and for all.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Locale-Names">Locale Names</a>: How a Locale Specification Looks Like
-<li><a accesskey="2" href="#Locale-Environment-Variables">Locale Environment Variables</a>: Which Environment Variable Specfies What
-<li><a accesskey="3" href="#The-LANGUAGE-variable">The LANGUAGE variable</a>: How to Specify a Priority List of Languages
-</ul>
-
-<div class="node">
-<a name="Locale-Names"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Locale-Environment-Variables">Locale Environment Variables</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>
-
-</div>
-
-<h4 class="subsection">2.3.1 Locale Names</h4>
-
- <p>A locale name usually has the form &lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo;. Here
-&lsquo;<samp><var>ll</var></samp>&rsquo; is an ISO&nbsp;639<!-- /@w --> two-letter language code, and
-&lsquo;<samp><var>CC</var></samp>&rsquo; is an ISO&nbsp;3166<!-- /@w --> two-letter country code. For example,
-for German in Germany, <var>ll</var> is <code>de</code>, and <var>CC</var> is <code>DE</code>.
-You find a list of the language codes in appendix <a href="#Language-Codes">Language Codes</a> and
-a list of the country codes in appendix <a href="#Country-Codes">Country Codes</a>.
-
- <p>You might think that the country code specification is redundant. But in
-fact, some languages have dialects in different countries. For example,
-&lsquo;<samp><span class="samp">de_AT</span></samp>&rsquo; is used for Austria, and &lsquo;<samp><span class="samp">pt_BR</span></samp>&rsquo; for Brazil. The country
-code serves to distinguish the dialects.
-
- <p>Many locale names have an extended syntax
-&lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var><span class="samp">.</span><var>encoding</var></samp>&rsquo; that also specifies the character
-encoding. These are in use because between 2000 and 2005, most users have
-switched to locales in UTF-8 encoding. For example, the German locale on
-glibc systems is nowadays &lsquo;<samp><span class="samp">de_DE.UTF-8</span></samp>&rsquo;. The older name &lsquo;<samp><span class="samp">de_DE</span></samp>&rsquo;
-still refers to the German locale as of 2000 that stores characters in
-ISO-8859-1 encoding &ndash; a text encoding that cannot even accomodate the Euro
-currency sign.
-
- <p>Some locale names use &lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var><span class="samp">.@</span><var>variant</var></samp>&rsquo; instead of
-&lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo;. The &lsquo;<samp><span class="samp">@</span><var>variant</var></samp>&rsquo; can denote any kind of
-characteristics that is not already implied by the language <var>ll</var> and
-the country <var>CC</var>. It can denote a particular monetary unit. For example,
-on glibc systems, &lsquo;<samp><span class="samp">de_DE@euro</span></samp>&rsquo; denotes the locale that uses the Euro
-currency, in contrast to the older locale &lsquo;<samp><span class="samp">de_DE</span></samp>&rsquo; which implies the use
-of the currency before 2002. It can also denote a dialect of the language,
-or the script used to write text (for example, &lsquo;<samp><span class="samp">sr_RS@latin</span></samp>&rsquo; uses the
-Latin script, whereas &lsquo;<samp><span class="samp">sr_RS</span></samp>&rsquo; uses the Cyrillic script to write Serbian),
-or the orthography rules, or similar.
-
- <p>On other systems, some variations of this scheme are used, such as
-&lsquo;<samp><var>ll</var></samp>&rsquo;. You can get the list of locales supported by your system
-for your language by running the command &lsquo;<samp><span class="samp">locale -a | grep '^</span><var>ll</var><span class="samp">'</span></samp>&rsquo;.
-
- <p>There is also a special locale, called &lsquo;<samp><span class="samp">C</span></samp>&rsquo;.
-<!-- Don't mention that this locale also has the name "POSIX". When we talk about -->
-<!-- the "POSIX locale", we mean the "locale as specified in the POSIX way", and -->
-<!-- mentioning a locale called "POSIX" would bring total confusion. -->
-When it is used, it disables all localization: in this locale, all programs
-standardized by POSIX use English messages and an unspecified character
-encoding (often US-ASCII, but sometimes also ISO-8859-1 or UTF-8, depending on
-the operating system).
-
-<div class="node">
-<a name="Locale-Environment-Variables"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#The-LANGUAGE-variable">The LANGUAGE variable</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Locale-Names">Locale Names</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>
-
-</div>
-
-<h4 class="subsection">2.3.2 Locale Environment Variables</h4>
-
- <p><a name="index-setting-up-_0040code_007bgettext_007d-at-run-time-40"></a><a name="index-selecting-message-language-41"></a><a name="index-language-selection-42"></a>
-A locale is composed of several <em>locale categories</em>, see <a href="#Aspects">Aspects</a>.
-When a program looks up locale dependent values, it does this according to
-the following environment variables, in priority order:
-
- <ol type=1 start=1>
-<a name="index-LANGUAGE_0040r_007b_002c-environment-variable_007d-43"></a><li><code>LANGUAGE</code>
-<a name="index-LC_005fALL_0040r_007b_002c-environment-variable_007d-44"></a><li><code>LC_ALL</code>
-<a name="index-LC_005fCTYPE_0040r_007b_002c-environment-variable_007d-45"></a><a name="index-LC_005fNUMERIC_0040r_007b_002c-environment-variable_007d-46"></a><a name="index-LC_005fTIME_0040r_007b_002c-environment-variable_007d-47"></a><a name="index-LC_005fCOLLATE_0040r_007b_002c-environment-variable_007d-48"></a><a name="index-LC_005fMONETARY_0040r_007b_002c-environment-variable_007d-49"></a><a name="index-LC_005fMESSAGES_0040r_007b_002c-environment-variable_007d-50"></a><li><code>LC_xxx</code>, according to selected locale category:
-<code>LC_CTYPE</code>, <code>LC_NUMERIC</code>, <code>LC_TIME</code>, <code>LC_COLLATE</code>,
-<code>LC_MONETARY</code>, <code>LC_MESSAGES</code>, ...
-<a name="index-LANG_0040r_007b_002c-environment-variable_007d-51"></a><li><code>LANG</code>
- </ol>
-
- <p>Variables whose value is set but is empty are ignored in this lookup.
-
- <p><code>LANG</code> is the normal environment variable for specifying a locale.
-As a user, you normally set this variable (unless some of the other variables
-have already been set by the system, in <samp><span class="file">/etc/profile</span></samp> or similar
-initialization files).
-
- <p><code>LC_CTYPE</code>, <code>LC_NUMERIC</code>, <code>LC_TIME</code>, <code>LC_COLLATE</code>,
-<code>LC_MONETARY</code>, <code>LC_MESSAGES</code>, and so on, are the environment
-variables meant to override <code>LANG</code> and affecting a single locale
-category only. For example, assume you are a Swedish user in Spain, and you
-want your programs to handle numbers and dates according to Spanish
-conventions, and only the messages should be in Swedish. Then you could
-create a locale named &lsquo;<samp><span class="samp">sv_ES</span></samp>&rsquo; or &lsquo;<samp><span class="samp">sv_ES.UTF-8</span></samp>&rsquo; by use of the
-<code>localedef</code> program. But it is simpler, and achieves the same effect,
-to set the <code>LANG</code> variable to <code>es_ES.UTF-8</code> and the
-<code>LC_MESSAGES</code> variable to <code>sv_SE.UTF-8</code>; these two locales come
-already preinstalled with the operating system.
-
- <p><code>LC_ALL</code> is an environment variable that overrides all of these.
-It is typically used in scripts that run particular programs. For example,
-<code>configure</code> scripts generated by GNU autoconf use <code>LC_ALL</code> to make
-sure that the configuration tests don't operate in locale dependent ways.
-
- <p>Some systems, unfortunately, set <code>LC_ALL</code> in <samp><span class="file">/etc/profile</span></samp> or in
-similar initialization files. As a user, you therefore have to unset this
-variable if you want to set <code>LANG</code> and optionally some of the other
-<code>LC_xxx</code> variables.
-
- <p>The <code>LANGUAGE</code> variable is described in the next subsection.
-
-<div class="node">
-<a name="The-LANGUAGE-variable"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Locale-Environment-Variables">Locale Environment Variables</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>
-
-</div>
-
-<h4 class="subsection">2.3.3 Specifying a Priority List of Languages</h4>
-
- <p>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
-<code>LANGUAGE</code>. GNU <code>gettext</code> gives preference to <code>LANGUAGE</code>
-over <code>LC_ALL</code> and <code>LANG</code> for the purpose of message handling,
-but you still need to have <code>LANG</code> (or <code>LC_ALL</code>) 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 <code>LANGUAGE</code>
-to &lsquo;<samp><span class="samp">sv:de</span></samp>&rsquo; while leaving <code>LANG</code> to &lsquo;<samp><span class="samp">sv_SE</span></samp>&rsquo;.
-
- <p>Special advice for Norwegian users: The language code for Norwegian
-bokma*l changed from &lsquo;<samp><span class="samp">no</span></samp>&rsquo; to &lsquo;<samp><span class="samp">nb</span></samp>&rsquo; recently (in 2003).
-During the transition period, while some message catalogs for this language
-are installed under &lsquo;<samp><span class="samp">nb</span></samp>&rsquo; and some older ones under &lsquo;<samp><span class="samp">no</span></samp>&rsquo;, it is
-recommended for Norwegian users to set <code>LANGUAGE</code> to &lsquo;<samp><span class="samp">nb:no</span></samp>&rsquo; so that
-both newer and older translations are used.
-
- <p>In the <code>LANGUAGE</code> environment variable, but not in the other
-environment variables, &lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo; combinations can be
-abbreviated as &lsquo;<samp><var>ll</var></samp>&rsquo; to denote the language's main dialect.
-For example, &lsquo;<samp><span class="samp">de</span></samp>&rsquo; is equivalent to &lsquo;<samp><span class="samp">de_DE</span></samp>&rsquo; (German as spoken in
-Germany), and &lsquo;<samp><span class="samp">pt</span></samp>&rsquo; to &lsquo;<samp><span class="samp">pt_PT</span></samp>&rsquo; (Portuguese as spoken in Portugal)
-in this context.
-
- <p>Note: The variable <code>LANGUAGE</code> is ignored if the locale is set to
-&lsquo;<samp><span class="samp">C</span></samp>&rsquo;. In other words, you have to first enable localization, by setting
-<code>LANG</code> (or <code>LC_ALL</code>) to a value other than &lsquo;<samp><span class="samp">C</span></samp>&rsquo;, before you can
-use a language priority list through the <code>LANGUAGE</code> variable.
-
-<div class="node">
-<a name="Installing-Localizations"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Setting-the-POSIX-Locale">Setting the POSIX Locale</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Users">Users</a>
-
-</div>
-
-<h3 class="section">2.4 Installing Translations for Particular Programs</h3>
-
- <p><a name="index-Translation-Matrix-52"></a><a name="index-available-translations-53"></a>
-Languages are not equally well supported in all packages using GNU
-<code>gettext</code>, and more translations are added over time. Usually, you
-use the translations that are shipped with the operating system
-or with particular packages that you install afterwards. But you can also
-install newer localizations directly. For doing this, you will need an
-understanding where each localization file is stored on the file system.
-
- <p><a name="index-g_t_0040file_007bABOUT_002dNLS_007d-file-54"></a>For programs that participate in the Translation Project, you can start
-looking for translations here:
-<a href="http://translationproject.org/team/index.html">http://translationproject.org/team/index.html</a>.
-A snapshot of this information is also found in the <samp><span class="file">ABOUT-NLS</span></samp> file
-that is shipped with GNU gettext.
-
- <p>For programs that are part of the KDE project, the starting point is:
-<a href="http://i18n.kde.org/">http://i18n.kde.org/</a>.
-
- <p>For programs that are part of the GNOME project, the starting point is:
-<a href="http://www.gnome.org/i18n/">http://www.gnome.org/i18n/</a>.
-
- <p>For other programs, you may check whether the program's source code package
-contains some <samp><var>ll</var><span class="file">.po</span></samp> files; often they are kept together in a
-directory called <samp><span class="file">po/</span></samp>. Each <samp><var>ll</var><span class="file">.po</span></samp> file contains the
-message translations for the language whose abbreviation of <var>ll</var>.
-
-<div class="node">
-<a name="PO-Files"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Sources">Sources</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Users">Users</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">3 The Format of PO Files</h2>
-
- <p><a name="index-PO-files_0027-format-55"></a><a name="index-file-format_002c-_0040file_007b_002epo_007d-56"></a>
-The GNU <code>gettext</code> toolset helps programmers and translators
-at producing, updating and using translation files, mainly those
-PO files which are textual, editable files. This chapter explains
-the format of PO files.
-
- <p>A PO file is made up of many entries, each entry holding the relation
-between an original untranslated string and its corresponding
-translation. All entries in a given PO file usually pertain
-to a single project, and all translations are expressed in a single
-target language. One PO file <dfn>entry</dfn> has the following schematic
-structure:
-
-<pre class="example"> <var>white-space</var>
- # <var>translator-comments</var>
- #. <var>extracted-comments</var>
- #: <var>reference</var>...
- #, <var>flag</var>...
- #| msgid <var>previous-untranslated-string</var>
- msgid <var>untranslated-string</var>
- msgstr <var>translated-string</var>
-</pre>
- <p>The general structure of a PO file should be well understood by
-the translator. When using PO mode, very little has to be known
-about the format details, as PO mode takes care of them for her.
-
- <p>A simple entry can look like this:
-
-<pre class="example"> #: lib/error.c:116
- msgid "Unknown system error"
- msgstr "Error desconegut del sistema"
-</pre>
- <p><a name="index-comments_002c-translator-57"></a><a name="index-comments_002c-automatic-58"></a><a name="index-comments_002c-extracted-59"></a>Entries begin with some optional white space. Usually, when generated
-through GNU <code>gettext</code> tools, there is exactly one blank line
-between entries. Then comments follow, on lines all starting with the
-character <code>#</code>. There are two kinds of comments: those which have
-some white space immediately following the <code>#</code> - the <var>translator
-comments</var> -, which comments are created and maintained exclusively by the
-translator, and those which have some non-white character just after the
-<code>#</code> - the <var>automatic comments</var> -, which comments are created and
-maintained automatically by GNU <code>gettext</code> tools. Comment lines
-starting with <code>#.</code> contain comments given by the programmer, directed
-at the translator; these comments are called <var>extracted comments</var>
-because the <code>xgettext</code> program extracts them from the program's
-source code. Comment lines starting with <code>#:</code> contain references to
-the program's source code. Comment lines starting with <code>#,</code> contain
-flags; more about these below. Comment lines starting with <code>#|</code>
-contain the previous untranslated string for which the translator gave
-a translation.
-
- <p>All comments, of either kind, are optional.
-
- <p><a name="index-msgid-60"></a><a name="index-msgstr-61"></a>After white space and comments, entries show two strings, namely
-first the untranslated string as it appears in the original program
-sources, and then, the translation of this string. The original
-string is introduced by the keyword <code>msgid</code>, and the translation,
-by <code>msgstr</code>. The two strings, untranslated and translated,
-are quoted in various ways in the PO file, using <code>"</code>
-delimiters and <code>\</code> escapes, but the translator does not really
-have to pay attention to the precise quoting format, as PO mode fully
-takes care of quoting for her.
-
- <p>The <code>msgid</code> strings, as well as automatic comments, are produced
-and managed by other GNU <code>gettext</code> tools, and PO mode does not
-provide means for the translator to alter these. The most she can
-do is merely deleting them, and only by deleting the whole entry.
-On the other hand, the <code>msgstr</code> string, as well as translator
-comments, are really meant for the translator, and PO mode gives her
-the full control she needs.
-
- <p>The comment lines beginning with <code>#,</code> are special because they are
-not completely ignored by the programs as comments generally are. The
-comma separated list of <var>flag</var>s is used by the <code>msgfmt</code>
-program to give the user some better diagnostic messages. Currently
-there are two forms of flags defined:
-
- <dl>
-<dt><code>fuzzy</code><dd><a name="index-fuzzy_0040r_007b-flag_007d-62"></a>This flag can be generated by the <code>msgmerge</code> program or it can be
-inserted by the translator herself. It shows that the <code>msgstr</code>
-string might not be a correct translation (anymore). Only the translator
-can judge if the translation requires further modification, or is
-acceptable as is. Once satisfied with the translation, she then removes
-this <code>fuzzy</code> attribute. The <code>msgmerge</code> program inserts this
-when it combined the <code>msgid</code> and <code>msgstr</code> entries after fuzzy
-search only. See <a href="#Fuzzy-Entries">Fuzzy Entries</a>.
-
- <br><dt><code>c-format</code><dd><a name="index-c_002dformat_0040r_007b-flag_007d-63"></a><dt><code>no-c-format</code><dd><a name="index-no_002dc_002dformat_0040r_007b-flag_007d-64"></a>These flags should not be added by a human. Instead only the
-<code>xgettext</code> program adds them. In an automated PO file processing
-system as proposed here, the user's changes would be thrown away again as
-soon as the <code>xgettext</code> program generates a new template file.
-
- <p>The <code>c-format</code> flag indicates that the untranslated string and the
-translation are supposed to be C format strings. The <code>no-c-format</code>
-flag indicates that they are not C format strings, even though the untranslated
-string happens to look like a C format string (with &lsquo;<samp><span class="samp">%</span></samp>&rsquo; directives).
-
- <p>When the <code>c-format</code> flag is given for a string the <code>msgfmt</code>
-program does some more tests to check the validity of the translation.
-See <a href="#msgfmt-Invocation">msgfmt Invocation</a>, <a href="#c_002dformat-Flag">c-format Flag</a> and <a href="#c_002dformat">c-format</a>.
-
- <br><dt><code>objc-format</code><dd><a name="index-objc_002dformat_0040r_007b-flag_007d-65"></a><dt><code>no-objc-format</code><dd><a name="index-no_002dobjc_002dformat_0040r_007b-flag_007d-66"></a>Likewise for Objective C, see <a href="#objc_002dformat">objc-format</a>.
-
- <br><dt><code>sh-format</code><dd><a name="index-sh_002dformat_0040r_007b-flag_007d-67"></a><dt><code>no-sh-format</code><dd><a name="index-no_002dsh_002dformat_0040r_007b-flag_007d-68"></a>Likewise for Shell, see <a href="#sh_002dformat">sh-format</a>.
-
- <br><dt><code>python-format</code><dd><a name="index-python_002dformat_0040r_007b-flag_007d-69"></a><dt><code>no-python-format</code><dd><a name="index-no_002dpython_002dformat_0040r_007b-flag_007d-70"></a>Likewise for Python, see <a href="#python_002dformat">python-format</a>.
-
- <br><dt><code>lisp-format</code><dd><a name="index-lisp_002dformat_0040r_007b-flag_007d-71"></a><dt><code>no-lisp-format</code><dd><a name="index-no_002dlisp_002dformat_0040r_007b-flag_007d-72"></a>Likewise for Lisp, see <a href="#lisp_002dformat">lisp-format</a>.
-
- <br><dt><code>elisp-format</code><dd><a name="index-elisp_002dformat_0040r_007b-flag_007d-73"></a><dt><code>no-elisp-format</code><dd><a name="index-no_002delisp_002dformat_0040r_007b-flag_007d-74"></a>Likewise for Emacs Lisp, see <a href="#elisp_002dformat">elisp-format</a>.
-
- <br><dt><code>librep-format</code><dd><a name="index-librep_002dformat_0040r_007b-flag_007d-75"></a><dt><code>no-librep-format</code><dd><a name="index-no_002dlibrep_002dformat_0040r_007b-flag_007d-76"></a>Likewise for librep, see <a href="#librep_002dformat">librep-format</a>.
-
- <br><dt><code>scheme-format</code><dd><a name="index-scheme_002dformat_0040r_007b-flag_007d-77"></a><dt><code>no-scheme-format</code><dd><a name="index-no_002dscheme_002dformat_0040r_007b-flag_007d-78"></a>Likewise for Scheme, see <a href="#scheme_002dformat">scheme-format</a>.
-
- <br><dt><code>smalltalk-format</code><dd><a name="index-smalltalk_002dformat_0040r_007b-flag_007d-79"></a><dt><code>no-smalltalk-format</code><dd><a name="index-no_002dsmalltalk_002dformat_0040r_007b-flag_007d-80"></a>Likewise for Smalltalk, see <a href="#smalltalk_002dformat">smalltalk-format</a>.
-
- <br><dt><code>java-format</code><dd><a name="index-java_002dformat_0040r_007b-flag_007d-81"></a><dt><code>no-java-format</code><dd><a name="index-no_002djava_002dformat_0040r_007b-flag_007d-82"></a>Likewise for Java, see <a href="#java_002dformat">java-format</a>.
-
- <br><dt><code>csharp-format</code><dd><a name="index-csharp_002dformat_0040r_007b-flag_007d-83"></a><dt><code>no-csharp-format</code><dd><a name="index-no_002dcsharp_002dformat_0040r_007b-flag_007d-84"></a>Likewise for C#, see <a href="#csharp_002dformat">csharp-format</a>.
-
- <br><dt><code>awk-format</code><dd><a name="index-awk_002dformat_0040r_007b-flag_007d-85"></a><dt><code>no-awk-format</code><dd><a name="index-no_002dawk_002dformat_0040r_007b-flag_007d-86"></a>Likewise for awk, see <a href="#awk_002dformat">awk-format</a>.
-
- <br><dt><code>object-pascal-format</code><dd><a name="index-object_002dpascal_002dformat_0040r_007b-flag_007d-87"></a><dt><code>no-object-pascal-format</code><dd><a name="index-no_002dobject_002dpascal_002dformat_0040r_007b-flag_007d-88"></a>Likewise for Object Pascal, see <a href="#object_002dpascal_002dformat">object-pascal-format</a>.
-
- <br><dt><code>ycp-format</code><dd><a name="index-ycp_002dformat_0040r_007b-flag_007d-89"></a><dt><code>no-ycp-format</code><dd><a name="index-no_002dycp_002dformat_0040r_007b-flag_007d-90"></a>Likewise for YCP, see <a href="#ycp_002dformat">ycp-format</a>.
-
- <br><dt><code>tcl-format</code><dd><a name="index-tcl_002dformat_0040r_007b-flag_007d-91"></a><dt><code>no-tcl-format</code><dd><a name="index-no_002dtcl_002dformat_0040r_007b-flag_007d-92"></a>Likewise for Tcl, see <a href="#tcl_002dformat">tcl-format</a>.
-
- <br><dt><code>perl-format</code><dd><a name="index-perl_002dformat_0040r_007b-flag_007d-93"></a><dt><code>no-perl-format</code><dd><a name="index-no_002dperl_002dformat_0040r_007b-flag_007d-94"></a>Likewise for Perl, see <a href="#perl_002dformat">perl-format</a>.
-
- <br><dt><code>perl-brace-format</code><dd><a name="index-perl_002dbrace_002dformat_0040r_007b-flag_007d-95"></a><dt><code>no-perl-brace-format</code><dd><a name="index-no_002dperl_002dbrace_002dformat_0040r_007b-flag_007d-96"></a>Likewise for Perl brace, see <a href="#perl_002dformat">perl-format</a>.
-
- <br><dt><code>php-format</code><dd><a name="index-php_002dformat_0040r_007b-flag_007d-97"></a><dt><code>no-php-format</code><dd><a name="index-no_002dphp_002dformat_0040r_007b-flag_007d-98"></a>Likewise for PHP, see <a href="#php_002dformat">php-format</a>.
-
- <br><dt><code>gcc-internal-format</code><dd><a name="index-gcc_002dinternal_002dformat_0040r_007b-flag_007d-99"></a><dt><code>no-gcc-internal-format</code><dd><a name="index-no_002dgcc_002dinternal_002dformat_0040r_007b-flag_007d-100"></a>Likewise for the GCC sources, see <a href="#gcc_002dinternal_002dformat">gcc-internal-format</a>.
-
- <br><dt><code>gfc-internal-format</code><dd><a name="index-gfc_002dinternal_002dformat_0040r_007b-flag_007d-101"></a><dt><code>no-gfc-internal-format</code><dd><a name="index-no_002dgfc_002dinternal_002dformat_0040r_007b-flag_007d-102"></a>Likewise for the GNU Fortran Compiler sources, see <a href="#gfc_002dinternal_002dformat">gfc-internal-format</a>.
-
- <br><dt><code>qt-format</code><dd><a name="index-qt_002dformat_0040r_007b-flag_007d-103"></a><dt><code>no-qt-format</code><dd><a name="index-no_002dqt_002dformat_0040r_007b-flag_007d-104"></a>Likewise for Qt, see <a href="#qt_002dformat">qt-format</a>.
-
- <br><dt><code>qt-plural-format</code><dd><a name="index-qt_002dplural_002dformat_0040r_007b-flag_007d-105"></a><dt><code>no-qt-plural-format</code><dd><a name="index-no_002dqt_002dplural_002dformat_0040r_007b-flag_007d-106"></a>Likewise for Qt plural forms, see <a href="#qt_002dplural_002dformat">qt-plural-format</a>.
-
- <br><dt><code>kde-format</code><dd><a name="index-kde_002dformat_0040r_007b-flag_007d-107"></a><dt><code>no-kde-format</code><dd><a name="index-no_002dkde_002dformat_0040r_007b-flag_007d-108"></a>Likewise for KDE, see <a href="#kde_002dformat">kde-format</a>.
-
- <br><dt><code>boost-format</code><dd><a name="index-boost_002dformat_0040r_007b-flag_007d-109"></a><dt><code>no-boost-format</code><dd><a name="index-no_002dboost_002dformat_0040r_007b-flag_007d-110"></a>Likewise for Boost, see <a href="#boost_002dformat">boost-format</a>.
-
- </dl>
-
- <p><a name="index-msgctxt-111"></a><a name="index-context_002c-in-PO-files-112"></a>It is also possible to have entries with a context specifier. They look like
-this:
-
-<pre class="example"> <var>white-space</var>
- # <var>translator-comments</var>
- #. <var>extracted-comments</var>
- #: <var>reference</var>...
- #, <var>flag</var>...
- #| msgctxt <var>previous-context</var>
- #| msgid <var>previous-untranslated-string</var>
- msgctxt <var>context</var>
- msgid <var>untranslated-string</var>
- msgstr <var>translated-string</var>
-</pre>
- <p>The context serves to disambiguate messages with the same
-<var>untranslated-string</var>. It is possible to have several entries with
-the same <var>untranslated-string</var> in a PO file, provided that they each
-have a different <var>context</var>. Note that an empty <var>context</var> string
-and an absent <code>msgctxt</code> line do not mean the same thing.
-
- <p><a name="index-msgid_005fplural-113"></a><a name="index-plural-forms_002c-in-PO-files-114"></a>A different kind of entries is used for translations which involve
-plural forms.
-
-<pre class="example"> <var>white-space</var>
- # <var>translator-comments</var>
- #. <var>extracted-comments</var>
- #: <var>reference</var>...
- #, <var>flag</var>...
- #| msgid <var>previous-untranslated-string-singular</var>
- #| msgid_plural <var>previous-untranslated-string-plural</var>
- msgid <var>untranslated-string-singular</var>
- msgid_plural <var>untranslated-string-plural</var>
- msgstr[0] <var>translated-string-case-0</var>
- ...
- msgstr[N] <var>translated-string-case-n</var>
-</pre>
- <p>Such an entry can look like this:
-
-<pre class="example"> #: src/msgcmp.c:338 src/po-lex.c:699
- #, c-format
- msgid "found %d fatal error"
- msgid_plural "found %d fatal errors"
- msgstr[0] "s'ha trobat %d error fatal"
- msgstr[1] "s'han trobat %d errors fatals"
-</pre>
- <p>Here also, a <code>msgctxt</code> context can be specified before <code>msgid</code>,
-like above.
-
- <p>Here, additional kinds of flags can be used:
-
- <dl>
-<dt><code>range:</code><dd><a name="index-range_003a_0040r_007b-flag_007d-115"></a>This flag is followed by a range of non-negative numbers, using the syntax
-<code>range: </code><var>minimum-value</var><code>..</code><var>maximum-value</var>. It designates the
-possible values that the numeric parameter of the message can take. In some
-languages, translators may produce slightly better translations if they know
-that the value can only take on values between 0 and 10, for example.
-</dl>
-
- <p>The <var>previous-untranslated-string</var> is optionally inserted by the
-<code>msgmerge</code> program, at the same time when it marks a message fuzzy.
-It helps the translator to see which changes were done by the developers
-on the <var>untranslated-string</var>.
-
- <p>It happens that some lines, usually whitespace or comments, follow the
-very last entry of a PO file. Such lines are not part of any entry,
-and will be dropped when the PO file is processed by the tools, or may
-disturb some PO file editors.
-
- <p>The remainder of this section may be safely skipped by those using
-a PO file editor, yet it may be interesting for everybody to have a better
-idea of the precise format of a PO file. On the other hand, those
-wishing to modify PO files by hand should carefully continue reading on.
-
- <p>Each of <var>untranslated-string</var> and <var>translated-string</var> respects
-the C syntax for a character string, including the surrounding quotes
-and embedded backslashed escape sequences. When the time comes
-to write multi-line strings, one should not use escaped newlines.
-Instead, a closing quote should follow the last character on the
-line to be continued, and an opening quote should resume the string
-at the beginning of the following PO file line. For example:
-
-<pre class="example"> msgid ""
- "Here is an example of how one might continue a very long string\n"
- "for the common case the string represents multi-line output.\n"
-</pre>
- <p class="noindent">In this example, the empty string is used on the first line, to
-allow better alignment of the <code>H</code> from the word &lsquo;<samp><span class="samp">Here</span></samp>&rsquo;
-over the <code>f</code> from the word &lsquo;<samp><span class="samp">for</span></samp>&rsquo;. In this example, the
-<code>msgid</code> keyword is followed by three strings, which are meant
-to be concatenated. Concatenating the empty string does not change
-the resulting overall string, but it is a way for us to comply with
-the necessity of <code>msgid</code> to be followed by a string on the same
-line, while keeping the multi-line presentation left-justified, as
-we find this to be a cleaner disposition. The empty string could have
-been omitted, but only if the string starting with &lsquo;<samp><span class="samp">Here</span></samp>&rsquo; was
-promoted on the first line, right after <code>msgid</code>.<a rel="footnote" href="#fn-2" name="fnd-2"><sup>2</sup></a> It was not really necessary
-either to switch between the two last quoted strings immediately after
-the newline &lsquo;<samp><span class="samp">\n</span></samp>&rsquo;, the switch could have occurred after <em>any</em>
-other character, we just did it this way because it is neater.
-
- <p><a name="index-newlines-in-PO-files-116"></a>One should carefully distinguish between end of lines marked as
-&lsquo;<samp><span class="samp">\n</span></samp>&rsquo; <em>inside</em> quotes, which are part of the represented
-string, and end of lines in the PO file itself, outside string quotes,
-which have no incidence on the represented string.
-
- <p><a name="index-comments-in-PO-files-117"></a>Outside strings, white lines and comments may be used freely.
-Comments start at the beginning of a line with &lsquo;<samp><span class="samp">#</span></samp>&rsquo; and extend
-until the end of the PO file line. Comments written by translators
-should have the initial &lsquo;<samp><span class="samp">#</span></samp>&rsquo; immediately followed by some white
-space. If the &lsquo;<samp><span class="samp">#</span></samp>&rsquo; is not immediately followed by white space,
-this comment is most likely generated and managed by specialized GNU
-tools, and might disappear or be replaced unexpectedly when the PO
-file is given to <code>msgmerge</code>.
-
-<div class="node">
-<a name="Sources"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Template">Template</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PO-Files">PO Files</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">4 Preparing Program Sources</h2>
-
- <p><a name="index-preparing-programs-for-translation-118"></a>
-<!-- FIXME: Rewrite (the whole chapter). -->
-
- <p>For the programmer, changes to the C source code fall into three
-categories. First, you have to make the localization functions
-known to all modules needing message translation. Second, you should
-properly trigger the operation of GNU <code>gettext</code> when the program
-initializes, usually from the <code>main</code> function. Last, you should
-identify, adjust and mark all constant strings in your program
-needing translation.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Importing">Importing</a>: Importing the <code>gettext</code> declaration
-<li><a accesskey="2" href="#Triggering">Triggering</a>: Triggering <code>gettext</code> Operations
-<li><a accesskey="3" href="#Preparing-Strings">Preparing Strings</a>: Preparing Translatable Strings
-<li><a accesskey="4" href="#Mark-Keywords">Mark Keywords</a>: How Marks Appear in Sources
-<li><a accesskey="5" href="#Marking">Marking</a>: Marking Translatable Strings
-<li><a accesskey="6" href="#c_002dformat-Flag">c-format Flag</a>: Telling something about the following string
-<li><a accesskey="7" href="#Special-cases">Special cases</a>: Special Cases of Translatable Strings
-<li><a accesskey="8" href="#Bug-Report-Address">Bug Report Address</a>: Letting Users Report Translation Bugs
-<li><a accesskey="9" href="#Names">Names</a>: Marking Proper Names for Translation
-<li><a href="#Libraries">Libraries</a>: Preparing Library Sources
-</ul>
-
-<div class="node">
-<a name="Importing"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Triggering">Triggering</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Sources">Sources</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.1 Importing the <code>gettext</code> declaration</h3>
-
- <p>Presuming that your set of programs, or package, has been adjusted
-so all needed GNU <code>gettext</code> files are available, and your
-<samp><span class="file">Makefile</span></samp> files are adjusted (see <a href="#Maintainers">Maintainers</a>), each C module
-having translated C strings should contain the line:
-
- <p><a name="index-include-file-_0040file_007blibintl_002eh_007d-119"></a>
-<pre class="example"> #include &lt;libintl.h&gt;
-</pre>
- <p>Similarly, each C module containing <code>printf()</code>/<code>fprintf()</code>/...
-calls with a format string that could be a translated C string (even if
-the C string comes from a different C module) should contain the line:
-
-<pre class="example"> #include &lt;libintl.h&gt;
-</pre>
- <div class="node">
-<a name="Triggering"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Preparing-Strings">Preparing Strings</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Importing">Importing</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.2 Triggering <code>gettext</code> Operations</h3>
-
- <p><a name="index-initialization-120"></a>The initialization of locale data should be done with more or less
-the same code in every program, as demonstrated below:
-
-<pre class="example"> int
- main (int argc, char *argv[])
- {
- ...
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
- ...
- }
-</pre>
- <p><var>PACKAGE</var> and <var>LOCALEDIR</var> should be provided either by
-<samp><span class="file">config.h</span></samp> or by the Makefile. For now consult the <code>gettext</code>
-or <code>hello</code> sources for more information.
-
- <p><a name="index-locale-category_002c-LC_005fALL-121"></a><a name="index-locale-category_002c-LC_005fCTYPE-122"></a>The use of <code>LC_ALL</code> might not be appropriate for you.
-<code>LC_ALL</code> includes all locale categories and especially
-<code>LC_CTYPE</code>. This latter category is responsible for determining
-character classes with the <code>isalnum</code> etc. functions from
-<samp><span class="file">ctype.h</span></samp> which could especially for programs, which process some
-kind of input language, be wrong. For example this would mean that a
-source code using the &ccedil; (c-cedilla character) is runnable in
-France but not in the U.S.
-
- <p>Some systems also have problems with parsing numbers using the
-<code>scanf</code> functions if an other but the <code>LC_ALL</code> locale category is
-used. The standards say that additional formats but the one known in the
-<code>"C"</code> locale might be recognized. But some systems seem to reject
-numbers in the <code>"C"</code> locale format. In some situation, it might
-also be a problem with the notation itself which makes it impossible to
-recognize whether the number is in the <code>"C"</code> locale or the local
-format. This can happen if thousands separator characters are used.
-Some locales define this character according to the national
-conventions to <code>'.'</code> which is the same character used in the
-<code>"C"</code> locale to denote the decimal point.
-
- <p>So it is sometimes necessary to replace the <code>LC_ALL</code> line in the
-code above by a sequence of <code>setlocale</code> lines
-
-<pre class="example"> {
- ...
- setlocale (LC_CTYPE, "");
- setlocale (LC_MESSAGES, "");
- ...
- }
-</pre>
- <p><a name="index-locale-category_002c-LC_005fCTYPE-123"></a><a name="index-locale-category_002c-LC_005fCOLLATE-124"></a><a name="index-locale-category_002c-LC_005fMONETARY-125"></a><a name="index-locale-category_002c-LC_005fNUMERIC-126"></a><a name="index-locale-category_002c-LC_005fTIME-127"></a><a name="index-locale-category_002c-LC_005fMESSAGES-128"></a><a name="index-locale-category_002c-LC_005fRESPONSES-129"></a>On all POSIX conformant systems the locale categories <code>LC_CTYPE</code>,
-<code>LC_MESSAGES</code>, <code>LC_COLLATE</code>, <code>LC_MONETARY</code>,
-<code>LC_NUMERIC</code>, and <code>LC_TIME</code> are available. On some systems
-which are only ISO C compliant, <code>LC_MESSAGES</code> is missing, but
-a substitute for it is defined in GNU gettext's <code>&lt;libintl.h&gt;</code> and
-in GNU gnulib's <code>&lt;locale.h&gt;</code>.
-
- <p>Note that changing the <code>LC_CTYPE</code> also affects the functions
-declared in the <code>&lt;ctype.h&gt;</code> standard header and some functions
-declared in the <code>&lt;string.h&gt;</code> and <code>&lt;stdlib.h&gt;</code> standard headers.
-If this is not
-desirable in your application (for example in a compiler's parser),
-you can use a set of substitute functions which hardwire the C locale,
-such as found in the modules &lsquo;<samp><span class="samp">c-ctype</span></samp>&rsquo;, &lsquo;<samp><span class="samp">c-strcase</span></samp>&rsquo;,
-&lsquo;<samp><span class="samp">c-strcasestr</span></samp>&rsquo;, &lsquo;<samp><span class="samp">c-strtod</span></samp>&rsquo;, &lsquo;<samp><span class="samp">c-strtold</span></samp>&rsquo; in the GNU gnulib
-source distribution.
-
- <p>It is also possible to switch the locale forth and back between the
-environment dependent locale and the C locale, but this approach is
-normally avoided because a <code>setlocale</code> call is expensive,
-because it is tedious to determine the places where a locale switch
-is needed in a large program's source, and because switching a locale
-is not multithread-safe.
-
-<div class="node">
-<a name="Preparing-Strings"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Mark-Keywords">Mark Keywords</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Triggering">Triggering</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.3 Preparing Translatable Strings</h3>
-
- <p><a name="index-marking-strings_002c-preparations-130"></a>Before strings can be marked for translations, they sometimes need to
-be adjusted. Usually preparing a string for translation is done right
-before marking it, during the marking phase which is described in the
-next sections. What you have to keep in mind while doing that is the
-following.
-
- <ul>
-<li>Decent English style.
-
- <li>Entire sentences.
-
- <li>Split at paragraphs.
-
- <li>Use format strings instead of string concatenation.
-
- <li>Avoid unusual markup and unusual control characters.
-</ul>
-
-<p class="noindent">Let's look at some examples of these guidelines.
-
- <p><a name="index-style-131"></a>Translatable strings should be in good English style. If slang language
-with abbreviations and shortcuts is used, often translators will not
-understand the message and will produce very inappropriate translations.
-
-<pre class="example"> "%s: is parameter\n"
-</pre>
- <p class="noindent">This is nearly untranslatable: Is the displayed item <em>a</em> parameter or
-<em>the</em> parameter?
-
-<pre class="example"> "No match"
-</pre>
- <p class="noindent">The ambiguity in this message makes it unintelligible: Is the program
-attempting to set something on fire? Does it mean "The given object does
-not match the template"? Does it mean "The template does not fit for any
-of the objects"?
-
- <p><a name="index-ambiguities-132"></a>In both cases, adding more words to the message will help both the
-translator and the English speaking user.
-
- <p><a name="index-sentences-133"></a>Translatable strings should be entire sentences. It is often not possible
-to translate single verbs or adjectives in a substitutable way.
-
-<pre class="example"> printf ("File %s is %s protected", filename, rw ? "write" : "read");
-</pre>
- <p class="noindent">Most translators will not look at the source and will thus only see the
-string <code>"File %s is %s protected"</code>, which is unintelligible. Change
-this to
-
-<pre class="example"> printf (rw ? "File %s is write protected" : "File %s is read protected",
- filename);
-</pre>
- <p class="noindent">This way the translator will not only understand the message, she will
-also be able to find the appropriate grammatical construction. A French
-translator for example translates "write protected" like "protected
-against writing".
-
- <p>Entire sentences are also important because in many languages, the
-declination of some word in a sentence depends on the gender or the
-number (singular/plural) of another part of the sentence. There are
-usually more interdependencies between words than in English. The
-consequence is that asking a translator to translate two half-sentences
-and then combining these two half-sentences through dumb string concatenation
-will not work, for many languages, even though it would work for English.
-That's why translators need to handle entire sentences.
-
- <p>Often sentences don't fit into a single line. If a sentence is output
-using two subsequent <code>printf</code> statements, like this
-
-<pre class="example"> printf ("Locale charset \"%s\" is different from\n", lcharset);
- printf ("input file charset \"%s\".\n", fcharset);
-</pre>
- <p class="noindent">the translator would have to translate two half sentences, but nothing
-in the POT file would tell her that the two half sentences belong together.
-It is necessary to merge the two <code>printf</code> statements so that the
-translator can handle the entire sentence at once and decide at which
-place to insert a line break in the translation (if at all):
-
-<pre class="example"> printf ("Locale charset \"%s\" is different from\n\
- input file charset \"%s\".\n", lcharset, fcharset);
-</pre>
- <p>You may now ask: how about two or more adjacent sentences? Like in this case:
-
-<pre class="example"> puts ("Apollo 13 scenario: Stack overflow handling failed.");
- puts ("On the next stack overflow we will crash!!!");
-</pre>
- <p class="noindent">Should these two statements merged into a single one? I would recommend to
-merge them if the two sentences are related to each other, because then it
-makes it easier for the translator to understand and translate both. On
-the other hand, if one of the two messages is a stereotypic one, occurring
-in other places as well, you will do a favour to the translator by not
-merging the two. (Identical messages occurring in several places are
-combined by xgettext, so the translator has to handle them once only.)
-
- <p><a name="index-paragraphs-134"></a>Translatable strings should be limited to one paragraph; don't let a
-single message be longer than ten lines. The reason is that when the
-translatable string changes, the translator is faced with the task of
-updating the entire translated string. Maybe only a single word will
-have changed in the English string, but the translator doesn't see that
-(with the current translation tools), therefore she has to proofread
-the entire message.
-
- <p><a name="index-help-option-135"></a>Many GNU programs have a &lsquo;<samp><span class="samp">--help</span></samp>&rsquo; output that extends over several
-screen pages. It is a courtesy towards the translators to split such a
-message into several ones of five to ten lines each. While doing that,
-you can also attempt to split the documented options into groups,
-such as the input options, the output options, and the informative
-output options. This will help every user to find the option he is
-looking for.
-
- <p><a name="index-string-concatenation-136"></a><a name="index-concatenation-of-strings-137"></a>Hardcoded string concatenation is sometimes used to construct English
-strings:
-
-<pre class="example"> strcpy (s, "Replace ");
- strcat (s, object1);
- strcat (s, " with ");
- strcat (s, object2);
- strcat (s, "?");
-</pre>
- <p class="noindent">In order to present to the translator only entire sentences, and also
-because in some languages the translator might want to swap the order
-of <code>object1</code> and <code>object2</code>, it is necessary to change this
-to use a format string:
-
-<pre class="example"> sprintf (s, "Replace %s with %s?", object1, object2);
-</pre>
- <p><a name="index-g_t_0040code_007binttypes_002eh_007d-138"></a>A similar case is compile time concatenation of strings. The ISO C 99
-include file <code>&lt;inttypes.h&gt;</code> contains a macro <code>PRId64</code> that
-can be used as a formatting directive for outputting an &lsquo;<samp><span class="samp">int64_t</span></samp>&rsquo;
-integer through <code>printf</code>. It expands to a constant string, usually
-"d" or "ld" or "lld" or something like this, depending on the platform.
-Assume you have code like
-
-<pre class="example"> printf ("The amount is %0" PRId64 "\n", number);
-</pre>
- <p class="noindent">The <code>gettext</code> tools and library have special support for these
-<code>&lt;inttypes.h&gt;</code> macros. You can therefore simply write
-
-<pre class="example"> printf (gettext ("The amount is %0" PRId64 "\n"), number);
-</pre>
- <p class="noindent">The PO file will contain the string "The amount is %0&lt;PRId64&gt;\n".
-The translators will provide a translation containing "%0&lt;PRId64&gt;"
-as well, and at runtime the <code>gettext</code> function's result will
-contain the appropriate constant string, "d" or "ld" or "lld".
-
- <p>This works only for the predefined <code>&lt;inttypes.h&gt;</code> macros. If
-you have defined your own similar macros, let's say &lsquo;<samp><span class="samp">MYPRId64</span></samp>&rsquo;,
-that are not known to <code>xgettext</code>, the solution for this problem
-is to change the code like this:
-
-<pre class="example"> char buf1[100];
- sprintf (buf1, "%0" MYPRId64, number);
- printf (gettext ("The amount is %s\n"), buf1);
-</pre>
- <p>This means, you put the platform dependent code in one statement, and the
-internationalization code in a different statement. Note that a buffer length
-of 100 is safe, because all available hardware integer types are limited to
-128 bits, and to print a 128 bit integer one needs at most 54 characters,
-regardless whether in decimal, octal or hexadecimal.
-
- <p><a name="index-Java_002c-string-concatenation-139"></a><a name="index-C_0023_002c-string-concatenation-140"></a>All this applies to other programming languages as well. For example, in
-Java and C#, string concatenation is very frequently used, because it is a
-compiler built-in operator. Like in C, in Java, you would change
-
-<pre class="example"> System.out.println("Replace "+object1+" with "+object2+"?");
-</pre>
- <p class="noindent">into a statement involving a format string:
-
-<pre class="example"> System.out.println(
- MessageFormat.format("Replace {0} with {1}?",
- new Object[] { object1, object2 }));
-</pre>
- <p class="noindent">Similarly, in C#, you would change
-
-<pre class="example"> Console.WriteLine("Replace "+object1+" with "+object2+"?");
-</pre>
- <p class="noindent">into a statement involving a format string:
-
-<pre class="example"> Console.WriteLine(
- String.Format("Replace {0} with {1}?", object1, object2));
-</pre>
- <p><a name="index-markup-141"></a><a name="index-control-characters-142"></a>Unusual markup or control characters should not be used in translatable
-strings. Translators will likely not understand the particular meaning
-of the markup or control characters.
-
- <p>For example, if you have a convention that &lsquo;<samp><span class="samp">|</span></samp>&rsquo; delimits the
-left-hand and right-hand part of some GUI elements, translators will
-often not understand it without specific comments. It might be
-better to have the translator translate the left-hand and right-hand
-part separately.
-
- <p>Another example is the &lsquo;<samp><span class="samp">argp</span></samp>&rsquo; convention to use a single &lsquo;<samp><span class="samp">\v</span></samp>&rsquo;
-(vertical tab) control character to delimit two sections inside a
-string. This is flawed. Some translators may convert it to a simple
-newline, some to blank lines. With some PO file editors it may not be
-easy to even enter a vertical tab control character. So, you cannot
-be sure that the translation will contain a &lsquo;<samp><span class="samp">\v</span></samp>&rsquo; character, at the
-corresponding position. The solution is, again, to let the translator
-translate two separate strings and combine at run-time the two translated
-strings with the &lsquo;<samp><span class="samp">\v</span></samp>&rsquo; required by the convention.
-
- <p>HTML markup, however, is common enough that it's probably ok to use in
-translatable strings. But please bear in mind that the GNU gettext tools
-don't verify that the translations are well-formed HTML.
-
-<div class="node">
-<a name="Mark-Keywords"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Marking">Marking</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Preparing-Strings">Preparing Strings</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.4 How Marks Appear in Sources</h3>
-
- <p><a name="index-marking-strings-that-require-translation-143"></a>
-All strings requiring translation should be marked in the C sources. Marking
-is done in such a way that each translatable string appears to be
-the sole argument of some function or preprocessor macro. There are
-only a few such possible functions or macros meant for translation,
-and their names are said to be marking keywords. The marking is
-attached to strings themselves, rather than to what we do with them.
-This approach has more uses. A blatant example is an error message
-produced by formatting. The format string needs translation, as
-well as some strings inserted through some &lsquo;<samp><span class="samp">%s</span></samp>&rsquo; specification
-in the format, while the result from <code>sprintf</code> may have so many
-different instances that it is impractical to list them all in some
-&lsquo;<samp><span class="samp">error_string_out()</span></samp>&rsquo; routine, say.
-
- <p>This marking operation has two goals. The first goal of marking
-is for triggering the retrieval of the translation, at run time.
-The keyword is possibly resolved into a routine able to dynamically
-return the proper translation, as far as possible or wanted, for the
-argument string. Most localizable strings are found in executable
-positions, that is, attached to variables or given as parameters to
-functions. But this is not universal usage, and some translatable
-strings appear in structured initializations. See <a href="#Special-cases">Special cases</a>.
-
- <p>The second goal of the marking operation is to help <code>xgettext</code>
-at properly extracting all translatable strings when it scans a set
-of program sources and produces PO file templates.
-
- <p>The canonical keyword for marking translatable strings is
-&lsquo;<samp><span class="samp">gettext</span></samp>&rsquo;, it gave its name to the whole GNU <code>gettext</code>
-package. For packages making only light use of the &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo;
-keyword, macro or function, it is easily used <em>as is</em>. However,
-for packages using the <code>gettext</code> interface more heavily, it
-is usually more convenient to give the main keyword a shorter, less
-obtrusive name. Indeed, the keyword might appear on a lot of strings
-all over the package, and programmers usually do not want nor need
-their program sources to remind them forcefully, all the time, that they
-are internationalized. Further, a long keyword has the disadvantage
-of using more horizontal space, forcing more indentation work on
-sources for those trying to keep them within 79 or 80 columns.
-
- <p><a name="index-g_t_0040code_007b_005f_007d_002c-a-macro-to-mark-strings-for-translation-144"></a>Many packages use &lsquo;<samp><span class="samp">_</span></samp>&rsquo; (a simple underline) as a keyword,
-and write &lsquo;<samp><span class="samp">_("Translatable string")</span></samp>&rsquo; instead of &lsquo;<samp><span class="samp">gettext
-("Translatable string")</span></samp>&rsquo;. Further, the coding rule, from GNU standards,
-wanting that there is a space between the keyword and the opening
-parenthesis is relaxed, in practice, for this particular usage.
-So, the textual overhead per translatable string is reduced to
-only three characters: the underline and the two parentheses.
-However, even if GNU <code>gettext</code> uses this convention internally,
-it does not offer it officially. The real, genuine keyword is truly
-&lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; indeed. It is fairly easy for those wanting to use
-&lsquo;<samp><span class="samp">_</span></samp>&rsquo; instead of &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; to declare:
-
-<pre class="example"> #include &lt;libintl.h&gt;
- #define _(String) gettext (String)
-</pre>
- <p class="noindent">instead of merely using &lsquo;<samp><span class="samp">#include &lt;libintl.h&gt;</span></samp>&rsquo;.
-
- <p>The marking keywords &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; and &lsquo;<samp><span class="samp">_</span></samp>&rsquo; take the translatable
-string as sole argument. It is also possible to define marking functions
-that take it at another argument position. It is even possible to make
-the marked argument position depend on the total number of arguments of
-the function call; this is useful in C++. All this is achieved using
-<code>xgettext</code>'s &lsquo;<samp><span class="samp">--keyword</span></samp>&rsquo; option. How to pass such an option
-to <code>xgettext</code>, assuming that <code>gettextize</code> is used, is described
-in <a href="#po_002fMakevars">po/Makevars</a> and <a href="#AM_005fXGETTEXT_005fOPTION">AM_XGETTEXT_OPTION</a>.
-
- <p>Note also that long strings can be split across lines, into multiple
-adjacent string tokens. Automatic string concatenation is performed
-at compile time according to ISO C and ISO C++; <code>xgettext</code> also
-supports this syntax.
-
- <p>Later on, the maintenance is relatively easy. If, as a programmer,
-you add or modify a string, you will have to ask yourself if the
-new or altered string requires translation, and include it within
-&lsquo;<samp><span class="samp">_()</span></samp>&rsquo; if you think it should be translated. For example, &lsquo;<samp><span class="samp">"%s"</span></samp>&rsquo;
-is an example of string <em>not</em> requiring translation. But
-&lsquo;<samp><span class="samp">"%s: %d"</span></samp>&rsquo; <em>does</em> require translation, because in French, unlike
-in English, it's customary to put a space before a colon.
-
-<div class="node">
-<a name="Marking"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#c_002dformat-Flag">c-format Flag</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Mark-Keywords">Mark Keywords</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.5 Marking Translatable Strings</h3>
-
- <p><a name="index-marking-strings-for-translation-145"></a>
-In PO mode, one set of features is meant more for the programmer than
-for the translator, and allows him to interactively mark which strings,
-in a set of program sources, are translatable, and which are not.
-Even if it is a fairly easy job for a programmer to find and mark
-such strings by other means, using any editor of his choice, PO mode
-makes this work more comfortable. Further, this gives translators
-who feel a little like programmers, or programmers who feel a little
-like translators, a tool letting them work at marking translatable
-strings in the program sources, while simultaneously producing a set of
-translation in some language, for the package being internationalized.
-
- <p><a name="index-g_t_0040code_007betags_007d_002c-using-for-marking-strings-146"></a>The set of program sources, targeted by the PO mode commands describe
-here, should have an Emacs tags table constructed for your project,
-prior to using these PO file commands. This is easy to do. In any
-shell window, change the directory to the root of your project, then
-execute a command resembling:
-
-<pre class="example"> etags src/*.[hc] lib/*.[hc]
-</pre>
- <p class="noindent">presuming here you want to process all <samp><span class="file">.h</span></samp> and <samp><span class="file">.c</span></samp> files
-from the <samp><span class="file">src/</span></samp> and <samp><span class="file">lib/</span></samp> directories. This command will
-explore all said files and create a <samp><span class="file">TAGS</span></samp> file in your root
-directory, somewhat summarizing the contents using a special file
-format Emacs can understand.
-
- <p><a name="index-g_t_0040file_007bTAGS_007d_002c-and-marking-translatable-strings-147"></a>For packages following the GNU coding standards, there is
-a make goal <code>tags</code> or <code>TAGS</code> which constructs the tag files in
-all directories and for all files containing source code.
-
- <p>Once your <samp><span class="file">TAGS</span></samp> file is ready, the following commands assist
-the programmer at marking translatable strings in his set of sources.
-But these commands are necessarily driven from within a PO file
-window, and it is likely that you do not even have such a PO file yet.
-This is not a problem at all, as you may safely open a new, empty PO
-file, mainly for using these commands. This empty PO file will slowly
-fill in while you mark strings as translatable in your program sources.
-
- <dl>
-<dt><kbd>,</kbd><dd><a name="index-g_t_002c_0040r_007b_002c-PO-Mode-command_007d-148"></a>Search through program sources for a string which looks like a
-candidate for translation (<code>po-tags-search</code>).
-
- <br><dt><kbd>M-,</kbd><dd><a name="index-M_002d_002c_0040r_007b_002c-PO-Mode-command_007d-149"></a>Mark the last string found with &lsquo;<samp><span class="samp">_()</span></samp>&rsquo; (<code>po-mark-translatable</code>).
-
- <br><dt><kbd>M-.</kbd><dd><a name="index-M_002d_002e_0040r_007b_002c-PO-Mode-command_007d-150"></a>Mark the last string found with a keyword taken from a set of possible
-keywords. This command with a prefix allows some management of these
-keywords (<code>po-select-mark-and-mark</code>).
-
- </dl>
-
- <p><a name="index-po_002dtags_002dsearch_0040r_007b_002c-PO-Mode-command_007d-151"></a>The <kbd>,</kbd> (<code>po-tags-search</code>) command searches for the next
-occurrence of a string which looks like a possible candidate for
-translation, and displays the program source in another Emacs window,
-positioned in such a way that the string is near the top of this other
-window. If the string is too big to fit whole in this window, it is
-positioned so only its end is shown. In any case, the cursor
-is left in the PO file window. If the shown string would be better
-presented differently in different native languages, you may mark it
-using <kbd>M-,</kbd> or <kbd>M-.</kbd>. Otherwise, you might rather ignore it
-and skip to the next string by merely repeating the <kbd>,</kbd> command.
-
- <p>A string is a good candidate for translation if it contains a sequence
-of three or more letters. A string containing at most two letters in
-a row will be considered as a candidate if it has more letters than
-non-letters. The command disregards strings containing no letters,
-or isolated letters only. It also disregards strings within comments,
-or strings already marked with some keyword PO mode knows (see below).
-
- <p>If you have never told Emacs about some <samp><span class="file">TAGS</span></samp> file to use, the
-command will request that you specify one from the minibuffer, the
-first time you use the command. You may later change your <samp><span class="file">TAGS</span></samp>
-file by using the regular Emacs command <kbd>M-x&nbsp;visit-tags-table</kbd><!-- /@w -->,
-which will ask you to name the precise <samp><span class="file">TAGS</span></samp> file you want
-to use. See <a href="emacs.html#Tags">Tag Tables</a>.
-
- <p>Each time you use the <kbd>,</kbd> command, the search resumes from where it was
-left by the previous search, and goes through all program sources,
-obeying the <samp><span class="file">TAGS</span></samp> file, until all sources have been processed.
-However, by giving a prefix argument to the command (<kbd>C-u&nbsp;,</kbd>)<!-- /@w -->, you may request that the search be restarted all over again
-from the first program source; but in this case, strings that you
-recently marked as translatable will be automatically skipped.
-
- <p>Using this <kbd>,</kbd> command does not prevent using of other regular
-Emacs tags commands. For example, regular <code>tags-search</code> or
-<code>tags-query-replace</code> commands may be used without disrupting the
-independent <kbd>,</kbd> search sequence. However, as implemented, the
-<em>initial</em> <kbd>,</kbd> command (or the <kbd>,</kbd> command is used with a
-prefix) might also reinitialize the regular Emacs tags searching to the
-first tags file, this reinitialization might be considered spurious.
-
- <p><a name="index-po_002dmark_002dtranslatable_0040r_007b_002c-PO-Mode-command_007d-152"></a><a name="index-po_002dselect_002dmark_002dand_002dmark_0040r_007b_002c-PO-Mode-command_007d-153"></a>The <kbd>M-,</kbd> (<code>po-mark-translatable</code>) command will mark the
-recently found string with the &lsquo;<samp><span class="samp">_</span></samp>&rsquo; keyword. The <kbd>M-.</kbd>
-(<code>po-select-mark-and-mark</code>) command will request that you type
-one keyword from the minibuffer and use that keyword for marking
-the string. Both commands will automatically create a new PO file
-untranslated entry for the string being marked, and make it the
-current entry (making it easy for you to immediately proceed to its
-translation, if you feel like doing it right away). It is possible
-that the modifications made to the program source by <kbd>M-,</kbd> or
-<kbd>M-.</kbd> render some source line longer than 80 columns, forcing you
-to break and re-indent this line differently. You may use the <kbd>O</kbd>
-command from PO mode, or any other window changing command from
-Emacs, to break out into the program source window, and do any
-needed adjustments. You will have to use some regular Emacs command
-to return the cursor to the PO file window, if you want command
-<kbd>,</kbd> for the next string, say.
-
- <p>The <kbd>M-.</kbd> command has a few built-in speedups, so you do not
-have to explicitly type all keywords all the time. The first such
-speedup is that you are presented with a <em>preferred</em> keyword,
-which you may accept by merely typing <kbd>&lt;RET&gt;</kbd> at the prompt.
-The second speedup is that you may type any non-ambiguous prefix of the
-keyword you really mean, and the command will complete it automatically
-for you. This also means that PO mode has to <em>know</em> all
-your possible keywords, and that it will not accept mistyped keywords.
-
- <p>If you reply <kbd>?</kbd> to the keyword request, the command gives a
-list of all known keywords, from which you may choose. When the
-command is prefixed by an argument (<kbd>C-u&nbsp;M-.</kbd>)<!-- /@w -->, it inhibits
-updating any program source or PO file buffer, and does some simple
-keyword management instead. In this case, the command asks for a
-keyword, written in full, which becomes a new allowed keyword for
-later <kbd>M-.</kbd> commands. Moreover, this new keyword automatically
-becomes the <em>preferred</em> keyword for later commands. By typing
-an already known keyword in response to <kbd>C-u&nbsp;M-.</kbd><!-- /@w -->, one merely
-changes the <em>preferred</em> keyword and does nothing more.
-
- <p>All keywords known for <kbd>M-.</kbd> are recognized by the <kbd>,</kbd> command
-when scanning for strings, and strings already marked by any of those
-known keywords are automatically skipped. If many PO files are opened
-simultaneously, each one has its own independent set of known keywords.
-There is no provision in PO mode, currently, for deleting a known
-keyword, you have to quit the file (maybe using <kbd>q</kbd>) and reopen
-it afresh. When a PO file is newly brought up in an Emacs window, only
-&lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; and &lsquo;<samp><span class="samp">_</span></samp>&rsquo; are known as keywords, and &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo;
-is preferred for the <kbd>M-.</kbd> command. In fact, this is not useful to
-prefer &lsquo;<samp><span class="samp">_</span></samp>&rsquo;, as this one is already built in the <kbd>M-,</kbd> command.
-
-<div class="node">
-<a name="c-format-Flag"></a>
-<a name="c_002dformat-Flag"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Special-cases">Special cases</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Marking">Marking</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.6 Special Comments preceding Keywords</h3>
-
-<!-- FIXME document c-format and no-c-format. -->
- <p><a name="index-format-strings-154"></a>In C programs strings are often used within calls of functions from the
-<code>printf</code> family. The special thing about these format strings is
-that they can contain format specifiers introduced with <kbd>%</kbd>. Assume
-we have the code
-
-<pre class="example"> printf (gettext ("String `%s' has %d characters\n"), s, strlen (s));
-</pre>
- <p class="noindent">A possible German translation for the above string might be:
-
-<pre class="example"> "%d Zeichen lang ist die Zeichenkette `%s'"
-</pre>
- <p>A C programmer, even if he cannot speak German, will recognize that
-there is something wrong here. The order of the two format specifiers
-is changed but of course the arguments in the <code>printf</code> don't have.
-This will most probably lead to problems because now the length of the
-string is regarded as the address.
-
- <p>To prevent errors at runtime caused by translations the <code>msgfmt</code>
-tool can check statically whether the arguments in the original and the
-translation string match in type and number. If this is not the case
-and the &lsquo;<samp><span class="samp">-c</span></samp>&rsquo; option has been passed to <code>msgfmt</code>, <code>msgfmt</code>
-will give an error and refuse to produce a MO file. Thus consequent
-use of &lsquo;<samp><span class="samp">msgfmt -c</span></samp>&rsquo; will catch the error, so that it cannot cause
-cause problems at runtime.
-
-<p class="noindent">If the word order in the above German translation would be correct one
-would have to write
-
-<pre class="example"> "%2$d Zeichen lang ist die Zeichenkette `%1$s'"
-</pre>
- <p class="noindent">The routines in <code>msgfmt</code> know about this special notation.
-
- <p>Because not all strings in a program must be format strings it is not
-useful for <code>msgfmt</code> to test all the strings in the <samp><span class="file">.po</span></samp> file.
-This might cause problems because the string might contain what looks
-like a format specifier, but the string is not used in <code>printf</code>.
-
- <p>Therefore the <code>xgettext</code> adds a special tag to those messages it
-thinks might be a format string. There is no absolute rule for this,
-only a heuristic. In the <samp><span class="file">.po</span></samp> file the entry is marked using the
-<code>c-format</code> flag in the <code>#,</code> comment line (see <a href="#PO-Files">PO Files</a>).
-
- <p><a name="index-c_002dformat_0040r_007b_002c-and-_0040code_007bxgettext_007d_007d-155"></a><a name="index-no_002dc_002dformat_0040r_007b_002c-and-_0040code_007bxgettext_007d_007d-156"></a>The careful reader now might say that this again can cause problems.
-The heuristic might guess it wrong. This is true and therefore
-<code>xgettext</code> knows about a special kind of comment which lets
-the programmer take over the decision. If in the same line as or
-the immediately preceding line to the <code>gettext</code> keyword
-the <code>xgettext</code> program finds a comment containing the words
-<code>xgettext:c-format</code>, it will mark the string in any case with
-the <code>c-format</code> flag. This kind of comment should be used when
-<code>xgettext</code> does not recognize the string as a format string but
-it really is one and it should be tested. Please note that when the
-comment is in the same line as the <code>gettext</code> keyword, it must be
-before the string to be translated.
-
- <p>This situation happens quite often. The <code>printf</code> function is often
-called with strings which do not contain a format specifier. Of course
-one would normally use <code>fputs</code> but it does happen. In this case
-<code>xgettext</code> does not recognize this as a format string but what
-happens if the translation introduces a valid format specifier? The
-<code>printf</code> function will try to access one of the parameters but none
-exists because the original code does not pass any parameters.
-
- <p><code>xgettext</code> of course could make a wrong decision the other way
-round, i.e. a string marked as a format string actually is not a format
-string. In this case the <code>msgfmt</code> might give too many warnings and
-would prevent translating the <samp><span class="file">.po</span></samp> file. The method to prevent
-this wrong decision is similar to the one used above, only the comment
-to use must contain the string <code>xgettext:no-c-format</code>.
-
- <p>If a string is marked with <code>c-format</code> and this is not correct the
-user can find out who is responsible for the decision. See
-<a href="#xgettext-Invocation">xgettext Invocation</a> to see how the <code>--debug</code> option can be
-used for solving this problem.
-
-<div class="node">
-<a name="Special-cases"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Bug-Report-Address">Bug Report Address</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#c_002dformat-Flag">c-format Flag</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.7 Special Cases of Translatable Strings</h3>
-
- <p><a name="index-marking-string-initializers-157"></a>The attentive reader might now point out that it is not always possible
-to mark translatable string with <code>gettext</code> or something like this.
-Consider the following case:
-
-<pre class="example"> {
- static const char *messages[] = {
- "some very meaningful message",
- "and another one"
- };
- const char *string;
- ...
- string
- = index &gt; 1 ? "a default message" : messages[index];
-
- fputs (string);
- ...
- }
-</pre>
- <p>While it is no problem to mark the string <code>"a default message"</code> it
-is not possible to mark the string initializers for <code>messages</code>.
-What is to be done? We have to fulfill two tasks. First we have to mark the
-strings so that the <code>xgettext</code> program (see <a href="#xgettext-Invocation">xgettext Invocation</a>)
-can find them, and second we have to translate the string at runtime
-before printing them.
-
- <p>The first task can be fulfilled by creating a new keyword, which names a
-no-op. For the second we have to mark all access points to a string
-from the array. So one solution can look like this:
-
-<pre class="example"> #define gettext_noop(String) String
-
- {
- static const char *messages[] = {
- gettext_noop ("some very meaningful message"),
- gettext_noop ("and another one")
- };
- const char *string;
- ...
- string
- = index &gt; 1 ? gettext ("a default message") : gettext (messages[index]);
-
- fputs (string);
- ...
- }
-</pre>
- <p>Please convince yourself that the string which is written by
-<code>fputs</code> is translated in any case. How to get <code>xgettext</code> know
-the additional keyword <code>gettext_noop</code> is explained in <a href="#xgettext-Invocation">xgettext Invocation</a>.
-
- <p>The above is of course not the only solution. You could also come along
-with the following one:
-
-<pre class="example"> #define gettext_noop(String) String
-
- {
- static const char *messages[] = {
- gettext_noop ("some very meaningful message",
- gettext_noop ("and another one")
- };
- const char *string;
- ...
- string
- = index &gt; 1 ? gettext_noop ("a default message") : messages[index];
-
- fputs (gettext (string));
- ...
- }
-</pre>
- <p>But this has a drawback. The programmer has to take care that
-he uses <code>gettext_noop</code> for the string <code>"a default message"</code>.
-A use of <code>gettext</code> could have in rare cases unpredictable results.
-
- <p>One advantage is that you need not make control flow analysis to make
-sure the output is really translated in any case. But this analysis is
-generally not very difficult. If it should be in any situation you can
-use this second method in this situation.
-
-<div class="node">
-<a name="Bug-Report-Address"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Names">Names</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Special-cases">Special cases</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.8 Letting Users Report Translation Bugs</h3>
-
- <p>Code sometimes has bugs, but translations sometimes have bugs too. The
-users need to be able to report them. Reporting translation bugs to the
-programmer or maintainer of a package is not very useful, since the
-maintainer must never change a translation, except on behalf of the
-translator. Hence the translation bugs must be reported to the
-translators.
-
- <p>Here is a way to organize this so that the maintainer does not need to
-forward translation bug reports, nor even keep a list of the addresses of
-the translators or their translation teams.
-
- <p>Every program has a place where is shows the bug report address. For
-GNU programs, it is the code which handles the &ldquo;&ndash;help&rdquo; option,
-typically in a function called &ldquo;usage&rdquo;. In this place, instruct the
-translator to add her own bug reporting address. For example, if that
-code has a statement
-
-<pre class="example"> printf (_("Report bugs to &lt;%s&gt;.\n"), PACKAGE_BUGREPORT);
-</pre>
- <p>you can add some translator instructions like this:
-
-<pre class="example"> /* TRANSLATORS: The placeholder indicates the bug-reporting address
- for this package. Please add _another line_ saying
- "Report translation bugs to &lt;...&gt;\n" with the address for translation
- bugs (typically your translation team's web or email address). */
- printf (_("Report bugs to &lt;%s&gt;.\n"), PACKAGE_BUGREPORT);
-</pre>
- <p>These will be extracted by &lsquo;<samp><span class="samp">xgettext</span></samp>&rsquo;, leading to a .pot file that
-contains this:
-
-<pre class="example"> #. TRANSLATORS: The placeholder indicates the bug-reporting address
- #. for this package. Please add _another line_ saying
- #. "Report translation bugs to &lt;...&gt;\n" with the address for translation
- #. bugs (typically your translation team's web or email address).
- #: src/hello.c:178
- #, c-format
- msgid "Report bugs to &lt;%s&gt;.\n"
- msgstr ""
-</pre>
- <div class="node">
-<a name="Names"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Libraries">Libraries</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Bug-Report-Address">Bug Report Address</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.9 Marking Proper Names for Translation</h3>
-
- <p>Should names of persons, cities, locations etc. be marked for translation
-or not? People who only know languages that can be written with Latin
-letters (English, Spanish, French, German, etc.) are tempted to say &ldquo;no&rdquo;,
-because names usually do not change when transported between these languages.
-However, in general when translating from one script to another, names
-are translated too, usually phonetically or by transliteration. For
-example, Russian or Greek names are converted to the Latin alphabet when
-being translated to English, and English or French names are converted
-to the Katakana script when being translated to Japanese. This is
-necessary because the speakers of the target language in general cannot
-read the script the name is originally written in.
-
- <p>As a programmer, you should therefore make sure that names are marked
-for translation, with a special comment telling the translators that it
-is a proper name and how to pronounce it. In its simple form, it looks
-like this:
-
-<pre class="example"> printf (_("Written by %s.\n"),
- /* TRANSLATORS: This is a proper name. See the gettext
- manual, section Names. Note this is actually a non-ASCII
- name: The first name is (with Unicode escapes)
- "Fran\u00e7ois" or (with HTML entities) "Fran&amp;ccedil;ois".
- Pronunciation is like "fraa-swa pee-nar". */
- _("Francois Pinard"));
-</pre>
- <p class="noindent">The GNU gnulib library offers a module &lsquo;<samp><span class="samp">propername</span></samp>&rsquo;
-(<a href="http://www.gnu.org/software/gnulib/MODULES.html#module=propername">http://www.gnu.org/software/gnulib/MODULES.html#module=propername</a>)
-which takes care to automatically append the original name, in parentheses,
-to the translated name. For names that cannot be written in ASCII, it
-also frees the translator from the task of entering the appropriate non-ASCII
-characters if no script change is needed. In this more comfortable form,
-it looks like this:
-
-<pre class="example"> printf (_("Written by %s and %s.\n"),
- proper_name ("Ulrich Drepper"),
- /* TRANSLATORS: This is a proper name. See the gettext
- manual, section Names. Note this is actually a non-ASCII
- name: The first name is (with Unicode escapes)
- "Fran\u00e7ois" or (with HTML entities) "Fran&amp;ccedil;ois".
- Pronunciation is like "fraa-swa pee-nar". */
- proper_name_utf8 ("Francois Pinard", "Fran\303\247ois Pinard"));
-</pre>
- <p class="noindent">You can also write the original name directly in Unicode (rather than with
-Unicode escapes or HTML entities) and denote the pronunciation using the
-International Phonetic Alphabet (see
-<a href="http://www.wikipedia.org/wiki/International_Phonetic_Alphabet">http://www.wikipedia.org/wiki/International_Phonetic_Alphabet</a>).
-
- <p>As a translator, you should use some care when translating names, because
-it is frustrating if people see their names mutilated or distorted.
-
- <p>If your language uses the Latin script, all you need to do is to reproduce
-the name as perfectly as you can within the usual character set of your
-language. In this particular case, this means to provide a translation
-containing the c-cedilla character. If your language uses a different
-script and the people speaking it don't usually read Latin words, it means
-transliteration. If the programmer used the simple case, you should still
-give, in parentheses, the original writing of the name &ndash; for the sake of
-the people that do read the Latin script. If the programmer used the
-&lsquo;<samp><span class="samp">propername</span></samp>&rsquo; module mentioned above, you don't need to give the original
-writing of the name in parentheses, because the program will already do so.
-Here is an example, using Greek as the target script:
-
-<pre class="example"> #. This is a proper name. See the gettext
- #. manual, section Names. Note this is actually a non-ASCII
- #. name: The first name is (with Unicode escapes)
- #. "Fran\u00e7ois" or (with HTML entities) "Fran&amp;ccedil;ois".
- #. Pronunciation is like "fraa-swa pee-nar".
- msgid "Francois Pinard"
- msgstr "\phi\rho\alpha\sigma\omicron\alpha \pi\iota\nu\alpha\rho"
- " (Francois Pinard)"
-</pre>
- <p>Because translation of names is such a sensitive domain, it is a good
-idea to test your translation before submitting it.
-
-<div class="node">
-<a name="Libraries"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Names">Names</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Sources">Sources</a>
-
-</div>
-
-<h3 class="section">4.10 Preparing Library Sources</h3>
-
- <p>When you are preparing a library, not a program, for the use of
-<code>gettext</code>, only a few details are different. Here we assume that
-the library has a translation domain and a POT file of its own. (If
-it uses the translation domain and POT file of the main program, then
-the previous sections apply without changes.)
-
- <ol type=1 start=1>
-<li>The library code doesn't call <code>setlocale (LC_ALL, "")</code>. It's the
-responsibility of the main program to set the locale. The library's
-documentation should mention this fact, so that developers of programs
-using the library are aware of it.
-
- <li>The library code doesn't call <code>textdomain (PACKAGE)</code>, because it
-would interfere with the text domain set by the main program.
-
- <li>The initialization code for a program was
-
- <pre class="smallexample"> setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-</pre>
- <p class="noindent">For a library it is reduced to
-
- <pre class="smallexample"> bindtextdomain (PACKAGE, LOCALEDIR);
-</pre>
- <p class="noindent">If your library's API doesn't already have an initialization function,
-you need to create one, containing at least the <code>bindtextdomain</code>
-invocation. However, you usually don't need to export and document this
-initialization function: It is sufficient that all entry points of the
-library call the initialization function if it hasn't been called before.
-The typical idiom used to achieve this is a static boolean variable that
-indicates whether the initialization function has been called. Like this:
-
- <pre class="example"> static bool libfoo_initialized;
-
- static void
- libfoo_initialize (void)
- {
- bindtextdomain (PACKAGE, LOCALEDIR);
- libfoo_initialized = true;
- }
-
- /* This function is part of the exported API. */
- struct foo *
- create_foo (...)
- {
- /* Must ensure the initialization is performed. */
- if (!libfoo_initialized)
- libfoo_initialize ();
- ...
- }
-
- /* This function is part of the exported API. The argument must be
- non-NULL and have been created through create_foo(). */
- int
- foo_refcount (struct foo *argument)
- {
- /* No need to invoke the initialization function here, because
- create_foo() must already have been called before. */
- ...
- }
-</pre>
- <li>The usual declaration of the &lsquo;<samp><span class="samp">_</span></samp>&rsquo; macro in each source file was
-
- <pre class="smallexample"> #include &lt;libintl.h&gt;
- #define _(String) gettext (String)
-</pre>
- <p class="noindent">for a program. For a library, which has its own translation domain,
-it reads like this:
-
- <pre class="smallexample"> #include &lt;libintl.h&gt;
- #define _(String) dgettext (PACKAGE, String)
-</pre>
- <p>In other words, <code>dgettext</code> is used instead of <code>gettext</code>.
-Similarly, the <code>dngettext</code> function should be used in place of the
-<code>ngettext</code> function.
- </ol>
-
-<div class="node">
-<a name="Template"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Creating">Creating</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Sources">Sources</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">5 Making the PO Template File</h2>
-
- <p><a name="index-PO-template-file-158"></a>
-After preparing the sources, the programmer creates a PO template file.
-This section explains how to use <code>xgettext</code> for this purpose.
-
- <p><code>xgettext</code> creates a file named <samp><var>domainname</var><span class="file">.po</span></samp>. You
-should then rename it to <samp><var>domainname</var><span class="file">.pot</span></samp>. (Why doesn't
-<code>xgettext</code> create it under the name <samp><var>domainname</var><span class="file">.pot</span></samp>
-right away? The answer is: for historical reasons. When <code>xgettext</code>
-was specified, the distinction between a PO file and PO file template
-was fuzzy, and the suffix &lsquo;<samp><span class="samp">.pot</span></samp>&rsquo; wasn't in use at that time.)
-
-<!-- FIXME: Rewrite. -->
-<ul class="menu">
-<li><a accesskey="1" href="#xgettext-Invocation">xgettext Invocation</a>: Invoking the <code>xgettext</code> Program
-</ul>
-
-<div class="node">
-<a name="xgettext-Invocation"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Template">Template</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Template">Template</a>
-
-</div>
-
-<h3 class="section">5.1 Invoking the <code>xgettext</code> Program</h3>
-
- <p><a name="index-xgettext-159"></a><a name="index-g_t_0040code_007bxgettext_007d-program_002c-usage-160"></a>
-<pre class="example"> xgettext [<var>option</var>] [<var>inputfile</var>] ...
-</pre>
- <p>The <code>xgettext</code> program extracts translatable strings from given
-input files.
-
-<h4 class="subsection">5.1.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var><span class="samp"> ...</span></samp>&rsquo;<dd>Input files.
-
- <br><dt>&lsquo;<samp><span class="samp">-f </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--files-from=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-161"></a><a name="index-g_t_002d_002dfiles_002dfrom_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-162"></a>Read the names of the input files from <var>file</var> instead of getting
-them from the command line.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-163"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-164"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If <var>inputfile</var> is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">5.1.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-d </span><var>name</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--default-domain=</span><var>name</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-165"></a><a name="index-g_t_002d_002ddefault_002ddomain_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-166"></a>Use <samp><var>name</var><span class="file">.po</span></samp> for output (instead of <samp><span class="file">messages.po</span></samp>).
-
- <br><dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-167"></a><a name="index-g_t_002d_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-168"></a>Write output to specified file (instead of <samp><var>name</var><span class="file">.po</span></samp> or
-<samp><span class="file">messages.po</span></samp>).
-
- <br><dt>&lsquo;<samp><span class="samp">-p </span><var>dir</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-dir=</span><var>dir</var></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-169"></a><a name="index-g_t_002d_002doutput_002ddir_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-170"></a>Output files will be placed in directory <var>dir</var>.
-
- </dl>
-
- <p><a name="index-output-to-stdout_002c-_0040code_007bxgettext_007d-171"></a>If the output <var>file</var> is &lsquo;<samp><span class="samp">-</span></samp>&rsquo; or &lsquo;<samp><span class="samp">/dev/stdout</span></samp>&rsquo;, the output
-is written to standard output.
-
-<h4 class="subsection">5.1.3 Choice of input file language</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-L </span><var>name</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--language=</span><var>name</var></samp>&rsquo;<dd><a name="index-g_t_002dL_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-172"></a><a name="index-g_t_002d_002dlanguage_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-173"></a><a name="index-supported-languages_002c-_0040code_007bxgettext_007d-174"></a>Specifies the language of the input files. The supported languages
-are <code>C</code>, <code>C++</code>, <code>ObjectiveC</code>, <code>PO</code>, <code>Python</code>,
-<code>Lisp</code>, <code>EmacsLisp</code>, <code>librep</code>, <code>Scheme</code>, <code>Smalltalk</code>,
-<code>Java</code>, <code>JavaProperties</code>, <code>C#</code>, <code>awk</code>, <code>YCP</code>,
-<code>Tcl</code>, <code>Perl</code>, <code>PHP</code>, <code>GCC-source</code>, <code>NXStringTable</code>,
-<code>RST</code>, <code>Glade</code>.
-
- <br><dt>&lsquo;<samp><span class="samp">-C</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--c++</span></samp>&rsquo;<dd><a name="index-g_t_002dC_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-175"></a><a name="index-g_t_002d_002dc_002b_002b_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-176"></a>This is a shorthand for <code>--language=C++</code>.
-
- </dl>
-
- <p>By default the language is guessed depending on the input file name
-extension.
-
-<h4 class="subsection">5.1.4 Input file interpretation</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">--from-code=</span><var>name</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dfrom_002dcode_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-177"></a>Specifies the encoding of the input files. This option is needed only
-if some untranslated message strings or their corresponding comments
-contain non-ASCII characters. Note that Tcl and Glade input files are
-always assumed to be in UTF-8, regardless of this option.
-
- </dl>
-
- <p>By default the input files are assumed to be in ASCII.
-
-<h4 class="subsection">5.1.5 Operation mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-j</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--join-existing</span></samp>&rsquo;<dd><a name="index-g_t_002dj_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-178"></a><a name="index-g_t_002d_002djoin_002dexisting_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-179"></a>Join messages with existing file.
-
- <br><dt>&lsquo;<samp><span class="samp">-x </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--exclude-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002dx_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-180"></a><a name="index-g_t_002d_002dexclude_002dfile_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-181"></a>Entries from <var>file</var> are not extracted. <var>file</var> should be a PO or
-POT file.
-
- <br><dt>&lsquo;<samp><span class="samp">-c[</span><var>tag</var><span class="samp">]</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--add-comments[=</span><var>tag</var><span class="samp">]</span></samp>&rsquo;<dd><a name="index-g_t_002dc_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-182"></a><a name="index-g_t_002d_002dadd_002dcomments_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-183"></a>Place comment blocks starting with <var>tag</var> and preceding keyword lines
-in the output file. Without a <var>tag</var>, the option means to put <em>all</em>
-comment blocks preceding keyword lines in the output file.
-
- </dl>
-
-<h4 class="subsection">5.1.6 Language specific options</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-a</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--extract-all</span></samp>&rsquo;<dd><a name="index-g_t_002da_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-184"></a><a name="index-g_t_002d_002dextract_002dall_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-185"></a>Extract all strings.
-
- <p>This option has an effect with most languages, namely C, C++, ObjectiveC,
-Shell, Python, Lisp, EmacsLisp, librep, Java, C#, awk, Tcl, Perl, PHP,
-GCC-source, Glade.
-
- <br><dt>&lsquo;<samp><span class="samp">-k[</span><var>keywordspec</var><span class="samp">]</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--keyword[=</span><var>keywordspec</var><span class="samp">]</span></samp>&rsquo;<dd><a name="index-g_t_002dk_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-186"></a><a name="index-g_t_002d_002dkeyword_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-187"></a>Specify <var>keywordspec</var> as an additional keyword to be looked for.
-Without a <var>keywordspec</var>, the option means to not use default keywords.
-
- <p><a name="index-adding-keywords_002c-_0040code_007bxgettext_007d-188"></a><a name="index-context_002c-argument-specification-in-_0040code_007bxgettext_007d-189"></a>If <var>keywordspec</var> is a C identifier <var>id</var>, <code>xgettext</code> looks
-for strings in the first argument of each call to the function or macro
-<var>id</var>. If <var>keywordspec</var> is of the form
-&lsquo;<samp><var>id</var><span class="samp">:</span><var>argnum</var></samp>&rsquo;, <code>xgettext</code> looks for strings in the
-<var>argnum</var>th argument of the call. If <var>keywordspec</var> is of the form
-&lsquo;<samp><var>id</var><span class="samp">:</span><var>argnum1</var><span class="samp">,</span><var>argnum2</var></samp>&rsquo;, <code>xgettext</code> looks for
-strings in the <var>argnum1</var>st argument and in the <var>argnum2</var>nd argument
-of the call, and treats them as singular/plural variants for a message
-with plural handling. Also, if <var>keywordspec</var> is of the form
-&lsquo;<samp><var>id</var><span class="samp">:</span><var>contextargnum</var><span class="samp">c,</span><var>argnum</var></samp>&rsquo; or
-&lsquo;<samp><var>id</var><span class="samp">:</span><var>argnum</var><span class="samp">,</span><var>contextargnum</var><span class="samp">c</span></samp>&rsquo;, <code>xgettext</code> treats
-strings in the <var>contextargnum</var>th argument as a context specifier.
-And, as a special-purpose support for GNOME, if <var>keywordspec</var> is of the
-form &lsquo;<samp><var>id</var><span class="samp">:</span><var>argnum</var><span class="samp">g</span></samp>&rsquo;, <code>xgettext</code> recognizes the
-<var>argnum</var>th argument as a string with context, using the GNOME <code>glib</code>
-syntax &lsquo;<samp><span class="samp">"msgctxt|msgid"</span></samp>&rsquo;.
-<br>
-Furthermore, if <var>keywordspec</var> is of the form
-&lsquo;<samp><var>id</var><span class="samp">:...,</span><var>totalnumargs</var><span class="samp">t</span></samp>&rsquo;, <code>xgettext</code> recognizes this
-argument specification only if the number of actual arguments is equal to
-<var>totalnumargs</var>. This is useful for disambiguating overloaded function
-calls in C++.
-<br>
-Finally, if <var>keywordspec</var> is of the form
-&lsquo;<samp><var>id</var><span class="samp">:</span><var>argnum</var><span class="samp">...,"</span><var>xcomment</var><span class="samp">"</span></samp>&rsquo;, <code>xgettext</code>, when
-extracting a message from the specified argument strings, adds an extracted
-comment <var>xcomment</var> to the message. Note that when used through a normal
-shell command line, the double-quotes around the <var>xcomment</var> need to be
-escaped.
-
- <p>This option has an effect with most languages, namely C, C++, ObjectiveC,
-Shell, Python, Lisp, EmacsLisp, librep, Java, C#, awk, Tcl, Perl, PHP,
-GCC-source, Glade.
-
- <p>The default keyword specifications, which are always looked for if not
-explicitly disabled, are language dependent. They are:
-
- <ul>
-<li>For C, C++, and GCC-source: <code>gettext</code>, <code>dgettext:2</code>,
-<code>dcgettext:2</code>, <code>ngettext:1,2</code>, <code>dngettext:2,3</code>,
-<code>dcngettext:2,3</code>, <code>gettext_noop</code>, and <code>pgettext:1c,2</code>,
-<code>dpgettext:2c,3</code>, <code>dcpgettext:2c,3</code>, <code>npgettext:1c,2,3</code>,
-<code>dnpgettext:2c,3,4</code>, <code>dcnpgettext:2c,3,4</code>.
-
- <li>For Objective C: Like for C, and also <code>NSLocalizedString</code>, <code>_</code>,
-<code>NSLocalizedStaticString</code>, <code>__</code>.
-
- <li>For Shell scripts: <code>gettext</code>, <code>ngettext:1,2</code>, <code>eval_gettext</code>,
-<code>eval_ngettext:1,2</code>.
-
- <li>For Python: <code>gettext</code>, <code>ugettext</code>, <code>dgettext:2</code>,
-<code>ngettext:1,2</code>, <code>ungettext:1,2</code>, <code>dngettext:2,3</code>, <code>_</code>.
-
- <li>For Lisp: <code>gettext</code>, <code>ngettext:1,2</code>, <code>gettext-noop</code>.
-
- <li>For EmacsLisp: <code>_</code>.
-
- <li>For librep: <code>_</code>.
-
- <li>For Scheme: <code>gettext</code>, <code>ngettext:1,2</code>, <code>gettext-noop</code>.
-
- <li>For Java: <code>GettextResource.gettext:2</code>,
-<code>GettextResource.ngettext:2,3</code>, <code>GettextResource.pgettext:2c,3</code>,
-<code>GettextResource.npgettext:2c,3,4</code>, <code>gettext</code>, <code>ngettext:1,2</code>,
-<code>pgettext:1c,2</code>, <code>npgettext:1c,2,3</code>, <code>getString</code>.
-
- <li>For C#: <code>GetString</code>, <code>GetPluralString:1,2</code>,
-<code>GetParticularString:1c,2</code>, <code>GetParticularPluralString:1c,2,3</code>.
-
- <li>For awk: <code>dcgettext</code>, <code>dcngettext:1,2</code>.
-
- <li>For Tcl: <code>::msgcat::mc</code>.
-
- <li>For Perl: <code>gettext</code>, <code>%gettext</code>, <code>$gettext</code>, <code>dgettext:2</code>,
-<code>dcgettext:2</code>, <code>ngettext:1,2</code>, <code>dngettext:2,3</code>,
-<code>dcngettext:2,3</code>, <code>gettext_noop</code>.
-
- <li>For PHP: <code>_</code>, <code>gettext</code>, <code>dgettext:2</code>, <code>dcgettext:2</code>,
-<code>ngettext:1,2</code>, <code>dngettext:2,3</code>, <code>dcngettext:2,3</code>.
-
- <li>For Glade 1: <code>label</code>, <code>title</code>, <code>text</code>, <code>format</code>,
-<code>copyright</code>, <code>comments</code>, <code>preview_text</code>, <code>tooltip</code>.
-</ul>
-
- <p>To disable the default keyword specifications, the option &lsquo;<samp><span class="samp">-k</span></samp>&rsquo; or
-&lsquo;<samp><span class="samp">--keyword</span></samp>&rsquo; or &lsquo;<samp><span class="samp">--keyword=</span></samp>&rsquo;, without a <var>keywordspec</var>, can be
-used.
-
- <br><dt>&lsquo;<samp><span class="samp">--flag=</span><var>word</var><span class="samp">:</span><var>arg</var><span class="samp">:</span><var>flag</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dflag_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-190"></a>Specifies additional flags for strings occurring as part of the <var>arg</var>th
-argument of the function <var>word</var>. The possible flags are the possible
-format string indicators, such as &lsquo;<samp><span class="samp">c-format</span></samp>&rsquo;, and their negations,
-such as &lsquo;<samp><span class="samp">no-c-format</span></samp>&rsquo;, possibly prefixed with &lsquo;<samp><span class="samp">pass-</span></samp>&rsquo;.
-<br>
-<a name="index-function-attribute_002c-_005f_005fformat_005f_005f-191"></a>The meaning of <code>--flag=</code><var>function</var><code>:</code><var>arg</var><code>:</code><var>lang</var><code>-format</code>
-is that in language <var>lang</var>, the specified <var>function</var> expects as
-<var>arg</var>th argument a format string. (For those of you familiar with
-GCC function attributes, <code>--flag=</code><var>function</var><code>:</code><var>arg</var><code>:c-format</code> is
-roughly equivalent to the declaration
-&lsquo;<samp><span class="samp">__attribute__ ((__format__ (__printf__, </span><var>arg</var><span class="samp">, ...)))</span></samp>&rsquo; attached
-to <var>function</var> in a C source file.)
-For example, if you use the &lsquo;<samp><span class="samp">error</span></samp>&rsquo; function from GNU libc, you can
-specify its behaviour through <code>--flag=error:3:c-format</code>. The effect of
-this specification is that <code>xgettext</code> will mark as format strings all
-<code>gettext</code> invocations that occur as <var>arg</var>th argument of
-<var>function</var>.
-This is useful when such strings contain no format string directives:
-together with the checks done by &lsquo;<samp><span class="samp">msgfmt -c</span></samp>&rsquo; it will ensure that
-translators cannot accidentally use format string directives that would
-lead to a crash at runtime.
-<br>
-<a name="index-function-attribute_002c-_005f_005fformat_005farg_005f_005f-192"></a>The meaning of <code>--flag=</code><var>function</var><code>:</code><var>arg</var><code>:pass-</code><var>lang</var><code>-format</code>
-is that in language <var>lang</var>, if the <var>function</var> call occurs in a
-position that must yield a format string, then its <var>arg</var>th argument
-must yield a format string of the same type as well. (If you know GCC
-function attributes, the <code>--flag=</code><var>function</var><code>:</code><var>arg</var><code>:pass-c-format</code>
-option is roughly equivalent to the declaration
-&lsquo;<samp><span class="samp">__attribute__ ((__format_arg__ (</span><var>arg</var><span class="samp">)))</span></samp>&rsquo; attached to <var>function</var>
-in a C source file.)
-For example, if you use the &lsquo;<samp><span class="samp">_</span></samp>&rsquo; shortcut for the <code>gettext</code> function,
-you should use <code>--flag=_:1:pass-c-format</code>. The effect of this
-specification is that <code>xgettext</code> will propagate a format string
-requirement for a <code>_("string")</code> call to its first argument, the literal
-<code>"string"</code>, and thus mark it as a format string.
-This is useful when such strings contain no format string directives:
-together with the checks done by &lsquo;<samp><span class="samp">msgfmt -c</span></samp>&rsquo; it will ensure that
-translators cannot accidentally use format string directives that would
-lead to a crash at runtime.
-<br>
-This option has an effect with most languages, namely C, C++, ObjectiveC,
-Shell, Python, Lisp, EmacsLisp, librep, Scheme, Java, C#, awk, YCP, Tcl, Perl, PHP,
-GCC-source.
-
- <br><dt>&lsquo;<samp><span class="samp">-T</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--trigraphs</span></samp>&rsquo;<dd><a name="index-g_t_002dT_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-193"></a><a name="index-g_t_002d_002dtrigraphs_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-194"></a><a name="index-C-trigraphs-195"></a>Understand ANSI C trigraphs for input.
-<br>
-This option has an effect only with the languages C, C++, ObjectiveC.
-
- <br><dt>&lsquo;<samp><span class="samp">--qt</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dqt_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-196"></a><a name="index-Qt-format-strings-197"></a>Recognize Qt format strings.
-<br>
-This option has an effect only with the language C++.
-
- <br><dt>&lsquo;<samp><span class="samp">--kde</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dkde_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-198"></a><a name="index-KDE-format-strings-199"></a>Recognize KDE 4 format strings.
-<br>
-This option has an effect only with the language C++.
-
- <br><dt>&lsquo;<samp><span class="samp">--boost</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dboost_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-200"></a><a name="index-Boost-format-strings-201"></a>Recognize Boost format strings.
-<br>
-This option has an effect only with the language C++.
-
- <br><dt>&lsquo;<samp><span class="samp">--debug</span></samp>&rsquo;<dd><a name="index-g_t_002d_002ddebug_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-202"></a><a name="index-debugging-messages-marked-as-format-strings-203"></a>Use the flags <code>c-format</code> and <code>possible-c-format</code> to show who was
-responsible for marking a message as a format string. The latter form is
-used if the <code>xgettext</code> program decided, the format form is used if
-the programmer prescribed it.
-
- <p>By default only the <code>c-format</code> form is used. The translator should
-not have to care about these details.
-
- </dl>
-
- <p>This implementation of <code>xgettext</code> is able to process a few awkward
-cases, like strings in preprocessor macros, ANSI concatenation of
-adjacent strings, and escaped end of lines for continued strings.
-
-<h4 class="subsection">5.1.7 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-204"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-205"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-206"></a>Always write an output file even if no message is defined.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-207"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-208"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-209"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines. Note that using
-this option makes it harder for technically skilled translators to understand
-each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-210"></a><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-211"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-212"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-213"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-214"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-215"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-216"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-217"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-218"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-219"></a><a name="index-sorting-output-of-_0040code_007bxgettext_007d-220"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-221"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-222"></a>Sort output by file location.
-
- <br><dt>&lsquo;<samp><span class="samp">--omit-header</span></samp>&rsquo;<dd><a name="index-g_t_002d_002domit_002dheader_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-223"></a>Don't write header with &lsquo;<samp><span class="samp">msgid ""</span></samp>&rsquo; entry.
-
- <p><a name="index-testing-_0040file_007b_002epo_007d-files-for-equivalence-224"></a>This is useful for testing purposes because it eliminates a source
-of variance for generated <code>.gmo</code> files. With <code>--omit-header</code>,
-two invocations of <code>xgettext</code> on the same files with the same
-options at different times are guaranteed to produce the same results.
-
- <p>Note that using this option will lead to an error if the resulting file
-would not entirely be in ASCII.
-
- <br><dt>&lsquo;<samp><span class="samp">--copyright-holder=</span><var>string</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcopyright_002dholder_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-225"></a>Set the copyright holder in the output. <var>string</var> should be the
-copyright holder of the surrounding package. (Note that the msgstr
-strings, extracted from the package's sources, belong to the copyright
-holder of the package.) Translators are expected to transfer or disclaim
-the copyright for their translations, so that package maintainers can
-distribute them without legal risk. If <var>string</var> is empty, the output
-files are marked as being in the public domain; in this case, the translators
-are expected to disclaim their copyright, again so that package maintainers
-can distribute them without legal risk.
-
- <p>The default value for <var>string</var> is the Free Software Foundation, Inc.,
-simply because <code>xgettext</code> was first used in the GNU project.
-
- <br><dt>&lsquo;<samp><span class="samp">--foreign-user</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforeign_002duser_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-226"></a>Omit FSF copyright in output. This option is equivalent to
-&lsquo;<samp><span class="samp">--copyright-holder=''</span></samp>&rsquo;. It can be useful for packages outside the GNU
-project that want their translations to be in the public domain.
-
- <br><dt>&lsquo;<samp><span class="samp">--package-name=</span><var>package</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dpackage_002dname_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-227"></a>Set the package name in the header of the output.
-
- <br><dt>&lsquo;<samp><span class="samp">--package-version=</span><var>version</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dpackage_002dversion_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-228"></a>Set the package version in the header of the output. This option has an
-effect only if the &lsquo;<samp><span class="samp">--package-name</span></samp>&rsquo; option is also used.
-
- <br><dt>&lsquo;<samp><span class="samp">--msgid-bugs-address=</span><var>email@address</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dmsgid_002dbugs_002daddress_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-229"></a>Set the reporting address for msgid bugs. This is the email address or URL
-to which the translators shall report bugs in the untranslated strings:
-
- <ul>
-<li>Strings which are not entire sentences, see the maintainer guidelines
-in <a href="#Preparing-Strings">Preparing Strings</a>.
-<li>Strings which use unclear terms or require additional context to be
-understood.
-<li>Strings which make invalid assumptions about notation of date, time or
-money.
-<li>Pluralisation problems.
-<li>Incorrect English spelling.
-<li>Incorrect formatting.
-</ul>
-
- <p>It can be your email address, or a mailing list address where translators
-can write to without being subscribed, or the URL of a web page through
-which the translators can contact you.
-
- <p>The default value is empty, which means that translators will be clueless!
-Don't forget to specify this option.
-
- <br><dt>&lsquo;<samp><span class="samp">-m[</span><var>string</var><span class="samp">]</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--msgstr-prefix[=</span><var>string</var><span class="samp">]</span></samp>&rsquo;<dd><a name="index-g_t_002dm_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-230"></a><a name="index-g_t_002d_002dmsgstr_002dprefix_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-231"></a>Use <var>string</var> (or "" if not specified) as prefix for msgstr values.
-
- <br><dt>&lsquo;<samp><span class="samp">-M[</span><var>string</var><span class="samp">]</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--msgstr-suffix[=</span><var>string</var><span class="samp">]</span></samp>&rsquo;<dd><a name="index-g_t_002dM_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-232"></a><a name="index-g_t_002d_002dmsgstr_002dsuffix_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-233"></a>Use <var>string</var> (or "" if not specified) as suffix for msgstr values.
-
- </dl>
-
-<h4 class="subsection">5.1.8 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-234"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-235"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-236"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-237"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="Creating"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Updating">Updating</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Template">Template</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">6 Creating a New PO File</h2>
-
- <p><a name="index-creating-a-new-PO-file-238"></a>
-When starting a new translation, the translator creates a file called
-<samp><var>LANG</var><span class="file">.po</span></samp>, as a copy of the <samp><var>package</var><span class="file">.pot</span></samp> template
-file with modifications in the initial comments (at the beginning of the file)
-and in the header entry (the first entry, near the beginning of the file).
-
- <p>The easiest way to do so is by use of the &lsquo;<samp><span class="samp">msginit</span></samp>&rsquo; program.
-For example:
-
-<pre class="example"> $ cd <var>PACKAGE</var>-<var>VERSION</var>
- $ cd po
- $ msginit
-</pre>
- <p>The alternative way is to do the copy and modifications by hand.
-To do so, the translator copies <samp><var>package</var><span class="file">.pot</span></samp> to
-<samp><var>LANG</var><span class="file">.po</span></samp>. Then she modifies the initial comments and
-the header entry of this file.
-
-<ul class="menu">
-<li><a accesskey="1" href="#msginit-Invocation">msginit Invocation</a>: Invoking the <code>msginit</code> Program
-<li><a accesskey="2" href="#Header-Entry">Header Entry</a>: Filling in the Header Entry
-</ul>
-
-<div class="node">
-<a name="msginit-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Header-Entry">Header Entry</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Creating">Creating</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Creating">Creating</a>
-
-</div>
-
-<h3 class="section">6.1 Invoking the <code>msginit</code> Program</h3>
-
- <p><a name="index-msginit-239"></a><a name="index-g_t_0040code_007bmsginit_007d-program_002c-usage-240"></a>
-<pre class="example"> msginit [<var>option</var>]
-</pre>
- <p><a name="index-create-new-PO-file-241"></a><a name="index-initialize-new-PO-file-242"></a>The <code>msginit</code> program creates a new PO file, initializing the meta
-information with values from the user's environment.
-
-<h4 class="subsection">6.1.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-i </span><var>inputfile</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--input=</span><var>inputfile</var></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-243"></a><a name="index-g_t_002d_002dinput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-244"></a>Input POT file.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given, the current directory is searched for the
-POT file. If it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">6.1.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-245"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-246"></a>Write output to specified PO file.
-
- </dl>
-
- <p>If no output file is given, it depends on the &lsquo;<samp><span class="samp">--locale</span></samp>&rsquo; option or the
-user's locale setting. If it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, the results are written to
-standard output.
-
-<h4 class="subsection">6.1.3 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-247"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-248"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-249"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">6.1.4 Output details</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-l </span><var>ll_CC</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>ll_CC</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-250"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-251"></a>Set target locale. <var>ll</var> should be a language code, and <var>CC</var> should
-be a country code. The command &lsquo;<samp><span class="samp">locale -a</span></samp>&rsquo; can be used to output a list
-of all installed locales. The default is the user's locale setting.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-translator</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dtranslator_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-252"></a>Declares that the PO file will not have a human translator and is instead
-automatically generated.
-
- <br><dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-253"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-254"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-255"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-256"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-257"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-258"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-259"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-260"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- </dl>
-
-<h4 class="subsection">6.1.5 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-261"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-262"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-263"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-264"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="Header-Entry"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msginit-Invocation">msginit Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Creating">Creating</a>
-
-</div>
-
-<h3 class="section">6.2 Filling in the Header Entry</h3>
-
- <p><a name="index-header-entry-of-a-PO-file-265"></a>
-The initial comments "SOME DESCRIPTIVE TITLE", "YEAR" and
-"FIRST AUTHOR &lt;EMAIL@ADDRESS&gt;, YEAR" ought to be replaced by sensible
-information. This can be done in any text editor; if Emacs is used
-and it switched to PO mode automatically (because it has recognized
-the file's suffix), you can disable it by typing <kbd>M-x fundamental-mode</kbd>.
-
- <p>Modifying the header entry can already be done using PO mode: in Emacs,
-type <kbd>M-x po-mode RET</kbd> and then <kbd>RET</kbd> again to start editing the
-entry. You should fill in the following fields.
-
- <dl>
-<dt>Project-Id-Version<dd>This is the name and version of the package. Fill it in if it has not
-already been filled in by <code>xgettext</code>.
-
- <br><dt>Report-Msgid-Bugs-To<dd>This has already been filled in by <code>xgettext</code>. It contains an email
-address or URL where you can report bugs in the untranslated strings:
-
- <ul>
-<li>Strings which are not entire sentences, see the maintainer guidelines
-in <a href="#Preparing-Strings">Preparing Strings</a>.
-<li>Strings which use unclear terms or require additional context to be
-understood.
-<li>Strings which make invalid assumptions about notation of date, time or
-money.
-<li>Pluralisation problems.
-<li>Incorrect English spelling.
-<li>Incorrect formatting.
-</ul>
-
- <br><dt>POT-Creation-Date<dd>This has already been filled in by <code>xgettext</code>.
-
- <br><dt>PO-Revision-Date<dd>You don't need to fill this in. It will be filled by the PO file editor
-when you save the file.
-
- <br><dt>Last-Translator<dd>Fill in your name and email address (without double quotes).
-
- <br><dt>Language-Team<dd>Fill in the English name of the language, and the email address or
-homepage URL of the language team you are part of.
-
- <p>Before starting a translation, it is a good idea to get in touch with
-your translation team, not only to make sure you don't do duplicated work,
-but also to coordinate difficult linguistic issues.
-
- <p><a name="index-list-of-translation-teams_002c-where-to-find-266"></a>In the Free Translation Project, 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, <a href="http://translationproject.org/">http://translationproject.org/</a>, in the "Teams"
-area.
-
- <br><dt>Language<dd><!-- The purpose of this field is to make it possible to automatically -->
-<!-- convert PO files to translation memory, -->
-<!-- initialize a spell checker based on the PO file, -->
-<!-- perform language specific checks. -->
-Fill in the language code of the language. This can be in one of three
-forms:
-
- <ul>
-<li>&lsquo;<samp><var>ll</var></samp>&rsquo;, an ISO&nbsp;639<!-- /@w --> two-letter language code (lowercase).
-See <a href="#Language-Codes">Language Codes</a> for the list of codes.
-
- <li>&lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo;, where &lsquo;<samp><var>ll</var></samp>&rsquo; is an ISO&nbsp;639<!-- /@w --> two-letter
-language code (lowercase) and &lsquo;<samp><var>CC</var></samp>&rsquo; is an ISO&nbsp;3166<!-- /@w --> two-letter
-country code (uppercase). The country code specification is not redundant:
-Some languages have dialects in different countries. For example,
-&lsquo;<samp><span class="samp">de_AT</span></samp>&rsquo; is used for Austria, and &lsquo;<samp><span class="samp">pt_BR</span></samp>&rsquo; for Brazil. The country
-code serves to distinguish the dialects. See <a href="#Language-Codes">Language Codes</a> and
-<a href="#Country-Codes">Country Codes</a> for the lists of codes.
-
- <li>&lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var><span class="samp">@</span><var>variant</var></samp>&rsquo;, where &lsquo;<samp><var>ll</var></samp>&rsquo; is an
-ISO&nbsp;639<!-- /@w --> two-letter language code (lowercase), &lsquo;<samp><var>CC</var></samp>&rsquo; is an
-ISO&nbsp;3166<!-- /@w --> two-letter country code (uppercase), and &lsquo;<samp><var>variant</var></samp>&rsquo; is
-a variant designator. The variant designator (lowercase) can be a script
-designator, such as &lsquo;<samp><span class="samp">latin</span></samp>&rsquo; or &lsquo;<samp><span class="samp">cyrillic</span></samp>&rsquo;.
-</ul>
-
- <p>The naming convention &lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo; is also the way locales are
-named on systems based on GNU libc. But there are three important differences:
-
- <ul>
-<li>In this PO file field, but not in locale names, &lsquo;<samp><var>ll</var><span class="samp">_</span><var>CC</var></samp>&rsquo;
-combinations denoting a language's main dialect are abbreviated as
-&lsquo;<samp><var>ll</var></samp>&rsquo;. For example, &lsquo;<samp><span class="samp">de</span></samp>&rsquo; is equivalent to &lsquo;<samp><span class="samp">de_DE</span></samp>&rsquo;
-(German as spoken in Germany), and &lsquo;<samp><span class="samp">pt</span></samp>&rsquo; to &lsquo;<samp><span class="samp">pt_PT</span></samp>&rsquo; (Portuguese as
-spoken in Portugal) in this context.
-
- <li>In this PO file field, suffixes like &lsquo;<samp><span class="samp">.</span><var>encoding</var></samp>&rsquo; are not used.
-
- <li>In this PO file field, variant designators that are not relevant to message
-translation, such as &lsquo;<samp><span class="samp">@euro</span></samp>&rsquo;, are not used.
-</ul>
-
- <p>So, if your locale name is &lsquo;<samp><span class="samp">de_DE.UTF-8</span></samp>&rsquo;, the language specification in
-PO files is just &lsquo;<samp><span class="samp">de</span></samp>&rsquo;.
-
- <br><dt>Content-Type<dd><a name="index-encoding-of-PO-files-267"></a><a name="index-charset-of-PO-files-268"></a>Replace &lsquo;<samp><span class="samp">CHARSET</span></samp>&rsquo; with the character encoding used for your language,
-in your locale, or UTF-8. This field is needed for correct operation of the
-<code>msgmerge</code> and <code>msgfmt</code> programs, as well as for users whose
-locale's character encoding differs from yours (see <a href="#Charset-conversion">Charset conversion</a>).
-
- <p><a name="index-g_t_0040code_007blocale_007d-program-269"></a>You get the character encoding of your locale by running the shell command
-&lsquo;<samp><span class="samp">locale charmap</span></samp>&rsquo;. If the result is &lsquo;<samp><span class="samp">C</span></samp>&rsquo; or &lsquo;<samp><span class="samp">ANSI_X3.4-1968</span></samp>&rsquo;,
-which is equivalent to &lsquo;<samp><span class="samp">ASCII</span></samp>&rsquo; (= &lsquo;<samp><span class="samp">US-ASCII</span></samp>&rsquo;), it means that your
-locale is not correctly configured. In this case, ask your translation
-team which charset to use. &lsquo;<samp><span class="samp">ASCII</span></samp>&rsquo; is not usable for any language
-except Latin.
-
- <p><a name="index-encoding-list-270"></a>Because the PO files must be portable to operating systems with less advanced
-internationalization facilities, the character encodings that can be used
-are limited to those supported by both GNU <code>libc</code> and GNU
-<code>libiconv</code>. These are:
-<code>ASCII</code>, <code>ISO-8859-1</code>, <code>ISO-8859-2</code>, <code>ISO-8859-3</code>,
-<code>ISO-8859-4</code>, <code>ISO-8859-5</code>, <code>ISO-8859-6</code>, <code>ISO-8859-7</code>,
-<code>ISO-8859-8</code>, <code>ISO-8859-9</code>, <code>ISO-8859-13</code>, <code>ISO-8859-14</code>,
-<code>ISO-8859-15</code>,
-<code>KOI8-R</code>, <code>KOI8-U</code>, <code>KOI8-T</code>,
-<code>CP850</code>, <code>CP866</code>, <code>CP874</code>,
-<code>CP932</code>, <code>CP949</code>, <code>CP950</code>, <code>CP1250</code>, <code>CP1251</code>,
-<code>CP1252</code>, <code>CP1253</code>, <code>CP1254</code>, <code>CP1255</code>, <code>CP1256</code>,
-<code>CP1257</code>, <code>GB2312</code>, <code>EUC-JP</code>, <code>EUC-KR</code>, <code>EUC-TW</code>,
-<code>BIG5</code>, <code>BIG5-HKSCS</code>, <code>GBK</code>, <code>GB18030</code>, <code>SHIFT_JIS</code>,
-<code>JOHAB</code>, <code>TIS-620</code>, <code>VISCII</code>, <code>GEORGIAN-PS</code>, <code>UTF-8</code>.
-
- <!-- This data is taken from glibc/localedata/SUPPORTED. -->
- <p><a name="index-Linux-271"></a>In the GNU system, the following encodings are frequently used for the
-corresponding languages.
-
- <p><a name="index-encoding-for-your-language-272"></a>
- <ul>
-<li><code>ISO-8859-1</code> for
-Afrikaans, Albanian, Basque, Breton, Catalan, Cornish, Danish, Dutch,
-English, Estonian, Faroese, Finnish, French, Galician, German,
-Greenlandic, Icelandic, Indonesian, Irish, Italian, Malay, Manx,
-Norwegian, Occitan, Portuguese, Spanish, Swedish, Tagalog, Uzbek,
-Walloon,
-<li><code>ISO-8859-2</code> for
-Bosnian, Croatian, Czech, Hungarian, Polish, Romanian, Serbian, Slovak,
-Slovenian,
-<li><code>ISO-8859-3</code> for Maltese,
-<li><code>ISO-8859-5</code> for Macedonian, Serbian,
-<li><code>ISO-8859-6</code> for Arabic,
-<li><code>ISO-8859-7</code> for Greek,
-<li><code>ISO-8859-8</code> for Hebrew,
-<li><code>ISO-8859-9</code> for Turkish,
-<li><code>ISO-8859-13</code> for Latvian, Lithuanian, Maori,
-<li><code>ISO-8859-14</code> for Welsh,
-<li><code>ISO-8859-15</code> for
-Basque, Catalan, Dutch, English, Finnish, French, Galician, German, Irish,
-Italian, Portuguese, Spanish, Swedish, Walloon,
-<li><code>KOI8-R</code> for Russian,
-<li><code>KOI8-U</code> for Ukrainian,
-<li><code>KOI8-T</code> for Tajik,
-<li><code>CP1251</code> for Bulgarian, Belarusian,
-<li><code>GB2312</code>, <code>GBK</code>, <code>GB18030</code>
-for simplified writing of Chinese,
-<li><code>BIG5</code>, <code>BIG5-HKSCS</code>
-for traditional writing of Chinese,
-<li><code>EUC-JP</code> for Japanese,
-<li><code>EUC-KR</code> for Korean,
-<li><code>TIS-620</code> for Thai,
-<li><code>GEORGIAN-PS</code> for Georgian,
-<li><code>UTF-8</code> for any language, including those listed above.
-</ul>
-
- <p><a name="index-quote-characters_002c-use-in-PO-files-273"></a><a name="index-quotation-marks-274"></a>When single quote characters or double quote characters are used in
-translations for your language, and your locale's encoding is one of the
-ISO-8859-* charsets, it is best if you create your PO files in UTF-8
-encoding, instead of your locale's encoding. This is because in UTF-8
-the real quote characters can be represented (single quote characters:
-U+2018, U+2019, double quote characters: U+201C, U+201D), whereas none of
-ISO-8859-* charsets has them all. Users in UTF-8 locales will see the
-real quote characters, whereas users in ISO-8859-* locales will see the
-vertical apostrophe and the vertical double quote instead (because that's
-what the character set conversion will transliterate them to).
-
- <p><a name="index-g_t_0040code_007bxmodmap_007d-program_002c-and-typing-quotation-marks-275"></a>To enter such quote characters under X11, you can change your keyboard
-mapping using the <code>xmodmap</code> program. The X11 names of the quote
-characters are "leftsinglequotemark", "rightsinglequotemark",
-"leftdoublequotemark", "rightdoublequotemark", "singlelowquotemark",
-"doublelowquotemark".
-
- <p>Note that only recent versions of GNU Emacs support the UTF-8 encoding:
-Emacs 20 with Mule-UCS, and Emacs 21. As of January 2001, XEmacs doesn't
-support the UTF-8 encoding.
-
- <p>The character encoding name can be written in either upper or lower case.
-Usually upper case is preferred.
-
- <br><dt>Content-Transfer-Encoding<dd>Set this to <code>8bit</code>.
-
- <br><dt>Plural-Forms<dd>This field is optional. It is only needed if the PO file has plural forms.
-You can find them by searching for the &lsquo;<samp><span class="samp">msgid_plural</span></samp>&rsquo; keyword. The
-format of the plural forms field is described in <a href="#Plural-forms">Plural forms</a> and
-<a href="#Translating-plural-forms">Translating plural forms</a>.
-</dl>
-
-<div class="node">
-<a name="Updating"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Editing">Editing</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Creating">Creating</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">7 Updating Existing PO Files</h2>
-
-<ul class="menu">
-<li><a accesskey="1" href="#msgmerge-Invocation">msgmerge Invocation</a>: Invoking the <code>msgmerge</code> Program
-</ul>
-
-<div class="node">
-<a name="msgmerge-Invocation"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Updating">Updating</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Updating">Updating</a>
-
-</div>
-
-<h3 class="section">7.1 Invoking the <code>msgmerge</code> Program</h3>
-
- <p><a name="index-msgmerge-276"></a><a name="index-g_t_0040code_007bmsgmerge_007d-program_002c-usage-277"></a>
-<pre class="example"> msgmerge [<var>option</var>] <var>def</var>.po <var>ref</var>.pot
-</pre>
- <p>The <code>msgmerge</code> program merges two Uniforum style .po files together.
-The <var>def</var>.po file is an existing PO file with translations which will
-be taken over to the newly created file as long as they still match;
-comments will be preserved, but extracted comments and file positions will
-be discarded. The <var>ref</var>.pot file is the last created PO file with
-up-to-date source references but old translations, or a PO Template file
-(generally created by <code>xgettext</code>); any translations or comments
-in the file will be discarded, however dot comments and file positions
-will be preserved. Where an exact match cannot be found, fuzzy matching
-is used to produce better results.
-
-<h4 class="subsection">7.1.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>def</var><span class="samp">.po</span></samp>&rsquo;<dd>Translations referring to old sources.
-
- <br><dt>&lsquo;<samp><var>ref</var><span class="samp">.pot</span></samp>&rsquo;<dd>References to the new sources.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-278"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-279"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- <br><dt>&lsquo;<samp><span class="samp">-C </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--compendium=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002dC_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-280"></a><a name="index-g_t_002d_002dcompendium_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-281"></a>Specify an additional library of message translations. See <a href="#Compendium">Compendium</a>.
-This option may be specified more than once.
-
- </dl>
-
-<h4 class="subsection">7.1.2 Operation mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-U</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--update</span></samp>&rsquo;<dd><a name="index-g_t_002dU_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-282"></a><a name="index-g_t_002d_002dupdate_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-283"></a>Update <var>def</var>.po. Do nothing if <var>def</var>.po is already up to date.
-
- </dl>
-
-<h4 class="subsection">7.1.3 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-284"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-285"></a>Write output to specified file.
-
- </dl>
-
- <p><a name="index-standard-output_002c-and-_0040code_007bmsgmerge_007d-program-286"></a>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">7.1.4 Output file location in update mode</h4>
-
- <p>The result is written back to <var>def</var>.po.
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">--backup=</span><var>control</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dbackup_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-287"></a><a name="index-backup-old-file_002c-and-_0040code_007bmsgmerge_007d-program-288"></a>Make a backup of <var>def</var>.po
-
- <br><dt>&lsquo;<samp><span class="samp">--suffix=</span><var>suffix</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dsuffix_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-289"></a>Override the usual backup suffix.
-
- </dl>
-
- <p><a name="index-version-control-for-backup-files_002c-_0040code_007bmsgmerge_007d-290"></a>The version control method may be selected via the <code>--backup</code> option
-or through the <code>VERSION_CONTROL</code> environment variable. Here are the
-values:
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">none</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">off</span></samp>&rsquo;<dd>Never make backups (even if <code>--backup</code> is given).
-
- <br><dt>&lsquo;<samp><span class="samp">numbered</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">t</span></samp>&rsquo;<dd>Make numbered backups.
-
- <br><dt>&lsquo;<samp><span class="samp">existing</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">nil</span></samp>&rsquo;<dd>Make numbered backups if numbered backups for this file already exist,
-otherwise make simple backups.
-
- <br><dt>&lsquo;<samp><span class="samp">simple</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">never</span></samp>&rsquo;<dd>Always make simple backups.
-
- </dl>
-
- <p>The backup suffix is &lsquo;<samp><span class="samp">~</span></samp>&rsquo;, unless set with <code>--suffix</code> or the
-<code>SIMPLE_BACKUP_SUFFIX</code> environment variable.
-
-<h4 class="subsection">7.1.5 Operation modifiers</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-m</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--multi-domain</span></samp>&rsquo;<dd><a name="index-g_t_002dm_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-291"></a><a name="index-g_t_002d_002dmulti_002ddomain_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-292"></a>Apply <var>ref</var>.pot to each of the domains in <var>def</var>.po.
-
- <br><dt>&lsquo;<samp><span class="samp">-N</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--no-fuzzy-matching</span></samp>&rsquo;<dd><a name="index-g_t_002dN_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-293"></a><a name="index-g_t_002d_002dno_002dfuzzy_002dmatching_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-294"></a>Do not use fuzzy matching when an exact match is not found. This may speed
-up the operation considerably.
-
- <br><dt>&lsquo;<samp><span class="samp">--previous</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dprevious_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-295"></a>Keep the previous msgids of translated messages, marked with &lsquo;<samp><span class="samp">#|</span></samp>&rsquo;, when
-adding the fuzzy marker to such messages.
-</dl>
-
-<h4 class="subsection">7.1.6 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-296"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-297"></a>Assume the input files are Java ResourceBundles in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-298"></a>Assume the input files are NeXTstep/GNUstep localized resource files in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">7.1.7 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--lang=</span><var>catalogname</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dlang_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-299"></a>Specify the &lsquo;<samp><span class="samp">Language</span></samp>&rsquo; field to be used in the header entry. See
-<a href="#Header-Entry">Header Entry</a> for the meaning of this field. Note: The
-&lsquo;<samp><span class="samp">Language-Team</span></samp>&rsquo; and &lsquo;<samp><span class="samp">Plural-Forms</span></samp>&rsquo; fields are left unchanged.
-If this option is not specified, the &lsquo;<samp><span class="samp">Language</span></samp>&rsquo; field is inferred, as
-best as possible, from the &lsquo;<samp><span class="samp">Language-Team</span></samp>&rsquo; field.
-
- <br><dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-300"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-301"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-302"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-303"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-304"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-305"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-306"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-307"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-308"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-309"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-310"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-311"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-312"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-313"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-314"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-315"></a><a name="index-sorting-_0040code_007bmsgmerge_007d-output-316"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-317"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-318"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">7.1.8 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-319"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-320"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-321"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-322"></a>Output version information and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-v</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--verbose</span></samp>&rsquo;<dd><a name="index-g_t_002dv_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-323"></a><a name="index-g_t_002d_002dverbose_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-324"></a>Increase verbosity level.
-
- <br><dt>&lsquo;<samp><span class="samp">-q</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--quiet</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--silent</span></samp>&rsquo;<dd><a name="index-g_t_002dq_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-325"></a><a name="index-g_t_002d_002dquiet_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-326"></a><a name="index-g_t_002d_002dsilent_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-327"></a>Suppress progress indicators.
-
- </dl>
-
-<div class="node">
-<a name="Editing"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Manipulating">Manipulating</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Updating">Updating</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">8 Editing PO Files</h2>
-
- <p><a name="index-Editing-PO-Files-328"></a>
-
-<ul class="menu">
-<li><a accesskey="1" href="#KBabel">KBabel</a>: KDE's PO File Editor
-<li><a accesskey="2" href="#Gtranslator">Gtranslator</a>: GNOME's PO File Editor
-<li><a accesskey="3" href="#PO-Mode">PO Mode</a>: Emacs's PO File Editor
-<li><a accesskey="4" href="#Compendium">Compendium</a>: Using Translation Compendia
-</ul>
-
-<div class="node">
-<a name="KBabel"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Gtranslator">Gtranslator</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Editing">Editing</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Editing">Editing</a>
-
-</div>
-
-<h3 class="section">8.1 KDE's PO File Editor</h3>
-
- <p><a name="index-KDE-PO-file-editor-329"></a>
-<div class="node">
-<a name="Gtranslator"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PO-Mode">PO Mode</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#KBabel">KBabel</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Editing">Editing</a>
-
-</div>
-
-<h3 class="section">8.2 GNOME's PO File Editor</h3>
-
- <p><a name="index-GNOME-PO-file-editor-330"></a>
-<div class="node">
-<a name="PO-Mode"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Compendium">Compendium</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Gtranslator">Gtranslator</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Editing">Editing</a>
-
-</div>
-
-<h3 class="section">8.3 Emacs's PO File Editor</h3>
-
- <p><a name="index-Emacs-PO-Mode-331"></a>
-<!-- FIXME: Rewrite. -->
-
- <p>For those of you being
-the lucky users of Emacs, PO mode has been specifically created
-for providing a cozy environment for editing or modifying PO files.
-While editing a PO file, PO mode allows for the easy browsing of
-auxiliary and compendium PO files, as well as for following references into
-the set of C program sources from which PO files have been derived.
-It has a few special features, among which are the interactive marking
-of program strings as translatable, and the validation of PO files
-with easy repositioning to PO file lines showing errors.
-
- <p>For the beginning, besides main PO mode commands
-(see <a href="#Main-PO-Commands">Main PO Commands</a>), you should know how to move between entries
-(see <a href="#Entry-Positioning">Entry Positioning</a>), and how to handle untranslated entries
-(see <a href="#Untranslated-Entries">Untranslated Entries</a>).
-
-<ul class="menu">
-<li><a accesskey="1" href="#Installation">Installation</a>: Completing GNU <code>gettext</code> Installation
-<li><a accesskey="2" href="#Main-PO-Commands">Main PO Commands</a>: Main Commands
-<li><a accesskey="3" href="#Entry-Positioning">Entry Positioning</a>: Entry Positioning
-<li><a accesskey="4" href="#Normalizing">Normalizing</a>: Normalizing Strings in Entries
-<li><a accesskey="5" href="#Translated-Entries">Translated Entries</a>: Translated Entries
-<li><a accesskey="6" href="#Fuzzy-Entries">Fuzzy Entries</a>: Fuzzy Entries
-<li><a accesskey="7" href="#Untranslated-Entries">Untranslated Entries</a>: Untranslated Entries
-<li><a accesskey="8" href="#Obsolete-Entries">Obsolete Entries</a>: Obsolete Entries
-<li><a accesskey="9" href="#Modifying-Translations">Modifying Translations</a>: Modifying Translations
-<li><a href="#Modifying-Comments">Modifying Comments</a>: Modifying Comments
-<li><a href="#Subedit">Subedit</a>: Mode for Editing Translations
-<li><a href="#C-Sources-Context">C Sources Context</a>: C Sources Context
-<li><a href="#Auxiliary">Auxiliary</a>: Consulting Auxiliary PO Files
-</ul>
-
-<div class="node">
-<a name="Installation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Main-PO-Commands">Main PO Commands</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PO-Mode">PO Mode</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.1 Completing GNU <code>gettext</code> Installation</h4>
-
- <p><a name="index-installing-_0040code_007bgettext_007d-332"></a><a name="index-g_t_0040code_007bgettext_007d-installation-333"></a>Once you have received, unpacked, configured and compiled the GNU
-<code>gettext</code> distribution, the &lsquo;<samp><span class="samp">make install</span></samp>&rsquo; command puts in
-place the programs <code>xgettext</code>, <code>msgfmt</code>, <code>gettext</code>, and
-<code>msgmerge</code>, as well as their available message catalogs. To
-top off a comfortable installation, you might also want to make the
-PO mode available to your Emacs users.
-
- <p><a name="index-g_t_0040file_007b_002eemacs_007d-customizations-334"></a><a name="index-installing-PO-mode-335"></a>During the installation of the PO mode, you might want to modify your
-file <samp><span class="file">.emacs</span></samp>, once and for all, so it contains a few lines looking
-like:
-
-<pre class="example"> (setq auto-mode-alist
- (cons '("\\.po\\'\\|\\.po\\." . po-mode) auto-mode-alist))
- (autoload 'po-mode "po-mode" "Major mode for translators to edit PO files" t)
-</pre>
- <p>Later, whenever you edit some <samp><span class="file">.po</span></samp>
-file, or any file having the string &lsquo;<samp><span class="samp">.po.</span></samp>&rsquo; within its name,
-Emacs loads <samp><span class="file">po-mode.elc</span></samp> (or <samp><span class="file">po-mode.el</span></samp>) as needed, and
-automatically activates PO mode commands for the associated buffer.
-The string <em>PO</em> appears in the mode line for any buffer for
-which PO mode is active. Many PO files may be active at once in a
-single Emacs session.
-
- <p>If you are using Emacs version 20 or newer, and have already installed
-the appropriate international fonts on your system, you may also tell
-Emacs how to determine automatically the coding system of every PO file.
-This will often (but not always) cause the necessary fonts to be loaded
-and used for displaying the translations on your Emacs screen. For this
-to happen, add the lines:
-
-<pre class="example"> (modify-coding-system-alist 'file "\\.po\\'\\|\\.po\\."
- 'po-find-file-coding-system)
- (autoload 'po-find-file-coding-system "po-mode")
-</pre>
- <p class="noindent">to your <samp><span class="file">.emacs</span></samp> file. If, with this, you still see boxes instead
-of international characters, try a different font set (via Shift Mouse
-button 1).
-
-<div class="node">
-<a name="Main-PO-Commands"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Entry-Positioning">Entry Positioning</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Installation">Installation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.2 Main PO mode Commands</h4>
-
- <p><a name="index-PO-mode-_0028Emacs_0029-commands-336"></a><a name="index-commands-337"></a>After setting up Emacs with something similar to the lines in
-<a href="#Installation">Installation</a>, PO mode is activated for a window when Emacs finds a
-PO file in that window. This puts the window read-only and establishes a
-po-mode-map, which is a genuine Emacs mode, in a way that is not derived
-from text mode in any way. Functions found on <code>po-mode-hook</code>,
-if any, will be executed.
-
- <p>When PO mode is active in a window, the letters &lsquo;<samp><span class="samp">PO</span></samp>&rsquo; appear
-in the mode line for that window. The mode line also displays how
-many entries of each kind are held in the PO file. For example,
-the string &lsquo;<samp><span class="samp">132t+3f+10u+2o</span></samp>&rsquo; would tell the translator that the
-PO mode contains 132 translated entries (see <a href="#Translated-Entries">Translated Entries</a>,
-3 fuzzy entries (see <a href="#Fuzzy-Entries">Fuzzy Entries</a>), 10 untranslated entries
-(see <a href="#Untranslated-Entries">Untranslated Entries</a>) and 2 obsolete entries (see <a href="#Obsolete-Entries">Obsolete Entries</a>). Zero-coefficients items are not shown. So, in this example, if
-the fuzzy entries were unfuzzied, the untranslated entries were translated
-and the obsolete entries were deleted, the mode line would merely display
-&lsquo;<samp><span class="samp">145t</span></samp>&rsquo; for the counters.
-
- <p>The main PO commands are those which do not fit into the other categories of
-subsequent sections. These allow for quitting PO mode or for managing windows
-in special ways.
-
- <dl>
-<dt><kbd>_</kbd><dd><a name="index-g_t_005f_0040r_007b_002c-PO-Mode-command_007d-338"></a>Undo last modification to the PO file (<code>po-undo</code>).
-
- <br><dt><kbd>Q</kbd><dd><a name="index-Q_0040r_007b_002c-PO-Mode-command_007d-339"></a>Quit processing and save the PO file (<code>po-quit</code>).
-
- <br><dt><kbd>q</kbd><dd><a name="index-q_0040r_007b_002c-PO-Mode-command_007d-340"></a>Quit processing, possibly after confirmation (<code>po-confirm-and-quit</code>).
-
- <br><dt><kbd>0</kbd><dd><a name="index-g_t0_0040r_007b_002c-PO-Mode-command_007d-341"></a>Temporary leave the PO file window (<code>po-other-window</code>).
-
- <br><dt><kbd>?</kbd><dt><kbd>h</kbd><dd><a name="index-g_t_003f_0040r_007b_002c-PO-Mode-command_007d-342"></a><a name="index-h_0040r_007b_002c-PO-Mode-command_007d-343"></a>Show help about PO mode (<code>po-help</code>).
-
- <br><dt><kbd>=</kbd><dd><a name="index-g_t_003d_0040r_007b_002c-PO-Mode-command_007d-344"></a>Give some PO file statistics (<code>po-statistics</code>).
-
- <br><dt><kbd>V</kbd><dd><a name="index-V_0040r_007b_002c-PO-Mode-command_007d-345"></a>Batch validate the format of the whole PO file (<code>po-validate</code>).
-
- </dl>
-
- <p><a name="index-g_t_005f_0040r_007b_002c-PO-Mode-command_007d-346"></a><a name="index-po_002dundo_0040r_007b_002c-PO-Mode-command_007d-347"></a>The command <kbd>_</kbd> (<code>po-undo</code>) interfaces to the Emacs
-<em>undo</em> facility. See <a href="emacs.html#Undo">Undoing Changes</a>. Each time <kbd>_</kbd> is typed, modifications which the translator
-did to the PO file are undone a little more. For the purpose of
-undoing, each PO mode command is atomic. This is especially true for
-the <kbd>&lt;RET&gt;</kbd> command: the whole edition made by using a single
-use of this command is undone at once, even if the edition itself
-implied several actions. However, while in the editing window, one
-can undo the edition work quite parsimoniously.
-
- <p><a name="index-Q_0040r_007b_002c-PO-Mode-command_007d-348"></a><a name="index-q_0040r_007b_002c-PO-Mode-command_007d-349"></a><a name="index-po_002dquit_0040r_007b_002c-PO-Mode-command_007d-350"></a><a name="index-po_002dconfirm_002dand_002dquit_0040r_007b_002c-PO-Mode-command_007d-351"></a>The commands <kbd>Q</kbd> (<code>po-quit</code>) and <kbd>q</kbd>
-(<code>po-confirm-and-quit</code>) are used when the translator is done with the
-PO file. The former is a bit less verbose than the latter. If the file
-has been modified, it is saved to disk first. In both cases, and prior to
-all this, the commands check if any untranslated messages remain in the
-PO file and, if so, the translator is asked if she really wants to leave
-off working with this PO file. This is the preferred way of getting rid
-of an Emacs PO file buffer. Merely killing it through the usual command
-<kbd>C-x&nbsp;k</kbd><!-- /@w --> (<code>kill-buffer</code>) is not the tidiest way to proceed.
-
- <p><a name="index-g_t0_0040r_007b_002c-PO-Mode-command_007d-352"></a><a name="index-po_002dother_002dwindow_0040r_007b_002c-PO-Mode-command_007d-353"></a>The command <kbd>0</kbd> (<code>po-other-window</code>) is another, softer way,
-to leave PO mode, temporarily. It just moves the cursor to some other
-Emacs window, and pops one if necessary. For example, if the translator
-just got PO mode to show some source context in some other, she might
-discover some apparent bug in the program source that needs correction.
-This command allows the translator to change sex, become a programmer,
-and have the cursor right into the window containing the program she
-(or rather <em>he</em>) wants to modify. By later getting the cursor back
-in the PO file window, or by asking Emacs to edit this file once again,
-PO mode is then recovered.
-
- <p><a name="index-g_t_003f_0040r_007b_002c-PO-Mode-command_007d-354"></a><a name="index-h_0040r_007b_002c-PO-Mode-command_007d-355"></a><a name="index-po_002dhelp_0040r_007b_002c-PO-Mode-command_007d-356"></a>The command <kbd>h</kbd> (<code>po-help</code>) displays a summary of all available PO
-mode commands. The translator should then type any character to resume
-normal PO mode operations. The command <kbd>?</kbd> has the same effect
-as <kbd>h</kbd>.
-
- <p><a name="index-g_t_003d_0040r_007b_002c-PO-Mode-command_007d-357"></a><a name="index-po_002dstatistics_0040r_007b_002c-PO-Mode-command_007d-358"></a>The command <kbd>=</kbd> (<code>po-statistics</code>) computes the total number of
-entries in the PO file, the ordinal of the current entry (counted from
-1), the number of untranslated entries, the number of obsolete entries,
-and displays all these numbers.
-
- <p><a name="index-V_0040r_007b_002c-PO-Mode-command_007d-359"></a><a name="index-po_002dvalidate_0040r_007b_002c-PO-Mode-command_007d-360"></a>The command <kbd>V</kbd> (<code>po-validate</code>) launches <code>msgfmt</code> in
-checking and verbose
-mode over the current PO file. This command first offers to save the
-current PO file on disk. The <code>msgfmt</code> tool, from GNU <code>gettext</code>,
-has the purpose of creating a MO file out of a PO file, and PO mode uses
-the features of this program for checking the overall format of a PO file,
-as well as all individual entries.
-
- <p><a name="index-next_002derror_0040r_007b_002c-stepping-through-PO-file-validation-results_007d-361"></a>The program <code>msgfmt</code> runs asynchronously with Emacs, so the
-translator regains control immediately while her PO file is being studied.
-Error output is collected in the Emacs &lsquo;<samp><span class="samp">*compilation*</span></samp>&rsquo; buffer,
-displayed in another window. The regular Emacs command <kbd>C-x`</kbd>
-(<code>next-error</code>), as well as other usual compile commands, allow the
-translator to reposition quickly to the offending parts of the PO file.
-Once the cursor is on the line in error, the translator may decide on
-any PO mode action which would help correcting the error.
-
-<div class="node">
-<a name="Entry-Positioning"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Normalizing">Normalizing</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Main-PO-Commands">Main PO Commands</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.3 Entry Positioning</h4>
-
- <p><a name="index-current-entry-of-a-PO-file-362"></a>The cursor in a PO file window is almost always part of
-an entry. The only exceptions are the special case when the cursor
-is after the last entry in the file, or when the PO file is
-empty. The entry where the cursor is found to be is said to be the
-current entry. Many PO mode commands operate on the current entry,
-so moving the cursor does more than allowing the translator to browse
-the PO file, this also selects on which entry commands operate.
-
- <p><a name="index-moving-through-a-PO-file-363"></a>Some PO mode commands alter the position of the cursor in a specialized
-way. A few of those special purpose positioning are described here,
-the others are described in following sections (for a complete list try
-<kbd>C-h m</kbd>):
-
- <dl>
-<dt><kbd>.</kbd><dd><a name="index-g_t_002e_0040r_007b_002c-PO-Mode-command_007d-364"></a>Redisplay the current entry (<code>po-current-entry</code>).
-
- <br><dt><kbd>n</kbd><dd><a name="index-n_0040r_007b_002c-PO-Mode-command_007d-365"></a>Select the entry after the current one (<code>po-next-entry</code>).
-
- <br><dt><kbd>p</kbd><dd><a name="index-p_0040r_007b_002c-PO-Mode-command_007d-366"></a>Select the entry before the current one (<code>po-previous-entry</code>).
-
- <br><dt><kbd>&lt;</kbd><dd><a name="index-g_t_003c_0040r_007b_002c-PO-Mode-command_007d-367"></a>Select the first entry in the PO file (<code>po-first-entry</code>).
-
- <br><dt><kbd>&gt;</kbd><dd><a name="index-g_t_003e_0040r_007b_002c-PO-Mode-command_007d-368"></a>Select the last entry in the PO file (<code>po-last-entry</code>).
-
- <br><dt><kbd>m</kbd><dd><a name="index-m_0040r_007b_002c-PO-Mode-command_007d-369"></a>Record the location of the current entry for later use
-(<code>po-push-location</code>).
-
- <br><dt><kbd>r</kbd><dd><a name="index-r_0040r_007b_002c-PO-Mode-command_007d-370"></a>Return to a previously saved entry location (<code>po-pop-location</code>).
-
- <br><dt><kbd>x</kbd><dd><a name="index-x_0040r_007b_002c-PO-Mode-command_007d-371"></a>Exchange the current entry location with the previously saved one
-(<code>po-exchange-location</code>).
-
- </dl>
-
- <p><a name="index-g_t_002e_0040r_007b_002c-PO-Mode-command_007d-372"></a><a name="index-po_002dcurrent_002dentry_0040r_007b_002c-PO-Mode-command_007d-373"></a>Any Emacs command able to reposition the cursor may be used
-to select the current entry in PO mode, including commands which
-move by characters, lines, paragraphs, screens or pages, and search
-commands. However, there is a kind of standard way to display the
-current entry in PO mode, which usual Emacs commands moving
-the cursor do not especially try to enforce. The command <kbd>.</kbd>
-(<code>po-current-entry</code>) has the sole purpose of redisplaying the
-current entry properly, after the current entry has been changed by
-means external to PO mode, or the Emacs screen otherwise altered.
-
- <p>It is yet to be decided if PO mode helps the translator, or otherwise
-irritates her, by forcing a rigid window disposition while she
-is doing her work. We originally had quite precise ideas about
-how windows should behave, but on the other hand, anyone used to
-Emacs is often happy to keep full control. Maybe a fixed window
-disposition might be offered as a PO mode option that the translator
-might activate or deactivate at will, so it could be offered on an
-experimental basis. If nobody feels a real need for using it, or
-a compulsion for writing it, we should drop this whole idea.
-The incentive for doing it should come from translators rather than
-programmers, as opinions from an experienced translator are surely
-more worth to me than opinions from programmers <em>thinking</em> about
-how <em>others</em> should do translation.
-
- <p><a name="index-n_0040r_007b_002c-PO-Mode-command_007d-374"></a><a name="index-po_002dnext_002dentry_0040r_007b_002c-PO-Mode-command_007d-375"></a><a name="index-p_0040r_007b_002c-PO-Mode-command_007d-376"></a><a name="index-po_002dprevious_002dentry_0040r_007b_002c-PO-Mode-command_007d-377"></a>The commands <kbd>n</kbd> (<code>po-next-entry</code>) and <kbd>p</kbd>
-(<code>po-previous-entry</code>) move the cursor the entry following,
-or preceding, the current one. If <kbd>n</kbd> is given while the
-cursor is on the last entry of the PO file, or if <kbd>p</kbd>
-is given while the cursor is on the first entry, no move is done.
-
- <p><a name="index-g_t_003c_0040r_007b_002c-PO-Mode-command_007d-378"></a><a name="index-po_002dfirst_002dentry_0040r_007b_002c-PO-Mode-command_007d-379"></a><a name="index-g_t_003e_0040r_007b_002c-PO-Mode-command_007d-380"></a><a name="index-po_002dlast_002dentry_0040r_007b_002c-PO-Mode-command_007d-381"></a>The commands <kbd>&lt;</kbd> (<code>po-first-entry</code>) and <kbd>&gt;</kbd>
-(<code>po-last-entry</code>) move the cursor to the first entry, or last
-entry, of the PO file. When the cursor is located past the last
-entry in a PO file, most PO mode commands will return an error saying
-&lsquo;<samp><span class="samp">After last entry</span></samp>&rsquo;. Moreover, the commands <kbd>&lt;</kbd> and <kbd>&gt;</kbd>
-have the special property of being able to work even when the cursor
-is not into some PO file entry, and one may use them for nicely
-correcting this situation. But even these commands will fail on a
-truly empty PO file. There are development plans for the PO mode for it
-to interactively fill an empty PO file from sources. See <a href="#Marking">Marking</a>.
-
- <p>The translator may decide, before working at the translation of
-a particular entry, that she needs to browse the remainder of the
-PO file, maybe for finding the terminology or phraseology used
-in related entries. She can of course use the standard Emacs idioms
-for saving the current cursor location in some register, and use that
-register for getting back, or else, use the location ring.
-
- <p><a name="index-m_0040r_007b_002c-PO-Mode-command_007d-382"></a><a name="index-po_002dpush_002dlocation_0040r_007b_002c-PO-Mode-command_007d-383"></a><a name="index-r_0040r_007b_002c-PO-Mode-command_007d-384"></a><a name="index-po_002dpop_002dlocation_0040r_007b_002c-PO-Mode-command_007d-385"></a>PO mode offers another approach, by which cursor locations may be saved
-onto a special stack. The command <kbd>m</kbd> (<code>po-push-location</code>)
-merely adds the location of current entry to the stack, pushing
-the already saved locations under the new one. The command
-<kbd>r</kbd> (<code>po-pop-location</code>) consumes the top stack element and
-repositions the cursor to the entry associated with that top element.
-This position is then lost, for the next <kbd>r</kbd> will move the cursor
-to the previously saved location, and so on until no locations remain
-on the stack.
-
- <p>If the translator wants the position to be kept on the location stack,
-maybe for taking a look at the entry associated with the top
-element, then go elsewhere with the intent of getting back later, she
-ought to use <kbd>m</kbd> immediately after <kbd>r</kbd>.
-
- <p><a name="index-x_0040r_007b_002c-PO-Mode-command_007d-386"></a><a name="index-po_002dexchange_002dlocation_0040r_007b_002c-PO-Mode-command_007d-387"></a>The command <kbd>x</kbd> (<code>po-exchange-location</code>) simultaneously
-repositions the cursor to the entry associated with the top element of
-the stack of saved locations, and replaces that top element with the
-location of the current entry before the move. Consequently, repeating
-the <kbd>x</kbd> command toggles alternatively between two entries.
-For achieving this, the translator will position the cursor on the
-first entry, use <kbd>m</kbd>, then position to the second entry, and
-merely use <kbd>x</kbd> for making the switch.
-
-<div class="node">
-<a name="Normalizing"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Translated-Entries">Translated Entries</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Entry-Positioning">Entry Positioning</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.4 Normalizing Strings in Entries</h4>
-
- <p><a name="index-string-normalization-in-entries-388"></a>
-There are many different ways for encoding a particular string into a
-PO file entry, because there are so many different ways to split and
-quote multi-line strings, and even, to represent special characters
-by backslashed escaped sequences. Some features of PO mode rely on
-the ability for PO mode to scan an already existing PO file for a
-particular string encoded into the <code>msgid</code> field of some entry.
-Even if PO mode has internally all the built-in machinery for
-implementing this recognition easily, doing it fast is technically
-difficult. To facilitate a solution to this efficiency problem,
-we decided on a canonical representation for strings.
-
- <p>A conventional representation of strings in a PO file is currently
-under discussion, and PO mode experiments with a canonical representation.
-Having both <code>xgettext</code> and PO mode converging towards a uniform
-way of representing equivalent strings would be useful, as the internal
-normalization needed by PO mode could be automatically satisfied
-when using <code>xgettext</code> from GNU <code>gettext</code>. An explicit
-PO mode normalization should then be only necessary for PO files
-imported from elsewhere, or for when the convention itself evolves.
-
- <p>So, for achieving normalization of at least the strings of a given
-PO file needing a canonical representation, the following PO mode
-command is available:
-
- <p><a name="index-string-normalization-in-entries-389"></a>
- <dl>
-<dt><kbd>M-x po-normalize</kbd><dd><a name="index-po_002dnormalize_0040r_007b_002c-PO-Mode-command_007d-390"></a>Tidy the whole PO file by making entries more uniform.
-
- </dl>
-
- <p>The special command <kbd>M-x po-normalize</kbd>, which has no associated
-keys, revises all entries, ensuring that strings of both original
-and translated entries use uniform internal quoting in the PO file.
-It also removes any crumb after the last entry. This command may be
-useful for PO files freshly imported from elsewhere, or if we ever
-improve on the canonical quoting format we use. This canonical format
-is not only meant for getting cleaner PO files, but also for greatly
-speeding up <code>msgid</code> string lookup for some other PO mode commands.
-
- <p><kbd>M-x po-normalize</kbd> presently makes three passes over the entries.
-The first implements heuristics for converting PO files for GNU
-<code>gettext</code> 0.6 and earlier, in which <code>msgid</code> and <code>msgstr</code>
-fields were using K&amp;R style C string syntax for multi-line strings.
-These heuristics may fail for comments not related to obsolete
-entries and ending with a backslash; they also depend on subsequent
-passes for finalizing the proper commenting of continued lines for
-obsolete entries. This first pass might disappear once all oldish PO
-files would have been adjusted. The second and third pass normalize
-all <code>msgid</code> and <code>msgstr</code> strings respectively. They also
-clean out those trailing backslashes used by XView's <code>msgfmt</code>
-for continued lines.
-
- <p><a name="index-importing-PO-files-391"></a>Having such an explicit normalizing command allows for importing PO
-files from other sources, but also eases the evolution of the current
-convention, evolution driven mostly by aesthetic concerns, as of now.
-It is easy to make suggested adjustments at a later time, as the
-normalizing command and eventually, other GNU <code>gettext</code> tools
-should greatly automate conformance. A description of the canonical
-string format is given below, for the particular benefit of those not
-having Emacs handy, and who would nevertheless want to handcraft
-their PO files in nice ways.
-
- <p><a name="index-multi_002dline-strings-392"></a>Right now, in PO mode, strings are single line or multi-line. A string
-goes multi-line if and only if it has <em>embedded</em> newlines, that
-is, if it matches &lsquo;<samp><span class="samp">[^\n]\n+[^\n]</span></samp>&rsquo;. So, we would have:
-
-<pre class="example"> msgstr "\n\nHello, world!\n\n\n"
-</pre>
- <p>but, replacing the space by a newline, this becomes:
-
-<pre class="example"> msgstr ""
- "\n"
- "\n"
- "Hello,\n"
- "world!\n"
- "\n"
- "\n"
-</pre>
- <p>We are deliberately using a caricatural example, here, to make the
-point clearer. Usually, multi-lines are not that bad looking.
-It is probable that we will implement the following suggestion.
-We might lump together all initial newlines into the empty string,
-and also all newlines introducing empty lines (that is, for <var>n</var>&nbsp;&gt;&nbsp;1<!-- /@w -->, the <var>n</var>-1'th last newlines would go together on a separate
-string), so making the previous example appear:
-
-<pre class="example"> msgstr "\n\n"
- "Hello,\n"
- "world!\n"
- "\n\n"
-</pre>
- <p>There are a few yet undecided little points about string normalization,
-to be documented in this manual, once these questions settle.
-
-<div class="node">
-<a name="Translated-Entries"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Fuzzy-Entries">Fuzzy Entries</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Normalizing">Normalizing</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.5 Translated Entries</h4>
-
- <p><a name="index-translated-entries-393"></a>
-Each PO file entry for which the <code>msgstr</code> field has been filled with
-a translation, and which is not marked as fuzzy (see <a href="#Fuzzy-Entries">Fuzzy Entries</a>),
-is said to be a <dfn>translated</dfn> entry. Only translated entries will
-later be compiled by GNU <code>msgfmt</code> and become usable in programs.
-Other entry types will be excluded; translation will not occur for them.
-
- <p><a name="index-moving-by-translated-entries-394"></a>Some commands are more specifically related to translated entry processing.
-
- <dl>
-<dt><kbd>t</kbd><dd><a name="index-t_0040r_007b_002c-PO-Mode-command_007d-395"></a>Find the next translated entry (<code>po-next-translated-entry</code>).
-
- <br><dt><kbd>T</kbd><dd><a name="index-T_0040r_007b_002c-PO-Mode-command_007d-396"></a>Find the previous translated entry (<code>po-previous-translated-entry</code>).
-
- </dl>
-
- <p><a name="index-t_0040r_007b_002c-PO-Mode-command_007d-397"></a><a name="index-po_002dnext_002dtranslated_002dentry_0040r_007b_002c-PO-Mode-command_007d-398"></a><a name="index-T_0040r_007b_002c-PO-Mode-command_007d-399"></a><a name="index-po_002dprevious_002dtranslated_002dentry_0040r_007b_002c-PO-Mode-command_007d-400"></a>The commands <kbd>t</kbd> (<code>po-next-translated-entry</code>) and <kbd>T</kbd>
-(<code>po-previous-translated-entry</code>) move forwards or backwards, chasing
-for an translated entry. If none is found, the search is extended and
-wraps around in the PO file buffer.
-
- <p><a name="index-po_002dauto_002dfuzzy_002don_002dedit_0040r_007b_002c-PO-Mode-variable_007d-401"></a>Translated entries usually result from the translator having edited in
-a translation for them, <a href="#Modifying-Translations">Modifying Translations</a>. However, if the
-variable <code>po-auto-fuzzy-on-edit</code> is not <code>nil</code>, the entry having
-received a new translation first becomes a fuzzy entry, which ought to
-be later unfuzzied before becoming an official, genuine translated entry.
-See <a href="#Fuzzy-Entries">Fuzzy Entries</a>.
-
-<div class="node">
-<a name="Fuzzy-Entries"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Untranslated-Entries">Untranslated Entries</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Translated-Entries">Translated Entries</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.6 Fuzzy Entries</h4>
-
- <p><a name="index-fuzzy-entries-402"></a>
-<a name="index-attributes-of-a-PO-file-entry-403"></a><a name="index-attribute_002c-fuzzy-404"></a>Each PO file entry may have a set of <dfn>attributes</dfn>, which are
-qualities given a name and explicitly associated with the translation,
-using a special system comment. One of these attributes
-has the name <code>fuzzy</code>, and entries having this attribute are said
-to have a fuzzy translation. They are called fuzzy entries, for short.
-
- <p>Fuzzy entries, even if they account for translated entries for
-most other purposes, usually call for revision by the translator.
-Those may be produced by applying the program <code>msgmerge</code> to
-update an older translated PO files according to a new PO template
-file, when this tool hypothesises that some new <code>msgid</code> has
-been modified only slightly out of an older one, and chooses to pair
-what it thinks to be the old translation for the new modified entry.
-The slight alteration in the original string (the <code>msgid</code> string)
-should often be reflected in the translated string, and this requires
-the intervention of the translator. For this reason, <code>msgmerge</code>
-might mark some entries as being fuzzy.
-
- <p><a name="index-moving-by-fuzzy-entries-405"></a>Also, the translator may decide herself to mark an entry as fuzzy
-for her own convenience, when she wants to remember that the entry
-has to be later revisited. So, some commands are more specifically
-related to fuzzy entry processing.
-
- <dl>
-<dt><kbd>f</kbd><dd><a name="index-f_0040r_007b_002c-PO-Mode-command_007d-406"></a><!-- better append "-entry" all the time. -ke- -->
-Find the next fuzzy entry (<code>po-next-fuzzy-entry</code>).
-
- <br><dt><kbd>F</kbd><dd><a name="index-F_0040r_007b_002c-PO-Mode-command_007d-407"></a>Find the previous fuzzy entry (<code>po-previous-fuzzy-entry</code>).
-
- <br><dt><kbd>&lt;TAB&gt;</kbd><dd><a name="index-TAB_0040r_007b_002c-PO-Mode-command_007d-408"></a>Remove the fuzzy attribute of the current entry (<code>po-unfuzzy</code>).
-
- </dl>
-
- <p><a name="index-f_0040r_007b_002c-PO-Mode-command_007d-409"></a><a name="index-po_002dnext_002dfuzzy_002dentry_0040r_007b_002c-PO-Mode-command_007d-410"></a><a name="index-F_0040r_007b_002c-PO-Mode-command_007d-411"></a><a name="index-po_002dprevious_002dfuzzy_002dentry_0040r_007b_002c-PO-Mode-command_007d-412"></a>The commands <kbd>f</kbd> (<code>po-next-fuzzy-entry</code>) and <kbd>F</kbd>
-(<code>po-previous-fuzzy-entry</code>) move forwards or backwards, chasing for
-a fuzzy entry. If none is found, the search is extended and wraps
-around in the PO file buffer.
-
- <p><a name="index-TAB_0040r_007b_002c-PO-Mode-command_007d-413"></a><a name="index-po_002dunfuzzy_0040r_007b_002c-PO-Mode-command_007d-414"></a><a name="index-po_002dauto_002dselect_002don_002dunfuzzy_0040r_007b_002c-PO-Mode-variable_007d-415"></a>The command <kbd>&lt;TAB&gt;</kbd> (<code>po-unfuzzy</code>) removes the fuzzy
-attribute associated with an entry, usually leaving it translated.
-Further, if the variable <code>po-auto-select-on-unfuzzy</code> has not
-the <code>nil</code> value, the <kbd>&lt;TAB&gt;</kbd> command will automatically chase
-for another interesting entry to work on. The initial value of
-<code>po-auto-select-on-unfuzzy</code> is <code>nil</code>.
-
- <p>The initial value of <code>po-auto-fuzzy-on-edit</code> is <code>nil</code>. However,
-if the variable <code>po-auto-fuzzy-on-edit</code> is set to <code>t</code>, any entry
-edited through the <kbd>&lt;RET&gt;</kbd> command is marked fuzzy, as a way to
-ensure some kind of double check, later. In this case, the usual paradigm
-is that an entry becomes fuzzy (if not already) whenever the translator
-modifies it. If she is satisfied with the translation, she then uses
-<kbd>&lt;TAB&gt;</kbd> to pick another entry to work on, clearing the fuzzy attribute
-on the same blow. If she is not satisfied yet, she merely uses <kbd>&lt;SPC&gt;</kbd>
-to chase another entry, leaving the entry fuzzy.
-
- <p><a name="index-DEL_0040r_007b_002c-PO-Mode-command_007d-416"></a><a name="index-po_002dfade_002dout_002dentry_0040r_007b_002c-PO-Mode-command_007d-417"></a>The translator may also use the <kbd>&lt;DEL&gt;</kbd> command
-(<code>po-fade-out-entry</code>) over any translated entry to mark it as being
-fuzzy, when she wants to easily leave a trace she wants to later return
-working at this entry.
-
- <p>Also, when time comes to quit working on a PO file buffer with the <kbd>q</kbd>
-command, the translator is asked for confirmation, if fuzzy string
-still exists.
-
-<div class="node">
-<a name="Untranslated-Entries"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Obsolete-Entries">Obsolete Entries</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Fuzzy-Entries">Fuzzy Entries</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.7 Untranslated Entries</h4>
-
- <p><a name="index-untranslated-entries-418"></a>
-When <code>xgettext</code> originally creates a PO file, unless told
-otherwise, it initializes the <code>msgid</code> field with the untranslated
-string, and leaves the <code>msgstr</code> string to be empty. Such entries,
-having an empty translation, are said to be <dfn>untranslated</dfn> entries.
-Later, when the programmer slightly modifies some string right in
-the program, this change is later reflected in the PO file
-by the appearance of a new untranslated entry for the modified string.
-
- <p>The usual commands moving from entry to entry consider untranslated
-entries on the same level as active entries. Untranslated entries
-are easily recognizable by the fact they end with &lsquo;<samp><span class="samp">msgstr&nbsp;""</span></samp>&rsquo;<!-- /@w -->.
-
- <p><a name="index-moving-by-untranslated-entries-419"></a>The work of the translator might be (quite naively) seen as the process
-of seeking for an untranslated entry, editing a translation for
-it, and repeating these actions until no untranslated entries remain.
-Some commands are more specifically related to untranslated entry
-processing.
-
- <dl>
-<dt><kbd>u</kbd><dd><a name="index-u_0040r_007b_002c-PO-Mode-command_007d-420"></a>Find the next untranslated entry (<code>po-next-untranslated-entry</code>).
-
- <br><dt><kbd>U</kbd><dd><a name="index-U_0040r_007b_002c-PO-Mode-command_007d-421"></a>Find the previous untranslated entry (<code>po-previous-untransted-entry</code>).
-
- <br><dt><kbd>k</kbd><dd><a name="index-k_0040r_007b_002c-PO-Mode-command_007d-422"></a>Turn the current entry into an untranslated one (<code>po-kill-msgstr</code>).
-
- </dl>
-
- <p><a name="index-u_0040r_007b_002c-PO-Mode-command_007d-423"></a><a name="index-po_002dnext_002duntranslated_002dentry_0040r_007b_002c-PO-Mode-command_007d-424"></a><a name="index-U_0040r_007b_002c-PO-Mode-command_007d-425"></a><a name="index-po_002dprevious_002duntransted_002dentry_0040r_007b_002c-PO-Mode-command_007d-426"></a>The commands <kbd>u</kbd> (<code>po-next-untranslated-entry</code>) and <kbd>U</kbd>
-(<code>po-previous-untransted-entry</code>) move forwards or backwards,
-chasing for an untranslated entry. If none is found, the search is
-extended and wraps around in the PO file buffer.
-
- <p><a name="index-k_0040r_007b_002c-PO-Mode-command_007d-427"></a><a name="index-po_002dkill_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-428"></a>An entry can be turned back into an untranslated entry by
-merely emptying its translation, using the command <kbd>k</kbd>
-(<code>po-kill-msgstr</code>). See <a href="#Modifying-Translations">Modifying Translations</a>.
-
- <p>Also, when time comes to quit working on a PO file buffer
-with the <kbd>q</kbd> command, the translator is asked for confirmation,
-if some untranslated string still exists.
-
-<div class="node">
-<a name="Obsolete-Entries"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Modifying-Translations">Modifying Translations</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Untranslated-Entries">Untranslated Entries</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.8 Obsolete Entries</h4>
-
- <p><a name="index-obsolete-entries-429"></a>
-By <dfn>obsolete</dfn> PO file entries, we mean those entries which are
-commented out, usually by <code>msgmerge</code> when it found that the
-translation is not needed anymore by the package being localized.
-
- <p>The usual commands moving from entry to entry consider obsolete
-entries on the same level as active entries. Obsolete entries are
-easily recognizable by the fact that all their lines start with
-<code>#</code>, even those lines containing <code>msgid</code> or <code>msgstr</code>.
-
- <p>Commands exist for emptying the translation or reinitializing it
-to the original untranslated string. Commands interfacing with the
-kill ring may force some previously saved text into the translation.
-The user may interactively edit the translation. All these commands
-may apply to obsolete entries, carefully leaving the entry obsolete
-after the fact.
-
- <p><a name="index-moving-by-obsolete-entries-430"></a>Moreover, some commands are more specifically related to obsolete
-entry processing.
-
- <dl>
-<dt><kbd>o</kbd><dd><a name="index-o_0040r_007b_002c-PO-Mode-command_007d-431"></a>Find the next obsolete entry (<code>po-next-obsolete-entry</code>).
-
- <br><dt><kbd>O</kbd><dd><a name="index-O_0040r_007b_002c-PO-Mode-command_007d-432"></a>Find the previous obsolete entry (<code>po-previous-obsolete-entry</code>).
-
- <br><dt><kbd>&lt;DEL&gt;</kbd><dd><a name="index-DEL_0040r_007b_002c-PO-Mode-command_007d-433"></a>Make an active entry obsolete, or zap out an obsolete entry
-(<code>po-fade-out-entry</code>).
-
- </dl>
-
- <p><a name="index-o_0040r_007b_002c-PO-Mode-command_007d-434"></a><a name="index-po_002dnext_002dobsolete_002dentry_0040r_007b_002c-PO-Mode-command_007d-435"></a><a name="index-O_0040r_007b_002c-PO-Mode-command_007d-436"></a><a name="index-po_002dprevious_002dobsolete_002dentry_0040r_007b_002c-PO-Mode-command_007d-437"></a>The commands <kbd>o</kbd> (<code>po-next-obsolete-entry</code>) and <kbd>O</kbd>
-(<code>po-previous-obsolete-entry</code>) move forwards or backwards,
-chasing for an obsolete entry. If none is found, the search is
-extended and wraps around in the PO file buffer.
-
- <p>PO mode does not provide ways for un-commenting an obsolete entry
-and making it active, because this would reintroduce an original
-untranslated string which does not correspond to any marked string
-in the program sources. This goes with the philosophy of never
-introducing useless <code>msgid</code> values.
-
- <p><a name="index-DEL_0040r_007b_002c-PO-Mode-command_007d-438"></a><a name="index-po_002dfade_002dout_002dentry_0040r_007b_002c-PO-Mode-command_007d-439"></a><a name="index-obsolete-active-entry-440"></a><a name="index-comment-out-PO-file-entry-441"></a>However, it is possible to comment out an active entry, so making
-it obsolete. GNU <code>gettext</code> utilities will later react to the
-disappearance of a translation by using the untranslated string.
-The command <kbd>&lt;DEL&gt;</kbd> (<code>po-fade-out-entry</code>) pushes the current entry
-a little further towards annihilation. If the entry is active (it is a
-translated entry), then it is first made fuzzy. If it is already fuzzy,
-then the entry is merely commented out, with confirmation. If the entry
-is already obsolete, then it is completely deleted from the PO file.
-It is easy to recycle the translation so deleted into some other PO file
-entry, usually one which is untranslated. See <a href="#Modifying-Translations">Modifying Translations</a>.
-
- <p>Here is a quite interesting problem to solve for later development of
-PO mode, for those nights you are not sleepy. The idea would be that
-PO mode might become bright enough, one of these days, to make good
-guesses at retrieving the most probable candidate, among all obsolete
-entries, for initializing the translation of a newly appeared string.
-I think it might be a quite hard problem to do this algorithmically, as
-we have to develop good and efficient measures of string similarity.
-Right now, PO mode completely lets the decision to the translator,
-when the time comes to find the adequate obsolete translation, it
-merely tries to provide handy tools for helping her to do so.
-
-<div class="node">
-<a name="Modifying-Translations"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Modifying-Comments">Modifying Comments</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Obsolete-Entries">Obsolete Entries</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.9 Modifying Translations</h4>
-
- <p><a name="index-editing-translations-442"></a><a name="index-editing-translations-443"></a>
-PO mode prevents direct modification of the PO file, by the usual
-means Emacs gives for altering a buffer's contents. By doing so,
-it pretends helping the translator to avoid little clerical errors
-about the overall file format, or the proper quoting of strings,
-as those errors would be easily made. Other kinds of errors are
-still possible, but some may be caught and diagnosed by the batch
-validation process, which the translator may always trigger by the
-<kbd>V</kbd> command. For all other errors, the translator has to rely on
-her own judgment, and also on the linguistic reports submitted to her
-by the users of the translated package, having the same mother tongue.
-
- <p>When the time comes to create a translation, correct an error diagnosed
-mechanically or reported by a user, the translators have to resort to
-using the following commands for modifying the translations.
-
- <dl>
-<dt><kbd>&lt;RET&gt;</kbd><dd><a name="index-RET_0040r_007b_002c-PO-Mode-command_007d-444"></a>Interactively edit the translation (<code>po-edit-msgstr</code>).
-
- <br><dt><kbd>&lt;LFD&gt;</kbd><dt><kbd>C-j</kbd><dd><a name="index-LFD_0040r_007b_002c-PO-Mode-command_007d-445"></a><a name="index-C_002dj_0040r_007b_002c-PO-Mode-command_007d-446"></a>Reinitialize the translation with the original, untranslated string
-(<code>po-msgid-to-msgstr</code>).
-
- <br><dt><kbd>k</kbd><dd><a name="index-k_0040r_007b_002c-PO-Mode-command_007d-447"></a>Save the translation on the kill ring, and delete it (<code>po-kill-msgstr</code>).
-
- <br><dt><kbd>w</kbd><dd><a name="index-w_0040r_007b_002c-PO-Mode-command_007d-448"></a>Save the translation on the kill ring, without deleting it
-(<code>po-kill-ring-save-msgstr</code>).
-
- <br><dt><kbd>y</kbd><dd><a name="index-y_0040r_007b_002c-PO-Mode-command_007d-449"></a>Replace the translation, taking the new from the kill ring
-(<code>po-yank-msgstr</code>).
-
- </dl>
-
- <p><a name="index-RET_0040r_007b_002c-PO-Mode-command_007d-450"></a><a name="index-po_002dedit_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-451"></a>The command <kbd>&lt;RET&gt;</kbd> (<code>po-edit-msgstr</code>) opens a new Emacs
-window meant to edit in a new translation, or to modify an already existing
-translation. The new window contains a copy of the translation taken from
-the current PO file entry, all ready for edition, expunged of all quoting
-marks, fully modifiable and with the complete extent of Emacs modifying
-commands. When the translator is done with her modifications, she may use
-<kbd>C-c&nbsp;C-c</kbd><!-- /@w --> to close the subedit window with the automatically requoted
-results, or <kbd>C-c&nbsp;C-k</kbd><!-- /@w --> to abort her modifications. See <a href="#Subedit">Subedit</a>,
-for more information.
-
- <p><a name="index-LFD_0040r_007b_002c-PO-Mode-command_007d-452"></a><a name="index-C_002dj_0040r_007b_002c-PO-Mode-command_007d-453"></a><a name="index-po_002dmsgid_002dto_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-454"></a>The command <kbd>&lt;LFD&gt;</kbd> (<code>po-msgid-to-msgstr</code>) initializes, or
-reinitializes the translation with the original string. This command is
-normally used when the translator wants to redo a fresh translation of
-the original string, disregarding any previous work.
-
- <p><a name="index-po_002dauto_002dedit_002dwith_002dmsgid_0040r_007b_002c-PO-Mode-variable_007d-455"></a>It is possible to arrange so, whenever editing an untranslated
-entry, the <kbd>&lt;LFD&gt;</kbd> command be automatically executed. If you set
-<code>po-auto-edit-with-msgid</code> to <code>t</code>, the translation gets
-initialised with the original string, in case none exists already.
-The default value for <code>po-auto-edit-with-msgid</code> is <code>nil</code>.
-
- <p><a name="index-starting-a-string-translation-456"></a>In fact, whether it is best to start a translation with an empty
-string, or rather with a copy of the original string, is a matter of
-taste or habit. Sometimes, the source language and the
-target language are so different that is simply best to start writing
-on an empty page. At other times, the source and target languages
-are so close that it would be a waste to retype a number of words
-already being written in the original string. A translator may also
-like having the original string right under her eyes, as she will
-progressively overwrite the original text with the translation, even
-if this requires some extra editing work to get rid of the original.
-
- <p><a name="index-cut-and-paste-for-translated-strings-457"></a><a name="index-k_0040r_007b_002c-PO-Mode-command_007d-458"></a><a name="index-po_002dkill_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-459"></a><a name="index-w_0040r_007b_002c-PO-Mode-command_007d-460"></a><a name="index-po_002dkill_002dring_002dsave_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-461"></a>The command <kbd>k</kbd> (<code>po-kill-msgstr</code>) merely empties the
-translation string, so turning the entry into an untranslated
-one. But while doing so, its previous contents is put apart in
-a special place, known as the kill ring. The command <kbd>w</kbd>
-(<code>po-kill-ring-save-msgstr</code>) has also the effect of taking a
-copy of the translation onto the kill ring, but it otherwise leaves
-the entry alone, and does <em>not</em> remove the translation from the
-entry. Both commands use exactly the Emacs kill ring, which is shared
-between buffers, and which is well known already to Emacs lovers.
-
- <p>The translator may use <kbd>k</kbd> or <kbd>w</kbd> many times in the course
-of her work, as the kill ring may hold several saved translations.
-From the kill ring, strings may later be reinserted in various
-Emacs buffers. In particular, the kill ring may be used for moving
-translation strings between different entries of a single PO file
-buffer, or if the translator is handling many such buffers at once,
-even between PO files.
-
- <p>To facilitate exchanges with buffers which are not in PO mode, the
-translation string put on the kill ring by the <kbd>k</kbd> command is fully
-unquoted before being saved: external quotes are removed, multi-line
-strings are concatenated, and backslash escaped sequences are turned
-into their corresponding characters. In the special case of obsolete
-entries, the translation is also uncommented prior to saving.
-
- <p><a name="index-y_0040r_007b_002c-PO-Mode-command_007d-462"></a><a name="index-po_002dyank_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-463"></a>The command <kbd>y</kbd> (<code>po-yank-msgstr</code>) completely replaces the
-translation of the current entry by a string taken from the kill ring.
-Following Emacs terminology, we then say that the replacement
-string is <dfn>yanked</dfn> into the PO file buffer.
-See <a href="emacs.html#Yanking">Yanking</a>.
-The first time <kbd>y</kbd> is used, the translation receives the value of
-the most recent addition to the kill ring. If <kbd>y</kbd> is typed once
-again, immediately, without intervening keystrokes, the translation
-just inserted is taken away and replaced by the second most recent
-addition to the kill ring. By repeating <kbd>y</kbd> many times in a row,
-the translator may travel along the kill ring for saved strings,
-until she finds the string she really wanted.
-
- <p>When a string is yanked into a PO file entry, it is fully and
-automatically requoted for complying with the format PO files should
-have. Further, if the entry is obsolete, PO mode then appropriately
-push the inserted string inside comments. Once again, translators
-should not burden themselves with quoting considerations besides, of
-course, the necessity of the translated string itself respective to
-the program using it.
-
- <p>Note that <kbd>k</kbd> or <kbd>w</kbd> are not the only commands pushing strings
-on the kill ring, as almost any PO mode command replacing translation
-strings (or the translator comments) automatically saves the old string
-on the kill ring. The main exceptions to this general rule are the
-yanking commands themselves.
-
- <p><a name="index-using-obsolete-translations-to-make-new-entries-464"></a>To better illustrate the operation of killing and yanking, let's
-use an actual example, taken from a common situation. When the
-programmer slightly modifies some string right in the program, his
-change is later reflected in the PO file by the appearance
-of a new untranslated entry for the modified string, and the fact
-that the entry translating the original or unmodified string becomes
-obsolete. In many cases, the translator might spare herself some work
-by retrieving the unmodified translation from the obsolete entry,
-then initializing the untranslated entry <code>msgstr</code> field with
-this retrieved translation. Once this done, the obsolete entry is
-not wanted anymore, and may be safely deleted.
-
- <p>When the translator finds an untranslated entry and suspects that a
-slight variant of the translation exists, she immediately uses <kbd>m</kbd>
-to mark the current entry location, then starts chasing obsolete
-entries with <kbd>o</kbd>, hoping to find some translation corresponding
-to the unmodified string. Once found, she uses the <kbd>&lt;DEL&gt;</kbd> command
-for deleting the obsolete entry, knowing that <kbd>&lt;DEL&gt;</kbd> also <em>kills</em>
-the translation, that is, pushes the translation on the kill ring.
-Then, <kbd>r</kbd> returns to the initial untranslated entry, and <kbd>y</kbd>
-then <em>yanks</em> the saved translation right into the <code>msgstr</code>
-field. The translator is then free to use <kbd>&lt;RET&gt;</kbd> for fine
-tuning the translation contents, and maybe to later use <kbd>u</kbd>,
-then <kbd>m</kbd> again, for going on with the next untranslated string.
-
- <p>When some sequence of keys has to be typed over and over again, the
-translator may find it useful to become better acquainted with the Emacs
-capability of learning these sequences and playing them back under request.
-See <a href="emacs.html#Keyboard-Macros">Keyboard Macros</a>.
-
-<div class="node">
-<a name="Modifying-Comments"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Subedit">Subedit</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Modifying-Translations">Modifying Translations</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.10 Modifying Comments</h4>
-
- <p><a name="index-editing-comments-in-PO-files-465"></a><a name="index-editing-comments-466"></a>
-Any translation work done seriously will raise many linguistic
-difficulties, for which decisions have to be made, and the choices
-further documented. These documents may be saved within the
-PO file in form of translator comments, which the translator
-is free to create, delete, or modify at will. These comments may
-be useful to herself when she returns to this PO file after a while.
-
- <p>Comments not having whitespace after the initial &lsquo;<samp><span class="samp">#</span></samp>&rsquo;, for example,
-those beginning with &lsquo;<samp><span class="samp">#.</span></samp>&rsquo; or &lsquo;<samp><span class="samp">#:</span></samp>&rsquo;, are <em>not</em> translator
-comments, they are exclusively created by other <code>gettext</code> tools.
-So, the commands below will never alter such system added comments,
-they are not meant for the translator to modify. See <a href="#PO-Files">PO Files</a>.
-
- <p>The following commands are somewhat similar to those modifying translations,
-so the general indications given for those apply here. See <a href="#Modifying-Translations">Modifying Translations</a>.
-
- <dl>
-<dt><kbd>#</kbd><dd><a name="index-g_t_0023_0040r_007b_002c-PO-Mode-command_007d-467"></a>Interactively edit the translator comments (<code>po-edit-comment</code>).
-
- <br><dt><kbd>K</kbd><dd><a name="index-K_0040r_007b_002c-PO-Mode-command_007d-468"></a>Save the translator comments on the kill ring, and delete it
-(<code>po-kill-comment</code>).
-
- <br><dt><kbd>W</kbd><dd><a name="index-W_0040r_007b_002c-PO-Mode-command_007d-469"></a>Save the translator comments on the kill ring, without deleting it
-(<code>po-kill-ring-save-comment</code>).
-
- <br><dt><kbd>Y</kbd><dd><a name="index-Y_0040r_007b_002c-PO-Mode-command_007d-470"></a>Replace the translator comments, taking the new from the kill ring
-(<code>po-yank-comment</code>).
-
- </dl>
-
- <p>These commands parallel PO mode commands for modifying the translation
-strings, and behave much the same way as they do, except that they handle
-this part of PO file comments meant for translator usage, rather
-than the translation strings. So, if the descriptions given below are
-slightly succinct, it is because the full details have already been given.
-See <a href="#Modifying-Translations">Modifying Translations</a>.
-
- <p><a name="index-g_t_0023_0040r_007b_002c-PO-Mode-command_007d-471"></a><a name="index-po_002dedit_002dcomment_0040r_007b_002c-PO-Mode-command_007d-472"></a>The command <kbd>#</kbd> (<code>po-edit-comment</code>) opens a new Emacs window
-containing a copy of the translator comments on the current PO file entry.
-If there are no such comments, PO mode understands that the translator wants
-to add a comment to the entry, and she is presented with an empty screen.
-Comment marks (<code>#</code>) and the space following them are automatically
-removed before edition, and reinstated after. For translator comments
-pertaining to obsolete entries, the uncommenting and recommenting operations
-are done twice. Once in the editing window, the keys <kbd>C-c&nbsp;C-c</kbd><!-- /@w -->
-allow the translator to tell she is finished with editing the comment.
-See <a href="#Subedit">Subedit</a>, for further details.
-
- <p><a name="index-po_002dsubedit_002dmode_002dhook_0040r_007b_002c-PO-Mode-variable_007d-473"></a>Functions found on <code>po-subedit-mode-hook</code>, if any, are executed after
-the string has been inserted in the edit buffer.
-
- <p><a name="index-K_0040r_007b_002c-PO-Mode-command_007d-474"></a><a name="index-po_002dkill_002dcomment_0040r_007b_002c-PO-Mode-command_007d-475"></a><a name="index-W_0040r_007b_002c-PO-Mode-command_007d-476"></a><a name="index-po_002dkill_002dring_002dsave_002dcomment_0040r_007b_002c-PO-Mode-command_007d-477"></a><a name="index-Y_0040r_007b_002c-PO-Mode-command_007d-478"></a><a name="index-po_002dyank_002dcomment_0040r_007b_002c-PO-Mode-command_007d-479"></a>The command <kbd>K</kbd> (<code>po-kill-comment</code>) gets rid of all
-translator comments, while saving those comments on the kill ring.
-The command <kbd>W</kbd> (<code>po-kill-ring-save-comment</code>) takes
-a copy of the translator comments on the kill ring, but leaves
-them undisturbed in the current entry. The command <kbd>Y</kbd>
-(<code>po-yank-comment</code>) completely replaces the translator comments
-by a string taken at the front of the kill ring. When this command
-is immediately repeated, the comments just inserted are withdrawn,
-and replaced by other strings taken along the kill ring.
-
- <p>On the kill ring, all strings have the same nature. There is no
-distinction between <em>translation</em> strings and <em>translator
-comments</em> strings. So, for example, let's presume the translator
-has just finished editing a translation, and wants to create a new
-translator comment to document why the previous translation was
-not good, just to remember what was the problem. Foreseeing that she
-will do that in her documentation, the translator may want to quote
-the previous translation in her translator comments. To do so, she
-may initialize the translator comments with the previous translation,
-still at the head of the kill ring. Because editing already pushed the
-previous translation on the kill ring, she merely has to type <kbd>M-w</kbd>
-prior to <kbd>#</kbd>, and the previous translation will be right there,
-all ready for being introduced by some explanatory text.
-
- <p>On the other hand, presume there are some translator comments already
-and that the translator wants to add to those comments, instead
-of wholly replacing them. Then, she should edit the comment right
-away with <kbd>#</kbd>. Once inside the editing window, she can use the
-regular Emacs commands <kbd>C-y</kbd> (<code>yank</code>) and <kbd>M-y</kbd>
-(<code>yank-pop</code>) to get the previous translation where she likes.
-
-<div class="node">
-<a name="Subedit"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#C-Sources-Context">C Sources Context</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Modifying-Comments">Modifying Comments</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.11 Details of Sub Edition</h4>
-
- <p><a name="index-subedit-minor-mode-480"></a>
-The PO subedit minor mode has a few peculiarities worth being described
-in fuller detail. It installs a few commands over the usual editing set
-of Emacs, which are described below.
-
- <dl>
-<dt><kbd>C-c C-c</kbd><dd><a name="index-C_002dc-C_002dc_0040r_007b_002c-PO-Mode-command_007d-481"></a>Complete edition (<code>po-subedit-exit</code>).
-
- <br><dt><kbd>C-c C-k</kbd><dd><a name="index-C_002dc-C_002dk_0040r_007b_002c-PO-Mode-command_007d-482"></a>Abort edition (<code>po-subedit-abort</code>).
-
- <br><dt><kbd>C-c C-a</kbd><dd><a name="index-C_002dc-C_002da_0040r_007b_002c-PO-Mode-command_007d-483"></a>Consult auxiliary PO files (<code>po-subedit-cycle-auxiliary</code>).
-
- </dl>
-
- <p><a name="index-exiting-PO-subedit-484"></a><a name="index-C_002dc-C_002dc_0040r_007b_002c-PO-Mode-command_007d-485"></a><a name="index-po_002dsubedit_002dexit_0040r_007b_002c-PO-Mode-command_007d-486"></a>The window's contents represents a translation for a given message,
-or a translator comment. The translator may modify this window to
-her heart's content. Once this is done, the command <kbd>C-c&nbsp;C-c</kbd><!-- /@w -->
-(<code>po-subedit-exit</code>) may be used to return the edited translation into
-the PO file, replacing the original translation, even if it moved out of
-sight or if buffers were switched.
-
- <p><a name="index-C_002dc-C_002dk_0040r_007b_002c-PO-Mode-command_007d-487"></a><a name="index-po_002dsubedit_002dabort_0040r_007b_002c-PO-Mode-command_007d-488"></a>If the translator becomes unsatisfied with her translation or comment,
-to the extent she prefers keeping what was existent prior to the
-<kbd>&lt;RET&gt;</kbd> or <kbd>#</kbd> command, she may use the command <kbd>C-c&nbsp;C-k</kbd><!-- /@w -->
-(<code>po-subedit-abort</code>) to merely get rid of edition, while preserving
-the original translation or comment. Another way would be for her to exit
-normally with <kbd>C-c&nbsp;C-c</kbd><!-- /@w -->, then type <code>U</code> once for undoing the
-whole effect of last edition.
-
- <p><a name="index-C_002dc-C_002da_0040r_007b_002c-PO-Mode-command_007d-489"></a><a name="index-po_002dsubedit_002dcycle_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-490"></a>The command <kbd>C-c&nbsp;C-a</kbd><!-- /@w --> (<code>po-subedit-cycle-auxiliary</code>)
-allows for glancing through translations
-already achieved in other languages, directly while editing the current
-translation. This may be quite convenient when the translator is fluent
-at many languages, but of course, only makes sense when such completed
-auxiliary PO files are already available to her (see <a href="#Auxiliary">Auxiliary</a>).
-
- <p>Functions found on <code>po-subedit-mode-hook</code>, if any, are executed after
-the string has been inserted in the edit buffer.
-
- <p>While editing her translation, the translator should pay attention to not
-inserting unwanted <kbd>&lt;RET&gt;</kbd> (newline) characters at the end of
-the translated string if those are not meant to be there, or to removing
-such characters when they are required. Since these characters are not
-visible in the editing buffer, they are easily introduced by mistake.
-To help her, <kbd>&lt;RET&gt;</kbd> automatically puts the character <code>&lt;</code>
-at the end of the string being edited, but this <code>&lt;</code> is not really
-part of the string. On exiting the editing window with <kbd>C-c&nbsp;C-c</kbd><!-- /@w -->,
-PO mode automatically removes such <kbd>&lt;</kbd> and all whitespace added after
-it. If the translator adds characters after the terminating <code>&lt;</code>, it
-looses its delimiting property and integrally becomes part of the string.
-If she removes the delimiting <code>&lt;</code>, then the edited string is taken
-<em>as is</em>, with all trailing newlines, even if invisible. Also, if
-the translated string ought to end itself with a genuine <code>&lt;</code>, then
-the delimiting <code>&lt;</code> may not be removed; so the string should appear,
-in the editing window, as ending with two <code>&lt;</code> in a row.
-
- <p><a name="index-editing-multiple-entries-491"></a>When a translation (or a comment) is being edited, the translator may move
-the cursor back into the PO file buffer and freely move to other entries,
-browsing at will. If, with an edition pending, the translator wanders in the
-PO file buffer, she may decide to start modifying another entry. Each entry
-being edited has its own subedit buffer. It is possible to simultaneously
-edit the translation <em>and</em> the comment of a single entry, or to
-edit entries in different PO files, all at once. Typing <kbd>&lt;RET&gt;</kbd>
-on a field already being edited merely resumes that particular edit. Yet,
-the translator should better be comfortable at handling many Emacs windows!
-
- <p><a name="index-pending-subedits-492"></a>Pending subedits may be completed or aborted in any order, regardless
-of how or when they were started. When many subedits are pending and the
-translator asks for quitting the PO file (with the <kbd>q</kbd> command), subedits
-are automatically resumed one at a time, so she may decide for each of them.
-
-<div class="node">
-<a name="C-Sources-Context"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Auxiliary">Auxiliary</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Subedit">Subedit</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.12 C Sources Context</h4>
-
- <p><a name="index-consulting-program-sources-493"></a><a name="index-looking-at-the-source-to-aid-translation-494"></a><a name="index-use-the-source_002c-Luke-495"></a>
-PO mode is particularly powerful when used with PO files
-created through GNU <code>gettext</code> utilities, as those utilities
-insert special comments in the PO files they generate.
-Some of these special comments relate the PO file entry to
-exactly where the untranslated string appears in the program sources.
-
- <p>When the translator gets to an untranslated entry, she is fairly
-often faced with an original string which is not as informative as
-it normally should be, being succinct, cryptic, or otherwise ambiguous.
-Before choosing how to translate the string, she needs to understand
-better what the string really means and how tight the translation has
-to be. Most of the time, when problems arise, the only way left to make
-her judgment is looking at the true program sources from where this
-string originated, searching for surrounding comments the programmer
-might have put in there, and looking around for helping clues of
-<em>any</em> kind.
-
- <p>Surely, when looking at program sources, the translator will receive
-more help if she is a fluent programmer. However, even if she is
-not versed in programming and feels a little lost in C code, the
-translator should not be shy at taking a look, once in a while.
-It is most probable that she will still be able to find some of the
-hints she needs. She will learn quickly to not feel uncomfortable
-in program code, paying more attention to programmer's comments,
-variable and function names (if he dared choosing them well), and
-overall organization, than to the program code itself.
-
- <p><a name="index-find-source-fragment-for-a-PO-file-entry-496"></a>The following commands are meant to help the translator at getting
-program source context for a PO file entry.
-
- <dl>
-<dt><kbd>s</kbd><dd><a name="index-s_0040r_007b_002c-PO-Mode-command_007d-497"></a>Resume the display of a program source context, or cycle through them
-(<code>po-cycle-source-reference</code>).
-
- <br><dt><kbd>M-s</kbd><dd><a name="index-M_002ds_0040r_007b_002c-PO-Mode-command_007d-498"></a>Display of a program source context selected by menu
-(<code>po-select-source-reference</code>).
-
- <br><dt><kbd>S</kbd><dd><a name="index-S_0040r_007b_002c-PO-Mode-command_007d-499"></a>Add a directory to the search path for source files
-(<code>po-consider-source-path</code>).
-
- <br><dt><kbd>M-S</kbd><dd><a name="index-M_002dS_0040r_007b_002c-PO-Mode-command_007d-500"></a>Delete a directory from the search path for source files
-(<code>po-ignore-source-path</code>).
-
- </dl>
-
- <p><a name="index-s_0040r_007b_002c-PO-Mode-command_007d-501"></a><a name="index-po_002dcycle_002dsource_002dreference_0040r_007b_002c-PO-Mode-command_007d-502"></a><a name="index-M_002ds_0040r_007b_002c-PO-Mode-command_007d-503"></a><a name="index-po_002dselect_002dsource_002dreference_0040r_007b_002c-PO-Mode-command_007d-504"></a>The commands <kbd>s</kbd> (<code>po-cycle-source-reference</code>) and <kbd>M-s</kbd>
-(<code>po-select-source-reference</code>) both open another window displaying
-some source program file, and already positioned in such a way that
-it shows an actual use of the string to be translated. By doing
-so, the command gives source program context for the string. But if
-the entry has no source context references, or if all references
-are unresolved along the search path for program sources, then the
-command diagnoses this as an error.
-
- <p>Even if <kbd>s</kbd> (or <kbd>M-s</kbd>) opens a new window, the cursor stays
-in the PO file window. If the translator really wants to
-get into the program source window, she ought to do it explicitly,
-maybe by using command <kbd>O</kbd>.
-
- <p>When <kbd>s</kbd> is typed for the first time, or for a PO file entry which
-is different of the last one used for getting source context, then the
-command reacts by giving the first context available for this entry,
-if any. If some context has already been recently displayed for the
-current PO file entry, and the translator wandered off to do other
-things, typing <kbd>s</kbd> again will merely resume, in another window,
-the context last displayed. In particular, if the translator moved
-the cursor away from the context in the source file, the command will
-bring the cursor back to the context. By using <kbd>s</kbd> many times
-in a row, with no other commands intervening, PO mode will cycle to
-the next available contexts for this particular entry, getting back
-to the first context once the last has been shown.
-
- <p>The command <kbd>M-s</kbd> behaves differently. Instead of cycling through
-references, it lets the translator choose a particular reference among
-many, and displays that reference. It is best used with completion,
-if the translator types <kbd>&lt;TAB&gt;</kbd> immediately after <kbd>M-s</kbd>, in
-response to the question, she will be offered a menu of all possible
-references, as a reminder of which are the acceptable answers.
-This command is useful only where there are really many contexts
-available for a single string to translate.
-
- <p><a name="index-S_0040r_007b_002c-PO-Mode-command_007d-505"></a><a name="index-po_002dconsider_002dsource_002dpath_0040r_007b_002c-PO-Mode-command_007d-506"></a><a name="index-M_002dS_0040r_007b_002c-PO-Mode-command_007d-507"></a><a name="index-po_002dignore_002dsource_002dpath_0040r_007b_002c-PO-Mode-command_007d-508"></a>Program source files are usually found relative to where the PO
-file stands. As a special provision, when this fails, the file is
-also looked for, but relative to the directory immediately above it.
-Those two cases take proper care of most PO files. However, it might
-happen that a PO file has been moved, or is edited in a different
-place than its normal location. When this happens, the translator
-should tell PO mode in which directory normally sits the genuine PO
-file. Many such directories may be specified, and all together, they
-constitute what is called the <dfn>search path</dfn> for program sources.
-The command <kbd>S</kbd> (<code>po-consider-source-path</code>) is used to interactively
-enter a new directory at the front of the search path, and the command
-<kbd>M-S</kbd> (<code>po-ignore-source-path</code>) is used to select, with completion,
-one of the directories she does not want anymore on the search path.
-
-<div class="node">
-<a name="Auxiliary"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#C-Sources-Context">C Sources Context</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#PO-Mode">PO Mode</a>
-
-</div>
-
-<h4 class="subsection">8.3.13 Consulting Auxiliary PO Files</h4>
-
- <p><a name="index-consulting-translations-to-other-languages-509"></a>
-PO mode is able to help the knowledgeable translator, being fluent in
-many languages, at taking advantage of translations already achieved
-in other languages she just happens to know. It provides these other
-language translations as additional context for her own work. Moreover,
-it has features to ease the production of translations for many languages
-at once, for translators preferring to work in this way.
-
- <p><a name="index-auxiliary-PO-file-510"></a><a name="index-auxiliary-PO-file-511"></a>An <dfn>auxiliary</dfn> PO file is an existing PO file meant for the same
-package the translator is working on, but targeted to a different mother
-tongue language. Commands exist for declaring and handling auxiliary
-PO files, and also for showing contexts for the entry under work.
-
- <p>Here are the auxiliary file commands available in PO mode.
-
- <dl>
-<dt><kbd>a</kbd><dd><a name="index-a_0040r_007b_002c-PO-Mode-command_007d-512"></a>Seek auxiliary files for another translation for the same entry
-(<code>po-cycle-auxiliary</code>).
-
- <br><dt><kbd>C-c C-a</kbd><dd><a name="index-C_002dc-C_002da_0040r_007b_002c-PO-Mode-command_007d-513"></a>Switch to a particular auxiliary file (<code>po-select-auxiliary</code>).
-
- <br><dt><kbd>A</kbd><dd><a name="index-A_0040r_007b_002c-PO-Mode-command_007d-514"></a>Declare this PO file as an auxiliary file (<code>po-consider-as-auxiliary</code>).
-
- <br><dt><kbd>M-A</kbd><dd><a name="index-M_002dA_0040r_007b_002c-PO-Mode-command_007d-515"></a>Remove this PO file from the list of auxiliary files
-(<code>po-ignore-as-auxiliary</code>).
-
- </dl>
-
- <p><a name="index-A_0040r_007b_002c-PO-Mode-command_007d-516"></a><a name="index-po_002dconsider_002das_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-517"></a><a name="index-M_002dA_0040r_007b_002c-PO-Mode-command_007d-518"></a><a name="index-po_002dignore_002das_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-519"></a>Command <kbd>A</kbd> (<code>po-consider-as-auxiliary</code>) adds the current
-PO file to the list of auxiliary files, while command <kbd>M-A</kbd>
-(<code>po-ignore-as-auxiliary</code> just removes it.
-
- <p><a name="index-a_0040r_007b_002c-PO-Mode-command_007d-520"></a><a name="index-po_002dcycle_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-521"></a>The command <kbd>a</kbd> (<code>po-cycle-auxiliary</code>) seeks all auxiliary PO
-files, round-robin, searching for a translated entry in some other language
-having an <code>msgid</code> field identical as the one for the current entry.
-The found PO file, if any, takes the place of the current PO file in
-the display (its window gets on top). Before doing so, the current PO
-file is also made into an auxiliary file, if not already. So, <kbd>a</kbd>
-in this newly displayed PO file will seek another PO file, and so on,
-so repeating <kbd>a</kbd> will eventually yield back the original PO file.
-
- <p><a name="index-C_002dc-C_002da_0040r_007b_002c-PO-Mode-command_007d-522"></a><a name="index-po_002dselect_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-523"></a>The command <kbd>C-c C-a</kbd> (<code>po-select-auxiliary</code>) asks the translator
-for her choice of a particular auxiliary file, with completion, and
-then switches to that selected PO file. The command also checks if
-the selected file has an <code>msgid</code> field identical as the one for
-the current entry, and if yes, this entry becomes current. Otherwise,
-the cursor of the selected file is left undisturbed.
-
- <p>For all this to work fully, auxiliary PO files will have to be normalized,
-in that way that <code>msgid</code> fields should be written <em>exactly</em>
-the same way. It is possible to write <code>msgid</code> fields in various
-ways for representing the same string, different writing would break the
-proper behaviour of the auxiliary file commands of PO mode. This is not
-expected to be much a problem in practice, as most existing PO files have
-their <code>msgid</code> entries written by the same GNU <code>gettext</code> tools.
-
- <p><a name="index-normalize_0040r_007b_002c-PO-Mode-command_007d-524"></a>However, PO files initially created by PO mode itself, while marking
-strings in source files, are normalised differently. So are PO
-files resulting of the &lsquo;<samp><span class="samp">M-x normalize</span></samp>&rsquo; command. Until these
-discrepancies between PO mode and other GNU <code>gettext</code> tools get
-fully resolved, the translator should stay aware of normalisation issues.
-
-<div class="node">
-<a name="Compendium"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PO-Mode">PO Mode</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Editing">Editing</a>
-
-</div>
-
-<h3 class="section">8.4 Using Translation Compendia</h3>
-
- <p><a name="index-using-translation-compendia-525"></a>
-<a name="index-compendium-526"></a>A <dfn>compendium</dfn> is a special PO file containing a set of
-translations recurring in many different packages. The translator can
-use gettext tools to build a new compendium, to add entries to her
-compendium, and to initialize untranslated entries, or to update
-already translated entries, from translations kept in the compendium.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Creating-Compendia">Creating Compendia</a>: Merging translations for later use
-<li><a accesskey="2" href="#Using-Compendia">Using Compendia</a>: Using older translations if they fit
-</ul>
-
-<div class="node">
-<a name="Creating-Compendia"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Using-Compendia">Using Compendia</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Compendium">Compendium</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Compendium">Compendium</a>
-
-</div>
-
-<h4 class="subsection">8.4.1 Creating Compendia</h4>
-
- <p><a name="index-creating-compendia-527"></a><a name="index-compendium_002c-creating-528"></a>
-Basically every PO file consisting of translated entries only can be
-declared as a valid compendium. Often the translator wants to have
-special compendia; let's consider two cases: <cite>concatenating PO
-files</cite> and <cite>extracting a message subset from a PO file</cite>.
-
-<h5 class="subsubsection">8.4.1.1 Concatenate PO Files</h5>
-
- <p><a name="index-concatenating-PO-files-into-a-compendium-529"></a><a name="index-accumulating-translations-530"></a>To concatenate several valid PO files into one compendium file you can
-use &lsquo;<samp><span class="samp">msgcomm</span></samp>&rsquo; or &lsquo;<samp><span class="samp">msgcat</span></samp>&rsquo; (the latter preferred):
-
-<pre class="example"> msgcat -o compendium.po file1.po file2.po
-</pre>
- <p>By default, <code>msgcat</code> will accumulate divergent translations
-for the same string. Those occurrences will be marked as <code>fuzzy</code>
-and highly visible decorated; calling <code>msgcat</code> on
-<samp><span class="file">file1.po</span></samp>:
-
-<pre class="example"> #: src/hello.c:200
- #, c-format
- msgid "Report bugs to &lt;%s&gt;.\n"
- msgstr "Comunicar `bugs' a &lt;%s&gt;.\n"
-</pre>
- <p class="noindent">and <samp><span class="file">file2.po</span></samp>:
-
-<pre class="example"> #: src/bye.c:100
- #, c-format
- msgid "Report bugs to &lt;%s&gt;.\n"
- msgstr "Comunicar \"bugs\" a &lt;%s&gt;.\n"
-</pre>
- <p class="noindent">will result in:
-
-<pre class="example"> #: src/hello.c:200 src/bye.c:100
- #, fuzzy, c-format
- msgid "Report bugs to &lt;%s&gt;.\n"
- msgstr ""
- "#-#-#-#-# file1.po #-#-#-#-#\n"
- "Comunicar `bugs' a &lt;%s&gt;.\n"
- "#-#-#-#-# file2.po #-#-#-#-#\n"
- "Comunicar \"bugs\" a &lt;%s&gt;.\n"
-</pre>
- <p class="noindent">The translator will have to resolve this &ldquo;conflict&rdquo; manually; she
-has to decide whether the first or the second version is appropriate
-(or provide a new translation), to delete the &ldquo;marker lines&rdquo;, and
-finally to remove the <code>fuzzy</code> mark.
-
- <p>If the translator knows in advance the first found translation of a
-message is always the best translation she can make use to the
-&lsquo;<samp><span class="samp">--use-first</span></samp>&rsquo; switch:
-
-<pre class="example"> msgcat --use-first -o compendium.po file1.po file2.po
-</pre>
- <p>A good compendium file must not contain <code>fuzzy</code> or untranslated
-entries. If input files are &ldquo;dirty&rdquo; you must preprocess the input
-files or postprocess the result using &lsquo;<samp><span class="samp">msgattrib --translated --no-fuzzy</span></samp>&rsquo;.
-
-<h5 class="subsubsection">8.4.1.2 Extract a Message Subset from a PO File</h5>
-
- <p><a name="index-extracting-parts-of-a-PO-file-into-a-compendium-531"></a>
-Nobody wants to translate the same messages again and again; thus you
-may wish to have a compendium file containing <samp><span class="file">getopt.c</span></samp> messages.
-
- <p>To extract a message subset (e.g., all <samp><span class="file">getopt.c</span></samp> messages) from an
-existing PO file into one compendium file you can use &lsquo;<samp><span class="samp">msggrep</span></samp>&rsquo;:
-
-<pre class="example"> msggrep --location src/getopt.c -o compendium.po file.po
-</pre>
- <div class="node">
-<a name="Using-Compendia"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Creating-Compendia">Creating Compendia</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Compendium">Compendium</a>
-
-</div>
-
-<h4 class="subsection">8.4.2 Using Compendia</h4>
-
- <p>You can use a compendium file to initialize a translation from scratch
-or to update an already existing translation.
-
-<h5 class="subsubsection">8.4.2.1 Initialize a New Translation File</h5>
-
- <p><a name="index-initialize-translations-from-a-compendium-532"></a>
-Since a PO file with translations does not exist the translator can
-merely use <samp><span class="file">/dev/null</span></samp> to fake the &ldquo;old&rdquo; translation file.
-
-<pre class="example"> msgmerge --compendium compendium.po -o file.po /dev/null file.pot
-</pre>
- <h5 class="subsubsection">8.4.2.2 Update an Existing Translation File</h5>
-
- <p><a name="index-update-translations-from-a-compendium-533"></a>
-Concatenate the compendium file(s) and the existing PO, merge the
-result with the POT file and remove the obsolete entries (optional,
-here done using &lsquo;<samp><span class="samp">sed</span></samp>&rsquo;):
-
-<pre class="example"> msgcat --use-first -o update.po compendium1.po compendium2.po file.po
- msgmerge update.po file.pot | msgattrib --no-obsolete &gt; file.po
-</pre>
- <div class="node">
-<a name="Manipulating"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Binaries">Binaries</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Editing">Editing</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">9 Manipulating PO Files</h2>
-
- <p><a name="index-manipulating-PO-files-534"></a>
-Sometimes it is necessary to manipulate PO files in a way that is better
-performed automatically than by hand. GNU <code>gettext</code> includes a
-complete set of tools for this purpose.
-
- <p><a name="index-merging-two-PO-files-535"></a>When merging two packages into a single package, the resulting POT file
-will be the concatenation of the two packages' POT files. Thus the
-maintainer must concatenate the two existing package translations into
-a single translation catalog, for each language. This is best performed
-using &lsquo;<samp><span class="samp">msgcat</span></samp>&rsquo;. It is then the translators' duty to deal with any
-possible conflicts that arose during the merge.
-
- <p><a name="index-encoding-conversion-536"></a>When a translator takes over the translation job from another translator,
-but she uses a different character encoding in her locale, she will
-convert the catalog to her character encoding. This is best done through
-the &lsquo;<samp><span class="samp">msgconv</span></samp>&rsquo; program.
-
- <p>When a maintainer takes a source file with tagged messages from another
-package, he should also take the existing translations for this source
-file (and not let the translators do the same job twice). One way to do
-this is through &lsquo;<samp><span class="samp">msggrep</span></samp>&rsquo;, another is to create a POT file for
-that source file and use &lsquo;<samp><span class="samp">msgmerge</span></samp>&rsquo;.
-
- <p><a name="index-dialect-537"></a><a name="index-orthography-538"></a>When a translator wants to adjust some translation catalog for a special
-dialect or orthography &mdash; for example, German as written in Switzerland
-versus German as written in Germany &mdash; she needs to apply some text
-processing to every message in the catalog. The tool for doing this is
-&lsquo;<samp><span class="samp">msgfilter</span></samp>&rsquo;.
-
- <p>Another use of <code>msgfilter</code> is to produce approximately the POT file for
-which a given PO file was made. This can be done through a filter command
-like &lsquo;<samp><span class="samp">msgfilter sed -e d | sed -e '/^# /d'</span></samp>&rsquo;. Note that the original
-POT file may have had different comments and different plural message counts,
-that's why it's better to use the original POT file if available.
-
- <p><a name="index-checking-of-translations-539"></a>When a translator wants to check her translations, for example according
-to orthography rules or using a non-interactive spell checker, she can do
-so using the &lsquo;<samp><span class="samp">msgexec</span></samp>&rsquo; program.
-
- <p><a name="index-duplicate-elimination-540"></a>When third party tools create PO or POT files, sometimes duplicates cannot
-be avoided. But the GNU <code>gettext</code> tools give an error when they
-encounter duplicate msgids in the same file and in the same domain.
-To merge duplicates, the &lsquo;<samp><span class="samp">msguniq</span></samp>&rsquo; program can be used.
-
- <p>&lsquo;<samp><span class="samp">msgcomm</span></samp>&rsquo; is a more general tool for keeping or throwing away
-duplicates, occurring in different files.
-
- <p>&lsquo;<samp><span class="samp">msgcmp</span></samp>&rsquo; can be used to check whether a translation catalog is
-completely translated.
-
- <p><a name="index-attributes_002c-manipulating-541"></a>&lsquo;<samp><span class="samp">msgattrib</span></samp>&rsquo; can be used to select and extract only the fuzzy
-or untranslated messages of a translation catalog.
-
- <p>&lsquo;<samp><span class="samp">msgen</span></samp>&rsquo; is useful as a first step for preparing English translation
-catalogs. It copies each message's msgid to its msgstr.
-
- <p>Finally, for those applications where all these various programs are not
-sufficient, a library &lsquo;<samp><span class="samp">libgettextpo</span></samp>&rsquo; is provided that can be used to
-write other specialized programs that process PO files.
-
-<ul class="menu">
-<li><a accesskey="1" href="#msgcat-Invocation">msgcat Invocation</a>: Invoking the <code>msgcat</code> Program
-<li><a accesskey="2" href="#msgconv-Invocation">msgconv Invocation</a>: Invoking the <code>msgconv</code> Program
-<li><a accesskey="3" href="#msggrep-Invocation">msggrep Invocation</a>: Invoking the <code>msggrep</code> Program
-<li><a accesskey="4" href="#msgfilter-Invocation">msgfilter Invocation</a>: Invoking the <code>msgfilter</code> Program
-<li><a accesskey="5" href="#msguniq-Invocation">msguniq Invocation</a>: Invoking the <code>msguniq</code> Program
-<li><a accesskey="6" href="#msgcomm-Invocation">msgcomm Invocation</a>: Invoking the <code>msgcomm</code> Program
-<li><a accesskey="7" href="#msgcmp-Invocation">msgcmp Invocation</a>: Invoking the <code>msgcmp</code> Program
-<li><a accesskey="8" href="#msgattrib-Invocation">msgattrib Invocation</a>: Invoking the <code>msgattrib</code> Program
-<li><a accesskey="9" href="#msgen-Invocation">msgen Invocation</a>: Invoking the <code>msgen</code> Program
-<li><a href="#msgexec-Invocation">msgexec Invocation</a>: Invoking the <code>msgexec</code> Program
-<li><a href="#Colorizing">Colorizing</a>: Highlighting parts of PO files
-<li><a href="#libgettextpo">libgettextpo</a>: Writing your own programs that process PO files
-</ul>
-
-<div class="node">
-<a name="msgcat-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgconv-Invocation">msgconv Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Manipulating">Manipulating</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.1 Invoking the <code>msgcat</code> Program</h3>
-
- <p><a name="index-msgcat-542"></a><a name="index-g_t_0040code_007bmsgcat_007d-program_002c-usage-543"></a>
-<pre class="example"> msgcat [<var>option</var>] [<var>inputfile</var>]...
-</pre>
- <p><a name="index-concatenate-PO-files-544"></a><a name="index-merge-PO-files-545"></a>The <code>msgcat</code> program concatenates and merges the specified PO files.
-It finds messages which are common to two or more of the specified PO files.
-By using the <code>--more-than</code> option, greater commonality may be requested
-before messages are printed. Conversely, the <code>--less-than</code> option may be
-used to specify less commonality before messages are printed (i.e.
-&lsquo;<samp><span class="samp">--less-than=2</span></samp>&rsquo; will only print the unique messages). Translations,
-comments and extract comments will be cumulated, except that if
-<code>--use-first</code> is specified, they will be taken from the first PO file
-to define them. File positions from all PO files will be cumulated.
-
-<h4 class="subsection">9.1.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var><span class="samp"> ...</span></samp>&rsquo;<dd>Input files.
-
- <br><dt>&lsquo;<samp><span class="samp">-f </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--files-from=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-546"></a><a name="index-g_t_002d_002dfiles_002dfrom_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-547"></a>Read the names of the input files from <var>file</var> instead of getting
-them from the command line.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-548"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-549"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If <var>inputfile</var> is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.1.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-550"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-551"></a>Write output to specified file.
-
- </dl>
-
- <p><a name="index-standard-output_002c-and-_0040code_007bmsgcat_007d-552"></a>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.1.3 Message selection</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-&lt; </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--less-than=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002d_003c_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-553"></a><a name="index-g_t_002d_002dless_002dthan_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-554"></a>Print messages with less than <var>number</var> definitions, defaults to infinite
-if not set.
-
- <br><dt>&lsquo;<samp><span class="samp">-&gt; </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--more-than=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002d_003e_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-555"></a><a name="index-g_t_002d_002dmore_002dthan_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-556"></a>Print messages with more than <var>number</var> definitions, defaults to 0 if not
-set.
-
- <br><dt>&lsquo;<samp><span class="samp">-u</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--unique</span></samp>&rsquo;<dd><a name="index-g_t_002du_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-557"></a><a name="index-g_t_002d_002dunique_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-558"></a>Shorthand for &lsquo;<samp><span class="samp">--less-than=2</span></samp>&rsquo;. Requests that only unique messages be
-printed.
-
- </dl>
-
-<h4 class="subsection">9.1.4 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-559"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-560"></a>Assume the input files are Java ResourceBundles in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-561"></a>Assume the input files are NeXTstep/GNUstep localized resource files in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.1.5 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">-t</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--to-code=</span><var>name</var></samp>&rsquo;<dd><a name="index-g_t_002dt_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-562"></a><a name="index-g_t_002d_002dto_002dcode_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-563"></a>Specify encoding for output.
-
- <br><dt>&lsquo;<samp><span class="samp">--use-first</span></samp>&rsquo;<dd><a name="index-g_t_002d_002duse_002dfirst_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-564"></a>Use first available translation for each message. Don't merge several
-translations into one.
-
- <br><dt>&lsquo;<samp><span class="samp">--lang=</span><var>catalogname</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dlang_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-565"></a>Specify the &lsquo;<samp><span class="samp">Language</span></samp>&rsquo; field to be used in the header entry. See
-<a href="#Header-Entry">Header Entry</a> for the meaning of this field. Note: The
-&lsquo;<samp><span class="samp">Language-Team</span></samp>&rsquo; and &lsquo;<samp><span class="samp">Plural-Forms</span></samp>&rsquo; fields are left unchanged.
-
- <br><dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-566"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-567"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-568"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-569"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-570"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-571"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-572"></a><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-573"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-574"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-575"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-576"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-577"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-578"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-579"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-580"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-581"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-582"></a><a name="index-sorting-_0040code_007bmsgcat_007d-output-583"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-584"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-585"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.1.6 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-586"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-587"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-588"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-589"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msgconv-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msggrep-Invocation">msggrep Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgcat-Invocation">msgcat Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.2 Invoking the <code>msgconv</code> Program</h3>
-
- <p><a name="index-msgconv-590"></a><a name="index-g_t_0040code_007bmsgconv_007d-program_002c-usage-591"></a>
-<pre class="example"> msgconv [<var>option</var>] [<var>inputfile</var>]
-</pre>
- <p><a name="index-convert-translations-to-a-different-encoding-592"></a>The <code>msgconv</code> program converts a translation catalog to a different
-character encoding.
-
-<h4 class="subsection">9.2.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var></samp>&rsquo;<dd>Input PO file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-593"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-594"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.2.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-595"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-596"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.2.3 Conversion target</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-t</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--to-code=</span><var>name</var></samp>&rsquo;<dd><a name="index-g_t_002dt_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-597"></a><a name="index-g_t_002d_002dto_002dcode_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-598"></a>Specify encoding for output.
-
- </dl>
-
- <p>The default encoding is the current locale's encoding.
-
-<h4 class="subsection">9.2.4 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-599"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-600"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgonv_007d-option_007d-601"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.2.5 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-602"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-603"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-604"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-605"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-606"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-607"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-608"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-609"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-610"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-611"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-612"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-613"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-614"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-615"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-616"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-617"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-618"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-619"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.2.6 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-620"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-621"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-622"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-623"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msggrep-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgfilter-Invocation">msgfilter Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgconv-Invocation">msgconv Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.3 Invoking the <code>msggrep</code> Program</h3>
-
- <p><a name="index-msggrep-624"></a><a name="index-g_t_0040code_007bmsggrep_007d-program_002c-usage-625"></a>
-<pre class="example"> msggrep [<var>option</var>] [<var>inputfile</var>]
-</pre>
- <p><a name="index-search-messages-in-a-catalog-626"></a>The <code>msggrep</code> program extracts all messages of a translation catalog
-that match a given pattern or belong to some given source files.
-
-<h4 class="subsection">9.3.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var></samp>&rsquo;<dd>Input PO file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-627"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-628"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.3.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-629"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-630"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.3.3 Message selection</h4>
-
-<pre class="example"> [-N <var>sourcefile</var>]... [-M <var>domainname</var>]...
- [-J <var>msgctxt-pattern</var>] [-K <var>msgid-pattern</var>] [-T <var>msgstr-pattern</var>]
- [-C <var>comment-pattern</var>]
-</pre>
- <p>A message is selected if
- <ul>
-<li>it comes from one of the specified source files,
-<li>or if it comes from one of the specified domains,
-<li>or if &lsquo;<samp><span class="samp">-J</span></samp>&rsquo; is given and its context (msgctxt) matches
-<var>msgctxt-pattern</var>,
-<li>or if &lsquo;<samp><span class="samp">-K</span></samp>&rsquo; is given and its key (msgid or msgid_plural) matches
-<var>msgid-pattern</var>,
-<li>or if &lsquo;<samp><span class="samp">-T</span></samp>&rsquo; is given and its translation (msgstr) matches
-<var>msgstr-pattern</var>,
-<li>or if &lsquo;<samp><span class="samp">-C</span></samp>&rsquo; is given and the translator's comment matches
-<var>comment-pattern</var>.
-</ul>
-
- <p>When more than one selection criterion is specified, the set of selected
-messages is the union of the selected messages of each criterion.
-
- <p><var>msgctxt-pattern</var> or <var>msgid-pattern</var> or <var>msgstr-pattern</var> syntax:
-<pre class="example"> [-E | -F] [-e <var>pattern</var> | -f <var>file</var>]...
-</pre>
- <p><var>pattern</var>s are basic regular expressions by default, or extended regular
-expressions if -E is given, or fixed strings if -F is given.
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-N </span><var>sourcefile</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--location=</span><var>sourcefile</var></samp>&rsquo;<dd><a name="index-g_t_002dN_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-631"></a><a name="index-g_t_002d_002dlocation_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-632"></a>Select messages extracted from <var>sourcefile</var>. <var>sourcefile</var> can be
-either a literal file name or a wildcard pattern.
-
- <br><dt>&lsquo;<samp><span class="samp">-M </span><var>domainname</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--domain=</span><var>domainname</var></samp>&rsquo;<dd><a name="index-g_t_002dM_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-633"></a><a name="index-g_t_002d_002ddomain_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-634"></a>Select messages belonging to domain <var>domainname</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-J</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--msgctxt</span></samp>&rsquo;<dd><a name="index-g_t_002dJ_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-635"></a><a name="index-g_t_002d_002dmsgctxt_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-636"></a>Start of patterns for the msgctxt.
-
- <br><dt>&lsquo;<samp><span class="samp">-K</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--msgid</span></samp>&rsquo;<dd><a name="index-g_t_002dK_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-637"></a><a name="index-g_t_002d_002dmsgid_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-638"></a>Start of patterns for the msgid.
-
- <br><dt>&lsquo;<samp><span class="samp">-T</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--msgstr</span></samp>&rsquo;<dd><a name="index-g_t_002dT_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-639"></a><a name="index-g_t_002d_002dmsgstr_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-640"></a>Start of patterns for the msgstr.
-
- <br><dt>&lsquo;<samp><span class="samp">-C</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--comment</span></samp>&rsquo;<dd><a name="index-g_t_002dC_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-641"></a><a name="index-g_t_002d_002dcomment_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-642"></a>Start of patterns for the translator's comment.
-
- <br><dt>&lsquo;<samp><span class="samp">-X</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--extracted-comment</span></samp>&rsquo;<dd><a name="index-g_t_002dX_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-643"></a><a name="index-g_t_002d_002dextracted_002dcomment_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-644"></a>Start of patterns for the extracted comments.
-
- <br><dt>&lsquo;<samp><span class="samp">-E</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--extended-regexp</span></samp>&rsquo;<dd><a name="index-g_t_002dE_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-645"></a><a name="index-g_t_002d_002dextended_002dregexp_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-646"></a>Specify that <var>pattern</var> is an extended regular expression.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--fixed-strings</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-647"></a><a name="index-g_t_002d_002dfixed_002dstrings_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-648"></a>Specify that <var>pattern</var> is a set of newline-separated strings.
-
- <br><dt>&lsquo;<samp><span class="samp">-e </span><var>pattern</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--regexp=</span><var>pattern</var></samp>&rsquo;<dd><a name="index-g_t_002de_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-649"></a><a name="index-g_t_002d_002dregexp_003d_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-650"></a>Use <var>pattern</var> as a regular expression.
-
- <br><dt>&lsquo;<samp><span class="samp">-f </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-651"></a><a name="index-g_t_002d_002dfile_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-652"></a>Obtain <var>pattern</var> from <var>file</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--ignore-case</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-653"></a><a name="index-g_t_002d_002dignore_002dcase_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-654"></a>Ignore case distinctions.
-
- <br><dt>&lsquo;<samp><span class="samp">-v</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--invert-match</span></samp>&rsquo;<dd><a name="index-g_t_002dv_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-655"></a><a name="index-g_t_002d_002dinvert_002dmatch_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-656"></a>Output only the messages that do not match any selection criterion, instead
-of the messages that match a selection criterion.
-
- </dl>
-
-<h4 class="subsection">9.3.4 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-657"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-658"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-659"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.3.5 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-660"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-661"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-662"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-663"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-664"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-665"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-666"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-667"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-668"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-669"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-670"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-671"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-672"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-673"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-674"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.3.6 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-675"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-676"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-677"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-678"></a>Output version information and exit.
-
- </dl>
-
-<h4 class="subsection">9.3.7 Examples</h4>
-
- <p>To extract the messages that come from the source files
-<code>gnulib-lib/error.c</code> and <code>gnulib-lib/getopt.c</code>:
-
-<pre class="smallexample"> msggrep -N gnulib-lib/error.c -N gnulib-lib/getopt.c input.po
-</pre>
- <p>To extract the messages that contain the string &ldquo;Please specify&rdquo; in the
-original string:
-
-<pre class="smallexample"> msggrep --msgid -F -e 'Please specify' input.po
-</pre>
- <p>To extract the messages that have a context specifier of either &ldquo;Menu&gt;File&rdquo;
-or &ldquo;Menu&gt;Edit&rdquo; or a submenu of them:
-
-<pre class="smallexample"> msggrep --msgctxt -E -e '^Menu&gt;(File|Edit)' input.po
-</pre>
- <p>To extract the messages whose translation contains one of the strings in the
-file <code>wordlist.txt</code>:
-
-<pre class="smallexample"> msggrep --msgstr -F -f wordlist.txt input.po
-</pre>
- <div class="node">
-<a name="msgfilter-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msguniq-Invocation">msguniq Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msggrep-Invocation">msggrep Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.4 Invoking the <code>msgfilter</code> Program</h3>
-
- <p><a name="index-msgfilter-679"></a><a name="index-g_t_0040code_007bmsgfilter_007d-program_002c-usage-680"></a>
-<pre class="example"> msgfilter [<var>option</var>] <var>filter</var> [<var>filter-option</var>]
-</pre>
- <p><a name="index-apply-a-filter-to-translations-681"></a>The <code>msgfilter</code> program applies a filter to all translations of a
-translation catalog.
-
- <p><a name="index-MSGFILTER_005fMSGCTXT_0040r_007b_002c-environment-variable_007d-682"></a><a name="index-MSGFILTER_005fMSGID_0040r_007b_002c-environment-variable_007d-683"></a><a name="index-MSGFILTER_005fLOCATION_0040r_007b_002c-environment-variable_007d-684"></a>During each <var>filter</var> invocation, the environment variable
-<code>MSGFILTER_MSGID</code> is bound to the message's msgid, and the environment
-variable <code>MSGFILTER_LOCATION</code> is bound to the location in the PO file
-of the message. If the message has a context, the environment variable
-<code>MSGFILTER_MSGCTXT</code> is bound to the message's msgctxt, otherwise it is
-unbound.
-
-<h4 class="subsection">9.4.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-i </span><var>inputfile</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--input=</span><var>inputfile</var></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-685"></a><a name="index-g_t_002d_002dinput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-686"></a>Input PO file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-687"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-688"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.4.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-689"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-690"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.4.3 The filter</h4>
-
- <p>The <var>filter</var> can be any program that reads a translation from standard
-input and writes a modified translation to standard output. A frequently
-used filter is &lsquo;<samp><span class="samp">sed</span></samp>&rsquo;. A few particular built-in filters are also
-recognized.
-
- <p><a name="index-g_t_0040code_007bmsgfilter_007d-filter-and-catalog-encoding-691"></a>Note: If the filter is not a built-in filter, you have to care about encodings:
-It is your responsibility to ensure that the <var>filter</var> can cope
-with input encoded in the translation catalog's encoding. If the
-<var>filter</var> wants input in a particular encoding, you can in a first step
-convert the translation catalog to that encoding using the &lsquo;<samp><span class="samp">msgconv</span></samp>&rsquo;
-program, before invoking &lsquo;<samp><span class="samp">msgfilter</span></samp>&rsquo;. If the <var>filter</var> wants input
-in the locale's encoding, but you want to avoid the locale's encoding, then
-you can first convert the translation catalog to UTF-8 using the
-&lsquo;<samp><span class="samp">msgconv</span></samp>&rsquo; program and then make &lsquo;<samp><span class="samp">msgfilter</span></samp>&rsquo; work in an UTF-8
-locale, by using the <code>LC_ALL</code> environment variable.
-
- <p><a name="index-portability-problems-with-_0040code_007bsed_007d-692"></a>Note: Most translations in a translation catalog don't end with a newline
-character. For this reason, it is important that the <var>filter</var>
-recognizes its last input line even if it ends without a newline, and that
-it doesn't add an undesired trailing newline at the end. The &lsquo;<samp><span class="samp">sed</span></samp>&rsquo;
-program on some platforms is known to ignore the last line of input if it
-is not terminated with a newline. You can use GNU <code>sed</code> instead; it
-does not have this limitation.
-
-<h4 class="subsection">9.4.4 Useful <var>filter-option</var>s when the <var>filter</var> is &lsquo;<samp><span class="samp">sed</span></samp>&rsquo;</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-e </span><var>script</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--expression=</span><var>script</var></samp>&rsquo;<dd><a name="index-g_t_002de_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-693"></a><a name="index-g_t_002d_002dexpression_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-694"></a>Add <var>script</var> to the commands to be executed.
-
- <br><dt>&lsquo;<samp><span class="samp">-f </span><var>scriptfile</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--file=</span><var>scriptfile</var></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-695"></a><a name="index-g_t_002d_002dfile_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-696"></a>Add the contents of <var>scriptfile</var> to the commands to be executed.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--quiet</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--silent</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-697"></a><a name="index-g_t_002d_002dquiet_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-698"></a><a name="index-g_t_002d_002dsilent_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-699"></a>Suppress automatic printing of pattern space.
-
- </dl>
-
-<h4 class="subsection">9.4.5 Built-in <var>filter</var>s</h4>
-
- <p><a name="index-recode_002dsr_002dlatin-700"></a><a name="index-g_t_0040code_007brecode_002dsr_002dlatin_007d-program-701"></a>The filter &lsquo;<samp><span class="samp">recode-sr-latin</span></samp>&rsquo; is recognized as a built-in filter.
-The command &lsquo;<samp><span class="samp">recode-sr-latin</span></samp>&rsquo; converts Serbian text, written in the
-Cyrillic script, to the Latin script.
-The command &lsquo;<samp><span class="samp">msgfilter recode-sr-latin</span></samp>&rsquo; applies this conversion to the
-translations of a PO file. Thus, it can be used to convert an <samp><span class="file">sr.po</span></samp>
-file to an <samp><span class="file">sr@latin.po</span></samp> file.
-
- <p>The use of built-in filters is not sensitive to the current locale's encoding.
-Moreover, when used with a built-in filter, &lsquo;<samp><span class="samp">msgfilter</span></samp>&rsquo; can automatically
-convert the message catalog to the UTF-8 encoding when needed.
-
-<h4 class="subsection">9.4.6 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-702"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-703"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-704"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.4.7 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-705"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-706"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-707"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-708"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--keep-header</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dkeep_002dheader_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-709"></a>Keep the header entry, i.e. the message with &lsquo;<samp><span class="samp">msgid ""</span></samp>&rsquo;, unmodified,
-instead of filtering it. By default, the header entry is subject to
-filtering like any other message.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-710"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-711"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-712"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-713"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-714"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-715"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-716"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-717"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-718"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-719"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-720"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-721"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-722"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.4.8 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-723"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-724"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-725"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-726"></a>Output version information and exit.
-
- </dl>
-
-<h4 class="subsection">9.4.9 Examples</h4>
-
- <p>To convert German translations to Swiss orthography (in an UTF-8 locale):
-
-<pre class="smallexample"> msgconv -t UTF-8 de.po | msgfilter sed -e 's/&szlig;/ss/g'
-</pre>
- <p>To convert Serbian translations in Cyrillic script to Latin script:
-
-<pre class="smallexample"> msgfilter recode-sr-latin &lt; sr.po
-</pre>
- <div class="node">
-<a name="msguniq-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgcomm-Invocation">msgcomm Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgfilter-Invocation">msgfilter Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.5 Invoking the <code>msguniq</code> Program</h3>
-
- <p><a name="index-msguniq-727"></a><a name="index-g_t_0040code_007bmsguniq_007d-program_002c-usage-728"></a>
-<pre class="example"> msguniq [<var>option</var>] [<var>inputfile</var>]
-</pre>
- <p><a name="index-unify-duplicate-translations-729"></a><a name="index-duplicate-removal-730"></a>The <code>msguniq</code> program unifies duplicate translations in a translation
-catalog. It finds duplicate translations of the same message ID. Such
-duplicates are invalid input for other programs like <code>msgfmt</code>,
-<code>msgmerge</code> or <code>msgcat</code>. By default, duplicates are merged
-together. When using the &lsquo;<samp><span class="samp">--repeated</span></samp>&rsquo; option, only duplicates are
-output, and all other messages are discarded. Comments and extracted
-comments will be cumulated, except that if &lsquo;<samp><span class="samp">--use-first</span></samp>&rsquo; is
-specified, they will be taken from the first translation. File positions
-will be cumulated. When using the &lsquo;<samp><span class="samp">--unique</span></samp>&rsquo; option, duplicates are
-discarded.
-
-<h4 class="subsection">9.5.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var></samp>&rsquo;<dd>Input PO file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-731"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-732"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.5.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-733"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-734"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.5.3 Message selection</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-d</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--repeated</span></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-735"></a><a name="index-g_t_002d_002drepeated_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-736"></a>Print only duplicates.
-
- <br><dt>&lsquo;<samp><span class="samp">-u</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--unique</span></samp>&rsquo;<dd><a name="index-g_t_002du_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-737"></a><a name="index-g_t_002d_002dunique_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-738"></a>Print only unique messages, discard duplicates.
-
- </dl>
-
-<h4 class="subsection">9.5.4 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-739"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-740"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-741"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.5.5 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">-t</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--to-code=</span><var>name</var></samp>&rsquo;<dd><a name="index-g_t_002dt_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-742"></a><a name="index-g_t_002d_002dto_002dcode_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-743"></a>Specify encoding for output.
-
- <br><dt>&lsquo;<samp><span class="samp">--use-first</span></samp>&rsquo;<dd><a name="index-g_t_002d_002duse_002dfirst_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-744"></a>Use first available translation for each message. Don't merge several
-translations into one.
-
- <br><dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-745"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-746"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-747"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-748"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-749"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-750"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-751"></a><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-752"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-753"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-754"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-755"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-756"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-757"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-758"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-759"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-760"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-761"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-762"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-763"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.5.6 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-764"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-765"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-766"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-767"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msgcomm-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgcmp-Invocation">msgcmp Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msguniq-Invocation">msguniq Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.6 Invoking the <code>msgcomm</code> Program</h3>
-
- <p><a name="index-msgcomm-768"></a><a name="index-g_t_0040code_007bmsgcomm_007d-program_002c-usage-769"></a>
-<pre class="example"> msgcomm [<var>option</var>] [<var>inputfile</var>]...
-</pre>
- <p><a name="index-find-common-messages-770"></a>The <code>msgcomm</code> program finds messages which are common to two or more
-of the specified PO files.
-By using the <code>--more-than</code> option, greater commonality may be requested
-before messages are printed. Conversely, the <code>--less-than</code> option may be
-used to specify less commonality before messages are printed (i.e.
-&lsquo;<samp><span class="samp">--less-than=2</span></samp>&rsquo; will only print the unique messages). Translations,
-comments and extract comments will be preserved, but only from the first
-PO file to define them. File positions from all PO files will be
-cumulated.
-
-<h4 class="subsection">9.6.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var><span class="samp"> ...</span></samp>&rsquo;<dd>Input files.
-
- <br><dt>&lsquo;<samp><span class="samp">-f </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--files-from=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-771"></a><a name="index-g_t_002d_002dfiles_002dfrom_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-772"></a>Read the names of the input files from <var>file</var> instead of getting
-them from the command line.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-773"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-774"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If <var>inputfile</var> is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.6.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-775"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-776"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.6.3 Message selection</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-&lt; </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--less-than=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002d_003c_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-777"></a><a name="index-g_t_002d_002dless_002dthan_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-778"></a>Print messages with less than <var>number</var> definitions, defaults to infinite
-if not set.
-
- <br><dt>&lsquo;<samp><span class="samp">-&gt; </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--more-than=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002d_003e_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-779"></a><a name="index-g_t_002d_002dmore_002dthan_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-780"></a>Print messages with more than <var>number</var> definitions, defaults to 1 if not
-set.
-
- <br><dt>&lsquo;<samp><span class="samp">-u</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--unique</span></samp>&rsquo;<dd><a name="index-g_t_002du_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-781"></a><a name="index-g_t_002d_002dunique_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-782"></a>Shorthand for &lsquo;<samp><span class="samp">--less-than=2</span></samp>&rsquo;. Requests that only unique messages be
-printed.
-
- </dl>
-
-<h4 class="subsection">9.6.4 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-783"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-784"></a>Assume the input files are Java ResourceBundles in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-785"></a>Assume the input files are NeXTstep/GNUstep localized resource files in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.6.5 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-786"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-787"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-788"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-789"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-790"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-791"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-792"></a><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-793"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-794"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-795"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-796"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-797"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-798"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-799"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-800"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-801"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-802"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-803"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-804"></a>Sort output by file location.
-
- <br><dt>&lsquo;<samp><span class="samp">--omit-header</span></samp>&rsquo;<dd><a name="index-g_t_002d_002domit_002dheader_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-805"></a>Don't write header with &lsquo;<samp><span class="samp">msgid ""</span></samp>&rsquo; entry.
-
- </dl>
-
-<h4 class="subsection">9.6.6 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-806"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-807"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-808"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-809"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msgcmp-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgattrib-Invocation">msgattrib Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgcomm-Invocation">msgcomm Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.7 Invoking the <code>msgcmp</code> Program</h3>
-
- <p><a name="index-msgcmp-810"></a><a name="index-g_t_0040code_007bmsgcmp_007d-program_002c-usage-811"></a>
-<pre class="example"> msgcmp [<var>option</var>] <var>def</var>.po <var>ref</var>.pot
-</pre>
- <p><a name="index-compare-PO-files-812"></a>The <code>msgcmp</code> program compares two Uniforum style .po files to check that
-both contain the same set of msgid strings. The <var>def</var>.po file is an
-existing PO file with the translations. The <var>ref</var>.pot file is the last
-created PO file, or a PO Template file (generally created by <code>xgettext</code>).
-This is useful for checking that you have translated each and every message
-in your program. Where an exact match cannot be found, fuzzy matching is
-used to produce better diagnostics.
-
-<h4 class="subsection">9.7.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>def</var><span class="samp">.po</span></samp>&rsquo;<dd>Translations.
-
- <br><dt>&lsquo;<samp><var>ref</var><span class="samp">.pot</span></samp>&rsquo;<dd>References to the sources.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-813"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-814"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories.
-
- </dl>
-
-<h4 class="subsection">9.7.2 Operation modifiers</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-m</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--multi-domain</span></samp>&rsquo;<dd><a name="index-g_t_002dm_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-815"></a><a name="index-g_t_002d_002dmulti_002ddomain_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-816"></a>Apply <var>ref</var>.pot to each of the domains in <var>def</var>.po.
-
- <br><dt>&lsquo;<samp><span class="samp">-N</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--no-fuzzy-matching</span></samp>&rsquo;<dd><a name="index-g_t_002dN_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-817"></a><a name="index-g_t_002d_002dno_002dfuzzy_002dmatching_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-818"></a>Do not use fuzzy matching when an exact match is not found. This may speed
-up the operation considerably.
-
- <br><dt>&lsquo;<samp><span class="samp">--use-fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002d_002duse_002dfuzzy_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-819"></a>Consider fuzzy messages in the <var>def</var>.po file like translated messages.
-Note that using this option is usually wrong, because fuzzy messages are
-exactly those which have not been validated by a human translator.
-
- <br><dt>&lsquo;<samp><span class="samp">--use-untranslated</span></samp>&rsquo;<dd><a name="index-g_t_002d_002duse_002duntranslated_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-820"></a>Consider untranslated messages in the <var>def</var>.po file like translated
-messages. Note that using this option is usually wrong.
-
- </dl>
-
-<h4 class="subsection">9.7.3 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-821"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-822"></a>Assume the input files are Java ResourceBundles in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-823"></a>Assume the input files are NeXTstep/GNUstep localized resource files in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.7.4 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-824"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-825"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-826"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-827"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msgattrib-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgen-Invocation">msgen Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgcmp-Invocation">msgcmp Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.8 Invoking the <code>msgattrib</code> Program</h3>
-
- <p><a name="index-msgattrib-828"></a><a name="index-g_t_0040code_007bmsgattrib_007d-program_002c-usage-829"></a>
-<pre class="example"> msgattrib [<var>option</var>] [<var>inputfile</var>]
-</pre>
- <p><a name="index-filter-messages-according-to-attributes-830"></a><a name="index-attribute-manipulation-831"></a>The <code>msgattrib</code> program filters the messages of a translation catalog
-according to their attributes, and manipulates the attributes.
-
-<h4 class="subsection">9.8.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var></samp>&rsquo;<dd>Input PO file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-832"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-833"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.8.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-834"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-835"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.8.3 Message selection</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">--translated</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dtranslated_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-836"></a>Keep translated messages, remove untranslated messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--untranslated</span></samp>&rsquo;<dd><a name="index-g_t_002d_002duntranslated_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-837"></a>Keep untranslated messages, remove translated messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-838"></a>Remove
-‘fuzzy’
-marked messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--only-fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002d_002donly_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-839"></a>Keep
-‘fuzzy’
-marked messages, remove all other messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-obsolete</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-840"></a>Remove obsolete #~ messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--only-obsolete</span></samp>&rsquo;<dd><a name="index-g_t_002d_002donly_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-841"></a>Keep obsolete #~ messages, remove all other messages.
-
- </dl>
-
-<h4 class="subsection">9.8.4 Attribute manipulation</h4>
-
- <p><a name="index-modify-message-attributes-842"></a>Attributes are modified after the message selection/removal has been
-performed. If the &lsquo;<samp><span class="samp">--only-file</span></samp>&rsquo; or &lsquo;<samp><span class="samp">--ignore-file</span></samp>&rsquo; option is
-specified, the attribute modification is applied only to those messages
-that are listed in the <var>only-file</var> and not listed in the
-<var>ignore-file</var>.
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">--set-fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dset_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-843"></a>Set all messages
-‘fuzzy’.
-
- <br><dt>&lsquo;<samp><span class="samp">--clear-fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dclear_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-844"></a>Set all messages
-non-‘fuzzy’.
-
- <br><dt>&lsquo;<samp><span class="samp">--set-obsolete</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dset_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-845"></a>Set all messages obsolete.
-
- <br><dt>&lsquo;<samp><span class="samp">--clear-obsolete</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dclear_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-846"></a>Set all messages non-obsolete.
-
- <br><dt>&lsquo;<samp><span class="samp">--clear-previous</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dclear_002dprevious_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-847"></a>Remove the &ldquo;previous msgid&rdquo; (&lsquo;<samp><span class="samp">#|</span></samp>&rsquo;) comments from all messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--only-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002donly_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-848"></a>Limit the attribute changes to entries that are listed in <var>file</var>.
-<var>file</var> should be a PO or POT file.
-
- <br><dt>&lsquo;<samp><span class="samp">--ignore-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dignore_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-849"></a>Limit the attribute changes to entries that are not listed in <var>file</var>.
-<var>file</var> should be a PO or POT file.
-
- <br><dt>&lsquo;<samp><span class="samp">--fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-850"></a>Synonym for &lsquo;<samp><span class="samp">--only-fuzzy --clear-fuzzy</span></samp>&rsquo;: It keeps only the fuzzy
-messages and removes their
-‘fuzzy’
-mark.
-
- <br><dt>&lsquo;<samp><span class="samp">--obsolete</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-851"></a>Synonym for &lsquo;<samp><span class="samp">--only-obsolete --clear-obsolete</span></samp>&rsquo;: It keeps only the
-obsolete messages and makes them non-obsolete.
-
- </dl>
-
-<h4 class="subsection">9.8.5 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-852"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-853"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-854"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.8.6 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-855"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-856"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-857"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-858"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-859"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-860"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-861"></a><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-862"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-863"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-864"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-865"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-866"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-867"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-868"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-869"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-870"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-871"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-872"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-873"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.8.7 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-874"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-875"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-876"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-877"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msgen-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgexec-Invocation">msgexec Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgattrib-Invocation">msgattrib Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.9 Invoking the <code>msgen</code> Program</h3>
-
- <p><a name="index-msgen-878"></a><a name="index-g_t_0040code_007bmsgen_007d-program_002c-usage-879"></a>
-<pre class="example"> msgen [<var>option</var>] <var>inputfile</var>
-</pre>
- <p><a name="index-generate-translation-catalog-in-English-880"></a>The <code>msgen</code> program creates an English translation catalog. The
-input file is the last created English PO file, or a PO Template file
-(generally created by xgettext). Untranslated entries are assigned a
-translation that is identical to the msgid.
-
- <p>Note: &lsquo;<samp><span class="samp">msginit --no-translator --locale=en</span></samp>&rsquo; performs a very similar
-task. The main difference is that <code>msginit</code> cares specially about
-the header entry, whereas <code>msgen</code> doesn't.
-
-<h4 class="subsection">9.9.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>inputfile</var></samp>&rsquo;<dd>Input PO or POT file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-881"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-882"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If <var>inputfile</var> is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.9.2 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-883"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-884"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">9.9.3 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-885"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-886"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-887"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.9.4 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--lang=</span><var>catalogname</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dlang_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-888"></a>Specify the &lsquo;<samp><span class="samp">Language</span></samp>&rsquo; field to be used in the header entry. See
-<a href="#Header-Entry">Header Entry</a> for the meaning of this field. Note: The
-&lsquo;<samp><span class="samp">Language-Team</span></samp>&rsquo; and &lsquo;<samp><span class="samp">Plural-Forms</span></samp>&rsquo; fields are not set by this
-option.
-
- <br><dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-889"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-890"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-891"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-892"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-893"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-894"></a>Do not write &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines.
-
- <br><dt>&lsquo;<samp><span class="samp">--add-location</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-895"></a>Generate &lsquo;<samp><span class="samp">#: </span><var>filename</var><span class="samp">:</span><var>line</var></samp>&rsquo; lines (default).
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-896"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-897"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-898"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-899"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-900"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-901"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-902"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-903"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-904"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- <br><dt>&lsquo;<samp><span class="samp">-F</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-by-file</span></samp>&rsquo;<dd><a name="index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-905"></a><a name="index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-906"></a>Sort output by file location.
-
- </dl>
-
-<h4 class="subsection">9.9.5 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-907"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-908"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-909"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-910"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="msgexec-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Colorizing">Colorizing</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgen-Invocation">msgen Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.10 Invoking the <code>msgexec</code> Program</h3>
-
- <p><a name="index-msgexec-911"></a><a name="index-g_t_0040code_007bmsgexec_007d-program_002c-usage-912"></a>
-<pre class="example"> msgexec [<var>option</var>] <var>command</var> [<var>command-option</var>]
-</pre>
- <p><a name="index-apply-command-to-all-translations-in-a-catalog-913"></a>The <code>msgexec</code> program applies a command to all translations of a
-translation catalog.
-The <var>command</var> can be any program that reads a translation from standard
-input. It is invoked once for each translation. Its output becomes
-msgexec's output. <code>msgexec</code>'s return code is the maximum return code
-across all invocations.
-
- <p><a name="index-g_t_0040code_007bxargs_007d_002c-and-output-from-_0040code_007bmsgexec_007d-914"></a>A special builtin command called &lsquo;<samp><span class="samp">0</span></samp>&rsquo; outputs the translation, followed
-by a null byte. The output of &lsquo;<samp><span class="samp">msgexec 0</span></samp>&rsquo; is suitable as input for
-&lsquo;<samp><span class="samp">xargs -0</span></samp>&rsquo;.
-
- <p><a name="index-MSGEXEC_005fMSGCTXT_0040r_007b_002c-environment-variable_007d-915"></a><a name="index-MSGEXEC_005fMSGID_0040r_007b_002c-environment-variable_007d-916"></a><a name="index-MSGEXEC_005fLOCATION_0040r_007b_002c-environment-variable_007d-917"></a>During each <var>command</var> invocation, the environment variable
-<code>MSGEXEC_MSGID</code> is bound to the message's msgid, and the environment
-variable <code>MSGEXEC_LOCATION</code> is bound to the location in the PO file
-of the message. If the message has a context, the environment variable
-<code>MSGEXEC_MSGCTXT</code> is bound to the message's msgctxt, otherwise it is
-unbound.
-
- <p><a name="index-catalog-encoding-and-_0040code_007bmsgexec_007d-output-918"></a>Note: It is your responsibility to ensure that the <var>command</var> can cope
-with input encoded in the translation catalog's encoding. If the
-<var>command</var> wants input in a particular encoding, you can in a first step
-convert the translation catalog to that encoding using the &lsquo;<samp><span class="samp">msgconv</span></samp>&rsquo;
-program, before invoking &lsquo;<samp><span class="samp">msgexec</span></samp>&rsquo;. If the <var>command</var> wants input
-in the locale's encoding, but you want to avoid the locale's encoding, then
-you can first convert the translation catalog to UTF-8 using the
-&lsquo;<samp><span class="samp">msgconv</span></samp>&rsquo; program and then make &lsquo;<samp><span class="samp">msgexec</span></samp>&rsquo; work in an UTF-8
-locale, by using the <code>LC_ALL</code> environment variable.
-
-<h4 class="subsection">9.10.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-i </span><var>inputfile</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--input=</span><var>inputfile</var></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-919"></a><a name="index-g_t_002d_002dinput_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-920"></a>Input PO file.
-
- <br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-921"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-922"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If no <var>inputfile</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">9.10.2 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-923"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-924"></a>Assume the input file is a Java ResourceBundle in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-925"></a>Assume the input file is a NeXTstep/GNUstep localized resource file in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">9.10.3 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-926"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-927"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-928"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-929"></a>Output version information and exit.
-
- </dl>
-
-<div class="node">
-<a name="Colorizing"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#libgettextpo">libgettextpo</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgexec-Invocation">msgexec Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.11 Highlighting parts of PO files</h3>
-
- <p>Translators are usually only interested in seeing the untranslated and
-fuzzy messages of a PO file. Also, when a message is set fuzzy because
-the msgid changed, they want to see the differences between the previous
-msgid and the current one (especially if the msgid is long and only few
-words in it have changed). Finally, it's always welcome to highlight the
-different sections of a message in a PO file (comments, msgid, msgstr, etc.).
-
- <p>Such highlighting is possible through the <code>msgcat</code> options
-&lsquo;<samp><span class="samp">--color</span></samp>&rsquo; and &lsquo;<samp><span class="samp">--style</span></samp>&rsquo;.
-
-<ul class="menu">
-<li><a accesskey="1" href="#The-_002d_002dcolor-option">The --color option</a>: Triggering colorized output
-<li><a accesskey="2" href="#The-TERM-variable">The TERM variable</a>: The environment variable <code>TERM</code>
-<li><a accesskey="3" href="#The-_002d_002dstyle-option">The --style option</a>: The <code>--style</code> option
-<li><a accesskey="4" href="#Style-rules">Style rules</a>: Style rules for PO files
-<li><a accesskey="5" href="#Customizing-less">Customizing less</a>: Customizing <code>less</code> for viewing PO files
-</ul>
-
-<div class="node">
-<a name="The---color-option"></a>
-<a name="The-_002d_002dcolor-option"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#The-TERM-variable">The TERM variable</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Colorizing">Colorizing</a>
-
-</div>
-
-<h4 class="subsection">9.11.1 The <code>--color</code> option</h4>
-
- <p><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-930"></a>The &lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo; option specifies under which conditions
-colorized output should be generated. The <var>when</var> part can be one of
-the following:
-
- <dl>
-<dt><code>always</code><dt><code>yes</code><dd>The output will be colorized.
-
- <br><dt><code>never</code><dt><code>no</code><dd>The output will not be colorized.
-
- <br><dt><code>auto</code><dt><code>tty</code><dd>The output will be colorized if the output device is a tty, i.e. when the
-output goes directly to a text screen or terminal emulator window.
-
- <br><dt><code>html</code><dd>The output will be colorized and be in HTML format.
-</dl>
-
-<p class="noindent">&lsquo;<samp><span class="samp">--color</span></samp>&rsquo; is equivalent to &lsquo;<samp><span class="samp">--color=yes</span></samp>&rsquo;. The default is
-&lsquo;<samp><span class="samp">--color=auto</span></samp>&rsquo;.
-
- <p>Thus, a command like &lsquo;<samp><span class="samp">msgcat vi.po</span></samp>&rsquo; will produce colorized output
-when called by itself in a command window. Whereas in a pipe, such as
-&lsquo;<samp><span class="samp">msgcat vi.po | less -R</span></samp>&rsquo;, it will not produce colorized output. To
-get colorized output in this situation nevertheless, use the command
-&lsquo;<samp><span class="samp">msgcat --color vi.po | less -R</span></samp>&rsquo;.
-
- <p>The &lsquo;<samp><span class="samp">--color=html</span></samp>&rsquo; option will produce output that can be viewed in
-a browser. This can be useful, for example, for Indic languages,
-because the renderic of Indic scripts in browser is usually better than
-in terminal emulators.
-
- <p>Note that the output produced with the <code>--color</code> option is <em>not</em>
-a valid PO file in itself. It contains additional terminal-specific escape
-sequences or HTML tags. A PO file reader will give a syntax error when
-confronted with such content. Except for the &lsquo;<samp><span class="samp">--color=html</span></samp>&rsquo; case,
-you therefore normally don't need to save output produced with the
-<code>--color</code> option in a file.
-
-<div class="node">
-<a name="The-TERM-variable"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#The-_002d_002dstyle-option">The --style option</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#The-_002d_002dcolor-option">The --color option</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Colorizing">Colorizing</a>
-
-</div>
-
-<h4 class="subsection">9.11.2 The environment variable <code>TERM</code></h4>
-
- <p><a name="index-TERM_0040r_007b_002c-environment-variable_007d-931"></a>The environment variable <code>TERM</code> contains a identifier for the text
-window's capabilities. You can get a detailed list of these cababilities
-by using the &lsquo;<samp><span class="samp">infocmp</span></samp>&rsquo; command, using &lsquo;<samp><span class="samp">man 5 terminfo</span></samp>&rsquo; as a
-reference.
-
- <p>When producing text with embedded color directives, <code>msgcat</code> looks
-at the <code>TERM</code> variable. Text windows today typically support at least
-8 colors. Often, however, the text window supports 16 or more colors,
-even though the <code>TERM</code> variable is set to a identifier denoting only
-8 supported colors. It can be worth setting the <code>TERM</code> variable to
-a different value in these cases:
-
- <dl>
-<dt><code>xterm</code><dd><code>xterm</code> is in most cases built with support for 16 colors. It can also
-be built with support for 88 or 256 colors (but not both). You can try to
-set <code>TERM</code> to either <code>xterm-16color</code>, <code>xterm-88color</code>, or
-<code>xterm-256color</code>.
-
- <br><dt><code>rxvt</code><dd><code>rxvt</code> is often built with support for 16 colors. You can try to set
-<code>TERM</code> to <code>rxvt-16color</code>.
-
- <br><dt><code>konsole</code><dd><code>konsole</code> too is often built with support for 16 colors. You can try to
-set <code>TERM</code> to <code>konsole-16color</code> or <code>xterm-16color</code>.
-</dl>
-
- <p>After setting <code>TERM</code>, you can verify it by invoking
-&lsquo;<samp><span class="samp">msgcat --color=test</span></samp>&rsquo; and seeing whether the output looks like a
-reasonable color map.
-
-<div class="node">
-<a name="The---style-option"></a>
-<a name="The-_002d_002dstyle-option"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Style-rules">Style rules</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#The-TERM-variable">The TERM variable</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Colorizing">Colorizing</a>
-
-</div>
-
-<h4 class="subsection">9.11.3 The <code>--style</code> option</h4>
-
- <p><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-932"></a>The &lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo; option specifies the style file to use
-when colorizing. It has an effect only when the <code>--color</code> option is
-effective.
-
- <p><a name="index-PO_005fSTYLE_0040r_007b_002c-environment-variable_007d-933"></a>If the <code>--style</code> option is not specified, the environment variable
-<code>PO_STYLE</code> is considered. It is meant to point to the user's
-preferred style for PO files.
-
- <p>The default style file is <samp><span class="file">$prefix/share/gettext/styles/po-default.css</span></samp>,
-where <code>$prefix</code> is the installation location.
-
- <p>A few style files are predefined:
- <dl>
-<dt><samp><span class="file">po-vim.css</span></samp><dd>This style imitates the look used by vim 7.
-
- <br><dt><samp><span class="file">po-emacs-x.css</span></samp><dd>This style imitates the look used by GNU Emacs 21 and 22 in an X11 window.
-
- <br><dt><samp><span class="file">po-emacs-xterm.css</span></samp><dt><samp><span class="file">po-emacs-xterm16.css</span></samp><dt><samp><span class="file">po-emacs-xterm256.css</span></samp><dd>This style imitates the look used by GNU Emacs 22 in a terminal of type
-&lsquo;<samp><span class="samp">xterm</span></samp>&rsquo; (8 colors) or &lsquo;<samp><span class="samp">xterm-16color</span></samp>&rsquo; (16 colors) or
-&lsquo;<samp><span class="samp">xterm-256color</span></samp>&rsquo; (256 colors), respectively.
-</dl>
-
-<p class="noindent">You can use these styles without specifying a directory. They are actually
-located in <samp><span class="file">$prefix/share/gettext/styles/</span></samp>, where <code>$prefix</code> is the
-installation location.
-
- <p>You can also design your own styles. This is described in the next section.
-
-<div class="node">
-<a name="Style-rules"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Customizing-less">Customizing less</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#The-_002d_002dstyle-option">The --style option</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Colorizing">Colorizing</a>
-
-</div>
-
-<h4 class="subsection">9.11.4 Style rules for PO files</h4>
-
- <p>The same style file can be used for styling of a PO file, for terminal
-output and for HTML output. It is written in CSS (Cascading Style Sheet)
-syntax. See <a href="http://www.w3.org/TR/css2/cover.html">http://www.w3.org/TR/css2/cover.html</a> for a formal
-definition of CSS. Many HTML authoring tutorials also contain explanations
-of CSS.
-
- <p>In the case of HTML output, the style file is embedded in the HTML output.
-In the case of text output, the style file is interpreted by the
-<code>msgcat</code> program. This means, in particular, that when
-<code>@import</code> is used with relative file names, the file names are
-
- <ul>
-<li>relative to the resulting HTML file, in the case of HTML output,
-
- <li>relative to the style sheet containing the <code>@import</code>, in the case of
-text output. (Actually, <code>@import</code>s are not yet supported in this case,
-due to a limitation in <code>libcroco</code>.)
-</ul>
-
- <p>CSS rules are built up from selectors and declarations. The declarations
-specify graphical properties; the selectors specify specify when they apply.
-
- <p>In PO files, the following simple selectors (based on "CSS classes", see
-the CSS2 spec, section 5.8.3) are supported.
-
- <ul>
-<li>Selectors that apply to entire messages:
-
- <dl>
-<dt><code>.header</code><dd>This matches the header entry of a PO file.
-
- <br><dt><code>.translated</code><dd>This matches a translated message.
-
- <br><dt><code>.untranslated</code><dd>This matches an untranslated message (i.e. a message with empty translation).
-
- <br><dt><code>.fuzzy</code><dd>This matches a fuzzy message (i.e. a message which has a translation that
-needs review by the translator).
-
- <br><dt><code>.obsolete</code><dd>This matches an obsolete message (i.e. a message that was translated but is
-not needed by the current POT file any more).
-</dl>
-
- <li>Selectors that apply to parts of a message in PO syntax. Recall the general
-structure of a message in PO syntax:
-
- <pre class="example"> <var>white-space</var>
- # <var>translator-comments</var>
- #. <var>extracted-comments</var>
- #: <var>reference</var>...
- #, <var>flag</var>...
- #| msgid <var>previous-untranslated-string</var>
- msgid <var>untranslated-string</var>
- msgstr <var>translated-string</var>
-</pre>
- <dl>
-<dt><code>.comment</code><dd>This matches all comments (translator comments, extracted comments,
-source file reference comments, flag comments, previous message comments,
-as well as the entire obsolete messages).
-
- <br><dt><code>.translator-comment</code><dd>This matches the translator comments.
-
- <br><dt><code>.extracted-comment</code><dd>This matches the extracted comments, i.e. the comments placed by the
-programmer at the attention of the translator.
-
- <br><dt><code>.reference-comment</code><dd>This matches the source file reference comments (entire lines).
-
- <br><dt><code>.reference</code><dd>This matches the individual source file references inside the source file
-reference comment lines.
-
- <br><dt><code>.flag-comment</code><dd>This matches the flag comment lines (entire lines).
-
- <br><dt><code>.flag</code><dd>This matches the individual flags inside flag comment lines.
-
- <br><dt><code>.fuzzy-flag</code><dd>This matches the `fuzzy' flag inside flag comment lines.
-
- <br><dt><code>.previous-comment</code><dd>This matches the comments containing the previous untranslated string (entire
-lines).
-
- <br><dt><code>.previous</code><dd>This matches the previous untranslated string including the string delimiters,
-the associated keywords (<code>msgid</code> etc.) and the spaces between them.
-
- <br><dt><code>.msgid</code><dd>This matches the untranslated string including the string delimiters,
-the associated keywords (<code>msgid</code> etc.) and the spaces between them.
-
- <br><dt><code>.msgstr</code><dd>This matches the translated string including the string delimiters,
-the associated keywords (<code>msgstr</code> etc.) and the spaces between them.
-
- <br><dt><code>.keyword</code><dd>This matches the keywords (<code>msgid</code>, <code>msgstr</code>, etc.).
-
- <br><dt><code>.string</code><dd>This matches strings, including the string delimiters (double quotes).
-</dl>
-
- <li>Selectors that apply to parts of strings:
-
- <dl>
-<dt><code>.text</code><dd>This matches the entire contents of a string (excluding the string delimiters,
-i.e. the double quotes).
-
- <br><dt><code>.escape-sequence</code><dd>This matches an escape sequence (starting with a backslash).
-
- <br><dt><code>.format-directive</code><dd>This matches a format string directive (starting with a &lsquo;<samp><span class="samp">%</span></samp>&rsquo; sign in the
-case of most programming languages, with a &lsquo;<samp><span class="samp">{</span></samp>&rsquo; in the case of
-<code>java-format</code> and <code>csharp-format</code>, with a &lsquo;<samp><span class="samp">~</span></samp>&rsquo; in the case of
-<code>lisp-format</code> and <code>scheme-format</code>, or with &lsquo;<samp><span class="samp">$</span></samp>&rsquo; in the case of
-<code>sh-format</code>).
-
- <br><dt><code>.invalid-format-directive</code><dd>This matches an invalid format string directive.
-
- <br><dt><code>.added</code><dd>In an untranslated string, this matches a part of the string that was not
-present in the previous untranslated string. (Not yet implemented in this
-release.)
-
- <br><dt><code>.changed</code><dd>In an untranslated string or in a previous untranslated string, this matches
-a part of the string that is changed or replaced. (Not yet implemented in
-this release.)
-
- <br><dt><code>.removed</code><dd>In a previous untranslated string, this matches a part of the string that
-is not present in the current untranslated string. (Not yet implemented in
-this release.)
-</dl>
- </ul>
-
- <p>These selectors can be combined to hierarchical selectors. For example,
-
-<pre class="smallexample"> .msgstr .invalid-format-directive { color: red; }
-</pre>
- <p class="noindent">will highlight the invalid format directives in the translated strings.
-
- <p>In text mode, pseudo-classes (CSS2 spec, section 5.11) and pseudo-elements
-(CSS2 spec, section 5.12) are not supported.
-
- <p>The declarations in HTML mode are not limited; any graphical attribute
-supported by the browsers can be used.
-
- <p>The declarations in text mode are limited to the following properties. Other
-properties will be silently ignored.
-
- <dl>
-<dt><code>color</code> (CSS2 spec, section 14.1)<dt><code>background-color</code> (CSS2 spec, section 14.2.1)<dd>These properties is supported. Colors will be adjusted to match the terminal's
-capabilities. Note that many terminals support only 8 colors.
-
- <br><dt><code>font-weight</code> (CSS2 spec, section 15.2.3)<dd>This property is supported, but most terminals can only render two different
-weights: <code>normal</code> and <code>bold</code>. Values &gt;= 600 are rendered as
-<code>bold</code>.
-
- <br><dt><code>font-style</code> (CSS2 spec, section 15.2.3)<dd>This property is supported. The values <code>italic</code> and <code>oblique</code> are
-rendered the same way.
-
- <br><dt><code>text-decoration</code> (CSS2 spec, section 16.3.1)<dd>This property is supported, limited to the values <code>none</code> and
-<code>underline</code>.
-</dl>
-
-<div class="node">
-<a name="Customizing-less"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Style-rules">Style rules</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Colorizing">Colorizing</a>
-
-</div>
-
-<h4 class="subsection">9.11.5 Customizing <code>less</code> for viewing PO files</h4>
-
- <p>The &lsquo;<samp><span class="samp">less</span></samp>&rsquo; program is a popular text file browser for use in a text
-screen or terminal emulator. It also supports text with embedded escape
-sequences for colors and text decorations.
-
- <p>You can use <code>less</code> to view a PO file like this (assuming an UTF-8
-environment):
-
-<pre class="smallexample"> msgcat --to-code=UTF-8 --color xyz.po | less -R
-</pre>
- <p>You can simplify this to this simple command:
-
-<pre class="smallexample"> less xyz.po
-</pre>
- <p class="noindent">after these three preparations:
-
- <ol type=1 start=1>
-<li>Add the options &lsquo;<samp><span class="samp">-R</span></samp>&rsquo; and &lsquo;<samp><span class="samp">-f</span></samp>&rsquo; to the <code>LESS</code> environment
-variable. In sh shells:
- <pre class="smallexample"> $ LESS="$LESS -R -f"
- $ export LESS
-</pre>
- <li>If your system does not already have the <samp><span class="file">lessopen.sh</span></samp> and
-<samp><span class="file">lessclose.sh</span></samp> scripts, create them and set the <code>LESSOPEN</code> and
-<code>LESSCLOSE</code> environment variables, as indicated in the manual page
-(&lsquo;<samp><span class="samp">man less</span></samp>&rsquo;).
-
- <li>Add to <samp><span class="file">lessopen.sh</span></samp> a piece of script that recognizes PO files
-through their file extension and invokes <code>msgcat</code> on them, producing
-a temporary file. Like this:
-
- <pre class="smallexample"> case "$1" in
- *.po)
- tmpfile=`mktemp "${TMPDIR-/tmp}/less.XXXXXX"`
- msgcat --to-code=UTF-8 --color "$1" &gt; "$tmpfile"
- echo "$tmpfile"
- exit 0
- ;;
- esac
-</pre>
- </ol>
-
-<div class="node">
-<a name="libgettextpo"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Colorizing">Colorizing</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Manipulating">Manipulating</a>
-
-</div>
-
-<h3 class="section">9.12 Writing your own programs that process PO files</h3>
-
- <p>For the tasks for which a combination of &lsquo;<samp><span class="samp">msgattrib</span></samp>&rsquo;, &lsquo;<samp><span class="samp">msgcat</span></samp>&rsquo; etc.
-is not sufficient, a set of C functions is provided in a library, to make it
-possible to process PO files in your own programs. When you use this library,
-you don't need to write routines to parse the PO file; instead, you retrieve
-a pointer in memory to each of messages contained in the PO file. Functions
-for writing PO files are not provided at this time.
-
- <p>The functions are declared in the header file &lsquo;<samp><span class="samp">&lt;gettext-po.h&gt;</span></samp>&rsquo;, and are
-defined in a library called &lsquo;<samp><span class="samp">libgettextpo</span></samp>&rsquo;.
-
-<div class="defun">
-&mdash; Data Type: <b>po_file_t</b><var><a name="index-po_005ffile_005ft-934"></a></var><br>
-<blockquote><p>This is a pointer type that refers to the contents of a PO file, after it has
-been read into memory.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Data Type: <b>po_message_iterator_t</b><var><a name="index-po_005fmessage_005fiterator_005ft-935"></a></var><br>
-<blockquote><p>This is a pointer type that refers to an iterator that produces a sequence of
-messages.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Data Type: <b>po_message_t</b><var><a name="index-po_005fmessage_005ft-936"></a></var><br>
-<blockquote><p>This is a pointer type that refers to a message of a PO file, including its
-translation.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: po_file_t <b>po_file_read</b> (<var>const char *filename</var>)<var><a name="index-po_005ffile_005fread-937"></a></var><br>
-<blockquote><p>The <code>po_file_read</code> function reads a PO file into memory. The file name
-is given as argument. The return value is a handle to the PO file's contents,
-valid until <code>po_file_free</code> is called on it. In case of error, the return
-value is <code>NULL</code>, and <code>errno</code> is set.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: void <b>po_file_free</b> (<var>po_file_t file</var>)<var><a name="index-po_005ffile_005ffree-938"></a></var><br>
-<blockquote><p>The <code>po_file_free</code> function frees a PO file's contents from memory,
-including all messages that are only implicitly accessible through iterators.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: const char * const * <b>po_file_domains</b> (<var>po_file_t file</var>)<var><a name="index-po_005ffile_005fdomains-939"></a></var><br>
-<blockquote><p>The <code>po_file_domains</code> function returns the domains for which the given
-PO file has messages. The return value is a <code>NULL</code> terminated array
-which is valid as long as the <var>file</var> handle is valid. For PO files which
-contain no &lsquo;<samp><span class="samp">domain</span></samp>&rsquo; directive, the return value contains only one domain,
-namely the default domain <code>"messages"</code>.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: po_message_iterator_t <b>po_message_iterator</b> (<var>po_file_t file, const char *domain</var>)<var><a name="index-po_005fmessage_005fiterator-940"></a></var><br>
-<blockquote><p>The <code>po_message_iterator</code> returns an iterator that will produce the
-messages of <var>file</var> that belong to the given <var>domain</var>. If <var>domain</var>
-is <code>NULL</code>, the default domain is used instead. To list the messages,
-use the function <code>po_next_message</code> repeatedly.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: void <b>po_message_iterator_free</b> (<var>po_message_iterator_t iterator</var>)<var><a name="index-po_005fmessage_005fiterator_005ffree-941"></a></var><br>
-<blockquote><p>The <code>po_message_iterator_free</code> function frees an iterator previously
-allocated through the <code>po_message_iterator</code> function.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: po_message_t <b>po_next_message</b> (<var>po_message_iterator_t iterator</var>)<var><a name="index-po_005fnext_005fmessage-942"></a></var><br>
-<blockquote><p>The <code>po_next_message</code> function returns the next message from
-<var>iterator</var> and advances the iterator. It returns <code>NULL</code> when the
-iterator has reached the end of its message list.
-</p></blockquote></div>
-
- <p>The following functions returns details of a <code>po_message_t</code>. Recall
-that the results are valid as long as the <var>file</var> handle is valid.
-
-<div class="defun">
-&mdash; Function: const char * <b>po_message_msgid</b> (<var>po_message_t message</var>)<var><a name="index-po_005fmessage_005fmsgid-943"></a></var><br>
-<blockquote><p>The <code>po_message_msgid</code> function returns the <code>msgid</code> (untranslated
-English string) of a message. This is guaranteed to be non-<code>NULL</code>.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: const char * <b>po_message_msgid_plural</b> (<var>po_message_t message</var>)<var><a name="index-po_005fmessage_005fmsgid_005fplural-944"></a></var><br>
-<blockquote><p>The <code>po_message_msgid_plural</code> function returns the <code>msgid_plural</code>
-(untranslated English plural string) of a message with plurals, or <code>NULL</code>
-for a message without plural.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: const char * <b>po_message_msgstr</b> (<var>po_message_t message</var>)<var><a name="index-po_005fmessage_005fmsgstr-945"></a></var><br>
-<blockquote><p>The <code>po_message_msgstr</code> function returns the <code>msgstr</code> (translation)
-of a message. For an untranslated message, the return value is an empty
-string.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: const char * <b>po_message_msgstr_plural</b> (<var>po_message_t message, int index</var>)<var><a name="index-po_005fmessage_005fmsgstr_005fplural-946"></a></var><br>
-<blockquote><p>The <code>po_message_msgstr_plural</code> function returns the
-<code>msgstr[</code><var>index</var><code>]</code> of a message with plurals, or <code>NULL</code> when
-the <var>index</var> is out of range or for a message without plural.
-</p></blockquote></div>
-
- <p>Here is an example code how these functions can be used.
-
-<pre class="example"> const char *filename = ...;
- po_file_t file = po_file_read (filename);
-
- if (file == NULL)
- error (EXIT_FAILURE, errno, "couldn't open the PO file %s", filename);
- {
- const char * const *domains = po_file_domains (file);
- const char * const *domainp;
-
- for (domainp = domains; *domainp; domainp++)
- {
- const char *domain = *domainp;
- po_message_iterator_t iterator = po_message_iterator (file, domain);
-
- for (;;)
- {
- po_message_t *message = po_next_message (iterator);
-
- if (message == NULL)
- break;
- {
- const char *msgid = po_message_msgid (message);
- const char *msgstr = po_message_msgstr (message);
-
- ...
- }
- }
- po_message_iterator_free (iterator);
- }
- }
- po_file_free (file);
-</pre>
- <div class="node">
-<a name="Binaries"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Programmers">Programmers</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Manipulating">Manipulating</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">10 Producing Binary MO Files</h2>
-
-<!-- FIXME: Rewrite. -->
-<ul class="menu">
-<li><a accesskey="1" href="#msgfmt-Invocation">msgfmt Invocation</a>: Invoking the <code>msgfmt</code> Program
-<li><a accesskey="2" href="#msgunfmt-Invocation">msgunfmt Invocation</a>: Invoking the <code>msgunfmt</code> Program
-<li><a accesskey="3" href="#MO-Files">MO Files</a>: The Format of GNU MO Files
-</ul>
-
-<div class="node">
-<a name="msgfmt-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#msgunfmt-Invocation">msgunfmt Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Binaries">Binaries</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Binaries">Binaries</a>
-
-</div>
-
-<h3 class="section">10.1 Invoking the <code>msgfmt</code> Program</h3>
-
- <p><a name="index-msgfmt-947"></a><a name="index-g_t_0040code_007bmsgfmt_007d-program_002c-usage-948"></a>
-<pre class="example"> msgfmt [<var>option</var>] <var>filename</var>.po ...
-</pre>
- <p><a name="index-generate-binary-message-catalog-from-PO-file-949"></a>The <code>msgfmt</code> programs generates a binary message catalog from a textual
-translation description.
-
-<h4 class="subsection">10.1.1 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>filename</var><span class="samp">.po ...</span></samp>&rsquo;
-<br><dt>&lsquo;<samp><span class="samp">-D </span><var>directory</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--directory=</span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-950"></a><a name="index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-951"></a>Add <var>directory</var> to the list of directories. Source files are
-searched relative to this list of directories. The resulting <samp><span class="file">.po</span></samp>
-file will be written relative to the current directory, though.
-
- </dl>
-
- <p>If an input file is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">10.1.2 Operation mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-j</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--java</span></samp>&rsquo;<dd><a name="index-g_t_002dj_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-952"></a><a name="index-g_t_002d_002djava_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-953"></a><a name="index-Java-mode_002c-and-_0040code_007bmsgfmt_007d-program-954"></a>Java mode: generate a Java <code>ResourceBundle</code> class.
-
- <br><dt>&lsquo;<samp><span class="samp">--java2</span></samp>&rsquo;<dd><a name="index-g_t_002d_002djava2_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-955"></a>Like &ndash;java, and assume Java2 (JDK 1.2 or higher).
-
- <br><dt>&lsquo;<samp><span class="samp">--csharp</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcsharp_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-956"></a><a name="index-C_0023-mode_002c-and-_0040code_007bmsgfmt_007d-program-957"></a>C# mode: generate a .NET .dll file containing a subclass of
-<code>GettextResourceSet</code>.
-
- <br><dt>&lsquo;<samp><span class="samp">--csharp-resources</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcsharp_002dresources_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-958"></a><a name="index-C_0023-resources-mode_002c-and-_0040code_007bmsgfmt_007d-program-959"></a>C# resources mode: generate a .NET <samp><span class="file">.resources</span></samp> file.
-
- <br><dt>&lsquo;<samp><span class="samp">--tcl</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dtcl_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-960"></a><a name="index-Tcl-mode_002c-and-_0040code_007bmsgfmt_007d-program-961"></a>Tcl mode: generate a tcl/msgcat <samp><span class="file">.msg</span></samp> file.
-
- <br><dt>&lsquo;<samp><span class="samp">--qt</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dqt_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-962"></a><a name="index-Qt-mode_002c-and-_0040code_007bmsgfmt_007d-program-963"></a>Qt mode: generate a Qt <samp><span class="file">.qm</span></samp> file.
-
- </dl>
-
-<h4 class="subsection">10.1.3 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-964"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-965"></a>Write output to specified file.
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-966"></a>Direct the program to work strictly following the Uniforum/Sun
-implementation. Currently this only affects the naming of the output
-file. If this option is not given the name of the output file is the
-same as the domain name. If the strict Uniforum mode is enabled the
-suffix <samp><span class="file">.mo</span></samp> is added to the file name if it is not already
-present.
-
- <p>We find this behaviour of Sun's implementation rather silly and so by
-default this mode is <em>not</em> selected.
-
- </dl>
-
- <p>If the output <var>file</var> is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, output is written to standard output.
-
-<h4 class="subsection">10.1.4 Output file location in Java mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-r </span><var>resource</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--resource=</span><var>resource</var></samp>&rsquo;<dd><a name="index-g_t_002dr_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-967"></a><a name="index-g_t_002d_002dresource_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-968"></a>Specify the resource name.
-
- <br><dt>&lsquo;<samp><span class="samp">-l </span><var>locale</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>locale</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-969"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-970"></a>Specify the locale name, either a language specification of the form <var>ll</var>
-or a combined language and country specification of the form <var>ll_CC</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-d </span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-971"></a>Specify the base directory of classes directory hierarchy.
-
- </dl>
-
- <p>The class name is determined by appending the locale name to the resource name,
-separated with an underscore. The &lsquo;<samp><span class="samp">-d</span></samp>&rsquo; option is mandatory. The class
-is written under the specified directory.
-
-<h4 class="subsection">10.1.5 Output file location in C# mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-r </span><var>resource</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--resource=</span><var>resource</var></samp>&rsquo;<dd><a name="index-g_t_002dr_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-972"></a><a name="index-g_t_002d_002dresource_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-973"></a>Specify the resource name.
-
- <br><dt>&lsquo;<samp><span class="samp">-l </span><var>locale</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>locale</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-974"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-975"></a>Specify the locale name, either a language specification of the form <var>ll</var>
-or a combined language and country specification of the form <var>ll_CC</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-d </span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-976"></a>Specify the base directory for locale dependent <samp><span class="file">.dll</span></samp> files.
-
- </dl>
-
- <p>The &lsquo;<samp><span class="samp">-l</span></samp>&rsquo; and &lsquo;<samp><span class="samp">-d</span></samp>&rsquo; options are mandatory. The <samp><span class="file">.dll</span></samp> file is
-written in a subdirectory of the specified directory whose name depends on the
-locale.
-
-<h4 class="subsection">10.1.6 Output file location in Tcl mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-l </span><var>locale</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>locale</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-977"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-978"></a>Specify the locale name, either a language specification of the form <var>ll</var>
-or a combined language and country specification of the form <var>ll_CC</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-d </span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-979"></a>Specify the base directory of <samp><span class="file">.msg</span></samp> message catalogs.
-
- </dl>
-
- <p>The &lsquo;<samp><span class="samp">-l</span></samp>&rsquo; and &lsquo;<samp><span class="samp">-d</span></samp>&rsquo; options are mandatory. The <samp><span class="file">.msg</span></samp> file is
-written in the specified directory.
-
-<h4 class="subsection">10.1.7 Input file syntax</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-P</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-input</span></samp>&rsquo;<dd><a name="index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-980"></a><a name="index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-981"></a>Assume the input files are Java ResourceBundles in Java <code>.properties</code>
-syntax, not in PO file syntax.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-input</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-982"></a>Assume the input files are NeXTstep/GNUstep localized resource files in
-<code>.strings</code> syntax, not in PO file syntax.
-
- </dl>
-
-<h4 class="subsection">10.1.8 Input file interpretation</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-c</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--check</span></samp>&rsquo;<dd><a name="index-g_t_002dc_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-983"></a><a name="index-g_t_002d_002dcheck_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-984"></a>Perform all the checks implied by <code>--check-format</code>, <code>--check-header</code>,
-<code>--check-domain</code>.
-
- <br><dt>&lsquo;<samp><span class="samp">--check-format</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcheck_002dformat_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-985"></a><a name="index-check-format-strings-986"></a>Check language dependent format strings.
-
- <p>If the string represents a format string used in a
-<code>printf</code>-like function both strings should have the same number of
-&lsquo;<samp><span class="samp">%</span></samp>&rsquo; format specifiers, with matching types. If the flag
-<code>c-format</code> or <code>possible-c-format</code> appears in the special
-comment &lt;#,&gt; for this entry a check is performed. For example, the
-check will diagnose using &lsquo;<samp><span class="samp">%.*s</span></samp>&rsquo; against &lsquo;<samp><span class="samp">%s</span></samp>&rsquo;, or &lsquo;<samp><span class="samp">%d</span></samp>&rsquo;
-against &lsquo;<samp><span class="samp">%s</span></samp>&rsquo;, or &lsquo;<samp><span class="samp">%d</span></samp>&rsquo; against &lsquo;<samp><span class="samp">%x</span></samp>&rsquo;. It can even handle
-positional parameters.
-
- <p>Normally the <code>xgettext</code> program automatically decides whether a
-string is a format string or not. This algorithm is not perfect,
-though. It might regard a string as a format string though it is not
-used in a <code>printf</code>-like function and so <code>msgfmt</code> might report
-errors where there are none.
-
- <p>To solve this problem the programmer can dictate the decision to the
-<code>xgettext</code> program (see <a href="#c_002dformat">c-format</a>). The translator should not
-consider removing the flag from the &lt;#,&gt; line. This "fix" would be
-reversed again as soon as <code>msgmerge</code> is called the next time.
-
- <br><dt>&lsquo;<samp><span class="samp">--check-header</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcheck_002dheader_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-987"></a>Verify presence and contents of the header entry. See <a href="#Header-Entry">Header Entry</a>,
-for a description of the various fields in the header entry.
-
- <br><dt>&lsquo;<samp><span class="samp">--check-domain</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcheck_002ddomain_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-988"></a>Check for conflicts between domain directives and the <code>--output-file</code>
-option
-
- <br><dt>&lsquo;<samp><span class="samp">-C</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--check-compatibility</span></samp>&rsquo;<dd><a name="index-g_t_002dC_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-989"></a><a name="index-g_t_002d_002dcheck_002dcompatibility_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-990"></a><a name="index-compatibility-with-X_002fOpen-_0040code_007bmsgfmt_007d-991"></a>Check that GNU msgfmt behaves like X/Open msgfmt. This will give an error
-when attempting to use the GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">--check-accelerators[=</span><var>char</var><span class="samp">]</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcheck_002daccelerators_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-992"></a><a name="index-keyboard-accelerator-checking-993"></a><a name="index-menu_002c-keyboard-accelerator-support-994"></a><a name="index-mnemonics-of-menu-entries-995"></a>Check presence of keyboard accelerators for menu items. This is based on
-the convention used in some GUIs that a keyboard accelerator in a menu
-item string is designated by an immediately preceding &lsquo;<samp><span class="samp">&amp;</span></samp>&rsquo; character.
-Sometimes a keyboard accelerator is also called "keyboard mnemonic".
-This check verifies that if the untranslated string has exactly one
-&lsquo;<samp><span class="samp">&amp;</span></samp>&rsquo; character, the translated string has exactly one &lsquo;<samp><span class="samp">&amp;</span></samp>&rsquo; as well.
-If this option is given with a <var>char</var> argument, this <var>char</var> should
-be a non-alphanumeric character and is used as keyboard accelerator mark
-instead of &lsquo;<samp><span class="samp">&amp;</span></samp>&rsquo;.
-
- <br><dt>&lsquo;<samp><span class="samp">-f</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--use-fuzzy</span></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-996"></a><a name="index-g_t_002d_002duse_002dfuzzy_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-997"></a><a name="index-force-use-of-fuzzy-entries-998"></a>Use fuzzy entries in output. Note that using this option is usually wrong,
-because fuzzy messages are exactly those which have not been validated by
-a human translator.
-
- </dl>
-
-<h4 class="subsection">10.1.9 Output details</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-a </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--alignment=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002da_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-999"></a><a name="index-g_t_002d_002dalignment_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1000"></a>Align strings to <var>number</var> bytes (default: 1).
-<!-- Currently the README mentions that this constant could be changed by -->
-<!-- the installer by changing the value in config.h. Should this go away? -->
-
- <br><dt>&lsquo;<samp><span class="samp">--no-hash</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dhash_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1001"></a>Don't include a hash table in the binary file. Lookup will be more expensive
-at run time (binary search instead of hash table lookup).
-
- </dl>
-
-<h4 class="subsection">10.1.10 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1002"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1003"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1004"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1005"></a>Output version information and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">--statistics</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstatistics_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1006"></a>Print statistics about translations. When the option <code>--verbose</code> is used
-in combination with <code>--statistics</code>, the input file name is printed in
-front of the statistics line.
-
- <br><dt>&lsquo;<samp><span class="samp">-v</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--verbose</span></samp>&rsquo;<dd><a name="index-g_t_002dv_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1007"></a><a name="index-g_t_002d_002dverbose_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1008"></a>Increase verbosity level.
-
- </dl>
-
-<div class="node">
-<a name="msgunfmt-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#MO-Files">MO Files</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgfmt-Invocation">msgfmt Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Binaries">Binaries</a>
-
-</div>
-
-<h3 class="section">10.2 Invoking the <code>msgunfmt</code> Program</h3>
-
- <p><a name="index-msgunfmt-1009"></a><a name="index-g_t_0040code_007bmsgunfmt_007d-program_002c-usage-1010"></a>
-<pre class="example"> msgunfmt [<var>option</var>] [<var>file</var>]...
-</pre>
- <p><a name="index-convert-binary-message-catalog-into-PO-file-1011"></a>The <code>msgunfmt</code> program converts a binary message catalog to a
-Uniforum style .po file.
-
-<h4 class="subsection">10.2.1 Operation mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-j</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--java</span></samp>&rsquo;<dd><a name="index-g_t_002dj_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1012"></a><a name="index-g_t_002d_002djava_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1013"></a><a name="index-Java-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1014"></a>Java mode: input is a Java <code>ResourceBundle</code> class.
-
- <br><dt>&lsquo;<samp><span class="samp">--csharp</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcsharp_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1015"></a><a name="index-C_0023-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1016"></a>C# mode: input is a .NET .dll file containing a subclass of
-<code>GettextResourceSet</code>.
-
- <br><dt>&lsquo;<samp><span class="samp">--csharp-resources</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dcsharp_002dresources_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1017"></a><a name="index-C_0023-resources-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1018"></a>C# resources mode: input is a .NET <samp><span class="file">.resources</span></samp> file.
-
- <br><dt>&lsquo;<samp><span class="samp">--tcl</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dtcl_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1019"></a><a name="index-Tcl-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1020"></a>Tcl mode: input is a tcl/msgcat <samp><span class="file">.msg</span></samp> file.
-
- </dl>
-
-<h4 class="subsection">10.2.2 Input file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><var>file</var><span class="samp"> ...</span></samp>&rsquo;<dd>Input .mo files.
-
- </dl>
-
- <p>If no input <var>file</var> is given or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;, standard input is read.
-
-<h4 class="subsection">10.2.3 Input file location in Java mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-r </span><var>resource</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--resource=</span><var>resource</var></samp>&rsquo;<dd><a name="index-g_t_002dr_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1021"></a><a name="index-g_t_002d_002dresource_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1022"></a>Specify the resource name.
-
- <br><dt>&lsquo;<samp><span class="samp">-l </span><var>locale</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>locale</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1023"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1024"></a>Specify the locale name, either a language specification of the form <var>ll</var>
-or a combined language and country specification of the form <var>ll_CC</var>.
-
- </dl>
-
- <p>The class name is determined by appending the locale name to the resource name,
-separated with an underscore. The class is located using the <code>CLASSPATH</code>.
-
-<h4 class="subsection">10.2.4 Input file location in C# mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-r </span><var>resource</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--resource=</span><var>resource</var></samp>&rsquo;<dd><a name="index-g_t_002dr_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1025"></a><a name="index-g_t_002d_002dresource_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1026"></a>Specify the resource name.
-
- <br><dt>&lsquo;<samp><span class="samp">-l </span><var>locale</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>locale</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1027"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1028"></a>Specify the locale name, either a language specification of the form <var>ll</var>
-or a combined language and country specification of the form <var>ll_CC</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-d </span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1029"></a>Specify the base directory for locale dependent <samp><span class="file">.dll</span></samp> files.
-
- </dl>
-
- <p>The &lsquo;<samp><span class="samp">-l</span></samp>&rsquo; and &lsquo;<samp><span class="samp">-d</span></samp>&rsquo; options are mandatory. The <samp><span class="file">.msg</span></samp> file is
-located in a subdirectory of the specified directory whose name depends on the
-locale.
-
-<h4 class="subsection">10.2.5 Input file location in Tcl mode</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-l </span><var>locale</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--locale=</span><var>locale</var></samp>&rsquo;<dd><a name="index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1030"></a><a name="index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1031"></a>Specify the locale name, either a language specification of the form <var>ll</var>
-or a combined language and country specification of the form <var>ll_CC</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">-d </span><var>directory</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1032"></a>Specify the base directory of <samp><span class="file">.msg</span></samp> message catalogs.
-
- </dl>
-
- <p>The &lsquo;<samp><span class="samp">-l</span></samp>&rsquo; and &lsquo;<samp><span class="samp">-d</span></samp>&rsquo; options are mandatory. The <samp><span class="file">.msg</span></samp> file is
-located in the specified directory.
-
-<h4 class="subsection">10.2.6 Output file location</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-o </span><var>file</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--output-file=</span><var>file</var></samp>&rsquo;<dd><a name="index-g_t_002do_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1033"></a><a name="index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1034"></a>Write output to specified file.
-
- </dl>
-
- <p>The results are written to standard output if no output file is specified
-or if it is &lsquo;<samp><span class="samp">-</span></samp>&rsquo;.
-
-<h4 class="subsection">10.2.7 Output details</h4>
-
-<!-- no-escape and -escape omitted on purpose. They are not useful. -->
- <dl>
-<dt>&lsquo;<samp><span class="samp">--color</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--color=</span><var>when</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1035"></a>Specify whether or when to use colors and other text attributes.
-See <a href="#The-_002d_002dcolor-option">The &ndash;color option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--style=</span><var>style_file</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1036"></a>Specify the CSS style rule file to use for <code>--color</code>.
-See <a href="#The-_002d_002dstyle-option">The &ndash;style option</a> for details.
-
- <br><dt>&lsquo;<samp><span class="samp">--force-po</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1037"></a>Always write an output file even if it contains no message.
-
- <br><dt>&lsquo;<samp><span class="samp">-i</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--indent</span></samp>&rsquo;<dd><a name="index-g_t_002di_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1038"></a><a name="index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1039"></a>Write the .po file using indented style.
-
- <br><dt>&lsquo;<samp><span class="samp">--strict</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1040"></a>Write out a strict Uniforum conforming PO file. Note that this
-Uniforum format should be avoided because it doesn't support the
-GNU extensions.
-
- <br><dt>&lsquo;<samp><span class="samp">-p</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--properties-output</span></samp>&rsquo;<dd><a name="index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1041"></a><a name="index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1042"></a>Write out a Java ResourceBundle in Java <code>.properties</code> syntax. Note
-that this file format doesn't support plural forms and silently drops
-obsolete messages.
-
- <br><dt>&lsquo;<samp><span class="samp">--stringtable-output</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1043"></a>Write out a NeXTstep/GNUstep localized resource file in <code>.strings</code> syntax.
-Note that this file format doesn't support plural forms.
-
- <br><dt>&lsquo;<samp><span class="samp">-w </span><var>number</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--width=</span><var>number</var></samp>&rsquo;<dd><a name="index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1044"></a><a name="index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1045"></a>Set the output page width. Long strings in the output files will be
-split across multiple lines in order to ensure that each line's width
-(= number of screen columns) is less or equal to the given <var>number</var>.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-wrap</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1046"></a>Do not break long message lines. Message lines whose width exceeds the
-output page width will not be split into several lines. Only file reference
-lines which are wider than the output page width will be split.
-
- <br><dt>&lsquo;<samp><span class="samp">-s</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--sort-output</span></samp>&rsquo;<dd><a name="index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1047"></a><a name="index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1048"></a><a name="index-sorting-_0040code_007bmsgunfmt_007d-output-1049"></a>Generate sorted output. Note that using this option makes it much harder
-for the translator to understand each message's context.
-
- </dl>
-
-<h4 class="subsection">10.2.8 Informative output</h4>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1050"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1051"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1052"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1053"></a>Output version information and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-v</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--verbose</span></samp>&rsquo;<dd><a name="index-g_t_002dv_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1054"></a><a name="index-g_t_002d_002dverbose_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1055"></a>Increase verbosity level.
-
- </dl>
-
-<div class="node">
-<a name="MO-Files"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#msgunfmt-Invocation">msgunfmt Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Binaries">Binaries</a>
-
-</div>
-
-<h3 class="section">10.3 The Format of GNU MO Files</h3>
-
- <p><a name="index-MO-file_0027s-format-1056"></a><a name="index-file-format_002c-_0040file_007b_002emo_007d-1057"></a>
-The format of the generated MO files is best described by a picture,
-which appears below.
-
- <p><a name="index-magic-signature-of-MO-files-1058"></a>The first two words serve the identification of the file. The magic
-number will always signal GNU MO files. The number is stored in the
-byte order of the generating machine, so the magic number really is
-two numbers: <code>0x950412de</code> and <code>0xde120495</code>.
-
- <p>The second word describes the current revision of the file format,
-composed of a major and a minor revision number. The revision numbers
-ensure that the readers of MO files can distinguish new formats from
-old ones and handle their contents, as far as possible. For now the
-major revision is 0 or 1, and the minor revision is also 0 or 1. More
-revisions might be added in the future. A program seeing an unexpected
-major revision number should stop reading the MO file entirely; whereas
-an unexpected minor revision number means that the file can be read but
-will not reveal its full contents, when parsed by a program that
-supports only smaller minor revision numbers.
-
- <p>The version is kept
-separate from the magic number, instead of using different magic
-numbers for different formats, mainly because <samp><span class="file">/etc/magic</span></samp> is
-not updated often.
-
- <p>Follow a number of pointers to later tables in the file, allowing
-for the extension of the prefix part of MO files without having to
-recompile programs reading them. This might become useful for later
-inserting a few flag bits, indication about the charset used, new
-tables, or other things.
-
- <p>Then, at offset <var>O</var> and offset <var>T</var> in the picture, two tables
-of string descriptors can be found. In both tables, each string
-descriptor uses two 32 bits integers, one for the string length,
-another for the offset of the string in the MO file, counting in bytes
-from the start of the file. The first table contains descriptors
-for the original strings, and is sorted so the original strings
-are in increasing lexicographical order. The second table contains
-descriptors for the translated strings, and is parallel to the first
-table: to find the corresponding translation one has to access the
-array slot in the second array with the same index.
-
- <p>Having the original strings sorted enables the use of simple binary
-search, for when the MO file does not contain an hashing table, or
-for when it is not practical to use the hashing table provided in
-the MO file. This also has another advantage, as the empty string
-in a PO file GNU <code>gettext</code> is usually <em>translated</em> into
-some system information attached to that particular MO file, and the
-empty string necessarily becomes the first in both the original and
-translated tables, making the system information very easy to find.
-
- <p><a name="index-hash-table_002c-inside-MO-files-1059"></a>The size <var>S</var> of the hash table can be zero. In this case, the
-hash table itself is not contained in the MO file. Some people might
-prefer this because a precomputed hashing table takes disk space, and
-does not win <em>that</em> much speed. The hash table contains indices
-to the sorted array of strings in the MO file. Conflict resolution is
-done by double hashing. The precise hashing algorithm used is fairly
-dependent on GNU <code>gettext</code> code, and is not documented here.
-
- <p>As for the strings themselves, they follow the hash file, and each
-is terminated with a &lt;NUL&gt;, and this &lt;NUL&gt; is not counted in
-the length which appears in the string descriptor. The <code>msgfmt</code>
-program has an option selecting the alignment for MO file strings.
-With this option, each string is separately aligned so it starts at
-an offset which is a multiple of the alignment value. On some RISC
-machines, a correct alignment will speed things up.
-
- <p><a name="index-context_002c-in-MO-files-1060"></a>Contexts are stored by storing the concatenation of the context, a
-&lt;EOT&gt; byte, and the original string, instead of the original string.
-
- <p><a name="index-plural-forms_002c-in-MO-files-1061"></a>Plural forms are stored by letting the plural of the original string
-follow the singular of the original string, separated through a
-&lt;NUL&gt; byte. The length which appears in the string descriptor
-includes both. However, only the singular of the original string
-takes part in the hash table lookup. The plural variants of the
-translation are all stored consecutively, separated through a
-&lt;NUL&gt; byte. Here also, the length in the string descriptor
-includes all of them.
-
- <p>Nothing prevents a MO file from having embedded &lt;NUL&gt;s in strings.
-However, the program interface currently used already presumes
-that strings are &lt;NUL&gt; terminated, so embedded &lt;NUL&gt;s are
-somewhat useless. But the MO file format is general enough so other
-interfaces would be later possible, if for example, we ever want to
-implement wide characters right in MO files, where &lt;NUL&gt; bytes may
-accidentally appear. (No, we don't want to have wide characters in MO
-files. They would make the file unnecessarily large, and the
-&lsquo;<samp><span class="samp">wchar_t</span></samp>&rsquo; type being platform dependent, MO files would be
-platform dependent as well.)
-
- <p>This particular issue has been strongly debated in the GNU
-<code>gettext</code> development forum, and it is expectable that MO file
-format will evolve or change over time. It is even possible that many
-formats may later be supported concurrently. But surely, we have to
-start somewhere, and the MO file format described here is a good start.
-Nothing is cast in concrete, and the format may later evolve fairly
-easily, so we should feel comfortable with the current approach.
-
-<pre class="example"> byte
- +------------------------------------------+
- 0 | magic number = 0x950412de |
- | |
- 4 | file format revision = 0 |
- | |
- 8 | number of strings | == N
- | |
- 12 | offset of table with original strings | == O
- | |
- 16 | offset of table with translation strings | == T
- | |
- 20 | size of hashing table | == S
- | |
- 24 | offset of hashing table | == H
- | |
- . .
- . (possibly more entries later) .
- . .
- | |
- O | length &amp; offset 0th string ----------------.
- O + 8 | length &amp; offset 1st string ------------------.
- ... ... | |
- O + ((N-1)*8)| length &amp; offset (N-1)th string | | |
- | | | |
- T | length &amp; offset 0th translation ---------------.
- T + 8 | length &amp; offset 1st translation -----------------.
- ... ... | | | |
- T + ((N-1)*8)| length &amp; offset (N-1)th translation | | | | |
- | | | | | |
- H | start hash table | | | | |
- ... ... | | | |
- H + S * 4 | end hash table | | | | |
- | | | | | |
- | NUL terminated 0th string &lt;----------------' | | |
- | | | | |
- | NUL terminated 1st string &lt;------------------' | |
- | | | |
- ... ... | |
- | | | |
- | NUL terminated 0th translation &lt;---------------' |
- | | |
- | NUL terminated 1st translation &lt;-----------------'
- | |
- ... ...
- | |
- +------------------------------------------+
-</pre>
- <div class="node">
-<a name="Programmers"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Translators">Translators</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Binaries">Binaries</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">11 The Programmer's View</h2>
-
-<!-- FIXME: Reorganize whole chapter. -->
- <p>One aim of the current message catalog implementation provided by
-GNU <code>gettext</code> was to use the system's message catalog handling, if the
-installer wishes to do so. So we perhaps should first take a look at
-the solutions we know about. The people in the POSIX committee did not
-manage to agree on one of the semi-official standards which we'll
-describe below. In fact they couldn't agree on anything, so they decided
-only to include an example of an interface. The major Unix vendors
-are split in the usage of the two most important specifications: X/Open's
-catgets vs. Uniforum's gettext interface. We'll describe them both and
-later explain our solution of this dilemma.
-
-<ul class="menu">
-<li><a accesskey="1" href="#catgets">catgets</a>: About <code>catgets</code>
-<li><a accesskey="2" href="#gettext">gettext</a>: About <code>gettext</code>
-<li><a accesskey="3" href="#Comparison">Comparison</a>: Comparing the two interfaces
-<li><a accesskey="4" href="#Using-libintl_002ea">Using libintl.a</a>: Using libintl.a in own programs
-<li><a accesskey="5" href="#gettext-grok">gettext grok</a>: Being a <code>gettext</code> grok
-<li><a accesskey="6" href="#Temp-Programmers">Temp Programmers</a>: Temporary Notes for the Programmers Chapter
-</ul>
-
-<div class="node">
-<a name="catgets"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gettext">gettext</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Programmers">Programmers</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programmers">Programmers</a>
-
-</div>
-
-<h3 class="section">11.1 About <code>catgets</code></h3>
-
- <p><a name="index-g_t_0040code_007bcatgets_007d_002c-X_002fOpen-specification-1062"></a>
-The <code>catgets</code> implementation is defined in the X/Open Portability
-Guide, Volume 3, XSI Supplementary Definitions, Chapter 5. But the
-process of creating this standard seemed to be too slow for some of
-the Unix vendors so they created their implementations on preliminary
-versions of the standard. Of course this leads again to problems while
-writing platform independent programs: even the usage of <code>catgets</code>
-does not guarantee a unique interface.
-
- <p>Another, personal comment on this that only a bunch of committee members
-could have made this interface. They never really tried to program
-using this interface. It is a fast, memory-saving implementation, an
-user can happily live with it. But programmers hate it (at least I and
-some others do<small class="dots">...</small>)
-
- <p>But we must not forget one point: after all the trouble with transferring
-the rights on Unix(tm) they at last came to X/Open, the very same who
-published this specification. This leads me to making the prediction
-that this interface will be in future Unix standards (e.g. Spec1170) and
-therefore part of all Unix implementation (implementations, which are
-<em>allowed</em> to wear this name).
-
-<ul class="menu">
-<li><a accesskey="1" href="#Interface-to-catgets">Interface to catgets</a>: The interface
-<li><a accesskey="2" href="#Problems-with-catgets">Problems with catgets</a>: Problems with the <code>catgets</code> interface?!
-</ul>
-
-<div class="node">
-<a name="Interface-to-catgets"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Problems-with-catgets">Problems with catgets</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#catgets">catgets</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#catgets">catgets</a>
-
-</div>
-
-<h4 class="subsection">11.1.1 The Interface</h4>
-
- <p><a name="index-interface-to-_0040code_007bcatgets_007d-1063"></a>
-The interface to the <code>catgets</code> implementation consists of three
-functions which correspond to those used in file access: <code>catopen</code>
-to open the catalog for using, <code>catgets</code> for accessing the message
-tables, and <code>catclose</code> for closing after work is done. Prototypes
-for the functions and the needed definitions are in the
-<code>&lt;nl_types.h&gt;</code> header file.
-
- <p><a name="index-g_t_0040code_007bcatopen_007d_002c-a-_0040code_007bcatgets_007d-function-1064"></a><code>catopen</code> is used like in this:
-
-<pre class="example"> nl_catd catd = catopen ("catalog_name", 0);
-</pre>
- <p>The function takes as the argument the name of the catalog. This usual
-refers to the name of the program or the package. The second parameter
-is not further specified in the standard. I don't even know whether it
-is implemented consistently among various systems. So the common advice
-is to use <code>0</code> as the value. The return value is a handle to the
-message catalog, equivalent to handles to file returned by <code>open</code>.
-
- <p><a name="index-g_t_0040code_007bcatgets_007d_002c-a-_0040code_007bcatgets_007d-function-1065"></a>This handle is of course used in the <code>catgets</code> function which can
-be used like this:
-
-<pre class="example"> char *translation = catgets (catd, set_no, msg_id, "original string");
-</pre>
- <p>The first parameter is this catalog descriptor. The second parameter
-specifies the set of messages in this catalog, in which the message
-described by <code>msg_id</code> is obtained. <code>catgets</code> therefore uses a
-three-stage addressing:
-
-<pre class="display"> catalog name &rArr; set number &rArr; message ID &rArr; translation
-</pre>
- <!-- Anybody else loving Haskell??? :-) - Uli -->
- <p>The fourth argument is not used to address the translation. It is given
-as a default value in case when one of the addressing stages fail. One
-important thing to remember is that although the return type of catgets
-is <code>char *</code> the resulting string <em>must not</em> be changed. It
-should better be <code>const char *</code>, but the standard is published in
-1988, one year before ANSI C.
-
-<p class="noindent"><a name="index-g_t_0040code_007bcatclose_007d_002c-a-_0040code_007bcatgets_007d-function-1066"></a>The last of these functions is used and behaves as expected:
-
-<pre class="example"> catclose (catd);
-</pre>
- <p>After this no <code>catgets</code> call using the descriptor is legal anymore.
-
-<div class="node">
-<a name="Problems-with-catgets"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Interface-to-catgets">Interface to catgets</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#catgets">catgets</a>
-
-</div>
-
-<h4 class="subsection">11.1.2 Problems with the <code>catgets</code> Interface?!</h4>
-
- <p><a name="index-problems-with-_0040code_007bcatgets_007d-interface-1067"></a>
-Now that this description seemed to be really easy &mdash; where are the
-problems we speak of? In fact the interface could be used in a
-reasonable way, but constructing the message catalogs is a pain. The
-reason for this lies in the third argument of <code>catgets</code>: the unique
-message ID. This has to be a numeric value for all messages in a single
-set. Perhaps you could imagine the problems keeping such a list while
-changing the source code. Add a new message here, remove one there. Of
-course there have been developed a lot of tools helping to organize this
-chaos but one as the other fails in one aspect or the other. We don't
-want to say that the other approach has no problems but they are far
-more easy to manage.
-
-<div class="node">
-<a name="gettext"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Comparison">Comparison</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#catgets">catgets</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programmers">Programmers</a>
-
-</div>
-
-<h3 class="section">11.2 About <code>gettext</code></h3>
-
- <p><a name="index-g_t_0040code_007bgettext_007d_002c-a-programmer_0027s-view-1068"></a>
-The definition of the <code>gettext</code> interface comes from a Uniforum
-proposal. It was submitted there by Sun, who had implemented the
-<code>gettext</code> function in SunOS 4, around 1990. Nowadays, the
-<code>gettext</code> interface is specified by the OpenI18N standard.
-
- <p>The main point about this solution is that it does not follow the
-method of normal file handling (open-use-close) and that it does not
-burden the programmer with so many tasks, especially the unique key handling.
-Of course here also a unique key is needed, but this key is the message
-itself (how long or short it is). See <a href="#Comparison">Comparison</a> for a more
-detailed comparison of the two methods.
-
- <p>The following section contains a rather detailed description of the
-interface. We make it that detailed because this is the interface
-we chose for the GNU <code>gettext</code> Library. Programmers interested
-in using this library will be interested in this description.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Interface-to-gettext">Interface to gettext</a>: The interface
-<li><a accesskey="2" href="#Ambiguities">Ambiguities</a>: Solving ambiguities
-<li><a accesskey="3" href="#Locating-Catalogs">Locating Catalogs</a>: Locating message catalog files
-<li><a accesskey="4" href="#Charset-conversion">Charset conversion</a>: How to request conversion to Unicode
-<li><a accesskey="5" href="#Contexts">Contexts</a>: Solving ambiguities in GUI programs
-<li><a accesskey="6" href="#Plural-forms">Plural forms</a>: Additional functions for handling plurals
-<li><a accesskey="7" href="#Optimized-gettext">Optimized gettext</a>: Optimization of the *gettext functions
-</ul>
-
-<div class="node">
-<a name="Interface-to-gettext"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Ambiguities">Ambiguities</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gettext">gettext</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.1 The Interface</h4>
-
- <p><a name="index-g_t_0040code_007bgettext_007d-interface-1069"></a>
-The minimal functionality an interface must have is a) to select a
-domain the strings are coming from (a single domain for all programs is
-not reasonable because its construction and maintenance is difficult,
-perhaps impossible) and b) to access a string in a selected domain.
-
- <p>This is principally the description of the <code>gettext</code> interface. It
-has a global domain which unqualified usages reference. Of course this
-domain is selectable by the user.
-
-<pre class="example"> char *textdomain (const char *domain_name);
-</pre>
- <p>This provides the possibility to change or query the current status of
-the current global domain of the <code>LC_MESSAGE</code> category. The
-argument is a null-terminated string, whose characters must be legal in
-the use in filenames. If the <var>domain_name</var> argument is <code>NULL</code>,
-the function returns the current value. If no value has been set
-before, the name of the default domain is returned: <em>messages</em>.
-Please note that although the return value of <code>textdomain</code> is of
-type <code>char *</code> no changing is allowed. It is also important to know
-that no checks of the availability are made. If the name is not
-available you will see this by the fact that no translations are provided.
-
-<p class="noindent">To use a domain set by <code>textdomain</code> the function
-
-<pre class="example"> char *gettext (const char *msgid);
-</pre>
- <p class="noindent">is to be used. This is the simplest reasonable form one can imagine.
-The translation of the string <var>msgid</var> is returned if it is available
-in the current domain. If it is not available, the argument itself is
-returned. If the argument is <code>NULL</code> the result is undefined.
-
- <p>One thing which should come into mind is that no explicit dependency to
-the used domain is given. The current value of the domain is used.
-If this changes between two
-executions of the same <code>gettext</code> call in the program, both calls
-reference a different message catalog.
-
- <p>For the easiest case, which is normally used in internationalized
-packages, once at the beginning of execution a call to <code>textdomain</code>
-is issued, setting the domain to a unique name, normally the package
-name. In the following code all strings which have to be translated are
-filtered through the gettext function. That's all, the package speaks
-your language.
-
-<div class="node">
-<a name="Ambiguities"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Locating-Catalogs">Locating Catalogs</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Interface-to-gettext">Interface to gettext</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.2 Solving Ambiguities</h4>
-
- <p><a name="index-several-domains-1070"></a><a name="index-domain-ambiguities-1071"></a><a name="index-large-package-1072"></a>
-While this single name domain works well for most applications there
-might be the need to get translations from more than one domain. Of
-course one could switch between different domains with calls to
-<code>textdomain</code>, but this is really not convenient nor is it fast. A
-possible situation could be one case subject to discussion during this
-writing: all
-error messages of functions in the set of common used functions should
-go into a separate domain <code>error</code>. By this mean we would only need
-to translate them once.
-Another case are messages from a library, as these <em>have</em> to be
-independent of the current domain set by the application.
-
-<p class="noindent">For this reasons there are two more functions to retrieve strings:
-
-<pre class="example"> char *dgettext (const char *domain_name, const char *msgid);
- char *dcgettext (const char *domain_name, const char *msgid,
- int category);
-</pre>
- <p>Both take an additional argument at the first place, which corresponds
-to the argument of <code>textdomain</code>. The third argument of
-<code>dcgettext</code> allows to use another locale category but <code>LC_MESSAGES</code>.
-But I really don't know where this can be useful. If the
-<var>domain_name</var> is <code>NULL</code> or <var>category</var> has an value beside
-the known ones, the result is undefined. It should also be noted that
-this function is not part of the second known implementation of this
-function family, the one found in Solaris.
-
- <p>A second ambiguity can arise by the fact, that perhaps more than one
-domain has the same name. This can be solved by specifying where the
-needed message catalog files can be found.
-
-<pre class="example"> char *bindtextdomain (const char *domain_name,
- const char *dir_name);
-</pre>
- <p>Calling this function binds the given domain to a file in the specified
-directory (how this file is determined follows below). Especially a
-file in the systems default place is not favored against the specified
-file anymore (as it would be by solely using <code>textdomain</code>). A
-<code>NULL</code> pointer for the <var>dir_name</var> parameter returns the binding
-associated with <var>domain_name</var>. If <var>domain_name</var> itself is
-<code>NULL</code> nothing happens and a <code>NULL</code> pointer is returned. Here
-again as for all the other functions is true that none of the return
-value must be changed!
-
- <p>It is important to remember that relative path names for the
-<var>dir_name</var> parameter can be trouble. Since the path is always
-computed relative to the current directory different results will be
-achieved when the program executes a <code>chdir</code> command. Relative
-paths should always be avoided to avoid dependencies and
-unreliabilities.
-
-<div class="node">
-<a name="Locating-Catalogs"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Charset-conversion">Charset conversion</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Ambiguities">Ambiguities</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.3 Locating Message Catalog Files</h4>
-
- <p><a name="index-message-catalog-files-location-1073"></a>
-Because many different languages for many different packages have to be
-stored we need some way to add these information to file message catalog
-files. The way usually used in Unix environments is have this encoding
-in the file name. This is also done here. The directory name given in
-<code>bindtextdomain</code>s second argument (or the default directory),
-followed by the name of the locale, the locale category, and the domain name
-are concatenated:
-
-<pre class="example"> <var>dir_name</var>/<var>locale</var>/LC_<var>category</var>/<var>domain_name</var>.mo
-</pre>
- <p>The default value for <var>dir_name</var> is system specific. For the GNU
-library, and for packages adhering to its conventions, it's:
-<pre class="example"> /usr/local/share/locale
-</pre>
- <p class="noindent"><var>locale</var> is the name of the locale category which is designated by
-<code>LC_</code><var>category</var>. For <code>gettext</code> and <code>dgettext</code> this
-<code>LC_</code><var>category</var> is always <code>LC_MESSAGES</code>.<a rel="footnote" href="#fn-3" name="fnd-3"><sup>3</sup></a>
-The name of the locale category is determined through
-<code>setlocale (LC_</code><var>category</var><code>, NULL)</code>.
-<a rel="footnote" href="#fn-4" name="fnd-4"><sup>4</sup></a>
-When using the function <code>dcgettext</code>, you can specify the locale category
-through the third argument.
-
-<div class="node">
-<a name="Charset-conversion"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Contexts">Contexts</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Locating-Catalogs">Locating Catalogs</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.4 How to specify the output character set <code>gettext</code> uses</h4>
-
- <p><a name="index-charset-conversion-at-runtime-1074"></a><a name="index-encoding-conversion-at-runtime-1075"></a>
-<code>gettext</code> not only looks up a translation in a message catalog. It
-also converts the translation on the fly to the desired output character
-set. This is useful if the user is working in a different character set
-than the translator who created the message catalog, because it avoids
-distributing variants of message catalogs which differ only in the
-character set.
-
- <p>The output character set is, by default, the value of <code>nl_langinfo
-(CODESET)</code>, which depends on the <code>LC_CTYPE</code> part of the current
-locale. But programs which store strings in a locale independent way
-(e.g. UTF-8) can request that <code>gettext</code> and related functions
-return the translations in that encoding, by use of the
-<code>bind_textdomain_codeset</code> function.
-
- <p>Note that the <var>msgid</var> argument to <code>gettext</code> is not subject to
-character set conversion. Also, when <code>gettext</code> does not find a
-translation for <var>msgid</var>, it returns <var>msgid</var> unchanged &ndash;
-independently of the current output character set. It is therefore
-recommended that all <var>msgid</var>s be US-ASCII strings.
-
-<div class="defun">
-&mdash; Function: char * <b>bind_textdomain_codeset</b> (<var>const char *domainname, const char *codeset</var>)<var><a name="index-bind_005ftextdomain_005fcodeset-1076"></a></var><br>
-<blockquote><p>The <code>bind_textdomain_codeset</code> function can be used to specify the
-output character set for message catalogs for domain <var>domainname</var>.
-The <var>codeset</var> argument must be a valid codeset name which can be used
-for the <code>iconv_open</code> function, or a null pointer.
-
- <p>If the <var>codeset</var> parameter is the null pointer,
-<code>bind_textdomain_codeset</code> returns the currently selected codeset
-for the domain with the name <var>domainname</var>. It returns <code>NULL</code> if
-no codeset has yet been selected.
-
- <p>The <code>bind_textdomain_codeset</code> function can be used several times.
-If used multiple times with the same <var>domainname</var> argument, the
-later call overrides the settings made by the earlier one.
-
- <p>The <code>bind_textdomain_codeset</code> function returns a pointer to a
-string containing the name of the selected codeset. The string is
-allocated internally in the function and must not be changed by the
-user. If the system went out of core during the execution of
-<code>bind_textdomain_codeset</code>, the return value is <code>NULL</code> and the
-global variable <var>errno</var> is set accordingly.
-</p></blockquote></div>
-
-<div class="node">
-<a name="Contexts"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Plural-forms">Plural forms</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Charset-conversion">Charset conversion</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.5 Using contexts for solving ambiguities</h4>
-
- <p><a name="index-context-1077"></a><a name="index-GUI-programs-1078"></a><a name="index-translating-menu-entries-1079"></a><a name="index-menu-entries-1080"></a>
-One place where the <code>gettext</code> functions, if used normally, have big
-problems is within programs with graphical user interfaces (GUIs). The
-problem is that many of the strings which have to be translated are very
-short. They have to appear in pull-down menus which restricts the
-length. But strings which are not containing entire sentences or at
-least large fragments of a sentence may appear in more than one
-situation in the program but might have different translations. This is
-especially true for the one-word strings which are frequently used in
-GUI programs.
-
- <p>As a consequence many people say that the <code>gettext</code> approach is
-wrong and instead <code>catgets</code> should be used which indeed does not
-have this problem. But there is a very simple and powerful method to
-handle this kind of problems with the <code>gettext</code> functions.
-
- <p>Contexts can be added to strings to be translated. A context dependent
-translation lookup is when a translation for a given string is searched,
-that is limited to a given context. The translation for the same string
-in a different context can be different. The different translations of
-the same string in different contexts can be stored in the in the same
-MO file, and can be edited by the translator in the same PO file.
-
- <p>The <samp><span class="file">gettext.h</span></samp> include file contains the lookup macros for strings
-with contexts. They are implemented as thin macros and inline functions
-over the functions from <code>&lt;libintl.h&gt;</code>.
-
- <p><a name="index-pgettext-1081"></a>
-<pre class="example"> const char *pgettext (const char *msgctxt, const char *msgid);
-</pre>
- <p>In a call of this macro, <var>msgctxt</var> and <var>msgid</var> must be string
-literals. The macro returns the translation of <var>msgid</var>, restricted
-to the context given by <var>msgctxt</var>.
-
- <p>The <var>msgctxt</var> string is visible in the PO file to the translator.
-You should try to make it somehow canonical and never changing. Because
-every time you change an <var>msgctxt</var>, the translator will have to review
-the translation of <var>msgid</var>.
-
- <p>Finding a canonical <var>msgctxt</var> string that doesn't change over time can
-be hard. But you shouldn't use the file name or class name containing the
-<code>pgettext</code> call &ndash; because it is a common development task to rename
-a file or a class, and it shouldn't cause translator work. Also you shouldn't
-use a comment in the form of a complete English sentence as <var>msgctxt</var> &ndash;
-because orthography or grammar changes are often applied to such sentences,
-and again, it shouldn't force the translator to do a review.
-
- <p>The &lsquo;<samp><span class="samp">p</span></samp>&rsquo; in &lsquo;<samp><span class="samp">pgettext</span></samp>&rsquo; stands for &ldquo;particular&rdquo;: <code>pgettext</code>
-fetches a particular translation of the <var>msgid</var>.
-
- <p><a name="index-dpgettext-1082"></a><a name="index-dcpgettext-1083"></a>
-<pre class="example"> const char *dpgettext (const char *domain_name,
- const char *msgctxt, const char *msgid);
- const char *dcpgettext (const char *domain_name,
- const char *msgctxt, const char *msgid,
- int category);
-</pre>
- <p>These are generalizations of <code>pgettext</code>. They behave similarly to
-<code>dgettext</code> and <code>dcgettext</code>, respectively. The <var>domain_name</var>
-argument defines the translation domain. The <var>category</var> argument
-allows to use another locale category than <code>LC_MESSAGES</code>.
-
- <p>As as example consider the following fictional situation. A GUI program
-has a menu bar with the following entries:
-
-<pre class="smallexample"> +------------+------------+--------------------------------------+
- | File | Printer | |
- +------------+------------+--------------------------------------+
- | Open | | Select |
- | New | | Open |
- +----------+ | Connect |
- +----------+
-</pre>
- <p>To have the strings <code>File</code>, <code>Printer</code>, <code>Open</code>,
-<code>New</code>, <code>Select</code>, and <code>Connect</code> translated there has to be
-at some point in the code a call to a function of the <code>gettext</code>
-family. But in two places the string passed into the function would be
-<code>Open</code>. The translations might not be the same and therefore we
-are in the dilemma described above.
-
- <p>What distinguishes the two places is the menu path from the menu root to
-the particular menu entries:
-
-<pre class="smallexample"> Menu|File
- Menu|Printer
- Menu|File|Open
- Menu|File|New
- Menu|Printer|Select
- Menu|Printer|Open
- Menu|Printer|Connect
-</pre>
- <p>The context is thus the menu path without its last part. So, the calls
-look like this:
-
-<pre class="smallexample"> pgettext ("Menu|", "File")
- pgettext ("Menu|", "Printer")
- pgettext ("Menu|File|", "Open")
- pgettext ("Menu|File|", "New")
- pgettext ("Menu|Printer|", "Select")
- pgettext ("Menu|Printer|", "Open")
- pgettext ("Menu|Printer|", "Connect")
-</pre>
- <p>Whether or not to use the &lsquo;<samp><span class="samp">|</span></samp>&rsquo; character at the end of the context is a
-matter of style.
-
- <p>For more complex cases, where the <var>msgctxt</var> or <var>msgid</var> are not
-string literals, more general macros are available:
-
- <p><a name="index-pgettext_005fexpr-1084"></a><a name="index-dpgettext_005fexpr-1085"></a><a name="index-dcpgettext_005fexpr-1086"></a>
-<pre class="example"> const char *pgettext_expr (const char *msgctxt, const char *msgid);
- const char *dpgettext_expr (const char *domain_name,
- const char *msgctxt, const char *msgid);
- const char *dcpgettext_expr (const char *domain_name,
- const char *msgctxt, const char *msgid,
- int category);
-</pre>
- <p>Here <var>msgctxt</var> and <var>msgid</var> can be arbitrary string-valued expressions.
-These macros are more general. But in the case that both argument expressions
-are string literals, the macros without the &lsquo;<samp><span class="samp">_expr</span></samp>&rsquo; suffix are more
-efficient.
-
-<div class="node">
-<a name="Plural-forms"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Optimized-gettext">Optimized gettext</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Contexts">Contexts</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.6 Additional functions for plural forms</h4>
-
- <p><a name="index-plural-forms-1087"></a>
-The functions of the <code>gettext</code> family described so far (and all the
-<code>catgets</code> functions as well) have one problem in the real world
-which have been neglected completely in all existing approaches. What
-is meant here is the handling of plural forms.
-
- <p>Looking through Unix source code before the time anybody thought about
-internationalization (and, sadly, even afterwards) one can often find
-code similar to the following:
-
-<pre class="smallexample"> printf ("%d file%s deleted", n, n == 1 ? "" : "s");
-</pre>
- <p class="noindent">After the first complaints from people internationalizing the code people
-either completely avoided formulations like this or used strings like
-<code>"file(s)"</code>. Both look unnatural and should be avoided. First
-tries to solve the problem correctly looked like this:
-
-<pre class="smallexample"> if (n == 1)
- printf ("%d file deleted", n);
- else
- printf ("%d files deleted", n);
-</pre>
- <p>But this does not solve the problem. It helps languages where the
-plural form of a noun is not simply constructed by adding an
-‘s’
-but that is all. Once again people fell into the trap of believing the
-rules their language is using are universal. But the handling of plural
-forms differs widely between the language families. For example,
-Rafal Maszkowski <code>&lt;rzm@mat.uni.torun.pl&gt;</code> reports:
-
- <blockquote>
-In Polish we use e.g. plik (file) this way:
-<pre class="example"> 1 plik
- 2,3,4 pliki
- 5-21 pliko'w
- 22-24 pliki
- 25-31 pliko'w
-</pre>
- <p>and so on (o' means 8859-2 oacute which should be rather okreska,
-similar to aogonek).
-</blockquote>
-
- <p>There are two things which can differ between languages (and even inside
-language families);
-
- <ul>
-<li>The form how plural forms are built differs. This is a problem with
-languages which have many irregularities. German, for instance, is a
-drastic case. Though English and German are part of the same language
-family (Germanic), the almost regular forming of plural noun forms
-(appending an
-‘s’)
-is hardly found in German.
-
- <li>The number of plural forms differ. This is somewhat surprising for
-those who only have experiences with Romanic and Germanic languages
-since here the number is the same (there are two).
-
- <p>But other language families have only one form or many forms. More
-information on this in an extra section.
-</ul>
-
- <p>The consequence of this is that application writers should not try to
-solve the problem in their code. This would be localization since it is
-only usable for certain, hardcoded language environments. Instead the
-extended <code>gettext</code> interface should be used.
-
- <p>These extra functions are taking instead of the one key string two
-strings and a numerical argument. The idea behind this is that using
-the numerical argument and the first string as a key, the implementation
-can select using rules specified by the translator the right plural
-form. The two string arguments then will be used to provide a return
-value in case no message catalog is found (similar to the normal
-<code>gettext</code> behavior). In this case the rules for Germanic language
-is used and it is assumed that the first string argument is the singular
-form, the second the plural form.
-
- <p>This has the consequence that programs without language catalogs can
-display the correct strings only if the program itself is written using
-a Germanic language. This is a limitation but since the GNU C library
-(as well as the GNU <code>gettext</code> package) are written as part of the
-GNU package and the coding standards for the GNU project require program
-being written in English, this solution nevertheless fulfills its
-purpose.
-
-<div class="defun">
-&mdash; Function: char * <b>ngettext</b> (<var>const char *msgid1, const char *msgid2, unsigned long int n</var>)<var><a name="index-ngettext-1088"></a></var><br>
-<blockquote><p>The <code>ngettext</code> function is similar to the <code>gettext</code> function
-as it finds the message catalogs in the same way. But it takes two
-extra arguments. The <var>msgid1</var> parameter must contain the singular
-form of the string to be converted. It is also used as the key for the
-search in the catalog. The <var>msgid2</var> parameter is the plural form.
-The parameter <var>n</var> is used to determine the plural form. If no
-message catalog is found <var>msgid1</var> is returned if <code>n == 1</code>,
-otherwise <code>msgid2</code>.
-
- <p>An example for the use of this function is:
-
- <pre class="smallexample"> printf (ngettext ("%d file removed", "%d files removed", n), n);
-</pre>
- <p>Please note that the numeric value <var>n</var> has to be passed to the
-<code>printf</code> function as well. It is not sufficient to pass it only to
-<code>ngettext</code>.
-
- <p>In the English singular case, the number &ndash; always 1 &ndash; can be replaced with
-"one":
-
- <pre class="smallexample"> printf (ngettext ("One file removed", "%d files removed", n), n);
-</pre>
- <p class="noindent">This works because the &lsquo;<samp><span class="samp">printf</span></samp>&rsquo; function discards excess arguments that
-are not consumed by the format string.
-
- <p>If this function is meant to yield a format string that takes two or more
-arguments, you can not use it like this:
-
- <pre class="smallexample"> printf (ngettext ("%d file removed from directory %s",
- "%d files removed from directory %s",
- n, dir),
- n);
-</pre>
- <p class="noindent">because in many languages the translators want to replace the &lsquo;<samp><span class="samp">%d</span></samp>&rsquo;
-with an explicit word in the singular case, just like &ldquo;one&rdquo; in English,
-and C format strings cannot consume the second argument but skip the first
-argument. Instead, you have to reorder the arguments so that &lsquo;<samp><span class="samp">n</span></samp>&rsquo;
-comes last:
-
- <pre class="smallexample"> printf (ngettext ("%$2d file removed from directory %$1s",
- "%$2d files removed from directory %$1s",
- dir, n),
- n);
-</pre>
- <p class="noindent">See <a href="#c_002dformat">c-format</a> for details about this argument reordering syntax.
-
- <p>When you know that the value of <code>n</code> is within a given range, you can
-specify it as a comment directed to the <code>xgettext</code> tool. This
-information may help translators to use more adequate translations. Like
-this:
-
- <pre class="smallexample"> if (days &gt; 7 &amp;&amp; days &lt; 14)
- /* xgettext: range: 1..6 */
- printf (ngettext ("one week and one day", "one week and %d days",
- days - 7),
- days - 7);
-</pre>
- <p>It is also possible to use this function when the strings don't contain a
-cardinal number:
-
- <pre class="smallexample"> puts (ngettext ("Delete the selected file?",
- "Delete the selected files?",
- n));
-</pre>
- <p>In this case the number <var>n</var> is only used to choose the plural form.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: char * <b>dngettext</b> (<var>const char *domain, const char *msgid1, const char *msgid2, unsigned long int n</var>)<var><a name="index-dngettext-1089"></a></var><br>
-<blockquote><p>The <code>dngettext</code> is similar to the <code>dgettext</code> function in the
-way the message catalog is selected. The difference is that it takes
-two extra parameter to provide the correct plural form. These two
-parameters are handled in the same way <code>ngettext</code> handles them.
-</p></blockquote></div>
-
-<div class="defun">
-&mdash; Function: char * <b>dcngettext</b> (<var>const char *domain, const char *msgid1, const char *msgid2, unsigned long int n, int category</var>)<var><a name="index-dcngettext-1090"></a></var><br>
-<blockquote><p>The <code>dcngettext</code> is similar to the <code>dcgettext</code> function in the
-way the message catalog is selected. The difference is that it takes
-two extra parameter to provide the correct plural form. These two
-parameters are handled in the same way <code>ngettext</code> handles them.
-</p></blockquote></div>
-
- <p>Now, how do these functions solve the problem of the plural forms?
-Without the input of linguists (which was not available) it was not
-possible to determine whether there are only a few different forms in
-which plural forms are formed or whether the number can increase with
-every new supported language.
-
- <p>Therefore the solution implemented is to allow the translator to specify
-the rules of how to select the plural form. Since the formula varies
-with every language this is the only viable solution except for
-hardcoding the information in the code (which still would require the
-possibility of extensions to not prevent the use of new languages).
-
- <p><a name="index-specifying-plural-form-in-a-PO-file-1091"></a><a name="index-nplurals_0040r_007b_002c-in-a-PO-file-header_007d-1092"></a><a name="index-plural_0040r_007b_002c-in-a-PO-file-header_007d-1093"></a>The information about the plural form selection has to be stored in the
-header entry of the PO file (the one with the empty <code>msgid</code> string).
-The plural form information looks like this:
-
-<pre class="smallexample"> Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;
-</pre>
- <p>The <code>nplurals</code> value must be a decimal number which specifies how
-many different plural forms exist for this language. The string
-following <code>plural</code> is an expression which is using the C language
-syntax. Exceptions are that no negative numbers are allowed, numbers
-must be decimal, and the only variable allowed is <code>n</code>. Spaces are
-allowed in the expression, but backslash-newlines are not; in the
-examples below the backslash-newlines are present for formatting purposes
-only. This expression will be evaluated whenever one of the functions
-<code>ngettext</code>, <code>dngettext</code>, or <code>dcngettext</code> is called. The
-numeric value passed to these functions is then substituted for all uses
-of the variable <code>n</code> in the expression. The resulting value then
-must be greater or equal to zero and smaller than the value given as the
-value of <code>nplurals</code>.
-
-<p class="noindent"><a name="index-plural-form-formulas-1094"></a>The following rules are known at this point. The language with families
-are listed. But this does not necessarily mean the information can be
-generalized for the whole family (as can be easily seen in the table
-below).<a rel="footnote" href="#fn-5" name="fnd-5"><sup>5</sup></a>
-
- <dl>
-<dt>Only one form:<dd>Some languages only require one single form. There is no distinction
-between the singular and plural form. An appropriate header entry
-would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=1; plural=0;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Asian family<dd>Japanese, <!-- 122.1 million speakers -->
-Vietnamese, <!-- 68.6 million speakers -->
-Korean <!-- 66.3 million speakers -->
-</dl>
-
- <br><dt>Two forms, singular used for one only<dd>This is the form used in most existing programs since it is what English
-is using. A header entry would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=2; plural=n != 1;
-</pre>
- <p>(Note: this uses the feature of C expressions that boolean expressions
-have to value zero or one.)
-
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Germanic family<dd>English, <!-- 328.0 million speakers -->
-German, <!-- 96.9 million speakers -->
-Dutch, <!-- 21.7 million speakers -->
-Swedish, <!-- 8.3 million speakers -->
-Danish, <!-- 5.6 million speakers -->
-Norwegian, <!-- 4.6 million speakers -->
-Faroese <!-- 0.05 million speakers -->
-<br><dt>Romanic family<dd>Spanish, <!-- 328.5 million speakers -->
-Portuguese, <!-- 178.0 million speakers - 163 million Brazilian Portuguese -->
-Italian, <!-- 61.7 million speakers -->
-Bulgarian <!-- 9.1 million speakers -->
-<br><dt>Latin/Greek family<dd>Greek <!-- 13.1 million speakers -->
-<br><dt>Finno-Ugric family<dd>Finnish, <!-- 5.0 million speakers -->
-Estonian <!-- 1.0 million speakers -->
-<br><dt>Semitic family<dd>Hebrew <!-- 5.3 million speakers -->
-<br><dt>Artificial<dd>Esperanto <!-- 2 million speakers -->
-</dl>
-
- <p class="noindent">Other languages using the same header entry are:
-
- <dl>
-<dt>Finno-Ugric family<dd>Hungarian <!-- 12.5 million speakers -->
-<br><dt>Turkic/Altaic family<dd>Turkish <!-- 50.8 million speakers -->
-</dl>
-
- <p>Hungarian does not appear to have a plural if you look at sentences involving
-cardinal numbers. For example, &ldquo;1 apple&rdquo; is &ldquo;1 alma&rdquo;, and &ldquo;123 apples&rdquo; is
-&ldquo;123 alma&rdquo;. But when the number is not explicit, the distinction between
-singular and plural exists: &ldquo;the apple&rdquo; is &ldquo;az alma&rdquo;, and &ldquo;the apples&rdquo; is
-&ldquo;az alm&aacute;k&rdquo;. Since <code>ngettext</code> has to support both types of sentences,
-it is classified here, under &ldquo;two forms&rdquo;.
-
- <p>The same holds for Turkish: &ldquo;1 apple&rdquo; is &ldquo;1 elma&rdquo;, and &ldquo;123 apples&rdquo; is
-&ldquo;123 elma&rdquo;. But when the number is omitted, the distinction between singular
-and plural exists: &ldquo;the apple&rdquo; is &ldquo;elma&rdquo;, and &ldquo;the apples&rdquo; is
-&ldquo;elmalar&rdquo;.
-
- <br><dt>Two forms, singular used for zero and one<dd>Exceptional case in the language family. The header entry would be:
-
- <pre class="smallexample"> Plural-Forms: nplurals=2; plural=n&gt;1;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Romanic family<dd>Brazilian Portuguese, <!-- 163 million speakers -->
-French <!-- 67.8 million speakers -->
-</dl>
-
- <br><dt>Three forms, special case for zero<dd>The header entry would be:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; plural=n%10==1 &amp;&amp; n%100!=11 ? 0 : n != 0 ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Baltic family<dd>Latvian <!-- 1.5 million speakers -->
-</dl>
-
- <br><dt>Three forms, special cases for one and two<dd>The header entry would be:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Celtic<dd>Gaeilge (Irish) <!-- 0.4 million speakers -->
-</dl>
-
- <br><dt>Three forms, special case for numbers ending in 00 or [2-9][0-9]<dd>The header entry would be:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; \
- plural=n==1 ? 0 : (n==0 || (n%100 &gt; 0 &amp;&amp; n%100 &lt; 20)) ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Romanic family<dd>Romanian <!-- 23.4 million speakers -->
-</dl>
-
- <br><dt>Three forms, special case for numbers ending in 1[2-9]<dd>The header entry would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; \
- plural=n%10==1 &amp;&amp; n%100!=11 ? 0 : \
- n%10&gt;=2 &amp;&amp; (n%100&lt;10 || n%100&gt;=20) ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Baltic family<dd>Lithuanian <!-- 3.2 million speakers -->
-</dl>
-
- <br><dt>Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4]<dd>The header entry would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; \
- plural=n%10==1 &amp;&amp; n%100!=11 ? 0 : \
- n%10&gt;=2 &amp;&amp; n%10&lt;=4 &amp;&amp; (n%100&lt;10 || n%100&gt;=20) ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Slavic family<dd>Russian, <!-- 143.6 million speakers -->
-Ukrainian, <!-- 37.0 million speakers -->
-Serbian, <!-- 7.0 million speakers -->
-Croatian <!-- 5.5 million speakers -->
-</dl>
-
- <br><dt>Three forms, special cases for 1 and 2, 3, 4<dd>The header entry would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; \
- plural=(n==1) ? 0 : (n&gt;=2 &amp;&amp; n&lt;=4) ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Slavic family<dd>Czech, <!-- 9.5 million speakers -->
-Slovak <!-- 5.0 million speakers -->
-</dl>
-
- <br><dt>Three forms, special case for one and some numbers ending in 2, 3, or 4<dd>The header entry would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=3; \
- plural=n==1 ? 0 : \
- n%10&gt;=2 &amp;&amp; n%10&lt;=4 &amp;&amp; (n%100&lt;10 || n%100&gt;=20) ? 1 : 2;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Slavic family<dd>Polish <!-- 40.0 million speakers -->
-</dl>
-
- <br><dt>Four forms, special case for one and all numbers ending in 02, 03, or 04<dd>The header entry would look like this:
-
- <pre class="smallexample"> Plural-Forms: nplurals=4; \
- plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;
-</pre>
- <p class="noindent">Languages with this property include:
-
- <dl>
-<dt>Slavic family<dd>Slovenian <!-- 1.9 million speakers -->
-</dl>
- </dl>
-
- <p>You might now ask, <code>ngettext</code> handles only numbers <var>n</var> of type
-&lsquo;<samp><span class="samp">unsigned long</span></samp>&rsquo;. What about larger integer types? What about negative
-numbers? What about floating-point numbers?
-
- <p>About larger integer types, such as &lsquo;<samp><span class="samp">uintmax_t</span></samp>&rsquo; or
-&lsquo;<samp><span class="samp">unsigned long long</span></samp>&rsquo;: they can be handled by reducing the value to a
-range that fits in an &lsquo;<samp><span class="samp">unsigned long</span></samp>&rsquo;. Simply casting the value to
-&lsquo;<samp><span class="samp">unsigned long</span></samp>&rsquo; would not do the right thing, since it would treat
-<code>ULONG_MAX + 1</code> like zero, <code>ULONG_MAX + 2</code> like singular, and
-the like. Here you can exploit the fact that all mentioned plural form
-formulas eventually become periodic, with a period that is a divisor of 100
-(or 1000 or 1000000). So, when you reduce a large value to another one in
-the range [1000000, 1999999] that ends in the same 6 decimal digits, you
-can assume that it will lead to the same plural form selection. This code
-does this:
-
-<pre class="smallexample"> #include &lt;inttypes.h&gt;
- uintmax_t nbytes = ...;
- printf (ngettext ("The file has %"PRIuMAX" byte.",
- "The file has %"PRIuMAX" bytes.",
- (nbytes &gt; ULONG_MAX
- ? (nbytes % 1000000) + 1000000
- : nbytes)),
- nbytes);
-</pre>
- <p>Negative and floating-point values usually represent physical entities for
-which singular and plural don't clearly apply. In such cases, there is no
-need to use <code>ngettext</code>; a simple <code>gettext</code> call with a form suitable
-for all values will do. For example:
-
-<pre class="smallexample"> printf (gettext ("Time elapsed: %.3f seconds"),
- num_milliseconds * 0.001);
-</pre>
- <p class="noindent">Even if <var>num_milliseconds</var> happens to be a multiple of 1000, the output
-<pre class="smallexample"> Time elapsed: 1.000 seconds
-</pre>
- <p class="noindent">is acceptable in English, and similarly for other languages.
-
- <p>The translators' perspective regarding plural forms is explained in
-<a href="#Translating-plural-forms">Translating plural forms</a>.
-
-<div class="node">
-<a name="Optimized-gettext"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Plural-forms">Plural forms</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#gettext">gettext</a>
-
-</div>
-
-<h4 class="subsection">11.2.7 Optimization of the *gettext functions</h4>
-
- <p><a name="index-optimization-of-_0040code_007bgettext_007d-functions-1095"></a>
-At this point of the discussion we should talk about an advantage of the
-GNU <code>gettext</code> implementation. Some readers might have pointed out
-that an internationalized program might have a poor performance if some
-string has to be translated in an inner loop. While this is unavoidable
-when the string varies from one run of the loop to the other it is
-simply a waste of time when the string is always the same. Take the
-following example:
-
-<pre class="example"> {
- while (...)
- {
- puts (gettext ("Hello world"));
- }
- }
-</pre>
- <p class="noindent">When the locale selection does not change between two runs the resulting
-string is always the same. One way to use this is:
-
-<pre class="example"> {
- str = gettext ("Hello world");
- while (...)
- {
- puts (str);
- }
- }
-</pre>
- <p class="noindent">But this solution is not usable in all situation (e.g. when the locale
-selection changes) nor does it lead to legible code.
-
- <p>For this reason, GNU <code>gettext</code> caches previous translation results.
-When the same translation is requested twice, with no new message
-catalogs being loaded in between, <code>gettext</code> will, the second time,
-find the result through a single cache lookup.
-
-<div class="node">
-<a name="Comparison"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Using-libintl_002ea">Using libintl.a</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gettext">gettext</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programmers">Programmers</a>
-
-</div>
-
-<h3 class="section">11.3 Comparing the Two Interfaces</h3>
-
- <p><a name="index-g_t_0040code_007bgettext_007d-vs-_0040code_007bcatgets_007d-1096"></a><a name="index-comparison-of-interfaces-1097"></a>
-<!-- FIXME: arguments to catgets vs. gettext -->
-<!-- Partly done 950718 - drepper -->
-
- <p>The following discussion is perhaps a little bit colored. As said
-above we implemented GNU <code>gettext</code> following the Uniforum
-proposal and this surely has its reasons. But it should show how we
-came to this decision.
-
- <p>First we take a look at the developing process. When we write an
-application using NLS provided by <code>gettext</code> we proceed as always.
-Only when we come to a string which might be seen by the users and thus
-has to be translated we use <code>gettext("...")</code> instead of
-<code>"..."</code>. At the beginning of each source file (or in a central
-header file) we define
-
-<pre class="example"> #define gettext(String) (String)
-</pre>
- <p>Even this definition can be avoided when the system supports the
-<code>gettext</code> function in its C library. When we compile this code the
-result is the same as if no NLS code is used. When you take a look at
-the GNU <code>gettext</code> code you will see that we use <code>_("...")</code>
-instead of <code>gettext("...")</code>. This reduces the number of
-additional characters per translatable string to <em>3</em> (in words:
-three).
-
- <p>When now a production version of the program is needed we simply replace
-the definition
-
-<pre class="example"> #define _(String) (String)
-</pre>
- <p class="noindent">by
-
- <p><a name="index-include-file-_0040file_007blibintl_002eh_007d-1098"></a>
-<pre class="example"> #include &lt;libintl.h&gt;
- #define _(String) gettext (String)
-</pre>
- <p class="noindent">Additionally we run the program <samp><span class="file">xgettext</span></samp> on all source code file
-which contain translatable strings and that's it: we have a running
-program which does not depend on translations to be available, but which
-can use any that becomes available.
-
- <p><a name="index-g_t_0040code_007bN_005f_007d_002c-a-convenience-macro-1099"></a>The same procedure can be done for the <code>gettext_noop</code> invocations
-(see <a href="#Special-cases">Special cases</a>). One usually defines <code>gettext_noop</code> as a
-no-op macro. So you should consider the following code for your project:
-
-<pre class="example"> #define gettext_noop(String) String
- #define N_(String) gettext_noop (String)
-</pre>
- <p><code>N_</code> is a short form similar to <code>_</code>. The <samp><span class="file">Makefile</span></samp> in
-the <samp><span class="file">po/</span></samp> directory of GNU <code>gettext</code> knows by default both of the
-mentioned short forms so you are invited to follow this proposal for
-your own ease.
-
- <p>Now to <code>catgets</code>. The main problem is the work for the
-programmer. Every time he comes to a translatable string he has to
-define a number (or a symbolic constant) which has also be defined in
-the message catalog file. He also has to take care for duplicate
-entries, duplicate message IDs etc. If he wants to have the same
-quality in the message catalog as the GNU <code>gettext</code> program
-provides he also has to put the descriptive comments for the strings and
-the location in all source code files in the message catalog. This is
-nearly a Mission: Impossible.
-
- <p>But there are also some points people might call advantages speaking for
-<code>catgets</code>. If you have a single word in a string and this string
-is used in different contexts it is likely that in one or the other
-language the word has different translations. Example:
-
-<pre class="example"> printf ("%s: %d", gettext ("number"), number_of_errors)
-
- printf ("you should see %d %s", number_count,
- number_count == 1 ? gettext ("number") : gettext ("numbers"))
-</pre>
- <p>Here we have to translate two times the string <code>"number"</code>. Even
-if you do not speak a language beside English it might be possible to
-recognize that the two words have a different meaning. In German the
-first appearance has to be translated to <code>"Anzahl"</code> and the second
-to <code>"Zahl"</code>.
-
- <p>Now you can say that this example is really esoteric. And you are
-right! This is exactly how we felt about this problem and decide that
-it does not weight that much. The solution for the above problem could
-be very easy:
-
-<pre class="example"> printf ("%s %d", gettext ("number:"), number_of_errors)
-
- printf (number_count == 1 ? gettext ("you should see %d number")
- : gettext ("you should see %d numbers"),
- number_count)
-</pre>
- <p>We believe that we can solve all conflicts with this method. If it is
-difficult one can also consider changing one of the conflicting string a
-little bit. But it is not impossible to overcome.
-
- <p><code>catgets</code> allows same original entry to have different translations,
-but <code>gettext</code> has another, scalable approach for solving ambiguities
-of this kind: See <a href="#Ambiguities">Ambiguities</a>.
-
-<div class="node">
-<a name="Using-libintl.a"></a>
-<a name="Using-libintl_002ea"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gettext-grok">gettext grok</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Comparison">Comparison</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programmers">Programmers</a>
-
-</div>
-
-<h3 class="section">11.4 Using libintl.a in own programs</h3>
-
- <p>Starting with version 0.9.4 the library <code>libintl.h</code> should be
-self-contained. I.e., you can use it in your own programs without
-providing additional functions. The <samp><span class="file">Makefile</span></samp> will put the header
-and the library in directories selected using the <code>$(prefix)</code>.
-
-<div class="node">
-<a name="gettext-grok"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Temp-Programmers">Temp Programmers</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Using-libintl_002ea">Using libintl.a</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programmers">Programmers</a>
-
-</div>
-
-<h3 class="section">11.5 Being a <code>gettext</code> grok</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>To fully exploit the functionality of the GNU <code>gettext</code> library it
-is surely helpful to read the source code. But for those who don't want
-to spend that much time in reading the (sometimes complicated) code here
-is a list comments:
-
- <ul>
-<li>Changing the language at runtime
-<a name="index-language-selection-at-runtime-1100"></a>
-For interactive programs it might be useful to offer a selection of the
-used language at runtime. To understand how to do this one need to know
-how the used language is determined while executing the <code>gettext</code>
-function. The method which is presented here only works correctly
-with the GNU implementation of the <code>gettext</code> functions.
-
- <p>In the function <code>dcgettext</code> at every call the current setting of
-the highest priority environment variable is determined and used.
-Highest priority means here the following list with decreasing
-priority:
-
- <ol type=1 start=1>
-<a name="index-LANGUAGE_0040r_007b_002c-environment-variable_007d-1101"></a><li><code>LANGUAGE</code>
-<a name="index-LC_005fALL_0040r_007b_002c-environment-variable_007d-1102"></a><li><code>LC_ALL</code>
-<a name="index-LC_005fCTYPE_0040r_007b_002c-environment-variable_007d-1103"></a><a name="index-LC_005fNUMERIC_0040r_007b_002c-environment-variable_007d-1104"></a><a name="index-LC_005fTIME_0040r_007b_002c-environment-variable_007d-1105"></a><a name="index-LC_005fCOLLATE_0040r_007b_002c-environment-variable_007d-1106"></a><a name="index-LC_005fMONETARY_0040r_007b_002c-environment-variable_007d-1107"></a><a name="index-LC_005fMESSAGES_0040r_007b_002c-environment-variable_007d-1108"></a><li><code>LC_xxx</code>, according to selected locale category
-<a name="index-LANG_0040r_007b_002c-environment-variable_007d-1109"></a><li><code>LANG</code>
- </ol>
-
- <p>Afterwards the path is constructed using the found value and the
-translation file is loaded if available.
-
- <p>What happens now when the value for, say, <code>LANGUAGE</code> changes? According
-to the process explained above the new value of this variable is found
-as soon as the <code>dcgettext</code> function is called. But this also means
-the (perhaps) different message catalog file is loaded. In other
-words: the used language is changed.
-
- <p>But there is one little hook. The code for gcc-2.7.0 and up provides
-some optimization. This optimization normally prevents the calling of
-the <code>dcgettext</code> function as long as no new catalog is loaded. But
-if <code>dcgettext</code> is not called the program also cannot find the
-<code>LANGUAGE</code> variable be changed (see <a href="#Optimized-gettext">Optimized gettext</a>). A
-solution for this is very easy. Include the following code in the
-language switching function.
-
- <pre class="example"> /* Change language. */
- setenv ("LANGUAGE", "fr", 1);
-
- /* Make change known. */
- {
- extern int _nl_msg_cat_cntr;
- ++_nl_msg_cat_cntr;
- }
-</pre>
- <p><a name="index-g_t_0040code_007b_005fnl_005fmsg_005fcat_005fcntr_007d-1110"></a>The variable <code>_nl_msg_cat_cntr</code> is defined in <samp><span class="file">loadmsgcat.c</span></samp>.
-You don't need to know what this is for. But it can be used to detect
-whether a <code>gettext</code> implementation is GNU gettext and not non-GNU
-system's native gettext implementation.
-
- </ul>
-
-<div class="node">
-<a name="Temp-Programmers"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gettext-grok">gettext grok</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programmers">Programmers</a>
-
-</div>
-
-<h3 class="section">11.6 Temporary Notes for the Programmers Chapter</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Temp-Implementations">Temp Implementations</a>: Temporary - Two Possible Implementations
-<li><a accesskey="2" href="#Temp-catgets">Temp catgets</a>: Temporary - About <code>catgets</code>
-<li><a accesskey="3" href="#Temp-WSI">Temp WSI</a>: Temporary - Why a single implementation
-<li><a accesskey="4" href="#Temp-Notes">Temp Notes</a>: Temporary - Notes
-</ul>
-
-<div class="node">
-<a name="Temp-Implementations"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Temp-catgets">Temp catgets</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Temp-Programmers">Temp Programmers</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Temp-Programmers">Temp Programmers</a>
-
-</div>
-
-<h4 class="subsection">11.6.1 Temporary - Two Possible Implementations</h4>
-
- <p>There are two competing methods for language independent messages:
-the X/Open <code>catgets</code> method, and the Uniforum <code>gettext</code>
-method. The <code>catgets</code> method indexes messages by integers; the
-<code>gettext</code> method indexes them by their English translations.
-The <code>catgets</code> method has been around longer and is supported
-by more vendors. The <code>gettext</code> method is supported by Sun,
-and it has been heard that the COSE multi-vendor initiative is
-supporting it. Neither method is a POSIX standard; the POSIX.1
-committee had a lot of disagreement in this area.
-
- <p>Neither one is in the POSIX standard. There was much disagreement
-in the POSIX.1 committee about using the <code>gettext</code> routines
-vs. <code>catgets</code> (XPG). In the end the committee couldn't
-agree on anything, so no messaging system was included as part
-of the standard. I believe the informative annex of the standard
-includes the XPG3 messaging interfaces, &ldquo;<small class="dots">...</small>as an example of
-a messaging system that has been implemented<small class="dots">...</small>&rdquo;
-
- <p>They were very careful not to say anywhere that you should use one
-set of interfaces over the other. For more on this topic please
-see the Programming for Internationalization FAQ.
-
-<div class="node">
-<a name="Temp-catgets"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Temp-WSI">Temp WSI</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Temp-Implementations">Temp Implementations</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Temp-Programmers">Temp Programmers</a>
-
-</div>
-
-<h4 class="subsection">11.6.2 Temporary - About <code>catgets</code></h4>
-
- <p>There have been a few discussions of late on the use of
-<code>catgets</code> as a base. I think it important to present both
-sides of the argument and hence am opting to play devil's advocate
-for a little bit.
-
- <p>I'll not deny the fact that <code>catgets</code> could have been designed
-a lot better. It currently has quite a number of limitations and
-these have already been pointed out.
-
- <p>However there is a great deal to be said for consistency and
-standardization. A common recurring problem when writing Unix
-software is the myriad portability problems across Unix platforms.
-It seems as if every Unix vendor had a look at the operating system
-and found parts they could improve upon. Undoubtedly, these
-modifications are probably innovative and solve real problems.
-However, software developers have a hard time keeping up with all
-these changes across so many platforms.
-
- <p>And this has prompted the Unix vendors to begin to standardize their
-systems. Hence the impetus for Spec1170. Every major Unix vendor
-has committed to supporting this standard and every Unix software
-developer waits with glee the day they can write software to this
-standard and simply recompile (without having to use autoconf)
-across different platforms.
-
- <p>As I understand it, Spec1170 is roughly based upon version 4 of the
-X/Open Portability Guidelines (XPG4). Because <code>catgets</code> and
-friends are defined in XPG4, I'm led to believe that <code>catgets</code>
-is a part of Spec1170 and hence will become a standardized component
-of all Unix systems.
-
-<div class="node">
-<a name="Temp-WSI"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Temp-Notes">Temp Notes</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Temp-catgets">Temp catgets</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Temp-Programmers">Temp Programmers</a>
-
-</div>
-
-<h4 class="subsection">11.6.3 Temporary - Why a single implementation</h4>
-
- <p>Now it seems kind of wasteful to me to have two different systems
-installed for accessing message catalogs. If we do want to remedy
-<code>catgets</code> deficiencies why don't we try to expand <code>catgets</code>
-(in a compatible manner) rather than implement an entirely new system.
-Otherwise, we'll end up with two message catalog access systems installed
-with an operating system - one set of routines for packages using GNU
-<code>gettext</code> for their internationalization, and another set of routines
-(catgets) for all other software. Bloated?
-
- <p>Supposing another catalog access system is implemented. Which do
-we recommend? At least for Linux, we need to attract as many
-software developers as possible. Hence we need to make it as easy
-for them to port their software as possible. Which means supporting
-<code>catgets</code>. We will be implementing the <code>libintl</code> code
-within our <code>libc</code>, but does this mean we also have to incorporate
-another message catalog access scheme within our <code>libc</code> as well?
-And what about people who are going to be using the <code>libintl</code>
-+ non-<code>catgets</code> routines. When they port their software to
-other platforms, they're now going to have to include the front-end
-(<code>libintl</code>) code plus the back-end code (the non-<code>catgets</code>
-access routines) with their software instead of just including the
-<code>libintl</code> code with their software.
-
- <p>Message catalog support is however only the tip of the iceberg.
-What about the data for the other locale categories? They also have
-a number of deficiencies. Are we going to abandon them as well and
-develop another duplicate set of routines (should <code>libintl</code>
-expand beyond message catalog support)?
-
- <p>Like many parts of Unix that can be improved upon, we're stuck with balancing
-compatibility with the past with useful improvements and innovations for
-the future.
-
-<div class="node">
-<a name="Temp-Notes"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Temp-WSI">Temp WSI</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Temp-Programmers">Temp Programmers</a>
-
-</div>
-
-<h4 class="subsection">11.6.4 Temporary - Notes</h4>
-
- <p>X/Open agreed very late on the standard form so that many
-implementations differ from the final form. Both of my system (old
-Linux catgets and Ultrix-4) have a strange variation.
-
- <p>OK. After incorporating the last changes I have to spend some time on
-making the GNU/Linux <code>libc</code> <code>gettext</code> functions. So in future
-Solaris is not the only system having <code>gettext</code>.
-
-<div class="node">
-<a name="Translators"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Maintainers">Maintainers</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Programmers">Programmers</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">12 The Translator's View</h2>
-
-<!-- FIXME: Reorganize whole chapter. -->
-<ul class="menu">
-<li><a accesskey="1" href="#Trans-Intro-0">Trans Intro 0</a>: Introduction 0
-<li><a accesskey="2" href="#Trans-Intro-1">Trans Intro 1</a>: Introduction 1
-<li><a accesskey="3" href="#Discussions">Discussions</a>: Discussions
-<li><a accesskey="4" href="#Organization">Organization</a>: Organization
-<li><a accesskey="5" href="#Information-Flow">Information Flow</a>: Information Flow
-<li><a accesskey="6" href="#Translating-plural-forms">Translating plural forms</a>: How to fill in <code>msgstr[0]</code>, <code>msgstr[1]</code>
-<li><a accesskey="7" href="#Prioritizing-messages">Prioritizing messages</a>: How to find which messages to translate first
-</ul>
-
-<div class="node">
-<a name="Trans-Intro-0"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Trans-Intro-1">Trans Intro 1</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Translators">Translators</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.1 Introduction 0</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>Free software is going international! The Translation Project is a way
-to get maintainers, translators and users all together, so free software
-will gradually become able to speak many native languages.
-
- <p>The GNU <code>gettext</code> tool set contains <em>everything</em> maintainers
-need for internationalizing their packages for messages. It also
-contains quite useful tools for helping translators at localizing
-messages to their native language, once a package has already been
-internationalized.
-
- <p>To achieve the Translation Project, we need many 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.
-If you'd like to volunteer to <em>work</em> at translating messages,
-please send mail to your translating team.
-
- <p>Each team has its own mailing list, courtesy of Linux
-International. You may reach your translating team at the address
-<samp><var>ll</var><span class="file">@li.org</span></samp>, replacing <var>ll</var> by the two-letter ISO&nbsp;639<!-- /@w -->
-code for your language. Language codes are <em>not</em> the same as
-country codes given in ISO&nbsp;3166<!-- /@w -->. The following translating teams
-exist:
-
- <blockquote>
-Chinese <code>zh</code>, Czech <code>cs</code>, Danish <code>da</code>, Dutch <code>nl</code>,
-Esperanto <code>eo</code>, Finnish <code>fi</code>, French <code>fr</code>, Irish
-<code>ga</code>, German <code>de</code>, Greek <code>el</code>, Italian <code>it</code>,
-Japanese <code>ja</code>, Indonesian <code>in</code>, Norwegian <code>no</code>, Polish
-<code>pl</code>, Portuguese <code>pt</code>, Russian <code>ru</code>, Spanish <code>es</code>,
-Swedish <code>sv</code> and Turkish <code>tr</code>.
-</blockquote>
-
-<p class="noindent">For example, you may reach the Chinese translating team by writing to
-<samp><span class="file">zh@li.org</span></samp>. When you become a member of the translating team
-for your own language, you may subscribe to its list. For example,
-Swedish people can send a message to <samp><span class="file">sv-request@li.org</span></samp><!-- /@w -->,
-having this message body:
-
-<pre class="example"> subscribe
-</pre>
- <p>Keep in mind that team members should be interested in <em>working</em>
-at translations, or at solving translational difficulties, rather than
-merely lurking around. If your team does not exist yet and you want to
-start one, please write to <samp><span class="file">coordinator@translationproject.org</span></samp><!-- /@w -->;
-you will then reach the coordinator for all translator teams.
-
- <p>A handful of GNU packages have already been adapted and provided
-with message translations for several languages. Translation
-teams have begun to organize, using these packages as a starting
-point. But there are many more packages and many languages for
-which we have no volunteer translators. If you would like to
-volunteer to work at translating messages, please send mail to
-<samp><span class="file">coordinator@translationproject.org</span></samp> indicating what language(s)
-you can work on.
-
-<div class="node">
-<a name="Trans-Intro-1"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Discussions">Discussions</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Trans-Intro-0">Trans Intro 0</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.2 Introduction 1</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>This is now official, GNU is going international! Here is the
-announcement submitted for the January 1995 GNU Bulletin:
-
- <blockquote>
-A handful of GNU packages have already been adapted and provided
-with message translations for several languages. Translation
-teams have begun to organize, using these packages as a starting
-point. But there are many more packages and many languages
-for which we have no volunteer translators. If you'd like to
-volunteer to work at translating messages, please send mail to
-&lsquo;<samp><span class="samp">coordinator@translationproject.org</span></samp>&rsquo; indicating what language(s)
-you can work on.
-</blockquote>
-
- <p>This document should answer many questions for those who are curious about
-the process or would like to contribute. Please at least skim over it,
-hoping to cut down a little of the high volume of e-mail generated by this
-collective effort towards internationalization of free software.
-
- <p>Most free programming which is widely shared is done in English, and
-currently, English is used as the main communicating language between
-national communities collaborating to free software. This very document
-is written in English. This will not change in the foreseeable future.
-
- <p>However, there is a strong appetite from national communities for
-having more software able to write using national language and habits,
-and there is an on-going effort to modify free software in such a way
-that it becomes able to do so. The experiments driven so far raised
-an enthusiastic response from pretesters, so we believe that
-internationalization of free software is dedicated to succeed.
-
- <p>For suggestion clarifications, additions or corrections to this
-document, please e-mail to <samp><span class="file">coordinator@translationproject.org</span></samp>.
-
-<div class="node">
-<a name="Discussions"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Organization">Organization</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Trans-Intro-1">Trans Intro 1</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.3 Discussions</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>Facing this internationalization effort, a few users expressed their
-concerns. Some of these doubts are presented and discussed, here.
-
- <ul>
-<li>Smaller groups
-
- <p>Some languages are not spoken by a very large number of people, so people
-speaking them sometimes consider that there may not be all that much
-demand such versions of free software packages. Moreover, many people
-being <em>into computers</em>, in some countries, generally seem to prefer
-English versions of their software.
-
- <p>On the other end, people might enjoy their own language a lot, and be
-very motivated at providing to themselves the pleasure of having their
-beloved free software speaking their mother tongue. They do themselves
-a personal favor, and do not pay that much attention to the number of
-people benefiting of their work.
-
- <li>Misinterpretation
-
- <p>Other users are shy to push forward their own language, seeing in this
-some kind of misplaced propaganda. Someone thought there must be some
-users of the language over the networks pestering other people with it.
-
- <p>But any spoken language is worth localization, because there are
-people behind the language for whom the language is important and
-dear to their hearts.
-
- <li>Odd translations
-
- <p>The biggest problem is to find the right translations so that
-everybody can understand the messages. Translations are usually a
-little odd. Some people get used to English, to the extent they may
-find translations into their own language &ldquo;rather pushy, obnoxious
-and sometimes even hilarious.&rdquo; As a French speaking man, I have
-the experience of those instruction manuals for goods, so poorly
-translated in French in Korea or Taiwan<small class="dots">...</small>
-
- <p>The fact is that we sometimes have to create a kind of national
-computer culture, and this is not easy without the collaboration of
-many people liking their mother tongue. This is why translations are
-better achieved by people knowing and loving their own language, and
-ready to work together at improving the results they obtain.
-
- <li>Dependencies over the GPL or LGPL
-
- <p>Some people wonder if using GNU <code>gettext</code> necessarily brings their
-package under the protective wing of the GNU General Public License or
-the GNU Library General Public License, when they do not want to make
-their program free, or want other kinds of freedom. The simplest
-answer is &ldquo;normally not&rdquo;.
-
- <p>The <code>gettext-runtime</code> part of GNU <code>gettext</code>, i.e. the
-contents of <code>libintl</code>, is covered by the GNU Library General Public
-License. The <code>gettext-tools</code> part of GNU <code>gettext</code>, i.e. the
-rest of the GNU <code>gettext</code> package, is covered by the GNU General
-Public License.
-
- <p>The mere marking of localizable strings in a package, or conditional
-inclusion of a few lines for initialization, is not really including
-GPL'ed or LGPL'ed code. However, since the localization routines in
-<code>libintl</code> are under the LGPL, the LGPL needs to be considered.
-It gives the right to distribute the complete unmodified source of
-<code>libintl</code> even with non-free programs. It also gives the right
-to use <code>libintl</code> as a shared library, even for non-free programs.
-But it gives the right to use <code>libintl</code> as a static library or
-to incorporate <code>libintl</code> into another library only to free
-software.
-
- </ul>
-
-<div class="node">
-<a name="Organization"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Information-Flow">Information Flow</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Discussions">Discussions</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.4 Organization</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>On a larger scale, the true solution would be to organize some kind of
-fairly precise set up in which volunteers could participate. I gave
-some thought to this idea lately, and realize there will be some
-touchy points. I thought of writing to Richard Stallman to launch
-such a project, but feel it might be good to shake out the ideas
-between ourselves first. Most probably that Linux International has
-some experience in the field already, or would like to orchestrate
-the volunteer work, maybe. Food for thought, in any case!
-
- <p>I guess we have to setup something early, somehow, that will help
-many possible contributors of the same language to interlock and avoid
-work duplication, and further be put in contact for solving together
-problems particular to their tongue (in most languages, there are many
-difficulties peculiar to translating technical English). My Swedish
-contributor acknowledged these difficulties, and I'm well aware of
-them for French.
-
- <p>This is surely not a technical issue, but we should manage so the
-effort of locale contributors be maximally useful, despite the national
-team layer interface between contributors and maintainers.
-
- <p>The Translation Project needs some setup for coordinating language
-coordinators. Localizing evolving programs will surely
-become a permanent and continuous activity in the free software community,
-once well started.
-The setup should be minimally completed and tested before GNU
-<code>gettext</code> becomes an official reality. The e-mail address
-<samp><span class="file">coordinator@translationproject.org</span></samp> has been set up for receiving
-offers from volunteers and general e-mail on these topics. This address
-reaches the Translation Project coordinator.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Central-Coordination">Central Coordination</a>: Central Coordination
-<li><a accesskey="2" href="#National-Teams">National Teams</a>: National Teams
-<li><a accesskey="3" href="#Mailing-Lists">Mailing Lists</a>: Mailing Lists
-</ul>
-
-<div class="node">
-<a name="Central-Coordination"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#National-Teams">National Teams</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Organization">Organization</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Organization">Organization</a>
-
-</div>
-
-<h4 class="subsection">12.4.1 Central Coordination</h4>
-
- <p>I also think GNU will need sooner than it thinks, that someone set up
-a way to organize and coordinate these groups. Some kind of group
-of groups. My opinion is that it would be good that GNU delegates
-this task to a small group of collaborating volunteers, shortly.
-Perhaps in <samp><span class="file">gnu.announce</span></samp> a list of this national committee's
-can be published.
-
- <p>My role as coordinator would simply be to refer to Ulrich any German
-speaking volunteer interested to localization of free software packages, and
-maybe helping national groups to initially organize, while maintaining
-national registries for until national groups are ready to take over.
-In fact, the coordinator should ease volunteers to get in contact with
-one another for creating national teams, which should then select
-one coordinator per language, or country (regionalized language).
-If well done, the coordination should be useful without being an
-overwhelming task, the time to put delegations in place.
-
-<div class="node">
-<a name="National-Teams"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Mailing-Lists">Mailing Lists</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Central-Coordination">Central Coordination</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Organization">Organization</a>
-
-</div>
-
-<h4 class="subsection">12.4.2 National Teams</h4>
-
- <p>I suggest we look for volunteer coordinators/editors for individual
-languages. These people will scan contributions of translation files
-for various programs, for their own languages, and will ensure high
-and uniform standards of diction.
-
- <p>From my current experience with other people in these days, those who
-provide localizations are very enthusiastic about the process, and are
-more interested in the localization process than in the program they
-localize, and want to do many programs, not just one. This seems
-to confirm that having a coordinator/editor for each language is a
-good idea.
-
- <p>We need to choose someone who is good at writing clear and concise
-prose in the language in question. That is hard&mdash;we can't check
-it ourselves. So we need to ask a few people to judge each others'
-writing and select the one who is best.
-
- <p>I announce my prerelease to a few dozen people, and you would not
-believe all the discussions it generated already. I shudder to think
-what will happen when this will be launched, for true, officially,
-world wide. Who am I to arbitrate between two Czekolsovak users
-contradicting each other, for example?
-
- <p>I assume that your German is not much better than my French so that
-I would not be able to judge about these formulations. What I would
-suggest is that for each language there is a group for people who
-maintain the PO files and judge about changes. I suspect there will
-be cultural differences between how such groups of people will behave.
-Some will have relaxed ways, reach consensus easily, and have anyone
-of the group relate to the maintainers, while others will fight to
-death, organize heavy administrations up to national standards, and
-use strict channels.
-
- <p>The German team is putting out a good example. Right now, they are
-maybe half a dozen people revising translations of each other and
-discussing the linguistic issues. I do not even have all the names.
-Ulrich Drepper is taking care of coordinating the German team.
-He subscribed to all my pretest lists, so I do not even have to warn
-him specifically of incoming releases.
-
- <p>I'm sure, that is a good idea to get teams for each language working
-on translations. That will make the translations better and more
-consistent.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Sub_002dCultures">Sub-Cultures</a>: Sub-Cultures
-<li><a accesskey="2" href="#Organizational-Ideas">Organizational Ideas</a>: Organizational Ideas
-</ul>
-
-<div class="node">
-<a name="Sub-Cultures"></a>
-<a name="Sub_002dCultures"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Organizational-Ideas">Organizational Ideas</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#National-Teams">National Teams</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#National-Teams">National Teams</a>
-
-</div>
-
-<h5 class="subsubsection">12.4.2.1 Sub-Cultures</h5>
-
- <p>Taking French for example, there are a few sub-cultures around computers
-which developed diverging vocabularies. Picking volunteers here and
-there without addressing this problem in an organized way, soon in the
-project, might produce a distasteful mix of internationalized programs,
-and possibly trigger endless quarrels among those who really care.
-
- <p>Keeping some kind of unity in the way French localization of
-internationalized programs is achieved is a difficult (and delicate) job.
-Knowing the latin character of French people (:-), if we take this
-the wrong way, we could end up nowhere, or spoil a lot of energies.
-Maybe we should begin to address this problem seriously <em>before</em>
-GNU <code>gettext</code> become officially published. And I suspect that this
-means soon!
-
-<div class="node">
-<a name="Organizational-Ideas"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Sub_002dCultures">Sub-Cultures</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#National-Teams">National Teams</a>
-
-</div>
-
-<h5 class="subsubsection">12.4.2.2 Organizational Ideas</h5>
-
- <p>I expect the next big changes after the official release. Please note
-that I use the German translation of the short GPL message. We need
-to set a few good examples before the localization goes out for true
-in the free software community. Here are a few points to discuss:
-
- <ul>
-<li>Each group should have one FTP server (at least one master).
-
- <li>The files on the server should reflect the latest version (of
-course!) and it should also contain a RCS directory with the
-corresponding archives (I don't have this now).
-
- <li>There should also be a ChangeLog file (this is more useful than the
-RCS archive but can be generated automatically from the later by
-Emacs).
-
- <li>A <dfn>core group</dfn> should judge about questionable changes (for now
-this group consists solely by me but I ask some others occasionally;
-this also seems to work).
-
- </ul>
-
-<div class="node">
-<a name="Mailing-Lists"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#National-Teams">National Teams</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Organization">Organization</a>
-
-</div>
-
-<h4 class="subsection">12.4.3 Mailing Lists</h4>
-
- <p>If we get any inquiries about GNU <code>gettext</code>, send them on to:
-
-<pre class="example"> <samp><span class="file">coordinator@translationproject.org</span></samp>
-</pre>
- <p>The <samp><span class="file">*-pretest</span></samp> lists are quite useful to me, maybe the idea could
-be generalized to many GNU, and non-GNU packages. But each maintainer
-his/her way!
-
- <p>Fran&ccedil;ois, we have a mechanism in place here at
-<samp><span class="file">gnu.ai.mit.edu</span></samp> to track teams, support mailing lists for
-them and log members. We have a slight preference that you use it.
-If this is OK with you, I can get you clued in.
-
- <p>Things are changing! A few years ago, when Daniel Fekete and I
-asked for a mailing list for GNU localization, nested at the FSF, we
-were politely invited to organize it anywhere else, and so did we.
-For communicating with my pretesters, I later made a handful of
-mailing lists located at iro.umontreal.ca and administrated by
-<code>majordomo</code>. These lists have been <em>very</em> dependable
-so far<small class="dots">...</small>
-
- <p>I suspect that the German team will organize itself a mailing list
-located in Germany, and so forth for other countries. But before they
-organize for true, it could surely be useful to offer mailing lists
-located at the FSF to each national team. So yes, please explain me
-how I should proceed to create and handle them.
-
- <p>We should create temporary mailing lists, one per country, to help
-people organize. Temporary, because once regrouped and structured, it
-would be fair the volunteers from country bring back <em>their</em> list
-in there and manage it as they want. My feeling is that, in the long
-run, each team should run its own list, from within their country.
-There also should be some central list to which all teams could
-subscribe as they see fit, as long as each team is represented in it.
-
-<div class="node">
-<a name="Information-Flow"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Translating-plural-forms">Translating plural forms</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Organization">Organization</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.5 Information Flow</h3>
-
- <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>There will surely be some discussion about this messages after the
-packages are finally released. If people now send you some proposals
-for better messages, how do you proceed? Jim, please note that
-right now, as I put forward nearly a dozen of localizable programs, I
-receive both the translations and the coordination concerns about them.
-
- <p>If I put one of my things to pretest, Ulrich receives the announcement
-and passes it on to the German team, who make last minute revisions.
-Then he submits the translation files to me <em>as the maintainer</em>.
-For free packages I do not maintain, I would not even hear about it.
-This scheme could be made to work for the whole Translation Project,
-I think. For security reasons, maybe Ulrich (national coordinators,
-in fact) should update central registry kept at the Translation Project
-(Jim, me, or Len's recruits) once in a while.
-
- <p>In December/January, I was aggressively ready to internationalize
-all of GNU, giving myself the duty of one small GNU package per week
-or so, taking many weeks or months for bigger packages. But it does
-not work this way. I first did all the things I'm responsible for.
-I've nothing against some missionary work on other maintainers, but
-I'm also loosing a lot of energy over it&mdash;same debates over again.
-
- <p>And when the first localized packages are released we'll get a lot of
-responses about ugly translations :-). Surely, and we need to have
-beforehand a fairly good idea about how to handle the information
-flow between the national teams and the package maintainers.
-
- <p>Please start saving somewhere a quick history of each PO file. I know
-for sure that the file format will change, allowing for comments.
-It would be nice that each file has a kind of log, and references for
-those who want to submit comments or gripes, or otherwise contribute.
-I sent a proposal for a fast and flexible format, but it is not
-receiving acceptance yet by the GNU deciders. I'll tell you when I
-have more information about this.
-
-<div class="node">
-<a name="Translating-plural-forms"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Prioritizing-messages">Prioritizing messages</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Information-Flow">Information Flow</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.6 Translating plural forms</h3>
-
- <p><a name="index-plural-forms_002c-translating-1111"></a>Suppose you are translating a PO file, and it contains an entry like this:
-
-<pre class="smallexample"> #, c-format
- msgid "One file removed"
- msgid_plural "%d files removed"
- msgstr[0] ""
- msgstr[1] ""
-</pre>
- <p class="noindent">What does this mean? How do you fill it in?
-
- <p>Such an entry denotes a message with plural forms, that is, a message where
-the text depends on a cardinal number. The general form of the message,
-in English, is the <code>msgid_plural</code> line. The <code>msgid</code> line is the
-English singular form, that is, the form for when the number is equal to 1.
-More details about plural forms are explained in <a href="#Plural-forms">Plural forms</a>.
-
- <p>The first thing you need to look at is the <code>Plural-Forms</code> line in the
-header entry of the PO file. It contains the number of plural forms and a
-formula. If the PO file does not yet have such a line, you have to add it.
-It only depends on the language into which you are translating. You can
-get this info by using the <code>msginit</code> command (see <a href="#Creating">Creating</a>) &ndash;
-it contains a database of known plural formulas &ndash; or by asking other
-members of your translation team.
-
- <p>Suppose the line looks as follows:
-
-<pre class="smallexample"> "Plural-Forms: nplurals=3; plural=n%10==1 &amp;&amp; n%100!=11 ? 0 : n%10&gt;=2 &amp;&amp; n"
- "%10&lt;=4 &amp;&amp; (n%100&lt;10 || n%100&gt;=20) ? 1 : 2;\n"
-</pre>
- <p>It's logically one line; recall that the PO file formatting is allowed to
-break long lines so that each physical line fits in 80 monospaced columns.
-
- <p>The value of <code>nplurals</code> here tells you that there are three plural
-forms. The first thing you need to do is to ensure that the entry contains
-an <code>msgstr</code> line for each of the forms:
-
-<pre class="smallexample"> #, c-format
- msgid "One file removed"
- msgid_plural "%d files removed"
- msgstr[0] ""
- msgstr[1] ""
- msgstr[2] ""
-</pre>
- <p>Then translate the <code>msgid_plural</code> line and fill it in into each
-<code>msgstr</code> line:
-
-<pre class="smallexample"> #, c-format
- msgid "One file removed"
- msgid_plural "%d files removed"
- msgstr[0] "%d slika uklonjenih"
- msgstr[1] "%d slika uklonjenih"
- msgstr[2] "%d slika uklonjenih"
-</pre>
- <p>Now you can refine the translation so that it matches the plural form.
-According to the formula above, <code>msgstr[0]</code> is used when the number
-ends in 1 but does not end in 11; <code>msgstr[1]</code> is used when the number
-ends in 2, 3, 4, but not in 12, 13, 14; and <code>msgstr[2]</code> is used in
-all other cases. With this knowledge, you can refine the translations:
-
-<pre class="smallexample"> #, c-format
- msgid "One file removed"
- msgid_plural "%d files removed"
- msgstr[0] "%d slika je uklonjena"
- msgstr[1] "%d datoteke uklonjenih"
- msgstr[2] "%d slika uklonjenih"
-</pre>
- <p>You noticed that in the English singular form (<code>msgid</code>) the number
-placeholder could be omitted and replaced by the numeral word &ldquo;one&rdquo;.
-Can you do this in your translation as well?
-
-<pre class="smallexample"> msgstr[0] "jednom datotekom je uklonjen"
-</pre>
- <p class="noindent">Well, it depends on whether <code>msgstr[0]</code> applies only to the number 1,
-or to other numbers as well. If, according to the plural formula,
-<code>msgstr[0]</code> applies only to <code>n == 1</code>, then you can use the
-specialized translation without the number placeholder. In our case,
-however, <code>msgstr[0]</code> also applies to the numbers 21, 31, 41, etc.,
-and therefore you cannot omit the placeholder.
-
-<div class="node">
-<a name="Prioritizing-messages"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Translating-plural-forms">Translating plural forms</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators">Translators</a>
-
-</div>
-
-<h3 class="section">12.7 Prioritizing messages: How to determine which messages to translate first</h3>
-
- <p>A translator sometimes has only a limited amount of time per week to
-spend on a package, and some packages have quite large message catalogs
-(over 1000 messages). Therefore she wishes to translate the messages
-first that are the most visible to the user, or that occur most frequently.
-This section describes how to determine these "most urgent" messages.
-It also applies to determine the "next most urgent" messages after the
-message catalog has already been partially translated.
-
- <p>In a first step, she uses the programs like a user would do. While she
-does this, the GNU <code>gettext</code> library logs into a file the not yet
-translated messages for which a translation was requested from the program.
-
- <p>In a second step, she uses the PO mode to translate precisely this set
-of messages.
-
- <p><a name="index-GETTEXT_005fLOG_005fUNTRANSLATED_0040r_007b_002c-environment-variable_007d-1112"></a>Here a more details. The GNU <code>libintl</code> library (but not the
-corresponding functions in GNU <code>libc</code>) supports an environment variable
-<code>GETTEXT_LOG_UNTRANSLATED</code>. The GNU <code>libintl</code> library will
-log into this file the messages for which <code>gettext()</code> and related
-functions couldn't find the translation. If the file doesn't exist, it
-will be created as needed. On systems with GNU <code>libc</code> a shared library
-&lsquo;<samp><span class="samp">preloadable_libintl.so</span></samp>&rsquo; is provided that can be used with the ELF
-&lsquo;<samp><span class="samp">LD_PRELOAD</span></samp>&rsquo; mechanism.
-
- <p>So, in the first step, the translator uses these commands on systems with
-GNU <code>libc</code>:
-
-<pre class="smallexample"> $ LD_PRELOAD=/usr/local/lib/preloadable_libintl.so
- $ export LD_PRELOAD
- $ GETTEXT_LOG_UNTRANSLATED=$HOME/gettextlogused
- $ export GETTEXT_LOG_UNTRANSLATED
-</pre>
- <p class="noindent">and these commands on other systems:
-
-<pre class="smallexample"> $ GETTEXT_LOG_UNTRANSLATED=$HOME/gettextlogused
- $ export GETTEXT_LOG_UNTRANSLATED
-</pre>
- <p>Then she uses and peruses the programs. (It is a good and recommended
-practice to use the programs for which you provide translations: it
-gives you the needed context.) When done, she removes the environment
-variables:
-
-<pre class="smallexample"> $ unset LD_PRELOAD
- $ unset GETTEXT_LOG_UNTRANSLATED
-</pre>
- <p>The second step starts with removing duplicates:
-
-<pre class="smallexample"> $ msguniq $HOME/gettextlogused &gt; missing.po
-</pre>
- <p>The result is a PO file, but needs some preprocessing before a PO file editor
-can be used with it. First, it is a multi-domain PO file, containing
-messages from many translation domains. Second, it lacks all translator
-comments and source references. Here is how to get a list of the affected
-translation domains:
-
-<pre class="smallexample"> $ sed -n -e 's,^domain "\(.*\)"$,\1,p' &lt; missing.po | sort | uniq
-</pre>
- <p>Then the translator can handle the domains one by one. For simplicity,
-let's use environment variables to denote the language, domain and source
-package.
-
-<pre class="smallexample"> $ lang=nl # your language
- $ domain=coreutils # the name of the domain to be handled
- $ package=/usr/src/gnu/coreutils-4.5.4 # the package where it comes from
-</pre>
- <p>She takes the latest copy of <samp><span class="file">$lang.po</span></samp> from the Translation Project,
-or from the package (in most cases, <samp><span class="file">$package/po/$lang.po</span></samp>), or
-creates a fresh one if she's the first translator (see <a href="#Creating">Creating</a>).
-She then uses the following commands to mark the not urgent messages as
-"obsolete". (This doesn't mean that these messages - translated and
-untranslated ones - will go away. It simply means that the PO file editor
-will ignore them in the following editing session.)
-
-<pre class="smallexample"> $ msggrep --domain=$domain missing.po | grep -v '^domain' \
- &gt; $domain-missing.po
- $ msgattrib --set-obsolete --ignore-file $domain-missing.po $domain.$lang.po \
- &gt; $domain.$lang-urgent.po
-</pre>
- <p>The she translates <samp><span class="file">$domain.$lang-urgent.po</span></samp> by use of a PO file editor
-(see <a href="#Editing">Editing</a>).
-(FIXME: I don't know whether <code>KBabel</code> and <code>gtranslator</code> also
-preserve obsolete messages, as they should.)
-Finally she restores the not urgent messages (with their earlier
-translations, for those which were already translated) through this command:
-
-<pre class="smallexample"> $ msgmerge --no-fuzzy-matching $domain.$lang-urgent.po $package/po/$domain.pot \
- &gt; $domain.$lang.po
-</pre>
- <p>Then she can submit <samp><span class="file">$domain.$lang.po</span></samp> and proceed to the next domain.
-
-<div class="node">
-<a name="Maintainers"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Installers">Installers</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Translators">Translators</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">13 The Maintainer's View</h2>
-
- <p><a name="index-package-maintainer_0027s-view-of-_0040code_007bgettext_007d-1113"></a>
-The maintainer of a package has many responsibilities. One of them
-is ensuring that the package will install easily on many platforms,
-and that the magic we described earlier (see <a href="#Users">Users</a>) will work
-for installers and end users.
-
- <p>Of course, there are many possible ways by which GNU <code>gettext</code>
-might be integrated in a distribution, and this chapter does not cover
-them in all generality. Instead, it details one possible approach which
-is especially adequate for many free software distributions following GNU
-standards, or even better, Gnits standards, because GNU <code>gettext</code>
-is purposely for helping the internationalization of the whole GNU
-project, and as many other good free packages as possible. So, the
-maintainer's view presented here presumes that the package already has
-a <samp><span class="file">configure.ac</span></samp> file and uses GNU Autoconf.
-
- <p>Nevertheless, GNU <code>gettext</code> may surely be useful for free packages
-not following GNU standards and conventions, but the maintainers of such
-packages might have to show imagination and initiative in organizing
-their distributions so <code>gettext</code> work for them in all situations.
-There are surely many, out there.
-
- <p>Even if <code>gettext</code> methods are now stabilizing, slight adjustments
-might be needed between successive <code>gettext</code> versions, so you
-should ideally revise this chapter in subsequent releases, looking
-for changes.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Flat-and-Non_002dFlat">Flat and Non-Flat</a>: Flat or Non-Flat Directory Structures
-<li><a accesskey="2" href="#Prerequisites">Prerequisites</a>: Prerequisite Works
-<li><a accesskey="3" href="#gettextize-Invocation">gettextize Invocation</a>: Invoking the <code>gettextize</code> Program
-<li><a accesskey="4" href="#Adjusting-Files">Adjusting Files</a>: Files You Must Create or Alter
-<li><a accesskey="5" href="#autoconf-macros">autoconf macros</a>: Autoconf macros for use in <samp><span class="file">configure.ac</span></samp>
-<li><a accesskey="6" href="#CVS-Issues">CVS Issues</a>: Integrating with CVS
-<li><a accesskey="7" href="#Release-Management">Release Management</a>: Creating a Distribution Tarball
-</ul>
-
-<div class="node">
-<a name="Flat-and-Non-Flat"></a>
-<a name="Flat-and-Non_002dFlat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Prerequisites">Prerequisites</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Maintainers">Maintainers</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.1 Flat or Non-Flat Directory Structures</h3>
-
- <p>Some free software packages are distributed as <code>tar</code> files which unpack
-in a single directory, these are said to be <dfn>flat</dfn> distributions.
-Other free software packages have a one level hierarchy of subdirectories, using
-for example a subdirectory named <samp><span class="file">doc/</span></samp> for the Texinfo manual and
-man pages, another called <samp><span class="file">lib/</span></samp> for holding functions meant to
-replace or complement C libraries, and a subdirectory <samp><span class="file">src/</span></samp> for
-holding the proper sources for the package. These other distributions
-are said to be <dfn>non-flat</dfn>.
-
- <p>We cannot say much about flat distributions. A flat
-directory structure has the disadvantage of increasing the difficulty
-of updating to a new version of GNU <code>gettext</code>. Also, if you have
-many PO files, this could somewhat pollute your single directory.
-Also, GNU <code>gettext</code>'s libintl sources consist of C sources, shell
-scripts, <code>sed</code> scripts and complicated Makefile rules, which don't
-fit well into an existing flat structure. For these reasons, we
-recommend to use non-flat approach in this case as well.
-
- <p>Maybe because GNU <code>gettext</code> itself has a non-flat structure,
-we have more experience with this approach, and this is what will be
-described in the remaining of this chapter. Some maintainers might
-use this as an opportunity to unflatten their package structure.
-
-<div class="node">
-<a name="Prerequisites"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gettextize-Invocation">gettextize Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Flat-and-Non_002dFlat">Flat and Non-Flat</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.2 Prerequisite Works</h3>
-
- <p><a name="index-converting-a-package-to-use-_0040code_007bgettext_007d-1114"></a><a name="index-migration-from-earlier-versions-of-_0040code_007bgettext_007d-1115"></a><a name="index-upgrading-to-new-versions-of-_0040code_007bgettext_007d-1116"></a>
-There are some works which are required for using GNU <code>gettext</code>
-in one of your package. These works have some kind of generality
-that escape the point by point descriptions used in the remainder
-of this chapter. So, we describe them here.
-
- <ul>
-<li>Before attempting to use <code>gettextize</code> you should install some
-other packages first.
-Ensure that recent versions of GNU <code>m4</code>, GNU Autoconf and GNU
-<code>gettext</code> are already installed at your site, and if not, proceed
-to do this first. If you get to install these things, beware that
-GNU <code>m4</code> must be fully installed before GNU Autoconf is even
-<em>configured</em>.
-
- <p>To further ease the task of a package maintainer the <code>automake</code>
-package was designed and implemented. GNU <code>gettext</code> now uses this
-tool and the <samp><span class="file">Makefile</span></samp>s in the <samp><span class="file">intl/</span></samp> and <samp><span class="file">po/</span></samp>
-therefore know about all the goals necessary for using <code>automake</code>
-and <samp><span class="file">libintl</span></samp> in one project.
-
- <p>Those four packages are only needed by you, as a maintainer; the
-installers of your own package and end users do not really need any of
-GNU <code>m4</code>, GNU Autoconf, GNU <code>gettext</code>, or GNU <code>automake</code>
-for successfully installing and running your package, with messages
-properly translated. But this is not completely true if you provide
-internationalized shell scripts within your own package: GNU
-<code>gettext</code> shall then be installed at the user site if the end users
-want to see the translation of shell script messages.
-
- <li>Your package should use Autoconf and have a <samp><span class="file">configure.ac</span></samp> or
-<samp><span class="file">configure.in</span></samp> file.
-If it does not, you have to learn how. The Autoconf documentation
-is quite well written, it is a good idea that you print it and get
-familiar with it.
-
- <li>Your C sources should have already been modified according to
-instructions given earlier in this manual. See <a href="#Sources">Sources</a>.
-
- <li>Your <samp><span class="file">po/</span></samp> directory should receive all PO files submitted to you
-by the translator teams, each having <samp><var>ll</var><span class="file">.po</span></samp> as a name.
-This is not usually easy to get translation
-work done before your package gets internationalized and available!
-Since the cycle has to start somewhere, the easiest for the maintainer
-is to start with absolutely no PO files, and wait until various
-translator teams get interested in your package, and submit PO files.
-
- </ul>
-
- <p>It is worth adding here a few words about how the maintainer should
-ideally behave with PO files submissions. As a maintainer, your role is
-to authenticate the origin of the submission as being the representative
-of the appropriate translating teams of the Translation Project (forward
-the submission to <samp><span class="file">coordinator@translationproject.org</span></samp> in case of doubt),
-to ensure that the PO file format is not severely broken and does not
-prevent successful installation, and for the rest, to merely put these
-PO files in <samp><span class="file">po/</span></samp> for distribution.
-
- <p>As a maintainer, you do not have to take on your shoulders the
-responsibility of checking if the translations are adequate or
-complete, and should avoid diving into linguistic matters. Translation
-teams drive themselves and are fully responsible of their linguistic
-choices for the Translation Project. Keep in mind that translator teams are <em>not</em>
-driven by maintainers. You can help by carefully redirecting all
-communications and reports from users about linguistic matters to the
-appropriate translation team, or explain users how to reach or join
-their team. The simplest might be to send them the <samp><span class="file">ABOUT-NLS</span></samp> file.
-
- <p>Maintainers should <em>never ever</em> apply PO file bug reports
-themselves, short-cutting translation teams. If some translator has
-difficulty to get some of her points through her team, it should not be
-an option for her to directly negotiate translations with maintainers.
-Teams ought to settle their problems themselves, if any. If you, as
-a maintainer, ever think there is a real problem with a team, please
-never try to <em>solve</em> a team's problem on your own.
-
-<div class="node">
-<a name="gettextize-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Adjusting-Files">Adjusting Files</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Prerequisites">Prerequisites</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.3 Invoking the <code>gettextize</code> Program</h3>
-
- <p>The <code>gettextize</code> program is an interactive tool that helps the
-maintainer of a package internationalized through GNU <code>gettext</code>.
-It is used for two purposes:
-
- <ul>
-<li>As a wizard, when a package is modified to use GNU <code>gettext</code> for
-the first time.
-
- <li>As a migration tool, for upgrading the GNU <code>gettext</code> support in
-a package from a previous to a newer version of GNU <code>gettext</code>.
-</ul>
-
- <p>This program performs the following tasks:
-
- <ul>
-<li>It copies into the package some files that are consistently and
-identically needed in every package internationalized through
-GNU <code>gettext</code>.
-
- <li>It performs as many of the tasks mentioned in the next section
-<a href="#Adjusting-Files">Adjusting Files</a> as can be performed automatically.
-
- <li>It removes obsolete files and idioms used for previous GNU
-<code>gettext</code> versions to the form recommended for the current GNU
-<code>gettext</code> version.
-
- <li>It prints a summary of the tasks that ought to be done manually
-and could not be done automatically by <code>gettextize</code>.
-</ul>
-
- <p>It can be invoked as follows:
-
- <p><a name="index-gettextize-1117"></a><a name="index-g_t_0040code_007bgettextize_007d-program_002c-usage-1118"></a>
-<pre class="example"> gettextize [ <var>option</var>... ] [ <var>directory</var> ]
-</pre>
- <p class="noindent">and accepts the following options:
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-f</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--force</span></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1119"></a><a name="index-g_t_002d_002dforce_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1120"></a>Force replacement of files which already exist.
-
- <br><dt>&lsquo;<samp><span class="samp">--intl</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dintl_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1121"></a>Install the libintl sources in a subdirectory named <samp><span class="file">intl/</span></samp>.
-This libintl will be used to provide internationalization on systems
-that don't have GNU libintl installed. If this option is omitted,
-the call to <code>AM_GNU_GETTEXT</code> in <samp><span class="file">configure.ac</span></samp> should read:
-&lsquo;<samp><span class="samp">AM_GNU_GETTEXT([external])</span></samp>&rsquo;, and internationalization will not
-be enabled on systems lacking GNU gettext.
-
- <br><dt>&lsquo;<samp><span class="samp">--po-dir=</span><var>dir</var></samp>&rsquo;<dd><a name="index-g_t_002d_002dpo_002ddir_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1122"></a>Specify a directory containing PO files. Such a directory contains the
-translations into various languages of a particular POT file. This
-option can be specified multiple times, once for each translation domain.
-If it is not specified, the directory named <samp><span class="file">po/</span></samp> is updated.
-
- <br><dt>&lsquo;<samp><span class="samp">--no-changelog</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dno_002dchangelog_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1123"></a>Don't update or create ChangeLog files. By default, <code>gettextize</code>
-logs all changes (file additions, modifications and removals) in a
-file called &lsquo;<samp><span class="samp">ChangeLog</span></samp>&rsquo; in each affected directory.
-
- <br><dt>&lsquo;<samp><span class="samp">--symlink</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dsymlink_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1124"></a>Make symbolic links instead of copying the needed files. This can be
-useful to save a few kilobytes of disk space, but it requires extra
-effort to create self-contained tarballs, it may disturb some mechanism
-the maintainer applies to the sources, and it is likely to introduce
-bugs when a newer version of <code>gettext</code> is installed on the system.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--dry-run</span></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1125"></a><a name="index-g_t_002d_002ddry_002drun_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1126"></a>Print modifications but don't perform them. All actions that
-<code>gettextize</code> would normally execute are inhibited and instead only
-listed on standard output.
-
- <br><dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1127"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1128"></a>Output version information and exit.
-
- </dl>
-
- <p>If <var>directory</var> is given, this is the top level directory of a
-package to prepare for using GNU <code>gettext</code>. If not given, it
-is assumed that the current directory is the top level directory of
-such a package.
-
- <p>The program <code>gettextize</code> provides the following files. However,
-no existing file will be replaced unless the option <code>--force</code>
-(<code>-f</code>) is specified.
-
- <ol type=1 start=1>
-<li>The <samp><span class="file">ABOUT-NLS</span></samp> file is copied in the main directory of your package,
-the one being at the top level. This file gives the main indications
-about how to install and use the Native Language Support features
-of your program. You might elect to use a more recent copy of this
-<samp><span class="file">ABOUT-NLS</span></samp> file than the one provided through <code>gettextize</code>,
-if you have one handy. You may also fetch a more recent copy of file
-<samp><span class="file">ABOUT-NLS</span></samp> from Translation Project sites, and from most GNU
-archive sites.
-
- <li>A <samp><span class="file">po/</span></samp> directory is created for eventually holding
-all translation files, but initially only containing the file
-<samp><span class="file">po/Makefile.in.in</span></samp> from the GNU <code>gettext</code> distribution
-(beware the double &lsquo;<samp><span class="samp">.in</span></samp>&rsquo; in the file name) and a few auxiliary
-files. If the <samp><span class="file">po/</span></samp> directory already exists, it will be preserved
-along with the files it contains, and only <samp><span class="file">Makefile.in.in</span></samp> and
-the auxiliary files will be overwritten.
-
- <p>If &lsquo;<samp><span class="samp">--po-dir</span></samp>&rsquo; has been specified, this holds for every directory
-specified through &lsquo;<samp><span class="samp">--po-dir</span></samp>&rsquo;, instead of <samp><span class="file">po/</span></samp>.
-
- <li>Only if &lsquo;<samp><span class="samp">--intl</span></samp>&rsquo; has been specified:
-A <samp><span class="file">intl/</span></samp> directory is created and filled with most of the files
-originally in the <samp><span class="file">intl/</span></samp> directory of the GNU <code>gettext</code>
-distribution. Also, if option <code>--force</code> (<code>-f</code>) is given,
-the <samp><span class="file">intl/</span></samp> directory is emptied first.
-
- <li>The file <samp><span class="file">config.rpath</span></samp> is copied into the directory containing
-configuration support files. It is needed by the <code>AM_GNU_GETTEXT</code>
-autoconf macro.
-
- <li>Only if the project is using GNU <code>automake</code>:
-A set of <code>autoconf</code> macro files is copied into the package's
-<code>autoconf</code> macro repository, usually in a directory called <samp><span class="file">m4/</span></samp>.
- </ol>
-
- <p>If your site support symbolic links, <code>gettextize</code> will not
-actually copy the files into your package, but establish symbolic
-links instead. This avoids duplicating the disk space needed in
-all packages. Merely using the &lsquo;<samp><span class="samp">-h</span></samp>&rsquo; option while creating the
-<code>tar</code> archive of your distribution will resolve each link by an
-actual copy in the distribution archive. So, to insist, you really
-should use &lsquo;<samp><span class="samp">-h</span></samp>&rsquo; option with <code>tar</code> within your <code>dist</code>
-goal of your main <samp><span class="file">Makefile.in</span></samp>.
-
- <p>Furthermore, <code>gettextize</code> will update all <samp><span class="file">Makefile.am</span></samp> files
-in each affected directory, as well as the top level <samp><span class="file">configure.ac</span></samp>
-or <samp><span class="file">configure.in</span></samp> file.
-
- <p>It is interesting to understand that most new files for supporting
-GNU <code>gettext</code> facilities in one package go in <samp><span class="file">intl/</span></samp>,
-<samp><span class="file">po/</span></samp> and <samp><span class="file">m4/</span></samp> subdirectories. One distinction between
-<samp><span class="file">intl/</span></samp> and the two other directories is that <samp><span class="file">intl/</span></samp> is
-meant to be completely identical in all packages using GNU <code>gettext</code>,
-while the other directories will mostly contain package dependent
-files.
-
- <p>The <code>gettextize</code> program makes backup files for all files it
-replaces or changes, and also write ChangeLog entries about these
-changes. This way, the careful maintainer can check after running
-<code>gettextize</code> whether its changes are acceptable to him, and
-possibly adjust them. An exception to this rule is the <samp><span class="file">intl/</span></samp>
-directory, which is added or replaced or removed as a whole.
-
- <p>It is important to understand that <code>gettextize</code> can not do the
-entire job of adapting a package for using GNU <code>gettext</code>. The
-amount of remaining work depends on whether the package uses GNU
-<code>automake</code> or not. But in any case, the maintainer should still
-read the section <a href="#Adjusting-Files">Adjusting Files</a> after invoking <code>gettextize</code>.
-
- <p>In particular, if after using &lsquo;<samp><span class="samp">gettexize</span></samp>&rsquo;, you get an error
-&lsquo;<samp><span class="samp">AC_COMPILE_IFELSE was called before AC_GNU_SOURCE</span></samp>&rsquo; or
-&lsquo;<samp><span class="samp">AC_RUN_IFELSE was called before AC_GNU_SOURCE</span></samp>&rsquo;, you can fix it
-by modifying <samp><span class="file">configure.ac</span></samp>, as described in <a href="#configure_002eac">configure.ac</a>.
-
- <p>It is also important to understand that <code>gettextize</code> is not part
-of the GNU build system, in the sense that it should not be invoked
-automatically, and not be invoked by someone who doesn't assume the
-responsibilities of a package maintainer. For the latter purpose, a
-separate tool is provided, see <a href="#autopoint-Invocation">autopoint Invocation</a>.
-
-<div class="node">
-<a name="Adjusting-Files"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#autoconf-macros">autoconf macros</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gettextize-Invocation">gettextize Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.4 Files You Must Create or Alter</h3>
-
- <p><a name="index-g_t_0040code_007bgettext_007d-files-1129"></a>
-Besides files which are automatically added through <code>gettextize</code>,
-there are many files needing revision for properly interacting with
-GNU <code>gettext</code>. If you are closely following GNU standards for
-Makefile engineering and auto-configuration, the adaptations should
-be easier to achieve. Here is a point by point description of the
-changes needed in each.
-
- <p>So, here comes a list of files, each one followed by a description of
-all alterations it needs. Many examples are taken out from the GNU
-<code>gettext</code> 0.18 distribution itself, or from the GNU
-<code>hello</code> distribution (<a href="http://www.franken.de/users/gnu/ke/hello">http://www.franken.de/users/gnu/ke/hello</a>
-or <a href="http://www.gnu.franken.de/ke/hello/">http://www.gnu.franken.de/ke/hello/</a>) You may indeed
-refer to the source code of the GNU <code>gettext</code> and GNU <code>hello</code>
-packages, as they are intended to be good examples for using GNU
-gettext functionality.
-
-<ul class="menu">
-<li><a accesskey="1" href="#po_002fPOTFILES_002ein">po/POTFILES.in</a>: <samp><span class="file">POTFILES.in</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a accesskey="2" href="#po_002fLINGUAS">po/LINGUAS</a>: <samp><span class="file">LINGUAS</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a accesskey="3" href="#po_002fMakevars">po/Makevars</a>: <samp><span class="file">Makevars</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a accesskey="4" href="#po_002fRules_002d_002a">po/Rules-*</a>: Extending <samp><span class="file">Makefile</span></samp> in <samp><span class="file">po/</span></samp>
-<li><a accesskey="5" href="#configure_002eac">configure.ac</a>: <samp><span class="file">configure.ac</span></samp> at top level
-<li><a accesskey="6" href="#config_002eguess">config.guess</a>: <samp><span class="file">config.guess</span></samp>, <samp><span class="file">config.sub</span></samp> at top level
-<li><a accesskey="7" href="#mkinstalldirs">mkinstalldirs</a>: <samp><span class="file">mkinstalldirs</span></samp> at top level
-<li><a accesskey="8" href="#aclocal">aclocal</a>: <samp><span class="file">aclocal.m4</span></samp> at top level
-<li><a accesskey="9" href="#acconfig">acconfig</a>: <samp><span class="file">acconfig.h</span></samp> at top level
-<li><a href="#config_002eh_002ein">config.h.in</a>: <samp><span class="file">config.h.in</span></samp> at top level
-<li><a href="#Makefile">Makefile</a>: <samp><span class="file">Makefile.in</span></samp> at top level
-<li><a href="#src_002fMakefile">src/Makefile</a>: <samp><span class="file">Makefile.in</span></samp> in <samp><span class="file">src/</span></samp>
-<li><a href="#lib_002fgettext_002eh">lib/gettext.h</a>: <samp><span class="file">gettext.h</span></samp> in <samp><span class="file">lib/</span></samp>
-</ul>
-
-<div class="node">
-<a name="po%2fPOTFILES.in"></a>
-<a name="po_002fPOTFILES_002ein"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#po_002fLINGUAS">po/LINGUAS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Adjusting-Files">Adjusting Files</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.1 <samp><span class="file">POTFILES.in</span></samp> in <samp><span class="file">po/</span></samp></h4>
-
- <p><a name="index-g_t_0040file_007bPOTFILES_002ein_007d-file-1130"></a>
-The <samp><span class="file">po/</span></samp> directory should receive a file named
-<samp><span class="file">POTFILES.in</span></samp>. This file tells which files, among all program
-sources, have marked strings needing translation. Here is an example
-of such a file:
-
-<pre class="example"> # List of source files containing translatable strings.
- # Copyright (C) 1995 Free Software Foundation, Inc.
-
- # Common library files
- lib/error.c
- lib/getopt.c
- lib/xmalloc.c
-
- # Package source files
- src/gettext.c
- src/msgfmt.c
- src/xgettext.c
-</pre>
- <p class="noindent">Hash-marked comments and white lines are ignored. All other lines
-list those source files containing strings marked for translation
-(see <a href="#Mark-Keywords">Mark Keywords</a>), in a notation relative to the top level
-of your whole distribution, rather than the location of the
-<samp><span class="file">POTFILES.in</span></samp> file itself.
-
- <p>When a C file is automatically generated by a tool, like <code>flex</code> or
-<code>bison</code>, that doesn't introduce translatable strings by itself,
-it is recommended to list in <samp><span class="file">po/POTFILES.in</span></samp> the real source file
-(ending in <samp><span class="file">.l</span></samp> in the case of <code>flex</code>, or in <samp><span class="file">.y</span></samp> in the
-case of <code>bison</code>), not the generated C file.
-
-<div class="node">
-<a name="po%2fLINGUAS"></a>
-<a name="po_002fLINGUAS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#po_002fMakevars">po/Makevars</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#po_002fPOTFILES_002ein">po/POTFILES.in</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.2 <samp><span class="file">LINGUAS</span></samp> in <samp><span class="file">po/</span></samp></h4>
-
- <p><a name="index-g_t_0040file_007bLINGUAS_007d-file-1131"></a>
-The <samp><span class="file">po/</span></samp> directory should also receive a file named
-<samp><span class="file">LINGUAS</span></samp>. This file contains the list of available translations.
-It is a whitespace separated list. Hash-marked comments and white lines
-are ignored. Here is an example file:
-
-<pre class="example"> # Set of available languages.
- de fr
-</pre>
- <p class="noindent">This example means that German and French PO files are available, so
-that these languages are currently supported by your package. If you
-want to further restrict, at installation time, the set of installed
-languages, this should not be done by modifying the <samp><span class="file">LINGUAS</span></samp> file,
-but rather by using the <code>LINGUAS</code> environment variable
-(see <a href="#Installers">Installers</a>).
-
- <p>It is recommended that you add the "languages" &lsquo;<samp><span class="samp">en@quot</span></samp>&rsquo; and
-&lsquo;<samp><span class="samp">en@boldquot</span></samp>&rsquo; to the <code>LINGUAS</code> file. <code>en@quot</code> is a
-variant of English message catalogs (<code>en</code>) which uses real quotation
-marks instead of the ugly looking asymmetric ASCII substitutes &lsquo;<samp><span class="samp">`</span></samp>&rsquo;
-and &lsquo;<samp><span class="samp">'</span></samp>&rsquo;. <code>en@boldquot</code> is a variant of <code>en@quot</code> that
-additionally outputs quoted pieces of text in a bold font, when used in
-a terminal emulator which supports the VT100 escape sequences (such as
-<code>xterm</code> or the Linux console, but not Emacs in <kbd>M-x shell</kbd> mode).
-
- <p>These extra message catalogs &lsquo;<samp><span class="samp">en@quot</span></samp>&rsquo; and &lsquo;<samp><span class="samp">en@boldquot</span></samp>&rsquo;
-are constructed automatically, not by translators; to support them, you
-need the files <samp><span class="file">Rules-quot</span></samp>, <samp><span class="file">quot.sed</span></samp>, <samp><span class="file">boldquot.sed</span></samp>,
-<samp><span class="file">en@quot.header</span></samp>, <samp><span class="file">en@boldquot.header</span></samp>, <samp><span class="file">insert-header.sin</span></samp>
-in the <samp><span class="file">po/</span></samp> directory. You can copy them from GNU gettext's <samp><span class="file">po/</span></samp>
-directory; they are also installed by running <code>gettextize</code>.
-
-<div class="node">
-<a name="po%2fMakevars"></a>
-<a name="po_002fMakevars"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#po_002fRules_002d_002a">po/Rules-*</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#po_002fLINGUAS">po/LINGUAS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.3 <samp><span class="file">Makevars</span></samp> in <samp><span class="file">po/</span></samp></h4>
-
- <p><a name="index-g_t_0040file_007bMakevars_007d-file-1132"></a>
-The <samp><span class="file">po/</span></samp> directory also has a file named <samp><span class="file">Makevars</span></samp>. It
-contains variables that are specific to your project. <samp><span class="file">po/Makevars</span></samp>
-gets inserted into the <samp><span class="file">po/Makefile</span></samp> when the latter is created.
-The variables thus take effect when the POT file is created or updated,
-and when the message catalogs get installed.
-
- <p>The first three variables can be left unmodified if your package has a
-single message domain and, accordingly, a single <samp><span class="file">po/</span></samp> directory.
-Only packages which have multiple <samp><span class="file">po/</span></samp> directories at different
-locations need to adjust the three first variables defined in
-<samp><span class="file">Makevars</span></samp>.
-
- <p>As an alternative to the <code>XGETTEXT_OPTIONS</code> variables, it is also
-possible to specify <code>xgettext</code> options through the
-<code>AM_XGETTEXT_OPTION</code> autoconf macro. See <a href="#AM_005fXGETTEXT_005fOPTION">AM_XGETTEXT_OPTION</a>.
-
-<div class="node">
-<a name="po%2fRules-*"></a>
-<a name="po_002fRules_002d_002a"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#configure_002eac">configure.ac</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#po_002fMakevars">po/Makevars</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.4 Extending <samp><span class="file">Makefile</span></samp> in <samp><span class="file">po/</span></samp></h4>
-
- <p><a name="index-g_t_0040file_007bMakefile_002ein_002ein_007d-extensions-1133"></a>
-All files called <samp><span class="file">Rules-*</span></samp> in the <samp><span class="file">po/</span></samp> directory get appended to
-the <samp><span class="file">po/Makefile</span></samp> when it is created. They present an opportunity to
-add rules for special PO files to the Makefile, without needing to mess
-with <samp><span class="file">po/Makefile.in.in</span></samp>.
-
- <p><a name="index-quotation-marks-1134"></a><a name="index-LANGUAGE_0040r_007b_002c-environment-variable_007d-1135"></a>GNU gettext comes with a <samp><span class="file">Rules-quot</span></samp> file, containing rules for
-building catalogs <samp><span class="file">en@quot.po</span></samp> and <samp><span class="file">en@boldquot.po</span></samp>. The
-effect of <samp><span class="file">en@quot.po</span></samp> is that people who set their <code>LANGUAGE</code>
-environment variable to &lsquo;<samp><span class="samp">en@quot</span></samp>&rsquo; will get messages with proper
-looking symmetric Unicode quotation marks instead of abusing the ASCII
-grave accent and the ASCII apostrophe for indicating quotations. To
-enable this catalog, simply add <code>en@quot</code> to the <samp><span class="file">po/LINGUAS</span></samp>
-file. The effect of <samp><span class="file">en@boldquot.po</span></samp> is that people who set
-<code>LANGUAGE</code> to &lsquo;<samp><span class="samp">en@boldquot</span></samp>&rsquo; will get not only proper quotation
-marks, but also the quoted text will be shown in a bold font on terminals
-and consoles. This catalog is useful only for command-line programs, not
-GUI programs. To enable it, similarly add <code>en@boldquot</code> to the
-<samp><span class="file">po/LINGUAS</span></samp> file.
-
- <p>Similarly, you can create rules for building message catalogs for the
-<samp><span class="file">sr@latin</span></samp> locale &ndash; Serbian written with the Latin alphabet &ndash;
-from those for the <samp><span class="file">sr</span></samp> locale &ndash; Serbian written with Cyrillic
-letters. See <a href="#msgfilter-Invocation">msgfilter Invocation</a>.
-
-<div class="node">
-<a name="configure.ac"></a>
-<a name="configure_002eac"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#config_002eguess">config.guess</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#po_002fRules_002d_002a">po/Rules-*</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.5 <samp><span class="file">configure.ac</span></samp> at top level</h4>
-
- <p><samp><span class="file">configure.ac</span></samp> or <samp><span class="file">configure.in</span></samp> - this is the source from which
-<code>autoconf</code> generates the <samp><span class="file">configure</span></samp> script.
-
- <ol type=1 start=1>
-<li>Declare the package and version.
-<a name="index-package-and-version-declaration-in-_0040file_007bconfigure_002eac_007d-1136"></a>
-This is done by a set of lines like these:
-
- <pre class="example"> PACKAGE=gettext
- VERSION=0.18
- AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
- AC_SUBST(PACKAGE)
- AC_SUBST(VERSION)
-</pre>
- <p class="noindent">or, if you are using GNU <code>automake</code>, by a line like this:
-
- <pre class="example"> AM_INIT_AUTOMAKE(gettext, 0.18)
-</pre>
- <p class="noindent">Of course, you replace &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; with the name of your package,
-and &lsquo;<samp><span class="samp">0.18</span></samp>&rsquo; by its version numbers, exactly as they
-should appear in the packaged <code>tar</code> file name of your distribution
-(<samp><span class="file">gettext-0.18.tar.gz</span></samp>, here).
-
- <li>Check for internationalization support.
-
- <p>Here is the main <code>m4</code> macro for triggering internationalization
-support. Just add this line to <samp><span class="file">configure.ac</span></samp>:
-
- <pre class="example"> AM_GNU_GETTEXT
-</pre>
- <p class="noindent">This call is purposely simple, even if it generates a lot of configure
-time checking and actions.
-
- <p>If you have suppressed the <samp><span class="file">intl/</span></samp> subdirectory by calling
-<code>gettextize</code> without &lsquo;<samp><span class="samp">--intl</span></samp>&rsquo; option, this call should read
-
- <pre class="example"> AM_GNU_GETTEXT([external])
-</pre>
- <li>Have output files created.
-
- <p>The <code>AC_OUTPUT</code> directive, at the end of your <samp><span class="file">configure.ac</span></samp>
-file, needs to be modified in two ways:
-
- <pre class="example"> AC_OUTPUT([<var>existing configuration files</var> intl/Makefile po/Makefile.in],
- [<var>existing additional actions</var>])
-</pre>
- <p>The modification to the first argument to <code>AC_OUTPUT</code> asks
-for substitution in the <samp><span class="file">intl/</span></samp> and <samp><span class="file">po/</span></samp> directories.
-Note the &lsquo;<samp><span class="samp">.in</span></samp>&rsquo; suffix used for <samp><span class="file">po/</span></samp> only. This is because
-the distributed file is really <samp><span class="file">po/Makefile.in.in</span></samp>.
-
- <p>If you have suppressed the <samp><span class="file">intl/</span></samp> subdirectory by calling
-<code>gettextize</code> without &lsquo;<samp><span class="samp">--intl</span></samp>&rsquo; option, then you don't need to
-add <code>intl/Makefile</code> to the <code>AC_OUTPUT</code> line.
-
- </ol>
-
- <p>If, after doing the recommended modifications, a command like
-&lsquo;<samp><span class="samp">aclocal -I m4</span></samp>&rsquo; or &lsquo;<samp><span class="samp">autoconf</span></samp>&rsquo; or &lsquo;<samp><span class="samp">autoreconf</span></samp>&rsquo; fails with
-a trace similar to this:
-
-<pre class="smallexample"> configure.ac:44: warning: AC_COMPILE_IFELSE was called before AC_GNU_SOURCE
- ../../lib/autoconf/specific.m4:335: AC_GNU_SOURCE is expanded from...
- m4/lock.m4:224: gl_LOCK is expanded from...
- m4/gettext.m4:571: gt_INTL_SUBDIR_CORE is expanded from...
- m4/gettext.m4:472: AM_INTL_SUBDIR is expanded from...
- m4/gettext.m4:347: AM_GNU_GETTEXT is expanded from...
- configure.ac:44: the top level
- configure.ac:44: warning: AC_RUN_IFELSE was called before AC_GNU_SOURCE
-</pre>
- <p class="noindent">you need to add an explicit invocation of &lsquo;<samp><span class="samp">AC_GNU_SOURCE</span></samp>&rsquo; in the
-<samp><span class="file">configure.ac</span></samp> file - after &lsquo;<samp><span class="samp">AC_PROG_CC</span></samp>&rsquo; but before
-&lsquo;<samp><span class="samp">AM_GNU_GETTEXT</span></samp>&rsquo;, most likely very close to the &lsquo;<samp><span class="samp">AC_PROG_CC</span></samp>&rsquo;
-invocation. This is necessary because of ordering restrictions imposed
-by GNU autoconf.
-
-<div class="node">
-<a name="config.guess"></a>
-<a name="config_002eguess"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#mkinstalldirs">mkinstalldirs</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#configure_002eac">configure.ac</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.6 <samp><span class="file">config.guess</span></samp>, <samp><span class="file">config.sub</span></samp> at top level</h4>
-
- <p>If you haven't suppressed the <samp><span class="file">intl/</span></samp> subdirectory,
-you need to add the GNU <samp><span class="file">config.guess</span></samp> and <samp><span class="file">config.sub</span></samp> files
-to your distribution. They are needed because the <samp><span class="file">intl/</span></samp> directory
-has platform dependent support for determining the locale's character
-encoding and therefore needs to identify the platform.
-
- <p>You can obtain the newest version of <samp><span class="file">config.guess</span></samp> and
-<samp><span class="file">config.sub</span></samp> from the CVS of the &lsquo;<samp><span class="samp">config</span></samp>&rsquo; project at
-<samp><span class="file">http://savannah.gnu.org/</span></samp>. The commands to fetch them are
-<pre class="smallexample"> $ wget 'http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess'
- $ wget 'http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub'
-</pre>
- <p class="noindent">Less recent versions are also contained in the GNU <code>automake</code> and
-GNU <code>libtool</code> packages.
-
- <p>Normally, <samp><span class="file">config.guess</span></samp> and <samp><span class="file">config.sub</span></samp> are put at the
-top level of a distribution. But it is also possible to put them in a
-subdirectory, altogether with other configuration support files like
-<samp><span class="file">install-sh</span></samp>, <samp><span class="file">ltconfig</span></samp>, <samp><span class="file">ltmain.sh</span></samp> or <samp><span class="file">missing</span></samp>.
-All you need to do, other than moving the files, is to add the following line
-to your <samp><span class="file">configure.ac</span></samp>.
-
-<pre class="example"> AC_CONFIG_AUX_DIR([<var>subdir</var>])
-</pre>
- <div class="node">
-<a name="mkinstalldirs"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#aclocal">aclocal</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#config_002eguess">config.guess</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.7 <samp><span class="file">mkinstalldirs</span></samp> at top level</h4>
-
- <p><a name="index-g_t_0040file_007bmkinstalldirs_007d-file-1137"></a>
-With earlier versions of GNU gettext, you needed to add the GNU
-<samp><span class="file">mkinstalldirs</span></samp> script to your distribution. This is not needed any
-more. You can remove it if you not also using an automake version older than
-automake 1.9.
-
-<div class="node">
-<a name="aclocal"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#acconfig">acconfig</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#mkinstalldirs">mkinstalldirs</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.8 <samp><span class="file">aclocal.m4</span></samp> at top level</h4>
-
- <p><a name="index-g_t_0040file_007baclocal_002em4_007d-file-1138"></a>
-If you do not have an <samp><span class="file">aclocal.m4</span></samp> file in your distribution,
-the simplest is to concatenate the files <samp><span class="file">codeset.m4</span></samp>, <samp><span class="file">fcntl-o.m4</span></samp>,
-<samp><span class="file">gettext.m4</span></samp>, <samp><span class="file">glibc2.m4</span></samp>, <samp><span class="file">glibc21.m4</span></samp>, <samp><span class="file">iconv.m4</span></samp>,
-<samp><span class="file">intdiv0.m4</span></samp>, <samp><span class="file">intl.m4</span></samp>, <samp><span class="file">intldir.m4</span></samp>, <samp><span class="file">intlmacosx.m4</span></samp>,
-<samp><span class="file">intmax.m4</span></samp>, <samp><span class="file">inttypes_h.m4</span></samp>, <samp><span class="file">inttypes-pri.m4</span></samp>,
-<samp><span class="file">lcmessage.m4</span></samp>, <samp><span class="file">lib-ld.m4</span></samp>, <samp><span class="file">lib-link.m4</span></samp>,
-<samp><span class="file">lib-prefix.m4</span></samp>, <samp><span class="file">lock.m4</span></samp>, <samp><span class="file">longlong.m4</span></samp>, <samp><span class="file">nls.m4</span></samp>,
-<samp><span class="file">po.m4</span></samp>, <samp><span class="file">printf-posix.m4</span></samp>, <samp><span class="file">progtest.m4</span></samp>, <samp><span class="file">size_max.m4</span></samp>,
-<samp><span class="file">stdint_h.m4</span></samp>, <samp><span class="file">threadlib.m4</span></samp>, <samp><span class="file">uintmax_t.m4</span></samp>,
-<samp><span class="file">visibility.m4</span></samp>, <samp><span class="file">wchar_t.m4</span></samp>, <samp><span class="file">wint_t.m4</span></samp>, <samp><span class="file">xsize.m4</span></samp>
-from GNU <code>gettext</code>'s
-<samp><span class="file">m4/</span></samp> directory into a single file. If you have suppressed the
-<samp><span class="file">intl/</span></samp> directory, only <samp><span class="file">gettext.m4</span></samp>, <samp><span class="file">iconv.m4</span></samp>,
-<samp><span class="file">lib-ld.m4</span></samp>, <samp><span class="file">lib-link.m4</span></samp>, <samp><span class="file">lib-prefix.m4</span></samp>,
-<samp><span class="file">nls.m4</span></samp>, <samp><span class="file">po.m4</span></samp>, <samp><span class="file">progtest.m4</span></samp> need to be concatenated.
-
- <p>If you are not using GNU <code>automake</code> 1.8 or newer, you will need to
-add a file <samp><span class="file">mkdirp.m4</span></samp> from a newer automake distribution to the
-list of files above.
-
- <p>If you already have an <samp><span class="file">aclocal.m4</span></samp> file, then you will have
-to merge the said macro files into your <samp><span class="file">aclocal.m4</span></samp>. Note that if
-you are upgrading from a previous release of GNU <code>gettext</code>, you
-should most probably <em>replace</em> the macros (<code>AM_GNU_GETTEXT</code>,
-etc.), as they usually
-change a little from one release of GNU <code>gettext</code> to the next.
-Their contents may vary as we get more experience with strange systems
-out there.
-
- <p>If you are using GNU <code>automake</code> 1.5 or newer, it is enough to put
-these macro files into a subdirectory named <samp><span class="file">m4/</span></samp> and add the line
-
-<pre class="example"> ACLOCAL_AMFLAGS = -I m4
-</pre>
- <p class="noindent">to your top level <samp><span class="file">Makefile.am</span></samp>.
-
- <p>These macros check for the internationalization support functions
-and related informations. Hopefully, once stabilized, these macros
-might be integrated in the standard Autoconf set, because this
-piece of <code>m4</code> code will be the same for all projects using GNU
-<code>gettext</code>.
-
-<div class="node">
-<a name="acconfig"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#config_002eh_002ein">config.h.in</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#aclocal">aclocal</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.9 <samp><span class="file">acconfig.h</span></samp> at top level</h4>
-
- <p><a name="index-g_t_0040file_007bacconfig_002eh_007d-file-1139"></a>
-Earlier GNU <code>gettext</code> releases required to put definitions for
-<code>ENABLE_NLS</code>, <code>HAVE_GETTEXT</code> and <code>HAVE_LC_MESSAGES</code>,
-<code>HAVE_STPCPY</code>, <code>PACKAGE</code> and <code>VERSION</code> into an
-<samp><span class="file">acconfig.h</span></samp> file. This is not needed any more; you can remove
-them from your <samp><span class="file">acconfig.h</span></samp> file unless your package uses them
-independently from the <samp><span class="file">intl/</span></samp> directory.
-
-<div class="node">
-<a name="config.h.in"></a>
-<a name="config_002eh_002ein"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Makefile">Makefile</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#acconfig">acconfig</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.10 <samp><span class="file">config.h.in</span></samp> at top level</h4>
-
- <p><a name="index-g_t_0040file_007bconfig_002eh_002ein_007d-file-1140"></a>
-The include file template that holds the C macros to be defined by
-<code>configure</code> is usually called <samp><span class="file">config.h.in</span></samp> and may be
-maintained either manually or automatically.
-
- <p>If <code>gettextize</code> has created an <samp><span class="file">intl/</span></samp> directory, this file
-must be called <samp><span class="file">config.h.in</span></samp> and must be at the top level. If,
-however, you have suppressed the <samp><span class="file">intl/</span></samp> directory by calling
-<code>gettextize</code> without &lsquo;<samp><span class="samp">--intl</span></samp>&rsquo; option, then you can choose the
-name of this file and its location freely.
-
- <p>If it is maintained automatically, by use of the &lsquo;<samp><span class="samp">autoheader</span></samp>&rsquo;
-program, you need to do nothing about it. This is the case in particular
-if you are using GNU <code>automake</code>.
-
- <p>If it is maintained manually, and if <code>gettextize</code> has created an
-<samp><span class="file">intl/</span></samp> directory, you should switch to using &lsquo;<samp><span class="samp">autoheader</span></samp>&rsquo;.
-The list of C macros to be added for the sake of the <samp><span class="file">intl/</span></samp>
-directory is just too long to be maintained manually; it also changes
-between different versions of GNU <code>gettext</code>.
-
- <p>If it is maintained manually, and if on the other hand you have
-suppressed the <samp><span class="file">intl/</span></samp> directory by calling <code>gettextize</code>
-without &lsquo;<samp><span class="samp">--intl</span></samp>&rsquo; option, then you can get away by adding the
-following lines to <samp><span class="file">config.h.in</span></samp>:
-
-<pre class="example"> /* Define to 1 if translation of program messages to the user's
- native language is requested. */
- #undef ENABLE_NLS
-</pre>
- <div class="node">
-<a name="Makefile"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#src_002fMakefile">src/Makefile</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#config_002eh_002ein">config.h.in</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.11 <samp><span class="file">Makefile.in</span></samp> at top level</h4>
-
- <p>Here are a few modifications you need to make to your main, top-level
-<samp><span class="file">Makefile.in</span></samp> file.
-
- <ol type=1 start=1>
-<li>Add the following lines near the beginning of your <samp><span class="file">Makefile.in</span></samp>,
-so the &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal will work properly (as explained further down):
-
- <pre class="example"> PACKAGE = @PACKAGE@
- VERSION = @VERSION@
-</pre>
- <li>Add file <samp><span class="file">ABOUT-NLS</span></samp> to the <code>DISTFILES</code> definition, so the file gets
-distributed.
-
- <li>Wherever you process subdirectories in your <samp><span class="file">Makefile.in</span></samp>, be sure
-you also process the subdirectories &lsquo;<samp><span class="samp">intl</span></samp>&rsquo; and &lsquo;<samp><span class="samp">po</span></samp>&rsquo;. Special
-rules in the <samp><span class="file">Makefiles</span></samp> take care for the case where no
-internationalization is wanted.
-
- <p>If you are using Makefiles, either generated by automake, or hand-written
-so they carefully follow the GNU coding standards, the effected goals for
-which the new subdirectories must be handled include &lsquo;<samp><span class="samp">installdirs</span></samp>&rsquo;,
-&lsquo;<samp><span class="samp">install</span></samp>&rsquo;, &lsquo;<samp><span class="samp">uninstall</span></samp>&rsquo;, &lsquo;<samp><span class="samp">clean</span></samp>&rsquo;, &lsquo;<samp><span class="samp">distclean</span></samp>&rsquo;.
-
- <p>Here is an example of a canonical order of processing. In this
-example, we also define <code>SUBDIRS</code> in <code>Makefile.in</code> for it
-to be further used in the &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal.
-
- <pre class="example"> SUBDIRS = doc intl lib src po
-</pre>
- <p>Note that you must arrange for &lsquo;<samp><span class="samp">make</span></samp>&rsquo; to descend into the
-<code>intl</code> directory before descending into other directories containing
-code which make use of the <code>libintl.h</code> header file. For this
-reason, here we mention <code>intl</code> before <code>lib</code> and <code>src</code>.
-
- <li>A delicate point is the &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal, as both
-<samp><span class="file">intl/Makefile</span></samp> and <samp><span class="file">po/Makefile</span></samp> will later assume that the
-proper directory has been set up from the main <samp><span class="file">Makefile</span></samp>. Here is
-an example at what the &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal might look like:
-
- <pre class="example"> distdir = $(PACKAGE)-$(VERSION)
- dist: Makefile
- rm -fr $(distdir)
- mkdir $(distdir)
- chmod 777 $(distdir)
- for file in $(DISTFILES); do \
- ln $$file $(distdir) 2&gt;/dev/null || cp -p $$file $(distdir); \
- done
- for subdir in $(SUBDIRS); do \
- mkdir $(distdir)/$$subdir || exit 1; \
- chmod 777 $(distdir)/$$subdir; \
- (cd $$subdir &amp;&amp; $(MAKE) $@) || exit 1; \
- done
- tar chozf $(distdir).tar.gz $(distdir)
- rm -fr $(distdir)
-</pre>
- </ol>
-
- <p>Note that if you are using GNU <code>automake</code>, <samp><span class="file">Makefile.in</span></samp> is
-automatically generated from <samp><span class="file">Makefile.am</span></samp>, and all needed changes
-to <samp><span class="file">Makefile.am</span></samp> are already made by running &lsquo;<samp><span class="samp">gettextize</span></samp>&rsquo;.
-
-<div class="node">
-<a name="src%2fMakefile"></a>
-<a name="src_002fMakefile"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#lib_002fgettext_002eh">lib/gettext.h</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Makefile">Makefile</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.12 <samp><span class="file">Makefile.in</span></samp> in <samp><span class="file">src/</span></samp></h4>
-
- <p>Some of the modifications made in the main <samp><span class="file">Makefile.in</span></samp> will
-also be needed in the <samp><span class="file">Makefile.in</span></samp> from your package sources,
-which we assume here to be in the <samp><span class="file">src/</span></samp> subdirectory. Here are
-all the modifications needed in <samp><span class="file">src/Makefile.in</span></samp>:
-
- <ol type=1 start=1>
-<li>In view of the &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal, you should have these lines near the
-beginning of <samp><span class="file">src/Makefile.in</span></samp>:
-
- <pre class="example"> PACKAGE = @PACKAGE@
- VERSION = @VERSION@
-</pre>
- <li>If not done already, you should guarantee that <code>top_srcdir</code>
-gets defined. This will serve for <code>cpp</code> include files. Just add
-the line:
-
- <pre class="example"> top_srcdir = @top_srcdir@
-</pre>
- <li>You might also want to define <code>subdir</code> as &lsquo;<samp><span class="samp">src</span></samp>&rsquo;, later
-allowing for almost uniform &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goals in all your
-<samp><span class="file">Makefile.in</span></samp>. At list, the &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal below assume that
-you used:
-
- <pre class="example"> subdir = src
-</pre>
- <li>The <code>main</code> function of your program will normally call
-<code>bindtextdomain</code> (see see <a href="#Triggering">Triggering</a>), like this:
-
- <pre class="example"> bindtextdomain (<var>PACKAGE</var>, LOCALEDIR);
- textdomain (<var>PACKAGE</var>);
-</pre>
- <p>To make LOCALEDIR known to the program, add the following lines to
-<samp><span class="file">Makefile.in</span></samp> if you are using Autoconf version 2.60 or newer:
-
- <pre class="example"> datadir = @datadir@
- datarootdir= @datarootdir@
- localedir = @localedir@
- DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
-</pre>
- <p>or these lines if your version of Autoconf is older than 2.60:
-
- <pre class="example"> datadir = @datadir@
- localedir = $(datadir)/locale
- DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
-</pre>
- <p>Note that <code>@datadir@</code> defaults to &lsquo;<samp><span class="samp">$(prefix)/share</span></samp>&rsquo;, thus
-<code>$(localedir)</code> defaults to &lsquo;<samp><span class="samp">$(prefix)/share/locale</span></samp>&rsquo;.
-
- <li>You should ensure that the final linking will use <code>@LIBINTL@</code> or
-<code>@LTLIBINTL@</code> as a library. <code>@LIBINTL@</code> is for use without
-<code>libtool</code>, <code>@LTLIBINTL@</code> is for use with <code>libtool</code>. An
-easy way to achieve this is to manage that it gets into <code>LIBS</code>, like
-this:
-
- <pre class="example"> LIBS = @LIBINTL@ @LIBS@
-</pre>
- <p>In most packages internationalized with GNU <code>gettext</code>, one will
-find a directory <samp><span class="file">lib/</span></samp> in which a library containing some helper
-functions will be build. (You need at least the few functions which the
-GNU <code>gettext</code> Library itself needs.) However some of the functions
-in the <samp><span class="file">lib/</span></samp> also give messages to the user which of course should be
-translated, too. Taking care of this, the support library (say
-<samp><span class="file">libsupport.a</span></samp>) should be placed before <code>@LIBINTL@</code> and
-<code>@LIBS@</code> in the above example. So one has to write this:
-
- <pre class="example"> LIBS = ../lib/libsupport.a @LIBINTL@ @LIBS@
-</pre>
- <li>You should also ensure that directory <samp><span class="file">intl/</span></samp> will be searched for
-C preprocessor include files in all circumstances. So, you have to
-manage so both &lsquo;<samp><span class="samp">-I../intl</span></samp>&rsquo; and &lsquo;<samp><span class="samp">-I$(top_srcdir)/intl</span></samp>&rsquo; will
-be given to the C compiler.
-
- <li>Your &lsquo;<samp><span class="samp">dist:</span></samp>&rsquo; goal has to conform with others. Here is a
-reasonable definition for it:
-
- <pre class="example"> distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
- dist: Makefile $(DISTFILES)
- for file in $(DISTFILES); do \
- ln $$file $(distdir) 2&gt;/dev/null || cp -p $$file $(distdir) || exit 1; \
- done
-</pre>
- </ol>
-
- <p>Note that if you are using GNU <code>automake</code>, <samp><span class="file">Makefile.in</span></samp> is
-automatically generated from <samp><span class="file">Makefile.am</span></samp>, and the first three
-changes and the last change are not necessary. The remaining needed
-<samp><span class="file">Makefile.am</span></samp> modifications are the following:
-
- <ol type=1 start=1>
-<li>To make LOCALEDIR known to the program, add the following to
-<samp><span class="file">Makefile.am</span></samp>:
-
- <pre class="example"> &lt;module&gt;_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
-</pre>
- <p class="noindent">for each specific module or compilation unit, or
-
- <pre class="example"> AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
-</pre>
- <p>for all modules and compilation units together. Furthermore, if you are
-using an Autoconf version older then 2.60, add this line to define
-&lsquo;<samp><span class="samp">localedir</span></samp>&rsquo;:
-
- <pre class="example"> localedir = $(datadir)/locale
-</pre>
- <li>To ensure that the final linking will use <code>@LIBINTL@</code> or
-<code>@LTLIBINTL@</code> as a library, add the following to
-<samp><span class="file">Makefile.am</span></samp>:
-
- <pre class="example"> &lt;program&gt;_LDADD = @LIBINTL@
-</pre>
- <p class="noindent">for each specific program, or
-
- <pre class="example"> LDADD = @LIBINTL@
-</pre>
- <p>for all programs together. Remember that when you use <code>libtool</code>
-to link a program, you need to use @LTLIBINTL@ instead of @LIBINTL@
-for that program.
-
- <li>If you have an <samp><span class="file">intl/</span></samp> directory, whose contents is created by
-<code>gettextize</code>, then to ensure that it will be searched for
-C preprocessor include files in all circumstances, add something like
-this to <samp><span class="file">Makefile.am</span></samp>:
-
- <pre class="example"> AM_CPPFLAGS = -I../intl -I$(top_srcdir)/intl
-</pre>
- </ol>
-
-<div class="node">
-<a name="lib%2fgettext.h"></a>
-<a name="lib_002fgettext_002eh"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#src_002fMakefile">src/Makefile</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Adjusting-Files">Adjusting Files</a>
-
-</div>
-
-<h4 class="subsection">13.4.13 <samp><span class="file">gettext.h</span></samp> in <samp><span class="file">lib/</span></samp></h4>
-
- <p><a name="index-g_t_0040file_007bgettext_002eh_007d-file-1141"></a><a name="index-turning-off-NLS-support-1142"></a><a name="index-disabling-NLS-1143"></a>
-Internationalization of packages, as provided by GNU <code>gettext</code>, is
-optional. It can be turned off in two situations:
-
- <ul>
-<li>When the installer has specified &lsquo;<samp><span class="samp">./configure --disable-nls</span></samp>&rsquo;. This
-can be useful when small binaries are more important than features, for
-example when building utilities for boot diskettes. It can also be useful
-in order to get some specific C compiler warnings about code quality with
-some older versions of GCC (older than 3.0).
-
- <li>When the package does not include the <code>intl/</code> subdirectory, and the
-libintl.h header (with its associated libintl library, if any) is not
-already installed on the system, it is preferable that the package builds
-without internationalization support, rather than to give a compilation
-error.
-</ul>
-
- <p>A C preprocessor macro can be used to detect these two cases. Usually,
-when <code>libintl.h</code> was found and not explicitly disabled, the
-<code>ENABLE_NLS</code> macro will be defined to 1 in the autoconf generated
-configuration file (usually called <samp><span class="file">config.h</span></samp>). In the two negative
-situations, however, this macro will not be defined, thus it will evaluate
-to 0 in C preprocessor expressions.
-
- <p><a name="index-include-file-_0040file_007blibintl_002eh_007d-1144"></a><samp><span class="file">gettext.h</span></samp> is a convenience header file for conditional use of
-<samp><span class="file">&lt;libintl.h&gt;</span></samp>, depending on the <code>ENABLE_NLS</code> macro. If
-<code>ENABLE_NLS</code> is set, it includes <samp><span class="file">&lt;libintl.h&gt;</span></samp>; otherwise it
-defines no-op substitutes for the libintl.h functions. We recommend
-the use of <code>"gettext.h"</code> over direct use of <samp><span class="file">&lt;libintl.h&gt;</span></samp>,
-so that portability to older systems is guaranteed and installers can
-turn off internationalization if they want to. In the C code, you will
-then write
-
-<pre class="example"> #include "gettext.h"
-</pre>
- <p class="noindent">instead of
-
-<pre class="example"> #include &lt;libintl.h&gt;
-</pre>
- <p>The location of <code>gettext.h</code> is usually in a directory containing
-auxiliary include files. In many GNU packages, there is a directory
-<samp><span class="file">lib/</span></samp> containing helper functions; <samp><span class="file">gettext.h</span></samp> fits there.
-In other packages, it can go into the <samp><span class="file">src</span></samp> directory.
-
- <p>Do not install the <code>gettext.h</code> file in public locations. Every
-package that needs it should contain a copy of it on its own.
-
-<div class="node">
-<a name="autoconf-macros"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CVS-Issues">CVS Issues</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Adjusting-Files">Adjusting Files</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.5 Autoconf macros for use in <samp><span class="file">configure.ac</span></samp></h3>
-
- <p><a name="index-autoconf-macros-for-_0040code_007bgettext_007d-1145"></a>
-GNU <code>gettext</code> installs macros for use in a package's
-<samp><span class="file">configure.ac</span></samp> or <samp><span class="file">configure.in</span></samp>.
-See <a href="autoconf.html#Top">Introduction</a>.
-The primary macro is, of course, <code>AM_GNU_GETTEXT</code>.
-
-<ul class="menu">
-<li><a accesskey="1" href="#AM_005fGNU_005fGETTEXT">AM_GNU_GETTEXT</a>: AM_GNU_GETTEXT in <samp><span class="file">gettext.m4</span></samp>
-<li><a accesskey="2" href="#AM_005fGNU_005fGETTEXT_005fVERSION">AM_GNU_GETTEXT_VERSION</a>: AM_GNU_GETTEXT_VERSION in <samp><span class="file">gettext.m4</span></samp>
-<li><a accesskey="3" href="#AM_005fGNU_005fGETTEXT_005fNEED">AM_GNU_GETTEXT_NEED</a>: AM_GNU_GETTEXT_NEED in <samp><span class="file">gettext.m4</span></samp>
-<li><a accesskey="4" href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">AM_GNU_GETTEXT_INTL_SUBDIR</a>: AM_GNU_GETTEXT_INTL_SUBDIR in <samp><span class="file">intldir.m4</span></samp>
-<li><a accesskey="5" href="#AM_005fPO_005fSUBDIRS">AM_PO_SUBDIRS</a>: AM_PO_SUBDIRS in <samp><span class="file">po.m4</span></samp>
-<li><a accesskey="6" href="#AM_005fXGETTEXT_005fOPTION">AM_XGETTEXT_OPTION</a>: AM_XGETTEXT_OPTION in <samp><span class="file">po.m4</span></samp>
-<li><a accesskey="7" href="#AM_005fICONV">AM_ICONV</a>: AM_ICONV in <samp><span class="file">iconv.m4</span></samp>
-</ul>
-
-<div class="node">
-<a name="AM_GNU_GETTEXT"></a>
-<a name="AM_005fGNU_005fGETTEXT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AM_005fGNU_005fGETTEXT_005fVERSION">AM_GNU_GETTEXT_VERSION</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#autoconf-macros">autoconf macros</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.1 AM_GNU_GETTEXT in <samp><span class="file">gettext.m4</span></samp></h4>
-
- <p><a name="index-AM_005fGNU_005fGETTEXT-1146"></a>The <code>AM_GNU_GETTEXT</code> macro tests for the presence of the GNU gettext
-function family in either the C library or a separate <code>libintl</code>
-library (shared or static libraries are both supported) or in the package's
-<samp><span class="file">intl/</span></samp> directory. It also invokes <code>AM_PO_SUBDIRS</code>, thus preparing
-the <samp><span class="file">po/</span></samp> directories of the package for building.
-
- <p><code>AM_GNU_GETTEXT</code> accepts up to three optional arguments. The general
-syntax is
-
-<pre class="example"> AM_GNU_GETTEXT([<var>intlsymbol</var>], [<var>needsymbol</var>], [<var>intldir</var>])
-</pre>
- <!-- We don't document @var{intlsymbol} = @samp{use-libtool} here, because -->
-<!-- it is of no use for packages other than GNU gettext itself. (Such packages -->
-<!-- are not allowed to install the shared libintl. But if they use libtool, -->
-<!-- then it is in order to install shared libraries that depend on libintl.) -->
- <p><var>intlsymbol</var> can be &lsquo;<samp><span class="samp">external</span></samp>&rsquo; or &lsquo;<samp><span class="samp">no-libtool</span></samp>&rsquo;. The default
-(if it is not specified or empty) is &lsquo;<samp><span class="samp">no-libtool</span></samp>&rsquo;. <var>intlsymbol</var>
-should be &lsquo;<samp><span class="samp">external</span></samp>&rsquo; for packages with no <samp><span class="file">intl/</span></samp> directory.
-For packages with an <samp><span class="file">intl/</span></samp> directory, you can either use an
-<var>intlsymbol</var> equal to &lsquo;<samp><span class="samp">no-libtool</span></samp>&rsquo;, or you can use &lsquo;<samp><span class="samp">external</span></samp>&rsquo;
-and override by using the macro <code>AM_GNU_GETTEXT_INTL_SUBDIR</code> elsewhere.
-The two ways to specify the existence of an <samp><span class="file">intl/</span></samp> directory are
-equivalent. At build time, a static library
-<code>$(top_builddir)/intl/libintl.a</code> will then be created.
-
- <p>If <var>needsymbol</var> is specified and is &lsquo;<samp><span class="samp">need-ngettext</span></samp>&rsquo;, then GNU
-gettext implementations (in libc or libintl) without the <code>ngettext()</code>
-function will be ignored. If <var>needsymbol</var> is specified and is
-&lsquo;<samp><span class="samp">need-formatstring-macros</span></samp>&rsquo;, then GNU gettext implementations that don't
-support the ISO C 99 <samp><span class="file">&lt;inttypes.h&gt;</span></samp> formatstring macros will be ignored.
-Only one <var>needsymbol</var> can be specified. These requirements can also be
-specified by using the macro <code>AM_GNU_GETTEXT_NEED</code> elsewhere. To specify
-more than one requirement, just specify the strongest one among them, or
-invoke the <code>AM_GNU_GETTEXT_NEED</code> macro several times. The hierarchy
-among the various alternatives is as follows: &lsquo;<samp><span class="samp">need-formatstring-macros</span></samp>&rsquo;
-implies &lsquo;<samp><span class="samp">need-ngettext</span></samp>&rsquo;.
-
- <p><var>intldir</var> is used to find the intl libraries. If empty, the value
-&lsquo;<samp><span class="samp">$(top_builddir)/intl/</span></samp>&rsquo; is used.
-
- <p>The <code>AM_GNU_GETTEXT</code> macro determines whether GNU gettext is
-available and should be used. If so, it sets the <code>USE_NLS</code> variable
-to &lsquo;<samp><span class="samp">yes</span></samp>&rsquo;; it defines <code>ENABLE_NLS</code> to 1 in the autoconf
-generated configuration file (usually called <samp><span class="file">config.h</span></samp>); it sets
-the variables <code>LIBINTL</code> and <code>LTLIBINTL</code> to the linker options
-for use in a Makefile (<code>LIBINTL</code> for use without libtool,
-<code>LTLIBINTL</code> for use with libtool); it adds an &lsquo;<samp><span class="samp">-I</span></samp>&rsquo; option to
-<code>CPPFLAGS</code> if necessary. In the negative case, it sets
-<code>USE_NLS</code> to &lsquo;<samp><span class="samp">no</span></samp>&rsquo;; it sets <code>LIBINTL</code> and <code>LTLIBINTL</code>
-to empty and doesn't change <code>CPPFLAGS</code>.
-
- <p>The complexities that <code>AM_GNU_GETTEXT</code> deals with are the following:
-
- <ul>
-<li><a name="index-g_t_0040code_007blibintl_007d-library-1147"></a>Some operating systems have <code>gettext</code> in the C library, for example
-glibc. Some have it in a separate library <code>libintl</code>. GNU <code>libintl</code>
-might have been installed as part of the GNU <code>gettext</code> package.
-
- <li>GNU <code>libintl</code>, if installed, is not necessarily already in the search
-path (<code>CPPFLAGS</code> for the include file search path, <code>LDFLAGS</code> for
-the library search path).
-
- <li>Except for glibc, the operating system's native <code>gettext</code> cannot
-exploit the GNU mo files, doesn't have the necessary locale dependency
-features, and cannot convert messages from the catalog's text encoding
-to the user's locale encoding.
-
- <li>GNU <code>libintl</code>, if installed, is not necessarily already in the
-run time library search path. To avoid the need for setting an environment
-variable like <code>LD_LIBRARY_PATH</code>, the macro adds the appropriate
-run time search path options to the <code>LIBINTL</code> and <code>LTLIBINTL</code>
-variables. This works on most systems, but not on some operating systems
-with limited shared library support, like SCO.
-
- <li>GNU <code>libintl</code> relies on POSIX/XSI <code>iconv</code>. The macro checks for
-linker options needed to use iconv and appends them to the <code>LIBINTL</code>
-and <code>LTLIBINTL</code> variables.
-</ul>
-
-<div class="node">
-<a name="AM_GNU_GETTEXT_VERSION"></a>
-<a name="AM_005fGNU_005fGETTEXT_005fVERSION"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AM_005fGNU_005fGETTEXT_005fNEED">AM_GNU_GETTEXT_NEED</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AM_005fGNU_005fGETTEXT">AM_GNU_GETTEXT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.2 AM_GNU_GETTEXT_VERSION in <samp><span class="file">gettext.m4</span></samp></h4>
-
- <p><a name="index-AM_005fGNU_005fGETTEXT_005fVERSION-1148"></a>The <code>AM_GNU_GETTEXT_VERSION</code> macro declares the version number of
-the GNU gettext infrastructure that is used by the package.
-
- <p>The use of this macro is optional; only the <code>autopoint</code> program makes
-use of it (see <a href="#CVS-Issues">CVS Issues</a>).
-
-<div class="node">
-<a name="AM_GNU_GETTEXT_NEED"></a>
-<a name="AM_005fGNU_005fGETTEXT_005fNEED"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">AM_GNU_GETTEXT_INTL_SUBDIR</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AM_005fGNU_005fGETTEXT_005fVERSION">AM_GNU_GETTEXT_VERSION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.3 AM_GNU_GETTEXT_NEED in <samp><span class="file">gettext.m4</span></samp></h4>
-
- <p><a name="index-AM_005fGNU_005fGETTEXT_005fNEED-1149"></a>The <code>AM_GNU_GETTEXT_NEED</code> macro declares a constraint regarding the
-GNU gettext implementation. The syntax is
-
-<pre class="example"> AM_GNU_GETTEXT_NEED([<var>needsymbol</var>])
-</pre>
- <p>If <var>needsymbol</var> is &lsquo;<samp><span class="samp">need-ngettext</span></samp>&rsquo;, then GNU gettext implementations
-(in libc or libintl) without the <code>ngettext()</code> function will be ignored.
-If <var>needsymbol</var> is &lsquo;<samp><span class="samp">need-formatstring-macros</span></samp>&rsquo;, then GNU gettext
-implementations that don't support the ISO C 99 <samp><span class="file">&lt;inttypes.h&gt;</span></samp>
-formatstring macros will be ignored.
-
- <p>The optional second argument of <code>AM_GNU_GETTEXT</code> is also taken into
-account.
-
- <p>The <code>AM_GNU_GETTEXT_NEED</code> invocations can occur before or after
-the <code>AM_GNU_GETTEXT</code> invocation; the order doesn't matter.
-
-<div class="node">
-<a name="AM_GNU_GETTEXT_INTL_SUBDIR"></a>
-<a name="AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AM_005fPO_005fSUBDIRS">AM_PO_SUBDIRS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AM_005fGNU_005fGETTEXT_005fNEED">AM_GNU_GETTEXT_NEED</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.4 AM_GNU_GETTEXT_INTL_SUBDIR in <samp><span class="file">intldir.m4</span></samp></h4>
-
- <p><a name="index-AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR-1150"></a>The <code>AM_GNU_GETTEXT_INTL_SUBDIR</code> macro specifies that the
-<code>AM_GNU_GETTEXT</code> macro, although invoked with the first argument
-&lsquo;<samp><span class="samp">external</span></samp>&rsquo;, should also prepare for building the <samp><span class="file">intl/</span></samp>
-subdirectory.
-
- <p>The <code>AM_GNU_GETTEXT_INTL_SUBDIR</code> invocation can occur before or after
-the <code>AM_GNU_GETTEXT</code> invocation; the order doesn't matter.
-
- <p>The use of this macro requires GNU automake 1.10 or newer and
-GNU autoconf 2.61 or newer.
-
-<div class="node">
-<a name="AM_PO_SUBDIRS"></a>
-<a name="AM_005fPO_005fSUBDIRS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AM_005fXGETTEXT_005fOPTION">AM_XGETTEXT_OPTION</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">AM_GNU_GETTEXT_INTL_SUBDIR</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.5 AM_PO_SUBDIRS in <samp><span class="file">po.m4</span></samp></h4>
-
- <p><a name="index-AM_005fPO_005fSUBDIRS-1151"></a>The <code>AM_PO_SUBDIRS</code> macro prepares the <samp><span class="file">po/</span></samp> directories of the
-package for building. This macro should be used in internationalized
-programs written in other programming languages than C, C++, Objective C,
-for example <code>sh</code>, <code>Python</code>, <code>Lisp</code>. See <a href="#Programming-Languages">Programming Languages</a> for a list of programming languages that support localization
-through PO files.
-
- <p>The <code>AM_PO_SUBDIRS</code> macro determines whether internationalization
-should be used. If so, it sets the <code>USE_NLS</code> variable to &lsquo;<samp><span class="samp">yes</span></samp>&rsquo;,
-otherwise to &lsquo;<samp><span class="samp">no</span></samp>&rsquo;. It also determines the right values for Makefile
-variables in each <samp><span class="file">po/</span></samp> directory.
-
-<div class="node">
-<a name="AM_XGETTEXT_OPTION"></a>
-<a name="AM_005fXGETTEXT_005fOPTION"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#AM_005fICONV">AM_ICONV</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AM_005fPO_005fSUBDIRS">AM_PO_SUBDIRS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.6 AM_XGETTEXT_OPTION in <samp><span class="file">po.m4</span></samp></h4>
-
- <p><a name="index-AM_005fXGETTEXT_005fOPTION-1152"></a>The <code>AM_XGETTEXT_OPTION</code> macro registers a command-line option to be
-used in the invocations of <code>xgettext</code> in the <samp><span class="file">po/</span></samp> directories
-of the package.
-
- <p>For example, if you have a source file that defines a function
-&lsquo;<samp><span class="samp">error_at_line</span></samp>&rsquo; whose fifth argument is a format string, you can use
-<pre class="example"> AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])
-</pre>
- <p class="noindent">to instruct <code>xgettext</code> to mark all translatable strings in &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo;
-invocations that occur as fifth argument to this function as &lsquo;<samp><span class="samp">c-format</span></samp>&rsquo;.
-
- <p>See <a href="#xgettext-Invocation">xgettext Invocation</a> for the list of options that <code>xgettext</code>
-accepts.
-
- <p>The use of this macro is an alternative to the use of the
-&lsquo;<samp><span class="samp">XGETTEXT_OPTIONS</span></samp>&rsquo; variable in <samp><span class="file">po/Makevars</span></samp>.
-
-<div class="node">
-<a name="AM_ICONV"></a>
-<a name="AM_005fICONV"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#AM_005fXGETTEXT_005fOPTION">AM_XGETTEXT_OPTION</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#autoconf-macros">autoconf macros</a>
-
-</div>
-
-<h4 class="subsection">13.5.7 AM_ICONV in <samp><span class="file">iconv.m4</span></samp></h4>
-
- <p><a name="index-AM_005fICONV-1153"></a>The <code>AM_ICONV</code> macro tests for the presence of the POSIX/XSI
-<code>iconv</code> function family in either the C library or a separate
-<code>libiconv</code> library. If found, it sets the <code>am_cv_func_iconv</code>
-variable to &lsquo;<samp><span class="samp">yes</span></samp>&rsquo;; it defines <code>HAVE_ICONV</code> to 1 in the autoconf
-generated configuration file (usually called <samp><span class="file">config.h</span></samp>); it defines
-<code>ICONV_CONST</code> to &lsquo;<samp><span class="samp">const</span></samp>&rsquo; or to empty, depending on whether the
-second argument of <code>iconv()</code> is of type &lsquo;<samp><span class="samp">const char **</span></samp>&rsquo; or
-&lsquo;<samp><span class="samp">char **</span></samp>&rsquo;; it sets the variables <code>LIBICONV</code> and
-<code>LTLIBICONV</code> to the linker options for use in a Makefile
-(<code>LIBICONV</code> for use without libtool, <code>LTLIBICONV</code> for use with
-libtool); it adds an &lsquo;<samp><span class="samp">-I</span></samp>&rsquo; option to <code>CPPFLAGS</code> if
-necessary. If not found, it sets <code>LIBICONV</code> and <code>LTLIBICONV</code> to
-empty and doesn't change <code>CPPFLAGS</code>.
-
- <p>The complexities that <code>AM_ICONV</code> deals with are the following:
-
- <ul>
-<li><a name="index-g_t_0040code_007blibiconv_007d-library-1154"></a>Some operating systems have <code>iconv</code> in the C library, for example
-glibc. Some have it in a separate library <code>libiconv</code>, for example
-OSF/1 or FreeBSD. Regardless of the operating system, GNU <code>libiconv</code>
-might have been installed. In that case, it should be used instead of the
-operating system's native <code>iconv</code>.
-
- <li>GNU <code>libiconv</code>, if installed, is not necessarily already in the search
-path (<code>CPPFLAGS</code> for the include file search path, <code>LDFLAGS</code> for
-the library search path).
-
- <li>GNU <code>libiconv</code> is binary incompatible with some operating system's
-native <code>iconv</code>, for example on FreeBSD. Use of an <samp><span class="file">iconv.h</span></samp>
-and <samp><span class="file">libiconv.so</span></samp> that don't fit together would produce program
-crashes.
-
- <li>GNU <code>libiconv</code>, if installed, is not necessarily already in the
-run time library search path. To avoid the need for setting an environment
-variable like <code>LD_LIBRARY_PATH</code>, the macro adds the appropriate
-run time search path options to the <code>LIBICONV</code> variable. This works
-on most systems, but not on some operating systems with limited shared
-library support, like SCO.
-</ul>
-
- <p><samp><span class="file">iconv.m4</span></samp> is distributed with the GNU gettext package because
-<samp><span class="file">gettext.m4</span></samp> relies on it.
-
-<div class="node">
-<a name="CVS-Issues"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Release-Management">Release Management</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#autoconf-macros">autoconf macros</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.6 Integrating with CVS</h3>
-
- <p>Many projects use CVS for distributed development, version control and
-source backup. This section gives some advice how to manage the uses
-of <code>cvs</code>, <code>gettextize</code>, <code>autopoint</code> and <code>autoconf</code>.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Distributed-CVS">Distributed CVS</a>: Avoiding version mismatch in distributed development
-<li><a accesskey="2" href="#Files-under-CVS">Files under CVS</a>: Files to put under CVS version control
-<li><a accesskey="3" href="#autopoint-Invocation">autopoint Invocation</a>: Invoking the <code>autopoint</code> Program
-</ul>
-
-<div class="node">
-<a name="Distributed-CVS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Files-under-CVS">Files under CVS</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CVS-Issues">CVS Issues</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CVS-Issues">CVS Issues</a>
-
-</div>
-
-<h4 class="subsection">13.6.1 Avoiding version mismatch in distributed development</h4>
-
- <p>In a project development with multiple developers, using CVS, there
-should be a single developer who occasionally - when there is desire to
-upgrade to a new <code>gettext</code> version - runs <code>gettextize</code> and
-performs the changes listed in <a href="#Adjusting-Files">Adjusting Files</a>, and then commits
-his changes to the CVS.
-
- <p>It is highly recommended that all developers on a project use the same
-version of GNU <code>gettext</code> in the package. In other words, if a
-developer runs <code>gettextize</code>, he should go the whole way, make the
-necessary remaining changes and commit his changes to the CVS.
-Otherwise the following damages will likely occur:
-
- <ul>
-<li>Apparent version mismatch between developers. Since some <code>gettext</code>
-specific portions in <samp><span class="file">configure.ac</span></samp>, <samp><span class="file">configure.in</span></samp> and
-<code>Makefile.am</code>, <code>Makefile.in</code> files depend on the <code>gettext</code>
-version, the use of infrastructure files belonging to different
-<code>gettext</code> versions can easily lead to build errors.
-
- <li>Hidden version mismatch. Such version mismatch can also lead to
-malfunctioning of the package, that may be undiscovered by the developers.
-The worst case of hidden version mismatch is that internationalization
-of the package doesn't work at all.
-
- <li>Release risks. All developers implicitly perform constant testing on
-a package. This is important in the days and weeks before a release.
-If the guy who makes the release tar files uses a different version
-of GNU <code>gettext</code> than the other developers, the distribution will
-be less well tested than if all had been using the same <code>gettext</code>
-version. For example, it is possible that a platform specific bug goes
-undiscovered due to this constellation.
-</ul>
-
-<div class="node">
-<a name="Files-under-CVS"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#autopoint-Invocation">autopoint Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Distributed-CVS">Distributed CVS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CVS-Issues">CVS Issues</a>
-
-</div>
-
-<h4 class="subsection">13.6.2 Files to put under CVS version control</h4>
-
- <p>There are basically three ways to deal with generated files in the
-context of a CVS repository, such as <samp><span class="file">configure</span></samp> generated from
-<samp><span class="file">configure.ac</span></samp>, <var>parser</var><code>.c</code> generated from
-<var>parser</var><code>.y</code>, or <code>po/Makefile.in.in</code> autoinstalled by
-<code>gettextize</code> or <code>autopoint</code>.
-
- <ol type=1 start=1>
-<li>All generated files are always committed into the repository.
-
- <li>All generated files are committed into the repository occasionally,
-for example each time a release is made.
-
- <li>Generated files are never committed into the repository.
- </ol>
-
- <p>Each of these three approaches has different advantages and drawbacks.
-
- <ol type=1 start=1>
-<li>The advantage is that anyone can check out the CVS at any moment and
-gets a working build. The drawbacks are: 1a. It requires some frequent
-"cvs commit" actions by the maintainers. 1b. The repository grows in size
-quite fast.
-
- <li>The advantage is that anyone can check out the CVS, and the usual
-"./configure; make" will work. The drawbacks are: 2a. The one who
-checks out the repository needs tools like GNU <code>automake</code>,
-GNU <code>autoconf</code>, GNU <code>m4</code> installed in his PATH; sometimes
-he even needs particular versions of them. 2b. When a release is made
-and a commit is made on the generated files, the other developers get
-conflicts on the generated files after doing "cvs update". Although
-these conflicts are easy to resolve, they are annoying.
-
- <li>The advantage is less work for the maintainers. The drawback is that
-anyone who checks out the CVS not only needs tools like GNU <code>automake</code>,
-GNU <code>autoconf</code>, GNU <code>m4</code> installed in his PATH, but also that
-he needs to perform a package specific pre-build step before being able
-to "./configure; make".
- </ol>
-
- <p>For the first and second approach, all files modified or brought in
-by the occasional <code>gettextize</code> invocation and update should be
-committed into the CVS.
-
- <p>For the third approach, the maintainer can omit from the CVS repository
-all the files that <code>gettextize</code> mentions as "copy". Instead, he
-adds to the <samp><span class="file">configure.ac</span></samp> or <samp><span class="file">configure.in</span></samp> a line of the
-form
-
-<pre class="example"> AM_GNU_GETTEXT_VERSION(0.18)
-</pre>
- <p class="noindent">and adds to the package's pre-build script an invocation of
-&lsquo;<samp><span class="samp">autopoint</span></samp>&rsquo;. For everyone who checks out the CVS, this
-<code>autopoint</code> invocation will copy into the right place the
-<code>gettext</code> infrastructure files that have been omitted from the CVS.
-
- <p>The version number used as argument to <code>AM_GNU_GETTEXT_VERSION</code> is
-the version of the <code>gettext</code> infrastructure that the package wants
-to use. It is also the minimum version number of the &lsquo;<samp><span class="samp">autopoint</span></samp>&rsquo;
-program. So, if you write <code>AM_GNU_GETTEXT_VERSION(0.11.5)</code> then the
-developers can have any version &gt;= 0.11.5 installed; the package will work
-with the 0.11.5 infrastructure in all developers' builds. When the
-maintainer then runs gettextize from, say, version 0.12.1 on the package,
-the occurrence of <code>AM_GNU_GETTEXT_VERSION(0.11.5)</code> will be changed
-into <code>AM_GNU_GETTEXT_VERSION(0.12.1)</code>, and all other developers that
-use the CVS will henceforth need to have GNU <code>gettext</code> 0.12.1 or newer
-installed.
-
-<div class="node">
-<a name="autopoint-Invocation"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Files-under-CVS">Files under CVS</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#CVS-Issues">CVS Issues</a>
-
-</div>
-
-<h4 class="subsection">13.6.3 Invoking the <code>autopoint</code> Program</h4>
-
- <p><a name="index-autopoint-1155"></a><a name="index-g_t_0040code_007bautopoint_007d-program_002c-usage-1156"></a>
-<pre class="example"> autopoint [<var>option</var>]...
-</pre>
- <p>The <code>autopoint</code> program copies standard gettext infrastructure files
-into a source package. It extracts from a macro call of the form
-<code>AM_GNU_GETTEXT_VERSION(</code><var>version</var><code>)</code>, found in the package's
-<samp><span class="file">configure.in</span></samp> or <samp><span class="file">configure.ac</span></samp> file, the gettext version
-used by the package, and copies the infrastructure files belonging to
-this version into the package.
-
-<h5 class="subsubsection">13.6.3.1 Options</h5>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-f</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--force</span></samp>&rsquo;<dd><a name="index-g_t_002df_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1157"></a><a name="index-g_t_002d_002dforce_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1158"></a>Force overwriting of files that already exist.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--dry-run</span></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1159"></a><a name="index-g_t_002d_002ddry_002drun_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1160"></a>Print modifications but don't perform them. All file copying actions that
-<code>autopoint</code> would normally execute are inhibited and instead only
-listed on standard output.
-
- </dl>
-
-<h5 class="subsubsection">13.6.3.2 Informative output</h5>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1161"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1162"></a>Output version information and exit.
-
- </dl>
-
- <p><code>autopoint</code> supports the GNU <code>gettext</code> versions from 0.10.35 to
-the current one, 0.18. In order to apply <code>autopoint</code> to
-a package using a <code>gettext</code> version newer than 0.18, you
-need to install this same version of GNU <code>gettext</code> at least.
-
- <p>In packages using GNU <code>automake</code>, an invocation of <code>autopoint</code>
-should be followed by invocations of <code>aclocal</code> and then <code>autoconf</code>
-and <code>autoheader</code>. The reason is that <code>autopoint</code> installs some
-autoconf macro files, which are used by <code>aclocal</code> to create
-<samp><span class="file">aclocal.m4</span></samp>, and the latter is used by <code>autoconf</code> to create the
-package's <samp><span class="file">configure</span></samp> script and by <code>autoheader</code> to create the
-package's <samp><span class="file">config.h.in</span></samp> include file template.
-
- <p>The name &lsquo;<samp><span class="samp">autopoint</span></samp>&rsquo; is an abbreviation of &lsquo;<samp><span class="samp">auto-po-intl-m4</span></samp>&rsquo;;
-the tool copies or updates mostly files in the <samp><span class="file">po</span></samp>, <samp><span class="file">intl</span></samp>,
-<samp><span class="file">m4</span></samp> directories.
-
-<div class="node">
-<a name="Release-Management"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CVS-Issues">CVS Issues</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Maintainers">Maintainers</a>
-
-</div>
-
-<h3 class="section">13.7 Creating a Distribution Tarball</h3>
-
- <p><a name="index-release-1163"></a><a name="index-distribution-tarball-1164"></a>In projects that use GNU <code>automake</code>, the usual commands for creating
-a distribution tarball, &lsquo;<samp><span class="samp">make dist</span></samp>&rsquo; or &lsquo;<samp><span class="samp">make distcheck</span></samp>&rsquo;,
-automatically update the PO files as needed.
-
- <p>If GNU <code>automake</code> is not used, the maintainer needs to perform this
-update before making a release:
-
-<pre class="example"> $ ./configure
- $ (cd po; make update-po)
- $ make distclean
-</pre>
- <div class="node">
-<a name="Installers"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Programming-Languages">Programming Languages</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Maintainers">Maintainers</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">14 The Installer's and Distributor's View</h2>
-
- <p><a name="index-package-installer_0027s-view-of-_0040code_007bgettext_007d-1165"></a><a name="index-package-distributor_0027s-view-of-_0040code_007bgettext_007d-1166"></a><a name="index-package-build-and-installation-options-1167"></a><a name="index-setting-up-_0040code_007bgettext_007d-at-build-time-1168"></a>
-By default, packages fully using GNU <code>gettext</code>, internally,
-are installed in such a way that they to allow translation of
-messages. At <em>configuration</em> time, those packages should
-automatically detect whether the underlying host system already provides
-the GNU <code>gettext</code> functions. If not,
-the GNU <code>gettext</code> library should be automatically prepared
-and used. Installers may use special options at configuration
-time for changing this behavior. The command &lsquo;<samp><span class="samp">./configure
---with-included-gettext</span></samp>&rsquo; bypasses system <code>gettext</code> to
-use the included GNU <code>gettext</code> instead,
-while &lsquo;<samp><span class="samp">./configure --disable-nls</span></samp>&rsquo;
-produces programs totally unable to translate messages.
-
- <p><a name="index-LINGUAS_0040r_007b_002c-environment-variable_007d-1169"></a>Internationalized packages have usually many <samp><var>ll</var><span class="file">.po</span></samp>
-files. Unless
-translations are disabled, all those available are installed together
-with the package. However, the environment variable <code>LINGUAS</code>
-may be set, prior to configuration, to limit the installed set.
-<code>LINGUAS</code> should then contain a space separated list of two-letter
-codes, stating which languages are allowed.
-
-<div class="node">
-<a name="Programming-Languages"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Conclusion">Conclusion</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Installers">Installers</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">15 Other Programming Languages</h2>
-
- <p>While the presentation of <code>gettext</code> focuses mostly on C and
-implicitly applies to C++ as well, its scope is far broader than that:
-Many programming languages, scripting languages and other textual data
-like GUI resources or package descriptions can make use of the gettext
-approach.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Language-Implementors">Language Implementors</a>: The Language Implementor's View
-<li><a accesskey="2" href="#Programmers-for-other-Languages">Programmers for other Languages</a>: The Programmer's View
-<li><a accesskey="3" href="#Translators-for-other-Languages">Translators for other Languages</a>: The Translator's View
-<li><a accesskey="4" href="#Maintainers-for-other-Languages">Maintainers for other Languages</a>: The Maintainer's View
-<li><a accesskey="5" href="#List-of-Programming-Languages">List of Programming Languages</a>: Individual Programming Languages
-<li><a accesskey="6" href="#List-of-Data-Formats">List of Data Formats</a>: Internationalizable Data
-</ul>
-
-<div class="node">
-<a name="Language-Implementors"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Programmers-for-other-Languages">Programmers for other Languages</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Programming-Languages">Programming Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programming-Languages">Programming Languages</a>
-
-</div>
-
-<h3 class="section">15.1 The Language Implementor's View</h3>
-
- <p><a name="index-programming-languages-1170"></a><a name="index-scripting-languages-1171"></a>
-All programming and scripting languages that have the notion of strings
-are eligible to supporting <code>gettext</code>. Supporting <code>gettext</code>
-means the following:
-
- <ol type=1 start=1>
-<li>You should add to the language a syntax for translatable strings. In
-principle, a function call of <code>gettext</code> would do, but a shorthand
-syntax helps keeping the legibility of internationalized programs. For
-example, in C we use the syntax <code>_("string")</code>, and in GNU awk we use
-the shorthand <code>_"string"</code>.
-
- <li>You should arrange that evaluation of such a translatable string at
-runtime calls the <code>gettext</code> function, or performs equivalent
-processing.
-
- <li>Similarly, you should make the functions <code>ngettext</code>,
-<code>dcgettext</code>, <code>dcngettext</code> available from within the language.
-These functions are less often used, but are nevertheless necessary for
-particular purposes: <code>ngettext</code> for correct plural handling, and
-<code>dcgettext</code> and <code>dcngettext</code> for obeying other locale-related
-environment variables than <code>LC_MESSAGES</code>, such as <code>LC_TIME</code> or
-<code>LC_MONETARY</code>. For these latter functions, you need to make the
-<code>LC_*</code> constants, available in the C header <code>&lt;locale.h&gt;</code>,
-referenceable from within the language, usually either as enumeration
-values or as strings.
-
- <li>You should allow the programmer to designate a message domain, either by
-making the <code>textdomain</code> function available from within the
-language, or by introducing a magic variable called <code>TEXTDOMAIN</code>.
-Similarly, you should allow the programmer to designate where to search
-for message catalogs, by providing access to the <code>bindtextdomain</code>
-function.
-
- <li>You should either perform a <code>setlocale (LC_ALL, "")</code> call during
-the startup of your language runtime, or allow the programmer to do so.
-Remember that gettext will act as a no-op if the <code>LC_MESSAGES</code> and
-<code>LC_CTYPE</code> locale categories are not both set.
-
- <li>A programmer should have a way to extract translatable strings from a
-program into a PO file. The GNU <code>xgettext</code> program is being
-extended to support very different programming languages. Please
-contact the GNU <code>gettext</code> maintainers to help them doing this. If
-the string extractor is best integrated into your language's parser, GNU
-<code>xgettext</code> can function as a front end to your string extractor.
-
- <li>The language's library should have a string formatting facility where
-the arguments of a format string are denoted by a positional number or a
-name. This is needed because for some languages and some messages with
-more than one substitutable argument, the translation will need to
-output the substituted arguments in different order. See <a href="#c_002dformat-Flag">c-format Flag</a>.
-
- <li>If the language has more than one implementation, and not all of the
-implementations use <code>gettext</code>, but the programs should be portable
-across implementations, you should provide a no-i18n emulation, that
-makes the other implementations accept programs written for yours,
-without actually translating the strings.
-
- <li>To help the programmer in the task of marking translatable strings,
-which is sometimes performed using the Emacs PO mode (see <a href="#Marking">Marking</a>),
-you are welcome to
-contact the GNU <code>gettext</code> maintainers, so they can add support for
-your language to <samp><span class="file">po-mode.el</span></samp>.
- </ol>
-
- <p>On the implementation side, three approaches are possible, with
-different effects on portability and copyright:
-
- <ul>
-<li>You may integrate the GNU <code>gettext</code>'s <samp><span class="file">intl/</span></samp> directory in
-your package, as described in <a href="#Maintainers">Maintainers</a>. This allows you to
-have internationalization on all kinds of platforms. Note that when you
-then distribute your package, it legally falls under the GNU General
-Public License, and the GNU project will be glad about your contribution
-to the Free Software pool.
-
- <li>You may link against GNU <code>gettext</code> functions if they are found in
-the C library. For example, an autoconf test for <code>gettext()</code> and
-<code>ngettext()</code> will detect this situation. For the moment, this test
-will succeed on GNU systems and not on other platforms. No severe
-copyright restrictions apply.
-
- <li>You may emulate or reimplement the GNU <code>gettext</code> functionality.
-This has the advantage of full portability and no copyright
-restrictions, but also the drawback that you have to reimplement the GNU
-<code>gettext</code> features (such as the <code>LANGUAGE</code> environment
-variable, the locale aliases database, the automatic charset conversion,
-and plural handling).
-</ul>
-
-<div class="node">
-<a name="Programmers-for-other-Languages"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Translators-for-other-Languages">Translators for other Languages</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Language-Implementors">Language Implementors</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programming-Languages">Programming Languages</a>
-
-</div>
-
-<h3 class="section">15.2 The Programmer's View</h3>
-
- <p>For the programmer, the general procedure is the same as for the C
-language. The Emacs PO mode marking supports other languages, and the GNU
-<code>xgettext</code> string extractor recognizes other languages based on the
-file extension or a command-line option. In some languages,
-<code>setlocale</code> is not needed because it is already performed by the
-underlying language runtime.
-
-<div class="node">
-<a name="Translators-for-other-Languages"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Maintainers-for-other-Languages">Maintainers for other Languages</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Programmers-for-other-Languages">Programmers for other Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programming-Languages">Programming Languages</a>
-
-</div>
-
-<h3 class="section">15.3 The Translator's View</h3>
-
- <p>The translator works exactly as in the C language case. The only
-difference is that when translating format strings, she has to be aware
-of the language's particular syntax for positional arguments in format
-strings.
-
-<ul class="menu">
-<li><a accesskey="1" href="#c_002dformat">c-format</a>: C Format Strings
-<li><a accesskey="2" href="#objc_002dformat">objc-format</a>: Objective C Format Strings
-<li><a accesskey="3" href="#sh_002dformat">sh-format</a>: Shell Format Strings
-<li><a accesskey="4" href="#python_002dformat">python-format</a>: Python Format Strings
-<li><a accesskey="5" href="#lisp_002dformat">lisp-format</a>: Lisp Format Strings
-<li><a accesskey="6" href="#elisp_002dformat">elisp-format</a>: Emacs Lisp Format Strings
-<li><a accesskey="7" href="#librep_002dformat">librep-format</a>: librep Format Strings
-<li><a accesskey="8" href="#scheme_002dformat">scheme-format</a>: Scheme Format Strings
-<li><a accesskey="9" href="#smalltalk_002dformat">smalltalk-format</a>: Smalltalk Format Strings
-<li><a href="#java_002dformat">java-format</a>: Java Format Strings
-<li><a href="#csharp_002dformat">csharp-format</a>: C# Format Strings
-<li><a href="#awk_002dformat">awk-format</a>: awk Format Strings
-<li><a href="#object_002dpascal_002dformat">object-pascal-format</a>: Object Pascal Format Strings
-<li><a href="#ycp_002dformat">ycp-format</a>: YCP Format Strings
-<li><a href="#tcl_002dformat">tcl-format</a>: Tcl Format Strings
-<li><a href="#perl_002dformat">perl-format</a>: Perl Format Strings
-<li><a href="#php_002dformat">php-format</a>: PHP Format Strings
-<li><a href="#gcc_002dinternal_002dformat">gcc-internal-format</a>: GCC internal Format Strings
-<li><a href="#gfc_002dinternal_002dformat">gfc-internal-format</a>: GFC internal Format Strings
-<li><a href="#qt_002dformat">qt-format</a>: Qt Format Strings
-<li><a href="#qt_002dplural_002dformat">qt-plural-format</a>: Qt Plural Format Strings
-<li><a href="#kde_002dformat">kde-format</a>: KDE Format Strings
-<li><a href="#boost_002dformat">boost-format</a>: Boost Format Strings
-</ul>
-
-<div class="node">
-<a name="c-format"></a>
-<a name="c_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#objc_002dformat">objc-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Translators-for-other-Languages">Translators for other Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.1 C Format Strings</h4>
-
- <p>C format strings are described in POSIX (IEEE P1003.1 2001), section
-XSH 3 fprintf(),
-<a href="http://www.opengroup.org/onlinepubs/007904975/functions/fprintf.html">http://www.opengroup.org/onlinepubs/007904975/functions/fprintf.html</a>.
-See also the fprintf() manual page,
-<a href="http://www.linuxvalley.it/encyclopedia/ldp/manpage/man3/printf.3.php">http://www.linuxvalley.it/encyclopedia/ldp/manpage/man3/printf.3.php</a>,
-<a href="http://informatik.fh-wuerzburg.de/student/i510/man/printf.html">http://informatik.fh-wuerzburg.de/student/i510/man/printf.html</a>.
-
- <p>Although format strings with positions that reorder arguments, such as
-
-<pre class="example"> "Only %2$d bytes free on '%1$s'."
-</pre>
- <p class="noindent">which is semantically equivalent to
-
-<pre class="example"> "'%s' has only %d bytes free."
-</pre>
- <p class="noindent">are a POSIX/XSI feature and not specified by ISO C 99, translators can rely
-on this reordering ability: On the few platforms where <code>printf()</code>,
-<code>fprintf()</code> etc. don't support this feature natively, <samp><span class="file">libintl.a</span></samp>
-or <samp><span class="file">libintl.so</span></samp> provides replacement functions, and GNU <code>&lt;libintl.h&gt;</code>
-activates these replacement functions automatically.
-
- <p><a name="index-outdigits-1172"></a><a name="index-Arabic-digits-1173"></a>As a special feature for Farsi (Persian) and maybe Arabic, translators can
-insert an &lsquo;<samp><span class="samp">I</span></samp>&rsquo; flag into numeric format directives. For example, the
-translation of <code>"%d"</code> can be <code>"%Id"</code>. The effect of this flag,
-on systems with GNU <code>libc</code>, is that in the output, the ASCII digits are
-replaced with the &lsquo;<samp><span class="samp">outdigits</span></samp>&rsquo; defined in the <code>LC_CTYPE</code> locale
-category. On other systems, the <code>gettext</code> function removes this flag,
-so that it has no effect.
-
- <p>Note that the programmer should <em>not</em> put this flag into the
-untranslated string. (Putting the &lsquo;<samp><span class="samp">I</span></samp>&rsquo; format directive flag into an
-<var>msgid</var> string would lead to undefined behaviour on platforms without
-glibc when NLS is disabled.)
-
-<div class="node">
-<a name="objc-format"></a>
-<a name="objc_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#sh_002dformat">sh-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#c_002dformat">c-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.2 Objective C Format Strings</h4>
-
- <p>Objective C format strings are like C format strings. They support an
-additional format directive: "%@", which when executed consumes an argument
-of type <code>Object *</code>.
-
-<div class="node">
-<a name="sh-format"></a>
-<a name="sh_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#python_002dformat">python-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#objc_002dformat">objc-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.3 Shell Format Strings</h4>
-
- <p>Shell format strings, as supported by GNU gettext and the &lsquo;<samp><span class="samp">envsubst</span></samp>&rsquo;
-program, are strings with references to shell variables in the form
-<code>$</code><var>variable</var> or <code>${</code><var>variable</var><code>}</code>. References of the form
-<code>${</code><var>variable</var><code>-</code><var>default</var><code>}</code>,
-<code>${</code><var>variable</var><code>:-</code><var>default</var><code>}</code>,
-<code>${</code><var>variable</var><code>=</code><var>default</var><code>}</code>,
-<code>${</code><var>variable</var><code>:=</code><var>default</var><code>}</code>,
-<code>${</code><var>variable</var><code>+</code><var>replacement</var><code>}</code>,
-<code>${</code><var>variable</var><code>:+</code><var>replacement</var><code>}</code>,
-<code>${</code><var>variable</var><code>?</code><var>ignored</var><code>}</code>,
-<code>${</code><var>variable</var><code>:?</code><var>ignored</var><code>}</code>,
-that would be valid inside shell scripts, are not supported. The
-<var>variable</var> names must consist solely of alphanumeric or underscore
-ASCII characters, not start with a digit and be nonempty; otherwise such
-a variable reference is ignored.
-
-<div class="node">
-<a name="python-format"></a>
-<a name="python_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#lisp_002dformat">lisp-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#sh_002dformat">sh-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.4 Python Format Strings</h4>
-
- <p>Python format strings are described in
-Python&nbsp;Library&nbsp;reference<!-- /@w --> /
-2.&nbsp;Built-in&nbsp;Types,&nbsp;Exceptions&nbsp;and&nbsp;Functions<!-- /@w --> /
-2.2.&nbsp;Built-in&nbsp;Types<!-- /@w --> /
-2.2.6.&nbsp;Sequence&nbsp;Types<!-- /@w --> /
-2.2.6.2.&nbsp;String&nbsp;Formatting&nbsp;Operations<!-- /@w -->.
-<a href="http://www.python.org/doc/2.2.1/lib/typesseq-strings.html">http://www.python.org/doc/2.2.1/lib/typesseq-strings.html</a>.
-
-<div class="node">
-<a name="lisp-format"></a>
-<a name="lisp_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#elisp_002dformat">elisp-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#python_002dformat">python-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.5 Lisp Format Strings</h4>
-
- <p>Lisp format strings are described in the Common Lisp HyperSpec,
-chapter 22.3 Formatted&nbsp;Output<!-- /@w -->,
-<a href="http://www.lisp.org/HyperSpec/Body/sec_22-3.html">http://www.lisp.org/HyperSpec/Body/sec_22-3.html</a>.
-
-<div class="node">
-<a name="elisp-format"></a>
-<a name="elisp_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#librep_002dformat">librep-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#lisp_002dformat">lisp-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.6 Emacs Lisp Format Strings</h4>
-
- <p>Emacs Lisp format strings are documented in the Emacs Lisp reference,
-section Formatting&nbsp;Strings<!-- /@w -->,
-<a href="http://www.gnu.org/manual/elisp-manual-21-2.8/html_chapter/elisp_4.html#SEC75">http://www.gnu.org/manual/elisp-manual-21-2.8/html_chapter/elisp_4.html#SEC75</a>.
-Note that as of version 21, XEmacs supports numbered argument specifications
-in format strings while FSF Emacs doesn't.
-
-<div class="node">
-<a name="librep-format"></a>
-<a name="librep_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#scheme_002dformat">scheme-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#elisp_002dformat">elisp-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.7 librep Format Strings</h4>
-
- <p>librep format strings are documented in the librep manual, section
-Formatted&nbsp;Output<!-- /@w -->,
-<a href="http://librep.sourceforge.net/librep-manual.html#Formatted%20Output">http://librep.sourceforge.net/librep-manual.html#Formatted%20Output</a>,
-<a href="http://www.gwinnup.org/research/docs/librep.html#SEC122">http://www.gwinnup.org/research/docs/librep.html#SEC122</a>.
-
-<div class="node">
-<a name="scheme-format"></a>
-<a name="scheme_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#smalltalk_002dformat">smalltalk-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#librep_002dformat">librep-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.8 Scheme Format Strings</h4>
-
- <p>Scheme format strings are documented in the SLIB manual, section
-Format&nbsp;Specification<!-- /@w -->.
-
-<div class="node">
-<a name="smalltalk-format"></a>
-<a name="smalltalk_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#java_002dformat">java-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#scheme_002dformat">scheme-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.9 Smalltalk Format Strings</h4>
-
- <p>Smalltalk format strings are described in the GNU Smalltalk documentation,
-class <code>CharArray</code>, methods &lsquo;<samp><span class="samp">bindWith:</span></samp>&rsquo; and
-&lsquo;<samp><span class="samp">bindWithArguments:</span></samp>&rsquo;.
-<a href="http://www.gnu.org/software/smalltalk/gst-manual/gst_68.html#SEC238">http://www.gnu.org/software/smalltalk/gst-manual/gst_68.html#SEC238</a>.
-In summary, a directive starts with &lsquo;<samp><span class="samp">%</span></samp>&rsquo; and is followed by &lsquo;<samp><span class="samp">%</span></samp>&rsquo;
-or a nonzero digit (&lsquo;<samp><span class="samp">1</span></samp>&rsquo; to &lsquo;<samp><span class="samp">9</span></samp>&rsquo;).
-
-<div class="node">
-<a name="java-format"></a>
-<a name="java_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#csharp_002dformat">csharp-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#smalltalk_002dformat">smalltalk-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.10 Java Format Strings</h4>
-
- <p>Java format strings are described in the JDK documentation for class
-<code>java.text.MessageFormat</code>,
-<a href="http://java.sun.com/j2se/1.4/docs/api/java/text/MessageFormat.html">http://java.sun.com/j2se/1.4/docs/api/java/text/MessageFormat.html</a>.
-See also the ICU documentation
-<a href="http://oss.software.ibm.com/icu/apiref/classMessageFormat.html">http://oss.software.ibm.com/icu/apiref/classMessageFormat.html</a>.
-
-<div class="node">
-<a name="csharp-format"></a>
-<a name="csharp_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#awk_002dformat">awk-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#java_002dformat">java-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.11 C# Format Strings</h4>
-
- <p>C# format strings are described in the .NET documentation for class
-<code>System.String</code> and in
-<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpConFormattingOverview.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpConFormattingOverview.asp</a>.
-
-<div class="node">
-<a name="awk-format"></a>
-<a name="awk_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#object_002dpascal_002dformat">object-pascal-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#csharp_002dformat">csharp-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.12 awk Format Strings</h4>
-
- <p>awk format strings are described in the gawk documentation, section
-Printf<!-- /@w -->,
-<a href="http://www.gnu.org/manual/gawk/html_node/Printf.html#Printf">http://www.gnu.org/manual/gawk/html_node/Printf.html#Printf</a>.
-
-<div class="node">
-<a name="object-pascal-format"></a>
-<a name="object_002dpascal_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ycp_002dformat">ycp-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#awk_002dformat">awk-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.13 Object Pascal Format Strings</h4>
-
- <p>Object Pascal format strings are described in the documentation of the
-Free Pascal runtime library, section Format,
-<a href="http://www.freepascal.org/docs-html/rtl/sysutils/format.html">http://www.freepascal.org/docs-html/rtl/sysutils/format.html</a>.
-
-<div class="node">
-<a name="ycp-format"></a>
-<a name="ycp_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#tcl_002dformat">tcl-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#object_002dpascal_002dformat">object-pascal-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.14 YCP Format Strings</h4>
-
- <p>YCP sformat strings are described in the libycp documentation
-<a href="file:/usr/share/doc/packages/libycp/YCP-builtins.html">file:/usr/share/doc/packages/libycp/YCP-builtins.html</a>.
-In summary, a directive starts with &lsquo;<samp><span class="samp">%</span></samp>&rsquo; and is followed by &lsquo;<samp><span class="samp">%</span></samp>&rsquo;
-or a nonzero digit (&lsquo;<samp><span class="samp">1</span></samp>&rsquo; to &lsquo;<samp><span class="samp">9</span></samp>&rsquo;).
-
-<div class="node">
-<a name="tcl-format"></a>
-<a name="tcl_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#perl_002dformat">perl-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ycp_002dformat">ycp-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.15 Tcl Format Strings</h4>
-
- <p>Tcl format strings are described in the <samp><span class="file">format.n</span></samp> manual page,
-<a href="http://www.scriptics.com/man/tcl8.3/TclCmd/format.htm">http://www.scriptics.com/man/tcl8.3/TclCmd/format.htm</a>.
-
-<div class="node">
-<a name="perl-format"></a>
-<a name="perl_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#php_002dformat">php-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#tcl_002dformat">tcl-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.16 Perl Format Strings</h4>
-
- <p>There are two kinds format strings in Perl: those acceptable to the
-Perl built-in function <code>printf</code>, labelled as &lsquo;<samp><span class="samp">perl-format</span></samp>&rsquo;,
-and those acceptable to the <code>libintl-perl</code> function <code>__x</code>,
-labelled as &lsquo;<samp><span class="samp">perl-brace-format</span></samp>&rsquo;.
-
- <p>Perl <code>printf</code> format strings are described in the <code>sprintf</code>
-section of &lsquo;<samp><span class="samp">man perlfunc</span></samp>&rsquo;.
-
- <p>Perl brace format strings are described in the
-<samp><span class="file">Locale::TextDomain(3pm)</span></samp> manual page of the CPAN package
-libintl-perl. In brief, Perl format uses placeholders put between
-braces (&lsquo;<samp><span class="samp">{</span></samp>&rsquo; and &lsquo;<samp><span class="samp">}</span></samp>&rsquo;). The placeholder must have the syntax
-of simple identifiers.
-
-<div class="node">
-<a name="php-format"></a>
-<a name="php_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gcc_002dinternal_002dformat">gcc-internal-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#perl_002dformat">perl-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.17 PHP Format Strings</h4>
-
- <p>PHP format strings are described in the documentation of the PHP function
-<code>sprintf</code>, in <samp><span class="file">phpdoc/manual/function.sprintf.html</span></samp> or
-<a href="http://www.php.net/manual/en/function.sprintf.php">http://www.php.net/manual/en/function.sprintf.php</a>.
-
-<div class="node">
-<a name="gcc-internal-format"></a>
-<a name="gcc_002dinternal_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gfc_002dinternal_002dformat">gfc-internal-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#php_002dformat">php-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.18 GCC internal Format Strings</h4>
-
- <p>These format strings are used inside the GCC sources. In such a format
-string, a directive starts with &lsquo;<samp><span class="samp">%</span></samp>&rsquo;, is optionally followed by a
-size specifier &lsquo;<samp><span class="samp">l</span></samp>&rsquo;, an optional flag &lsquo;<samp><span class="samp">+</span></samp>&rsquo;, another optional flag
-&lsquo;<samp><span class="samp">#</span></samp>&rsquo;, and is finished by a specifier: &lsquo;<samp><span class="samp">%</span></samp>&rsquo; denotes a literal
-percent sign, &lsquo;<samp><span class="samp">c</span></samp>&rsquo; denotes a character, &lsquo;<samp><span class="samp">s</span></samp>&rsquo; denotes a string,
-&lsquo;<samp><span class="samp">i</span></samp>&rsquo; and &lsquo;<samp><span class="samp">d</span></samp>&rsquo; denote an integer, &lsquo;<samp><span class="samp">o</span></samp>&rsquo;, &lsquo;<samp><span class="samp">u</span></samp>&rsquo;, &lsquo;<samp><span class="samp">x</span></samp>&rsquo;
-denote an unsigned integer, &lsquo;<samp><span class="samp">.*s</span></samp>&rsquo; denotes a string preceded by a
-width specification, &lsquo;<samp><span class="samp">H</span></samp>&rsquo; denotes a &lsquo;<samp><span class="samp">location_t *</span></samp>&rsquo; pointer,
-&lsquo;<samp><span class="samp">D</span></samp>&rsquo; denotes a general declaration, &lsquo;<samp><span class="samp">F</span></samp>&rsquo; denotes a function
-declaration, &lsquo;<samp><span class="samp">T</span></samp>&rsquo; denotes a type, &lsquo;<samp><span class="samp">A</span></samp>&rsquo; denotes a function argument,
-&lsquo;<samp><span class="samp">C</span></samp>&rsquo; denotes a tree code, &lsquo;<samp><span class="samp">E</span></samp>&rsquo; denotes an expression, &lsquo;<samp><span class="samp">L</span></samp>&rsquo;
-denotes a programming language, &lsquo;<samp><span class="samp">O</span></samp>&rsquo; denotes a binary operator,
-&lsquo;<samp><span class="samp">P</span></samp>&rsquo; denotes a function parameter, &lsquo;<samp><span class="samp">Q</span></samp>&rsquo; denotes an assignment
-operator, &lsquo;<samp><span class="samp">V</span></samp>&rsquo; denotes a const/volatile qualifier.
-
-<div class="node">
-<a name="gfc-internal-format"></a>
-<a name="gfc_002dinternal_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#qt_002dformat">qt-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gcc_002dinternal_002dformat">gcc-internal-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.19 GFC internal Format Strings</h4>
-
- <p>These format strings are used inside the GNU Fortran Compiler sources,
-that is, the Fortran frontend in the GCC sources. In such a format
-string, a directive starts with &lsquo;<samp><span class="samp">%</span></samp>&rsquo; and is finished by a
-specifier: &lsquo;<samp><span class="samp">%</span></samp>&rsquo; denotes a literal percent sign, &lsquo;<samp><span class="samp">C</span></samp>&rsquo; denotes the
-current source location, &lsquo;<samp><span class="samp">L</span></samp>&rsquo; denotes a source location, &lsquo;<samp><span class="samp">c</span></samp>&rsquo;
-denotes a character, &lsquo;<samp><span class="samp">s</span></samp>&rsquo; denotes a string, &lsquo;<samp><span class="samp">i</span></samp>&rsquo; and &lsquo;<samp><span class="samp">d</span></samp>&rsquo;
-denote an integer, &lsquo;<samp><span class="samp">u</span></samp>&rsquo; denotes an unsigned integer. &lsquo;<samp><span class="samp">i</span></samp>&rsquo;,
-&lsquo;<samp><span class="samp">d</span></samp>&rsquo;, and &lsquo;<samp><span class="samp">u</span></samp>&rsquo; may be preceded by a size specifier &lsquo;<samp><span class="samp">l</span></samp>&rsquo;.
-
-<div class="node">
-<a name="qt-format"></a>
-<a name="qt_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#qt_002dplural_002dformat">qt-plural-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gfc_002dinternal_002dformat">gfc-internal-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.20 Qt Format Strings</h4>
-
- <p>Qt format strings are described in the documentation of the QString class
-<a href="file:/usr/lib/qt-4.3.0/doc/html/qstring.html">file:/usr/lib/qt-4.3.0/doc/html/qstring.html</a>.
-In summary, a directive consists of a &lsquo;<samp><span class="samp">%</span></samp>&rsquo; followed by a digit. The same
-directive cannot occur more than once in a format string.
-
-<div class="node">
-<a name="qt-plural-format"></a>
-<a name="qt_002dplural_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#kde_002dformat">kde-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#qt_002dformat">qt-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.21 Qt Format Strings</h4>
-
- <p>Qt format strings are described in the documentation of the QObject::tr method
-<a href="file:/usr/lib/qt-4.3.0/doc/html/qobject.html">file:/usr/lib/qt-4.3.0/doc/html/qobject.html</a>.
-In summary, the only allowed directive is &lsquo;<samp><span class="samp">%n</span></samp>&rsquo;.
-
-<div class="node">
-<a name="kde-format"></a>
-<a name="kde_002dformat"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#boost_002dformat">boost-format</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#qt_002dplural_002dformat">qt-plural-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.22 KDE Format Strings</h4>
-
- <p>KDE 4 format strings are defined as follows:
-A directive consists of a &lsquo;<samp><span class="samp">%</span></samp>&rsquo; followed by a non-zero decimal number.
-If a &lsquo;<samp><span class="samp">%n</span></samp>&rsquo; occurs in a format strings, all of &lsquo;<samp><span class="samp">%1</span></samp>&rsquo;, ..., &lsquo;<samp><span class="samp">%(n-1)</span></samp>&rsquo;
-must occur as well, except possibly one of them.
-
-<div class="node">
-<a name="boost-format"></a>
-<a name="boost_002dformat"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#kde_002dformat">kde-format</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Translators-for-other-Languages">Translators for other Languages</a>
-
-</div>
-
-<h4 class="subsection">15.3.23 Boost Format Strings</h4>
-
- <p>Boost format strings are described in the documentation of the
-<code>boost::format</code> class, at
-<a href="http://www.boost.org/libs/format/doc/format.html">http://www.boost.org/libs/format/doc/format.html</a>.
-In summary, a directive has either the same syntax as in a C format string,
-such as &lsquo;<samp><span class="samp">%1$+5d</span></samp>&rsquo;, or may be surrounded by vertical bars, such as
-&lsquo;<samp><span class="samp">%|1$+5d|</span></samp>&rsquo; or &lsquo;<samp><span class="samp">%|1$+5|</span></samp>&rsquo;, or consists of just an argument number
-between percent signs, such as &lsquo;<samp><span class="samp">%1%</span></samp>&rsquo;.
-
-<div class="node">
-<a name="Maintainers-for-other-Languages"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#List-of-Programming-Languages">List of Programming Languages</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Translators-for-other-Languages">Translators for other Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programming-Languages">Programming Languages</a>
-
-</div>
-
-<h3 class="section">15.4 The Maintainer's View</h3>
-
- <p>For the maintainer, the general procedure differs from the C language
-case in two ways.
-
- <ul>
-<li>For those languages that don't use GNU gettext, the <samp><span class="file">intl/</span></samp> directory
-is not needed and can be omitted. This means that the maintainer calls the
-<code>gettextize</code> program without the &lsquo;<samp><span class="samp">--intl</span></samp>&rsquo; option, and that he
-invokes the <code>AM_GNU_GETTEXT</code> autoconf macro via
-&lsquo;<samp><span class="samp">AM_GNU_GETTEXT([external])</span></samp>&rsquo;.
-
- <li>If only a single programming language is used, the <code>XGETTEXT_OPTIONS</code>
-variable in <samp><span class="file">po/Makevars</span></samp> (see <a href="#po_002fMakevars">po/Makevars</a>) should be adjusted to
-match the <code>xgettext</code> options for that particular programming language.
-If the package uses more than one programming language with <code>gettext</code>
-support, it becomes necessary to change the POT file construction rule
-in <samp><span class="file">po/Makefile.in.in</span></samp>. It is recommended to make one <code>xgettext</code>
-invocation per programming language, each with the options appropriate for
-that language, and to combine the resulting files using <code>msgcat</code>.
-</ul>
-
-<div class="node">
-<a name="List-of-Programming-Languages"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#List-of-Data-Formats">List of Data Formats</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Maintainers-for-other-Languages">Maintainers for other Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programming-Languages">Programming Languages</a>
-
-</div>
-
-<h3 class="section">15.5 Individual Programming Languages</h3>
-
-<!-- Here is a list of programming languages, as used for Free Software projects -->
-<!-- on SourceForge/Freshmeat, as of February 2002. Those supported by gettext -->
-<!-- are marked with a star. -->
-<!-- C 3580 * -->
-<!-- Perl 1911 * -->
-<!-- C++ 1379 * -->
-<!-- Java 1200 * -->
-<!-- PHP 1051 * -->
-<!-- Python 613 * -->
-<!-- Unix Shell 357 * -->
-<!-- Tcl 266 * -->
-<!-- SQL 174 -->
-<!-- JavaScript 118 -->
-<!-- Assembly 108 -->
-<!-- Scheme 51 -->
-<!-- Ruby 47 -->
-<!-- Lisp 45 * -->
-<!-- Objective C 39 * -->
-<!-- PL/SQL 29 -->
-<!-- Fortran 25 -->
-<!-- Ada 24 -->
-<!-- Delphi 22 -->
-<!-- Awk 19 * -->
-<!-- Pascal 19 -->
-<!-- ML 19 -->
-<!-- Eiffel 17 -->
-<!-- Emacs-Lisp 14 * -->
-<!-- Zope 14 -->
-<!-- ASP 12 -->
-<!-- Forth 12 -->
-<!-- Cold Fusion 10 -->
-<!-- Haskell 9 -->
-<!-- Visual Basic 9 -->
-<!-- C# 6 * -->
-<!-- Smalltalk 6 * -->
-<!-- Basic 5 -->
-<!-- Erlang 5 -->
-<!-- Modula 5 -->
-<!-- Object Pascal 5 * -->
-<!-- Rexx 5 -->
-<!-- Dylan 4 -->
-<!-- Prolog 4 -->
-<!-- APL 3 -->
-<!-- PROGRESS 2 -->
-<!-- Euler 1 -->
-<!-- Euphoria 1 -->
-<!-- Pliant 1 -->
-<!-- Simula 1 -->
-<!-- XBasic 1 -->
-<!-- Logo 0 -->
-<!-- Other Scripting Engines 49 -->
-<!-- Other 116 -->
-<ul class="menu">
-<li><a accesskey="1" href="#C">C</a>: C, C++, Objective C
-<li><a accesskey="2" href="#sh">sh</a>: sh - Shell Script
-<li><a accesskey="3" href="#bash">bash</a>: bash - Bourne-Again Shell Script
-<li><a accesskey="4" href="#Python">Python</a>: Python
-<li><a accesskey="5" href="#Common-Lisp">Common Lisp</a>: GNU clisp - Common Lisp
-<li><a accesskey="6" href="#clisp-C">clisp C</a>: GNU clisp C sources
-<li><a accesskey="7" href="#Emacs-Lisp">Emacs Lisp</a>: Emacs Lisp
-<li><a accesskey="8" href="#librep">librep</a>: librep
-<li><a accesskey="9" href="#Scheme">Scheme</a>: GNU guile - Scheme
-<li><a href="#Smalltalk">Smalltalk</a>: GNU Smalltalk
-<li><a href="#Java">Java</a>: Java
-<li><a href="#C_0023">C#</a>: C#
-<li><a href="#gawk">gawk</a>: GNU awk
-<li><a href="#Pascal">Pascal</a>: Pascal - Free Pascal Compiler
-<li><a href="#wxWidgets">wxWidgets</a>: wxWidgets library
-<li><a href="#YCP">YCP</a>: YCP - YaST2 scripting language
-<li><a href="#Tcl">Tcl</a>: Tcl - Tk's scripting language
-<li><a href="#Perl">Perl</a>: Perl
-<li><a href="#PHP">PHP</a>: PHP Hypertext Preprocessor
-<li><a href="#Pike">Pike</a>: Pike
-<li><a href="#GCC_002dsource">GCC-source</a>: GNU Compiler Collection sources
-</ul>
-
-<div class="node">
-<a name="C"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#sh">sh</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#List-of-Programming-Languages">List of Programming Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.1 C, C++, Objective C</h4>
-
- <p><a name="index-C-and-C_002dlike-languages-1174"></a>
- <dl>
-<dt>RPMs<dd>gcc, gpp, gobjc, glibc, gettext
-
- <br><dt>File extension<dd>For C: <code>c</code>, <code>h</code>.
-<br>For C++: <code>C</code>, <code>c++</code>, <code>cc</code>, <code>cxx</code>, <code>cpp</code>, <code>hpp</code>.
-<br>For Objective C: <code>m</code>.
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>_("abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>dgettext</code>, <code>dcgettext</code>, <code>ngettext</code>,
-<code>dngettext</code>, <code>dcngettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code> function
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>setlocale<dd>Programmer must call <code>setlocale (LC_ALL, "")</code>
-
- <br><dt>Prerequisite<dd><code>#include &lt;libintl.h&gt;</code>
-<br><code>#include &lt;locale.h&gt;</code>
-<br><code>#define _(string) gettext (string)</code>
-
- <br><dt>Use or emulate GNU gettext<dd>Use
-
- <br><dt>Extractor<dd><code>xgettext -k_</code>
-
- <br><dt>Formatting with positions<dd><code>fprintf "%2$d %1$d"</code>
-<br>In C++: <code>autosprintf "%2$d %1$d"</code>
-(see <a href="autosprintf.html#Top">Introduction</a>)
-
- <br><dt>Portability<dd>autoconf (gettext.m4) and #if ENABLE_NLS
-
- <br><dt>po-mode marking<dd>yes
-</dl>
-
- <p>The following examples are available in the <samp><span class="file">examples</span></samp> directory:
-<code>hello-c</code>, <code>hello-c-gnome</code>, <code>hello-c++</code>, <code>hello-c++-qt</code>,
-<code>hello-c++-kde</code>, <code>hello-c++-gnome</code>, <code>hello-c++-wxwidgets</code>,
-<code>hello-objc</code>, <code>hello-objc-gnustep</code>, <code>hello-objc-gnome</code>.
-
-<div class="node">
-<a name="sh"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#bash">bash</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#C">C</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.2 sh - Shell Script</h4>
-
- <p><a name="index-shell-scripts-1175"></a>
- <dl>
-<dt>RPMs<dd>bash, gettext
-
- <br><dt>File extension<dd><code>sh</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>, <code>'abc'</code>, <code>abc</code>
-
- <br><dt>gettext shorthand<dd><code>"`gettext \"abc\"`"</code>
-
- <br><dt>gettext/ngettext functions<dd><a name="index-gettext-1176"></a><a name="index-ngettext-1177"></a><code>gettext</code>, <code>ngettext</code> programs
-<br><code>eval_gettext</code>, <code>eval_ngettext</code> shell functions
-
- <br><dt>textdomain<dd><a name="index-TEXTDOMAIN_0040r_007b_002c-environment-variable_007d-1178"></a>environment variable <code>TEXTDOMAIN</code>
-
- <br><dt>bindtextdomain<dd><a name="index-TEXTDOMAINDIR_0040r_007b_002c-environment-variable_007d-1179"></a>environment variable <code>TEXTDOMAINDIR</code>
-
- <br><dt>setlocale<dd>automatic
-
- <br><dt>Prerequisite<dd><code>. gettext.sh</code>
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd>&mdash;
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-sh</code>.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Preparing-Shell-Scripts">Preparing Shell Scripts</a>: Preparing Shell Scripts for Internationalization
-<li><a accesskey="2" href="#gettext_002esh">gettext.sh</a>: Contents of <code>gettext.sh</code>
-<li><a accesskey="3" href="#gettext-Invocation">gettext Invocation</a>: Invoking the <code>gettext</code> program
-<li><a accesskey="4" href="#ngettext-Invocation">ngettext Invocation</a>: Invoking the <code>ngettext</code> program
-<li><a accesskey="5" href="#envsubst-Invocation">envsubst Invocation</a>: Invoking the <code>envsubst</code> program
-<li><a accesskey="6" href="#eval_005fgettext-Invocation">eval_gettext Invocation</a>: Invoking the <code>eval_gettext</code> function
-<li><a accesskey="7" href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a>: Invoking the <code>eval_ngettext</code> function
-</ul>
-
-<div class="node">
-<a name="Preparing-Shell-Scripts"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gettext_002esh">gettext.sh</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#sh">sh</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.1 Preparing Shell Scripts for Internationalization</h5>
-
- <p><a name="index-preparing-shell-scripts-for-translation-1180"></a>
-Preparing a shell script for internationalization is conceptually similar
-to the steps described in <a href="#Sources">Sources</a>. The concrete steps for shell
-scripts are as follows.
-
- <ol type=1 start=1>
-<li>Insert the line
-
- <pre class="smallexample"> . gettext.sh
-</pre>
- <p>near the top of the script. <code>gettext.sh</code> is a shell function library
-that provides the functions
-<code>eval_gettext</code> (see <a href="#eval_005fgettext-Invocation">eval_gettext Invocation</a>) and
-<code>eval_ngettext</code> (see <a href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a>).
-You have to ensure that <code>gettext.sh</code> can be found in the <code>PATH</code>.
-
- <li>Set and export the <code>TEXTDOMAIN</code> and <code>TEXTDOMAINDIR</code> environment
-variables. Usually <code>TEXTDOMAIN</code> is the package or program name, and
-<code>TEXTDOMAINDIR</code> is the absolute pathname corresponding to
-<code>$prefix/share/locale</code>, where <code>$prefix</code> is the installation location.
-
- <pre class="smallexample"> TEXTDOMAIN=@PACKAGE@
- export TEXTDOMAIN
- TEXTDOMAINDIR=@LOCALEDIR@
- export TEXTDOMAINDIR
-</pre>
- <li>Prepare the strings for translation, as described in <a href="#Preparing-Strings">Preparing Strings</a>.
-
- <li>Simplify translatable strings so that they don't contain command substitution
-(<code>"`...`"</code> or <code>"$(...)"</code>), variable access with defaulting (like
-<code>${</code><var>variable</var><code>-</code><var>default</var><code>}</code>), access to positional arguments
-(like <code>$0</code>, <code>$1</code>, ...) or highly volatile shell variables (like
-<code>$?</code>). This can always be done through simple local code restructuring.
-For example,
-
- <pre class="smallexample"> echo "Usage: $0 [OPTION] FILE..."
-</pre>
- <p>becomes
-
- <pre class="smallexample"> program_name=$0
- echo "Usage: $program_name [OPTION] FILE..."
-</pre>
- <p>Similarly,
-
- <pre class="smallexample"> echo "Remaining files: `ls | wc -l`"
-</pre>
- <p>becomes
-
- <pre class="smallexample"> filecount="`ls | wc -l`"
- echo "Remaining files: $filecount"
-</pre>
- <li>For each translatable string, change the output command &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; or
-&lsquo;<samp><span class="samp">$echo</span></samp>&rsquo; to &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; (if the string contains no references to
-shell variables) or to &lsquo;<samp><span class="samp">eval_gettext</span></samp>&rsquo; (if it refers to shell variables),
-followed by a no-argument &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; command (to account for the terminating
-newline). Similarly, for cases with plural handling, replace a conditional
-&lsquo;<samp><span class="samp">echo</span></samp>&rsquo; command with an invocation of &lsquo;<samp><span class="samp">ngettext</span></samp>&rsquo; or
-&lsquo;<samp><span class="samp">eval_ngettext</span></samp>&rsquo;, followed by a no-argument &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; command.
-
- <p>When doing this, you also need to add an extra backslash before the dollar
-sign in references to shell variables, so that the &lsquo;<samp><span class="samp">eval_gettext</span></samp>&rsquo;
-function receives the translatable string before the variable values are
-substituted into it. For example,
-
- <pre class="smallexample"> echo "Remaining files: $filecount"
-</pre>
- <p>becomes
-
- <pre class="smallexample"> eval_gettext "Remaining files: \$filecount"; echo
-</pre>
- <p>If the output command is not &lsquo;<samp><span class="samp">echo</span></samp>&rsquo;, you can make it use &lsquo;<samp><span class="samp">echo</span></samp>&rsquo;
-nevertheless, through the use of backquotes. However, note that inside
-backquotes, backslashes must be doubled to be effective (because the
-backquoting eats one level of backslashes). For example, assuming that
-&lsquo;<samp><span class="samp">error</span></samp>&rsquo; is a shell function that signals an error,
-
- <pre class="smallexample"> error "file not found: $filename"
-</pre>
- <p>is first transformed into
-
- <pre class="smallexample"> error "`echo \"file not found: \$filename\"`"
-</pre>
- <p>which then becomes
-
- <pre class="smallexample"> error "`eval_gettext \"file not found: \\\$filename\"`"
-</pre>
- </ol>
-
-<div class="node">
-<a name="gettext.sh"></a>
-<a name="gettext_002esh"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gettext-Invocation">gettext Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Preparing-Shell-Scripts">Preparing Shell Scripts</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.2 Contents of <code>gettext.sh</code></h5>
-
- <p><code>gettext.sh</code>, contained in the run-time package of GNU gettext, provides
-the following:
-
- <ul>
-<li>$echo
-The variable <code>echo</code> is set to a command that outputs its first argument
-and a newline, without interpreting backslashes in the argument string.
-
- <li>eval_gettext
-See <a href="#eval_005fgettext-Invocation">eval_gettext Invocation</a>.
-
- <li>eval_ngettext
-See <a href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a>.
-</ul>
-
-<div class="node">
-<a name="gettext-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#ngettext-Invocation">ngettext Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gettext_002esh">gettext.sh</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.3 Invoking the <code>gettext</code> program</h5>
-
- <p><a name="index-gettext-1181"></a><a name="index-g_t_0040code_007bgettext_007d-program_002c-usage-1182"></a>
-<pre class="example"> gettext [<var>option</var>] [[<var>textdomain</var>] <var>msgid</var>]
- gettext [<var>option</var>] -s [<var>msgid</var>]...
-</pre>
- <p><a name="index-lookup-message-translation-1183"></a>The <code>gettext</code> program displays the native language translation of a
-textual message.
-
-<p class="noindent"><strong>Arguments</strong>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-d </span><var>textdomain</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--domain=</span><var>textdomain</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1184"></a><a name="index-g_t_002d_002ddomain_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1185"></a>Retrieve translated messages from <var>textdomain</var>. Usually a <var>textdomain</var>
-corresponds to a package, a program, or a module of a program.
-
- <br><dt>&lsquo;<samp><span class="samp">-e</span></samp>&rsquo;<dd><a name="index-g_t_002de_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1186"></a>Enable expansion of some escape sequences. This option is for compatibility
-with the &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; program or shell built-in. The escape sequences
-&lsquo;<samp><span class="samp">\a</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\b</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\c</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\f</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\n</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\r</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\t</span></samp>&rsquo;,
-&lsquo;<samp><span class="samp">\v</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\\</span></samp>&rsquo;, and &lsquo;<samp><span class="samp">\</span></samp>&rsquo; followed by one to three octal digits, are
-interpreted like the System V &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; program did.
-
- <br><dt>&lsquo;<samp><span class="samp">-E</span></samp>&rsquo;<dd><a name="index-g_t_002dE_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1187"></a>This option is only for compatibility with the &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; program or shell
-built-in. It has no effect.
-
- <br><dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1188"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1189"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-n</span></samp>&rsquo;<dd><a name="index-g_t_002dn_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1190"></a>Suppress trailing newline. By default, <code>gettext</code> adds a newline to
-the output.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1191"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1192"></a>Output version information and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">[</span><var>textdomain</var><span class="samp">] </span><var>msgid</var></samp>&rsquo;<dd>Retrieve translated message corresponding to <var>msgid</var> from <var>textdomain</var>.
-
- </dl>
-
- <p>If the <var>textdomain</var> parameter is not given, the domain is determined from
-the environment variable <code>TEXTDOMAIN</code>. If the message catalog is not
-found in the regular directory, another location can be specified with the
-environment variable <code>TEXTDOMAINDIR</code>.
-
- <p>When used with the <code>-s</code> option the program behaves like the &lsquo;<samp><span class="samp">echo</span></samp>&rsquo;
-command. But it does not simply copy its arguments to stdout. Instead those
-messages found in the selected catalog are translated.
-
- <p>Note: <code>xgettext</code> supports only the one-argument form of the
-<code>gettext</code> invocation, where no options are present and the
-<var>textdomain</var> is implicit, from the environment.
-
-<div class="node">
-<a name="ngettext-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#envsubst-Invocation">envsubst Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gettext-Invocation">gettext Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.4 Invoking the <code>ngettext</code> program</h5>
-
- <p><a name="index-ngettext-1193"></a><a name="index-g_t_0040code_007bngettext_007d-program_002c-usage-1194"></a>
-<pre class="example"> ngettext [<var>option</var>] [<var>textdomain</var>] <var>msgid</var> <var>msgid-plural</var> <var>count</var>
-</pre>
- <p><a name="index-lookup-plural-message-translation-1195"></a>The <code>ngettext</code> program displays the native language translation of a
-textual message whose grammatical form depends on a number.
-
-<p class="noindent"><strong>Arguments</strong>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-d </span><var>textdomain</var></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--domain=</span><var>textdomain</var></samp>&rsquo;<dd><a name="index-g_t_002dd_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1196"></a><a name="index-g_t_002d_002ddomain_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1197"></a>Retrieve translated messages from <var>textdomain</var>. Usually a <var>textdomain</var>
-corresponds to a package, a program, or a module of a program.
-
- <br><dt>&lsquo;<samp><span class="samp">-e</span></samp>&rsquo;<dd><a name="index-g_t_002de_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1198"></a>Enable expansion of some escape sequences. This option is for compatibility
-with the &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; program. The escape sequences
-&lsquo;<samp><span class="samp">\a</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\b</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\c</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\f</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\n</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\r</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\t</span></samp>&rsquo;,
-&lsquo;<samp><span class="samp">\v</span></samp>&rsquo;, &lsquo;<samp><span class="samp">\\</span></samp>&rsquo;, and &lsquo;<samp><span class="samp">\</span></samp>&rsquo; followed by one to three octal digits, are
-interpreted like the System V &lsquo;<samp><span class="samp">echo</span></samp>&rsquo; program did.
-
- <br><dt>&lsquo;<samp><span class="samp">-E</span></samp>&rsquo;<dd><a name="index-g_t_002dE_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1199"></a>This option is only for compatibility with the &lsquo;<samp><span class="samp">gettext</span></samp>&rsquo; program. It has
-no effect.
-
- <br><dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1200"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1201"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1202"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1203"></a>Output version information and exit.
-
- <br><dt>&lsquo;<samp><var>textdomain</var></samp>&rsquo;<dd>Retrieve translated message from <var>textdomain</var>.
-
- <br><dt>&lsquo;<samp><var>msgid</var> <var>msgid-plural</var></samp>&rsquo;<dd>Translate <var>msgid</var> (English singular) / <var>msgid-plural</var> (English plural).
-
- <br><dt>&lsquo;<samp><var>count</var></samp>&rsquo;<dd>Choose singular/plural form based on this value.
-
- </dl>
-
- <p>If the <var>textdomain</var> parameter is not given, the domain is determined from
-the environment variable <code>TEXTDOMAIN</code>. If the message catalog is not
-found in the regular directory, another location can be specified with the
-environment variable <code>TEXTDOMAINDIR</code>.
-
- <p>Note: <code>xgettext</code> supports only the three-arguments form of the
-<code>ngettext</code> invocation, where no options are present and the
-<var>textdomain</var> is implicit, from the environment.
-
-<div class="node">
-<a name="envsubst-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#eval_005fgettext-Invocation">eval_gettext Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#ngettext-Invocation">ngettext Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.5 Invoking the <code>envsubst</code> program</h5>
-
- <p><a name="index-envsubst-1204"></a><a name="index-g_t_0040code_007benvsubst_007d-program_002c-usage-1205"></a>
-<pre class="example"> envsubst [<var>option</var>] [<var>shell-format</var>]
-</pre>
- <p><a name="index-shell-format-string-1206"></a><a name="index-dollar-substitution-1207"></a><a name="index-environment-variables-1208"></a>The <code>envsubst</code> program substitutes the values of environment variables.
-
-<p class="noindent"><strong>Operation mode</strong>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-v</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--variables</span></samp>&rsquo;<dd><a name="index-g_t_002dv_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1209"></a><a name="index-g_t_002d_002dvariables_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1210"></a>Output the variables occurring in <var>shell-format</var>.
-
- </dl>
-
-<p class="noindent"><strong>Informative output</strong>
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">-h</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--help</span></samp>&rsquo;<dd><a name="index-g_t_002dh_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1211"></a><a name="index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1212"></a>Display this help and exit.
-
- <br><dt>&lsquo;<samp><span class="samp">-V</span></samp>&rsquo;<dt>&lsquo;<samp><span class="samp">--version</span></samp>&rsquo;<dd><a name="index-g_t_002dV_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1213"></a><a name="index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1214"></a>Output version information and exit.
-
- </dl>
-
- <p>In normal operation mode, standard input is copied to standard output,
-with references to environment variables of the form <code>$VARIABLE</code> or
-<code>${VARIABLE}</code> being replaced with the corresponding values. If a
-<var>shell-format</var> is given, only those environment variables that are
-referenced in <var>shell-format</var> are substituted; otherwise all environment
-variables references occurring in standard input are substituted.
-
- <p>These substitutions are a subset of the substitutions that a shell performs
-on unquoted and double-quoted strings. Other kinds of substitutions done
-by a shell, such as <code>${</code><var>variable</var><code>-</code><var>default</var><code>}</code> or
-<code>$(</code><var>command-list</var><code>)</code> or <code>`</code><var>command-list</var><code>`</code>, are not performed
-by the <code>envsubst</code> program, due to security reasons.
-
- <p>When <code>--variables</code> is used, standard input is ignored, and the output
-consists of the environment variables that are referenced in
-<var>shell-format</var>, one per line.
-
-<div class="node">
-<a name="eval_gettext-Invocation"></a>
-<a name="eval_005fgettext-Invocation"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#envsubst-Invocation">envsubst Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.6 Invoking the <code>eval_gettext</code> function</h5>
-
- <p><a name="index-g_t_0040code_007beval_005fgettext_007d-function_002c-usage-1215"></a>
-<pre class="example"> eval_gettext <var>msgid</var>
-</pre>
- <p><a name="index-lookup-message-translation-1216"></a>This function outputs the native language translation of a textual message,
-performing dollar-substitution on the result. Note that only shell variables
-mentioned in <var>msgid</var> will be dollar-substituted in the result.
-
-<div class="node">
-<a name="eval_ngettext-Invocation"></a>
-<a name="eval_005fngettext-Invocation"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#eval_005fgettext-Invocation">eval_gettext Invocation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#sh">sh</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.2.7 Invoking the <code>eval_ngettext</code> function</h5>
-
- <p><a name="index-g_t_0040code_007beval_005fngettext_007d-function_002c-usage-1217"></a>
-<pre class="example"> eval_ngettext <var>msgid</var> <var>msgid-plural</var> <var>count</var>
-</pre>
- <p><a name="index-lookup-plural-message-translation-1218"></a>This function outputs the native language translation of a textual message
-whose grammatical form depends on a number, performing dollar-substitution
-on the result. Note that only shell variables mentioned in <var>msgid</var> or
-<var>msgid-plural</var> will be dollar-substituted in the result.
-
-<div class="node">
-<a name="bash"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Python">Python</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#sh">sh</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.3 bash - Bourne-Again Shell Script</h4>
-
- <p><a name="index-bash-1219"></a>
-GNU <code>bash</code> 2.0 or newer has a special shorthand for translating a
-string and substituting variable values in it: <code>$"msgid"</code>. But
-the use of this construct is <strong>discouraged</strong>, due to the security
-holes it opens and due to its portability problems.
-
- <p>The security holes of <code>$"..."</code> come from the fact that after looking up
-the translation of the string, <code>bash</code> processes it like it processes
-any double-quoted string: dollar and backquote processing, like &lsquo;<samp><span class="samp">eval</span></samp>&rsquo;
-does.
-
- <ol type=1 start=1>
-<li>In a locale whose encoding is one of BIG5, BIG5-HKSCS, GBK, GB18030, SHIFT_JIS,
-JOHAB, some double-byte characters have a second byte whose value is
-<code>0x60</code>. For example, the byte sequence <code>\xe0\x60</code> is a single
-character in these locales. Many versions of <code>bash</code> (all versions
-up to bash-2.05, and newer versions on platforms without <code>mbsrtowcs()</code>
-function) don't know about character boundaries and see a backquote character
-where there is only a particular Chinese character. Thus it can start
-executing part of the translation as a command list. This situation can occur
-even without the translator being aware of it: if the translator provides
-translations in the UTF-8 encoding, it is the <code>gettext()</code> function which
-will, during its conversion from the translator's encoding to the user's
-locale's encoding, produce the dangerous <code>\x60</code> bytes.
-
- <li>A translator could - voluntarily or inadvertently - use backquotes
-<code>"`...`"</code> or dollar-parentheses <code>"$(...)"</code> in her translations.
-The enclosed strings would be executed as command lists by the shell.
- </ol>
-
- <p>The portability problem is that <code>bash</code> must be built with
-internationalization support; this is normally not the case on systems
-that don't have the <code>gettext()</code> function in libc.
-
-<div class="node">
-<a name="Python"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Common-Lisp">Common Lisp</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#bash">bash</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.4 Python</h4>
-
- <p><a name="index-Python-1220"></a>
- <dl>
-<dt>RPMs<dd>python
-
- <br><dt>File extension<dd><code>py</code>
-
- <br><dt>String syntax<dd><code>'abc'</code>, <code>u'abc'</code>, <code>r'abc'</code>, <code>ur'abc'</code>,
-<br><code>"abc"</code>, <code>u"abc"</code>, <code>r"abc"</code>, <code>ur"abc"</code>,
-<br><code>'''abc'''</code>, <code>u'''abc'''</code>, <code>r'''abc'''</code>, <code>ur'''abc'''</code>,
-<br><code>"""abc"""</code>, <code>u"""abc"""</code>, <code>r"""abc"""</code>, <code>ur"""abc"""</code>
-
- <br><dt>gettext shorthand<dd><code>_('abc')</code> etc.
-
- <br><dt>gettext/ngettext functions<dd><code>gettext.gettext</code>, <code>gettext.dgettext</code>,
-<code>gettext.ngettext</code>, <code>gettext.dngettext</code>,
-also <code>ugettext</code>, <code>ungettext</code>
-
- <br><dt>textdomain<dd><code>gettext.textdomain</code> function, or
-<code>gettext.install(</code><var>domain</var><code>)</code> function
-
- <br><dt>bindtextdomain<dd><code>gettext.bindtextdomain</code> function, or
-<code>gettext.install(</code><var>domain</var><code>,</code><var>localedir</var><code>)</code> function
-
- <br><dt>setlocale<dd>not used by the gettext emulation
-
- <br><dt>Prerequisite<dd><code>import gettext</code>
-
- <br><dt>Use or emulate GNU gettext<dd>emulate
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>'...%(ident)d...' % { 'ident': value }</code>
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-python</code>.
-
- <p>A note about format strings: Python supports format strings with unnamed
-arguments, such as <code>'...%d...'</code>, and format strings with named arguments,
-such as <code>'...%(ident)d...'</code>. The latter are preferable for
-internationalized programs, for two reasons:
-
- <ul>
-<li>When a format string takes more than one argument, the translator can provide
-a translation that uses the arguments in a different order, if the format
-string uses named arguments. For example, the translator can reformulate
- <pre class="smallexample"> "'%(volume)s' has only %(freespace)d bytes free."
-</pre>
- <p class="noindent">to
- <pre class="smallexample"> "Only %(freespace)d bytes free on '%(volume)s'."
-</pre>
- <p class="noindent">Additionally, the identifiers also provide some context to the translator.
-
- <li>In the context of plural forms, the format string used for the singular form
-does not use the numeric argument in many languages. Even in English, one
-prefers to write <code>"one hour"</code> instead of <code>"1 hour"</code>. Omitting
-individual arguments from format strings like this is only possible with
-the named argument syntax. (With unnamed arguments, Python &ndash; unlike C &ndash;
-verifies that the format string uses all supplied arguments.)
-</ul>
-
-<div class="node">
-<a name="Common-Lisp"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#clisp-C">clisp C</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Python">Python</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.5 GNU clisp - Common Lisp</h4>
-
- <p><a name="index-Common-Lisp-1221"></a><a name="index-Lisp-1222"></a><a name="index-clisp-1223"></a>
- <dl>
-<dt>RPMs<dd>clisp 2.28 or newer
-
- <br><dt>File extension<dd><code>lisp</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>(_ "abc")</code>, <code>(ENGLISH "abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>i18n:gettext</code>, <code>i18n:ngettext</code>
-
- <br><dt>textdomain<dd><code>i18n:textdomain</code>
-
- <br><dt>bindtextdomain<dd><code>i18n:textdomaindir</code>
-
- <br><dt>setlocale<dd>automatic
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext -k_ -kENGLISH</code>
-
- <br><dt>Formatting with positions<dd><code>format "~1@*~D ~0@*~D"</code>
-
- <br><dt>Portability<dd>On platforms without gettext, no translation.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-clisp</code>.
-
-<div class="node">
-<a name="clisp-C"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Emacs-Lisp">Emacs Lisp</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Common-Lisp">Common Lisp</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.6 GNU clisp C sources</h4>
-
- <p><a name="index-clisp-C-sources-1224"></a>
- <dl>
-<dt>RPMs<dd>clisp
-
- <br><dt>File extension<dd><code>d</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>ENGLISH ? "abc" : ""</code>
-<br><code>GETTEXT("abc")</code>
-<br><code>GETTEXTL("abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>clgettext</code>, <code>clgettextl</code>
-
- <br><dt>textdomain<dd>&mdash;
-
- <br><dt>bindtextdomain<dd>&mdash;
-
- <br><dt>setlocale<dd>automatic
-
- <br><dt>Prerequisite<dd><code>#include "lispbibl.c"</code>
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>clisp-xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>fprintf "%2$d %1$d"</code>
-
- <br><dt>Portability<dd>On platforms without gettext, no translation.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
-<div class="node">
-<a name="Emacs-Lisp"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#librep">librep</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#clisp-C">clisp C</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.7 Emacs Lisp</h4>
-
- <p><a name="index-Emacs-Lisp-1225"></a>
- <dl>
-<dt>RPMs<dd>emacs, xemacs
-
- <br><dt>File extension<dd><code>el</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>(_"abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>dgettext</code> (xemacs only)
-
- <br><dt>textdomain<dd><code>domain</code> special form (xemacs only)
-
- <br><dt>bindtextdomain<dd><code>bind-text-domain</code> function (xemacs only)
-
- <br><dt>setlocale<dd>automatic
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>format "%2$d %1$d"</code>
-
- <br><dt>Portability<dd>Only XEmacs. Without <code>I18N3</code> defined at build time, no translation.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
-<div class="node">
-<a name="librep"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Scheme">Scheme</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Emacs-Lisp">Emacs Lisp</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.8 librep</h4>
-
- <p><a name="index-g_t_0040code_007blibrep_007d-Lisp-1226"></a>
- <dl>
-<dt>RPMs<dd>librep 0.15.3 or newer
-
- <br><dt>File extension<dd><code>jl</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>(_"abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code> function
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>setlocale<dd>&mdash;
-
- <br><dt>Prerequisite<dd><code>(require 'rep.i18n.gettext)</code>
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>format "%2$d %1$d"</code>
-
- <br><dt>Portability<dd>On platforms without gettext, no translation.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-librep</code>.
-
-<div class="node">
-<a name="Scheme"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Smalltalk">Smalltalk</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#librep">librep</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.9 GNU guile - Scheme</h4>
-
- <p><a name="index-Scheme-1227"></a><a name="index-guile-1228"></a>
- <dl>
-<dt>RPMs<dd>guile
-
- <br><dt>File extension<dd><code>scm</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>(_ "abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>ngettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code>
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code>
-
- <br><dt>setlocale<dd><code>(catch #t (lambda () (setlocale LC_ALL "")) (lambda args #f))</code>
-
- <br><dt>Prerequisite<dd><code>(use-modules (ice-9 format))</code>
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext -k_</code>
-
- <br><dt>Formatting with positions<dd><!-- @code{format "~1@@*~D ~0@@*~D~2@@*"}, requires @code{(use-modules (ice-9 format))} -->
-<!-- not yet supported -->
-&mdash;
-
- <br><dt>Portability<dd>On platforms without gettext, no translation.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-guile</code>.
-
-<div class="node">
-<a name="Smalltalk"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Java">Java</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Scheme">Scheme</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.10 GNU Smalltalk</h4>
-
- <p><a name="index-Smalltalk-1229"></a>
- <dl>
-<dt>RPMs<dd>smalltalk
-
- <br><dt>File extension<dd><code>st</code>
-
- <br><dt>String syntax<dd><code>'abc'</code>
-
- <br><dt>gettext shorthand<dd><code>NLS ? 'abc'</code>
-
- <br><dt>gettext/ngettext functions<dd><code>LcMessagesDomain&gt;&gt;#at:</code>, <code>LcMessagesDomain&gt;&gt;#at:plural:with:</code>
-
- <br><dt>textdomain<dd><code>LcMessages&gt;&gt;#domain:localeDirectory:</code> (returns a <code>LcMessagesDomain</code>
-object).<br>
-Example: <code>I18N Locale default messages domain: 'gettext' localeDirectory: /usr/local/share/locale'</code>
-
- <br><dt>bindtextdomain<dd><code>LcMessages&gt;&gt;#domain:localeDirectory:</code>, see above.
-
- <br><dt>setlocale<dd>Automatic if you use <code>I18N Locale default</code>.
-
- <br><dt>Prerequisite<dd><code>PackageLoader fileInPackage: 'I18N'!</code>
-
- <br><dt>Use or emulate GNU gettext<dd>emulate
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>'%1 %2' bindWith: 'Hello' with: 'world'</code>
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory:
-<code>hello-smalltalk</code>.
-
-<div class="node">
-<a name="Java"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#C_0023">C#</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Smalltalk">Smalltalk</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.11 Java</h4>
-
- <p><a name="index-Java-1230"></a>
- <dl>
-<dt>RPMs<dd>java, java2
-
- <br><dt>File extension<dd><code>java</code>
-
- <br><dt>String syntax<dd>"abc"
-
- <br><dt>gettext shorthand<dd>_("abc")
-
- <br><dt>gettext/ngettext functions<dd><code>GettextResource.gettext</code>, <code>GettextResource.ngettext</code>,
-<code>GettextResource.pgettext</code>, <code>GettextResource.npgettext</code>
-
- <br><dt>textdomain<dd>&mdash;, use <code>ResourceBundle.getResource</code> instead
-
- <br><dt>bindtextdomain<dd>&mdash;, use CLASSPATH instead
-
- <br><dt>setlocale<dd>automatic
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>&mdash;, uses a Java specific message catalog format
-
- <br><dt>Extractor<dd><code>xgettext -k_</code>
-
- <br><dt>Formatting with positions<dd><code>MessageFormat.format "{1,number} {0,number}"</code>
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>Before marking strings as internationalizable, uses of the string
-concatenation operator need to be converted to <code>MessageFormat</code>
-applications. For example, <code>"file "+filename+" not found"</code> becomes
-<code>MessageFormat.format("file {0} not found", new Object[] { filename })</code>.
-Only after this is done, can the strings be marked and extracted.
-
- <p>GNU gettext uses the native Java internationalization mechanism, namely
-<code>ResourceBundle</code>s. There are two formats of <code>ResourceBundle</code>s:
-<code>.properties</code> files and <code>.class</code> files. The <code>.properties</code>
-format is a text file which the translators can directly edit, like PO
-files, but which doesn't support plural forms. Whereas the <code>.class</code>
-format is compiled from <code>.java</code> source code and can support plural
-forms (provided it is accessed through an appropriate API, see below).
-
- <p>To convert a PO file to a <code>.properties</code> file, the <code>msgcat</code>
-program can be used with the option <code>--properties-output</code>. To convert
-a <code>.properties</code> file back to a PO file, the <code>msgcat</code> program
-can be used with the option <code>--properties-input</code>. All the tools
-that manipulate PO files can work with <code>.properties</code> files as well,
-if given the <code>--properties-input</code> and/or <code>--properties-output</code>
-option.
-
- <p>To convert a PO file to a ResourceBundle class, the <code>msgfmt</code> program
-can be used with the option <code>--java</code> or <code>--java2</code>. To convert a
-ResourceBundle back to a PO file, the <code>msgunfmt</code> program can be used
-with the option <code>--java</code>.
-
- <p>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 <code>.class</code> or <code>.properties</code>
-files.
-
- <ol type=1 start=1>
-<li>The <code>java.util.ResourceBundle</code> API.
-
- <p>In particular, its <code>getString</code> function returns a string translation.
-Note that a missing translation yields a <code>MissingResourceException</code>.
-
- <p>This has the advantage of being the standard API. And it does not require
-any additional libraries, only the <code>msgcat</code> generated <code>.properties</code>
-files or the <code>msgfmt</code> generated <code>.class</code> files. But it cannot do
-plural handling, even if the resource was generated by <code>msgfmt</code> from
-a PO file with plural handling.
-
- <li>The <code>gnu.gettext.GettextResource</code> API.
-
- <p>Reference documentation in Javadoc 1.1 style format is in the
-<a href="javadoc2/index.html">javadoc2 directory</a>.
-
- <p>Its <code>gettext</code> function returns a string translation. Note that when
-a translation is missing, the <var>msgid</var> argument is returned unchanged.
-
- <p>This has the advantage of having the <code>ngettext</code> function for plural
-handling and the <code>pgettext</code> and <code>npgettext</code> for strings constraint
-to a particular context.
-
- <p><a name="index-g_t_0040code_007blibintl_007d-for-Java-1231"></a>To use this API, one needs the <code>libintl.jar</code> file which is part of
-the GNU gettext package and distributed under the LGPL.
- </ol>
-
- <p>Four examples, using the second API, are available in the <samp><span class="file">examples</span></samp>
-directory: <code>hello-java</code>, <code>hello-java-awt</code>, <code>hello-java-swing</code>,
-<code>hello-java-qtjambi</code>.
-
- <p>Now, to make use of the API and define a shorthand for &lsquo;<samp><span class="samp">getString</span></samp>&rsquo;,
-there are three idioms that you can choose from:
-
- <ul>
-<li>(This one assumes Java 1.5 or newer.)
-In a unique class of your project, say &lsquo;<samp><span class="samp">Util</span></samp>&rsquo;, define a static variable
-holding the <code>ResourceBundle</code> instance and the shorthand:
-
- <pre class="smallexample"> private static ResourceBundle myResources =
- ResourceBundle.getBundle("domain-name");
- public static String _(String s) {
- return myResources.getString(s);
- }
-</pre>
- <p>All classes containing internationalized strings then contain
-
- <pre class="smallexample"> import static Util._;
-</pre>
- <p class="noindent">and the shorthand is used like this:
-
- <pre class="smallexample"> System.out.println(_("Operation completed."));
-</pre>
- <li>In a unique class of your project, say &lsquo;<samp><span class="samp">Util</span></samp>&rsquo;, define a static variable
-holding the <code>ResourceBundle</code> instance:
-
- <pre class="smallexample"> public static ResourceBundle myResources =
- ResourceBundle.getBundle("domain-name");
-</pre>
- <p>All classes containing internationalized strings then contain
-
- <pre class="smallexample"> private static ResourceBundle res = Util.myResources;
- private static String _(String s) { return res.getString(s); }
-</pre>
- <p class="noindent">and the shorthand is used like this:
-
- <pre class="smallexample"> System.out.println(_("Operation completed."));
-</pre>
- <li>You add a class with a very short name, say &lsquo;<samp><span class="samp">S</span></samp>&rsquo;, containing just the
-definition of the resource bundle and of the shorthand:
-
- <pre class="smallexample"> public class S {
- public static ResourceBundle myResources =
- ResourceBundle.getBundle("domain-name");
- public static String _(String s) {
- return myResources.getString(s);
- }
- }
-</pre>
- <p class="noindent">and the shorthand is used like this:
-
- <pre class="smallexample"> System.out.println(S._("Operation completed."));
-</pre>
- </ul>
-
- <p>Which of the three idioms you choose, will depend on whether your project
-requires portability to Java versions prior to Java 1.5 and, if so, whether
-copying two lines of codes into every class is more acceptable in your project
-than a class with a single-letter name.
-
-<div class="node">
-<a name="C%23"></a>
-<a name="C_0023"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#gawk">gawk</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Java">Java</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.12 C#</h4>
-
- <p><a name="index-C_0023-1232"></a>
- <dl>
-<dt>RPMs<dd>pnet, pnetlib 0.6.2 or newer, or mono 0.29 or newer
-
- <br><dt>File extension<dd><code>cs</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>, <code>@"abc"</code>
-
- <br><dt>gettext shorthand<dd>_("abc")
-
- <br><dt>gettext/ngettext functions<dd><code>GettextResourceManager.GetString</code>,
-<code>GettextResourceManager.GetPluralString</code>
-<code>GettextResourceManager.GetParticularString</code>
-<code>GettextResourceManager.GetParticularPluralString</code>
-
- <br><dt>textdomain<dd><code>new GettextResourceManager(domain)</code>
-
- <br><dt>bindtextdomain<dd>&mdash;, compiled message catalogs are located in subdirectories of the directory
-containing the executable
-
- <br><dt>setlocale<dd>automatic
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>&mdash;, uses a C# specific message catalog format
-
- <br><dt>Extractor<dd><code>xgettext -k_</code>
-
- <br><dt>Formatting with positions<dd><code>String.Format "{1} {0}"</code>
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>Before marking strings as internationalizable, uses of the string
-concatenation operator need to be converted to <code>String.Format</code>
-invocations. For example, <code>"file "+filename+" not found"</code> becomes
-<code>String.Format("file {0} not found", filename)</code>.
-Only after this is done, can the strings be marked and extracted.
-
- <p>GNU gettext uses the native C#/.NET internationalization mechanism, namely
-the classes <code>ResourceManager</code> and <code>ResourceSet</code>. Applications
-use the <code>ResourceManager</code> methods to retrieve the native language
-translation of strings. An instance of <code>ResourceSet</code> is the in-memory
-representation of a message catalog file. The <code>ResourceManager</code> loads
-and accesses <code>ResourceSet</code> instances as needed to look up the
-translations.
-
- <p>There are two formats of <code>ResourceSet</code>s that can be directly loaded by
-the C# runtime: <code>.resources</code> files and <code>.dll</code> files.
-
- <ul>
-<li>The <code>.resources</code> format is a binary file usually generated through the
-<code>resgen</code> or <code>monoresgen</code> utility, but which doesn't support plural
-forms. <code>.resources</code> files can also be embedded in .NET <code>.exe</code> files.
-This only affects whether a file system access is performed to load the message
-catalog; it doesn't affect the contents of the message catalog.
-
- <li>On the other hand, the <code>.dll</code> format is a binary file that is compiled
-from <code>.cs</code> source code and can support plural forms (provided it is
-accessed through the GNU gettext API, see below).
-</ul>
-
- <p>Note that these .NET <code>.dll</code> and <code>.exe</code> files are not tied to a
-particular platform; their file format and GNU gettext for C# can be used
-on any platform.
-
- <p>To convert a PO file to a <code>.resources</code> file, the <code>msgfmt</code> program
-can be used with the option &lsquo;<samp><span class="samp">--csharp-resources</span></samp>&rsquo;. To convert a
-<code>.resources</code> file back to a PO file, the <code>msgunfmt</code> program can be
-used with the option &lsquo;<samp><span class="samp">--csharp-resources</span></samp>&rsquo;. You can also, in some cases,
-use the <code>resgen</code> program (from the <code>pnet</code> package) or the
-<code>monoresgen</code> program (from the <code>mono</code>/<code>mcs</code> package). These
-programs can also convert a <code>.resources</code> file back to a PO file. But
-beware: as of this writing (January 2004), the <code>monoresgen</code> converter is
-quite buggy and the <code>resgen</code> converter ignores the encoding of the PO
-files.
-
- <p>To convert a PO file to a <code>.dll</code> file, the <code>msgfmt</code> program can be
-used with the option <code>--csharp</code>. The result will be a <code>.dll</code> file
-containing a subclass of <code>GettextResourceSet</code>, which itself is a subclass
-of <code>ResourceSet</code>. To convert a <code>.dll</code> file containing a
-<code>GettextResourceSet</code> subclass back to a PO file, the <code>msgunfmt</code>
-program can be used with the option <code>--csharp</code>.
-
- <p>The advantages of the <code>.dll</code> format over the <code>.resources</code> format
-are:
-
- <ol type=1 start=1>
-<li>Freedom to localize: Users can add their own translations to an application
-after it has been built and distributed. Whereas when the programmer uses
-a <code>ResourceManager</code> constructor provided by the system, the set of
-<code>.resources</code> files for an application must be specified when the
-application is built and cannot be extended afterwards.
-<!-- If this were the only issue with the @code{.resources} format, one could -->
-<!-- use the @code{ResourceManager.CreateFileBasedResourceManager} function. -->
-
- <li>Plural handling: A message catalog in <code>.dll</code> format supports the plural
-handling function <code>GetPluralString</code>. Whereas <code>.resources</code> files can
-only contain data and only support lookups that depend on a single string.
-
- <li>Context handling: A message catalog in <code>.dll</code> format supports the
-query-with-context functions <code>GetParticularString</code> and
-<code>GetParticularPluralString</code>. Whereas <code>.resources</code> files can
-only contain data and only support lookups that depend on a single string.
-
- <li>The <code>GettextResourceManager</code> that loads the message catalogs in
-<code>.dll</code> format also provides for inheritance on a per-message basis.
-For example, in Austrian (<code>de_AT</code>) locale, translations from the German
-(<code>de</code>) message catalog will be used for messages not found in the
-Austrian message catalog. This has the consequence that the Austrian
-translators need only translate those few messages for which the translation
-into Austrian differs from the German one. Whereas when working with
-<code>.resources</code> files, each message catalog must provide the translations
-of all messages by itself.
-
- <li>The <code>GettextResourceManager</code> that loads the message catalogs in
-<code>.dll</code> format also provides for a fallback: The English <var>msgid</var> is
-returned when no translation can be found. Whereas when working with
-<code>.resources</code> files, a language-neutral <code>.resources</code> file must
-explicitly be provided as a fallback.
- </ol>
-
- <p>On the side of the programmatic APIs, the programmer can use either the
-standard <code>ResourceManager</code> API and the GNU <code>GettextResourceManager</code>
-API. The latter is an extension of the former, because
-<code>GettextResourceManager</code> is a subclass of <code>ResourceManager</code>.
-
- <ol type=1 start=1>
-<li>The <code>System.Resources.ResourceManager</code> API.
-
- <p>This API works with resources in <code>.resources</code> format.
-
- <p>The creation of the <code>ResourceManager</code> is done through
- <pre class="smallexample"> new ResourceManager(domainname, Assembly.GetExecutingAssembly())
-</pre>
- <p class="noindent">The <code>GetString</code> function returns a string's translation. Note that this
-function returns null when a translation is missing (i.e. not even found in
-the fallback resource file).
-
- <li>The <code>GNU.Gettext.GettextResourceManager</code> API.
-
- <p>This API works with resources in <code>.dll</code> format.
-
- <p>Reference documentation is in the
-<a href="csharpdoc/index.html">csharpdoc directory</a>.
-
- <p>The creation of the <code>ResourceManager</code> is done through
- <pre class="smallexample"> new GettextResourceManager(domainname)
-</pre>
- <p>The <code>GetString</code> function returns a string's translation. Note that when
-a translation is missing, the <var>msgid</var> argument is returned unchanged.
-
- <p>The <code>GetPluralString</code> function returns a string translation with plural
-handling, like the <code>ngettext</code> function in C.
-
- <p>The <code>GetParticularString</code> function returns a string's translation,
-specific to a particular context, like the <code>pgettext</code> function in C.
-Note that when a translation is missing, the <var>msgid</var> argument is returned
-unchanged.
-
- <p>The <code>GetParticularPluralString</code> function returns a string translation,
-specific to a particular context, with plural handling, like the
-<code>npgettext</code> function in C.
-
- <p><a name="index-g_t_0040code_007blibintl_007d-for-C_0023-1233"></a>To use this API, one needs the <code>GNU.Gettext.dll</code> file which is part of
-the GNU gettext package and distributed under the LGPL.
- </ol>
-
- <p>You can also mix both approaches: use the
-<code>GNU.Gettext.GettextResourceManager</code> constructor, but otherwise use
-only the <code>ResourceManager</code> type and only the <code>GetString</code> method.
-This is appropriate when you want to profit from the tools for PO files,
-but don't want to change an existing source code that uses
-<code>ResourceManager</code> and don't (yet) need the <code>GetPluralString</code> method.
-
- <p>Two examples, using the second API, are available in the <samp><span class="file">examples</span></samp>
-directory: <code>hello-csharp</code>, <code>hello-csharp-forms</code>.
-
- <p>Now, to make use of the API and define a shorthand for &lsquo;<samp><span class="samp">GetString</span></samp>&rsquo;,
-there are two idioms that you can choose from:
-
- <ul>
-<li>In a unique class of your project, say &lsquo;<samp><span class="samp">Util</span></samp>&rsquo;, define a static variable
-holding the <code>ResourceManager</code> instance:
-
- <pre class="smallexample"> public static GettextResourceManager MyResourceManager =
- new GettextResourceManager("domain-name");
-</pre>
- <p>All classes containing internationalized strings then contain
-
- <pre class="smallexample"> private static GettextResourceManager Res = Util.MyResourceManager;
- private static String _(String s) { return Res.GetString(s); }
-</pre>
- <p class="noindent">and the shorthand is used like this:
-
- <pre class="smallexample"> Console.WriteLine(_("Operation completed."));
-</pre>
- <li>You add a class with a very short name, say &lsquo;<samp><span class="samp">S</span></samp>&rsquo;, containing just the
-definition of the resource manager and of the shorthand:
-
- <pre class="smallexample"> public class S {
- public static GettextResourceManager MyResourceManager =
- new GettextResourceManager("domain-name");
- public static String _(String s) {
- return MyResourceManager.GetString(s);
- }
- }
-</pre>
- <p class="noindent">and the shorthand is used like this:
-
- <pre class="smallexample"> Console.WriteLine(S._("Operation completed."));
-</pre>
- </ul>
-
- <p>Which of the two idioms you choose, will depend on whether copying two lines
-of codes into every class is more acceptable in your project than a class
-with a single-letter name.
-
-<div class="node">
-<a name="gawk"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Pascal">Pascal</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#C_0023">C#</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.13 GNU awk</h4>
-
- <p><a name="index-awk-1234"></a><a name="index-gawk-1235"></a>
- <dl>
-<dt>RPMs<dd>gawk 3.1 or newer
-
- <br><dt>File extension<dd><code>awk</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>_"abc"</code>
-
- <br><dt>gettext/ngettext functions<dd><code>dcgettext</code>, missing <code>dcngettext</code> in gawk-3.1.0
-
- <br><dt>textdomain<dd><code>TEXTDOMAIN</code> variable
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>setlocale<dd>automatic, but missing <code>setlocale (LC_MESSAGES, "")</code> in gawk-3.1.0
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>printf "%2$d %1$d"</code> (GNU awk only)
-
- <br><dt>Portability<dd>On platforms without gettext, no translation. On non-GNU awks, you must
-define <code>dcgettext</code>, <code>dcngettext</code> and <code>bindtextdomain</code>
-yourself.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-gawk</code>.
-
-<div class="node">
-<a name="Pascal"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#wxWidgets">wxWidgets</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#gawk">gawk</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.14 Pascal - Free Pascal Compiler</h4>
-
- <p><a name="index-Pascal-1236"></a><a name="index-Free-Pascal-1237"></a><a name="index-Object-Pascal-1238"></a>
- <dl>
-<dt>RPMs<dd>fpk
-
- <br><dt>File extension<dd><code>pp</code>, <code>pas</code>
-
- <br><dt>String syntax<dd><code>'abc'</code>
-
- <br><dt>gettext shorthand<dd>automatic
-
- <br><dt>gettext/ngettext functions<dd>&mdash;, use <code>ResourceString</code> data type instead
-
- <br><dt>textdomain<dd>&mdash;, use <code>TranslateResourceStrings</code> function instead
-
- <br><dt>bindtextdomain<dd>&mdash;, use <code>TranslateResourceStrings</code> function instead
-
- <br><dt>setlocale<dd>automatic, but uses only LANG, not LC_MESSAGES or LC_ALL
-
- <br><dt>Prerequisite<dd><code>{$mode delphi}</code> or <code>{$mode objfpc}</code><br><code>uses gettext;</code>
-
- <br><dt>Use or emulate GNU gettext<dd>emulate partially
-
- <br><dt>Extractor<dd><code>ppc386</code> followed by <code>xgettext</code> or <code>rstconv</code>
-
- <br><dt>Formatting with positions<dd><code>uses sysutils;</code><br><code>format "%1:d %0:d"</code>
-
- <br><dt>Portability<dd>?
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>The Pascal compiler has special support for the <code>ResourceString</code> data
-type. It generates a <code>.rst</code> file. This is then converted to a
-<code>.pot</code> file by use of <code>xgettext</code> or <code>rstconv</code>. At runtime,
-a <code>.mo</code> file corresponding to translations of this <code>.pot</code> file
-can be loaded using the <code>TranslateResourceStrings</code> function in the
-<code>gettext</code> unit.
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-pascal</code>.
-
-<div class="node">
-<a name="wxWidgets"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#YCP">YCP</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Pascal">Pascal</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.15 wxWidgets library</h4>
-
- <p><a name="index-g_t_0040code_007bwxWidgets_007d-library-1239"></a>
- <dl>
-<dt>RPMs<dd>wxGTK, gettext
-
- <br><dt>File extension<dd><code>cpp</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>_("abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>wxLocale::GetString</code>, <code>wxGetTranslation</code>
-
- <br><dt>textdomain<dd><code>wxLocale::AddCatalog</code>
-
- <br><dt>bindtextdomain<dd><code>wxLocale::AddCatalogLookupPathPrefix</code>
-
- <br><dt>setlocale<dd><code>wxLocale::Init</code>, <code>wxSetLocale</code>
-
- <br><dt>Prerequisite<dd><code>#include &lt;wx/intl.h&gt;</code>
-
- <br><dt>Use or emulate GNU gettext<dd>emulate, see <code>include/wx/intl.h</code> and <code>src/common/intl.cpp</code>
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd>wxString::Format supports positions if and only if the system has
-<code>wprintf()</code>, <code>vswprintf()</code> functions and they support positions
-according to POSIX.
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>yes
-</dl>
-
-<div class="node">
-<a name="YCP"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Tcl">Tcl</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#wxWidgets">wxWidgets</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.16 YCP - YaST2 scripting language</h4>
-
- <p><a name="index-YCP-1240"></a><a name="index-YaST2-scripting-language-1241"></a>
- <dl>
-<dt>RPMs<dd>libycp, libycp-devel, yast2-core, yast2-core-devel
-
- <br><dt>File extension<dd><code>ycp</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>_("abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>_()</code> with 1 or 3 arguments
-
- <br><dt>textdomain<dd><code>textdomain</code> statement
-
- <br><dt>bindtextdomain<dd>&mdash;
-
- <br><dt>setlocale<dd>&mdash;
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>sformat "%2 %1"</code>
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-ycp</code>.
-
-<div class="node">
-<a name="Tcl"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Perl">Perl</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#YCP">YCP</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.17 Tcl - Tk's scripting language</h4>
-
- <p><a name="index-Tcl-1242"></a><a name="index-Tk_0027s-scripting-language-1243"></a>
- <dl>
-<dt>RPMs<dd>tcl
-
- <br><dt>File extension<dd><code>tcl</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>[_ "abc"]</code>
-
- <br><dt>gettext/ngettext functions<dd><code>::msgcat::mc</code>
-
- <br><dt>textdomain<dd>&mdash;
-
- <br><dt>bindtextdomain<dd>&mdash;, use <code>::msgcat::mcload</code> instead
-
- <br><dt>setlocale<dd>automatic, uses LANG, but ignores LC_MESSAGES and LC_ALL
-
- <br><dt>Prerequisite<dd><code>package require msgcat</code>
-<br><code>proc _ {s} {return [::msgcat::mc $s]}</code>
-
- <br><dt>Use or emulate GNU gettext<dd>&mdash;, uses a Tcl specific message catalog format
-
- <br><dt>Extractor<dd><code>xgettext -k_</code>
-
- <br><dt>Formatting with positions<dd><code>format "%2\$d %1\$d"</code>
-
- <br><dt>Portability<dd>fully portable
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>Two examples are available in the <samp><span class="file">examples</span></samp> directory:
-<code>hello-tcl</code>, <code>hello-tcl-tk</code>.
-
- <p>Before marking strings as internationalizable, substitutions of variables
-into the string need to be converted to <code>format</code> applications. For
-example, <code>"file $filename not found"</code> becomes
-<code>[format "file %s not found" $filename]</code>.
-Only after this is done, can the strings be marked and extracted.
-After marking, this example becomes
-<code>[format [_ "file %s not found"] $filename]</code> or
-<code>[msgcat::mc "file %s not found" $filename]</code>. Note that the
-<code>msgcat::mc</code> function implicitly calls <code>format</code> when more than one
-argument is given.
-
-<div class="node">
-<a name="Perl"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PHP">PHP</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Tcl">Tcl</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.18 Perl</h4>
-
- <p><a name="index-Perl-1244"></a>
- <dl>
-<dt>RPMs<dd>perl
-
- <br><dt>File extension<dd><code>pl</code>, <code>PL</code>, <code>pm</code>, <code>cgi</code>
-
- <br><dt>String syntax<dd>
- <ul>
-<li><code>"abc"</code>
-
- <li><code>'abc'</code>
-
- <li><code>qq (abc)</code>
-
- <li><code>q (abc)</code>
-
- <li><code>qr /abc/</code>
-
- <li><code>qx (/bin/date)</code>
-
- <li><code>/pattern match/</code>
-
- <li><code>?pattern match?</code>
-
- <li><code>s/substitution/operators/</code>
-
- <li><code>$tied_hash{"message"}</code>
-
- <li><code>$tied_hash_reference-&gt;{"message"}</code>
-
- <li>etc., issue the command &lsquo;<samp><span class="samp">man perlsyn</span></samp>&rsquo; for details
-
- </ul>
-
- <br><dt>gettext shorthand<dd><code>__</code> (double underscore)
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>dgettext</code>, <code>dcgettext</code>, <code>ngettext</code>,
-<code>dngettext</code>, <code>dcngettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code> function
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>bind_textdomain_codeset<dd><code>bind_textdomain_codeset</code> function
-
- <br><dt>setlocale<dd>Use <code>setlocale (LC_ALL, "");</code>
-
- <br><dt>Prerequisite<dd><code>use POSIX;</code>
-<br><code>use Locale::TextDomain;</code> (included in the package libintl-perl
-which is available on the Comprehensive Perl Archive Network CPAN,
-http://www.cpan.org/).
-
- <br><dt>Use or emulate GNU gettext<dd>platform dependent: gettext_pp emulates, gettext_xs uses GNU gettext
-
- <br><dt>Extractor<dd><code>xgettext -k__ -k\$__ -k%__ -k__x -k__n:1,2 -k__nx:1,2 -k__xn:1,2 -kN__ -k</code>
-
- <br><dt>Formatting with positions<dd>Both kinds of format strings support formatting with positions.
-<br><code>printf "%2\$d %1\$d", ...</code> (requires Perl 5.8.0 or newer)
-<br><code>__expand("[new] replaces [old]", old =&gt; $oldvalue, new =&gt; $newvalue)</code>
-
- <br><dt>Portability<dd>The <code>libintl-perl</code> package is platform independent but is not
-part of the Perl core. The programmer is responsible for
-providing a dummy implementation of the required functions if the
-package is not installed on the target system.
-
- <br><dt>po-mode marking<dd>&mdash;
-
- <br><dt>Documentation<dd>Included in <code>libintl-perl</code>, available on CPAN
-(http://www.cpan.org/).
-
- </dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-perl</code>.
-
- <p><a name="index-marking-Perl-sources-1245"></a>
-The <code>xgettext</code> parser backend for Perl differs significantly from
-the parser backends for other programming languages, just as Perl
-itself differs significantly from other programming languages. The
-Perl parser backend offers many more string marking facilities than
-the other backends but it also has some Perl specific limitations, the
-worst probably being its imperfectness.
-
-<ul class="menu">
-<li><a accesskey="1" href="#General-Problems">General Problems</a>: General Problems Parsing Perl Code
-<li><a accesskey="2" href="#Default-Keywords">Default Keywords</a>: Which Keywords Will xgettext Look For?
-<li><a accesskey="3" href="#Special-Keywords">Special Keywords</a>: How to Extract Hash Keys
-<li><a accesskey="4" href="#Quote_002dlike-Expressions">Quote-like Expressions</a>: What are Strings And Quote-like Expressions?
-<li><a accesskey="5" href="#Interpolation-I">Interpolation I</a>: Invalid String Interpolation
-<li><a accesskey="6" href="#Interpolation-II">Interpolation II</a>: Valid String Interpolation
-<li><a accesskey="7" href="#Parentheses">Parentheses</a>: When To Use Parentheses
-<li><a accesskey="8" href="#Long-Lines">Long Lines</a>: How To Grok with Long Lines
-<li><a accesskey="9" href="#Perl-Pitfalls">Perl Pitfalls</a>: Bugs, Pitfalls, and Things That Do Not Work
-</ul>
-
-<div class="node">
-<a name="General-Problems"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Default-Keywords">Default Keywords</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.1 General Problems Parsing Perl Code</h5>
-
- <p>It is often heard that only Perl can parse Perl. This is not true.
-Perl cannot be <em>parsed</em> at all, it can only be <em>executed</em>.
-Perl has various built-in ambiguities that can only be resolved at runtime.
-
- <p>The following example may illustrate one common problem:
-
-<pre class="example"> print gettext "Hello World!";
-</pre>
- <p>Although this example looks like a bullet-proof case of a function
-invocation, it is not:
-
-<pre class="example"> open gettext, "&gt;testfile" or die;
- print gettext "Hello world!"
-</pre>
- <p>In this context, the string <code>gettext</code> looks more like a
-file handle. But not necessarily:
-
-<pre class="example"> use Locale::Messages qw (:libintl_h);
- open gettext "&gt;testfile" or die;
- print gettext "Hello world!";
-</pre>
- <p>Now, the file is probably syntactically incorrect, provided that the module
-<code>Locale::Messages</code> found first in the Perl include path exports a
-function <code>gettext</code>. But what if the module
-<code>Locale::Messages</code> really looks like this?
-
-<pre class="example"> use vars qw (*gettext);
-
- 1;
-</pre>
- <p>In this case, the string <code>gettext</code> will be interpreted as a file
-handle again, and the above example will create a file <samp><span class="file">testfile</span></samp>
-and write the string &ldquo;Hello world!&rdquo; into it. Even advanced
-control flow analysis will not really help:
-
-<pre class="example"> if (0.5 &lt; rand) {
- eval "use Sane";
- } else {
- eval "use InSane";
- }
- print gettext "Hello world!";
-</pre>
- <p>If the module <code>Sane</code> exports a function <code>gettext</code> that does
-what we expect, and the module <code>InSane</code> opens a file for writing
-and associates the <em>handle</em> <code>gettext</code> with this output
-stream, we are clueless again about what will happen at runtime. It is
-completely unpredictable. The truth is that Perl has so many ways to
-fill its symbol table at runtime that it is impossible to interpret a
-particular piece of code without executing it.
-
- <p>Of course, <code>xgettext</code> will not execute your Perl sources while
-scanning for translatable strings, but rather use heuristics in order
-to guess what you meant.
-
- <p>Another problem is the ambiguity of the slash and the question mark.
-Their interpretation depends on the context:
-
-<pre class="example"> # A pattern match.
- print "OK\n" if /foobar/;
-
- # A division.
- print 1 / 2;
-
- # Another pattern match.
- print "OK\n" if ?foobar?;
-
- # Conditional.
- print $x ? "foo" : "bar";
-</pre>
- <p>The slash may either act as the division operator or introduce a
-pattern match, whereas the question mark may act as the ternary
-conditional operator or as a pattern match, too. Other programming
-languages like <code>awk</code> present similar problems, but the consequences of a
-misinterpretation are particularly nasty with Perl sources. In <code>awk</code>
-for instance, a statement can never exceed one line and the parser
-can recover from a parsing error at the next newline and interpret
-the rest of the input stream correctly. Perl is different, as a
-pattern match is terminated by the next appearance of the delimiter
-(the slash or the question mark) in the input stream, regardless of
-the semantic context. If a slash is really a division sign but
-mis-interpreted as a pattern match, the rest of the input file is most
-probably parsed incorrectly.
-
- <p>There are certain cases, where the ambiguity cannot be resolved at all:
-
-<pre class="example"> $x = wantarray ? 1 : 0;
-</pre>
- <p>The Perl built-in function <code>wantarray</code> does not accept any arguments.
-The Perl parser therefore knows that the question mark does not start
-a regular expression but is the ternary conditional operator.
-
-<pre class="example"> sub wantarrays {}
- $x = wantarrays ? 1 : 0;
-</pre>
- <p>Now the situation is different. The function <code>wantarrays</code> takes
-a variable number of arguments (like any non-prototyped Perl function).
-The question mark is now the delimiter of a pattern match, and hence
-the piece of code does not compile.
-
-<pre class="example"> sub wantarrays() {}
- $x = wantarrays ? 1 : 0;
-</pre>
- <p>Now the function is prototyped, Perl knows that it does not accept any
-arguments, and the question mark is therefore interpreted as the
-ternaray operator again. But that unfortunately outsmarts <code>xgettext</code>.
-
- <p>The Perl parser in <code>xgettext</code> cannot know whether a function has
-a prototype and what that prototype would look like. It therefore makes
-an educated guess. If a function is known to be a Perl built-in and
-this function does not accept any arguments, a following question mark
-or slash is treated as an operator, otherwise as the delimiter of a
-following regular expression. The Perl built-ins that do not accept
-arguments are <code>wantarray</code>, <code>fork</code>, <code>time</code>, <code>times</code>,
-<code>getlogin</code>, <code>getppid</code>, <code>getpwent</code>, <code>getgrent</code>,
-<code>gethostent</code>, <code>getnetent</code>, <code>getprotoent</code>, <code>getservent</code>,
-<code>setpwent</code>, <code>setgrent</code>, <code>endpwent</code>, <code>endgrent</code>,
-<code>endhostent</code>, <code>endnetent</code>, <code>endprotoent</code>, and
-<code>endservent</code>.
-
- <p>If you find that <code>xgettext</code> fails to extract strings from
-portions of your sources, you should therefore look out for slashes
-and/or question marks preceding these sections. You may have come
-across a bug in <code>xgettext</code>'s Perl parser (and of course you
-should report that bug). In the meantime you should consider to
-reformulate your code in a manner less challenging to <code>xgettext</code>.
-
- <p>In particular, if the parser is too dumb to see that a function
-does not accept arguments, use parentheses:
-
-<pre class="example"> $x = somefunc() ? 1 : 0;
- $y = (somefunc) ? 1 : 0;
-</pre>
- <p>In fact the Perl parser itself has similar problems and warns you
-about such constructs.
-
-<div class="node">
-<a name="Default-Keywords"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Special-Keywords">Special Keywords</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#General-Problems">General Problems</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.2 Which keywords will xgettext look for?</h5>
-
- <p><a name="index-Perl-default-keywords-1246"></a>
-Unless you instruct <code>xgettext</code> otherwise by invoking it with one
-of the options <code>--keyword</code> or <code>-k</code>, it will recognize the
-following keywords in your Perl sources:
-
- <ul>
-<li><code>gettext</code>
-
- <li><code>dgettext</code>
-
- <li><code>dcgettext</code>
-
- <li><code>ngettext:1,2</code>
-
- <p>The first (singular) and the second (plural) argument will be
-extracted.
-
- <li><code>dngettext:1,2</code>
-
- <p>The first (singular) and the second (plural) argument will be
-extracted.
-
- <li><code>dcngettext:1,2</code>
-
- <p>The first (singular) and the second (plural) argument will be
-extracted.
-
- <li><code>gettext_noop</code>
-
- <li><code>%gettext</code>
-
- <p>The keys of lookups into the hash <code>%gettext</code> will be extracted.
-
- <li><code>$gettext</code>
-
- <p>The keys of lookups into the hash reference <code>$gettext</code> will be extracted.
-
- </ul>
-
-<div class="node">
-<a name="Special-Keywords"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Quote_002dlike-Expressions">Quote-like Expressions</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Default-Keywords">Default Keywords</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.3 How to Extract Hash Keys</h5>
-
- <p><a name="index-Perl-special-keywords-for-hash_002dlookups-1247"></a>
-Translating messages at runtime is normally performed by looking up the
-original string in the translation database and returning the
-translated version. The &ldquo;natural&rdquo; Perl implementation is a hash
-lookup, and, of course, <code>xgettext</code> supports such practice.
-
-<pre class="example"> print __"Hello world!";
- print $__{"Hello world!"};
- print $__-&gt;{"Hello world!"};
- print $$__{"Hello world!"};
-</pre>
- <p>The above four lines all do the same thing. The Perl module
-<code>Locale::TextDomain</code> exports by default a hash <code>%__</code> that
-is tied to the function <code>__()</code>. It also exports a reference
-<code>$__</code> to <code>%__</code>.
-
- <p>If an argument to the <code>xgettext</code> option <code>--keyword</code>,
-resp. <code>-k</code> starts with a percent sign, the rest of the keyword is
-interpreted as the name of a hash. If it starts with a dollar
-sign, the rest of the keyword is interpreted as a reference to a
-hash.
-
- <p>Note that you can omit the quotation marks (single or double) around
-the hash key (almost) whenever Perl itself allows it:
-
-<pre class="example"> print $gettext{Error};
-</pre>
- <p>The exact rule is: You can omit the surrounding quotes, when the hash
-key is a valid C (!) identifier, i.e. when it starts with an
-underscore or an ASCII letter and is followed by an arbitrary number
-of underscores, ASCII letters or digits. Other Unicode characters
-are <em>not</em> allowed, regardless of the <code>use utf8</code> pragma.
-
-<div class="node">
-<a name="Quote-like-Expressions"></a>
-<a name="Quote_002dlike-Expressions"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Interpolation-I">Interpolation I</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Special-Keywords">Special Keywords</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.4 What are Strings And Quote-like Expressions?</h5>
-
- <p><a name="index-Perl-quote_002dlike-expressions-1248"></a>
-Perl offers a plethora of different string constructs. Those that can
-be used either as arguments to functions or inside braces for hash
-lookups are generally supported by <code>xgettext</code>.
-
- <ul>
-<li><strong>double-quoted strings</strong>
-<br>
- <pre class="example"> print gettext "Hello World!";
-</pre>
- <li><strong>single-quoted strings</strong>
-<br>
- <pre class="example"> print gettext 'Hello World!';
-</pre>
- <li><strong>the operator qq</strong>
-<br>
- <pre class="example"> print gettext qq |Hello World!|;
- print gettext qq &lt;E-mail: &lt;guido\@imperia.net&gt;&gt;;
-</pre>
- <p>The operator <code>qq</code> is fully supported. You can use arbitrary
-delimiters, including the four bracketing delimiters (round, angle,
-square, curly) that nest.
-
- <li><strong>the operator q</strong>
-<br>
- <pre class="example"> print gettext q |Hello World!|;
- print gettext q &lt;E-mail: &lt;guido@imperia.net&gt;&gt;;
-</pre>
- <p>The operator <code>q</code> is fully supported. You can use arbitrary
-delimiters, including the four bracketing delimiters (round, angle,
-square, curly) that nest.
-
- <li><strong>the operator qx</strong>
-<br>
- <pre class="example"> print gettext qx ;LANGUAGE=C /bin/date;
- print gettext qx [/usr/bin/ls | grep '^[A-Z]*'];
-</pre>
- <p>The operator <code>qx</code> is fully supported. You can use arbitrary
-delimiters, including the four bracketing delimiters (round, angle,
-square, curly) that nest.
-
- <p>The example is actually a useless use of <code>gettext</code>. It will
-invoke the <code>gettext</code> function on the output of the command
-specified with the <code>qx</code> operator. The feature was included
-in order to make the interface consistent (the parser will extract
-all strings and quote-like expressions).
-
- <li><strong>here documents</strong>
-<br>
- <pre class="example"> print gettext &lt;&lt;'EOF';
- program not found in $PATH
- EOF
-
- print ngettext &lt;&lt;EOF, &lt;&lt;"EOF";
- one file deleted
- EOF
- several files deleted
- EOF
-</pre>
- <p>Here-documents are recognized. If the delimiter is enclosed in single
-quotes, the string is not interpolated. If it is enclosed in double
-quotes or has no quotes at all, the string is interpolated.
-
- <p>Delimiters that start with a digit are not supported!
-
- </ul>
-
-<div class="node">
-<a name="Interpolation-I"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Interpolation-II">Interpolation II</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Quote_002dlike-Expressions">Quote-like Expressions</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.5 Invalid Uses Of String Interpolation</h5>
-
- <p><a name="index-Perl-invalid-string-interpolation-1249"></a>
-Perl is capable of interpolating variables into strings. This offers
-some nice features in localized programs but can also lead to
-problems.
-
- <p>A common error is a construct like the following:
-
-<pre class="example"> print gettext "This is the program $0!\n";
-</pre>
- <p>Perl will interpolate at runtime the value of the variable <code>$0</code>
-into the argument of the <code>gettext()</code> function. Hence, this
-argument is not a string constant but a variable argument (<code>$0</code>
-is a global variable that holds the name of the Perl script being
-executed). The interpolation is performed by Perl before the string
-argument is passed to <code>gettext()</code> and will therefore depend on
-the name of the script which can only be determined at runtime.
-Consequently, it is almost impossible that a translation can be looked
-up at runtime (except if, by accident, the interpolated string is found
-in the message catalog).
-
- <p>The <code>xgettext</code> program will therefore terminate parsing with a fatal
-error if it encounters a variable inside of an extracted string. In
-general, this will happen for all kinds of string interpolations that
-cannot be safely performed at compile time. If you absolutely know
-what you are doing, you can always circumvent this behavior:
-
-<pre class="example"> my $know_what_i_am_doing = "This is program $0!\n";
- print gettext $know_what_i_am_doing;
-</pre>
- <p>Since the parser only recognizes strings and quote-like expressions,
-but not variables or other terms, the above construct will be
-accepted. You will have to find another way, however, to let your
-original string make it into your message catalog.
-
- <p>If invoked with the option <code>--extract-all</code>, resp. <code>-a</code>,
-variable interpolation will be accepted. Rationale: You will
-generally use this option in order to prepare your sources for
-internationalization.
-
- <p>Please see the manual page &lsquo;<samp><span class="samp">man perlop</span></samp>&rsquo; for details of strings and
-quote-like expressions that are subject to interpolation and those
-that are not. Safe interpolations (that will not lead to a fatal
-error) are:
-
- <ul>
-<li>the escape sequences <code>\t</code> (tab, HT, TAB), <code>\n</code>
-(newline, NL), <code>\r</code> (return, CR), <code>\f</code> (form feed, FF),
-<code>\b</code> (backspace, BS), <code>\a</code> (alarm, bell, BEL), and <code>\e</code>
-(escape, ESC).
-
- <li>octal chars, like <code>\033</code>
-<br>
-Note that octal escapes in the range of 400-777 are translated into a
-UTF-8 representation, regardless of the presence of the <code>use utf8</code> pragma.
-
- <li>hex chars, like <code>\x1b</code>
-
- <li>wide hex chars, like <code>\x{263a}</code>
-<br>
-Note that this escape is translated into a UTF-8 representation,
-regardless of the presence of the <code>use utf8</code> pragma.
-
- <li>control chars, like <code>\c[</code> (CTRL-[)
-
- <li>named Unicode chars, like <code>\N{LATIN CAPITAL LETTER C WITH CEDILLA}</code>
-<br>
-Note that this escape is translated into a UTF-8 representation,
-regardless of the presence of the <code>use utf8</code> pragma.
-</ul>
-
- <p>The following escapes are considered partially safe:
-
- <ul>
-<li><code>\l</code> lowercase next char
-
- <li><code>\u</code> uppercase next char
-
- <li><code>\L</code> lowercase till \E
-
- <li><code>\U</code> uppercase till \E
-
- <li><code>\E</code> end case modification
-
- <li><code>\Q</code> quote non-word characters till \E
-
- </ul>
-
- <p>These escapes are only considered safe if the string consists of
-ASCII characters only. Translation of characters outside the range
-defined by ASCII is locale-dependent and can actually only be performed
-at runtime; <code>xgettext</code> doesn't do these locale-dependent translations
-at extraction time.
-
- <p>Except for the modifier <code>\Q</code>, these translations, albeit valid,
-are generally useless and only obfuscate your sources. If a
-translation can be safely performed at compile time you can just as
-well write what you mean.
-
-<div class="node">
-<a name="Interpolation-II"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Parentheses">Parentheses</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Interpolation-I">Interpolation I</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.6 Valid Uses Of String Interpolation</h5>
-
- <p><a name="index-Perl-valid-string-interpolation-1250"></a>
-Perl is often used to generate sources for other programming languages
-or arbitrary file formats. Web applications that output HTML code
-make a prominent example for such usage.
-
- <p>You will often come across situations where you want to intersperse
-code written in the target (programming) language with translatable
-messages, like in the following HTML example:
-
-<pre class="example"> print gettext &lt;&lt;EOF;
- &lt;h1&gt;My Homepage&lt;/h1&gt;
- &lt;script language="JavaScript"&gt;&lt;!--
- for (i = 0; i &lt; 100; ++i) {
- alert ("Thank you so much for visiting my homepage!");
- }
- //--&gt;&lt;/script&gt;
- EOF
-</pre>
- <p>The parser will extract the entire here document, and it will appear
-entirely in the resulting PO file, including the JavaScript snippet
-embedded in the HTML code. If you exaggerate with constructs like
-the above, you will run the risk that the translators of your package
-will look out for a less challenging project. You should consider an
-alternative expression here:
-
-<pre class="example"> print &lt;&lt;EOF;
- &lt;h1&gt;$gettext{"My Homepage"}&lt;/h1&gt;
- &lt;script language="JavaScript"&gt;&lt;!--
- for (i = 0; i &lt; 100; ++i) {
- alert ("$gettext{'Thank you so much for visiting my homepage!'}");
- }
- //--&gt;&lt;/script&gt;
- EOF
-</pre>
- <p>Only the translatable portions of the code will be extracted here, and
-the resulting PO file will begrudgingly improve in terms of readability.
-
- <p>You can interpolate hash lookups in all strings or quote-like
-expressions that are subject to interpolation (see the manual page
-&lsquo;<samp><span class="samp">man perlop</span></samp>&rsquo; for details). Double interpolation is invalid, however:
-
-<pre class="example"> # TRANSLATORS: Replace "the earth" with the name of your planet.
- print gettext qq{Welcome to $gettext-&gt;{"the earth"}};
-</pre>
- <p>The <code>qq</code>-quoted string is recognized as an argument to <code>xgettext</code> in
-the first place, and checked for invalid variable interpolation. The
-dollar sign of hash-dereferencing will therefore terminate the parser
-with an &ldquo;invalid interpolation&rdquo; error.
-
- <p>It is valid to interpolate hash lookups in regular expressions:
-
-<pre class="example"> if ($var =~ /$gettext{"the earth"}/) {
- print gettext "Match!\n";
- }
- s/$gettext{"U. S. A."}/$gettext{"U. S. A."} $gettext{"(dial +0)"}/g;
-</pre>
- <div class="node">
-<a name="Parentheses"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Long-Lines">Long Lines</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Interpolation-II">Interpolation II</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.7 When To Use Parentheses</h5>
-
- <p><a name="index-Perl-parentheses-1251"></a>
-In Perl, parentheses around function arguments are mostly optional.
-<code>xgettext</code> will always assume that all
-recognized keywords (except for hashes and hash references) are names
-of properly prototyped functions, and will (hopefully) only require
-parentheses where Perl itself requires them. All constructs in the
-following example are therefore ok to use:
-
-<pre class="example"> print gettext ("Hello World!\n");
- print gettext "Hello World!\n";
- print dgettext ($package =&gt; "Hello World!\n");
- print dgettext $package, "Hello World!\n";
-
- # The "fat comma" =&gt; turns the left-hand side argument into a
- # single-quoted string!
- print dgettext smellovision =&gt; "Hello World!\n";
-
- # The following assignment only works with prototyped functions.
- # Otherwise, the functions will act as "greedy" list operators and
- # eat up all following arguments.
- my $anonymous_hash = {
- planet =&gt; gettext "earth",
- cakes =&gt; ngettext "one cake", "several cakes", $n,
- still =&gt; $works,
- };
- # The same without fat comma:
- my $other_hash = {
- 'planet', gettext "earth",
- 'cakes', ngettext "one cake", "several cakes", $n,
- 'still', $works,
- };
-
- # Parentheses are only significant for the first argument.
- print dngettext 'package', ("one cake", "several cakes", $n), $discarded;
-</pre>
- <div class="node">
-<a name="Long-Lines"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Perl-Pitfalls">Perl Pitfalls</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Parentheses">Parentheses</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.8 How To Grok with Long Lines</h5>
-
- <p><a name="index-Perl-long-lines-1252"></a>
-The necessity of long messages can often lead to a cumbersome or
-unreadable coding style. Perl has several options that may prevent
-you from writing unreadable code, and
-<code>xgettext</code> does its best to do likewise. This is where the dot
-operator (the string concatenation operator) may come in handy:
-
-<pre class="example"> print gettext ("This is a very long"
- . " message that is still"
- . " readable, because"
- . " it is split into"
- . " multiple lines.\n");
-</pre>
- <p>Perl is smart enough to concatenate these constant string fragments
-into one long string at compile time, and so is
-<code>xgettext</code>. You will only find one long message in the resulting
-POT file.
-
- <p>Note that the future Perl 6 will probably use the underscore
-(&lsquo;<samp><span class="samp">_</span></samp>&rsquo;) as the string concatenation operator, and the dot
-(&lsquo;<samp><span class="samp">.</span></samp>&rsquo;) for dereferencing. This new syntax is not yet supported by
-<code>xgettext</code>.
-
- <p>If embedded newline characters are not an issue, or even desired, you
-may also insert newline characters inside quoted strings wherever you
-feel like it:
-
-<pre class="example"> print gettext ("&lt;em&gt;In HTML output
- embedded newlines are generally no
- problem, since adjacent whitespace
- is always rendered into a single
- space character.&lt;/em&gt;");
-</pre>
- <p>You may also consider to use here documents:
-
-<pre class="example"> print gettext &lt;&lt;EOF;
- &lt;em&gt;In HTML output
- embedded newlines are generally no
- problem, since adjacent whitespace
- is always rendered into a single
- space character.&lt;/em&gt;
- EOF
-</pre>
- <p>Please do not forget that the line breaks are real, i.e. they
-translate into newline characters that will consequently show up in
-the resulting POT file.
-
-<div class="node">
-<a name="Perl-Pitfalls"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Long-Lines">Long Lines</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Perl">Perl</a>
-
-</div>
-
-<h5 class="subsubsection">15.5.18.9 Bugs, Pitfalls, And Things That Do Not Work</h5>
-
- <p><a name="index-Perl-pitfalls-1253"></a>
-The foregoing sections should have proven that
-<code>xgettext</code> is quite smart in extracting translatable strings from
-Perl sources. Yet, some more or less exotic constructs that could be
-expected to work, actually do not work.
-
- <p>One of the more relevant limitations can be found in the
-implementation of variable interpolation inside quoted strings. Only
-simple hash lookups can be used there:
-
-<pre class="example"> print &lt;&lt;EOF;
- $gettext{"The dot operator"
- . " does not work"
- . "here!"}
- Likewise, you cannot @{[ gettext ("interpolate function calls") ]}
- inside quoted strings or quote-like expressions.
- EOF
-</pre>
- <p>This is valid Perl code and will actually trigger invocations of the
-<code>gettext</code> function at runtime. Yet, the Perl parser in
-<code>xgettext</code> will fail to recognize the strings. A less obvious
-example can be found in the interpolation of regular expressions:
-
-<pre class="example"> s/&lt;!--START_OF_WEEK--&gt;/gettext ("Sunday")/e;
-</pre>
- <p>The modifier <code>e</code> will cause the substitution to be interpreted as
-an evaluable statement. Consequently, at runtime the function
-<code>gettext()</code> is called, but again, the parser fails to extract the
-string &ldquo;Sunday&rdquo;. Use a temporary variable as a simple workaround if
-you really happen to need this feature:
-
-<pre class="example"> my $sunday = gettext "Sunday";
- s/&lt;!--START_OF_WEEK--&gt;/$sunday/;
-</pre>
- <p>Hash slices would also be handy but are not recognized:
-
-<pre class="example"> my @weekdays = @gettext{'Sunday', 'Monday', 'Tuesday', 'Wednesday',
- 'Thursday', 'Friday', 'Saturday'};
- # Or even:
- @weekdays = @gettext{qw (Sunday Monday Tuesday Wednesday Thursday
- Friday Saturday) };
-</pre>
- <p>This is perfectly valid usage of the tied hash <code>%gettext</code> but the
-strings are not recognized and therefore will not be extracted.
-
- <p>Another caveat of the current version is its rudimentary support for
-non-ASCII characters in identifiers. You may encounter serious
-problems if you use identifiers with characters outside the range of
-'A'-'Z', 'a'-'z', '0'-'9' and the underscore '_'.
-
- <p>Maybe some of these missing features will be implemented in future
-versions, but since you can always make do without them at minimal effort,
-these todos have very low priority.
-
- <p>A nasty problem are brace format strings that already contain braces
-as part of the normal text, for example the usage strings typically
-encountered in programs:
-
-<pre class="example"> die "usage: $0 {OPTIONS} FILENAME...\n";
-</pre>
- <p>If you want to internationalize this code with Perl brace format strings,
-you will run into a problem:
-
-<pre class="example"> die __x ("usage: {program} {OPTIONS} FILENAME...\n", program =&gt; $0);
-</pre>
- <p>Whereas &lsquo;<samp><span class="samp">{program}</span></samp>&rsquo; is a placeholder, &lsquo;<samp><span class="samp">{OPTIONS}</span></samp>&rsquo;
-is not and should probably be translated. Yet, there is no way to teach
-the Perl parser in <code>xgettext</code> to recognize the first one, and leave
-the other one alone.
-
- <p>There are two possible work-arounds for this problem. If you are
-sure that your program will run under Perl 5.8.0 or newer (these
-Perl versions handle positional parameters in <code>printf()</code>) or
-if you are sure that the translator will not have to reorder the arguments
-in her translation &ndash; for example if you have only one brace placeholder
-in your string, or if it describes a syntax, like in this one &ndash;, you can
-mark the string as <code>no-perl-brace-format</code> and use <code>printf()</code>:
-
-<pre class="example"> # xgettext: no-perl-brace-format
- die sprintf ("usage: %s {OPTIONS} FILENAME...\n", $0);
-</pre>
- <p>If you want to use the more portable Perl brace format, you will have to do
-put placeholders in place of the literal braces:
-
-<pre class="example"> die __x ("usage: {program} {[}OPTIONS{]} FILENAME...\n",
- program =&gt; $0, '[' =&gt; '{', ']' =&gt; '}');
-</pre>
- <p>Perl brace format strings know no escaping mechanism. No matter how this
-escaping mechanism looked like, it would either give the programmer a
-hard time, make translating Perl brace format strings heavy-going, or
-result in a performance penalty at runtime, when the format directives
-get executed. Most of the time you will happily get along with
-<code>printf()</code> for this special case.
-
-<div class="node">
-<a name="PHP"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Pike">Pike</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Perl">Perl</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.19 PHP Hypertext Preprocessor</h4>
-
- <p><a name="index-PHP-1254"></a>
- <dl>
-<dt>RPMs<dd>mod_php4, mod_php4-core, phpdoc
-
- <br><dt>File extension<dd><code>php</code>, <code>php3</code>, <code>php4</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>, <code>'abc'</code>
-
- <br><dt>gettext shorthand<dd><code>_("abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>dgettext</code>, <code>dcgettext</code>; starting with PHP 4.2.0
-also <code>ngettext</code>, <code>dngettext</code>, <code>dcngettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code> function
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>setlocale<dd>Programmer must call <code>setlocale (LC_ALL, "")</code>
-
- <br><dt>Prerequisite<dd>&mdash;
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd><code>xgettext</code>
-
- <br><dt>Formatting with positions<dd><code>printf "%2\$d %1\$d"</code>
-
- <br><dt>Portability<dd>On platforms without gettext, the functions are not available.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
- <p>An example is available in the <samp><span class="file">examples</span></samp> directory: <code>hello-php</code>.
-
-<div class="node">
-<a name="Pike"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#GCC_002dsource">GCC-source</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PHP">PHP</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.20 Pike</h4>
-
- <p><a name="index-Pike-1255"></a>
- <dl>
-<dt>RPMs<dd>roxen
-
- <br><dt>File extension<dd><code>pike</code>
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd>&mdash;
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>dgettext</code>, <code>dcgettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code> function
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>setlocale<dd><code>setlocale</code> function
-
- <br><dt>Prerequisite<dd><code>import Locale.Gettext;</code>
-
- <br><dt>Use or emulate GNU gettext<dd>use
-
- <br><dt>Extractor<dd>&mdash;
-
- <br><dt>Formatting with positions<dd>&mdash;
-
- <br><dt>Portability<dd>On platforms without gettext, the functions are not available.
-
- <br><dt>po-mode marking<dd>&mdash;
-</dl>
-
-<div class="node">
-<a name="GCC-source"></a>
-<a name="GCC_002dsource"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Pike">Pike</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Programming-Languages">List of Programming Languages</a>
-
-</div>
-
-<h4 class="subsection">15.5.21 GNU Compiler Collection sources</h4>
-
- <p><a name="index-GCC_002dsource-1256"></a>
- <dl>
-<dt>RPMs<dd>gcc
-
- <br><dt>File extension<dd><code>c</code>, <code>h</code>.
-
- <br><dt>String syntax<dd><code>"abc"</code>
-
- <br><dt>gettext shorthand<dd><code>_("abc")</code>
-
- <br><dt>gettext/ngettext functions<dd><code>gettext</code>, <code>dgettext</code>, <code>dcgettext</code>, <code>ngettext</code>,
-<code>dngettext</code>, <code>dcngettext</code>
-
- <br><dt>textdomain<dd><code>textdomain</code> function
-
- <br><dt>bindtextdomain<dd><code>bindtextdomain</code> function
-
- <br><dt>setlocale<dd>Programmer must call <code>setlocale (LC_ALL, "")</code>
-
- <br><dt>Prerequisite<dd><code>#include "intl.h"</code>
-
- <br><dt>Use or emulate GNU gettext<dd>Use
-
- <br><dt>Extractor<dd><code>xgettext -k_</code>
-
- <br><dt>Formatting with positions<dd>&mdash;
-
- <br><dt>Portability<dd>Uses autoconf macros
-
- <br><dt>po-mode marking<dd>yes
-</dl>
-
-<!-- This is the template for new languages. -->
-<div class="node">
-<a name="List-of-Data-Formats"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#List-of-Programming-Languages">List of Programming Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Programming-Languages">Programming Languages</a>
-
-</div>
-
-<h3 class="section">15.6 Internationalizable Data</h3>
-
- <p>Here is a list of other data formats which can be internationalized
-using GNU gettext.
-
-<ul class="menu">
-<li><a accesskey="1" href="#POT">POT</a>: POT - Portable Object Template
-<li><a accesskey="2" href="#RST">RST</a>: Resource String Table
-<li><a accesskey="3" href="#Glade">Glade</a>: Glade - GNOME user interface description
-</ul>
-
-<div class="node">
-<a name="POT"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#RST">RST</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#List-of-Data-Formats">List of Data Formats</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Data-Formats">List of Data Formats</a>
-
-</div>
-
-<h4 class="subsection">15.6.1 POT - Portable Object Template</h4>
-
- <dl>
-<dt>RPMs<dd>gettext
-
- <br><dt>File extension<dd><code>pot</code>, <code>po</code>
-
- <br><dt>Extractor<dd><code>xgettext</code>
-</dl>
-
-<div class="node">
-<a name="RST"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Glade">Glade</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#POT">POT</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Data-Formats">List of Data Formats</a>
-
-</div>
-
-<h4 class="subsection">15.6.2 Resource String Table</h4>
-
- <p><a name="index-RST-1257"></a>
- <dl>
-<dt>RPMs<dd>fpk
-
- <br><dt>File extension<dd><code>rst</code>
-
- <br><dt>Extractor<dd><code>xgettext</code>, <code>rstconv</code>
-</dl>
-
-<div class="node">
-<a name="Glade"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#RST">RST</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#List-of-Data-Formats">List of Data Formats</a>
-
-</div>
-
-<h4 class="subsection">15.6.3 Glade - GNOME user interface description</h4>
-
- <dl>
-<dt>RPMs<dd>glade, libglade, glade2, libglade2, intltool
-
- <br><dt>File extension<dd><code>glade</code>, <code>glade2</code>
-
- <br><dt>Extractor<dd><code>xgettext</code>, <code>libglade-xgettext</code>, <code>xml-i18n-extract</code>, <code>intltool-extract</code>
-</dl>
-
-<!-- This is the template for new data formats. -->
-<div class="node">
-<a name="Conclusion"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Language-Codes">Language Codes</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Programming-Languages">Programming Languages</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">16 Concluding Remarks</h2>
-
- <p>We would like to conclude this GNU <code>gettext</code> 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.
-
-<ul class="menu">
-<li><a accesskey="1" href="#History">History</a>: History of GNU <code>gettext</code>
-<li><a accesskey="2" href="#References">References</a>: Related Readings
-</ul>
-
-<div class="node">
-<a name="History"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#References">References</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Conclusion">Conclusion</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Conclusion">Conclusion</a>
-
-</div>
-
-<h3 class="section">16.1 History of GNU <code>gettext</code></h3>
-
- <p><a name="index-history-of-GNU-_0040code_007bgettext_007d-1258"></a>
-Internationalization concerns and algorithms have been informally
-and casually discussed for years in GNU, sometimes around GNU
-<code>libc</code>, maybe around the incoming <code>Hurd</code>, or otherwise
-(nobody clearly remembers). And even then, when the work started for
-real, this was somewhat independently of these previous discussions.
-
- <p>This all began in July 1994, when Patrick D'Cruze had the idea and
-initiative of internationalizing version 3.9.2 of GNU <code>fileutils</code>.
-He then asked Jim Meyering, the maintainer, how to get those changes
-folded into an official release. That first draft was full of
-<code>#ifdef</code>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 <code>glocale</code>, at that time.
-
- <p>Jim implemented <code>glocale</code> and got a lot of exhausting feedback
-from Patrick and Richard, of course, but also from Mitchum DSouza
-(who wrote a <code>catgets</code>-like package), Roland McGrath, maybe David
-MacKenzie, Fran&ccedil;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, <code>glocale</code> was torn apart.
-In particular, Paul Eggert &ndash; always keeping an eye on developments
-in Solaris &ndash; advocated the use of the <code>gettext</code> API over
-<code>glocale</code>'s <code>catgets</code>-based API.
-
- <p>While Jim took some distance and time and became dad for a second
-time, Roland wanted to get GNU <code>libc</code> internationalized, and
-got Ulrich Drepper involved in that project. Instead of starting
-from <code>glocale</code>, Ulrich rewrote something from scratch, but
-more conforming to the set of guidelines who emerged out of the
-<code>glocale</code> effort. Then, Ulrich got people from the previous
-forum to involve themselves into this new project, and the switch
-from <code>glocale</code> to what was first named <code>msgutils</code>, renamed
-<code>nlsutils</code>, and later <code>gettext</code>, became officially accepted
-by Richard in May 1995 or so.
-
- <p>Let's summarize by saying that Ulrich Drepper wrote GNU <code>gettext</code>
-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 <code>THANKS</code> file which comes with the GNU <code>gettext</code>
-distribution.
-
- <p>While this was being done, Fran&ccedil;ois adapted half a dozen of
-GNU packages to <code>glocale</code> first, then later to <code>gettext</code>,
-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.
-
- <p>Fran&ccedil;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 <code>gettext</code> Texinfo manual.
-
- <p>In 1997, Ulrich Drepper released the GNU libc 2.0, which included the
-<code>gettext</code>, <code>textdomain</code> and <code>bindtextdomain</code> functions.
-
- <p>In 2000, Ulrich Drepper added plural form handling (the <code>ngettext</code>
-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.
-
- <p>Ulrich being quite busy in his role of General Maintainer of GNU libc,
-he handed over the GNU <code>gettext</code> 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.
-
-<div class="node">
-<a name="References"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#History">History</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Conclusion">Conclusion</a>
-
-</div>
-
-<h3 class="section">16.2 Related Readings</h3>
-
- <p><a name="index-related-reading-1259"></a><a name="index-bibliography-1260"></a>
-<strong> NOTE: </strong> This documentation section is outdated and needs to be
-revised.
-
- <p>Eugene H. Dorr (<samp><span class="file">dorre@well.com</span></samp>) maintains an interesting
-bibliography on internationalization matters, called
-<cite>Internationalization Reference List</cite>, which is available as:
-<pre class="example"> ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/i18n-books.txt
-</pre>
- <p>Michael Gschwind (<samp><span class="file">mike@vlsivie.tuwien.ac.at</span></samp>) maintains a
-Frequently Asked Questions (FAQ) list, entitled <cite>Programming for
-Internationalisation</cite>. 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&nbsp;8859-1<!-- /@w -->. It is regularly published in Usenet
-groups <samp><span class="file">comp.unix.questions</span></samp>, <samp><span class="file">comp.std.internat</span></samp>,
-<samp><span class="file">comp.software.international</span></samp>, <samp><span class="file">comp.lang.c</span></samp>,
-<samp><span class="file">comp.windows.x</span></samp>, <samp><span class="file">comp.std.c</span></samp>, <samp><span class="file">comp.answers</span></samp>
-and <samp><span class="file">news.answers</span></samp>. The home location of this document is:
-<pre class="example"> ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/ISO-programming
-</pre>
- <p>Patrick D'Cruze (<samp><span class="file">pdcruze@li.org</span></samp>) wrote a tutorial about NLS
-matters, and Jochen Hein (<samp><span class="file">Hein@student.tu-clausthal.de</span></samp>) took
-over the responsibility of maintaining it. It may be found as:
-<pre class="example"> ftp://sunsite.unc.edu/pub/Linux/utils/nls/catalogs/Incoming/...
- ...locale-tutorial-0.8.txt.gz
-</pre>
- <p class="noindent">This site is mirrored in:
-<pre class="example"> ftp://ftp.ibp.fr/pub/linux/sunsite/
-</pre>
- <p>A French version of the same tutorial should be findable at:
-<pre class="example"> ftp://ftp.ibp.fr/pub/linux/french/docs/
-</pre>
- <p class="noindent">together with French translations of many Linux-related documents.
-
-<div class="node">
-<a name="Language-Codes"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Country-Codes">Country Codes</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Conclusion">Conclusion</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="appendix">Appendix A Language Codes</h2>
-
- <p><a name="index-language-codes-1261"></a><a name="index-ISO-639-1262"></a>
-The ISO&nbsp;639<!-- /@w --> standard defines two-letter codes for many languages, and
-three-letter codes for more rarely used languages.
-All abbreviations for languages used in the Translation Project should
-come from this standard.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Usual-Language-Codes">Usual Language Codes</a>: Two-letter ISO 639 language codes
-<li><a accesskey="2" href="#Rare-Language-Codes">Rare Language Codes</a>: Three-letter ISO 639 language codes
-</ul>
-
-<div class="node">
-<a name="Usual-Language-Codes"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Rare-Language-Codes">Rare Language Codes</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Language-Codes">Language Codes</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Language-Codes">Language Codes</a>
-
-</div>
-
-<h3 class="appendixsec">A.1 Usual Language Codes</h3>
-
- <p>For the commonly used languages, the ISO&nbsp;639-1<!-- /@w --> standard defines two-letter
-codes.
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">aa</span></samp>&rsquo;<dd>Afar.
-<br><dt>&lsquo;<samp><span class="samp">ab</span></samp>&rsquo;<dd>Abkhazian.
-<br><dt>&lsquo;<samp><span class="samp">ae</span></samp>&rsquo;<dd>Avestan.
-<br><dt>&lsquo;<samp><span class="samp">af</span></samp>&rsquo;<dd>Afrikaans.
-<br><dt>&lsquo;<samp><span class="samp">ak</span></samp>&rsquo;<dd>Akan.
-<br><dt>&lsquo;<samp><span class="samp">am</span></samp>&rsquo;<dd>Amharic.
-<br><dt>&lsquo;<samp><span class="samp">an</span></samp>&rsquo;<dd>Aragonese.
-<br><dt>&lsquo;<samp><span class="samp">ar</span></samp>&rsquo;<dd>Arabic.
-<br><dt>&lsquo;<samp><span class="samp">as</span></samp>&rsquo;<dd>Assamese.
-<br><dt>&lsquo;<samp><span class="samp">av</span></samp>&rsquo;<dd>Avaric.
-<br><dt>&lsquo;<samp><span class="samp">ay</span></samp>&rsquo;<dd>Aymara.
-<br><dt>&lsquo;<samp><span class="samp">az</span></samp>&rsquo;<dd>Azerbaijani.
-<br><dt>&lsquo;<samp><span class="samp">ba</span></samp>&rsquo;<dd>Bashkir.
-<br><dt>&lsquo;<samp><span class="samp">be</span></samp>&rsquo;<dd>Belarusian.
-<br><dt>&lsquo;<samp><span class="samp">bg</span></samp>&rsquo;<dd>Bulgarian.
-<br><dt>&lsquo;<samp><span class="samp">bh</span></samp>&rsquo;<dd>Bihari.
-<br><dt>&lsquo;<samp><span class="samp">bi</span></samp>&rsquo;<dd>Bislama.
-<br><dt>&lsquo;<samp><span class="samp">bm</span></samp>&rsquo;<dd>Bambara.
-<br><dt>&lsquo;<samp><span class="samp">bn</span></samp>&rsquo;<dd>Bengali; Bangla.
-<br><dt>&lsquo;<samp><span class="samp">bo</span></samp>&rsquo;<dd>Tibetan.
-<br><dt>&lsquo;<samp><span class="samp">br</span></samp>&rsquo;<dd>Breton.
-<br><dt>&lsquo;<samp><span class="samp">bs</span></samp>&rsquo;<dd>Bosnian.
-<br><dt>&lsquo;<samp><span class="samp">ca</span></samp>&rsquo;<dd>Catalan.
-<br><dt>&lsquo;<samp><span class="samp">ce</span></samp>&rsquo;<dd>Chechen.
-<br><dt>&lsquo;<samp><span class="samp">ch</span></samp>&rsquo;<dd>Chamorro.
-<br><dt>&lsquo;<samp><span class="samp">co</span></samp>&rsquo;<dd>Corsican.
-<br><dt>&lsquo;<samp><span class="samp">cr</span></samp>&rsquo;<dd>Cree.
-<br><dt>&lsquo;<samp><span class="samp">cs</span></samp>&rsquo;<dd>Czech.
-<br><dt>&lsquo;<samp><span class="samp">cu</span></samp>&rsquo;<dd>Church Slavic.
-<br><dt>&lsquo;<samp><span class="samp">cv</span></samp>&rsquo;<dd>Chuvash.
-<br><dt>&lsquo;<samp><span class="samp">cy</span></samp>&rsquo;<dd>Welsh.
-<br><dt>&lsquo;<samp><span class="samp">da</span></samp>&rsquo;<dd>Danish.
-<br><dt>&lsquo;<samp><span class="samp">de</span></samp>&rsquo;<dd>German.
-<br><dt>&lsquo;<samp><span class="samp">dv</span></samp>&rsquo;<dd>Divehi; Maldivian.
-<br><dt>&lsquo;<samp><span class="samp">dz</span></samp>&rsquo;<dd>Dzongkha; Bhutani.
-<br><dt>&lsquo;<samp><span class="samp">ee</span></samp>&rsquo;<dd>&Eacute;w&eacute;.
-<br><dt>&lsquo;<samp><span class="samp">el</span></samp>&rsquo;<dd>Greek.
-<br><dt>&lsquo;<samp><span class="samp">en</span></samp>&rsquo;<dd>English.
-<br><dt>&lsquo;<samp><span class="samp">eo</span></samp>&rsquo;<dd>Esperanto.
-<br><dt>&lsquo;<samp><span class="samp">es</span></samp>&rsquo;<dd>Spanish.
-<br><dt>&lsquo;<samp><span class="samp">et</span></samp>&rsquo;<dd>Estonian.
-<br><dt>&lsquo;<samp><span class="samp">eu</span></samp>&rsquo;<dd>Basque.
-<br><dt>&lsquo;<samp><span class="samp">fa</span></samp>&rsquo;<dd>Persian.
-<br><dt>&lsquo;<samp><span class="samp">ff</span></samp>&rsquo;<dd>Fulah.
-<br><dt>&lsquo;<samp><span class="samp">fi</span></samp>&rsquo;<dd>Finnish.
-<br><dt>&lsquo;<samp><span class="samp">fj</span></samp>&rsquo;<dd>Fijian; Fiji.
-<br><dt>&lsquo;<samp><span class="samp">fo</span></samp>&rsquo;<dd>Faroese.
-<br><dt>&lsquo;<samp><span class="samp">fr</span></samp>&rsquo;<dd>French.
-<br><dt>&lsquo;<samp><span class="samp">fy</span></samp>&rsquo;<dd>Western Frisian.
-<br><dt>&lsquo;<samp><span class="samp">ga</span></samp>&rsquo;<dd>Irish.
-<br><dt>&lsquo;<samp><span class="samp">gd</span></samp>&rsquo;<dd>Scottish Gaelic.
-<br><dt>&lsquo;<samp><span class="samp">gl</span></samp>&rsquo;<dd>Galician.
-<br><dt>&lsquo;<samp><span class="samp">gn</span></samp>&rsquo;<dd>Guarani.
-<br><dt>&lsquo;<samp><span class="samp">gu</span></samp>&rsquo;<dd>Gujarati.
-<br><dt>&lsquo;<samp><span class="samp">gv</span></samp>&rsquo;<dd>Manx.
-<br><dt>&lsquo;<samp><span class="samp">ha</span></samp>&rsquo;<dd>Hausa.
-<br><dt>&lsquo;<samp><span class="samp">he</span></samp>&rsquo;<dd>Hebrew (formerly iw).
-<br><dt>&lsquo;<samp><span class="samp">hi</span></samp>&rsquo;<dd>Hindi.
-<br><dt>&lsquo;<samp><span class="samp">ho</span></samp>&rsquo;<dd>Hiri Motu.
-<br><dt>&lsquo;<samp><span class="samp">hr</span></samp>&rsquo;<dd>Croatian.
-<br><dt>&lsquo;<samp><span class="samp">ht</span></samp>&rsquo;<dd>Haitian; Haitian Creole.
-<br><dt>&lsquo;<samp><span class="samp">hu</span></samp>&rsquo;<dd>Hungarian.
-<br><dt>&lsquo;<samp><span class="samp">hy</span></samp>&rsquo;<dd>Armenian.
-<br><dt>&lsquo;<samp><span class="samp">hz</span></samp>&rsquo;<dd>Herero.
-<br><dt>&lsquo;<samp><span class="samp">ia</span></samp>&rsquo;<dd>Interlingua.
-<br><dt>&lsquo;<samp><span class="samp">id</span></samp>&rsquo;<dd>Indonesian (formerly in).
-<br><dt>&lsquo;<samp><span class="samp">ie</span></samp>&rsquo;<dd>Interlingue; Occidental.
-<br><dt>&lsquo;<samp><span class="samp">ig</span></samp>&rsquo;<dd>Igbo.
-<br><dt>&lsquo;<samp><span class="samp">ii</span></samp>&rsquo;<dd>Sichuan Yi; Nuosu.
-<br><dt>&lsquo;<samp><span class="samp">ik</span></samp>&rsquo;<dd>Inupiak; Inupiaq.
-<br><dt>&lsquo;<samp><span class="samp">io</span></samp>&rsquo;<dd>Ido.
-<br><dt>&lsquo;<samp><span class="samp">is</span></samp>&rsquo;<dd>Icelandic.
-<br><dt>&lsquo;<samp><span class="samp">it</span></samp>&rsquo;<dd>Italian.
-<br><dt>&lsquo;<samp><span class="samp">iu</span></samp>&rsquo;<dd>Inuktitut.
-<br><dt>&lsquo;<samp><span class="samp">ja</span></samp>&rsquo;<dd>Japanese.
-<br><dt>&lsquo;<samp><span class="samp">jv</span></samp>&rsquo;<dd>Javanese.
-<br><dt>&lsquo;<samp><span class="samp">ka</span></samp>&rsquo;<dd>Georgian.
-<br><dt>&lsquo;<samp><span class="samp">kg</span></samp>&rsquo;<dd>Kongo.
-<br><dt>&lsquo;<samp><span class="samp">ki</span></samp>&rsquo;<dd>Kikuyu; Gikuyu.
-<br><dt>&lsquo;<samp><span class="samp">kj</span></samp>&rsquo;<dd>Kuanyama; Kwanyama.
-<br><dt>&lsquo;<samp><span class="samp">kk</span></samp>&rsquo;<dd>Kazakh.
-<br><dt>&lsquo;<samp><span class="samp">kl</span></samp>&rsquo;<dd>Kalaallisut; Greenlandic.
-<br><dt>&lsquo;<samp><span class="samp">km</span></samp>&rsquo;<dd>Central Khmer; Cambodian.
-<br><dt>&lsquo;<samp><span class="samp">kn</span></samp>&rsquo;<dd>Kannada.
-<br><dt>&lsquo;<samp><span class="samp">ko</span></samp>&rsquo;<dd>Korean.
-<br><dt>&lsquo;<samp><span class="samp">kr</span></samp>&rsquo;<dd>Kanuri.
-<br><dt>&lsquo;<samp><span class="samp">ks</span></samp>&rsquo;<dd>Kashmiri.
-<br><dt>&lsquo;<samp><span class="samp">ku</span></samp>&rsquo;<dd>Kurdish.
-<br><dt>&lsquo;<samp><span class="samp">kv</span></samp>&rsquo;<dd>Komi.
-<br><dt>&lsquo;<samp><span class="samp">kw</span></samp>&rsquo;<dd>Cornish.
-<br><dt>&lsquo;<samp><span class="samp">ky</span></samp>&rsquo;<dd>Kirghiz.
-<br><dt>&lsquo;<samp><span class="samp">la</span></samp>&rsquo;<dd>Latin.
-<br><dt>&lsquo;<samp><span class="samp">lb</span></samp>&rsquo;<dd>Letzeburgesch; Luxembourgish.
-<br><dt>&lsquo;<samp><span class="samp">lg</span></samp>&rsquo;<dd>Ganda.
-<br><dt>&lsquo;<samp><span class="samp">li</span></samp>&rsquo;<dd>Limburgish; Limburger; Limburgan.
-<br><dt>&lsquo;<samp><span class="samp">ln</span></samp>&rsquo;<dd>Lingala.
-<br><dt>&lsquo;<samp><span class="samp">lo</span></samp>&rsquo;<dd>Lao; Laotian.
-<br><dt>&lsquo;<samp><span class="samp">lt</span></samp>&rsquo;<dd>Lithuanian.
-<br><dt>&lsquo;<samp><span class="samp">lu</span></samp>&rsquo;<dd>Luba-Katanga.
-<br><dt>&lsquo;<samp><span class="samp">lv</span></samp>&rsquo;<dd>Latvian; Lettish.
-<br><dt>&lsquo;<samp><span class="samp">mg</span></samp>&rsquo;<dd>Malagasy.
-<br><dt>&lsquo;<samp><span class="samp">mh</span></samp>&rsquo;<dd>Marshallese.
-<br><dt>&lsquo;<samp><span class="samp">mi</span></samp>&rsquo;<dd>Maori.
-<br><dt>&lsquo;<samp><span class="samp">mk</span></samp>&rsquo;<dd>Macedonian.
-<br><dt>&lsquo;<samp><span class="samp">ml</span></samp>&rsquo;<dd>Malayalam.
-<br><dt>&lsquo;<samp><span class="samp">mn</span></samp>&rsquo;<dd>Mongolian.
-<br><dt>&lsquo;<samp><span class="samp">mo</span></samp>&rsquo;<dd>Moldavian.
-<br><dt>&lsquo;<samp><span class="samp">mr</span></samp>&rsquo;<dd>Marathi.
-<br><dt>&lsquo;<samp><span class="samp">ms</span></samp>&rsquo;<dd>Malay.
-<br><dt>&lsquo;<samp><span class="samp">mt</span></samp>&rsquo;<dd>Maltese.
-<br><dt>&lsquo;<samp><span class="samp">my</span></samp>&rsquo;<dd>Burmese.
-<br><dt>&lsquo;<samp><span class="samp">na</span></samp>&rsquo;<dd>Nauru.
-<br><dt>&lsquo;<samp><span class="samp">nb</span></samp>&rsquo;<dd>Norwegian Bokm&aring;l.
-<br><dt>&lsquo;<samp><span class="samp">nd</span></samp>&rsquo;<dd>Ndebele, North.
-<br><dt>&lsquo;<samp><span class="samp">ne</span></samp>&rsquo;<dd>Nepali.
-<br><dt>&lsquo;<samp><span class="samp">ng</span></samp>&rsquo;<dd>Ndonga.
-<br><dt>&lsquo;<samp><span class="samp">nl</span></samp>&rsquo;<dd>Dutch.
-<br><dt>&lsquo;<samp><span class="samp">nn</span></samp>&rsquo;<dd>Norwegian Nynorsk.
-<br><dt>&lsquo;<samp><span class="samp">no</span></samp>&rsquo;<dd>Norwegian.
-<br><dt>&lsquo;<samp><span class="samp">nr</span></samp>&rsquo;<dd>Ndebele, South.
-<br><dt>&lsquo;<samp><span class="samp">nv</span></samp>&rsquo;<dd>Navajo; Navaho.
-<br><dt>&lsquo;<samp><span class="samp">ny</span></samp>&rsquo;<dd>Chichewa; Nyanja.
-<br><dt>&lsquo;<samp><span class="samp">oc</span></samp>&rsquo;<dd>Occitan; Proven&ccedil;al.
-<br><dt>&lsquo;<samp><span class="samp">oj</span></samp>&rsquo;<dd>Ojibwa.
-<br><dt>&lsquo;<samp><span class="samp">om</span></samp>&rsquo;<dd>(Afan) Oromo.
-<br><dt>&lsquo;<samp><span class="samp">or</span></samp>&rsquo;<dd>Oriya.
-<br><dt>&lsquo;<samp><span class="samp">os</span></samp>&rsquo;<dd>Ossetian; Ossetic.
-<br><dt>&lsquo;<samp><span class="samp">pa</span></samp>&rsquo;<dd>Panjabi; Punjabi.
-<br><dt>&lsquo;<samp><span class="samp">pi</span></samp>&rsquo;<dd>Pali.
-<br><dt>&lsquo;<samp><span class="samp">pl</span></samp>&rsquo;<dd>Polish.
-<br><dt>&lsquo;<samp><span class="samp">ps</span></samp>&rsquo;<dd>Pashto; Pushto.
-<br><dt>&lsquo;<samp><span class="samp">pt</span></samp>&rsquo;<dd>Portuguese.
-<br><dt>&lsquo;<samp><span class="samp">qu</span></samp>&rsquo;<dd>Quechua.
-<br><dt>&lsquo;<samp><span class="samp">rm</span></samp>&rsquo;<dd>Romansh.
-<br><dt>&lsquo;<samp><span class="samp">rn</span></samp>&rsquo;<dd>Rundi; Kirundi.
-<br><dt>&lsquo;<samp><span class="samp">ro</span></samp>&rsquo;<dd>Romanian.
-<br><dt>&lsquo;<samp><span class="samp">ru</span></samp>&rsquo;<dd>Russian.
-<br><dt>&lsquo;<samp><span class="samp">rw</span></samp>&rsquo;<dd>Kinyarwanda.
-<br><dt>&lsquo;<samp><span class="samp">sa</span></samp>&rsquo;<dd>Sanskrit.
-<br><dt>&lsquo;<samp><span class="samp">sc</span></samp>&rsquo;<dd>Sardinian.
-<br><dt>&lsquo;<samp><span class="samp">sd</span></samp>&rsquo;<dd>Sindhi.
-<br><dt>&lsquo;<samp><span class="samp">se</span></samp>&rsquo;<dd>Northern Sami.
-<br><dt>&lsquo;<samp><span class="samp">sg</span></samp>&rsquo;<dd>Sango; Sangro.
-<br><dt>&lsquo;<samp><span class="samp">si</span></samp>&rsquo;<dd>Sinhala; Sinhalese.
-<br><dt>&lsquo;<samp><span class="samp">sk</span></samp>&rsquo;<dd>Slovak.
-<br><dt>&lsquo;<samp><span class="samp">sl</span></samp>&rsquo;<dd>Slovenian.
-<br><dt>&lsquo;<samp><span class="samp">sm</span></samp>&rsquo;<dd>Samoan.
-<br><dt>&lsquo;<samp><span class="samp">sn</span></samp>&rsquo;<dd>Shona.
-<br><dt>&lsquo;<samp><span class="samp">so</span></samp>&rsquo;<dd>Somali.
-<br><dt>&lsquo;<samp><span class="samp">sq</span></samp>&rsquo;<dd>Albanian.
-<br><dt>&lsquo;<samp><span class="samp">sr</span></samp>&rsquo;<dd>Serbian.
-<br><dt>&lsquo;<samp><span class="samp">ss</span></samp>&rsquo;<dd>Swati; Siswati.
-<br><dt>&lsquo;<samp><span class="samp">st</span></samp>&rsquo;<dd>Sesotho; Sotho, Southern.
-<br><dt>&lsquo;<samp><span class="samp">su</span></samp>&rsquo;<dd>Sundanese.
-<br><dt>&lsquo;<samp><span class="samp">sv</span></samp>&rsquo;<dd>Swedish.
-<br><dt>&lsquo;<samp><span class="samp">sw</span></samp>&rsquo;<dd>Swahili.
-<br><dt>&lsquo;<samp><span class="samp">ta</span></samp>&rsquo;<dd>Tamil.
-<br><dt>&lsquo;<samp><span class="samp">te</span></samp>&rsquo;<dd>Telugu.
-<br><dt>&lsquo;<samp><span class="samp">tg</span></samp>&rsquo;<dd>Tajik.
-<br><dt>&lsquo;<samp><span class="samp">th</span></samp>&rsquo;<dd>Thai.
-<br><dt>&lsquo;<samp><span class="samp">ti</span></samp>&rsquo;<dd>Tigrinya.
-<br><dt>&lsquo;<samp><span class="samp">tk</span></samp>&rsquo;<dd>Turkmen.
-<br><dt>&lsquo;<samp><span class="samp">tl</span></samp>&rsquo;<dd>Tagalog.
-<br><dt>&lsquo;<samp><span class="samp">tn</span></samp>&rsquo;<dd>Tswana; Setswana.
-<br><dt>&lsquo;<samp><span class="samp">to</span></samp>&rsquo;<dd>Tonga.
-<br><dt>&lsquo;<samp><span class="samp">tr</span></samp>&rsquo;<dd>Turkish.
-<br><dt>&lsquo;<samp><span class="samp">ts</span></samp>&rsquo;<dd>Tsonga.
-<br><dt>&lsquo;<samp><span class="samp">tt</span></samp>&rsquo;<dd>Tatar.
-<br><dt>&lsquo;<samp><span class="samp">tw</span></samp>&rsquo;<dd>Twi.
-<br><dt>&lsquo;<samp><span class="samp">ty</span></samp>&rsquo;<dd>Tahitian.
-<br><dt>&lsquo;<samp><span class="samp">ug</span></samp>&rsquo;<dd>Uighur.
-<br><dt>&lsquo;<samp><span class="samp">uk</span></samp>&rsquo;<dd>Ukrainian.
-<br><dt>&lsquo;<samp><span class="samp">ur</span></samp>&rsquo;<dd>Urdu.
-<br><dt>&lsquo;<samp><span class="samp">uz</span></samp>&rsquo;<dd>Uzbek.
-<br><dt>&lsquo;<samp><span class="samp">ve</span></samp>&rsquo;<dd>Venda.
-<br><dt>&lsquo;<samp><span class="samp">vi</span></samp>&rsquo;<dd>Vietnamese.
-<br><dt>&lsquo;<samp><span class="samp">vo</span></samp>&rsquo;<dd>Volap&uuml;k; Volapuk.
-<br><dt>&lsquo;<samp><span class="samp">wa</span></samp>&rsquo;<dd>Walloon.
-<br><dt>&lsquo;<samp><span class="samp">wo</span></samp>&rsquo;<dd>Wolof.
-<br><dt>&lsquo;<samp><span class="samp">xh</span></samp>&rsquo;<dd>Xhosa.
-<br><dt>&lsquo;<samp><span class="samp">yi</span></samp>&rsquo;<dd>Yiddish (formerly ji).
-<br><dt>&lsquo;<samp><span class="samp">yo</span></samp>&rsquo;<dd>Yoruba.
-<br><dt>&lsquo;<samp><span class="samp">za</span></samp>&rsquo;<dd>Zhuang.
-<br><dt>&lsquo;<samp><span class="samp">zh</span></samp>&rsquo;<dd>Chinese.
-<br><dt>&lsquo;<samp><span class="samp">zu</span></samp>&rsquo;<dd>Zulu.
-</dl>
-
-<div class="node">
-<a name="Rare-Language-Codes"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Usual-Language-Codes">Usual Language Codes</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Language-Codes">Language Codes</a>
-
-</div>
-
-<h3 class="appendixsec">A.2 Rare Language Codes</h3>
-
- <p>For rarely used languages, the ISO&nbsp;639-2<!-- /@w --> standard defines three-letter
-codes. Here is the current list, reduced to only living languages with at least
-one million of speakers.
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">ace</span></samp>&rsquo;<dd>Achinese.
-<br><dt>&lsquo;<samp><span class="samp">awa</span></samp>&rsquo;<dd>Awadhi.
-<br><dt>&lsquo;<samp><span class="samp">bal</span></samp>&rsquo;<dd>Baluchi.
-<br><dt>&lsquo;<samp><span class="samp">ban</span></samp>&rsquo;<dd>Balinese.
-<br><dt>&lsquo;<samp><span class="samp">bej</span></samp>&rsquo;<dd>Beja; Bedawiyet.
-<br><dt>&lsquo;<samp><span class="samp">bem</span></samp>&rsquo;<dd>Bemba.
-<br><dt>&lsquo;<samp><span class="samp">bho</span></samp>&rsquo;<dd>Bhojpuri.
-<br><dt>&lsquo;<samp><span class="samp">bik</span></samp>&rsquo;<dd>Bikol.
-<br><dt>&lsquo;<samp><span class="samp">bin</span></samp>&rsquo;<dd>Bini; Edo.
-<br><dt>&lsquo;<samp><span class="samp">bug</span></samp>&rsquo;<dd>Buginese.
-<br><dt>&lsquo;<samp><span class="samp">ceb</span></samp>&rsquo;<dd>Cebuano.
-<br><dt>&lsquo;<samp><span class="samp">din</span></samp>&rsquo;<dd>Dinka.
-<br><dt>&lsquo;<samp><span class="samp">doi</span></samp>&rsquo;<dd>Dogri.
-<br><dt>&lsquo;<samp><span class="samp">fil</span></samp>&rsquo;<dd>Filipino; Pilipino.
-<br><dt>&lsquo;<samp><span class="samp">fon</span></samp>&rsquo;<dd>Fon.
-<br><dt>&lsquo;<samp><span class="samp">gon</span></samp>&rsquo;<dd>Gondi.
-<br><dt>&lsquo;<samp><span class="samp">gsw</span></samp>&rsquo;<dd>Swiss German; Alemannic; Alsatian.
-<br><dt>&lsquo;<samp><span class="samp">hil</span></samp>&rsquo;<dd>Hiligaynon.
-<br><dt>&lsquo;<samp><span class="samp">hmn</span></samp>&rsquo;<dd>Hmong.
-<br><dt>&lsquo;<samp><span class="samp">ilo</span></samp>&rsquo;<dd>Iloko.
-<br><dt>&lsquo;<samp><span class="samp">kab</span></samp>&rsquo;<dd>Kabyle.
-<br><dt>&lsquo;<samp><span class="samp">kam</span></samp>&rsquo;<dd>Kamba.
-<br><dt>&lsquo;<samp><span class="samp">kbd</span></samp>&rsquo;<dd>Kabardian.
-<br><dt>&lsquo;<samp><span class="samp">kmb</span></samp>&rsquo;<dd>Kimbundu.
-<br><dt>&lsquo;<samp><span class="samp">kok</span></samp>&rsquo;<dd>Konkani.
-<br><dt>&lsquo;<samp><span class="samp">kru</span></samp>&rsquo;<dd>Kurukh.
-<br><dt>&lsquo;<samp><span class="samp">lua</span></samp>&rsquo;<dd>Luba-Lulua.
-<br><dt>&lsquo;<samp><span class="samp">luo</span></samp>&rsquo;<dd>Luo (Kenya and Tanzania).
-<br><dt>&lsquo;<samp><span class="samp">mad</span></samp>&rsquo;<dd>Madurese.
-<br><dt>&lsquo;<samp><span class="samp">mag</span></samp>&rsquo;<dd>Magahi.
-<br><dt>&lsquo;<samp><span class="samp">mai</span></samp>&rsquo;<dd>Maithili.
-<br><dt>&lsquo;<samp><span class="samp">mak</span></samp>&rsquo;<dd>Makasar.
-<br><dt>&lsquo;<samp><span class="samp">man</span></samp>&rsquo;<dd>Mandingo.
-<br><dt>&lsquo;<samp><span class="samp">men</span></samp>&rsquo;<dd>Mende.
-<br><dt>&lsquo;<samp><span class="samp">min</span></samp>&rsquo;<dd>Minangkabau.
-<br><dt>&lsquo;<samp><span class="samp">mni</span></samp>&rsquo;<dd>Manipuri.
-<br><dt>&lsquo;<samp><span class="samp">mos</span></samp>&rsquo;<dd>Mossi.
-<br><dt>&lsquo;<samp><span class="samp">mwr</span></samp>&rsquo;<dd>Marwari.
-<br><dt>&lsquo;<samp><span class="samp">nap</span></samp>&rsquo;<dd>Neapolitan.
-<br><dt>&lsquo;<samp><span class="samp">nso</span></samp>&rsquo;<dd>Pedi; Sepedi; Northern Sotho.
-<br><dt>&lsquo;<samp><span class="samp">nym</span></samp>&rsquo;<dd>Nyamwezi.
-<br><dt>&lsquo;<samp><span class="samp">nyn</span></samp>&rsquo;<dd>Nyankole.
-<br><dt>&lsquo;<samp><span class="samp">pag</span></samp>&rsquo;<dd>Pangasinan.
-<br><dt>&lsquo;<samp><span class="samp">pam</span></samp>&rsquo;<dd>Pampanga; Kapampangan.
-<br><dt>&lsquo;<samp><span class="samp">raj</span></samp>&rsquo;<dd>Rajasthani.
-<br><dt>&lsquo;<samp><span class="samp">sas</span></samp>&rsquo;<dd>Sasak.
-<br><dt>&lsquo;<samp><span class="samp">sat</span></samp>&rsquo;<dd>Santali.
-<br><dt>&lsquo;<samp><span class="samp">scn</span></samp>&rsquo;<dd>Sicilian.
-<br><dt>&lsquo;<samp><span class="samp">shn</span></samp>&rsquo;<dd>Shan.
-<br><dt>&lsquo;<samp><span class="samp">sid</span></samp>&rsquo;<dd>Sidamo.
-<br><dt>&lsquo;<samp><span class="samp">srr</span></samp>&rsquo;<dd>Serer.
-<br><dt>&lsquo;<samp><span class="samp">suk</span></samp>&rsquo;<dd>Sukuma.
-<br><dt>&lsquo;<samp><span class="samp">sus</span></samp>&rsquo;<dd>Susu.
-<br><dt>&lsquo;<samp><span class="samp">tem</span></samp>&rsquo;<dd>Timne.
-<br><dt>&lsquo;<samp><span class="samp">tiv</span></samp>&rsquo;<dd>Tiv.
-<br><dt>&lsquo;<samp><span class="samp">tum</span></samp>&rsquo;<dd>Tumbuka.
-<br><dt>&lsquo;<samp><span class="samp">umb</span></samp>&rsquo;<dd>Umbundu.
-<br><dt>&lsquo;<samp><span class="samp">wal</span></samp>&rsquo;<dd>Walamo.
-<br><dt>&lsquo;<samp><span class="samp">war</span></samp>&rsquo;<dd>Waray.
-<br><dt>&lsquo;<samp><span class="samp">yao</span></samp>&rsquo;<dd>Yao.
-</dl>
-
-<div class="node">
-<a name="Country-Codes"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Licenses">Licenses</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Language-Codes">Language Codes</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="appendix">Appendix B Country Codes</h2>
-
- <p><a name="index-country-codes-1263"></a><a name="index-ISO-3166-1264"></a>
-The ISO&nbsp;3166<!-- /@w --> standard defines two character codes for many countries
-and territories. All abbreviations for countries used in the Translation
-Project should come from this standard.
-
- <dl>
-<dt>&lsquo;<samp><span class="samp">AD</span></samp>&rsquo;<dd>Andorra.
-<br><dt>&lsquo;<samp><span class="samp">AE</span></samp>&rsquo;<dd>United Arab Emirates.
-<br><dt>&lsquo;<samp><span class="samp">AF</span></samp>&rsquo;<dd>Afghanistan.
-<br><dt>&lsquo;<samp><span class="samp">AG</span></samp>&rsquo;<dd>Antigua and Barbuda.
-<br><dt>&lsquo;<samp><span class="samp">AI</span></samp>&rsquo;<dd>Anguilla.
-<br><dt>&lsquo;<samp><span class="samp">AL</span></samp>&rsquo;<dd>Albania.
-<br><dt>&lsquo;<samp><span class="samp">AM</span></samp>&rsquo;<dd>Armenia.
-<br><dt>&lsquo;<samp><span class="samp">AN</span></samp>&rsquo;<dd>Netherlands Antilles.
-<br><dt>&lsquo;<samp><span class="samp">AO</span></samp>&rsquo;<dd>Angola.
-<br><dt>&lsquo;<samp><span class="samp">AQ</span></samp>&rsquo;<dd>Antarctica.
-<br><dt>&lsquo;<samp><span class="samp">AR</span></samp>&rsquo;<dd>Argentina.
-<br><dt>&lsquo;<samp><span class="samp">AS</span></samp>&rsquo;<dd>Samoa (American).
-<br><dt>&lsquo;<samp><span class="samp">AT</span></samp>&rsquo;<dd>Austria.
-<br><dt>&lsquo;<samp><span class="samp">AU</span></samp>&rsquo;<dd>Australia.
-<br><dt>&lsquo;<samp><span class="samp">AW</span></samp>&rsquo;<dd>Aruba.
-<br><dt>&lsquo;<samp><span class="samp">AX</span></samp>&rsquo;<dd>Aaland Islands.
-<br><dt>&lsquo;<samp><span class="samp">AZ</span></samp>&rsquo;<dd>Azerbaijan.
-<br><dt>&lsquo;<samp><span class="samp">BA</span></samp>&rsquo;<dd>Bosnia and Herzegovina.
-<br><dt>&lsquo;<samp><span class="samp">BB</span></samp>&rsquo;<dd>Barbados.
-<br><dt>&lsquo;<samp><span class="samp">BD</span></samp>&rsquo;<dd>Bangladesh.
-<br><dt>&lsquo;<samp><span class="samp">BE</span></samp>&rsquo;<dd>Belgium.
-<br><dt>&lsquo;<samp><span class="samp">BF</span></samp>&rsquo;<dd>Burkina Faso.
-<br><dt>&lsquo;<samp><span class="samp">BG</span></samp>&rsquo;<dd>Bulgaria.
-<br><dt>&lsquo;<samp><span class="samp">BH</span></samp>&rsquo;<dd>Bahrain.
-<br><dt>&lsquo;<samp><span class="samp">BI</span></samp>&rsquo;<dd>Burundi.
-<br><dt>&lsquo;<samp><span class="samp">BJ</span></samp>&rsquo;<dd>Benin.
-<br><dt>&lsquo;<samp><span class="samp">BM</span></samp>&rsquo;<dd>Bermuda.
-<br><dt>&lsquo;<samp><span class="samp">BN</span></samp>&rsquo;<dd>Brunei.
-<br><dt>&lsquo;<samp><span class="samp">BO</span></samp>&rsquo;<dd>Bolivia.
-<br><dt>&lsquo;<samp><span class="samp">BR</span></samp>&rsquo;<dd>Brazil.
-<br><dt>&lsquo;<samp><span class="samp">BS</span></samp>&rsquo;<dd>Bahamas.
-<br><dt>&lsquo;<samp><span class="samp">BT</span></samp>&rsquo;<dd>Bhutan.
-<br><dt>&lsquo;<samp><span class="samp">BV</span></samp>&rsquo;<dd>Bouvet Island.
-<br><dt>&lsquo;<samp><span class="samp">BW</span></samp>&rsquo;<dd>Botswana.
-<br><dt>&lsquo;<samp><span class="samp">BY</span></samp>&rsquo;<dd>Belarus.
-<br><dt>&lsquo;<samp><span class="samp">BZ</span></samp>&rsquo;<dd>Belize.
-<br><dt>&lsquo;<samp><span class="samp">CA</span></samp>&rsquo;<dd>Canada.
-<br><dt>&lsquo;<samp><span class="samp">CC</span></samp>&rsquo;<dd>Cocos (Keeling) Islands.
-<br><dt>&lsquo;<samp><span class="samp">CD</span></samp>&rsquo;<dd>Congo (Dem. Rep.).
-<br><dt>&lsquo;<samp><span class="samp">CF</span></samp>&rsquo;<dd>Central African Republic.
-<br><dt>&lsquo;<samp><span class="samp">CG</span></samp>&rsquo;<dd>Congo (Rep.).
-<br><dt>&lsquo;<samp><span class="samp">CH</span></samp>&rsquo;<dd>Switzerland.
-<br><dt>&lsquo;<samp><span class="samp">CI</span></samp>&rsquo;<dd>C&ocirc;te d'Ivoire.
-<br><dt>&lsquo;<samp><span class="samp">CK</span></samp>&rsquo;<dd>Cook Islands.
-<br><dt>&lsquo;<samp><span class="samp">CL</span></samp>&rsquo;<dd>Chile.
-<br><dt>&lsquo;<samp><span class="samp">CM</span></samp>&rsquo;<dd>Cameroon.
-<br><dt>&lsquo;<samp><span class="samp">CN</span></samp>&rsquo;<dd>China.
-<br><dt>&lsquo;<samp><span class="samp">CO</span></samp>&rsquo;<dd>Colombia.
-<br><dt>&lsquo;<samp><span class="samp">CR</span></samp>&rsquo;<dd>Costa Rica.
-<br><dt>&lsquo;<samp><span class="samp">CU</span></samp>&rsquo;<dd>Cuba.
-<br><dt>&lsquo;<samp><span class="samp">CV</span></samp>&rsquo;<dd>Cape Verde.
-<br><dt>&lsquo;<samp><span class="samp">CX</span></samp>&rsquo;<dd>Christmas Island.
-<br><dt>&lsquo;<samp><span class="samp">CY</span></samp>&rsquo;<dd>Cyprus.
-<br><dt>&lsquo;<samp><span class="samp">CZ</span></samp>&rsquo;<dd>Czech Republic.
-<br><dt>&lsquo;<samp><span class="samp">DE</span></samp>&rsquo;<dd>Germany.
-<br><dt>&lsquo;<samp><span class="samp">DJ</span></samp>&rsquo;<dd>Djibouti.
-<br><dt>&lsquo;<samp><span class="samp">DK</span></samp>&rsquo;<dd>Denmark.
-<br><dt>&lsquo;<samp><span class="samp">DM</span></samp>&rsquo;<dd>Dominica.
-<br><dt>&lsquo;<samp><span class="samp">DO</span></samp>&rsquo;<dd>Dominican Republic.
-<br><dt>&lsquo;<samp><span class="samp">DZ</span></samp>&rsquo;<dd>Algeria.
-<br><dt>&lsquo;<samp><span class="samp">EC</span></samp>&rsquo;<dd>Ecuador.
-<br><dt>&lsquo;<samp><span class="samp">EE</span></samp>&rsquo;<dd>Estonia.
-<br><dt>&lsquo;<samp><span class="samp">EG</span></samp>&rsquo;<dd>Egypt.
-<br><dt>&lsquo;<samp><span class="samp">EH</span></samp>&rsquo;<dd>Western Sahara.
-<br><dt>&lsquo;<samp><span class="samp">ER</span></samp>&rsquo;<dd>Eritrea.
-<br><dt>&lsquo;<samp><span class="samp">ES</span></samp>&rsquo;<dd>Spain.
-<br><dt>&lsquo;<samp><span class="samp">ET</span></samp>&rsquo;<dd>Ethiopia.
-<br><dt>&lsquo;<samp><span class="samp">FI</span></samp>&rsquo;<dd>Finland.
-<br><dt>&lsquo;<samp><span class="samp">FJ</span></samp>&rsquo;<dd>Fiji.
-<br><dt>&lsquo;<samp><span class="samp">FK</span></samp>&rsquo;<dd>Falkland Islands.
-<br><dt>&lsquo;<samp><span class="samp">FM</span></samp>&rsquo;<dd>Micronesia.
-<br><dt>&lsquo;<samp><span class="samp">FO</span></samp>&rsquo;<dd>Faeroe Islands.
-<br><dt>&lsquo;<samp><span class="samp">FR</span></samp>&rsquo;<dd>France.
-<br><dt>&lsquo;<samp><span class="samp">GA</span></samp>&rsquo;<dd>Gabon.
-<br><dt>&lsquo;<samp><span class="samp">GB</span></samp>&rsquo;<dd>Britain (United Kingdom).
-<br><dt>&lsquo;<samp><span class="samp">GD</span></samp>&rsquo;<dd>Grenada.
-<br><dt>&lsquo;<samp><span class="samp">GE</span></samp>&rsquo;<dd>Georgia.
-<br><dt>&lsquo;<samp><span class="samp">GF</span></samp>&rsquo;<dd>French Guiana.
-<br><dt>&lsquo;<samp><span class="samp">GG</span></samp>&rsquo;<dd>Guernsey.
-<br><dt>&lsquo;<samp><span class="samp">GH</span></samp>&rsquo;<dd>Ghana.
-<br><dt>&lsquo;<samp><span class="samp">GI</span></samp>&rsquo;<dd>Gibraltar.
-<br><dt>&lsquo;<samp><span class="samp">GL</span></samp>&rsquo;<dd>Greenland.
-<br><dt>&lsquo;<samp><span class="samp">GM</span></samp>&rsquo;<dd>Gambia.
-<br><dt>&lsquo;<samp><span class="samp">GN</span></samp>&rsquo;<dd>Guinea.
-<br><dt>&lsquo;<samp><span class="samp">GP</span></samp>&rsquo;<dd>Guadeloupe.
-<br><dt>&lsquo;<samp><span class="samp">GQ</span></samp>&rsquo;<dd>Equatorial Guinea.
-<br><dt>&lsquo;<samp><span class="samp">GR</span></samp>&rsquo;<dd>Greece.
-<br><dt>&lsquo;<samp><span class="samp">GS</span></samp>&rsquo;<dd>South Georgia and the South Sandwich Islands.
-<br><dt>&lsquo;<samp><span class="samp">GT</span></samp>&rsquo;<dd>Guatemala.
-<br><dt>&lsquo;<samp><span class="samp">GU</span></samp>&rsquo;<dd>Guam.
-<br><dt>&lsquo;<samp><span class="samp">GW</span></samp>&rsquo;<dd>Guinea-Bissau.
-<br><dt>&lsquo;<samp><span class="samp">GY</span></samp>&rsquo;<dd>Guyana.
-<br><dt>&lsquo;<samp><span class="samp">HK</span></samp>&rsquo;<dd>Hong Kong.
-<br><dt>&lsquo;<samp><span class="samp">HM</span></samp>&rsquo;<dd>Heard Island and McDonald Islands.
-<br><dt>&lsquo;<samp><span class="samp">HN</span></samp>&rsquo;<dd>Honduras.
-<br><dt>&lsquo;<samp><span class="samp">HR</span></samp>&rsquo;<dd>Croatia.
-<br><dt>&lsquo;<samp><span class="samp">HT</span></samp>&rsquo;<dd>Haiti.
-<br><dt>&lsquo;<samp><span class="samp">HU</span></samp>&rsquo;<dd>Hungary.
-<br><dt>&lsquo;<samp><span class="samp">ID</span></samp>&rsquo;<dd>Indonesia.
-<br><dt>&lsquo;<samp><span class="samp">IE</span></samp>&rsquo;<dd>Ireland.
-<br><dt>&lsquo;<samp><span class="samp">IL</span></samp>&rsquo;<dd>Israel.
-<br><dt>&lsquo;<samp><span class="samp">IM</span></samp>&rsquo;<dd>Isle of Man.
-<br><dt>&lsquo;<samp><span class="samp">IN</span></samp>&rsquo;<dd>India.
-<br><dt>&lsquo;<samp><span class="samp">IO</span></samp>&rsquo;<dd>British Indian Ocean Territory.
-<br><dt>&lsquo;<samp><span class="samp">IQ</span></samp>&rsquo;<dd>Iraq.
-<br><dt>&lsquo;<samp><span class="samp">IR</span></samp>&rsquo;<dd>Iran.
-<br><dt>&lsquo;<samp><span class="samp">IS</span></samp>&rsquo;<dd>Iceland.
-<br><dt>&lsquo;<samp><span class="samp">IT</span></samp>&rsquo;<dd>Italy.
-<br><dt>&lsquo;<samp><span class="samp">JE</span></samp>&rsquo;<dd>Jersey.
-<br><dt>&lsquo;<samp><span class="samp">JM</span></samp>&rsquo;<dd>Jamaica.
-<br><dt>&lsquo;<samp><span class="samp">JO</span></samp>&rsquo;<dd>Jordan.
-<br><dt>&lsquo;<samp><span class="samp">JP</span></samp>&rsquo;<dd>Japan.
-<br><dt>&lsquo;<samp><span class="samp">KE</span></samp>&rsquo;<dd>Kenya.
-<br><dt>&lsquo;<samp><span class="samp">KG</span></samp>&rsquo;<dd>Kyrgyzstan.
-<br><dt>&lsquo;<samp><span class="samp">KH</span></samp>&rsquo;<dd>Cambodia.
-<br><dt>&lsquo;<samp><span class="samp">KI</span></samp>&rsquo;<dd>Kiribati.
-<br><dt>&lsquo;<samp><span class="samp">KM</span></samp>&rsquo;<dd>Comoros.
-<br><dt>&lsquo;<samp><span class="samp">KN</span></samp>&rsquo;<dd>St Kitts and Nevis.
-<br><dt>&lsquo;<samp><span class="samp">KP</span></samp>&rsquo;<dd>Korea (North).
-<br><dt>&lsquo;<samp><span class="samp">KR</span></samp>&rsquo;<dd>Korea (South).
-<br><dt>&lsquo;<samp><span class="samp">KW</span></samp>&rsquo;<dd>Kuwait.
-<br><dt>&lsquo;<samp><span class="samp">KY</span></samp>&rsquo;<dd>Cayman Islands.
-<br><dt>&lsquo;<samp><span class="samp">KZ</span></samp>&rsquo;<dd>Kazakhstan.
-<br><dt>&lsquo;<samp><span class="samp">LA</span></samp>&rsquo;<dd>Laos.
-<br><dt>&lsquo;<samp><span class="samp">LB</span></samp>&rsquo;<dd>Lebanon.
-<br><dt>&lsquo;<samp><span class="samp">LC</span></samp>&rsquo;<dd>St Lucia.
-<br><dt>&lsquo;<samp><span class="samp">LI</span></samp>&rsquo;<dd>Liechtenstein.
-<br><dt>&lsquo;<samp><span class="samp">LK</span></samp>&rsquo;<dd>Sri Lanka.
-<br><dt>&lsquo;<samp><span class="samp">LR</span></samp>&rsquo;<dd>Liberia.
-<br><dt>&lsquo;<samp><span class="samp">LS</span></samp>&rsquo;<dd>Lesotho.
-<br><dt>&lsquo;<samp><span class="samp">LT</span></samp>&rsquo;<dd>Lithuania.
-<br><dt>&lsquo;<samp><span class="samp">LU</span></samp>&rsquo;<dd>Luxembourg.
-<br><dt>&lsquo;<samp><span class="samp">LV</span></samp>&rsquo;<dd>Latvia.
-<br><dt>&lsquo;<samp><span class="samp">LY</span></samp>&rsquo;<dd>Libya.
-<br><dt>&lsquo;<samp><span class="samp">MA</span></samp>&rsquo;<dd>Morocco.
-<br><dt>&lsquo;<samp><span class="samp">MC</span></samp>&rsquo;<dd>Monaco.
-<br><dt>&lsquo;<samp><span class="samp">MD</span></samp>&rsquo;<dd>Moldova.
-<br><dt>&lsquo;<samp><span class="samp">ME</span></samp>&rsquo;<dd>Montenegro.
-<br><dt>&lsquo;<samp><span class="samp">MG</span></samp>&rsquo;<dd>Madagascar.
-<br><dt>&lsquo;<samp><span class="samp">MH</span></samp>&rsquo;<dd>Marshall Islands.
-<br><dt>&lsquo;<samp><span class="samp">MK</span></samp>&rsquo;<dd>Macedonia.
-<br><dt>&lsquo;<samp><span class="samp">ML</span></samp>&rsquo;<dd>Mali.
-<br><dt>&lsquo;<samp><span class="samp">MM</span></samp>&rsquo;<dd>Myanmar (Burma).
-<br><dt>&lsquo;<samp><span class="samp">MN</span></samp>&rsquo;<dd>Mongolia.
-<br><dt>&lsquo;<samp><span class="samp">MO</span></samp>&rsquo;<dd>Macao.
-<br><dt>&lsquo;<samp><span class="samp">MP</span></samp>&rsquo;<dd>Northern Mariana Islands.
-<br><dt>&lsquo;<samp><span class="samp">MQ</span></samp>&rsquo;<dd>Martinique.
-<br><dt>&lsquo;<samp><span class="samp">MR</span></samp>&rsquo;<dd>Mauritania.
-<br><dt>&lsquo;<samp><span class="samp">MS</span></samp>&rsquo;<dd>Montserrat.
-<br><dt>&lsquo;<samp><span class="samp">MT</span></samp>&rsquo;<dd>Malta.
-<br><dt>&lsquo;<samp><span class="samp">MU</span></samp>&rsquo;<dd>Mauritius.
-<br><dt>&lsquo;<samp><span class="samp">MV</span></samp>&rsquo;<dd>Maldives.
-<br><dt>&lsquo;<samp><span class="samp">MW</span></samp>&rsquo;<dd>Malawi.
-<br><dt>&lsquo;<samp><span class="samp">MX</span></samp>&rsquo;<dd>Mexico.
-<br><dt>&lsquo;<samp><span class="samp">MY</span></samp>&rsquo;<dd>Malaysia.
-<br><dt>&lsquo;<samp><span class="samp">MZ</span></samp>&rsquo;<dd>Mozambique.
-<br><dt>&lsquo;<samp><span class="samp">NA</span></samp>&rsquo;<dd>Namibia.
-<br><dt>&lsquo;<samp><span class="samp">NC</span></samp>&rsquo;<dd>New Caledonia.
-<br><dt>&lsquo;<samp><span class="samp">NE</span></samp>&rsquo;<dd>Niger.
-<br><dt>&lsquo;<samp><span class="samp">NF</span></samp>&rsquo;<dd>Norfolk Island.
-<br><dt>&lsquo;<samp><span class="samp">NG</span></samp>&rsquo;<dd>Nigeria.
-<br><dt>&lsquo;<samp><span class="samp">NI</span></samp>&rsquo;<dd>Nicaragua.
-<br><dt>&lsquo;<samp><span class="samp">NL</span></samp>&rsquo;<dd>Netherlands.
-<br><dt>&lsquo;<samp><span class="samp">NO</span></samp>&rsquo;<dd>Norway.
-<br><dt>&lsquo;<samp><span class="samp">NP</span></samp>&rsquo;<dd>Nepal.
-<br><dt>&lsquo;<samp><span class="samp">NR</span></samp>&rsquo;<dd>Nauru.
-<br><dt>&lsquo;<samp><span class="samp">NU</span></samp>&rsquo;<dd>Niue.
-<br><dt>&lsquo;<samp><span class="samp">NZ</span></samp>&rsquo;<dd>New Zealand.
-<br><dt>&lsquo;<samp><span class="samp">OM</span></samp>&rsquo;<dd>Oman.
-<br><dt>&lsquo;<samp><span class="samp">PA</span></samp>&rsquo;<dd>Panama.
-<br><dt>&lsquo;<samp><span class="samp">PE</span></samp>&rsquo;<dd>Peru.
-<br><dt>&lsquo;<samp><span class="samp">PF</span></samp>&rsquo;<dd>French Polynesia.
-<br><dt>&lsquo;<samp><span class="samp">PG</span></samp>&rsquo;<dd>Papua New Guinea.
-<br><dt>&lsquo;<samp><span class="samp">PH</span></samp>&rsquo;<dd>Philippines.
-<br><dt>&lsquo;<samp><span class="samp">PK</span></samp>&rsquo;<dd>Pakistan.
-<br><dt>&lsquo;<samp><span class="samp">PL</span></samp>&rsquo;<dd>Poland.
-<br><dt>&lsquo;<samp><span class="samp">PM</span></samp>&rsquo;<dd>St Pierre and Miquelon.
-<br><dt>&lsquo;<samp><span class="samp">PN</span></samp>&rsquo;<dd>Pitcairn.
-<br><dt>&lsquo;<samp><span class="samp">PR</span></samp>&rsquo;<dd>Puerto Rico.
-<br><dt>&lsquo;<samp><span class="samp">PS</span></samp>&rsquo;<dd>Palestine.
-<br><dt>&lsquo;<samp><span class="samp">PT</span></samp>&rsquo;<dd>Portugal.
-<br><dt>&lsquo;<samp><span class="samp">PW</span></samp>&rsquo;<dd>Palau.
-<br><dt>&lsquo;<samp><span class="samp">PY</span></samp>&rsquo;<dd>Paraguay.
-<br><dt>&lsquo;<samp><span class="samp">QA</span></samp>&rsquo;<dd>Qatar.
-<br><dt>&lsquo;<samp><span class="samp">RE</span></samp>&rsquo;<dd>Reunion.
-<br><dt>&lsquo;<samp><span class="samp">RO</span></samp>&rsquo;<dd>Romania.
-<br><dt>&lsquo;<samp><span class="samp">RS</span></samp>&rsquo;<dd>Serbia.
-<br><dt>&lsquo;<samp><span class="samp">RU</span></samp>&rsquo;<dd>Russia.
-<br><dt>&lsquo;<samp><span class="samp">RW</span></samp>&rsquo;<dd>Rwanda.
-<br><dt>&lsquo;<samp><span class="samp">SA</span></samp>&rsquo;<dd>Saudi Arabia.
-<br><dt>&lsquo;<samp><span class="samp">SB</span></samp>&rsquo;<dd>Solomon Islands.
-<br><dt>&lsquo;<samp><span class="samp">SC</span></samp>&rsquo;<dd>Seychelles.
-<br><dt>&lsquo;<samp><span class="samp">SD</span></samp>&rsquo;<dd>Sudan.
-<br><dt>&lsquo;<samp><span class="samp">SE</span></samp>&rsquo;<dd>Sweden.
-<br><dt>&lsquo;<samp><span class="samp">SG</span></samp>&rsquo;<dd>Singapore.
-<br><dt>&lsquo;<samp><span class="samp">SH</span></samp>&rsquo;<dd>St Helena.
-<br><dt>&lsquo;<samp><span class="samp">SI</span></samp>&rsquo;<dd>Slovenia.
-<br><dt>&lsquo;<samp><span class="samp">SJ</span></samp>&rsquo;<dd>Svalbard and Jan Mayen.
-<br><dt>&lsquo;<samp><span class="samp">SK</span></samp>&rsquo;<dd>Slovakia.
-<br><dt>&lsquo;<samp><span class="samp">SL</span></samp>&rsquo;<dd>Sierra Leone.
-<br><dt>&lsquo;<samp><span class="samp">SM</span></samp>&rsquo;<dd>San Marino.
-<br><dt>&lsquo;<samp><span class="samp">SN</span></samp>&rsquo;<dd>Senegal.
-<br><dt>&lsquo;<samp><span class="samp">SO</span></samp>&rsquo;<dd>Somalia.
-<br><dt>&lsquo;<samp><span class="samp">SR</span></samp>&rsquo;<dd>Suriname.
-<br><dt>&lsquo;<samp><span class="samp">ST</span></samp>&rsquo;<dd>Sao Tome and Principe.
-<br><dt>&lsquo;<samp><span class="samp">SV</span></samp>&rsquo;<dd>El Salvador.
-<br><dt>&lsquo;<samp><span class="samp">SY</span></samp>&rsquo;<dd>Syria.
-<br><dt>&lsquo;<samp><span class="samp">SZ</span></samp>&rsquo;<dd>Swaziland.
-<br><dt>&lsquo;<samp><span class="samp">TC</span></samp>&rsquo;<dd>Turks and Caicos Islands.
-<br><dt>&lsquo;<samp><span class="samp">TD</span></samp>&rsquo;<dd>Chad.
-<br><dt>&lsquo;<samp><span class="samp">TF</span></samp>&rsquo;<dd>French Southern and Antarctic Lands.
-<br><dt>&lsquo;<samp><span class="samp">TG</span></samp>&rsquo;<dd>Togo.
-<br><dt>&lsquo;<samp><span class="samp">TH</span></samp>&rsquo;<dd>Thailand.
-<br><dt>&lsquo;<samp><span class="samp">TJ</span></samp>&rsquo;<dd>Tajikistan.
-<br><dt>&lsquo;<samp><span class="samp">TK</span></samp>&rsquo;<dd>Tokelau.
-<br><dt>&lsquo;<samp><span class="samp">TL</span></samp>&rsquo;<dd>Timor-Leste.
-<br><dt>&lsquo;<samp><span class="samp">TM</span></samp>&rsquo;<dd>Turkmenistan.
-<br><dt>&lsquo;<samp><span class="samp">TN</span></samp>&rsquo;<dd>Tunisia.
-<br><dt>&lsquo;<samp><span class="samp">TO</span></samp>&rsquo;<dd>Tonga.
-<br><dt>&lsquo;<samp><span class="samp">TR</span></samp>&rsquo;<dd>Turkey.
-<br><dt>&lsquo;<samp><span class="samp">TT</span></samp>&rsquo;<dd>Trinidad and Tobago.
-<br><dt>&lsquo;<samp><span class="samp">TV</span></samp>&rsquo;<dd>Tuvalu.
-<br><dt>&lsquo;<samp><span class="samp">TW</span></samp>&rsquo;<dd>Taiwan.
-<br><dt>&lsquo;<samp><span class="samp">TZ</span></samp>&rsquo;<dd>Tanzania.
-<br><dt>&lsquo;<samp><span class="samp">UA</span></samp>&rsquo;<dd>Ukraine.
-<br><dt>&lsquo;<samp><span class="samp">UG</span></samp>&rsquo;<dd>Uganda.
-<br><dt>&lsquo;<samp><span class="samp">UM</span></samp>&rsquo;<dd>US minor outlying islands.
-<br><dt>&lsquo;<samp><span class="samp">US</span></samp>&rsquo;<dd>United States.
-<br><dt>&lsquo;<samp><span class="samp">UY</span></samp>&rsquo;<dd>Uruguay.
-<br><dt>&lsquo;<samp><span class="samp">UZ</span></samp>&rsquo;<dd>Uzbekistan.
-<br><dt>&lsquo;<samp><span class="samp">VA</span></samp>&rsquo;<dd>Vatican City.
-<br><dt>&lsquo;<samp><span class="samp">VC</span></samp>&rsquo;<dd>St Vincent and the Grenadines.
-<br><dt>&lsquo;<samp><span class="samp">VE</span></samp>&rsquo;<dd>Venezuela.
-<br><dt>&lsquo;<samp><span class="samp">VG</span></samp>&rsquo;<dd>Virgin Islands (UK).
-<br><dt>&lsquo;<samp><span class="samp">VI</span></samp>&rsquo;<dd>Virgin Islands (US).
-<br><dt>&lsquo;<samp><span class="samp">VN</span></samp>&rsquo;<dd>Vietnam.
-<br><dt>&lsquo;<samp><span class="samp">VU</span></samp>&rsquo;<dd>Vanuatu.
-<br><dt>&lsquo;<samp><span class="samp">WF</span></samp>&rsquo;<dd>Wallis and Futuna.
-<br><dt>&lsquo;<samp><span class="samp">WS</span></samp>&rsquo;<dd>Samoa (Western).
-<br><dt>&lsquo;<samp><span class="samp">YE</span></samp>&rsquo;<dd>Yemen.
-<br><dt>&lsquo;<samp><span class="samp">YT</span></samp>&rsquo;<dd>Mayotte.
-<br><dt>&lsquo;<samp><span class="samp">ZA</span></samp>&rsquo;<dd>South Africa.
-<br><dt>&lsquo;<samp><span class="samp">ZM</span></samp>&rsquo;<dd>Zambia.
-<br><dt>&lsquo;<samp><span class="samp">ZW</span></samp>&rsquo;<dd>Zimbabwe.
-</dl>
-
-<div class="node">
-<a name="Licenses"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Program-Index">Program Index</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Country-Codes">Country Codes</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="appendix">Appendix C Licenses</h2>
-
- <p><a name="index-Licenses-1265"></a>
-The files of this package are covered by the licenses indicated in each
-particular file or directory. Here is a summary:
-
- <ul>
-<li>The <code>libintl</code> and <code>libasprintf</code> libraries are covered by the
-GNU Library General Public License (LGPL).
-A copy of the license is included in <a href="#GNU-LGPL">GNU LGPL</a>.
-
- <li>The executable programs of this package and the <code>libgettextpo</code> library
-are covered by the GNU General Public License (GPL).
-A copy of the license is included in <a href="#GNU-GPL">GNU GPL</a>.
-
- <li>This manual is free documentation. It is dually licensed under the
-GNU FDL and the GNU GPL. This means that you can redistribute this
-manual under either of these two licenses, at your choice.
-<br>
-This manual is covered by the GNU FDL. Permission is granted to copy,
-distribute and/or modify this document under the terms of the
-GNU Free Documentation License (FDL), either version 1.2 of the
-License, or (at your option) any later version published by the
-Free Software Foundation (FSF); with no Invariant Sections, with no
-Front-Cover Text, and with no Back-Cover Texts.
-A copy of the license is included in <a href="#GNU-FDL">GNU FDL</a>.
-<br>
-This manual is covered by the GNU GPL. You can redistribute it and/or
-modify it under the terms of the GNU General Public License (GPL), either
-version 2 of the License, or (at your option) any later version published
-by the Free Software Foundation (FSF).
-A copy of the license is included in <a href="#GNU-GPL">GNU GPL</a>.
-</ul>
-
-<ul class="menu">
-<li><a accesskey="1" href="#GNU-GPL">GNU GPL</a>: GNU General Public License
-<li><a accesskey="2" href="#GNU-LGPL">GNU LGPL</a>: GNU Lesser General Public License
-<li><a accesskey="3" href="#GNU-FDL">GNU FDL</a>: GNU Free Documentation License
-</ul>
-
-<div class="node">
-<a name="GNU-GPL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#GNU-LGPL">GNU LGPL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Licenses">Licenses</a>
-
-</div>
-
-<h3 class="appendixsec">C.1 GNU GENERAL PUBLIC LICENSE</h3>
-
- <p><a name="index-GPL_002c-GNU-General-Public-License-1266"></a><a name="index-License_002c-GNU-GPL-1267"></a><div align="center">Version 2, June 1991</div>
-
-<!-- This file is intended to be included in another file. -->
-<pre class="display"> Copyright &copy; 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-</pre>
-<h4 class="unnumberedsubsec">Preamble</h4>
-
- <p>The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software&mdash;to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- <p>When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- <p>To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- <p>For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- <p>We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- <p>Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- <p>Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- <p>The precise terms and conditions for copying, distribution and
-modification follow.
-
- <ol type=1 start=0>
-<li>This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The &ldquo;Program&rdquo;, below,
-refers to any such program or work, and a &ldquo;work based on the Program&rdquo;
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term &ldquo;modification&rdquo;.) Each licensee is addressed as &ldquo;you&rdquo;.
-
- <p>Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- <li>You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
- <p>You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- <li>You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- <ol type=a start=1>
-<li>You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
- <li>You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
- <li>If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License. (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
- </ol>
-
- <p>These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
- <p>Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
- <p>In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- <li>You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- <ol type=a start=1>
-<li>Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
- <li>Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
- <li>Accompany it with the information you received as to the offer
-to distribute corresponding source code. (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
- </ol>
-
- <p>The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
- <p>If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- <li>You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- <li>You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- <li>Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- <li>If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
- <p>If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
- <p>It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
- <p>This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- <li>If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- <li>The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- <p>Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and &ldquo;any
-later version&rdquo;, you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- <li>If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- <li>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- <li>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
- </ol>
-
-<h4 class="unnumberedsubsec">Appendix: How to Apply These Terms to Your New Programs</h4>
-
- <p>If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- <p>To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.
-
-<pre class="smallexample"> <var>one line to give the program's name and a brief idea of what it does.</var>
- Copyright (C) <var>yyyy</var> <var>name of author</var>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-</pre>
- <p>Also add information on how to contact you by electronic and paper mail.
-
- <p>If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-<pre class="smallexample"> Gnomovision version 69, Copyright (C) 19<var>yy</var> <var>name of author</var>
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-</pre>
- <p>The hypothetical commands &lsquo;<samp><span class="samp">show w</span></samp>&rsquo; and &lsquo;<samp><span class="samp">show c</span></samp>&rsquo; should show
-the appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than &lsquo;<samp><span class="samp">show w</span></samp>&rsquo; and
-&lsquo;<samp><span class="samp">show c</span></samp>&rsquo;; they could even be mouse-clicks or menu items&mdash;whatever
-suits your program.
-
- <p>You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if
-necessary. Here is a sample; alter the names:
-
-<pre class="example"> Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <var>signature of Ty Coon</var>, 1 April 1989
- Ty Coon, President of Vice
-</pre>
- <p>This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-<div class="node">
-<a name="GNU-LGPL"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#GNU-FDL">GNU FDL</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#GNU-GPL">GNU GPL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Licenses">Licenses</a>
-
-</div>
-
-<h3 class="appendixsec">C.2 GNU LESSER GENERAL PUBLIC LICENSE</h3>
-
- <p><a name="index-LGPL_002c-GNU-Lesser-General-Public-License-1268"></a><a name="index-License_002c-GNU-LGPL-1269"></a><div align="center">Version 2.1, February 1999</div>
-
-<pre class="display"> Copyright &copy; 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin St &ndash; Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- [This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence the
- version number 2.1.]
-</pre>
-<h4 class="unnumberedsubsec">Preamble</h4>
-
- <p>The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software&mdash;to make sure the software is free for all its users.
-
- <p>This license, the Lesser General Public License, applies to some
-specially designated software&mdash;typically libraries&mdash;of the Free
-Software Foundation and other authors who decide to use it. You can use
-it too, but we suggest you first think carefully about whether this
-license or the ordinary General Public License is the better strategy to
-use in any particular case, based on the explanations below.
-
- <p>When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of it
-in new free programs; and that you are informed that you can do these
-things.
-
- <p>To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- <p>For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- <p>We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- <p>To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- <p>Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- <p>Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- <p>When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- <p>We call this license the <dfn>Lesser</dfn> General Public License because it
-does <em>Less</em> to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- <p>For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- <p>In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- <p>Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- <p>The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-&ldquo;work based on the library&rdquo; and a &ldquo;work that uses the library&rdquo;. The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- <ol type=1 start=0>
-<li>This License Agreement applies to any software library or other program
-which contains a notice placed by the copyright holder or other
-authorized party saying it may be distributed under the terms of this
-Lesser General Public License (also called &ldquo;this License&rdquo;). Each
-licensee is addressed as &ldquo;you&rdquo;.
-
- <p>A &ldquo;library&rdquo; means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- <p>The &ldquo;Library&rdquo;, below, refers to any such software library or work
-which has been distributed under these terms. A &ldquo;work based on the
-Library&rdquo; means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term &ldquo;modification&rdquo;.)
-
- <p>&ldquo;Source code&rdquo; for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- <p>Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- <li>You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- <p>You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- <li>You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- <ol type=a start=1>
-<li>The modified work must itself be a software library.
-
- <li>You must cause the files modified to carry prominent notices
-stating that you changed the files and the date of any change.
-
- <li>You must cause the whole of the work to be licensed at no
-charge to all third parties under the terms of this License.
-
- <li>If a facility in the modified Library refers to a function or a
-table of data to be supplied by an application program that uses
-the facility, other than as an argument passed when the facility
-is invoked, then you must make a good faith effort to ensure that,
-in the event an application does not supply such function or
-table, the facility still operates, and performs whatever part of
-its purpose remains meaningful.
-
- <p>(For example, a function in a library to compute square roots has
-a purpose that is entirely well-defined independent of the
-application. Therefore, Subsection 2d requires that any
-application-supplied function or table used by this function must
-be optional: if the application does not supply it, the square
-root function must still compute square roots.)
- </ol>
-
- <p>These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
- <p>Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
- <p>In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- <li>You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- <p>Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- <p>This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- <li>You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- <p>If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- <li>A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a &ldquo;work that uses the Library&rdquo;. Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- <p>However, linking a &ldquo;work that uses the Library&rdquo; with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a &ldquo;work that uses the
-library&rdquo;. The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- <p>When a &ldquo;work that uses the Library&rdquo; uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- <p>If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- <p>Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- <li>As an exception to the Sections above, you may also combine or
-link a &ldquo;work that uses the Library&rdquo; with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- <p>You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- <ol type=a start=1>
-<li>Accompany the work with the complete corresponding
-machine-readable source code for the Library including whatever
-changes were used in the work (which must be distributed under
-Sections 1 and 2 above); and, if the work is an executable linked
-with the Library, with the complete machine-readable &ldquo;work that
-uses the Library&rdquo;, as object code and/or source code, so that the
-user can modify the Library and then relink to produce a modified
-executable containing the modified Library. (It is understood
-that the user who changes the contents of definitions files in the
-Library will not necessarily be able to recompile the application
-to use the modified definitions.)
-
- <li>Use a suitable shared library mechanism for linking with the Library. A
-suitable mechanism is one that (1) uses at run time a copy of the
-library already present on the user's computer system, rather than
-copying library functions into the executable, and (2) will operate
-properly with a modified version of the library, if the user installs
-one, as long as the modified version is interface-compatible with the
-version that the work was made with.
-
- <li>Accompany the work with a written offer, valid for at
-least three years, to give the same user the materials
-specified in Subsection 6a, above, for a charge no more
-than the cost of performing this distribution.
-
- <li>If distribution of the work is made by offering access to copy
-from a designated place, offer equivalent access to copy the above
-specified materials from the same place.
-
- <li>Verify that the user has already received a copy of these
-materials or that you have already sent this user a copy.
- </ol>
-
- <p>For an executable, the required form of the &ldquo;work that uses the
-Library&rdquo; must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies the
-executable.
-
- <p>It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- <li>You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- <ol type=a start=1>
-<li>Accompany the combined library with a copy of the same work
-based on the Library, uncombined with any other library
-facilities. This must be distributed under the terms of the
-Sections above.
-
- <li>Give prominent notice with the combined library of the fact
-that part of it is a work based on the Library, and explaining
-where to find the accompanying uncombined form of the same work.
- </ol>
-
- <li>You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- <li>You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- <li>Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- <li>If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
- <p>If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
- <p>It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
- <p>This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- <li>If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- <li>The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
- <p>Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-&ldquo;any later version&rdquo;, you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- <li>If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- <li>BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- <li>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
- </ol>
-
-<h4 class="unnumberedsubsec">How to Apply These Terms to Your New Libraries</h4>
-
- <p>If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- <p>To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-&ldquo;copyright&rdquo; line and a pointer to where the full notice is found.
-
-<pre class="smallexample"> <var>one line to give the library's name and an idea of what it does.</var>
- Copyright (C) <var>year</var> <var>name of author</var>
-
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA.
-</pre>
- <p>Also add information on how to contact you by electronic and paper mail.
-
- <p>You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a &ldquo;copyright disclaimer&rdquo; for the library, if
-necessary. Here is a sample; alter the names:
-
-<pre class="smallexample"> Yoyodyne, Inc., hereby disclaims all copyright interest in the library
- `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <var>signature of Ty Coon</var>, 1 April 1990
- Ty Coon, President of Vice
-</pre>
- <p>That's all there is to it!
-
-<div class="node">
-<a name="GNU-FDL"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#GNU-LGPL">GNU LGPL</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Licenses">Licenses</a>
-
-</div>
-
-<h3 class="appendixsec">C.3 GNU Free Documentation License</h3>
-
- <p><a name="index-FDL_002c-GNU-Free-Documentation-License-1270"></a><a name="index-License_002c-GNU-FDL-1271"></a><div align="center">Version 1.2, November 2002</div>
-
-<pre class="display"> Copyright &copy; 2000,2001,2002 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-</pre>
- <ol type=1 start=0>
-<li>PREAMBLE
-
- <p>The purpose of this License is to make a manual, textbook, or other
-functional and useful document <dfn>free</dfn> in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
- <p>This License is a kind of &ldquo;copyleft&rdquo;, which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
- <p>We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
- <li>APPLICABILITY AND DEFINITIONS
-
- <p>This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The &ldquo;Document&rdquo;, below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as &ldquo;you&rdquo;. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
- <p>A &ldquo;Modified Version&rdquo; of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
- <p>A &ldquo;Secondary Section&rdquo; is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
- <p>The &ldquo;Invariant Sections&rdquo; are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
- <p>The &ldquo;Cover Texts&rdquo; are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
- <p>A &ldquo;Transparent&rdquo; copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
-
- <p>Examples of suitable formats for Transparent copies include plain
-<span class="sc">ascii</span> without markup, Texinfo input format, LaTeX input
-format, SGML or XML using a publicly available
-DTD, and standard-conforming simple HTML,
-PostScript or PDF designed for human modification. Examples
-of transparent image formats include PNG, XCF and
-JPG. Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, SGML or
-XML for which the DTD and/or processing tools are
-not generally available, and the machine-generated HTML,
-PostScript or PDF produced by some word processors for
-output purposes only.
-
- <p>The &ldquo;Title Page&rdquo; means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, &ldquo;Title Page&rdquo; means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
- <p>A section &ldquo;Entitled XYZ&rdquo; means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as &ldquo;Acknowledgements&rdquo;,
-&ldquo;Dedications&rdquo;, &ldquo;Endorsements&rdquo;, or &ldquo;History&rdquo;.) To &ldquo;Preserve the Title&rdquo;
-of such a section when you modify the Document means that it remains a
-section &ldquo;Entitled XYZ&rdquo; according to this definition.
-
- <p>The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
- <li>VERBATIM COPYING
-
- <p>You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
- <p>You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
- <li>COPYING IN QUANTITY
-
- <p>If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
- <p>If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
- <p>If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
- <p>It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
- <li>MODIFICATIONS
-
- <p>You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
- <ol type=A start=1>
-<li>Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document). You may use the same title as a previous version
-if the original publisher of that version gives permission.
-
- <li>List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-
- <li>State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-
- <li>Preserve all the copyright notices of the Document.
-
- <li>Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-
- <li>Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-
- <li>Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-
- <li>Include an unaltered copy of this License.
-
- <li>Preserve the section Entitled &ldquo;History&rdquo;, Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page. If
-there is no section Entitled &ldquo;History&rdquo; in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-
- <li>Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on. These may be placed in the &ldquo;History&rdquo; section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-
- <li>For any section Entitled &ldquo;Acknowledgements&rdquo; or &ldquo;Dedications&rdquo;, Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-
- <li>Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles. Section numbers
-or the equivalent are not considered part of the section titles.
-
- <li>Delete any section Entitled &ldquo;Endorsements&rdquo;. Such a section
-may not be included in the Modified Version.
-
- <li>Do not retitle any existing section to be Entitled &ldquo;Endorsements&rdquo; or
-to conflict in title with any Invariant Section.
-
- <li>Preserve any Warranty Disclaimers.
- </ol>
-
- <p>If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
- <p>You may add a section Entitled &ldquo;Endorsements&rdquo;, provided it contains
-nothing but endorsements of your Modified Version by various
-parties&mdash;for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
- <p>You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
- <p>The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
- <li>COMBINING DOCUMENTS
-
- <p>You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
- <p>The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
- <p>In the combination, you must combine any sections Entitled &ldquo;History&rdquo;
-in the various original documents, forming one section Entitled
-&ldquo;History&rdquo;; likewise combine any sections Entitled &ldquo;Acknowledgements&rdquo;,
-and any sections Entitled &ldquo;Dedications&rdquo;. You must delete all
-sections Entitled &ldquo;Endorsements.&rdquo;
-
- <li>COLLECTIONS OF DOCUMENTS
-
- <p>You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
- <p>You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
- <li>AGGREGATION WITH INDEPENDENT WORKS
-
- <p>A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an &ldquo;aggregate&rdquo; if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
- <p>If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
- <li>TRANSLATION
-
- <p>Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
- <p>If a section in the Document is Entitled &ldquo;Acknowledgements&rdquo;,
-&ldquo;Dedications&rdquo;, or &ldquo;History&rdquo;, the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
- <li>TERMINATION
-
- <p>You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- <li>FUTURE REVISIONS OF THIS LICENSE
-
- <p>The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
-
- <p>Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License &ldquo;or any later version&rdquo; applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
- </ol>
-
-<h4 class="unnumberedsubsec">ADDENDUM: How to use this License for your documents</h4>
-
- <p>To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-<pre class="smallexample"> Copyright (C) <var>year</var> <var>your name</var>.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-</pre>
- <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the &ldquo;with...Texts.&rdquo; line with this:
-
-<pre class="smallexample"> with the Invariant Sections being <var>list their titles</var>, with
- the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
- being <var>list</var>.
-</pre>
- <p>If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- <p>If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-<!-- Local Variables: -->
-<!-- ispell-local-pdict: "ispell-dict" -->
-<!-- End: -->
-<div class="node">
-<a name="Program-Index"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Option-Index">Option Index</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Licenses">Licenses</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="unnumbered">Program Index</h2>
-
-<ul class="index-pg" compact>
-<li><a href="#index-autopoint-1155"><code>autopoint</code></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-envsubst-1204"><code>envsubst</code></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-gettext-1181"><code>gettext</code></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-gettext-1176"><code>gettext</code></a>: <a href="#sh">sh</a></li>
-<li><a href="#index-gettextize-1117"><code>gettextize</code></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-msgattrib-828"><code>msgattrib</code></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-msgcat-542"><code>msgcat</code></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-msgcmp-810"><code>msgcmp</code></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-msgcomm-768"><code>msgcomm</code></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-msgconv-590"><code>msgconv</code></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-msgen-878"><code>msgen</code></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-msgexec-911"><code>msgexec</code></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-msgfilter-679"><code>msgfilter</code></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-msgfmt-947"><code>msgfmt</code></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-msggrep-624"><code>msggrep</code></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-msginit-239"><code>msginit</code></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-msgmerge-276"><code>msgmerge</code></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-msgunfmt-1009"><code>msgunfmt</code></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-msguniq-727"><code>msguniq</code></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-ngettext-1193"><code>ngettext</code></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-ngettext-1177"><code>ngettext</code></a>: <a href="#sh">sh</a></li>
-<li><a href="#index-recode_002dsr_002dlatin-700"><code>recode-sr-latin</code></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-xgettext-159"><code>xgettext</code></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
- </ul><div class="node">
-<a name="Option-Index"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Variable-Index">Variable Index</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Program-Index">Program Index</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="unnumbered">Option Index</h2>
-
-
-
-<ul class="index-op" compact>
-<li><a href="#index-g_t_002d_002dadd_002dcomments_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-183"><code>--add-comments</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-862"><code>--add-location</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-573"><code>--add-location</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-793"><code>--add-location</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-608"><code>--add-location</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-895"><code>--add-location</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-711"><code>--add-location</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-665"><code>--add-location</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-306"><code>--add-location</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-752"><code>--add-location</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dadd_002dlocation_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-211"><code>--add-location</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dalignment_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1000"><code>--alignment</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dbackup_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-287"><code>--backup</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dboost_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-200"><code>--boost</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dc_002b_002b_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-176"><code>--c++</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcheck_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-984"><code>--check</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcheck_002daccelerators_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-992"><code>--check-accelerators</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcheck_002dcompatibility_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-990"><code>--check-compatibility</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcheck_002ddomain_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-988"><code>--check-domain</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcheck_002dformat_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-985"><code>--check-format</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcheck_002dheader_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-987"><code>--check-header</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dclear_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-844"><code>--clear-fuzzy</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dclear_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-846"><code>--clear-obsolete</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dclear_002dprevious_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-847"><code>--clear-previous</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-855"><code>--color</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-930"><code>--color</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#The-_002d_002dcolor-option">The --color option</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-566"><code>--color</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-786"><code>--color</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-602"><code>--color</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-889"><code>--color</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-705"><code>--color</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-660"><code>--color</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-253"><code>--color</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-300"><code>--color</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1035"><code>--color</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-745"><code>--color</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcolor_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-204"><code>--color</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcomment_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-642"><code>--comment</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcompendium_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-281"><code>--compendium</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcopyright_002dholder_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-225"><code>--copyright-holder</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcsharp_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-956"><code>--csharp</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcsharp_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1015"><code>--csharp</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcsharp_002dresources_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-958"><code>--csharp-resources</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dcsharp_002dresources_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1017"><code>--csharp-resources</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddebug_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-202"><code>--debug</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddefault_002ddomain_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-166"><code>--default-domain</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-833"><code>--directory</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-549"><code>--directory</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-814"><code>--directory</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-774"><code>--directory</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-594"><code>--directory</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-882"><code>--directory</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-922"><code>--directory</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-688"><code>--directory</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-951"><code>--directory</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-628"><code>--directory</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-279"><code>--directory</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-732"><code>--directory</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddirectory_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-164"><code>--directory</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddomain_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1185"><code>--domain</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddomain_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-634"><code>--domain</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddomain_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1197"><code>--domain</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddry_002drun_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1160"><code>--dry-run</code><span class="roman">, </span><code>autopoint</code><span class="roman"> option</span></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-g_t_002d_002ddry_002drun_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1126"><code>--dry-run</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dexclude_002dfile_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-181"><code>--exclude-file</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dexpression_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-694"><code>--expression</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dextended_002dregexp_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-646"><code>--extended-regexp</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dextract_002dall_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-185"><code>--extract-all</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dextracted_002dcomment_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-644"><code>--extracted-comment</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfile_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-696"><code>--file</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfile_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-652"><code>--file</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfiles_002dfrom_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-547"><code>--files-from</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfiles_002dfrom_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-772"><code>--files-from</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfiles_002dfrom_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-162"><code>--files-from</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfixed_002dstrings_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-648"><code>--fixed-strings</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dflag_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-190"><code>--flag</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1158"><code>--force</code><span class="roman">, </span><code>autopoint</code><span class="roman"> option</span></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1120"><code>--force</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-857"><code>--force-po</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-568"><code>--force-po</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-788"><code>--force-po</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-604"><code>--force-po</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-891"><code>--force-po</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-707"><code>--force-po</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-662"><code>--force-po</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-302"><code>--force-po</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1037"><code>--force-po</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-747"><code>--force-po</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforce_002dpo_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-206"><code>--force-po</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dforeign_002duser_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-226"><code>--foreign-user</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfrom_002dcode_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-177"><code>--from-code</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-850"><code>--fuzzy</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1161"><code>--help</code><span class="roman">, </span><code>autopoint</code><span class="roman"> option</span></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1212"><code>--help</code><span class="roman">, </span><code>envsubst</code><span class="roman"> option</span></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1189"><code>--help</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1127"><code>--help</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-875"><code>--help</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-587"><code>--help</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-825"><code>--help</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-807"><code>--help</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-621"><code>--help</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-908"><code>--help</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-927"><code>--help</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-724"><code>--help</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1003"><code>--help</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-676"><code>--help</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-262"><code>--help</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-320"><code>--help</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1051"><code>--help</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-765"><code>--help</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1201"><code>--help</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dhelp_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-235"><code>--help</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dignore_002dcase_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-654"><code>--ignore-case</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dignore_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-849"><code>--ignore-file</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-859"><code>--indent</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-570"><code>--indent</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-790"><code>--indent</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-606"><code>--indent</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-893"><code>--indent</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-708"><code>--indent</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-663"><code>--indent</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-304"><code>--indent</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1039"><code>--indent</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-749"><code>--indent</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dindent_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-208"><code>--indent</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dinput_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-920"><code>--input</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002d_002dinput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-686"><code>--input</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dinput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-244"><code>--input</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dintl_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1121"><code>--intl</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dinvert_002dmatch_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-656"><code>--invert-match</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002djava_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-953"><code>--java</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002djava_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1013"><code>--java</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002djava2_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-955"><code>--java2</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002djoin_002dexisting_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-179"><code>--join-existing</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dkde_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-198"><code>--kde</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dkeep_002dheader_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-709"><code>--keep-header</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dkeyword_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-187"><code>--keyword</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlang_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-888"><code>--lang</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlang_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-565"><code>--lang</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlang_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-299"><code>--lang</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlanguage_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-173"><code>--language</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dless_002dthan_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-554"><code>--less-than</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dless_002dthan_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-778"><code>--less-than</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-970"><code>--locale</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-251"><code>--locale</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlocale_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1024"><code>--locale</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dlocation_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-632"><code>--location</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmore_002dthan_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-556"><code>--more-than</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmore_002dthan_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-780"><code>--more-than</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmsgctxt_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-636"><code>--msgctxt</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmsgid_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-638"><code>--msgid</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmsgid_002dbugs_002daddress_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-229"><code>--msgid-bugs-address</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmsgstr_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-640"><code>--msgstr</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmsgstr_002dprefix_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-231"><code>--msgstr-prefix</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmsgstr_002dsuffix_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-233"><code>--msgstr-suffix</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmulti_002ddomain_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-816"><code>--multi-domain</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dmulti_002ddomain_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-292"><code>--multi-domain</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dchangelog_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1123"><code>--no-changelog</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-838"><code>--no-fuzzy</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dfuzzy_002dmatching_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-818"><code>--no-fuzzy-matching</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dfuzzy_002dmatching_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-294"><code>--no-fuzzy-matching</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dhash_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1001"><code>--no-hash</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-860"><code>--no-location</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-571"><code>--no-location</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-791"><code>--no-location</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-607"><code>--no-location</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-894"><code>--no-location</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-710"><code>--no-location</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-664"><code>--no-location</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-305"><code>--no-location</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-750"><code>--no-location</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dlocation_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-209"><code>--no-location</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-840"><code>--no-obsolete</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dtranslator_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-252"><code>--no-translator</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-869"><code>--no-wrap</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-580"><code>--no-wrap</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-800"><code>--no-wrap</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-615"><code>--no-wrap</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-902"><code>--no-wrap</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-718"><code>--no-wrap</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-672"><code>--no-wrap</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-260"><code>--no-wrap</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-313"><code>--no-wrap</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1046"><code>--no-wrap</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-759"><code>--no-wrap</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dno_002dwrap_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-217"><code>--no-wrap</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-851"><code>--obsolete</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002domit_002dheader_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-805"><code>--omit-header</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002domit_002dheader_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-223"><code>--omit-header</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002donly_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-848"><code>--only-file</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002donly_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-839"><code>--only-fuzzy</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002donly_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-841"><code>--only-obsolete</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-168"><code>--output</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002ddir_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-170"><code>--output-dir</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-835"><code>--output-file</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-551"><code>--output-file</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-776"><code>--output-file</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-596"><code>--output-file</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-884"><code>--output-file</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-690"><code>--output-file</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-965"><code>--output-file</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-630"><code>--output-file</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-246"><code>--output-file</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-285"><code>--output-file</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1034"><code>--output-file</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002doutput_002dfile_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-734"><code>--output-file</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dpackage_002dname_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-227"><code>--package-name</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dpackage_002dversion_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-228"><code>--package-version</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dpo_002ddir_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1122"><code>--po-dir</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dprevious_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-295"><code>--previous</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-853"><code>--properties-input</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-560"><code>--properties-input</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-822"><code>--properties-input</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-784"><code>--properties-input</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-600"><code>--properties-input</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-886"><code>--properties-input</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-924"><code>--properties-input</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-703"><code>--properties-input</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-981"><code>--properties-input</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-658"><code>--properties-input</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-248"><code>--properties-input</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-297"><code>--properties-input</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002dinput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-740"><code>--properties-input</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-865"><code>--properties-output</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-576"><code>--properties-output</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-796"><code>--properties-output</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-611"><code>--properties-output</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-898"><code>--properties-output</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-714"><code>--properties-output</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-668"><code>--properties-output</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-256"><code>--properties-output</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-309"><code>--properties-output</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1042"><code>--properties-output</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-755"><code>--properties-output</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dproperties_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-213"><code>--properties-output</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dqt_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-962"><code>--qt</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dqt_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-196"><code>--qt</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dquiet_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-698"><code>--quiet</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dquiet_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-326"><code>--quiet</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dregexp_003d_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-650"><code>--regexp=</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002drepeated_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-736"><code>--repeated</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dresource_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-968"><code>--resource</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dresource_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1022"><code>--resource</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dset_002dfuzzy_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-843"><code>--set-fuzzy</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dset_002dobsolete_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-845"><code>--set-obsolete</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsilent_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-699"><code>--silent</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsilent_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-327"><code>--silent</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-873"><code>--sort-by-file</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-585"><code>--sort-by-file</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-804"><code>--sort-by-file</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-619"><code>--sort-by-file</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-906"><code>--sort-by-file</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-722"><code>--sort-by-file</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-674"><code>--sort-by-file</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-318"><code>--sort-by-file</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-763"><code>--sort-by-file</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002dby_002dfile_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-222"><code>--sort-by-file</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-871"><code>--sort-output</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-582"><code>--sort-output</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-802"><code>--sort-output</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-617"><code>--sort-output</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-904"><code>--sort-output</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-720"><code>--sort-output</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-673"><code>--sort-output</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-315"><code>--sort-output</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1048"><code>--sort-output</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-761"><code>--sort-output</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsort_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-219"><code>--sort-output</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstatistics_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1006"><code>--statistics</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-863"><code>--strict</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-574"><code>--strict</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-794"><code>--strict</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-609"><code>--strict</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-896"><code>--strict</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-712"><code>--strict</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-966"><code>--strict</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-666"><code>--strict</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-307"><code>--strict</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1040"><code>--strict</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-753"><code>--strict</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstrict_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-212"><code>--strict</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-854"><code>--stringtable-input</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-561"><code>--stringtable-input</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-823"><code>--stringtable-input</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-785"><code>--stringtable-input</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-887"><code>--stringtable-input</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-925"><code>--stringtable-input</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-704"><code>--stringtable-input</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-982"><code>--stringtable-input</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-659"><code>--stringtable-input</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-249"><code>--stringtable-input</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-298"><code>--stringtable-input</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsgonv_007d-option_007d-601"><code>--stringtable-input</code><span class="roman">, </span><code>msgonv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002dinput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-741"><code>--stringtable-input</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-866"><code>--stringtable-output</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-577"><code>--stringtable-output</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-797"><code>--stringtable-output</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-612"><code>--stringtable-output</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-899"><code>--stringtable-output</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-715"><code>--stringtable-output</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-669"><code>--stringtable-output</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-257"><code>--stringtable-output</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-310"><code>--stringtable-output</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1043"><code>--stringtable-output</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-756"><code>--stringtable-output</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstringtable_002doutput_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-214"><code>--stringtable-output</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-856"><code>--style</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-932"><code>--style</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#The-_002d_002dstyle-option">The --style option</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-567"><code>--style</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-787"><code>--style</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-603"><code>--style</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-890"><code>--style</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-706"><code>--style</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-661"><code>--style</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-254"><code>--style</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-301"><code>--style</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1036"><code>--style</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-746"><code>--style</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dstyle_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-205"><code>--style</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsuffix_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-289"><code>--suffix</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dsymlink_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1124"><code>--symlink</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dtcl_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-960"><code>--tcl</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dtcl_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1019"><code>--tcl</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dto_002dcode_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-563"><code>--to-code</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dto_002dcode_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-598"><code>--to-code</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dto_002dcode_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-743"><code>--to-code</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dtranslated_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-836"><code>--translated</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dtrigraphs_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-194"><code>--trigraphs</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dunique_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-558"><code>--unique</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dunique_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-782"><code>--unique</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dunique_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-738"><code>--unique</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002duntranslated_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-837"><code>--untranslated</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dupdate_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-283"><code>--update</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002duse_002dfirst_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-564"><code>--use-first</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002duse_002dfirst_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-744"><code>--use-first</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002duse_002dfuzzy_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-819"><code>--use-fuzzy</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002duse_002dfuzzy_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-997"><code>--use-fuzzy</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002duse_002duntranslated_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-820"><code>--use-untranslated</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dvariables_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1210"><code>--variables</code><span class="roman">, </span><code>envsubst</code><span class="roman"> option</span></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_002d_002dverbose_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1008"><code>--verbose</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dverbose_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-324"><code>--verbose</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dverbose_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1055"><code>--verbose</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1162"><code>--version</code><span class="roman">, </span><code>autopoint</code><span class="roman"> option</span></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1214"><code>--version</code><span class="roman">, </span><code>envsubst</code><span class="roman"> option</span></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1192"><code>--version</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1128"><code>--version</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-877"><code>--version</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-589"><code>--version</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-827"><code>--version</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-809"><code>--version</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-623"><code>--version</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-910"><code>--version</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-929"><code>--version</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-726"><code>--version</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1005"><code>--version</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-678"><code>--version</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-264"><code>--version</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-322"><code>--version</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1053"><code>--version</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-767"><code>--version</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1203"><code>--version</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dversion_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-237"><code>--version</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-868"><code>--width</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-579"><code>--width</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-799"><code>--width</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-614"><code>--width</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-901"><code>--width</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-717"><code>--width</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-671"><code>--width</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-259"><code>--width</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-312"><code>--width</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1045"><code>--width</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-758"><code>--width</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002d_002dwidth_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-216"><code>--width</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002d_003c_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-553"><code>-&lt;</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_003c_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-777"><code>-&lt;</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002d_003e_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-555"><code>-&gt;</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002d_003e_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-779"><code>-&gt;</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002da_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-999"><code>-a</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002da_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-184"><code>-a</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dC_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-989"><code>-C</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dc_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-983"><code>-c</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dC_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-641"><code>-C</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dC_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-280"><code>-C</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dc_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-182"><code>-c</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dC_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-175"><code>-C</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1159"><code>-d</code><span class="roman">, </span><code>autopoint</code><span class="roman"> option</span></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1184"><code>-d</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1125"><code>-d</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-832"><code>-D</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-548"><code>-D</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-813"><code>-D</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-773"><code>-D</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-593"><code>-D</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-881"><code>-D</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-921"><code>-D</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-687"><code>-D</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-971"><code>-d</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-950"><code>-D</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-627"><code>-D</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-278"><code>-D</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1029"><code>-d</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-735"><code>-d</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-731"><code>-D</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1196"><code>-d</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002dd_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-165"><code>-d</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dD_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-163"><code>-D</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dE_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1187"><code>-E</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002de_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1186"><code>-e</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002de_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-693"><code>-e</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002de_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-649"><code>-e</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dE_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-645"><code>-E</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dE_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1199"><code>-E</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002de_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1198"><code>-e</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bautopoint_007d-option_007d-1157"><code>-f</code><span class="roman">, </span><code>autopoint</code><span class="roman"> option</span></a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bgettextize_007d-option_007d-1119"><code>-f</code><span class="roman">, </span><code>gettextize</code><span class="roman"> option</span></a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-872"><code>-F</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-584"><code>-F</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-546"><code>-f</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-803"><code>-F</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-771"><code>-f</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-618"><code>-F</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-905"><code>-F</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-721"><code>-F</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-695"><code>-f</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-996"><code>-f</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-651"><code>-f</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-647"><code>-F</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-317"><code>-F</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-762"><code>-F</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dF_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-221"><code>-F</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002df_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-161"><code>-f</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1211"><code>-h</code><span class="roman">, </span><code>envsubst</code><span class="roman"> option</span></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1188"><code>-h</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-874"><code>-h</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-586"><code>-h</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-824"><code>-h</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-806"><code>-h</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-620"><code>-h</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-907"><code>-h</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-926"><code>-h</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-723"><code>-h</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1002"><code>-h</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-675"><code>-h</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-261"><code>-h</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-319"><code>-h</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1050"><code>-h</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-764"><code>-h</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1200"><code>-h</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002dh_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-234"><code>-h</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-858"><code>-i</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-569"><code>-i</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-789"><code>-i</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-605"><code>-i</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-892"><code>-i</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-919"><code>-i</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-685"><code>-i</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-653"><code>-i</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-243"><code>-i</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-303"><code>-i</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1038"><code>-i</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-748"><code>-i</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002di_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-207"><code>-i</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dj_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-952"><code>-j</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dJ_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-635"><code>-J</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dj_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1012"><code>-j</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dj_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-178"><code>-j</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dK_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-637"><code>-K</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dk_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-186"><code>-k</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-969"><code>-l</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dl_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-250"><code>-l</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002dl_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1023"><code>-l</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dL_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-172"><code>-L</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dm_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-815"><code>-m</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002dM_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-633"><code>-M</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dm_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-291"><code>-m</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dM_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-232"><code>-M</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dm_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-230"><code>-m</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1190"><code>-n</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-861"><code>-n</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-572"><code>-n</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dN_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-817"><code>-N</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-792"><code>-n</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-697"><code>-n</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dN_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-631"><code>-N</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dN_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-293"><code>-N</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-751"><code>-n</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dn_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-210"><code>-n</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-834"><code>-o</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-550"><code>-o</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-775"><code>-o</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-595"><code>-o</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-883"><code>-o</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-689"><code>-o</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-964"><code>-o</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-629"><code>-o</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-245"><code>-o</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-284"><code>-o</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1033"><code>-o</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-733"><code>-o</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002do_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-167"><code>-o</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-864"><code>-p</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-852"><code>-P</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-575"><code>-p</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-559"><code>-P</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-821"><code>-P</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-795"><code>-p</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-783"><code>-P</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-610"><code>-p</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-599"><code>-P</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-897"><code>-p</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-885"><code>-P</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-923"><code>-P</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-713"><code>-p</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-702"><code>-P</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-980"><code>-P</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-667"><code>-p</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-657"><code>-P</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-255"><code>-p</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-247"><code>-P</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-308"><code>-p</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-296"><code>-P</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1041"><code>-p</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-754"><code>-p</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dP_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-739"><code>-P</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dp_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-169"><code>-p</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dq_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-325"><code>-q</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dr_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-967"><code>-r</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dr_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1021"><code>-r</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-870"><code>-s</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-581"><code>-s</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-801"><code>-s</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-616"><code>-s</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-903"><code>-s</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-719"><code>-s</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-314"><code>-s</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1047"><code>-s</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-760"><code>-s</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002ds_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-218"><code>-s</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dt_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-562"><code>-t</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dt_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-597"><code>-t</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dT_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-639"><code>-T</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dt_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-742"><code>-t</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dT_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-193"><code>-T</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002du_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-557"><code>-u</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002du_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-781"><code>-u</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dU_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-282"><code>-U</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002du_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-737"><code>-u</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1213"><code>-V</code><span class="roman">, </span><code>envsubst</code><span class="roman"> option</span></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_002dv_0040r_007b_002c-_0040code_007benvsubst_007d-option_007d-1209"><code>-v</code><span class="roman">, </span><code>envsubst</code><span class="roman"> option</span></a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bgettext_007d-option_007d-1191"><code>-V</code><span class="roman">, </span><code>gettext</code><span class="roman"> option</span></a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-876"><code>-V</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-588"><code>-V</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgcmp_007d-option_007d-826"><code>-V</code><span class="roman">, </span><code>msgcmp</code><span class="roman"> option</span></a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-808"><code>-V</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-622"><code>-V</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-909"><code>-V</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgexec_007d-option_007d-928"><code>-V</code><span class="roman">, </span><code>msgexec</code><span class="roman"> option</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-725"><code>-V</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dv_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1007"><code>-v</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgfmt_007d-option_007d-1004"><code>-V</code><span class="roman">, </span><code>msgfmt</code><span class="roman"> option</span></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-677"><code>-V</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dv_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-655"><code>-v</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-263"><code>-V</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002dv_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-323"><code>-v</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-321"><code>-V</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dv_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1054"><code>-v</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1052"><code>-V</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-766"><code>-V</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bngettext_007d-option_007d-1202"><code>-V</code><span class="roman">, </span><code>ngettext</code><span class="roman"> option</span></a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-g_t_002dV_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-236"><code>-V</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgattrib_007d-option_007d-867"><code>-w</code><span class="roman">, </span><code>msgattrib</code><span class="roman"> option</span></a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgcat_007d-option_007d-578"><code>-w</code><span class="roman">, </span><code>msgcat</code><span class="roman"> option</span></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgcomm_007d-option_007d-798"><code>-w</code><span class="roman">, </span><code>msgcomm</code><span class="roman"> option</span></a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgconv_007d-option_007d-613"><code>-w</code><span class="roman">, </span><code>msgconv</code><span class="roman"> option</span></a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgen_007d-option_007d-900"><code>-w</code><span class="roman">, </span><code>msgen</code><span class="roman"> option</span></a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgfilter_007d-option_007d-716"><code>-w</code><span class="roman">, </span><code>msgfilter</code><span class="roman"> option</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-670"><code>-w</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsginit_007d-option_007d-258"><code>-w</code><span class="roman">, </span><code>msginit</code><span class="roman"> option</span></a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgmerge_007d-option_007d-311"><code>-w</code><span class="roman">, </span><code>msgmerge</code><span class="roman"> option</span></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsgunfmt_007d-option_007d-1044"><code>-w</code><span class="roman">, </span><code>msgunfmt</code><span class="roman"> option</span></a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bmsguniq_007d-option_007d-757"><code>-w</code><span class="roman">, </span><code>msguniq</code><span class="roman"> option</span></a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-g_t_002dw_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-215"><code>-w</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_002dX_0040r_007b_002c-_0040code_007bmsggrep_007d-option_007d-643"><code>-X</code><span class="roman">, </span><code>msggrep</code><span class="roman"> option</span></a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-g_t_002dx_0040r_007b_002c-_0040code_007bxgettext_007d-option_007d-180"><code>-x</code><span class="roman">, </span><code>xgettext</code><span class="roman"> option</span></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
- </ul><div class="node">
-<a name="Variable-Index"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#PO-Mode-Index">PO Mode Index</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Option-Index">Option Index</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="unnumbered">Variable Index</h2>
-
-
-
-<ul class="index-vr" compact>
-<li><a href="#index-GETTEXT_005fLOG_005fUNTRANSLATED_0040r_007b_002c-environment-variable_007d-1112"><code>GETTEXT_LOG_UNTRANSLATED</code><span class="roman">, environment variable</span></a>: <a href="#Prioritizing-messages">Prioritizing messages</a></li>
-<li><a href="#index-LANG_0040r_007b_002c-environment-variable_007d-1109"><code>LANG</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LANG_0040r_007b_002c-environment-variable_007d-51"><code>LANG</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LANGUAGE_0040r_007b_002c-environment-variable_007d-1135"><code>LANGUAGE</code><span class="roman">, environment variable</span></a>: <a href="#po_002fRules_002d_002a">po/Rules-*</a></li>
-<li><a href="#index-LANGUAGE_0040r_007b_002c-environment-variable_007d-1101"><code>LANGUAGE</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LANGUAGE_0040r_007b_002c-environment-variable_007d-43"><code>LANGUAGE</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fALL_0040r_007b_002c-environment-variable_007d-1102"><code>LC_ALL</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fALL_0040r_007b_002c-environment-variable_007d-44"><code>LC_ALL</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fCOLLATE_0040r_007b_002c-environment-variable_007d-1106"><code>LC_COLLATE</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fCOLLATE_0040r_007b_002c-environment-variable_007d-48"><code>LC_COLLATE</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fCTYPE_0040r_007b_002c-environment-variable_007d-1103"><code>LC_CTYPE</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fCTYPE_0040r_007b_002c-environment-variable_007d-45"><code>LC_CTYPE</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fMESSAGES_0040r_007b_002c-environment-variable_007d-1108"><code>LC_MESSAGES</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fMESSAGES_0040r_007b_002c-environment-variable_007d-50"><code>LC_MESSAGES</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fMONETARY_0040r_007b_002c-environment-variable_007d-1107"><code>LC_MONETARY</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fMONETARY_0040r_007b_002c-environment-variable_007d-49"><code>LC_MONETARY</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fNUMERIC_0040r_007b_002c-environment-variable_007d-1104"><code>LC_NUMERIC</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fNUMERIC_0040r_007b_002c-environment-variable_007d-46"><code>LC_NUMERIC</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LC_005fTIME_0040r_007b_002c-environment-variable_007d-1105"><code>LC_TIME</code><span class="roman">, environment variable</span></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-LC_005fTIME_0040r_007b_002c-environment-variable_007d-47"><code>LC_TIME</code><span class="roman">, environment variable</span></a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-LINGUAS_0040r_007b_002c-environment-variable_007d-1169"><code>LINGUAS</code><span class="roman">, environment variable</span></a>: <a href="#Installers">Installers</a></li>
-<li><a href="#index-MSGEXEC_005fLOCATION_0040r_007b_002c-environment-variable_007d-917"><code>MSGEXEC_LOCATION</code><span class="roman">, environment variable</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-MSGEXEC_005fMSGCTXT_0040r_007b_002c-environment-variable_007d-915"><code>MSGEXEC_MSGCTXT</code><span class="roman">, environment variable</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-MSGEXEC_005fMSGID_0040r_007b_002c-environment-variable_007d-916"><code>MSGEXEC_MSGID</code><span class="roman">, environment variable</span></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-MSGFILTER_005fLOCATION_0040r_007b_002c-environment-variable_007d-684"><code>MSGFILTER_LOCATION</code><span class="roman">, environment variable</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-MSGFILTER_005fMSGCTXT_0040r_007b_002c-environment-variable_007d-682"><code>MSGFILTER_MSGCTXT</code><span class="roman">, environment variable</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-MSGFILTER_005fMSGID_0040r_007b_002c-environment-variable_007d-683"><code>MSGFILTER_MSGID</code><span class="roman">, environment variable</span></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-PO_005fSTYLE_0040r_007b_002c-environment-variable_007d-933"><code>PO_STYLE</code><span class="roman">, environment variable</span></a>: <a href="#The-_002d_002dstyle-option">The --style option</a></li>
-<li><a href="#index-TERM_0040r_007b_002c-environment-variable_007d-931"><code>TERM</code><span class="roman">, environment variable</span></a>: <a href="#The-TERM-variable">The TERM variable</a></li>
-<li><a href="#index-TEXTDOMAIN_0040r_007b_002c-environment-variable_007d-1178"><code>TEXTDOMAIN</code><span class="roman">, environment variable</span></a>: <a href="#sh">sh</a></li>
-<li><a href="#index-TEXTDOMAINDIR_0040r_007b_002c-environment-variable_007d-1179"><code>TEXTDOMAINDIR</code><span class="roman">, environment variable</span></a>: <a href="#sh">sh</a></li>
- </ul><div class="node">
-<a name="PO-Mode-Index"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Autoconf-Macro-Index">Autoconf Macro Index</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Variable-Index">Variable Index</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="unnumbered">PO Mode Index</h2>
-
-
-
-<ul class="index-em" compact>
-<li><a href="#index-g_t_0023_0040r_007b_002c-PO-Mode-command_007d-467"><code>#</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-g_t_002c_0040r_007b_002c-PO-Mode-command_007d-148"><code>,</code><span class="roman">, PO Mode command</span></a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-g_t_002e_0040r_007b_002c-PO-Mode-command_007d-364"><code>.</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-g_t_0040file_007b_002eemacs_007d-customizations-334"><samp><span class="file">.emacs</span></samp> customizations</a>: <a href="#Installation">Installation</a></li>
-<li><a href="#index-g_t0_0040r_007b_002c-PO-Mode-command_007d-341"><code>0</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-g_t_003c_0040r_007b_002c-PO-Mode-command_007d-367"><code>&lt;</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-g_t_003d_0040r_007b_002c-PO-Mode-command_007d-344"><code>=</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-g_t_003e_0040r_007b_002c-PO-Mode-command_007d-368"><code>&gt;</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-g_t_003f_0040r_007b_002c-PO-Mode-command_007d-342"><code>?</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-g_t_005f_0040r_007b_002c-PO-Mode-command_007d-338"><code>_</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-a_0040r_007b_002c-PO-Mode-command_007d-520"><code>a</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-A_0040r_007b_002c-PO-Mode-command_007d-514"><code>A</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-a_0040r_007b_002c-PO-Mode-command_007d-512"><code>a</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-auxiliary-PO-file-511">auxiliary PO file</a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-C_002dc-C_002da_0040r_007b_002c-PO-Mode-command_007d-513"><code>C-c C-a</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-C_002dc-C_002da_0040r_007b_002c-PO-Mode-command_007d-483"><code>C-c C-a</code><span class="roman">, PO Mode command</span></a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-C_002dc-C_002dc_0040r_007b_002c-PO-Mode-command_007d-481"><code>C-c C-c</code><span class="roman">, PO Mode command</span></a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-C_002dc-C_002dk_0040r_007b_002c-PO-Mode-command_007d-482"><code>C-c C-k</code><span class="roman">, PO Mode command</span></a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-C_002dj_0040r_007b_002c-PO-Mode-command_007d-446"><code>C-j</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-commands-337">commands</a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-comment-out-PO-file-entry-441">comment out PO file entry</a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-consulting-program-sources-493">consulting program sources</a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-consulting-translations-to-other-languages-509">consulting translations to other languages</a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-current-entry-of-a-PO-file-362">current entry of a PO file</a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-cut-and-paste-for-translated-strings-457">cut and paste for translated strings</a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-DEL_0040r_007b_002c-PO-Mode-command_007d-433"><code>DEL</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-DEL_0040r_007b_002c-PO-Mode-command_007d-416"><code>DEL</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-editing-comments-466">editing comments</a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-editing-multiple-entries-491">editing multiple entries</a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-editing-translations-443">editing translations</a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-g_t_0040code_007betags_007d_002c-using-for-marking-strings-146"><code>etags</code>, using for marking strings</a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-exiting-PO-subedit-484">exiting PO subedit</a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-F_0040r_007b_002c-PO-Mode-command_007d-411"><code>F</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-f_0040r_007b_002c-PO-Mode-command_007d-409"><code>f</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-F_0040r_007b_002c-PO-Mode-command_007d-407"><code>F</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-f_0040r_007b_002c-PO-Mode-command_007d-406"><code>f</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-find-source-fragment-for-a-PO-file-entry-496">find source fragment for a PO file entry</a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-h_0040r_007b_002c-PO-Mode-command_007d-343"><code>h</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-installing-PO-mode-335">installing PO mode</a>: <a href="#Installation">Installation</a></li>
-<li><a href="#index-K_0040r_007b_002c-PO-Mode-command_007d-468"><code>K</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-k_0040r_007b_002c-PO-Mode-command_007d-447"><code>k</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-k_0040r_007b_002c-PO-Mode-command_007d-422"><code>k</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-LFD_0040r_007b_002c-PO-Mode-command_007d-445"><code>LFD</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-looking-at-the-source-to-aid-translation-494">looking at the source to aid translation</a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-m_0040r_007b_002c-PO-Mode-command_007d-369"><code>m</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-M_002d_002c_0040r_007b_002c-PO-Mode-command_007d-149"><code>M-,</code><span class="roman">, PO Mode command</span></a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-M_002d_002e_0040r_007b_002c-PO-Mode-command_007d-150"><code>M-.</code><span class="roman">, PO Mode command</span></a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-M_002dA_0040r_007b_002c-PO-Mode-command_007d-515"><code>M-A</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-M_002dS_0040r_007b_002c-PO-Mode-command_007d-507"><code>M-S</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-M_002ds_0040r_007b_002c-PO-Mode-command_007d-503"><code>M-s</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-M_002dS_0040r_007b_002c-PO-Mode-command_007d-500"><code>M-S</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-M_002ds_0040r_007b_002c-PO-Mode-command_007d-498"><code>M-s</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-marking-strings-for-translation-145">marking strings for translation</a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-moving-by-fuzzy-entries-405">moving by fuzzy entries</a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-moving-by-obsolete-entries-430">moving by obsolete entries</a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-moving-by-translated-entries-394">moving by translated entries</a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-moving-by-untranslated-entries-419">moving by untranslated entries</a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-moving-through-a-PO-file-363">moving through a PO file</a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-n_0040r_007b_002c-PO-Mode-command_007d-365"><code>n</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-next_002derror_0040r_007b_002c-stepping-through-PO-file-validation-results_007d-361"><code>next-error</code><span class="roman">, stepping through PO file validation results</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-normalize_0040r_007b_002c-PO-Mode-command_007d-524"><code>normalize</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-O_0040r_007b_002c-PO-Mode-command_007d-436"><code>O</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-o_0040r_007b_002c-PO-Mode-command_007d-434"><code>o</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-O_0040r_007b_002c-PO-Mode-command_007d-432"><code>O</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-o_0040r_007b_002c-PO-Mode-command_007d-431"><code>o</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-obsolete-active-entry-440">obsolete active entry</a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-p_0040r_007b_002c-PO-Mode-command_007d-366"><code>p</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-pending-subedits-492">pending subedits</a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-po_002dauto_002dedit_002dwith_002dmsgid_0040r_007b_002c-PO-Mode-variable_007d-455"><code>po-auto-edit-with-msgid</code><span class="roman">, PO Mode variable</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-po_002dauto_002dfuzzy_002don_002dedit_0040r_007b_002c-PO-Mode-variable_007d-401"><code>po-auto-fuzzy-on-edit</code><span class="roman">, PO Mode variable</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-po_002dauto_002dselect_002don_002dunfuzzy_0040r_007b_002c-PO-Mode-variable_007d-415"><code>po-auto-select-on-unfuzzy</code><span class="roman">, PO Mode variable</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-po_002dconfirm_002dand_002dquit_0040r_007b_002c-PO-Mode-command_007d-351"><code>po-confirm-and-quit</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dconsider_002das_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-517"><code>po-consider-as-auxiliary</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-po_002dconsider_002dsource_002dpath_0040r_007b_002c-PO-Mode-command_007d-506"><code>po-consider-source-path</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-po_002dcurrent_002dentry_0040r_007b_002c-PO-Mode-command_007d-373"><code>po-current-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dcycle_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-521"><code>po-cycle-auxiliary</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-po_002dcycle_002dsource_002dreference_0040r_007b_002c-PO-Mode-command_007d-502"><code>po-cycle-source-reference</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-po_002dedit_002dcomment_0040r_007b_002c-PO-Mode-command_007d-472"><code>po-edit-comment</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-po_002dedit_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-451"><code>po-edit-msgstr</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-po_002dexchange_002dlocation_0040r_007b_002c-PO-Mode-command_007d-387"><code>po-exchange-location</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dfade_002dout_002dentry_0040r_007b_002c-PO-Mode-command_007d-439"><code>po-fade-out-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-po_002dfade_002dout_002dentry_0040r_007b_002c-PO-Mode-command_007d-417"><code>po-fade-out-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-po_002dfirst_002dentry_0040r_007b_002c-PO-Mode-command_007d-379"><code>po-first-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dhelp_0040r_007b_002c-PO-Mode-command_007d-356"><code>po-help</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dignore_002das_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-519"><code>po-ignore-as-auxiliary</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-po_002dignore_002dsource_002dpath_0040r_007b_002c-PO-Mode-command_007d-508"><code>po-ignore-source-path</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-po_002dkill_002dcomment_0040r_007b_002c-PO-Mode-command_007d-475"><code>po-kill-comment</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-po_002dkill_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-459"><code>po-kill-msgstr</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-po_002dkill_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-428"><code>po-kill-msgstr</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-po_002dkill_002dring_002dsave_002dcomment_0040r_007b_002c-PO-Mode-command_007d-477"><code>po-kill-ring-save-comment</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-po_002dkill_002dring_002dsave_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-461"><code>po-kill-ring-save-msgstr</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-po_002dlast_002dentry_0040r_007b_002c-PO-Mode-command_007d-381"><code>po-last-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dmark_002dtranslatable_0040r_007b_002c-PO-Mode-command_007d-152"><code>po-mark-translatable</code><span class="roman">, PO Mode command</span></a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-po_002dmsgid_002dto_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-454"><code>po-msgid-to-msgstr</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-po_002dnext_002dentry_0040r_007b_002c-PO-Mode-command_007d-375"><code>po-next-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dnext_002dfuzzy_002dentry_0040r_007b_002c-PO-Mode-command_007d-410"><code>po-next-fuzzy-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-po_002dnext_002dobsolete_002dentry_0040r_007b_002c-PO-Mode-command_007d-435"><code>po-next-obsolete-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-po_002dnext_002dtranslated_002dentry_0040r_007b_002c-PO-Mode-command_007d-398"><code>po-next-translated-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-po_002dnext_002duntranslated_002dentry_0040r_007b_002c-PO-Mode-command_007d-424"><code>po-next-untranslated-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-po_002dnormalize_0040r_007b_002c-PO-Mode-command_007d-390"><code>po-normalize</code><span class="roman">, PO Mode command</span></a>: <a href="#Normalizing">Normalizing</a></li>
-<li><a href="#index-po_002dother_002dwindow_0040r_007b_002c-PO-Mode-command_007d-353"><code>po-other-window</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dpop_002dlocation_0040r_007b_002c-PO-Mode-command_007d-385"><code>po-pop-location</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dprevious_002dentry_0040r_007b_002c-PO-Mode-command_007d-377"><code>po-previous-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dprevious_002dfuzzy_002dentry_0040r_007b_002c-PO-Mode-command_007d-412"><code>po-previous-fuzzy-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-po_002dprevious_002dobsolete_002dentry_0040r_007b_002c-PO-Mode-command_007d-437"><code>po-previous-obsolete-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-po_002dprevious_002dtranslated_002dentry_0040r_007b_002c-PO-Mode-command_007d-400"><code>po-previous-translated-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-po_002dprevious_002duntransted_002dentry_0040r_007b_002c-PO-Mode-command_007d-426"><code>po-previous-untransted-entry</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-po_002dpush_002dlocation_0040r_007b_002c-PO-Mode-command_007d-383"><code>po-push-location</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-po_002dquit_0040r_007b_002c-PO-Mode-command_007d-350"><code>po-quit</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dselect_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-523"><code>po-select-auxiliary</code><span class="roman">, PO Mode command</span></a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-po_002dselect_002dmark_002dand_002dmark_0040r_007b_002c-PO-Mode-command_007d-153"><code>po-select-mark-and-mark</code><span class="roman">, PO Mode command</span></a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-po_002dselect_002dsource_002dreference_0040r_007b_002c-PO-Mode-command_007d-504"><code>po-select-source-reference</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-po_002dstatistics_0040r_007b_002c-PO-Mode-command_007d-358"><code>po-statistics</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dsubedit_002dabort_0040r_007b_002c-PO-Mode-command_007d-488"><code>po-subedit-abort</code><span class="roman">, PO Mode command</span></a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-po_002dsubedit_002dcycle_002dauxiliary_0040r_007b_002c-PO-Mode-command_007d-490"><code>po-subedit-cycle-auxiliary</code><span class="roman">, PO Mode command</span></a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-po_002dsubedit_002dexit_0040r_007b_002c-PO-Mode-command_007d-486"><code>po-subedit-exit</code><span class="roman">, PO Mode command</span></a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-po_002dsubedit_002dmode_002dhook_0040r_007b_002c-PO-Mode-variable_007d-473"><code>po-subedit-mode-hook</code><span class="roman">, PO Mode variable</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-po_002dtags_002dsearch_0040r_007b_002c-PO-Mode-command_007d-151"><code>po-tags-search</code><span class="roman">, PO Mode command</span></a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-po_002dundo_0040r_007b_002c-PO-Mode-command_007d-347"><code>po-undo</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dunfuzzy_0040r_007b_002c-PO-Mode-command_007d-414"><code>po-unfuzzy</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-po_002dvalidate_0040r_007b_002c-PO-Mode-command_007d-360"><code>po-validate</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-po_002dyank_002dcomment_0040r_007b_002c-PO-Mode-command_007d-479"><code>po-yank-comment</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-po_002dyank_002dmsgstr_0040r_007b_002c-PO-Mode-command_007d-463"><code>po-yank-msgstr</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-q_0040r_007b_002c-PO-Mode-command_007d-349"><code>q</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-Q_0040r_007b_002c-PO-Mode-command_007d-348"><code>Q</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-q_0040r_007b_002c-PO-Mode-command_007d-340"><code>q</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-Q_0040r_007b_002c-PO-Mode-command_007d-339"><code>Q</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-r_0040r_007b_002c-PO-Mode-command_007d-370"><code>r</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-RET_0040r_007b_002c-PO-Mode-command_007d-444"><code>RET</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-S_0040r_007b_002c-PO-Mode-command_007d-505"><code>S</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-s_0040r_007b_002c-PO-Mode-command_007d-501"><code>s</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-S_0040r_007b_002c-PO-Mode-command_007d-499"><code>S</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-s_0040r_007b_002c-PO-Mode-command_007d-497"><code>s</code><span class="roman">, PO Mode command</span></a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-starting-a-string-translation-456">starting a string translation</a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-string-normalization-in-entries-389">string normalization in entries</a>: <a href="#Normalizing">Normalizing</a></li>
-<li><a href="#index-subedit-minor-mode-480">subedit minor mode</a>: <a href="#Subedit">Subedit</a></li>
-<li><a href="#index-T_0040r_007b_002c-PO-Mode-command_007d-399"><code>T</code><span class="roman">, PO Mode command</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-t_0040r_007b_002c-PO-Mode-command_007d-397"><code>t</code><span class="roman">, PO Mode command</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-T_0040r_007b_002c-PO-Mode-command_007d-396"><code>T</code><span class="roman">, PO Mode command</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-t_0040r_007b_002c-PO-Mode-command_007d-395"><code>t</code><span class="roman">, PO Mode command</span></a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-TAB_0040r_007b_002c-PO-Mode-command_007d-408"><code>TAB</code><span class="roman">, PO Mode command</span></a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-g_t_0040file_007bTAGS_007d_002c-and-marking-translatable-strings-147"><samp><span class="file">TAGS</span></samp>, and marking translatable strings</a>: <a href="#Marking">Marking</a></li>
-<li><a href="#index-U_0040r_007b_002c-PO-Mode-command_007d-425"><code>U</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-u_0040r_007b_002c-PO-Mode-command_007d-423"><code>u</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-U_0040r_007b_002c-PO-Mode-command_007d-421"><code>U</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-u_0040r_007b_002c-PO-Mode-command_007d-420"><code>u</code><span class="roman">, PO Mode command</span></a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-use-the-source_002c-Luke-495">use the source, Luke</a>: <a href="#C-Sources-Context">C Sources Context</a></li>
-<li><a href="#index-using-obsolete-translations-to-make-new-entries-464">using obsolete translations to make new entries</a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-using-translation-compendia-525">using translation compendia</a>: <a href="#Compendium">Compendium</a></li>
-<li><a href="#index-V_0040r_007b_002c-PO-Mode-command_007d-345"><code>V</code><span class="roman">, PO Mode command</span></a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-W_0040r_007b_002c-PO-Mode-command_007d-469"><code>W</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-w_0040r_007b_002c-PO-Mode-command_007d-448"><code>w</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-x_0040r_007b_002c-PO-Mode-command_007d-371"><code>x</code><span class="roman">, PO Mode command</span></a>: <a href="#Entry-Positioning">Entry Positioning</a></li>
-<li><a href="#index-Y_0040r_007b_002c-PO-Mode-command_007d-470"><code>Y</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-y_0040r_007b_002c-PO-Mode-command_007d-449"><code>y</code><span class="roman">, PO Mode command</span></a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
- </ul><div class="node">
-<a name="Autoconf-Macro-Index"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Index">Index</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#PO-Mode-Index">PO Mode Index</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="unnumbered">Autoconf Macro Index</h2>
-
-
-
-<ul class="index-am" compact>
-<li><a href="#index-AM_005fGNU_005fGETTEXT-1146"><code>AM_GNU_GETTEXT</code></a>: <a href="#AM_005fGNU_005fGETTEXT">AM_GNU_GETTEXT</a></li>
-<li><a href="#index-AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR-1150"><code>AM_GNU_GETTEXT_INTL_SUBDIR</code></a>: <a href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">AM_GNU_GETTEXT_INTL_SUBDIR</a></li>
-<li><a href="#index-AM_005fGNU_005fGETTEXT_005fNEED-1149"><code>AM_GNU_GETTEXT_NEED</code></a>: <a href="#AM_005fGNU_005fGETTEXT_005fNEED">AM_GNU_GETTEXT_NEED</a></li>
-<li><a href="#index-AM_005fGNU_005fGETTEXT_005fVERSION-1148"><code>AM_GNU_GETTEXT_VERSION</code></a>: <a href="#AM_005fGNU_005fGETTEXT_005fVERSION">AM_GNU_GETTEXT_VERSION</a></li>
-<li><a href="#index-AM_005fICONV-1153"><code>AM_ICONV</code></a>: <a href="#AM_005fICONV">AM_ICONV</a></li>
-<li><a href="#index-AM_005fPO_005fSUBDIRS-1151"><code>AM_PO_SUBDIRS</code></a>: <a href="#AM_005fPO_005fSUBDIRS">AM_PO_SUBDIRS</a></li>
-<li><a href="#index-AM_005fXGETTEXT_005fOPTION-1152"><code>AM_XGETTEXT_OPTION</code></a>: <a href="#AM_005fXGETTEXT_005fOPTION">AM_XGETTEXT_OPTION</a></li>
- </ul><div class="node">
-<a name="Index"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Autoconf-Macro-Index">Autoconf Macro Index</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="unnumbered">General Index</h2>
-
-
-
-<ul class="index-cp" compact>
-<li><a href="#index-g_t_0040code_007b_005f_007d_002c-a-macro-to-mark-strings-for-translation-144"><code>_</code>, a macro to mark strings for translation</a>: <a href="#Mark-Keywords">Mark Keywords</a></li>
-<li><a href="#index-g_t_0040code_007b_005fnl_005fmsg_005fcat_005fcntr_007d-1110"><code>_nl_msg_cat_cntr</code></a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-g_t_0040file_007bABOUT_002dNLS_007d-file-54"><samp><span class="file">ABOUT-NLS</span></samp> file</a>: <a href="#Installing-Localizations">Installing Localizations</a></li>
-<li><a href="#index-g_t_0040file_007bacconfig_002eh_007d-file-1139"><samp><span class="file">acconfig.h</span></samp> file</a>: <a href="#acconfig">acconfig</a></li>
-<li><a href="#index-accumulating-translations-530">accumulating translations</a>: <a href="#Creating-Compendia">Creating Compendia</a></li>
-<li><a href="#index-g_t_0040file_007baclocal_002em4_007d-file-1138"><samp><span class="file">aclocal.m4</span></samp> file</a>: <a href="#aclocal">aclocal</a></li>
-<li><a href="#index-adding-keywords_002c-_0040code_007bxgettext_007d-188">adding keywords, <code>xgettext</code></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-ambiguities-132">ambiguities</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-apply-a-filter-to-translations-681">apply a filter to translations</a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-apply-command-to-all-translations-in-a-catalog-913">apply command to all translations in a catalog</a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-Arabic-digits-1173">Arabic digits</a>: <a href="#c_002dformat">c-format</a></li>
-<li><a href="#index-attribute-manipulation-831">attribute manipulation</a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-attribute_002c-fuzzy-404">attribute, fuzzy</a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-attributes-of-a-PO-file-entry-403">attributes of a PO file entry</a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-attributes_002c-manipulating-541">attributes, manipulating</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-autoconf-macros-for-_0040code_007bgettext_007d-1145">autoconf macros for <code>gettext</code></a>: <a href="#autoconf-macros">autoconf macros</a></li>
-<li><a href="#index-g_t_0040code_007bautopoint_007d-program_002c-usage-1156"><code>autopoint</code> program, usage</a>: <a href="#autopoint-Invocation">autopoint Invocation</a></li>
-<li><a href="#index-auxiliary-PO-file-510">auxiliary PO file</a>: <a href="#Auxiliary">Auxiliary</a></li>
-<li><a href="#index-available-translations-53">available translations</a>: <a href="#Installing-Localizations">Installing Localizations</a></li>
-<li><a href="#index-awk-1234">awk</a>: <a href="#gawk">gawk</a></li>
-<li><a href="#index-awk_002dformat_0040r_007b-flag_007d-85"><code>awk-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-backup-old-file_002c-and-_0040code_007bmsgmerge_007d-program-288">backup old file, and <code>msgmerge</code> program</a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-bash-1219">bash</a>: <a href="#bash">bash</a></li>
-<li><a href="#index-bibliography-1260">bibliography</a>: <a href="#References">References</a></li>
-<li><a href="#index-big-picture-31">big picture</a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-bind_005ftextdomain_005fcodeset-1076"><code>bind_textdomain_codeset</code></a>: <a href="#Charset-conversion">Charset conversion</a></li>
-<li><a href="#index-Boost-format-strings-201">Boost format strings</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-boost_002dformat_0040r_007b-flag_007d-109"><code>boost-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-bug-report-address-4">bug report address</a>: <a href="#Introduction">Introduction</a></li>
-<li><a href="#index-C-and-C_002dlike-languages-1174">C and C-like languages</a>: <a href="#C">C</a></li>
-<li><a href="#index-C-trigraphs-195">C trigraphs</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-C_0023-1232">C#</a>: <a href="#C_0023">C#</a></li>
-<li><a href="#index-C_0023-mode_002c-and-_0040code_007bmsgfmt_007d-program-957">C# mode, and <code>msgfmt</code> program</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-C_0023-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1016">C# mode, and <code>msgunfmt</code> program</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-C_0023-resources-mode_002c-and-_0040code_007bmsgfmt_007d-program-959">C# resources mode, and <code>msgfmt</code> program</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-C_0023-resources-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1018">C# resources mode, and <code>msgunfmt</code> program</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-C_0023_002c-string-concatenation-140">C#, string concatenation</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-c_002dformat_0040r_007b-flag_007d-63"><code>c-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-c_002dformat_0040r_007b_002c-and-_0040code_007bxgettext_007d_007d-155"><code>c-format</code><span class="roman">, and </span><code>xgettext</code></a>: <a href="#c_002dformat-Flag">c-format Flag</a></li>
-<li><a href="#index-catalog-encoding-and-_0040code_007bmsgexec_007d-output-918">catalog encoding and <code>msgexec</code> output</a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bcatclose_007d_002c-a-_0040code_007bcatgets_007d-function-1066"><code>catclose</code>, a <code>catgets</code> function</a>: <a href="#Interface-to-catgets">Interface to catgets</a></li>
-<li><a href="#index-g_t_0040code_007bcatgets_007d_002c-a-_0040code_007bcatgets_007d-function-1065"><code>catgets</code>, a <code>catgets</code> function</a>: <a href="#Interface-to-catgets">Interface to catgets</a></li>
-<li><a href="#index-g_t_0040code_007bcatgets_007d_002c-X_002fOpen-specification-1062"><code>catgets</code>, X/Open specification</a>: <a href="#catgets">catgets</a></li>
-<li><a href="#index-g_t_0040code_007bcatopen_007d_002c-a-_0040code_007bcatgets_007d-function-1064"><code>catopen</code>, a <code>catgets</code> function</a>: <a href="#Interface-to-catgets">Interface to catgets</a></li>
-<li><a href="#index-character-encoding-17">character encoding</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-charset-conversion-at-runtime-1074">charset conversion at runtime</a>: <a href="#Charset-conversion">Charset conversion</a></li>
-<li><a href="#index-charset-of-PO-files-268">charset of PO files</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-check-format-strings-986">check format strings</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-checking-of-translations-539">checking of translations</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-clisp-1223">clisp</a>: <a href="#Common-Lisp">Common Lisp</a></li>
-<li><a href="#index-clisp-C-sources-1224">clisp C sources</a>: <a href="#clisp-C">clisp C</a></li>
-<li><a href="#index-codeset-15">codeset</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-comments-in-PO-files-117">comments in PO files</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-comments_002c-automatic-58">comments, automatic</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-comments_002c-extracted-59">comments, extracted</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-comments_002c-translator-57">comments, translator</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-Common-Lisp-1221">Common Lisp</a>: <a href="#Common-Lisp">Common Lisp</a></li>
-<li><a href="#index-compare-PO-files-812">compare PO files</a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-comparison-of-interfaces-1097">comparison of interfaces</a>: <a href="#Comparison">Comparison</a></li>
-<li><a href="#index-compatibility-with-X_002fOpen-_0040code_007bmsgfmt_007d-991">compatibility with X/Open <code>msgfmt</code></a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-compendium-526">compendium</a>: <a href="#Compendium">Compendium</a></li>
-<li><a href="#index-compendium_002c-creating-528">compendium, creating</a>: <a href="#Creating-Compendia">Creating Compendia</a></li>
-<li><a href="#index-concatenate-PO-files-544">concatenate PO files</a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-concatenating-PO-files-into-a-compendium-529">concatenating PO files into a compendium</a>: <a href="#Creating-Compendia">Creating Compendia</a></li>
-<li><a href="#index-concatenation-of-strings-137">concatenation of strings</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-g_t_0040file_007bconfig_002eh_002ein_007d-file-1140"><samp><span class="file">config.h.in</span></samp> file</a>: <a href="#config_002eh_002ein">config.h.in</a></li>
-<li><a href="#index-context-1077">context</a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-context_002c-argument-specification-in-_0040code_007bxgettext_007d-189">context, argument specification in <code>xgettext</code></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-context_002c-in-MO-files-1060">context, in MO files</a>: <a href="#MO-Files">MO Files</a></li>
-<li><a href="#index-context_002c-in-PO-files-112">context, in PO files</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-control-characters-142">control characters</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-convert-binary-message-catalog-into-PO-file-1011">convert binary message catalog into PO file</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-convert-translations-to-a-different-encoding-592">convert translations to a different encoding</a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-converting-a-package-to-use-_0040code_007bgettext_007d-1114">converting a package to use <code>gettext</code></a>: <a href="#Prerequisites">Prerequisites</a></li>
-<li><a href="#index-country-codes-1263">country codes</a>: <a href="#Country-Codes">Country Codes</a></li>
-<li><a href="#index-create-new-PO-file-241">create new PO file</a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-creating-a-new-PO-file-238">creating a new PO file</a>: <a href="#Creating">Creating</a></li>
-<li><a href="#index-creating-compendia-527">creating compendia</a>: <a href="#Creating-Compendia">Creating Compendia</a></li>
-<li><a href="#index-csharp_002dformat_0040r_007b-flag_007d-83"><code>csharp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-currency-symbols-19">currency symbols</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-date-format-21">date format</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-dcngettext-1090"><code>dcngettext</code></a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-dcpgettext-1083"><code>dcpgettext</code></a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-dcpgettext_005fexpr-1086"><code>dcpgettext_expr</code></a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-debugging-messages-marked-as-format-strings-203">debugging messages marked as format strings</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-dialect-537">dialect</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-disabling-NLS-1143">disabling NLS</a>: <a href="#lib_002fgettext_002eh">lib/gettext.h</a></li>
-<li><a href="#index-distribution-tarball-1164">distribution tarball</a>: <a href="#Release-Management">Release Management</a></li>
-<li><a href="#index-dngettext-1089"><code>dngettext</code></a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-dollar-substitution-1207">dollar substitution</a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-domain-ambiguities-1071">domain ambiguities</a>: <a href="#Ambiguities">Ambiguities</a></li>
-<li><a href="#index-dpgettext-1082"><code>dpgettext</code></a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-dpgettext_005fexpr-1085"><code>dpgettext_expr</code></a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-duplicate-elimination-540">duplicate elimination</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-duplicate-removal-730">duplicate removal</a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-editing-comments-in-PO-files-465">editing comments in PO files</a>: <a href="#Modifying-Comments">Modifying Comments</a></li>
-<li><a href="#index-Editing-PO-Files-328">Editing PO Files</a>: <a href="#Editing">Editing</a></li>
-<li><a href="#index-editing-translations-442">editing translations</a>: <a href="#Modifying-Translations">Modifying Translations</a></li>
-<li><a href="#index-elisp_002dformat_0040r_007b-flag_007d-73"><code>elisp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-Emacs-Lisp-1225">Emacs Lisp</a>: <a href="#Emacs-Lisp">Emacs Lisp</a></li>
-<li><a href="#index-Emacs-PO-Mode-331">Emacs PO Mode</a>: <a href="#PO-Mode">PO Mode</a></li>
-<li><a href="#index-encoding-16">encoding</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-encoding-conversion-536">encoding conversion</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-encoding-conversion-at-runtime-1075">encoding conversion at runtime</a>: <a href="#Charset-conversion">Charset conversion</a></li>
-<li><a href="#index-encoding-for-your-language-272">encoding for your language</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-encoding-list-270">encoding list</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-encoding-of-PO-files-267">encoding of PO files</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-environment-variables-1208">environment variables</a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_0040code_007benvsubst_007d-program_002c-usage-1205"><code>envsubst</code> program, usage</a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-g_t_0040code_007beval_005fgettext_007d-function_002c-usage-1215"><code>eval_gettext</code> function, usage</a>: <a href="#eval_005fgettext-Invocation">eval_gettext Invocation</a></li>
-<li><a href="#index-g_t_0040code_007beval_005fngettext_007d-function_002c-usage-1217"><code>eval_ngettext</code> function, usage</a>: <a href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a></li>
-<li><a href="#index-evolution-of-packages-39">evolution of packages</a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-extracting-parts-of-a-PO-file-into-a-compendium-531">extracting parts of a PO file into a compendium</a>: <a href="#Creating-Compendia">Creating Compendia</a></li>
-<li><a href="#index-FDL_002c-GNU-Free-Documentation-License-1270">FDL, GNU Free Documentation License</a>: <a href="#GNU-FDL">GNU FDL</a></li>
-<li><a href="#index-file-format_002c-_0040file_007b_002emo_007d-1057">file format, <samp><span class="file">.mo</span></samp></a>: <a href="#MO-Files">MO Files</a></li>
-<li><a href="#index-file-format_002c-_0040file_007b_002epo_007d-56">file format, <samp><span class="file">.po</span></samp></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-files_002c-_0040file_007b_002epo_007d-and-_0040file_007b_002emo_007d-29">files, <samp><span class="file">.po</span></samp> and <samp><span class="file">.mo</span></samp></a>: <a href="#Files">Files</a></li>
-<li><a href="#index-files_002c-_0040file_007b_002epot_007d-38">files, <samp><span class="file">.pot</span></samp></a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-filter-messages-according-to-attributes-830">filter messages according to attributes</a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-find-common-messages-770">find common messages</a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-force-use-of-fuzzy-entries-998">force use of fuzzy entries</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-format-strings-154">format strings</a>: <a href="#c_002dformat-Flag">c-format Flag</a></li>
-<li><a href="#index-Free-Pascal-1237">Free Pascal</a>: <a href="#Pascal">Pascal</a></li>
-<li><a href="#index-function-attribute_002c-_005f_005fformat_005f_005f-191">function attribute, __format__</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-function-attribute_002c-_005f_005fformat_005farg_005f_005f-192">function attribute, __format_arg__</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-fuzzy-entries-402">fuzzy entries</a>: <a href="#Fuzzy-Entries">Fuzzy Entries</a></li>
-<li><a href="#index-fuzzy_0040r_007b-flag_007d-62"><code>fuzzy</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-gawk-1235">gawk</a>: <a href="#gawk">gawk</a></li>
-<li><a href="#index-gcc_002dinternal_002dformat_0040r_007b-flag_007d-99"><code>gcc-internal-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-GCC_002dsource-1256">GCC-source</a>: <a href="#GCC_002dsource">GCC-source</a></li>
-<li><a href="#index-generate-binary-message-catalog-from-PO-file-949">generate binary message catalog from PO file</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-generate-translation-catalog-in-English-880">generate translation catalog in English</a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bgettext_007d-files-1129"><code>gettext</code> files</a>: <a href="#Adjusting-Files">Adjusting Files</a></li>
-<li><a href="#index-g_t_0040code_007bgettext_007d-installation-333"><code>gettext</code> installation</a>: <a href="#Installation">Installation</a></li>
-<li><a href="#index-g_t_0040code_007bgettext_007d-interface-1069"><code>gettext</code> interface</a>: <a href="#Interface-to-gettext">Interface to gettext</a></li>
-<li><a href="#index-g_t_0040code_007bgettext_007d-program_002c-usage-1182"><code>gettext</code> program, usage</a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bgettext_007d-vs-_0040code_007bcatgets_007d-1096"><code>gettext</code> vs <code>catgets</code></a>: <a href="#Comparison">Comparison</a></li>
-<li><a href="#index-g_t_0040code_007bgettext_007d_002c-a-programmer_0027s-view-1068"><code>gettext</code>, a programmer's view</a>: <a href="#gettext">gettext</a></li>
-<li><a href="#index-g_t_0040file_007bgettext_002eh_007d-file-1141"><samp><span class="file">gettext.h</span></samp> file</a>: <a href="#lib_002fgettext_002eh">lib/gettext.h</a></li>
-<li><a href="#index-g_t_0040code_007bgettextize_007d-program_002c-usage-1118"><code>gettextize</code> program, usage</a>: <a href="#gettextize-Invocation">gettextize Invocation</a></li>
-<li><a href="#index-gfc_002dinternal_002dformat_0040r_007b-flag_007d-101"><code>gfc-internal-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-GNOME-PO-file-editor-330">GNOME PO file editor</a>: <a href="#Gtranslator">Gtranslator</a></li>
-<li><a href="#index-GPL_002c-GNU-General-Public-License-1266">GPL, GNU General Public License</a>: <a href="#GNU-GPL">GNU GPL</a></li>
-<li><a href="#index-GUI-programs-1078">GUI programs</a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-guile-1228">guile</a>: <a href="#Scheme">Scheme</a></li>
-<li><a href="#index-hash-table_002c-inside-MO-files-1059">hash table, inside MO files</a>: <a href="#MO-Files">MO Files</a></li>
-<li><a href="#index-he_002c-she_002c-and-they-2">he, she, and they</a>: <a href="#Introduction">Introduction</a></li>
-<li><a href="#index-header-entry-of-a-PO-file-265">header entry of a PO file</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-help-option-135">help option</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-history-of-GNU-_0040code_007bgettext_007d-1258">history of GNU <code>gettext</code></a>: <a href="#History">History</a></li>
-<li><a href="#index-i18n-6">i18n</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-importing-PO-files-391">importing PO files</a>: <a href="#Normalizing">Normalizing</a></li>
-<li><a href="#index-include-file-_0040file_007blibintl_002eh_007d-1144">include file <samp><span class="file">libintl.h</span></samp></a>: <a href="#lib_002fgettext_002eh">lib/gettext.h</a></li>
-<li><a href="#index-include-file-_0040file_007blibintl_002eh_007d-1098">include file <samp><span class="file">libintl.h</span></samp></a>: <a href="#Comparison">Comparison</a></li>
-<li><a href="#index-include-file-_0040file_007blibintl_002eh_007d-119">include file <samp><span class="file">libintl.h</span></samp></a>: <a href="#Importing">Importing</a></li>
-<li><a href="#index-include-file-_0040file_007blibintl_002eh_007d-34">include file <samp><span class="file">libintl.h</span></samp></a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-initialization-120">initialization</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-initialize-new-PO-file-242">initialize new PO file</a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-initialize-translations-from-a-compendium-532">initialize translations from a compendium</a>: <a href="#Using-Compendia">Using Compendia</a></li>
-<li><a href="#index-installing-_0040code_007bgettext_007d-332">installing <code>gettext</code></a>: <a href="#Installation">Installation</a></li>
-<li><a href="#index-interface-to-_0040code_007bcatgets_007d-1063">interface to <code>catgets</code></a>: <a href="#Interface-to-catgets">Interface to catgets</a></li>
-<li><a href="#index-internationalization-8">internationalization</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-g_t_0040code_007binttypes_002eh_007d-138"><code>inttypes.h</code></a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-ISO-3166-1264">ISO 3166</a>: <a href="#Country-Codes">Country Codes</a></li>
-<li><a href="#index-ISO-639-1262">ISO 639</a>: <a href="#Language-Codes">Language Codes</a></li>
-<li><a href="#index-Java-1230">Java</a>: <a href="#Java">Java</a></li>
-<li><a href="#index-Java-mode_002c-and-_0040code_007bmsgfmt_007d-program-954">Java mode, and <code>msgfmt</code> program</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-Java-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1014">Java mode, and <code>msgunfmt</code> program</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-Java_002c-string-concatenation-139">Java, string concatenation</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-java_002dformat_0040r_007b-flag_007d-81"><code>java-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-KDE-format-strings-199">KDE format strings</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-KDE-PO-file-editor-329">KDE PO file editor</a>: <a href="#KBabel">KBabel</a></li>
-<li><a href="#index-kde_002dformat_0040r_007b-flag_007d-107"><code>kde-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-keyboard-accelerator-checking-993">keyboard accelerator checking</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-l10n-7">l10n</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-language-codes-1261">language codes</a>: <a href="#Language-Codes">Language Codes</a></li>
-<li><a href="#index-language-selection-42">language selection</a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-language-selection-at-runtime-1100">language selection at runtime</a>: <a href="#gettext-grok">gettext grok</a></li>
-<li><a href="#index-large-package-1072">large package</a>: <a href="#Ambiguities">Ambiguities</a></li>
-<li><a href="#index-LGPL_002c-GNU-Lesser-General-Public-License-1268">LGPL, GNU Lesser General Public License</a>: <a href="#GNU-LGPL">GNU LGPL</a></li>
-<li><a href="#index-g_t_0040code_007blibiconv_007d-library-1154"><code>libiconv</code> library</a>: <a href="#AM_005fICONV">AM_ICONV</a></li>
-<li><a href="#index-g_t_0040code_007blibintl_007d-for-C_0023-1233"><code>libintl</code> for C#</a>: <a href="#C_0023">C#</a></li>
-<li><a href="#index-g_t_0040code_007blibintl_007d-for-Java-1231"><code>libintl</code> for Java</a>: <a href="#Java">Java</a></li>
-<li><a href="#index-g_t_0040code_007blibintl_007d-library-1147"><code>libintl</code> library</a>: <a href="#AM_005fGNU_005fGETTEXT">AM_GNU_GETTEXT</a></li>
-<li><a href="#index-g_t_0040code_007blibrep_007d-Lisp-1226"><code>librep</code> Lisp</a>: <a href="#librep">librep</a></li>
-<li><a href="#index-librep_002dformat_0040r_007b-flag_007d-75"><code>librep-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-License_002c-GNU-FDL-1271">License, GNU FDL</a>: <a href="#GNU-FDL">GNU FDL</a></li>
-<li><a href="#index-License_002c-GNU-GPL-1267">License, GNU GPL</a>: <a href="#GNU-GPL">GNU GPL</a></li>
-<li><a href="#index-License_002c-GNU-LGPL-1269">License, GNU LGPL</a>: <a href="#GNU-LGPL">GNU LGPL</a></li>
-<li><a href="#index-Licenses-1265">Licenses</a>: <a href="#Licenses">Licenses</a></li>
-<li><a href="#index-g_t_0040file_007bLINGUAS_007d-file-1131"><samp><span class="file">LINGUAS</span></samp> file</a>: <a href="#po_002fLINGUAS">po/LINGUAS</a></li>
-<li><a href="#index-link-with-_0040file_007blibintl_007d-35">link with <samp><span class="file">libintl</span></samp></a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-Linux-271">Linux</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-Linux-36">Linux</a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-Linux-28">Linux</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-Lisp-1222">Lisp</a>: <a href="#Common-Lisp">Common Lisp</a></li>
-<li><a href="#index-lisp_002dformat_0040r_007b-flag_007d-71"><code>lisp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-list-of-translation-teams_002c-where-to-find-266">list of translation teams, where to find</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-locale-categories-14">locale categories</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-locale-category_002c-LC_005fALL-121">locale category, LC_ALL</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fCOLLATE-124">locale category, LC_COLLATE</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fCTYPE-122">locale category, LC_CTYPE</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fCTYPE-18">locale category, LC_CTYPE</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-locale-category_002c-LC_005fMESSAGES-128">locale category, LC_MESSAGES</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fMESSAGES-26">locale category, LC_MESSAGES</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-locale-category_002c-LC_005fMONETARY-125">locale category, LC_MONETARY</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fMONETARY-20">locale category, LC_MONETARY</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-locale-category_002c-LC_005fNUMERIC-126">locale category, LC_NUMERIC</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fNUMERIC-24">locale category, LC_NUMERIC</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-locale-category_002c-LC_005fRESPONSES-129">locale category, LC_RESPONSES</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fTIME-127">locale category, LC_TIME</a>: <a href="#Triggering">Triggering</a></li>
-<li><a href="#index-locale-category_002c-LC_005fTIME-22">locale category, LC_TIME</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-g_t_0040code_007blocale_007d-program-269"><code>locale</code> program</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-localization-9">localization</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-lookup-message-translation-1216">lookup message translation</a>: <a href="#eval_005fgettext-Invocation">eval_gettext Invocation</a></li>
-<li><a href="#index-lookup-message-translation-1183">lookup message translation</a>: <a href="#gettext-Invocation">gettext Invocation</a></li>
-<li><a href="#index-lookup-plural-message-translation-1218">lookup plural message translation</a>: <a href="#eval_005fngettext-Invocation">eval_ngettext Invocation</a></li>
-<li><a href="#index-lookup-plural-message-translation-1195">lookup plural message translation</a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-magic-signature-of-MO-files-1058">magic signature of MO files</a>: <a href="#MO-Files">MO Files</a></li>
-<li><a href="#index-g_t_0040file_007bMakefile_002ein_002ein_007d-extensions-1133"><samp><span class="file">Makefile.in.in</span></samp> extensions</a>: <a href="#po_002fRules_002d_002a">po/Rules-*</a></li>
-<li><a href="#index-g_t_0040file_007bMakevars_007d-file-1132"><samp><span class="file">Makevars</span></samp> file</a>: <a href="#po_002fMakevars">po/Makevars</a></li>
-<li><a href="#index-manipulating-PO-files-534">manipulating PO files</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-marking-Perl-sources-1245">marking Perl sources</a>: <a href="#Perl">Perl</a></li>
-<li><a href="#index-marking-string-initializers-157">marking string initializers</a>: <a href="#Special-cases">Special cases</a></li>
-<li><a href="#index-marking-strings-that-require-translation-143">marking strings that require translation</a>: <a href="#Mark-Keywords">Mark Keywords</a></li>
-<li><a href="#index-marking-strings_002c-preparations-130">marking strings, preparations</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-marking-translatable-strings-33">marking translatable strings</a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-markup-141">markup</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-menu-entries-1080">menu entries</a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-menu_002c-keyboard-accelerator-support-994">menu, keyboard accelerator support</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-merge-PO-files-545">merge PO files</a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-merging-two-PO-files-535">merging two PO files</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-message-catalog-files-location-1073">message catalog files location</a>: <a href="#Locating-Catalogs">Locating Catalogs</a></li>
-<li><a href="#index-messages-25">messages</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-migration-from-earlier-versions-of-_0040code_007bgettext_007d-1115">migration from earlier versions of <code>gettext</code></a>: <a href="#Prerequisites">Prerequisites</a></li>
-<li><a href="#index-g_t_0040file_007bmkinstalldirs_007d-file-1137"><samp><span class="file">mkinstalldirs</span></samp> file</a>: <a href="#mkinstalldirs">mkinstalldirs</a></li>
-<li><a href="#index-mnemonics-of-menu-entries-995">mnemonics of menu entries</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-MO-file_0027s-format-1056">MO file's format</a>: <a href="#MO-Files">MO Files</a></li>
-<li><a href="#index-modify-message-attributes-842">modify message attributes</a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgattrib_007d-program_002c-usage-829"><code>msgattrib</code> program, usage</a>: <a href="#msgattrib-Invocation">msgattrib Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgcat_007d-program_002c-usage-543"><code>msgcat</code> program, usage</a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgcmp_007d-program_002c-usage-811"><code>msgcmp</code> program, usage</a>: <a href="#msgcmp-Invocation">msgcmp Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgcomm_007d-program_002c-usage-769"><code>msgcomm</code> program, usage</a>: <a href="#msgcomm-Invocation">msgcomm Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgconv_007d-program_002c-usage-591"><code>msgconv</code> program, usage</a>: <a href="#msgconv-Invocation">msgconv Invocation</a></li>
-<li><a href="#index-msgctxt-111"><code>msgctxt</code></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-g_t_0040code_007bmsgen_007d-program_002c-usage-879"><code>msgen</code> program, usage</a>: <a href="#msgen-Invocation">msgen Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgexec_007d-program_002c-usage-912"><code>msgexec</code> program, usage</a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgfilter_007d-filter-and-catalog-encoding-691"><code>msgfilter</code> filter and catalog encoding</a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgfilter_007d-program_002c-usage-680"><code>msgfilter</code> program, usage</a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgfmt_007d-program_002c-usage-948"><code>msgfmt</code> program, usage</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsggrep_007d-program_002c-usage-625"><code>msggrep</code> program, usage</a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-msgid-60"><code>msgid</code></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-msgid_005fplural-113"><code>msgid_plural</code></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-g_t_0040code_007bmsginit_007d-program_002c-usage-240"><code>msginit</code> program, usage</a>: <a href="#msginit-Invocation">msginit Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsgmerge_007d-program_002c-usage-277"><code>msgmerge</code> program, usage</a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-msgstr-61"><code>msgstr</code></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-g_t_0040code_007bmsgunfmt_007d-program_002c-usage-1010"><code>msgunfmt</code> program, usage</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bmsguniq_007d-program_002c-usage-728"><code>msguniq</code> program, usage</a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-multi_002dline-strings-392">multi-line strings</a>: <a href="#Normalizing">Normalizing</a></li>
-<li><a href="#index-g_t_0040code_007bN_005f_007d_002c-a-convenience-macro-1099"><code>N_</code>, a convenience macro</a>: <a href="#Comparison">Comparison</a></li>
-<li><a href="#index-Native-Language-Support-11">Native Language Support</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-Natural-Language-Support-12">Natural Language Support</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-newlines-in-PO-files-116">newlines in PO files</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-ngettext-1088"><code>ngettext</code></a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-g_t_0040code_007bngettext_007d-program_002c-usage-1194"><code>ngettext</code> program, usage</a>: <a href="#ngettext-Invocation">ngettext Invocation</a></li>
-<li><a href="#index-NLS-10">NLS</a>: <a href="#Concepts">Concepts</a></li>
-<li><a href="#index-no_002dawk_002dformat_0040r_007b-flag_007d-86"><code>no-awk-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dboost_002dformat_0040r_007b-flag_007d-110"><code>no-boost-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dc_002dformat_0040r_007b-flag_007d-64"><code>no-c-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dc_002dformat_0040r_007b_002c-and-_0040code_007bxgettext_007d_007d-156"><code>no-c-format</code><span class="roman">, and </span><code>xgettext</code></a>: <a href="#c_002dformat-Flag">c-format Flag</a></li>
-<li><a href="#index-no_002dcsharp_002dformat_0040r_007b-flag_007d-84"><code>no-csharp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002delisp_002dformat_0040r_007b-flag_007d-74"><code>no-elisp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dgcc_002dinternal_002dformat_0040r_007b-flag_007d-100"><code>no-gcc-internal-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dgfc_002dinternal_002dformat_0040r_007b-flag_007d-102"><code>no-gfc-internal-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002djava_002dformat_0040r_007b-flag_007d-82"><code>no-java-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dkde_002dformat_0040r_007b-flag_007d-108"><code>no-kde-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dlibrep_002dformat_0040r_007b-flag_007d-76"><code>no-librep-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dlisp_002dformat_0040r_007b-flag_007d-72"><code>no-lisp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dobjc_002dformat_0040r_007b-flag_007d-66"><code>no-objc-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dobject_002dpascal_002dformat_0040r_007b-flag_007d-88"><code>no-object-pascal-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dperl_002dbrace_002dformat_0040r_007b-flag_007d-96"><code>no-perl-brace-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dperl_002dformat_0040r_007b-flag_007d-94"><code>no-perl-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dphp_002dformat_0040r_007b-flag_007d-98"><code>no-php-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dpython_002dformat_0040r_007b-flag_007d-70"><code>no-python-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dqt_002dformat_0040r_007b-flag_007d-104"><code>no-qt-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dqt_002dplural_002dformat_0040r_007b-flag_007d-106"><code>no-qt-plural-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dscheme_002dformat_0040r_007b-flag_007d-78"><code>no-scheme-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dsh_002dformat_0040r_007b-flag_007d-68"><code>no-sh-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dsmalltalk_002dformat_0040r_007b-flag_007d-80"><code>no-smalltalk-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dtcl_002dformat_0040r_007b-flag_007d-92"><code>no-tcl-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-no_002dycp_002dformat_0040r_007b-flag_007d-90"><code>no-ycp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-nplurals_0040r_007b_002c-in-a-PO-file-header_007d-1092"><code>nplurals</code><span class="roman">, in a PO file header</span></a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-number-format-23">number format</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-objc_002dformat_0040r_007b-flag_007d-65"><code>objc-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-Object-Pascal-1238">Object Pascal</a>: <a href="#Pascal">Pascal</a></li>
-<li><a href="#index-object_002dpascal_002dformat_0040r_007b-flag_007d-87"><code>object-pascal-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-obsolete-entries-429">obsolete entries</a>: <a href="#Obsolete-Entries">Obsolete Entries</a></li>
-<li><a href="#index-optimization-of-_0040code_007bgettext_007d-functions-1095">optimization of <code>gettext</code> functions</a>: <a href="#Optimized-gettext">Optimized gettext</a></li>
-<li><a href="#index-orthography-538">orthography</a>: <a href="#Manipulating">Manipulating</a></li>
-<li><a href="#index-outdigits-1172">outdigits</a>: <a href="#c_002dformat">c-format</a></li>
-<li><a href="#index-output-to-stdout_002c-_0040code_007bxgettext_007d-171">output to stdout, <code>xgettext</code></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-overview-of-_0040code_007bgettext_007d-30">overview of <code>gettext</code></a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-package-and-version-declaration-in-_0040file_007bconfigure_002eac_007d-1136">package and version declaration in <samp><span class="file">configure.ac</span></samp></a>: <a href="#configure_002eac">configure.ac</a></li>
-<li><a href="#index-package-build-and-installation-options-1167">package build and installation options</a>: <a href="#Installers">Installers</a></li>
-<li><a href="#index-package-distributor_0027s-view-of-_0040code_007bgettext_007d-1166">package distributor's view of <code>gettext</code></a>: <a href="#Installers">Installers</a></li>
-<li><a href="#index-package-installer_0027s-view-of-_0040code_007bgettext_007d-1165">package installer's view of <code>gettext</code></a>: <a href="#Installers">Installers</a></li>
-<li><a href="#index-package-maintainer_0027s-view-of-_0040code_007bgettext_007d-1113">package maintainer's view of <code>gettext</code></a>: <a href="#Maintainers">Maintainers</a></li>
-<li><a href="#index-paragraphs-134">paragraphs</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-Pascal-1236">Pascal</a>: <a href="#Pascal">Pascal</a></li>
-<li><a href="#index-Perl-1244">Perl</a>: <a href="#Perl">Perl</a></li>
-<li><a href="#index-Perl-default-keywords-1246">Perl default keywords</a>: <a href="#Default-Keywords">Default Keywords</a></li>
-<li><a href="#index-Perl-invalid-string-interpolation-1249">Perl invalid string interpolation</a>: <a href="#Interpolation-I">Interpolation I</a></li>
-<li><a href="#index-Perl-long-lines-1252">Perl long lines</a>: <a href="#Long-Lines">Long Lines</a></li>
-<li><a href="#index-Perl-parentheses-1251">Perl parentheses</a>: <a href="#Parentheses">Parentheses</a></li>
-<li><a href="#index-Perl-pitfalls-1253">Perl pitfalls</a>: <a href="#Perl-Pitfalls">Perl Pitfalls</a></li>
-<li><a href="#index-Perl-quote_002dlike-expressions-1248">Perl quote-like expressions</a>: <a href="#Quote_002dlike-Expressions">Quote-like Expressions</a></li>
-<li><a href="#index-Perl-special-keywords-for-hash_002dlookups-1247">Perl special keywords for hash-lookups</a>: <a href="#Special-Keywords">Special Keywords</a></li>
-<li><a href="#index-Perl-valid-string-interpolation-1250">Perl valid string interpolation</a>: <a href="#Interpolation-II">Interpolation II</a></li>
-<li><a href="#index-perl_002dbrace_002dformat_0040r_007b-flag_007d-95"><code>perl-brace-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-perl_002dformat_0040r_007b-flag_007d-93"><code>perl-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-pgettext-1081"><code>pgettext</code></a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-pgettext_005fexpr-1084"><code>pgettext_expr</code></a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-PHP-1254">PHP</a>: <a href="#PHP">PHP</a></li>
-<li><a href="#index-php_002dformat_0040r_007b-flag_007d-97"><code>php-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-Pike-1255">Pike</a>: <a href="#Pike">Pike</a></li>
-<li><a href="#index-plural-form-formulas-1094">plural form formulas</a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-plural-forms-1087">plural forms</a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-plural-forms_002c-in-MO-files-1061">plural forms, in MO files</a>: <a href="#MO-Files">MO Files</a></li>
-<li><a href="#index-plural-forms_002c-in-PO-files-114">plural forms, in PO files</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-plural-forms_002c-translating-1111">plural forms, translating</a>: <a href="#Translating-plural-forms">Translating plural forms</a></li>
-<li><a href="#index-plural_0040r_007b_002c-in-a-PO-file-header_007d-1093"><code>plural</code><span class="roman">, in a PO file header</span></a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-PO-files_0027-format-55">PO files' format</a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-PO-mode-_0028Emacs_0029-commands-336">PO mode (Emacs) commands</a>: <a href="#Main-PO-Commands">Main PO Commands</a></li>
-<li><a href="#index-PO-template-file-158">PO template file</a>: <a href="#Template">Template</a></li>
-<li><a href="#index-po_005ffile_005fdomains-939"><code>po_file_domains</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005ffile_005ffree-938"><code>po_file_free</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005ffile_005fread-937"><code>po_file_read</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fmessage_005fiterator-940"><code>po_message_iterator</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fmessage_005fiterator_005ffree-941"><code>po_message_iterator_free</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fmessage_005fmsgid-943"><code>po_message_msgid</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fmessage_005fmsgid_005fplural-944"><code>po_message_msgid_plural</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fmessage_005fmsgstr-945"><code>po_message_msgstr</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fmessage_005fmsgstr_005fplural-946"><code>po_message_msgstr_plural</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-po_005fnext_005fmessage-942"><code>po_next_message</code></a>: <a href="#libgettextpo">libgettextpo</a></li>
-<li><a href="#index-portability-problems-with-_0040code_007bsed_007d-692">portability problems with <code>sed</code></a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-g_t_0040file_007bPOTFILES_002ein_007d-file-1130"><samp><span class="file">POTFILES.in</span></samp> file</a>: <a href="#po_002fPOTFILES_002ein">po/POTFILES.in</a></li>
-<li><a href="#index-preparing-programs-for-translation-118">preparing programs for translation</a>: <a href="#Sources">Sources</a></li>
-<li><a href="#index-preparing-shell-scripts-for-translation-1180">preparing shell scripts for translation</a>: <a href="#Preparing-Shell-Scripts">Preparing Shell Scripts</a></li>
-<li><a href="#index-problems-with-_0040code_007bcatgets_007d-interface-1067">problems with <code>catgets</code> interface</a>: <a href="#Problems-with-catgets">Problems with catgets</a></li>
-<li><a href="#index-programming-languages-1170">programming languages</a>: <a href="#Language-Implementors">Language Implementors</a></li>
-<li><a href="#index-Python-1220">Python</a>: <a href="#Python">Python</a></li>
-<li><a href="#index-python_002dformat_0040r_007b-flag_007d-69"><code>python-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-Qt-format-strings-197">Qt format strings</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-Qt-mode_002c-and-_0040code_007bmsgfmt_007d-program-963">Qt mode, and <code>msgfmt</code> program</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-qt_002dformat_0040r_007b-flag_007d-103"><code>qt-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-qt_002dplural_002dformat_0040r_007b-flag_007d-105"><code>qt-plural-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-quotation-marks-1134">quotation marks</a>: <a href="#po_002fRules_002d_002a">po/Rules-*</a></li>
-<li><a href="#index-quotation-marks-274">quotation marks</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-quote-characters_002c-use-in-PO-files-273">quote characters, use in PO files</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-range_003a_0040r_007b-flag_007d-115"><code>range:</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-g_t_0040code_007brecode_002dsr_002dlatin_007d-program-701"><code>recode-sr-latin</code> program</a>: <a href="#msgfilter-Invocation">msgfilter Invocation</a></li>
-<li><a href="#index-related-reading-1259">related reading</a>: <a href="#References">References</a></li>
-<li><a href="#index-release-1163">release</a>: <a href="#Release-Management">Release Management</a></li>
-<li><a href="#index-RST-1257">RST</a>: <a href="#RST">RST</a></li>
-<li><a href="#index-Scheme-1227">Scheme</a>: <a href="#Scheme">Scheme</a></li>
-<li><a href="#index-scheme_002dformat_0040r_007b-flag_007d-77"><code>scheme-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-scripting-languages-1171">scripting languages</a>: <a href="#Language-Implementors">Language Implementors</a></li>
-<li><a href="#index-search-messages-in-a-catalog-626">search messages in a catalog</a>: <a href="#msggrep-Invocation">msggrep Invocation</a></li>
-<li><a href="#index-selecting-message-language-41">selecting message language</a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-sentences-133">sentences</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-setting-up-_0040code_007bgettext_007d-at-build-time-1168">setting up <code>gettext</code> at build time</a>: <a href="#Installers">Installers</a></li>
-<li><a href="#index-setting-up-_0040code_007bgettext_007d-at-run-time-40">setting up <code>gettext</code> at run time</a>: <a href="#Locale-Environment-Variables">Locale Environment Variables</a></li>
-<li><a href="#index-several-domains-1070">several domains</a>: <a href="#Ambiguities">Ambiguities</a></li>
-<li><a href="#index-sex-1">sex</a>: <a href="#Introduction">Introduction</a></li>
-<li><a href="#index-sh_002dformat_0040r_007b-flag_007d-67"><code>sh-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-she_002c-he_002c-and-they-3">she, he, and they</a>: <a href="#Introduction">Introduction</a></li>
-<li><a href="#index-shell-format-string-1206">shell format string</a>: <a href="#envsubst-Invocation">envsubst Invocation</a></li>
-<li><a href="#index-shell-scripts-1175">shell scripts</a>: <a href="#sh">sh</a></li>
-<li><a href="#index-Smalltalk-1229">Smalltalk</a>: <a href="#Smalltalk">Smalltalk</a></li>
-<li><a href="#index-smalltalk_002dformat_0040r_007b-flag_007d-79"><code>smalltalk-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-sorting-_0040code_007bmsgcat_007d-output-583">sorting <code>msgcat</code> output</a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-sorting-_0040code_007bmsgmerge_007d-output-316">sorting <code>msgmerge</code> output</a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-sorting-_0040code_007bmsgunfmt_007d-output-1049">sorting <code>msgunfmt</code> output</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-sorting-output-of-_0040code_007bxgettext_007d-220">sorting output of <code>xgettext</code></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-specifying-plural-form-in-a-PO-file-1091">specifying plural form in a PO file</a>: <a href="#Plural-forms">Plural forms</a></li>
-<li><a href="#index-standard-output_002c-and-_0040code_007bmsgcat_007d-552">standard output, and <code>msgcat</code></a>: <a href="#msgcat-Invocation">msgcat Invocation</a></li>
-<li><a href="#index-standard-output_002c-and-_0040code_007bmsgmerge_007d-program-286">standard output, and <code>msgmerge</code> program</a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-string-concatenation-136">string concatenation</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-string-normalization-in-entries-388">string normalization in entries</a>: <a href="#Normalizing">Normalizing</a></li>
-<li><a href="#index-style-131">style</a>: <a href="#Preparing-Strings">Preparing Strings</a></li>
-<li><a href="#index-supported-languages_002c-_0040code_007bxgettext_007d-174">supported languages, <code>xgettext</code></a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-Tcl-1242">Tcl</a>: <a href="#Tcl">Tcl</a></li>
-<li><a href="#index-Tcl-mode_002c-and-_0040code_007bmsgfmt_007d-program-961">Tcl mode, and <code>msgfmt</code> program</a>: <a href="#msgfmt-Invocation">msgfmt Invocation</a></li>
-<li><a href="#index-Tcl-mode_002c-and-_0040code_007bmsgunfmt_007d-program-1020">Tcl mode, and <code>msgunfmt</code> program</a>: <a href="#msgunfmt-Invocation">msgunfmt Invocation</a></li>
-<li><a href="#index-tcl_002dformat_0040r_007b-flag_007d-91"><code>tcl-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
-<li><a href="#index-template-PO-file-37">template PO file</a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-testing-_0040file_007b_002epo_007d-files-for-equivalence-224">testing <samp><span class="file">.po</span></samp> files for equivalence</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-Tk_0027s-scripting-language-1243">Tk's scripting language</a>: <a href="#Tcl">Tcl</a></li>
-<li><a href="#index-translated-entries-393">translated entries</a>: <a href="#Translated-Entries">Translated Entries</a></li>
-<li><a href="#index-translating-menu-entries-1079">translating menu entries</a>: <a href="#Contexts">Contexts</a></li>
-<li><a href="#index-translation-aspects-13">translation aspects</a>: <a href="#Aspects">Aspects</a></li>
-<li><a href="#index-Translation-Matrix-52">Translation Matrix</a>: <a href="#Installing-Localizations">Installing Localizations</a></li>
-<li><a href="#index-Translation-Project-5">Translation Project</a>: <a href="#Why">Why</a></li>
-<li><a href="#index-turning-off-NLS-support-1142">turning off NLS support</a>: <a href="#lib_002fgettext_002eh">lib/gettext.h</a></li>
-<li><a href="#index-tutorial-of-_0040code_007bgettext_007d-usage-32">tutorial of <code>gettext</code> usage</a>: <a href="#Overview">Overview</a></li>
-<li><a href="#index-unify-duplicate-translations-729">unify duplicate translations</a>: <a href="#msguniq-Invocation">msguniq Invocation</a></li>
-<li><a href="#index-untranslated-entries-418">untranslated entries</a>: <a href="#Untranslated-Entries">Untranslated Entries</a></li>
-<li><a href="#index-update-translations-from-a-compendium-533">update translations from a compendium</a>: <a href="#Using-Compendia">Using Compendia</a></li>
-<li><a href="#index-upgrading-to-new-versions-of-_0040code_007bgettext_007d-1116">upgrading to new versions of <code>gettext</code></a>: <a href="#Prerequisites">Prerequisites</a></li>
-<li><a href="#index-version-control-for-backup-files_002c-_0040code_007bmsgmerge_007d-290">version control for backup files, <code>msgmerge</code></a>: <a href="#msgmerge-Invocation">msgmerge Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bwxWidgets_007d-library-1239"><code>wxWidgets</code> library</a>: <a href="#wxWidgets">wxWidgets</a></li>
-<li><a href="#index-g_t_0040code_007bxargs_007d_002c-and-output-from-_0040code_007bmsgexec_007d-914"><code>xargs</code>, and output from <code>msgexec</code></a>: <a href="#msgexec-Invocation">msgexec Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bxgettext_007d-program_002c-usage-160"><code>xgettext</code> program, usage</a>: <a href="#xgettext-Invocation">xgettext Invocation</a></li>
-<li><a href="#index-g_t_0040code_007bxmodmap_007d-program_002c-and-typing-quotation-marks-275"><code>xmodmap</code> program, and typing quotation marks</a>: <a href="#Header-Entry">Header Entry</a></li>
-<li><a href="#index-YaST2-scripting-language-1241">YaST2 scripting language</a>: <a href="#YCP">YCP</a></li>
-<li><a href="#index-YCP-1240">YCP</a>: <a href="#YCP">YCP</a></li>
-<li><a href="#index-ycp_002dformat_0040r_007b-flag_007d-89"><code>ycp-format</code><span class="roman"> flag</span></a>: <a href="#PO-Files">PO Files</a></li>
- </ul> <div class="footnote">
-<hr>
-<a name="texinfo-footnotes-in-document"></a><h4>Footnotes</h4><p class="footnote"><small>[<a name="fn-1" href="#fnd-1">1</a>]</small> In this manual, all mentions of Emacs
-refers to either GNU Emacs or to XEmacs, which people sometimes call FSF
-Emacs and Lucid Emacs, respectively.</p>
-
- <p class="footnote"><small>[<a name="fn-2" href="#fnd-2">2</a>]</small> This
-limitation is not imposed by GNU <code>gettext</code>, but is for compatibility
-with the <code>msgfmt</code> implementation on Solaris.</p>
-
- <p class="footnote"><small>[<a name="fn-3" href="#fnd-3">3</a>]</small> Some
-system, e.g. mingw, don't have <code>LC_MESSAGES</code>. Here we use a more or
-less arbitrary value for it, namely 1729, the smallest positive integer
-which can be represented in two different ways as the sum of two cubes.</p>
-
- <p class="footnote"><small>[<a name="fn-4" href="#fnd-4">4</a>]</small> When the system does not support <code>setlocale</code> its behavior
-in setting the locale values is simulated by looking at the environment
-variables.</p>
-
- <p class="footnote"><small>[<a name="fn-5" href="#fnd-5">5</a>]</small> Additions are welcome. Send appropriate information to
-<a href="mailto:bug-gnu-gettext@gnu.org">bug-gnu-gettext@gnu.org</a> and <a href="mailto:bug-glibc-manual@gnu.org">bug-glibc-manual@gnu.org</a>.</p>
-
- <hr></div>
-
-</body></html>
-
-<!--
-
-Local Variables:
-coding: utf-8
-End:
-
--->
diff --git a/package/gettext-tiny/src/docs/msgfmt.txt b/package/gettext-tiny/src/docs/msgfmt.txt
deleted file mode 100644
index c0147d785..000000000
--- a/package/gettext-tiny/src/docs/msgfmt.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-Usage: msgfmt [OPTION] filename.po ...
-
-Generate binary message catalog from textual translation description.
-
-Mandatory arguments to long options are mandatory for short options too.
-Similarly for optional arguments.
-
-Input file location:
- filename.po ... input files
- -D, --directory=DIRECTORY add DIRECTORY to list for input files search
-If input file is -, standard input is read.
-
-Operation mode:
- -j, --java Java mode: generate a Java ResourceBundle class
- --java2 like --java, and assume Java2 (JDK 1.2 or higher)
- --csharp C# mode: generate a .NET .dll file
- --csharp-resources C# resources mode: generate a .NET .resources file
- --tcl Tcl mode: generate a tcl/msgcat .msg file
- --qt Qt mode: generate a Qt .qm file
-
-Output file location:
- -o, --output-file=FILE write output to specified file
- --strict enable strict Uniforum mode
-If output file is -, output is written to standard output.
-
-Output file location in Java mode:
- -r, --resource=RESOURCE resource name
- -l, --locale=LOCALE locale name, either language or language_COUNTRY
- -d DIRECTORY base directory of classes directory hierarchy
-The class name is determined by appending the locale name to the resource name,
-separated with an underscore. The -d option is mandatory. The class is
-written under the specified directory.
-
-Output file location in C# mode:
- -r, --resource=RESOURCE resource name
- -l, --locale=LOCALE locale name, either language or language_COUNTRY
- -d DIRECTORY base directory for locale dependent .dll files
-The -l and -d options are mandatory. The .dll file is written in a
-subdirectory of the specified directory whose name depends on the locale.
-
-Output file location in Tcl mode:
- -l, --locale=LOCALE locale name, either language or language_COUNTRY
- -d DIRECTORY base directory of .msg message catalogs
-The -l and -d options are mandatory. The .msg file is written in the
-specified directory.
-
-Input file syntax:
- -P, --properties-input input files are in Java .properties syntax
- --stringtable-input input files are in NeXTstep/GNUstep .strings
- syntax
-
-Input file interpretation:
- -c, --check perform all the checks implied by
- --check-format, --check-header, --check-domain
- --check-format check language dependent format strings
- --check-header verify presence and contents of the header entry
- --check-domain check for conflicts between domain directives
- and the --output-file option
- -C, --check-compatibility check that GNU msgfmt behaves like X/Open msgfmt
- --check-accelerators[=CHAR] check presence of keyboard accelerators for
- menu items
- -f, --use-fuzzy use fuzzy entries in output
-
-Output details:
- -a, --alignment=NUMBER align strings to NUMBER bytes (default: 1)
- --no-hash binary file will not include the hash table
-
-Informative output:
- -h, --help display this help and exit
- -V, --version output version information and exit
- --statistics print statistics about translations
- -v, --verbose increase verbosity level
-
-Report bugs to <bug-gnu-gettext@gnu.org>.
diff --git a/package/gettext-tiny/src/docs/msgmerge.txt b/package/gettext-tiny/src/docs/msgmerge.txt
deleted file mode 100644
index 8688e849d..000000000
--- a/package/gettext-tiny/src/docs/msgmerge.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-Usage: msgmerge [OPTION] def.po ref.pot
-
-Merges two Uniforum style .po files together. The def.po file is an
-existing PO file with translations which will be taken over to the newly
-created file as long as they still match; comments will be preserved,
-but extracted comments and file positions will be discarded. The ref.pot
-file is the last created PO file with up-to-date source references but
-old translations, or a PO Template file (generally created by xgettext);
-any translations or comments in the file will be discarded, however dot
-comments and file positions will be preserved. Where an exact match
-cannot be found, fuzzy matching is used to produce better results.
-
-Mandatory arguments to long options are mandatory for short options too.
-
-Input file location:
- def.po translations referring to old sources
- ref.pot references to new sources
- -D, --directory=DIRECTORY add DIRECTORY to list for input files search
- -C, --compendium=FILE additional library of message translations,
- may be specified more than once
-
-Operation mode:
- -U, --update update def.po,
- do nothing if def.po already up to date
-
-Output file location:
- -o, --output-file=FILE write output to specified file
-The results are written to standard output if no output file is specified
-or if it is -.
-
-Output file location in update mode:
-The result is written back to def.po.
- --backup=CONTROL make a backup of def.po
- --suffix=SUFFIX override the usual backup suffix
-The version control method may be selected via the --backup option or through
-the VERSION_CONTROL environment variable. Here are the values:
- none, off never make backups (even if --backup is given)
- numbered, t make numbered backups
- existing, nil numbered if numbered backups exist, simple otherwise
- simple, never always make simple backups
-The backup suffix is `~', unless set with --suffix or the SIMPLE_BACKUP_SUFFIX
-environment variable.
-
-Operation modifiers:
- -m, --multi-domain apply ref.pot to each of the domains in def.po
- -N, --no-fuzzy-matching do not use fuzzy matching
- --previous keep previous msgids of translated messages
-
-Input file syntax:
- -P, --properties-input input files are in Java .properties syntax
- --stringtable-input input files are in NeXTstep/GNUstep .strings
- syntax
-
-Output details:
- --lang=CATALOGNAME set 'Language' field in the header entry
- --color use colors and other text attributes always
- --color=WHEN use colors and other text attributes if WHEN.
- WHEN may be 'always', 'never', 'auto', or 'html'.
- --style=STYLEFILE specify CSS style rule file for --color
- -e, --no-escape do not use C escapes in output (default)
- -E, --escape use C escapes in output, no extended chars
- --force-po write PO file even if empty
- -i, --indent indented output style
- --no-location suppress '#: filename:line' lines
- --add-location preserve '#: filename:line' lines (default)
- --strict strict Uniforum output style
- -p, --properties-output write out a Java .properties file
- --stringtable-output write out a NeXTstep/GNUstep .strings file
- -w, --width=NUMBER set output page width
- --no-wrap do not break long message lines, longer than
- the output page width, into several lines
- -s, --sort-output generate sorted output
- -F, --sort-by-file sort output by file location
-
-Informative output:
- -h, --help display this help and exit
- -V, --version output version information and exit
- -v, --verbose increase verbosity level
- -q, --quiet, --silent suppress progress indicators
-
-Report bugs to <bug-gnu-gettext@gnu.org>.
diff --git a/package/gettext-tiny/src/docs/xgettext.txt b/package/gettext-tiny/src/docs/xgettext.txt
deleted file mode 100644
index a356e268e..000000000
--- a/package/gettext-tiny/src/docs/xgettext.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-Usage: xgettext [OPTION] [INPUTFILE]...
-
-Extract translatable strings from given input files.
-
-Mandatory arguments to long options are mandatory for short options too.
-Similarly for optional arguments.
-
-Input file location:
- INPUTFILE ... input files
- -f, --files-from=FILE get list of input files from FILE
- -D, --directory=DIRECTORY add DIRECTORY to list for input files search
-If input file is -, standard input is read.
-
-Output file location:
- -d, --default-domain=NAME use NAME.po for output (instead of messages.po)
- -o, --output=FILE write output to specified file
- -p, --output-dir=DIR output files will be placed in directory DIR
-If output file is -, output is written to standard output.
-
-Choice of input file language:
- -L, --language=NAME recognise the specified language
- (C, C++, ObjectiveC, PO, Shell, Python, Lisp,
- EmacsLisp, librep, Scheme, Smalltalk, Java,
- JavaProperties, C#, awk, YCP, Tcl, Perl, PHP,
- GCC-source, NXStringTable, RST, Glade)
- -C, --c++ shorthand for --language=C++
-By default the language is guessed depending on the input file name extension.
-
-Input file interpretation:
- --from-code=NAME encoding of input files
- (except for Python, Tcl, Glade)
-By default the input files are assumed to be in ASCII.
-
-Operation mode:
- -j, --join-existing join messages with existing file
- -x, --exclude-file=FILE.po entries from FILE.po are not extracted
- -cTAG, --add-comments=TAG place comment blocks starting with TAG and
- preceding keyword lines in output file
- -c, --add-comments place all comment blocks preceding keyword lines
- in output file
-
-Language specific options:
- -a, --extract-all extract all strings
- (only languages C, C++, ObjectiveC, Shell,
- Python, Lisp, EmacsLisp, librep, Scheme, Java,
- C#, awk, Tcl, Perl, PHP, GCC-source, Glade)
- -kWORD, --keyword=WORD look for WORD as an additional keyword
- -k, --keyword do not to use default keywords
- (only languages C, C++, ObjectiveC, Shell,
- Python, Lisp, EmacsLisp, librep, Scheme, Java,
- C#, awk, Tcl, Perl, PHP, GCC-source, Glade)
- --flag=WORD:ARG:FLAG additional flag for strings inside the argument
- number ARG of keyword WORD
- (only languages C, C++, ObjectiveC, Shell,
- Python, Lisp, EmacsLisp, librep, Scheme, Java,
- C#, awk, YCP, Tcl, Perl, PHP, GCC-source)
- -T, --trigraphs understand ANSI C trigraphs for input
- (only languages C, C++, ObjectiveC)
- --qt recognize Qt format strings
- (only language C++)
- --kde recognize KDE 4 format strings
- (only language C++)
- --boost recognize Boost format strings
- (only language C++)
- --debug more detailed formatstring recognition result
-
-Output details:
- --color use colors and other text attributes always
- --color=WHEN use colors and other text attributes if WHEN.
- WHEN may be 'always', 'never', 'auto', or 'html'.
- --style=STYLEFILE specify CSS style rule file for --color
- -e, --no-escape do not use C escapes in output (default)
- -E, --escape use C escapes in output, no extended chars
- --force-po write PO file even if empty
- -i, --indent write the .po file using indented style
- --no-location do not write '#: filename:line' lines
- -n, --add-location generate '#: filename:line' lines (default)
- --strict write out strict Uniforum conforming .po file
- --properties-output write out a Java .properties file
- --stringtable-output write out a NeXTstep/GNUstep .strings file
- -w, --width=NUMBER set output page width
- --no-wrap do not break long message lines, longer than
- the output page width, into several lines
- -s, --sort-output generate sorted output
- -F, --sort-by-file sort output by file location
- --omit-header don't write header with `msgid ""' entry
- --copyright-holder=STRING set copyright holder in output
- --foreign-user omit FSF copyright in output for foreign user
- --package-name=PACKAGE set package name in output
- --package-version=VERSION set package version in output
- --msgid-bugs-address=EMAIL@ADDRESS set report address for msgid bugs
- -m[STRING], --msgstr-prefix[=STRING] use STRING or "" as prefix for msgstr
- values
- -M[STRING], --msgstr-suffix[=STRING] use STRING or "" as suffix for msgstr
- values
-
-Informative output:
- -h, --help display this help and exit
- -V, --version output version information and exit
-
-Report bugs to <bug-gnu-gettext@gnu.org>.
diff --git a/package/gettext-tiny/src/include/libintl.h b/package/gettext-tiny/src/include/libintl.h
deleted file mode 100644
index ce5f58ea4..000000000
--- a/package/gettext-tiny/src/include/libintl.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef LIBINTL_H
-#define LIBINTL_H
-
-char *gettext(const char *msgid);
-char *dgettext(const char *domainname, const char *msgid);
-char *dcgettext(const char *domainname, const char *msgid, int category);
-char *ngettext(const char *msgid1, const char *msgid2, unsigned long n);
-char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n);
-char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category);
-
-char *textdomain(const char *domainname);
-char *bind_textdomain_codeset(const char *domainname, const char *codeset);
-char *bindtextdomain(const char *domainname, const char *dirname);
-
-#undef gettext_noop
-#define gettext_noop(X) (X)
-
-#ifndef LIBINTL_NO_MACROS
-/* if these macros are defined, configure checks will detect libintl as
- * built into the libc because test programs will work without -lintl.
- * for example:
- * checking for ngettext in libc ... yes
- * the consequence is that -lintl will not be added to the LDFLAGS.
- * so if for some reason you want that libintl.a gets linked,
- * add -DLIBINTL_NO_MACROS=1 to your CPPFLAGS. */
-
-#define gettext(X) ((char*) (X))
-#define dgettext(dom, X) ((void)(dom), (char*) (X))
-#define dcgettext(dom, X, cat) ((void)(dom), (void)(cat), (char*) (X))
-#define ngettext(X, Y, N) \
- ((char*) (((N) == 1) ? ((void)(Y), (X)) : ((void)(X), (Y))))
-#define dngettext(dom, X, Y, N) \
- ((dom), (char*) (((N) == 1) ? ((void)(Y), (X)) : ((void)(X), (Y))))
-#define dcngettext(dom, X, Y, N, cat) \
- ((dom), (cat), (char*) (((N) == 1) ? ((void)(Y), (X)) : ((void)(X), (Y))))
-#define bindtextdomain(X, Y) ((void)(X), (void)(Y), (char*) "/")
-#define bind_textdomain_codeset(dom, codeset) \
- ((void)(dom), (void)(codeset), (char*) 0)
-#define textdomain(X) ((void)(X), (char*) "messages")
-
-#undef ENABLE_NLS
-#undef DISABLE_NLS
-#define DISABLE_NLS 1
-
-#if __GNUC__ +0 > 3
-/* most ppl call bindtextdomain() without using its return value
- thus we get tons of warnings about "statement with no effect" */
-#pragma GCC diagnostic ignored "-Wunused-value"
-#endif
-
-#endif
-
-#include <stdio.h>
-#define gettext_printf(args...) printf(args)
-
-/* to supply LC_MESSAGES and other stuff GNU expects to be exported when
- including libintl.h */
-#include <locale.h>
-
-#endif
-
diff --git a/package/gettext-tiny/src/libintl/libintl.c b/package/gettext-tiny/src/libintl/libintl.c
deleted file mode 100644
index 0851fac1c..000000000
--- a/package/gettext-tiny/src/libintl/libintl.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright (C) 2003 Manuel Novoa III
- * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
- *
- * Trivial Stubs, Public Domain.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-char *gettext(const char *msgid)
-{
- return (char *) msgid;
-}
-
-char *dgettext(const char *domainname, const char *msgid)
-{
- (void) domainname;
- return (char *) msgid;
-}
-
-char *dcgettext(const char *domainname, const char *msgid, int category)
-{
- (void) domainname;
- (void) category;
- return (char *) msgid;
-}
-
-char *ngettext(const char *msgid1, const char *msgid2, unsigned long n)
-{
- return (char *) ((n == 1) ? msgid1 : msgid2);
-}
-
-char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n)
-{
- (void) domainname;
- return (char *) ((n == 1) ? msgid1 : msgid2);
-}
-
-char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category)
-{
- (void) domainname;
- (void) category;
- return (char *) ((n == 1) ? msgid1 : msgid2);
-}
-
-char *textdomain(const char *domainname)
-{
- static const char default_str[] = "messages";
-
- if (domainname && *domainname && strcmp(domainname, default_str)) {
- errno = EINVAL;
- return NULL;
- }
- return (char *) default_str;
-}
-
-char *bindtextdomain(const char *domainname, const char *dirname)
-{
- static const char dir[] = "/";
-
- if (!domainname || !*domainname
- || (dirname && ((dirname[0] != '/') || dirname[1]))
- ) {
- errno = EINVAL;
- return NULL;
- }
-
- return (char *) dir;
-}
-
-char *bind_textdomain_codeset(const char *domainname, const char *codeset)
-{
- if (!domainname || !*domainname || (codeset && strcasecmp(codeset, "UTF-8"))) {
- errno = EINVAL;
- }
- return NULL;
-}
-
-/* trick configure tests checking for gnu libintl, as in the copy included in gdb */
-const char *_nl_expand_alias () { return NULL; }
-int _nl_msg_cat_cntr = 0;
diff --git a/package/gettext-tiny/src/src/StringEscape.c b/package/gettext-tiny/src/src/StringEscape.c
deleted file mode 100644
index 3a9ddd6cb..000000000
--- a/package/gettext-tiny/src/src/StringEscape.c
+++ /dev/null
@@ -1,111 +0,0 @@
-#include <stddef.h>
-
-//FIXME out gets silently truncated if outsize is too small
-
-size_t escape(char* in, char* out, size_t outsize) {
- size_t l = 0;
- while(*in && l + 3 < outsize) {
- switch(*in) {
- case '\n':
- *out++ = '\\';
- l++;
- *out = 'n';
- break;
- case '\r':
- *out++ = '\\';
- l++;
- *out = 'r';
- break;
- case '\t':
- *out++ = '\\';
- l++;
- *out = 't';
- break;
- case '\\':
- *out++ = '\\';
- l++;
- *out = '\\';
- break;
- case '"':
- *out++ = '\\';
- l++;
- *out = '"';
- break;
- case '\v':
- *out++ = '\\';
- l++;
- *out = '\v';
- break;
- case '\?':
- *out++ = '\\';
- l++;
- *out = '\?';
- break;
- case '\f':
- *out++ = '\\';
- l++;
- *out = '\f';
- break;
- default:
- *out = *in;
- }
- in++;
- out++;
- l++;
- }
- *out = 0;
- return l;
-}
-#include <assert.h>
-#include <stdlib.h>
-size_t unescape(char* in, char *out, size_t outsize) {
- size_t l = 0;
- while(*in && l + 2 < outsize) {
- switch (*in) {
- case '\\':
- ++in;
- assert(*in);
- switch(*in) {
- case 'n':
- *out='\n';
- break;
- case 'r':
- *out='\r';
- break;
- case 't':
- *out='\t';
- break;
- case '\\':
- *out='\\';
- break;
- case '"':
- *out='"';
- break;
- case 'v':
- *out='\v';
- break;
- case '\?':
- *out = '\?';
- break;
- case 'f':
- *out = '\f';
- break;
- case '\'':
- *out = '\'';
- break;
- // FIXME add handling of hex and octal
- default:
- abort();
- }
- break;
- default:
- *out=*in;
- }
- in++;
- out++;
- l++;
- }
- *out = 0;
- return l;
-}
-
diff --git a/package/gettext-tiny/src/src/StringEscape.h b/package/gettext-tiny/src/src/StringEscape.h
deleted file mode 100644
index fc764821b..000000000
--- a/package/gettext-tiny/src/src/StringEscape.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef STRINGESCAPE_H
-#define STRINGESCAPE_H
-#include <stddef.h>
-size_t escape(char* in, char *out, size_t outsize);
-size_t unescape(char* in, char *out, size_t outsize);
-//RcB: DEP "StringEscape.c"
-#endif
diff --git a/package/gettext-tiny/src/src/msgfmt.c b/package/gettext-tiny/src/src/msgfmt.c
deleted file mode 100644
index bf5f3430d..000000000
--- a/package/gettext-tiny/src/src/msgfmt.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* msgfmt utility (C) 2012 rofl0r
- * released under the MIT license, see LICENSE for details */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include "poparser.h"
-
-// in DO_NOTHING mode, we simply write the msgid twice, once for msgid, once for msgstr.
-// TODO: maybe make it write "" instead of echoing the msgid.
-//#define DO_NOTHING
-
-__attribute__((noreturn))
-static void syntax(void) {
- fprintf(stdout,
- "Usage: msgfmt [OPTION] filename.po ...\n");
- exit(1);
-}
-
-__attribute__((noreturn))
-static void version(void) {
- fprintf(stdout,
- "these are not (GNU gettext-tools) 99.9999.9999\n");
- exit(0);
-}
-
-#define streq(A, B) (!strcmp(A, B))
-#define strstarts(S, W) (memcmp(S, W, sizeof(W) - 1) ? NULL : (S + (sizeof(W) - 1)))
-
-struct mo_hdr {
- unsigned magic;
- int rev;
- unsigned numstring;
- unsigned off_tbl_org;
- unsigned off_tbl_trans;
- unsigned hash_tbl_size;
- unsigned off_tbl_hash;
-};
-
-/* file layout:
- header
- strtable (lenghts/offsets)
- transtable (lenghts/offsets)
- [hashtable]
- strings section
- translations section */
-
-const struct mo_hdr def_hdr = {
- 0x950412de,
- 0,
- 0,
- sizeof(struct mo_hdr),
- 0,
- 0,
- 0,
-};
-
-
-// pass 0: collect numbers of strings, calculate size and offsets for tables
-// print header
-// pass 1: print string table [lengths/offsets]
-// pass 2: print translation table [lengths/offsets]
-// pass 3: print strings
-// pass 4: print translations
-enum passes {
- pass_first = 0,
- pass_collect_sizes = pass_first,
- pass_second,
- pass_print_string_offsets = pass_second,
- pass_print_translation_offsets,
- pass_print_strings,
- pass_print_translations,
- pass_max,
-};
-
-struct callbackdata {
- enum passes pass;
- unsigned off;
- FILE* out;
- unsigned num[pe_maxstr];
- unsigned len[pe_maxstr];
-};
-
-
-int process_line_callback(struct po_info* info, void* user) {
- struct callbackdata *d = (struct callbackdata *) user;
- assert(info->type == pe_msgid || info->type == pe_msgstr);
- switch(d->pass) {
- case pass_collect_sizes:
- d->num[info->type] += 1;
- d->len[info->type] += info->textlen;
- break;
- case pass_print_string_offsets:
- if(info->type == pe_msgstr) break;
- write_offsets:
- // print length of current string
- fwrite(&info->textlen, sizeof(unsigned), 1, d->out);
- // print offset of current string
- fwrite(&d->off, sizeof(unsigned), 1, d->out);
- d->off += info->textlen + 1;
- break;
- case pass_print_translation_offsets:
-#ifndef DO_NOTHING
- if(info->type == pe_msgid) break;
-#else
- if(info->type != pe_msgid) break;
-#endif
- goto write_offsets;
- case pass_print_strings:
- if(info->type == pe_msgstr) break;
- write_string:
- fwrite(info->text, info->textlen + 1, 1, d->out);
- break;
- case pass_print_translations:
-#ifndef DO_NOTHING
- if(info->type == pe_msgid) break;
-#else
- if(info->type != pe_msgid) break;
-#endif
- goto write_string;
- break;
- default:
- abort();
- }
- return 0;
-}
-
-int process(FILE *in, FILE *out) {
- struct mo_hdr mohdr = def_hdr;
- char line[4096]; char *lp;
- char convbuf[16384];
-
- struct callbackdata d = {
- .num = {
- [pe_msgid] = 0,
- [pe_msgstr] = 0,
- },
- .len = {
- [pe_msgid] = 0,
- [pe_msgstr] = 0,
- },
- .off = 0,
- .out = out,
- .pass = pass_first,
- };
-
- struct po_parser pb, *p = &pb;
- int invalid_file = 0;
-
- mohdr.off_tbl_trans = mohdr.off_tbl_org;
- for(d.pass = pass_first; d.pass < pass_max; d.pass++) {
- if(d.pass == pass_second) {
- // start of second pass:
- // check that data gathered in first pass is consistent
-#ifndef DO_NOTHING
- if(d.num[pe_msgid] != d.num[pe_msgstr]) {
- // one should actually abort here,
- // but gnu gettext simply writes an empty .mo and returns success.
- //abort();
- d.num[pe_msgid] = 0;
- invalid_file = 1;
- }
-#endif
-
- // calculate header fields from len and num arrays
- mohdr.numstring = d.num[pe_msgid];
- mohdr.off_tbl_org = sizeof(struct mo_hdr);
- mohdr.off_tbl_trans = mohdr.off_tbl_org + d.num[pe_msgid] * (sizeof(unsigned)*2);
- // print header
- fwrite(&mohdr, sizeof(mohdr), 1, out);
- // set offset startvalue
- d.off = mohdr.off_tbl_trans + d.num[pe_msgid] * (sizeof(unsigned)*2);
- if(invalid_file) return 0;
- }
- poparser_init(p, convbuf, sizeof(convbuf), process_line_callback, &d);
-
- while((lp = fgets(line, sizeof(line), in))) {
- poparser_feed_line(p, lp, sizeof(line));
- }
-
- poparser_finish(p);
-
- fseek(in, 0, SEEK_SET);
- }
- return 0;
-}
-
-
-void set_file(int out, char* fn, FILE** dest) {
- if(streq(fn, "-")) {
- *dest = out ? stdout : stdin;
- } else {
- *dest = fopen(fn, out ? "w" : "r");
- }
- if(!*dest) {
- perror("fopen");
- exit(1);
- }
-}
-
-int main(int argc, char**argv) {
- if(argc == 1) syntax();
- int arg = 1;
- FILE *out = NULL;
- FILE *in = NULL;
- int expect_out_fn = 0;
- int expect_in_fn = 1;
- char* dest;
-#define A argv[arg]
- for(; arg < argc; arg++) {
- if(expect_out_fn) {
- set_file(1, A, &out);
- expect_out_fn = 0;
- } else if(A[0] == '-') {
- if(A[1] == '-') {
- if(
- streq(A+2, "java") ||
- streq(A+2, "java2") ||
- streq(A+2, "csharp") ||
- streq(A+2, "csharp-resources") ||
- streq(A+2, "tcl") ||
- streq(A+2, "qt") ||
- streq(A+2, "strict") ||
- streq(A+2, "properties-input") ||
- streq(A+2, "stringtable-input") ||
- streq(A+2, "use-fuzzy") ||
- strstarts(A+2, "alignment=") ||
- streq(A+2, "check") ||
- streq(A+2, "check-format") ||
- streq(A+2, "check-header") ||
- streq(A+2, "check-domain") ||
- streq(A+2, "check-compatibility") ||
- streq(A+2, "check-accelerators") ||
- streq(A+2, "no-hash") ||
- streq(A+2, "verbose") ||
- streq(A+2, "statistics") ||
- strstarts(A+2, "check-accelerators=") ||
- strstarts(A+2, "resource=") ||
- strstarts(A+2, "locale=")
-
- ) {
- } else if((dest = strstarts(A+2, "output-file="))) {
- set_file(1, dest, &out);
- } else if(streq(A+2, "version")) {
- version();
- } else if(streq(A+2, "help")) syntax();
-
- } else if(streq(A + 1, "o")) {
- expect_out_fn = 1;
- } else if(
- streq(A+1, "j") ||
- streq(A+1, "r") ||
- streq(A+1, "l") ||
- streq(A+1, "P") ||
- streq(A+1, "f") ||
- streq(A+1, "a") ||
- streq(A+1, "c") ||
- streq(A+1, "C")
- ) {
- } else if (streq(A+1, "v")) {
- version();
- } else if (streq(A+1, "d")) {
- // no support for -d at this time
- fprintf(stderr, "EINVAL\n");
- exit(1);
- } else if (streq(A+1, "h")) syntax();
- } else if (expect_in_fn) {
- set_file(0, A, &in);
- }
- }
- if(in == NULL || out == NULL) syntax();
- int ret = process(in, out);
- fflush(in); fflush(out);
- if(in != stdin) fclose(in);
- if(out != stdout) fclose(out);
- return ret;
-}
diff --git a/package/gettext-tiny/src/src/msgmerge.c b/package/gettext-tiny/src/src/msgmerge.c
deleted file mode 100644
index 977f1686e..000000000
--- a/package/gettext-tiny/src/src/msgmerge.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* msgfmt utility (C) 2012 rofl0r
- * released under the MIT license, see LICENSE for details */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include "poparser.h"
-#include "StringEscape.h"
-
-__attribute__((noreturn))
-static void syntax(void) {
- fprintf(stdout,
- "Usage: msgmerge [OPTION] def.po ref.pot\n");
- exit(1);
-}
-
-__attribute__((noreturn))
-static void version(void) {
- fprintf(stdout,
- "these are not (GNU gettext-tools) 99.9999.9999\n");
- exit(0);
-}
-
-#define streq(A, B) (!strcmp(A, B))
-#define strstarts(S, W) (memcmp(S, W, sizeof(W) - 1) ? NULL : (S + (sizeof(W) - 1)))
-
-struct fiLes {
- FILE *out;
- /* we can haz 3 different input files:
- * the .pot, which is the file containing only the ripped out strings from the program
- * (and no translations)
- * a .po, which is contains translations and strings made from a previous .pot from that same source file,
- * a compendium, which is basically a huge po file containing all sorts of strings (msgid's) and translations (msgstr's)
- */
- FILE *po;
- FILE *pot;
- FILE *compend;
-};
-
-/* currently we only output input strings as output strings
- * i.e. there is no translation lookup at all */
-int process_line_callback(struct po_info* info, void* user) {
- char convbuf[8192];
- FILE* out = (FILE*) user;
- size_t l;
- if(info->type == pe_msgid) {
- l = escape(info->text, convbuf, sizeof(convbuf));
- fprintf(out, "msgid \"%s\"\nmsgstr \"%s\"\n", convbuf, convbuf);
- }
- return 0;
-}
-
-int process(struct fiLes *files, int update, int backup) {
- (void) update; (void) backup;
- struct po_parser pb, *p = &pb;
- char line[4096], conv[8192], *lb;
- poparser_init(p, conv, sizeof(conv), process_line_callback, files->out);
- while((lb = fgets(line, sizeof(line), files->pot))) {
- poparser_feed_line(p, lb, sizeof(line) - (size_t)(lb - line));
- }
- poparser_finish(p);
- return 0;
-}
-
-void set_file(int out, char* fn, FILE** dest) {
- if(streq(fn, "-")) {
- *dest = out ? stdout : stdin;
- } else {
- *dest = fopen(fn, out ? "w" : "r");
- }
- if(!*dest) {
- perror("fopen");
- exit(1);
- }
-}
-
-int getbackuptype(char* str) {
- if(!str || !*str || streq(str, "none") || streq(str, "off"))
- return 0;
- else if(streq(str, "t") || streq(str, "numbered"))
- return 1;
- else if(streq(str, "nil") || streq(str, "existing"))
- return 2;
- else if(streq(str, "simple") || streq(str, "never"))
- return 3;
- else syntax();
-}
-
-int main(int argc, char**argv) {
- if(argc == 1) syntax();
- int arg = 1;
- struct expect {
- int out;
- int po;
- int pot;
- int compend;
- } expect_fn = {
- .out = 0,
- .po = 1,
- .pot = 0,
- .compend = 0,
- };
- struct fiLes files = {0,0,0,0};
- char* backup_suffix = getenv("SIMPLE_BACKUP_SUFFIX");
- if(!backup_suffix) backup_suffix = "~";
- int update = 0;
- int backup = getbackuptype(getenv("VERSION_CONTROL"));
- char* dest;
- set_file(1, "-", &files.out);
-#define A argv[arg]
- for(; arg < argc; arg++) {
- if(A[0] == '-') {
- if(A[1] == '-') {
- if(
- streq(A+2, "strict") ||
- streq(A+2, "properties-input") ||
- streq(A+2, "properties-output") ||
- streq(A+2, "stringtable-input") ||
- streq(A+2, "stringtable-output") ||
- streq(A+2, "no-fuzzy-matching") ||
- streq(A+2, "multi-domain") ||
- streq(A+2, "previous") ||
- streq(A+2, "escape") ||
- streq(A+2, "no-escape") ||
- streq(A+2, "force-po") ||
- streq(A+2, "indent") ||
- streq(A+2, "add-location") ||
- streq(A+2, "no-location") ||
- streq(A+2, "no-wrap") ||
- streq(A+2, "sort-output") ||
- streq(A+2, "sort-by-file") ||
-
- strstarts(A+2, "lang=") ||
- strstarts(A+2, "color") || // can be --color or --color=xxx
- strstarts(A+2, "style=") ||
- strstarts(A+2, "width=") ||
-
- streq(A+2, "verbose") ||
- streq(A+2, "quiet") ||
- streq(A+2, "silent") ) {
- } else if(streq(A+2, "version")) {
- version();
- } else if((dest = strstarts(A+2, "output-file="))) {
- set_file(1, dest, &files.out);
- } else if((dest = strstarts(A+2, "compendium="))) {
- set_file(1, dest, &files.compend);
- } else if((dest = strstarts(A+2, "suffix="))) {
- backup_suffix = dest;
- } else if((dest = strstarts(A+2, "directory="))) {
- goto nodir;
- } else if((dest = strstarts(A+2, "backup"))) {
- if (*dest == '=')
- backup = getbackuptype(dest + 1);
- else
- backup = 0;
- } else if(streq(A+2, "update")) {
- set_update:
- update = 1;
- abort();
- } else if(streq(A+2, "help")) syntax();
-
- } else if(streq(A + 1, "o")) {
- expect_fn.out = 1;
- } else if(streq(A + 1, "C")) {
- expect_fn.compend = 1;
- } else if(streq(A + 1, "U")) {
- goto set_update;
- } else if(
- streq(A+1, "m") ||
- streq(A+1, "N") ||
- streq(A+1, "P") ||
- streq(A+1, "e") ||
- streq(A+1, "E") ||
- streq(A+1, "i") ||
- streq(A+1, "p") ||
- streq(A+1, "w") ||
- streq(A+1, "s") ||
- streq(A+1, "F") ||
- streq(A+1, "V") ||
- streq(A+1, "q")
- ) {
-
- } else if (streq(A+1, "v")) {
- version();
- } else if (streq(A+1, "D")) {
- // no support for -D at this time
- nodir:
- fprintf(stderr, "EINVAL\n");
- exit(1);
- } else if (streq(A+1, "h")) syntax();
- } else if(expect_fn.out) {
- set_file(1, A, &files.out);
- expect_fn.out = 0;
- } else if(expect_fn.compend) {
- set_file(1, A, &files.compend);
- expect_fn.compend = 0;
- } else if(expect_fn.po) {
- set_file(0, A, &files.po);
- expect_fn.po = 0;
- expect_fn.pot = 1;
- } else if(expect_fn.pot) {
- set_file(0, A, &files.pot);
- expect_fn.pot = 0;
- }
- }
- if(!files.out || !files.po || !files.pot) syntax();
- int ret = process(&files, update, backup);
- FILE** filearr = (FILE**) &files;
- unsigned i;
- for (i = 0; i < 4; i++) {
- if(filearr[i] != NULL) fflush(filearr[i]);
- }
- for (i = 0; i < 4; i++) {
- if(
- filearr[i] != NULL &&
- filearr[i] != stdout &&
- filearr[i] != stdin
- ) fclose(filearr[i]);
- }
- return ret;
-}
diff --git a/package/gettext-tiny/src/src/poparser.c b/package/gettext-tiny/src/src/poparser.c
deleted file mode 100644
index e67761305..000000000
--- a/package/gettext-tiny/src/src/poparser.c
+++ /dev/null
@@ -1,144 +0,0 @@
-#include <ctype.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include "poparser.h"
-#include "StringEscape.h"
-
-#define streq(A, B) (!strcmp(A, B))
-#define strstarts(S, W) (memcmp(S, W, sizeof(W) - 1) ? NULL : (S + (sizeof(W) - 1)))
-
-static enum po_entry get_type_and_start(char* lp, char* end, size_t *stringstart) {
- enum po_entry result_type;
- char *x, *y;
- size_t start = (size_t) lp;
- while(isspace(*lp) && lp < end) lp++;
- if(lp[0] == '#') {
- inv:
- *stringstart = 0;
- return pe_invalid;
- }
- if((y = strstarts(lp, "msg"))) {
- if((x = strstarts(y, "id")) && (isspace(*x) || ((x = strstarts(x, "_plural")) && isspace(*x))))
- result_type = pe_msgid;
- else if ((x = strstarts(y, "str")) && (isspace(*x) ||
- (x[0] == '[' && (x[1] == '0' || x[1] == '1') && x[2] == ']' && (x += 3) && isspace(*x))))
- result_type = pe_msgstr;
- else
- goto inv;
- while(isspace(*x) && x < end) x++;
- if(*x != '"') abort();
- conv:
- *stringstart = ((size_t) x - start) + 1;
- } else if(*lp == '"') {
- result_type = pe_str;
- x = lp;
- goto conv;
- } else {
- goto inv;
- }
- return result_type;
-}
-
-/* expects a pointer to the first char after a opening " in a string,
- * converts the string into convbuf, and returns the length of that string */
-static size_t get_length_and_convert(char* x, char* end, char* convbuf, size_t convbuflen) {
- size_t result = 0;
- char* e = x + strlen(x);
- assert(e > x && e < end && *e == 0);
- e--;
- while(isspace(*e)) e--;
- if(*e != '"') abort();
- *e = 0;
- result = unescape(x, convbuf, convbuflen);
- return result;
-}
-
-
-void poparser_init(struct po_parser *p, char* workbuf, size_t bufsize, poparser_callback cb, void* cbdata) {
- p->buf = workbuf;
- p->bufsize = bufsize;
- p->cb = cb;
- p->prev_type = pe_invalid;
- p->curr_len = 0;
- p->cbdata = cbdata;
-}
-
-enum lineactions {
- la_incr,
- la_proc,
- la_abort,
- la_nop,
- la_max,
-};
-
-/* return 0 on success */
-int poparser_feed_line(struct po_parser *p, char* line, size_t buflen) {
- char *convbuf = p->buf;
- size_t convbuflen = p->bufsize;
- size_t strstart;
-
- static const enum lineactions action_tbl[pe_max][pe_max] = {
- // pe_str will never be set as curr_type
- [pe_str] = {
- [pe_str] = la_abort,
- [pe_msgid] = la_abort,
- [pe_msgstr] = la_abort,
- [pe_invalid] = la_abort,
- },
- [pe_msgid] = {
- [pe_str] = la_incr,
- [pe_msgid] = la_proc,
- [pe_msgstr] = la_proc,
- [pe_invalid] = la_proc,
- },
- [pe_msgstr] = {
- [pe_str] = la_incr,
- [pe_msgid] = la_proc,
- [pe_msgstr] = la_proc,
- [pe_invalid] = la_proc,
- },
- [pe_invalid] = {
- [pe_str] = la_nop, // this can happen when we have msgstr[2] "" ... "foo", since we only parse msgstr[0] and [1]
- [pe_msgid] = la_incr,
- [pe_msgstr] = la_incr,
- [pe_invalid] = la_nop,
- },
- };
-
- enum po_entry type;
-
- type = get_type_and_start(line, line + buflen, &strstart);
- switch(action_tbl[p->prev_type][type]) {
- case la_incr:
- assert(type == pe_msgid || type == pe_msgstr || type == pe_str);
- p->curr_len += get_length_and_convert(line + strstart, line + buflen, convbuf + p->curr_len, convbuflen - p->curr_len);
- break;
- case la_proc:
- assert(p->prev_type == pe_msgid || p->prev_type == pe_msgstr);
- p->info.text = convbuf;
- p->info.textlen = p->curr_len;
- p->info.type = p->prev_type;
- p->cb(&p->info, p->cbdata);
- if(type != pe_invalid)
- p->curr_len = get_length_and_convert(line + strstart, line + buflen, convbuf, convbuflen);
- else
- p->curr_len = 0;
- break;
- case la_nop:
- break;
- case la_abort:
- default:
- abort();
- // todo : return error code
- }
- if(type != pe_str) {
- p->prev_type = type;
- }
- return 0;
-}
-
-int poparser_finish(struct po_parser *p) {
- char empty[4] = "";
- return poparser_feed_line(p, empty, sizeof(empty));
-}
diff --git a/package/gettext-tiny/src/src/poparser.h b/package/gettext-tiny/src/src/poparser.h
deleted file mode 100644
index e29594f35..000000000
--- a/package/gettext-tiny/src/src/poparser.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef POPARSER_H
-#define POPARSER_H
-#include <unistd.h>
-
-enum po_entry {
- pe_msgid = 0,
- pe_msgstr,
- pe_maxstr,
- pe_str = pe_maxstr,
- pe_invalid,
- pe_max,
-};
-
-struct po_info {
- enum po_entry type;
- char *text;
- size_t textlen;
-};
-
-typedef int (*poparser_callback)(struct po_info* info, void* user);
-
-struct po_parser {
- struct po_info info;
- char *buf;
- size_t bufsize;
- enum po_entry prev_type;
- unsigned curr_len;
- poparser_callback cb;
- void *cbdata;
-};
-
-void poparser_init(struct po_parser *p, char* workbuf, size_t bufsize, poparser_callback cb, void* cbdata);
-int poparser_feed_line(struct po_parser *p, char* line, size_t buflen);
-int poparser_finish(struct po_parser *p);
-
-#endif
diff --git a/package/gettext-tiny/src/src/xgettext.sh b/package/gettext-tiny/src/src/xgettext.sh
deleted file mode 100755
index 32173556b..000000000
--- a/package/gettext-tiny/src/src/xgettext.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-outputfile=
-outputdir=.
-domain=messages
-
-spliteq() {
- arg=$1
- echo "${arg#*=}"
- #alternatives echo "$arg" | cut -d= -f2-
- # or echo "$arg" | sed 's/[^=]*=//'
-}
-
-syntax() {
- printf "%s\n" "Usage: xgettext [OPTION] [INPUTFILE]..."
- exit 1
-}
-
-show_version() {
- printf "%s\n", "these are not (GNU gettext-tools) 99.9999.9999\n"
- exit 0
-}
-
-while true ; do
- case $1 in
- #--files-from=*) readfile `spliteq "$1"`;;
- #-f) expectfilefrom=1;;
- --version) show_version;;
- -V) show_version;;
- --default-domain=*) domain=`spliteq "$1"` ;;
- -d) shift ; domain="$1" ;;
- --files-from=*) : ;;
- -f) shift ;;
- --directory=*) : ;;
- -D) shift ;;
- -o) shift ; outputfile="$1" ;;
- --output=*) outputfile=`spliteq "$1"` ;;
- --output-dir=*) outputdir=`spliteq "$1"` ;;
- -p) shift ; outputdir=`spliteq "$1"` ;;
- --language=*) : ;;
- -L) shift ;;
- --C) : ;;
- --c++) : ;;
- --from-code=*) : ;;
- --join-existing) : ;;
- -j) : ;;
- --exclude-file=*) : ;;
- -x) shift;;
- --add-comments=*) : ;;
- -cTAG) shift;;
- --add-comments) : ;;
- -c) : ;;
- --extract-all) : ;;
- -a) : ;;
- --keyword=*) : ;;
- -k*) : ;;
- --keyword) : ;;
- -k) : ;;
- --flag=*) : ;;
- --trigraphs) : ;;
- -T) : ;;
- --qt) : ;;
- --kde) : ;;
- --boost) : ;;
- --debug) : ;;
- --color) : ;;
- --color=*) : ;;
- --style=*) : ;;
- --no-escape) : ;;
- -e) : ;;
- --escape) : ;;
- -E) : ;;
- --force-po) force=1 ;;
- --indent) : ;;
- -i) : ;;
- --no-location) : ;;
- --add-location) : ;;
- -n) : ;;
- --strict) : ;;
- --properties-output) : ;;
- --stringtable-output) : ;;
- --width=*) : ;;
- -w) : ;;
- --no-wrap) : ;;
- --sort-output) : ;;
- -s) : ;;
- --sort-by-file) : ;;
- -F) : ;;
- --omit-header) : ;;
- --copyright-holder=*) : ;;
- --foreign-user) : ;;
- --package-name=*) : ;;
- --package-version=*) : ;;
- --msgid-bugs-address=*) : ;;
- --msgstr-prefix*) : ;;
- -m*) : ;;
- --msgstr-suffix*) : ;;
- -M*) : ;;
- --help) syntax ;;
- -h) syntax ;;
- *) break ;;
- esac
- shift
-done
-
-[ -z "$outputfile" ] && outputfile=${domain}.po
-[ "$outputfile" = "-" ] && exit 0
-if [ ! -z "$outputfile" ] ; then
- touch $outputdir/$outputfile
-fi
-
-