diff options
author | Bruno Haible <bruno@clisp.org> | 2003-02-14 17:04:54 +0000 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2009-06-23 12:10:02 +0200 |
commit | da7cbb13cbc776e498167f34ce1dbb6504b442e3 (patch) | |
tree | ef082e1e6c37fadf09d10d994df07bcb7ac15933 | |
parent | 859de64dc4f5defce5980f9b5904d1692eb70ad0 (diff) | |
download | external_gettext-da7cbb13cbc776e498167f34ce1dbb6504b442e3.zip external_gettext-da7cbb13cbc776e498167f34ce1dbb6504b442e3.tar.gz external_gettext-da7cbb13cbc776e498167f34ce1dbb6504b442e3.tar.bz2 |
Obsolete.
35 files changed, 0 insertions, 28193 deletions
diff --git a/doc/gettext.info b/doc/gettext.info deleted file mode 100644 index b4b1eed..0000000 --- a/doc/gettext.info +++ /dev/null @@ -1,234 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -Indirect: -gettext.info-1: 2520 -gettext.info-2: 50288 -gettext.info-3: 95147 -gettext.info-4: 142113 -gettext.info-5: 187723 -gettext.info-6: 235598 -gettext.info-7: 282648 -gettext.info-8: 332565 -gettext.info-9: 372723 -gettext.info-10: 409975 - -Tag Table: -(Indirect) -Node: Top2520 -Node: Introduction12918 -Node: Why14776 -Ref: Why-Footnote-117883 -Node: Concepts18039 -Node: Aspects21452 -Node: Files27290 -Node: Overview29191 -Node: Basics39983 -Node: Installation40813 -Node: PO Files42755 -Ref: PO Files-Footnote-150161 -Node: Main PO Commands50288 -Node: Entry Positioning55358 -Node: Normalizing60812 -Node: Sources65265 -Node: Triggering66598 -Node: Preparing Strings69628 -Node: Mark Keywords76506 -Node: Marking80061 -Node: c-format Flag87782 -Node: Special cases91693 -Node: Template94426 -Node: xgettext Invocation95147 -Node: Creating102199 -Node: msginit Invocation103080 -Node: Header Entry104946 -Node: Updating111352 -Node: msgmerge Invocation112107 -Node: Translated Entries116205 -Node: Fuzzy Entries117559 -Node: Untranslated Entries120728 -Node: Obsolete Entries122648 -Node: Modifying Translations125861 -Node: Modifying Comments133818 -Node: Subedit138231 -Node: C Sources Context142113 -Node: Auxiliary147223 -Node: Compendium150448 -Node: Creating Compendia151058 -Node: Using Compendia153497 -Node: Manipulating154385 -Node: msgcat Invocation157865 -Node: msgconv Invocation161340 -Node: msggrep Invocation163746 -Node: msgfilter Invocation167673 -Node: msguniq Invocation171767 -Node: msgcomm Invocation174883 -Node: msgcmp Invocation178153 -Node: msgattrib Invocation179383 -Node: msgen Invocation182744 -Node: msgexec Invocation185340 -Node: Binaries187391 -Node: msgfmt Invocation187723 -Node: msgunfmt Invocation193455 -Node: MO Files196382 -Node: Users204473 -Node: Matrix205956 -Node: Installers207160 -Node: End Users208330 -Node: Programmers208979 -Node: catgets210152 -Node: Interface to catgets211555 -Node: Problems with catgets213559 -Node: gettext214460 -Node: Interface to gettext215918 -Node: Ambiguities218257 -Node: Locating Catalogs220950 -Ref: Locating Catalogs-Footnote-1222097 -Ref: Locating Catalogs-Footnote-2222322 -Node: Charset conversion222471 -Node: Plural forms224913 -Ref: Plural forms-Footnote-1235506 -Node: GUI program problems235598 -Node: Optimized gettext240702 -Node: Comparison242035 -Node: Using libintl.a246305 -Node: gettext grok246738 -Node: Temp Programmers249287 -Node: Temp Implementations249727 -Node: Temp catgets251093 -Node: Temp WSI252780 -Node: Temp Notes254768 -Node: Translators255257 -Node: Trans Intro 0255636 -Node: Trans Intro 1258285 -Node: Discussions260149 -Node: Organization263648 -Node: Central Coordination265629 -Node: National Teams266757 -Node: Sub-Cultures269269 -Node: Organizational Ideas270188 -Node: Mailing Lists271191 -Node: Information Flow272994 -Node: Maintainers275127 -Node: Flat and Non-Flat277024 -Node: Prerequisites278507 -Node: gettextize Invocation282648 -Node: Adjusting Files289351 -Node: po/POTFILES.in291080 -Node: po/LINGUAS292325 -Node: po/Makevars293107 -Node: configure.in294693 -Node: config.guess296803 -Node: mkinstalldirs297919 -Node: aclocal298680 -Node: acconfig300318 -Node: config.h.in300804 -Node: Makefile301961 -Node: src/Makefile304542 -Node: lib/gettext.h307557 -Node: autoconf macros309782 -Node: AM_GNU_GETTEXT310352 -Node: AM_GNU_GETTEXT_VERSION314081 -Node: AM_ICONV314511 -Node: CVS Issues316705 -Node: Distributed CVS317259 -Node: Files under CVS319173 -Node: autopoint Invocation321731 -Node: Programming Languages323533 -Node: Language Implementors324354 -Node: Programmers for other Languages329180 -Node: Translators for other Languages329746 -Node: c-format330834 -Node: python-format331345 -Node: lisp-format331771 -Node: elisp-format332086 -Node: librep-format332565 -Node: smalltalk-format332957 -Node: java-format333446 -Node: awk-format333878 -Node: object-pascal-format334188 -Node: ycp-format334404 -Node: tcl-format334790 -Node: php-format335071 -Node: Maintainers for other Languages335394 -Node: List of Programming Languages336621 -Node: C337744 -Node: sh338809 -Node: bash339435 -Node: Python340120 -Node: Common Lisp341182 -Node: clisp C341896 -Node: Emacs Lisp342618 -Node: librep343324 -Node: Smalltalk343975 -Node: Java344917 -Node: gawk347587 -Node: Pascal348414 -Node: wxWindows349630 -Node: YCP350364 -Node: Tcl351023 -Node: Perl352326 -Node: PHP352944 -Node: Pike353724 -Node: List of Data Formats354350 -Node: POT354809 -Node: RST355053 -Node: Glade355265 -Node: Conclusion355543 -Node: History356043 -Node: References360145 -Node: Language Codes361700 -Node: Country Codes365639 -Node: Program Index371359 -Node: Option Index372723 -Node: Variable Index399192 -Node: PO Mode Index400294 -Node: Autoconf Macro Index409652 -Node: Index409975 - -End Tag Table diff --git a/doc/gettext.info-1 b/doc/gettext.info-1 deleted file mode 100644 index 22cc54a..0000000 --- a/doc/gettext.info-1 +++ /dev/null @@ -1,1060 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) - -GNU `gettext' utilities -*********************** - - This manual document the GNU gettext tools and the GNU libintl -library, version 0.11.6-pre2. - -* Menu: - -* Introduction:: Introduction -* Basics:: PO Files and PO Mode Basics -* Sources:: Preparing Program Sources -* Template:: Making the PO Template File -* Creating:: Creating a New PO File -* Updating:: Updating Existing PO Files -* Manipulating:: Manipulating PO Files -* Binaries:: Producing Binary MO Files -* Users:: The User's View -* Programmers:: The Programmer's View -* Translators:: The Translator's View -* Maintainers:: The Maintainer's View -* Programming Languages:: Other Programming Languages -* Conclusion:: Concluding Remarks - -* Language Codes:: ISO 639 language codes -* Country Codes:: ISO 3166 country codes - -* Program Index:: Index of Programs -* Option Index:: Index of Command-Line Options -* Variable Index:: Index of Environment Variables -* PO Mode Index:: Index of Emacs PO Mode Commands -* Autoconf Macro Index:: Index of Autoconf Macros -* Index:: General Index - - --- The Detailed Node Listing --- - -Introduction - -* Why:: The Purpose of GNU `gettext' -* Concepts:: I18n, L10n, and Such -* Aspects:: Aspects in Native Language Support -* Files:: Files Conveying Translations -* Overview:: Overview of GNU `gettext' - -PO Files and PO Mode Basics - -* Installation:: Completing GNU `gettext' Installation -* PO Files:: The Format of PO Files -* Main PO Commands:: Main Commands -* Entry Positioning:: Entry Positioning -* Normalizing:: Normalizing Strings in Entries - -Preparing Program Sources - -* Triggering:: Triggering `gettext' Operations -* Preparing Strings:: Preparing Translatable Strings -* Mark Keywords:: How Marks Appear in Sources -* Marking:: Marking Translatable Strings -* c-format Flag:: Telling something about the following string -* Special cases:: Special Cases of Translatable Strings - -Making the PO Template File - -* xgettext Invocation:: Invoking the `xgettext' Program - -Creating a New PO File - -* msginit Invocation:: Invoking the `msginit' Program -* Header Entry:: Filling in the Header Entry - -Updating Existing PO Files - -* msgmerge Invocation:: Invoking the `msgmerge' Program -* Translated Entries:: Translated Entries -* Fuzzy Entries:: Fuzzy Entries -* Untranslated Entries:: Untranslated Entries -* Obsolete Entries:: Obsolete Entries -* Modifying Translations:: Modifying Translations -* Modifying Comments:: Modifying Comments -* Subedit:: Mode for Editing Translations -* C Sources Context:: C Sources Context -* Auxiliary:: Consulting Auxiliary PO Files -* Compendium:: Using Translation Compendia - -Using Translation Compendia - -* Creating Compendia:: Merging translations for later use -* Using Compendia:: Using older translations if they fit - -Manipulating PO Files - -* msgcat Invocation:: Invoking the `msgcat' Program -* msgconv Invocation:: Invoking the `msgconv' Program -* msggrep Invocation:: Invoking the `msggrep' Program -* msgfilter Invocation:: Invoking the `msgfilter' Program -* msguniq Invocation:: Invoking the `msguniq' Program -* msgcomm Invocation:: Invoking the `msgcomm' Program -* msgcmp Invocation:: Invoking the `msgcmp' Program -* msgattrib Invocation:: Invoking the `msgattrib' Program -* msgen Invocation:: Invoking the `msgen' Program -* msgexec Invocation:: Invoking the `msgexec' Program - -Producing Binary MO Files - -* msgfmt Invocation:: Invoking the `msgfmt' Program -* msgunfmt Invocation:: Invoking the `msgunfmt' Program -* MO Files:: The Format of GNU MO Files - -The User's View - -* Matrix:: The Current `ABOUT-NLS' Matrix -* Installers:: Magic for Installers -* End Users:: Magic for End Users - -The Programmer's View - -* catgets:: About `catgets' -* gettext:: About `gettext' -* Comparison:: Comparing the two interfaces -* Using libintl.a:: Using libintl.a in own programs -* gettext grok:: Being a `gettext' grok -* Temp Programmers:: Temporary Notes for the Programmers Chapter - -About `catgets' - -* Interface to catgets:: The interface -* Problems with catgets:: Problems with the `catgets' interface?! - -About `gettext' - -* Interface to gettext:: The interface -* Ambiguities:: Solving ambiguities -* Locating Catalogs:: Locating message catalog files -* Charset conversion:: How to request conversion to Unicode -* Plural forms:: Additional functions for handling plurals -* GUI program problems:: Another technique for solving ambiguities -* Optimized gettext:: Optimization of the *gettext functions - -Temporary Notes for the Programmers Chapter - -* Temp Implementations:: Temporary - Two Possible Implementations -* Temp catgets:: Temporary - About `catgets' -* Temp WSI:: Temporary - Why a single implementation -* Temp Notes:: Temporary - Notes - -The Translator's View - -* Trans Intro 0:: Introduction 0 -* Trans Intro 1:: Introduction 1 -* Discussions:: Discussions -* Organization:: Organization -* Information Flow:: Information Flow - -Organization - -* Central Coordination:: Central Coordination -* National Teams:: National Teams -* Mailing Lists:: Mailing Lists - -National Teams - -* Sub-Cultures:: Sub-Cultures -* Organizational Ideas:: Organizational Ideas - -The Maintainer's View - -* Flat and Non-Flat:: Flat or Non-Flat Directory Structures -* Prerequisites:: Prerequisite Works -* gettextize Invocation:: Invoking the `gettextize' Program -* Adjusting Files:: Files You Must Create or Alter -* autoconf macros:: Autoconf macros for use in `configure.in' -* CVS Issues:: Integrating with CVS - -Files You Must Create or Alter - -* po/POTFILES.in:: `POTFILES.in' in `po/' -* po/LINGUAS:: `LINGUAS' in `po/' -* po/Makevars:: `Makefile' pieces in `po/' -* configure.in:: `configure.in' at top level -* config.guess:: `config.guess', `config.sub' at top level -* mkinstalldirs:: `mkinstalldirs' at top level -* aclocal:: `aclocal.m4' at top level -* acconfig:: `acconfig.h' at top level -* config.h.in:: `config.h.in' at top level -* Makefile:: `Makefile.in' at top level -* src/Makefile:: `Makefile.in' in `src/' -* lib/gettext.h:: `gettext.h' in `lib/' - -Autoconf macros for use in `configure.in' - -* AM_GNU_GETTEXT:: AM_GNU_GETTEXT in `gettext.m4' -* AM_GNU_GETTEXT_VERSION:: AM_GNU_GETTEXT_VERSION in `gettext.m4' -* AM_ICONV:: AM_ICONV in `iconv.m4' - -Integrating with CVS - -* Distributed CVS:: Avoiding version mismatch in distributed development -* Files under CVS:: Files to put under CVS version control -* autopoint Invocation:: Invoking the `autopoint' Program - -Other Programming Languages - -* Language Implementors:: The Language Implementor's View -* Programmers for other Languages:: The Programmer's View -* Translators for other Languages:: The Translator's View -* Maintainers for other Languages:: The Maintainer's View -* List of Programming Languages:: Individual Programming Languages -* List of Data Formats:: Internationalizable Data - -The Translator's View - -* c-format:: C Format Strings -* python-format:: Python Format Strings -* lisp-format:: Lisp Format Strings -* elisp-format:: Emacs Lisp Format Strings -* librep-format:: librep Format Strings -* smalltalk-format:: Smalltalk Format Strings -* java-format:: Java Format Strings -* awk-format:: awk Format Strings -* object-pascal-format:: Object Pascal Format Strings -* ycp-format:: YCP Format Strings -* tcl-format:: Tcl Format Strings -* php-format:: PHP Format Strings - -Individual Programming Languages - -* C:: C, C++, Objective C -* sh:: sh - Shell Script -* bash:: bash - Bourne-Again Shell Script -* Python:: Python -* Common Lisp:: GNU clisp - Common Lisp -* clisp C:: GNU clisp C sources -* Emacs Lisp:: Emacs Lisp -* librep:: librep -* Smalltalk:: GNU Smalltalk -* Java:: Java -* gawk:: GNU awk -* Pascal:: Pascal - Free Pascal Compiler -* wxWindows:: wxWindows library -* YCP:: YCP - YaST2 scripting language -* Tcl:: Tcl - Tk's scripting language -* Perl:: Perl -* PHP:: PHP Hypertext Preprocessor -* Pike:: Pike - -Internationalizable Data - -* POT:: POT - Portable Object Template -* RST:: Resource String Table -* Glade:: Glade - GNOME user interface description - -Concluding Remarks - -* History:: History of GNU `gettext' -* References:: Related Readings - - -File: gettext.info, Node: Introduction, Next: Basics, Prev: Top, Up: Top - -Introduction -************ - - This manual is still in _DRAFT_ state. Some sections are still - empty, or almost. We keep merging material from other sources - (essentially e-mail folders) while the proper integration of this - material is delayed. - - In this manual, we use _he_ when speaking of the programmer or -maintainer, _she_ when speaking of the translator, and _they_ when -speaking of the installers or end users of the translated program. -This is only a convenience for clarifying the documentation. It is -_absolutely_ not meant to imply that some roles are more appropriate to -males or females. Besides, as you might guess, GNU `gettext' is meant -to be useful for people using computers, whatever their sex, race, -religion or nationality! - - This chapter explains the goals sought in the creation of GNU -`gettext' 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 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. - - Please send suggestions and corrections to: - - Internet address: - bug-gnu-gettext@gnu.org - -Please include the manual's edition number and update date in your -messages. - -* Menu: - -* Why:: The Purpose of GNU `gettext' -* Concepts:: I18n, L10n, and Such -* Aspects:: Aspects in Native Language Support -* Files:: Files Conveying Translations -* Overview:: Overview of GNU `gettext' - - -File: gettext.info, Node: Why, Next: Concepts, Prev: Introduction, Up: Introduction - -The Purpose of GNU `gettext' -============================ - - 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 commercial 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 _love_ to -see their computer screen showing a lot less of English, and far more -of their own language. - - 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. - - GNU `gettext' 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 `gettext' -utilities are a set of tools that provides a framework within which -other free packages may produce multi-lingual messages. These tools -include - - * A set of conventions about how programs should be written to - support message catalogs. - - * A directory and file naming organization for the message catalogs - themselves. - - * A runtime library supporting the retrieval of translated messages. - - * A few stand-alone programs to massage in various ways the sets of - translatable strings, or already translated strings. - - * A special mode for Emacs(1) which helps preparing these sets and - bringing them up to date. - - GNU `gettext' 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. - - The Translation Project also uses the GNU `gettext' distribution as -a vehicle for documenting its structure and methods. This goes beyond -the strict technicalities of documenting the GNU `gettext' 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 `gettext' is related to the -remainder of the Translation Project, and consequently, have a glimpse -at the _big picture_. - - ---------- Footnotes ---------- - - (1) 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. - - -File: gettext.info, Node: Concepts, Next: Aspects, Prev: Why, Up: Introduction - -I18n, L10n, and Such -==================== - - 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 -_internationalization_ and _localization_. Many people, tired of -writing these long words over and over again, took the habit of writing -"i18n" and "l10n" 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... - - By "internationalization", 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 `gettext' offers one of these standards. *Note -Programmers::. - - By "localization", 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 "locale" 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. - - 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 "accessing the locale routines", they are referring to the complete -suite of routines that access all of the locale's information. - - One uses the expression "Native Language Support", 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. - - 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. - - -File: gettext.info, Node: Aspects, Next: Files, Prev: Concepts, Up: Introduction - -Aspects in Native Language Support -================================== - - For a totally multi-lingual distribution, there are many things to -translate beyond output messages. - - * As of today, GNU `gettext' 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. - - * Some programs, like `autoconf' or `bison', 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. - - * A few programs include textual tables which might need translation - themselves, independently of the strings contained in the program - itself. For example, RFC 1345 gives an English description for - each character which the `recode' 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. - - * 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. - - * 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 `gcc' to allow diacriticized characters in identifiers or use - translated keywords; `rm -i' might accept something else than `y' - or `n' 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. - - * 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. - - - As we already stressed, translation is only one aspect of locales. -Other internationalization aspects are system services and are handled -in GNU `libc'. 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 -"rules" are termed the country's locale. The locale represents the -knowledge needed to support the country's native attributes. - - 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 `libc' manual for details. - -_Characters and Codesets_ - 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 8859-1 code set has most of - the special characters needed to handle the major European - languages. However, in many cases, the ISO 8859-1 font is 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. - -_Currency_ - 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. - -_Dates_ - 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 8061 dates, etc. - - Time of the day may be noted as HH:MM, HH.MM, 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. - -_Numbers_ - Numbers can be represented differently in different locales. For - example, the following numbers are all written correctly for their - respective locales: - - 12,345.67 English - 12.345,67 German - 12345,67 French - 1,2345.67 Asia - - 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. - -_Messages_ - The most obvious area is the language support within a locale. - This is where GNU `gettext' provides the means for developers and - users to easily change the language that the software uses to - communicate to the user. - - Components of locale outside of message handling are standardized in -the ISO C standard and the SUSV2 specification. GNU `libc' fully -implements this, and most other modern systems provide a more or less -reasonable support for at least some of the missing components. - - -File: gettext.info, Node: Files, Next: Overview, Prev: Aspects, Up: Introduction - -Files Conveying Translations -============================ - - The letters PO in `.po' files means Portable Object, to distinguish -it from `.mo' 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. - - 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 `xgettext' program, and later updated or refreshed through the -`msgmerge' program. Program `xgettext' extracts all marked messages -from a set of C files and initializes a PO file with empty -translations. Program `msgmerge' 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 `.pot' are kind of base translation -files found in distributions, in PO file format. - - 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 `gettext'. Therefore GNU `gettext' -uses its own format for MO files. Files ending with `.gmo' are really -MO files, when it is known that these files use the GNU format. - - -File: gettext.info, Node: Overview, Prev: Files, Up: Introduction - -Overview of GNU `gettext' -========================= - - The following diagram summarizes the relation between the files -handled by GNU `gettext' 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. - - Original C Sources ---> PO mode ---> Marked C Sources ---. - | - .---------<--- GNU gettext Library | - .--- make <---+ | - | `---------<--------------------+-----------' - | | - | .-----<--- PACKAGE.pot <--- xgettext <---' .---<--- PO Compendium - | | | ^ - | | `---. | - | `---. +---> PO mode ---. - | +----> msgmerge ------> LANG.po ---->--------' | - | .---' | - | | | - | `-------------<---------------. | - | +--- New LANG.po <------------------' - | .--- LANG.gmo <--- msgfmt <---' - | | - | `---> install ---> /.../LANG/PACKAGE.mo ---. - | +---> "Hello world!" - `-------> install ---> /.../bin/PROGRAM -------' - - The indication `PO mode' appears in two places in this picture, and -you may safely read it as merely meaning "hand editing", using any -editor of your choice, really. However, 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. - - As a programmer, the first step to bringing GNU `gettext' 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. *Note Sources::, for more -information about all this. - - For newly written software the strings of course can and should be -marked while writing it. The `gettext' approach makes this very easy. -Simply put the following lines at the beginning of each file or in a -central header file: - - #define _(String) (String) - #define N_(String) String - #define textdomain(Domain) - #define bindtextdomain(Package, Directory) - -Doing this allows you to prepare the sources for internationalization. -Later when you feel ready for the step to use the `gettext' library -simply replace these definitions by the following: - - #include <libintl.h> - #define _(String) gettext (String) - #define gettext_noop(String) String - #define N_(String) gettext_noop (String) - -and link against `libintl.a' or `libintl.so'. Note that on GNU -systems, you don't need to link with `libintl' because the `gettext' -library functions are already contained in GNU libc. That is all you -have to change. - - Once the C sources have been modified, the `xgettext' program is -used to find and extract all translatable strings, and create a PO -template file out of all these. This `PACKAGE.pot' 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 `t' in `.pot' marks this as a Template PO file, not yet oriented -towards any particular language. *Note xgettext Invocation::, for more -details about how one calls the `xgettext' program. If you are -_really_ lazy, you might be interested at working a lot more right -away, and preparing the whole distribution setup (*note Maintainers::). -By doing so, you spare yourself typing the `xgettext' command, as -`make' should now generate the proper things automatically for you! - - The first time through, there is no `LANG.po' yet, so the `msgmerge' -step may be skipped and replaced by a mere copy of `PACKAGE.pot' to -`LANG.po', where LANG represents the target language. See *Note -Creating:: for details. - - 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 (*note -Translators::). 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. - - While adding the translated messages into the `LANG.po' PO file, if -you do not have Emacs handy, you are on your own for ensuring that your -efforts fully respect the PO file format, and quoting conventions -(*note PO Files::). This is surely not an impossible task, as this is -the way many people have handled PO files already for Uniforum or -Solaris. On the other hand, by using PO mode in Emacs, most details of -PO file format are taken care of for you, but you have to acquire some -familiarity with PO mode itself. Besides main PO mode commands (*note -Main PO Commands::), you should know how to move between entries (*note -Entry Positioning::), and how to handle untranslated entries (*note -Untranslated Entries::). - - 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 (*note Compendium::). Compendium files are -meant to be exchanged between members of a given translation team. - - 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. - - 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, -`xgettext' would construct `PACKAGE.pot' files which are evolving over -time, so the translations carried by `LANG.po' are slowly fading out of -date. - - 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. - - The `msgmerge' program has the purpose of refreshing an already -existing `LANG.po' file, by comparing it with a newer `PACKAGE.pot' -template file, extracted by `xgettext' 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, -`msgmerge' comments out as obsolete, in `LANG.po', those already -translated entries which are no longer used in the program sources -(*note Obsolete Entries::). It finally discovers new strings and -inserts them in the resulting PO file as untranslated entries (*note -Untranslated Entries::). *Note msgmerge Invocation::, for more -information about what `msgmerge' really does. - - Whatever route or means taken, the goal is to obtain an updated -`LANG.po' file offering translations for all strings. - - 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. - - Once the PO file is complete and dependable, the `msgfmt' 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 (*note MO Files::). *Note msgfmt -Invocation::, for more information about all modes of execution for the -`msgfmt' program. - - Finally, the modified and marked C sources are compiled and linked -with the GNU `gettext' library, usually through the operation of -`make', given a suitable `Makefile' 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 (*note End Users::), the -program should localize itself automatically, whenever it executes. - - The remainder of this manual has the purpose of explaining in depth -the various steps outlined above. - - -File: gettext.info, Node: Basics, Next: Sources, Prev: Introduction, Up: Top - -PO Files and PO Mode Basics -*************************** - - The GNU `gettext' toolset helps programmers and translators at -producing, updating and using translation files, mainly those PO files -which are textual, editable files. This chapter stresses the format of -PO files, and contains a PO mode starter. PO mode description is -spread throughout this manual instead of being concentrated in one -place. Here we present only the basics of PO mode. - -* Menu: - -* Installation:: Completing GNU `gettext' Installation -* PO Files:: The Format of PO Files -* Main PO Commands:: Main Commands -* Entry Positioning:: Entry Positioning -* Normalizing:: Normalizing Strings in Entries - - -File: gettext.info, Node: Installation, Next: PO Files, Prev: Basics, Up: Basics - -Completing GNU `gettext' Installation -===================================== - - Once you have received, unpacked, configured and compiled the GNU -`gettext' distribution, the `make install' command puts in place the -programs `xgettext', `msgfmt', `gettext', and `msgmerge', 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. - - During the installation of the PO mode, you might want to modify your -file `.emacs', once and for all, so it contains a few lines looking -like: - - (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) - - Later, whenever you edit some `.po' file, or any file having the -string `.po.' within its name, Emacs loads `po-mode.elc' (or -`po-mode.el') as needed, and automatically activates PO mode commands -for the associated buffer. The string _PO_ 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. - - 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: - - (modify-coding-system-alist 'file "\\.po\\'\\|\\.po\\." - 'po-find-file-coding-system) - (autoload 'po-find-file-coding-system "po-mode") - -to your `.emacs' file. If, with this, you still see boxes instead of -international characters, try a different font set (via Shift Mouse -button 1). - - -File: gettext.info, Node: PO Files, Next: Main PO Commands, Prev: Installation, Up: Basics - -The Format of PO Files -====================== - - 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 "entry" has the following schematic structure: - - WHITE-SPACE - # TRANSLATOR-COMMENTS - #. AUTOMATIC-COMMENTS - #: REFERENCE... - #, FLAG... - msgid UNTRANSLATED-STRING - msgstr TRANSLATED-STRING - - 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. - - A simple entry can look like this: - - #: lib/error.c:116 - msgid "Unknown system error" - msgstr "Error desconegut del sistema" - - Entries begin with some optional white space. Usually, when -generated through GNU `gettext' tools, there is exactly one blank line -between entries. Then comments follow, on lines all starting with the -character `#'. There are two kinds of comments: those which have some -white space immediately following the `#', which comments are created -and maintained exclusively by the translator, and those which have some -non-white character just after the `#', which comments are created and -maintained automatically by GNU `gettext' tools. All comments, of -either kind, are optional. - - 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 `msgid', and the translation, by `msgstr'. -The two strings, untranslated and translated, are quoted in various -ways in the PO file, using `"' delimiters and `\' 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. - - The `msgid' strings, as well as automatic comments, are produced and -managed by other GNU `gettext' 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 `msgstr' string, as well as translator comments, are really -meant for the translator, and PO mode gives her the full control she -needs. - - The comment lines beginning with `#,' are special because they are -not completely ignored by the programs as comments generally are. The -comma separated list of FLAGs is used by the `msgfmt' program to give -the user some better diagnostic messages. Currently there are two -forms of flags defined: - -`fuzzy' - This flag can be generated by the `msgmerge' program or it can be - inserted by the translator herself. It shows that the `msgstr' - 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 `fuzzy' attribute. The - `msgmerge' program inserts this when it combined the `msgid' and - `msgstr' entries after fuzzy search only. *Note Fuzzy Entries::. - -`c-format' -`no-c-format' - These flags should not be added by a human. Instead only the - `xgettext' program adds them. In an automated PO file processing - system as proposed here the user changes would be thrown away - again as soon as the `xgettext' program generates a new template - file. - - In case the `c-format' flag is given for a string the `msgfmt' - does some more tests to check to validity of the translation. - *Note msgfmt Invocation::. - - A different kind of entries is used for translations which involve -plural forms. - - WHITE-SPACE - # TRANSLATOR-COMMENTS - #. AUTOMATIC-COMMENTS - #: REFERENCE... - #, FLAG... - msgid UNTRANSLATED-STRING-SINGULAR - msgid_plural UNTRANSLATED-STRING-PLURAL - msgstr[0] TRANSLATED-STRING-CASE-0 - ... - msgstr[N] TRANSLATED-STRING-CASE-N - - Such an entry can look like this: - - #: 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" - - 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 PO mode is unable to take action on those lines. By using the PO -mode function `M-x po-normalize', the translator may get rid of those -spurious lines. *Note Normalizing::. - - The remainder of this section may be safely skipped by those using -PO mode, 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 not -having Emacs handy should carefully continue reading on. - - Each of UNTRANSLATED-STRING and TRANSLATED-STRING 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: - - 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" - -In this example, the empty string is used on the first line, to allow -better alignment of the `H' from the word `Here' over the `f' from the -word `for'. In this example, the `msgid' 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 `msgid' 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 -`Here' was promoted on the first line, right after `msgid'.(1) It was -not really necessary either to switch between the two last quoted -strings immediately after the newline `\n', the switch could have -occurred after _any_ other character, we just did it this way because -it is neater. - - One should carefully distinguish between end of lines marked as `\n' -_inside_ 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. - - Outside strings, white lines and comments may be used freely. -Comments start at the beginning of a line with `#' and extend until the -end of the PO file line. Comments written by translators should have -the initial `#' immediately followed by some white space. If the `#' -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 `msgmerge'. - - ---------- Footnotes ---------- - - (1) This limitation is not imposed by GNU `gettext', but is for -compatibility with the `msgfmt' implementation on Solaris. - diff --git a/doc/gettext.info-10 b/doc/gettext.info-10 deleted file mode 100644 index 5fafd45..0000000 --- a/doc/gettext.info-10 +++ /dev/null @@ -1,344 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: Index, Prev: Autoconf Macro Index, Up: Top - -General Index -************* - -* Menu: - -* _, a macro to mark strings for translation: Mark Keywords. -* _nl_msg_cat_cntr: gettext grok. -* ABOUT-NLS file: Matrix. -* acconfig.h file: acconfig. -* accumulating translations: Creating Compendia. -* aclocal.m4 file: aclocal. -* adding keywords, xgettext: xgettext Invocation. -* ambiguities: Preparing Strings. -* apply a filter to translations: msgfilter Invocation. -* apply command to all translations in a catalog: msgexec Invocation. -* attribute manipulation: msgattrib Invocation. -* attribute, fuzzy: Fuzzy Entries. -* attributes of a PO file entry: Fuzzy Entries. -* attributes, manipulating: Manipulating. -* autoconf macros for gettext: autoconf macros. -* autopoint program, usage: autopoint Invocation. -* auxiliary PO file: Auxiliary. -* available translations: Matrix. -* awk: gawk. -* backup old file, and msgmerge program: msgmerge Invocation. -* bash: bash. -* bibliography: References. -* big picture: Overview. -* bind_textdomain_codeset: Charset conversion. -* bug report address: Introduction. -* C and C-like languages: C. -* C trigraphs: xgettext Invocation. -* c-format flag: PO Files. -* c-format, and xgettext: c-format Flag. -* catalog encoding and msgexec output: msgexec Invocation. -* catclose, a catgets function: Interface to catgets. -* catgets, a catgets function: Interface to catgets. -* catgets, X/Open specification: catgets. -* catopen, a catgets function: Interface to catgets. -* character encoding: Aspects. -* charset conversion at runtime: Charset conversion. -* charset of PO files: Header Entry. -* check format strings: msgfmt Invocation. -* checking of translations: Manipulating. -* clisp: Common Lisp. -* clisp C sources: clisp C. -* codeset: Aspects. -* comments in PO files: PO Files. -* Common Lisp: Common Lisp. -* compare PO files: msgcmp Invocation. -* comparison of interfaces: Comparison. -* compatibility with X/Open msgfmt: msgfmt Invocation. -* compendium: Compendium. -* compendium, creating: Creating Compendia. -* concatenate PO files: msgcat Invocation. -* concatenating PO files into a compendium: Creating Compendia. -* concatenation of strings: Preparing Strings. -* config.h.in file: config.h.in. -* convert binary message catalog into PO file: msgunfmt Invocation. -* convert translations to a different encoding: msgconv Invocation. -* converting a package to use gettext: Prerequisites. -* country codes: Country Codes. -* create new PO file: msginit Invocation. -* creating a new PO file: Creating. -* creating compendia: Creating Compendia. -* currency symbols: Aspects. -* date format: Aspects. -* dcngettext: Plural forms. -* debugging messages marked as format strings: xgettext Invocation. -* dialect: Manipulating. -* disabling NLS: lib/gettext.h. -* dngettext: Plural forms. -* domain ambiguities: Ambiguities. -* duplicate elimination: Manipulating. -* duplicate removal: msguniq Invocation. -* editing comments in PO files: Modifying Comments. -* editing translations: Modifying Translations. -* Emacs Lisp: Emacs Lisp. -* encoding: Aspects. -* encoding conversion: Manipulating. -* encoding conversion at runtime: Charset conversion. -* encoding for your language: Header Entry. -* encoding list: Header Entry. -* encoding of PO files: Header Entry. -* evolution of packages: Overview. -* extracting parts of a PO file into a compendium: Creating Compendia. -* file format, .mo: MO Files. -* file format, .po: PO Files. -* files, .po and .mo: Files. -* files, .pot: Overview. -* filter messages according to attributes: msgattrib Invocation. -* find common messages: msgcomm Invocation. -* force use of fuzzy entries: msgfmt Invocation. -* format strings: c-format Flag. -* Free Pascal: Pascal. -* fuzzy entries: Fuzzy Entries. -* fuzzy flag: PO Files. -* gawk: gawk. -* generate binary message catalog from PO file: msgfmt Invocation. -* generate translation catalog in English: msgen Invocation. -* gettext files: Adjusting Files. -* gettext installation: Installation. -* gettext interface: Interface to gettext. -* gettext vs catgets: Comparison. -* gettext, a programmer's view: gettext. -* gettext.h file: lib/gettext.h. -* gettextize program, usage: gettextize Invocation. -* GUI programs: GUI program problems. -* hash table, inside MO files: MO Files. -* he, she, and they: Introduction. -* header entry of a PO file: Header Entry. -* help option: Preparing Strings. -* history of GNU gettext: History. -* i18n: Concepts. -* importing PO files: Normalizing. -* include file libintl.h <1>: lib/gettext.h. -* include file libintl.h <2>: Comparison. -* include file libintl.h <3>: Sources. -* include file libintl.h: Overview. -* initialization: Triggering. -* initialize new PO file: msginit Invocation. -* initialize translations from a compendium: Using Compendia. -* installing gettext: Installation. -* interface to catgets: Interface to catgets. -* internationalization: Concepts. -* inttypes.h: Preparing Strings. -* ISO 3166: Country Codes. -* ISO 639: Language Codes. -* Java: Java. -* Java mode, and msgfmt program: msgfmt Invocation. -* Java mode, and msgunfmt program: msgunfmt Invocation. -* Java, string concatenation: Preparing Strings. -* keyboard accelerator checking: msgfmt Invocation. -* l10n: Concepts. -* language codes: Language Codes. -* language selection: End Users. -* language selection at runtime: gettext grok. -* large package: Ambiguities. -* libiconv library: AM_ICONV. -* libintl for Java: Java. -* libintl library: AM_GNU_GETTEXT. -* librep Lisp: librep. -* LINGUAS file: po/LINGUAS. -* link with libintl: Overview. -* Linux <1>: Header Entry. -* Linux <2>: Overview. -* Linux: Aspects. -* Lisp: Common Lisp. -* list of translation teams, where to find: Header Entry. -* locale facet, LC_ALL: Triggering. -* locale facet, LC_COLLATE: Triggering. -* locale facet, LC_CTYPE <1>: Triggering. -* locale facet, LC_CTYPE: Aspects. -* locale facet, LC_MESSAGES <1>: Triggering. -* locale facet, LC_MESSAGES: Aspects. -* locale facet, LC_MONETARY <1>: Triggering. -* locale facet, LC_MONETARY: Aspects. -* locale facet, LC_NUMERIC <1>: Triggering. -* locale facet, LC_NUMERIC: Aspects. -* locale facet, LC_RESPONSES: Triggering. -* locale facet, LC_TIME <1>: Triggering. -* locale facet, LC_TIME: Aspects. -* locale facets: Aspects. -* locale program: Header Entry. -* localization: Concepts. -* magic signature of MO files: MO Files. -* Makevars file: po/Makevars. -* manipulating PO files: Manipulating. -* marking string initializers: Special cases. -* marking strings that require translation: Mark Keywords. -* marking strings, preparations: Preparing Strings. -* marking translatable strings: Overview. -* menu entries: GUI program problems. -* menu, keyboard accelerator support: msgfmt Invocation. -* merge PO files: msgcat Invocation. -* merging two PO files: Manipulating. -* message catalog files location: Locating Catalogs. -* messages: Aspects. -* migration from earlier versions of gettext: Prerequisites. -* mkinstalldirs file: mkinstalldirs. -* mnemonics of menu entries: msgfmt Invocation. -* MO file's format: MO Files. -* modify message attrributes: msgattrib Invocation. -* msgattrib program, usage: msgattrib Invocation. -* msgcat program, usage: msgcat Invocation. -* msgcmp program, usage: msgcmp Invocation. -* msgcomm program, usage: msgcomm Invocation. -* msgconv program, usage: msgconv Invocation. -* msgen program, usage: msgen Invocation. -* msgexec program, usage: msgexec Invocation. -* msgfilter filter and catalog encoding: msgfilter Invocation. -* msgfilter program, usage: msgfilter Invocation. -* msgfmt program, usage: msgfmt Invocation. -* msggrep program, usage: msggrep Invocation. -* msgid: PO Files. -* msgid_plural: PO Files. -* msginit program, usage: msginit Invocation. -* msgmerge program, usage: msgmerge Invocation. -* msgstr: PO Files. -* msgunfmt program, usage: msgunfmt Invocation. -* msguniq program, usage: msguniq Invocation. -* multi-line strings: Normalizing. -* N_, a convenience macro: Comparison. -* Native Language Support: Concepts. -* Natural Language Support: Concepts. -* newlines in PO files: PO Files. -* ngettext: Plural forms. -* NLS: Concepts. -* no-c-format flag: PO Files. -* no-c-format, and xgettext: c-format Flag. -* nplurals, in a PO file header: Plural forms. -* number format: Aspects. -* Object Pascal: Pascal. -* obsolete entries: Obsolete Entries. -* optimization of gettext functions: Optimized gettext. -* orthography: Manipulating. -* output to stdout, xgettext: xgettext Invocation. -* overview of gettext: Overview. -* package and version declaration in configure.in: configure.in. -* package build and installation options: Installers. -* package maintainer's view of gettext: Maintainers. -* paragraphs: Preparing Strings. -* Pascal: Pascal. -* Perl: Perl. -* PHP: PHP. -* Pike: Pike. -* plural form formulas: Plural forms. -* plural forms: Plural forms. -* plural forms, in MO files: MO Files. -* plural forms, in PO files: PO Files. -* plural, in a PO file header: Plural forms. -* PO files' format: PO Files. -* PO mode (Emacs) commands: Main PO Commands. -* PO template file: Template. -* portability problems with sed: msgfilter Invocation. -* POTFILES.in file: po/POTFILES.in. -* preparing programs for translation: Sources. -* problems with catgets interface: Problems with catgets. -* programming languages: Language Implementors. -* Python: Python. -* quotation marks <1>: po/Makevars. -* quotation marks: Header Entry. -* quote characters, use in PO files: Header Entry. -* related reading: References. -* RST: RST. -* scripting languages: Language Implementors. -* search messages in a catalog: msggrep Invocation. -* selecting message language: End Users. -* sentences: Preparing Strings. -* setting up gettext at build time: Installers. -* setting up gettext at run time: End Users. -* several domains: Ambiguities. -* sex: Introduction. -* sgettext: GUI program problems. -* she, he, and they: Introduction. -* shell scripts: sh. -* Smalltalk: Smalltalk. -* sorting msgcat output: msgcat Invocation. -* sorting msgmerge output: msgmerge Invocation. -* sorting msgunfmt output: msgunfmt Invocation. -* sorting output of xgettext: xgettext Invocation. -* specifying plural form in a PO file: Plural forms. -* standard output, and msgcat: msgcat Invocation. -* standard output, and msgmerge program: msgmerge Invocation. -* string concatenation: Preparing Strings. -* string normalization in entries: Normalizing. -* style: Preparing Strings. -* supported languages, xgettext: xgettext Invocation. -* Tcl: Tcl. -* Tcl mode, and msgfmt program: msgfmt Invocation. -* Tcl mode, and msgunfmt program: msgunfmt Invocation. -* template PO file: Overview. -* testing .po files for equivalence: xgettext Invocation. -* Tk's scripting language: Tcl. -* translated entries: Translated Entries. -* translating menu entries: GUI program problems. -* translation aspects: Aspects. -* Translation Matrix: Matrix. -* Translation Project: Why. -* turning off NLS support: lib/gettext.h. -* tutorial of gettext usage: Overview. -* unify duplicate translations: msguniq Invocation. -* untranslated entries: Untranslated Entries. -* update translations from a compendium: Using Compendia. -* upgrading to new versions of gettext: Prerequisites. -* version control for backup files, msgmerge: msgmerge Invocation. -* wxWindows library: wxWindows. -* xargs, and output from msgexec: msgexec Invocation. -* xgettext program, usage: xgettext Invocation. -* xmodmap program, and typing quotation marks: Header Entry. -* YaST2 scripting language: YCP. -* YCP: YCP. - - diff --git a/doc/gettext.info-2 b/doc/gettext.info-2 deleted file mode 100644 index 7654c16..0000000 --- a/doc/gettext.info-2 +++ /dev/null @@ -1,1031 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: Main PO Commands, Next: Entry Positioning, Prev: PO Files, Up: Basics - -Main PO mode Commands -===================== - - After setting up Emacs with something similar to the lines in *Note -Installation::, 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 `po-mode-hook', if any, -will be executed. - - When PO mode is active in a window, the letters `PO' 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 -`132t+3f+10u+2o' would tell the translator that the PO mode contains -132 translated entries (*note Translated Entries::, 3 fuzzy entries -(*note Fuzzy Entries::), 10 untranslated entries (*note Untranslated -Entries::) and 2 obsolete entries (*note Obsolete Entries::). -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 `145t' for the counters. - - 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. - -`_' - Undo last modification to the PO file (`po-undo'). - -`Q' - Quit processing and save the PO file (`po-quit'). - -`q' - Quit processing, possibly after confirmation - (`po-confirm-and-quit'). - -`0' - Temporary leave the PO file window (`po-other-window'). - -`?' -`h' - Show help about PO mode (`po-help'). - -`=' - Give some PO file statistics (`po-statistics'). - -`V' - Batch validate the format of the whole PO file (`po-validate'). - - The command `_' (`po-undo') interfaces to the Emacs _undo_ facility. -*Note Undoing Changes: (emacs)Undo. Each time `U' 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 `<RET>' 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. - - The commands `Q' (`po-quit') and `q' (`po-confirm-and-quit') 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 -`C-x k' (`kill-buffer') is not the tidiest way to proceed. - - The command `0' (`po-other-window') 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 _he_) 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. - - The command `h' (`po-help') displays a summary of all available PO -mode commands. The translator should then type any character to resume -normal PO mode operations. The command `?' has the same effect as `h'. - - The command `=' (`po-statistics') 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. - - The command `V' (`po-validate') launches `msgfmt' in checking and -verbose mode over the current PO file. This command first offers to -save the current PO file on disk. The `msgfmt' tool, from GNU -`gettext', 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. - - The program `msgfmt' runs asynchronously with Emacs, so the -translator regains control immediately while her PO file is being -studied. Error output is collected in the Emacs `*compilation*' buffer, -displayed in another window. The regular Emacs command `C-x`' -(`next-error'), 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. - - -File: gettext.info, Node: Entry Positioning, Next: Normalizing, Prev: Main PO Commands, Up: Basics - -Entry Positioning -================= - - 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. - - 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 `C-h m'): - -`.' - Redisplay the current entry (`po-current-entry'). - -`n' - Select the entry after the current one (`po-next-entry'). - -`p' - Select the entry before the current one (`po-previous-entry'). - -`<' - Select the first entry in the PO file (`po-first-entry'). - -`>' - Select the last entry in the PO file (`po-last-entry'). - -`m' - Record the location of the current entry for later use - (`po-push-location'). - -`r' - Return to a previously saved entry location (`po-pop-location'). - -`x' - Exchange the current entry location with the previously saved one - (`po-exchange-location'). - - 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 `.' (`po-current-entry') 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. - - 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 _thinking_ about how _others_ should do translation. - - The commands `n' (`po-next-entry') and `p' (`po-previous-entry') -move the cursor the entry following, or preceding, the current one. If -`n' is given while the cursor is on the last entry of the PO file, or -if `p' is given while the cursor is on the first entry, no move is done. - - The commands `<' (`po-first-entry') and `>' (`po-last-entry') 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 `After last entry'. Moreover, the -commands `<' and `>' 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. -*Note Marking::. - - 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. - - PO mode offers another approach, by which cursor locations may be -saved onto a special stack. The command `m' (`po-push-location') -merely adds the location of current entry to the stack, pushing the -already saved locations under the new one. The command `r' -(`po-pop-location') 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 `r' will move the cursor to the previously -saved location, and so on until no locations remain on the stack. - - 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 `m' immediately after `r'. - - The command `x' (`po-exchange-location') 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 `x' command -toggles alternatively between two entries. For achieving this, the -translator will position the cursor on the first entry, use `m', then -position to the second entry, and merely use `x' for making the switch. - - -File: gettext.info, Node: Normalizing, Prev: Entry Positioning, Up: Basics - -Normalizing Strings in Entries -============================== - - 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 `msgid' 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. - - A conventional representation of strings in a PO file is currently -under discussion, and PO mode experiments with a canonical -representation. Having both `xgettext' 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 `xgettext' from GNU `gettext'. An explicit PO -mode normalization should then be only necessary for PO files imported -from elsewhere, or for when the convention itself evolves. - - 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: - -`M-x po-normalize' - Tidy the whole PO file by making entries more uniform. - - The special command `M-x po-normalize', 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 `msgid' string lookup for some other PO mode commands. - - `M-x po-normalize' presently makes three passes over the entries. -The first implements heuristics for converting PO files for GNU -`gettext' 0.6 and earlier, in which `msgid' and `msgstr' fields were -using K&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 -`msgid' and `msgstr' strings respectively. They also clean out those -trailing backslashes used by XView's `msgfmt' for continued lines. - - 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 `gettext' 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. - - Right now, in PO mode, strings are single line or multi-line. A -string goes multi-line if and only if it has _embedded_ newlines, that -is, if it matches `[^\n]\n+[^\n]'. So, we would have: - - msgstr "\n\nHello, world!\n\n\n" - - but, replacing the space by a newline, this becomes: - - msgstr "" - "\n" - "\n" - "Hello,\n" - "world!\n" - "\n" - "\n" - - 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 N > 1, the N-1'th last -newlines would go together on a separate string), so making the -previous example appear: - - msgstr "\n\n" - "Hello,\n" - "world!\n" - "\n\n" - - There are a few yet undecided little points about string -normalization, to be documented in this manual, once these questions -settle. - - -File: gettext.info, Node: Sources, Next: Template, Prev: Basics, Up: Top - -Preparing Program Sources -************************* - - 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 `gettext' when the program -initializes, usually from the `main' function. Last, you should -identify and especially mark all constant strings in your program -needing translation. - - Presuming that your set of programs, or package, has been adjusted -so all needed GNU `gettext' files are available, and your `Makefile' -files are adjusted (*note Maintainers::), each C module having -translated C strings should contain the line: - - #include <libintl.h> - - The remaining changes to your C sources are discussed in the further -sections of this chapter. - -* Menu: - -* Triggering:: Triggering `gettext' Operations -* Preparing Strings:: Preparing Translatable Strings -* Mark Keywords:: How Marks Appear in Sources -* Marking:: Marking Translatable Strings -* c-format Flag:: Telling something about the following string -* Special cases:: Special Cases of Translatable Strings - - -File: gettext.info, Node: Triggering, Next: Preparing Strings, Prev: Sources, Up: Sources - -Triggering `gettext' Operations -=============================== - - The initialization of locale data should be done with more or less -the same code in every program, as demonstrated below: - - int - main (argc, argv) - int argc; - char argv; - { - ... - setlocale (LC_ALL, ""); - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); - ... - } - - PACKAGE and LOCALEDIR should be provided either by `config.h' or by -the Makefile. For now consult the `gettext' or `hello' sources for -more information. - - The use of `LC_ALL' might not be appropriate for you. `LC_ALL' -includes all locale categories and especially `LC_CTYPE'. This later -category is responsible for determining character classes with the -`isalnum' etc. functions from `ctype.h' 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 c, (c-cedilla -character) is runnable in France but not in the U.S. - - Some systems also have problems with parsing numbers using the -`scanf' functions if an other but the `LC_ALL' locale is used. The -standards say that additional formats but the one known in the `"C"' -locale might be recognized. But some systems seem to reject numbers in -the `"C"' 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 `"C"' 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 `'.'' which is the -same character used in the `"C"' locale to denote the decimal point. - - So it is sometimes necessary to replace the `LC_ALL' line in the -code above by a sequence of `setlocale' lines - - { - ... - setlocale (LC_CTYPE, ""); - setlocale (LC_MESSAGES, ""); - ... - } - -On all POSIX conformant systems the locale categories `LC_CTYPE', -`LC_COLLATE', `LC_MONETARY', `LC_NUMERIC', and `LC_TIME' are available. -On some modern systems there is also a locale `LC_MESSAGES' which is -called on some old, XPG2 compliant systems `LC_RESPONSES'. - - Note that changing the `LC_CTYPE' also affects the functions -declared in the `<ctype.h>' standard header. 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 `<c-ctype.h>' and `<c-ctype.c>' files in the gettext source -distribution. - - 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 `setlocale' 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. - - -File: gettext.info, Node: Preparing Strings, Next: Mark Keywords, Prev: Triggering, Up: Sources - -Preparing Translatable Strings -============================== - - 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. - - * Decent English style. - - * Entire sentences. - - * Split at paragraphs. - - * Use format strings instead of string concatenation. - -Let's look at some examples of these guidelines. - - 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. - - "%s: is parameter\n" - -This is nearly untranslatable: Is the displayed item _a_ parameter or -_the_ parameter? - - "No match" - -The ambiguity in this message makes it ununderstandable: 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"? - - In both cases, adding more words to the message will help both the -translator and the English speaking user. - - Translatable strings should be entire sentences. It is often not -possible to translate single verbs or adjectives in a substitutable way. - - printf ("File %s is %s protected", filename, rw ? "write" : "read"); - -Most translators will not look at the source and will thus only see the -string `"File %s is %s protected"', which is unintelligible. Change -this to - - printf (rw ? "File %s is write protected" : "File %s is read protected", - filename); - -This way the translator will not only understand the message, she will -also be able to find the appropriate grammatical construction. The -French translator for example translates "write protected" like -"protected against writing". - - Often sentences don't fit into a single line. If a sentence is output -using two subsequent `printf' statements, like this - - printf ("Locale charset \"%s\" is different from\n", lcharset); - printf ("input file charset \"%s\".\n", fcharset); - -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 `printf' 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): - - printf ("Locale charset \"%s\" is different from\n\ - input file charset \"%s\".\n", lcharset, fcharset); - - You may now ask: how about two or more adjacent sentences? Like in -this case: - - puts ("Apollo 13 scenario: Stack overflow handling failed."); - puts ("On the next stack overflow we will crash!!!"); - -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.) - - 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. - - Many GNU programs have a `--help' 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. - - Hardcoded string concatenation is sometimes used to construct English -strings: - - strcpy (s, "Replace "); - strcat (s, object1); - strcat (s, " with "); - strcat (s, object2); - strcat (s, "?"); - -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 `object1' and `object2', it is necessary to change this to use a -format string: - - sprintf (s, "Replace %s with %s?", object1, object2); - - A similar case is compile time concatenation of strings. The ISO C 99 -include file `<inttypes.h>' contains a macro `PRId64' that can be used -as a formatting directive for outputting an `int64_t' integer through -`printf'. 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 - - printf ("The amount is %0" PRId64 "\n", number); - -The `gettext' tools and library have special support for these -`<inttypes.h>' macros. You can therefore simply write - - printf (gettext ("The amount is %0" PRId64 "\n"), number); - -The PO file will contain the string "The amount is %0<PRId64>\n". The -translators will provide a translation containing "%0<PRId64>" as well, -and at runtime the `gettext' function's result will contain the -appropriate constant string, "d" or "ld" or "lld". - - This works only for the predefined `<inttypes.h>' macros. If you -have defined your own similar macros, let's say `MYPRId64', that are -not known to `xgettext', the solution for this problem is to change the -code like this: - - char buf1[100]; - sprintf (buf1, "%0" MYPRId64, number); - printf (gettext ("The amount is %s\n"), buf1); - - 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. - - All this applies to other programming languages as well. For -example, in Java, string contenation is very frequently used, because -it is a compiler built-in operator. Like in C, in Java, you would change - - System.out.println("Replace "+object1+" with "+object2+"?"); - -into a statement involving a format string: - - System.out.println( - MessageFormat.format("Replace {0} with {1}?", - new Object[] { object1, object2 })); - - -File: gettext.info, Node: Mark Keywords, Next: Marking, Prev: Preparing Strings, Up: Sources - -How Marks Appear in Sources -=========================== - - 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 `%s' specification in the format, while -the result from `sprintf' may have so many different instances that it -is impractical to list them all in some `error_string_out()' routine, -say. - - This marking operation has two goals. The first goal of marking is -for triggering the retrieval of the translation, at run time. The -keyword are 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. *Note Special cases::. - - The second goal of the marking operation is to help `xgettext' at -properly extracting all translatable strings when it scans a set of -program sources and produces PO file templates. - - The canonical keyword for marking translatable strings is `gettext', -it gave its name to the whole GNU `gettext' package. For packages -making only light use of the `gettext' keyword, macro or function, it -is easily used _as is_. However, for packages using the `gettext' -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. - - Many packages use `_' (a simple underline) as a keyword, and write -`_("Translatable string")' instead of `gettext ("Translatable -string")'. 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 `gettext' -uses this convention internally, it does not offer it officially. The -real, genuine keyword is truly `gettext' indeed. It is fairly easy for -those wanting to use `_' instead of `gettext' to declare: - - #include <libintl.h> - #define _(String) gettext (String) - -instead of merely using `#include <libintl.h>'. - - 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 `_()' if you -think it should be translated. `"%s: %d"' is an example of string -_not_ requiring translation! - - -File: gettext.info, Node: Marking, Next: c-format Flag, Prev: Mark Keywords, Up: Sources - -Marking Translatable Strings -============================ - - 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. - - The set of program sources, targetted 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: - - etags src/*.[hc] lib/*.[hc] - -presuming here you want to process all `.h' and `.c' files from the -`src/' and `lib/' directories. This command will explore all said -files and create a `TAGS' file in your root directory, somewhat -summarizing the contents using a special file format Emacs can -understand. - - For packages following the GNU coding standards, there is a make -goal `tags' or `TAGS' which constructs the tag files in all directories -and for all files containing source code. - - Once your `TAGS' 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. - -`,' - Search through program sources for a string which looks like a - candidate for translation (`po-tags-search'). - -`M-,' - Mark the last string found with `_()' (`po-mark-translatable'). - -`M-.' - 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 (`po-select-mark-and-mark'). - - The `,' (`po-tags-search') 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 `M-,' or `M-.'. -Otherwise, you might rather ignore it and skip to the next string by -merely repeating the `,' command. - - 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). - - If you have never told Emacs about some `TAGS' 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 `TAGS' file -by using the regular Emacs command `M-x visit-tags-table', which will -ask you to name the precise `TAGS' file you want to use. *Note Tag -Tables: (emacs)Tags. - - Each time you use the `,' command, the search resumes from where it -was left by the previous search, and goes through all program sources, -obeying the `TAGS' file, until all sources have been processed. -However, by giving a prefix argument to the command (`C-u ,'), 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. - - Using this `,' command does not prevent using of other regular Emacs -tags commands. For example, regular `tags-search' or -`tags-query-replace' commands may be used without disrupting the -independent `,' search sequence. However, as implemented, the -_initial_ `,' command (or the `,' 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. - - The `M-,' (`po-mark-translatable') command will mark the recently -found string with the `_' keyword. The `M-.' -(`po-select-mark-and-mark') 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 `M-,' or `M-.' -render some source line longer than 80 columns, forcing you to break -and re-indent this line differently. You may use the `O' 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 `,' for the next string, say. - - The `M-.' 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 _preferred_ keyword, which you may accept -by merely typing `<RET>' 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 _know_ all your possible keywords, and that it will -not accept mistyped keywords. - - If you reply `?' 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 (`C-u M-.'), 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 `M-.' commands. -Moreover, this new keyword automatically becomes the _preferred_ -keyword for later commands. By typing an already known keyword in -response to `C-u M-.', one merely changes the _preferred_ keyword and -does nothing more. - - All keywords known for `M-.' are recognized by the `,' 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 `q') and reopen it -afresh. When a PO file is newly brought up in an Emacs window, only -`gettext' and `_' are known as keywords, and `gettext' is preferred for -the `M-.' command. In fact, this is not useful to prefer `_', as this -one is already built in the `M-,' command. - - -File: gettext.info, Node: c-format Flag, Next: Special cases, Prev: Marking, Up: Sources - -Special Comments preceding Keywords -=================================== - - In C programs strings are often used within calls of functions from -the `printf' family. The special thing about these format strings is -that they can contain format specifiers introduced with `%'. Assume we -have the code - - printf (gettext ("String `%s' has %d characters\n"), s, strlen (s)); - -A possible German translation for the above string might be: - - "%d Zeichen lang ist die Zeichenkette `%s'" - - 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 `printf' don't have. -This will most probably lead to problems because now the length of the -string is regarded as the address. - - To prevent errors at runtime caused by translations the `msgfmt' -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 `-c' option has been passed to `msgfmt', `msgfmt' will give an -error and refuse to produce a MO file. Thus consequent use of `msgfmt --c' will catch the error, so that it cannot cause cause problems at -runtime. - -If the word order in the above German translation would be correct one -would have to write - - "%2$d Zeichen lang ist die Zeichenkette `%1$s'" - -The routines in `msgfmt' know about this special notation. - - Because not all strings in a program must be format strings it is not -useful for `msgfmt' to test all the strings in the `.po' file. This -might cause problems because the string might contain what looks like a -format specifier, but the string is not used in `printf'. - - Therefore the `xgettext' 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 `.po' file the entry is marked using the -`c-format' flag in the `#,' comment line (*note PO Files::). - - The careful reader now might say that this again can cause problems. -The heuristic might guess it wrong. This is true and therefore -`xgettext' 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 `gettext' keyword the `xgettext' -program finds a comment containing the words `xgettext:c-format', it -will mark the string in any case with the `c-format' flag. This kind -of comment should be used when `xgettext' 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 `gettext' -keyword, it must be before the string to be translated. - - This situation happens quite often. The `printf' function is often -called with strings which do not contain a format specifier. Of course -one would normally use `fputs' but it does happen. In this case -`xgettext' does not recognize this as a format string but what happens -if the translation introduces a valid format specifier? The `printf' -function will try to access one of the parameters but none exists -because the original code does not pass any parameters. - - `xgettext' 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 `msgfmt' might give too many warnings and -would prevent translating the `.po' file. The method to prevent this -wrong decision is similar to the one used above, only the comment to -use must contain the string `xgettext:no-c-format'. - - If a string is marked with `c-format' and this is not correct the -user can find out who is responsible for the decision. See *Note -xgettext Invocation:: to see how the `--debug' option can be used for -solving this problem. - - -File: gettext.info, Node: Special cases, Prev: c-format Flag, Up: Sources - -Special Cases of Translatable Strings -===================================== - - The attentive reader might now point out that it is not always -possible to mark translatable string with `gettext' or something like -this. Consider the following case: - - { - static const char *messages[] = { - "some very meaningful message", - "and another one" - }; - const char *string; - ... - string - = index > 1 ? "a default message" : messages[index]; - - fputs (string); - ... - } - - While it is no problem to mark the string `"a default message"' it -is not possible to mark the string initializers for `messages'. What -is to be done? We have to fulfill two tasks. First we have to mark the -strings so that the `xgettext' program (*note xgettext Invocation::) -can find them, and second we have to translate the string at runtime -before printing them. - - 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: - - #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 > 1 ? gettext ("a default message") : gettext (messages[index]); - - fputs (string); - ... - } - - Please convince yourself that the string which is written by `fputs' -is translated in any case. How to get `xgettext' know the additional -keyword `gettext_noop' is explained in *Note xgettext Invocation::. - - The above is of course not the only solution. You could also come -along with the following one: - - #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 > 1 ? gettext_noop ("a default message") : messages[index]; - - fputs (gettext (string)); - ... - } - - But this has a drawback. The programmer has to take care that he -uses `gettext_noop' for the string `"a default message"'. A use of -`gettext' could have in rare cases unpredictable results. - - 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. - - -File: gettext.info, Node: Template, Next: Creating, Prev: Sources, Up: Top - -Making the PO Template File -*************************** - - After preparing the sources, the programmer creates a PO template -file. This section explains how to use `xgettext' for this purpose. - - `xgettext' creates a file named `DOMAINNAME.po'. You should then -rename it to `DOMAINNAME.pot'. (Why doesn't `xgettext' create it under -the name `DOMAINNAME.pot' right away? The answer is: for historical -reasons. When `xgettext' was specified, the distinction between a PO -file and PO file template was fuzzy, and the suffix `.pot' wasn't in -use at that time.) - -* Menu: - -* xgettext Invocation:: Invoking the `xgettext' Program - diff --git a/doc/gettext.info-3 b/doc/gettext.info-3 deleted file mode 100644 index 18c338a..0000000 --- a/doc/gettext.info-3 +++ /dev/null @@ -1,1252 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: xgettext Invocation, Prev: Template, Up: Template - -Invoking the `xgettext' Program -=============================== - - xgettext [OPTION] [INPUTFILE] ... - - The `xgettext' program extracts translatable strings from given -input files. - -Input file location -------------------- - -`INPUTFILE ...' - Input files. - -`-f FILE' -`--files-from=FILE' - Read the names of the input files from FILE instead of getting - them from the command line. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If INPUTFILE is `-', standard input is read. - -Output file location --------------------- - -`-d NAME' -`--default-domain=NAME' - Use `NAME.po' for output (instead of `messages.po'). - -`-o FILE' -`--output=FILE' - Write output to specified file (instead of `NAME.po' or - `messages.po'). - -`-p DIR' -`--output-dir=DIR' - Output files will be placed in directory DIR. - - If the output FILE is `-' or `/dev/stdout', the output is written to -standard output. - -Choice of input file language ------------------------------ - -`-L NAME' -`--language=NAME' - Specifies the language of the input files. The supported languages - are `C', `C++', `ObjectiveC', `PO', `Python', `Lisp', `EmacsLisp', - `librep', `Smalltalk', `Java', `awk', `YCP', `Tcl', `PHP', `RST', - `Glade'. - -`-C' -`--c++' - This is a shorthand for `--language=C++'. - - By default the language is guessed depending on the input file name -extension. - -Input file interpretation -------------------------- - -`--from-code=NAME' - 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 Python, Tcl, and - Glade input files are always assumed to be in UTF-8, regardless of - this option. - - By default the input files are assumed to be in ASCII. - -Operation mode --------------- - -`-j' -`--join-existing' - Join messages with existing file. - -`-x FILE' -`--exclude-file=FILE' - Entries from FILE are not extracted. FILE should be a PO or POT - file. - -`-c [TAG]' -`--add-comments[=TAG]' - Place comment block with TAG (or those preceding keyword lines) in - output file. - -Language=C/C++ specific options -------------------------------- - -`-a' -`--extract-all' - Extract all strings. - -`-k KEYWORDSPEC' -`--keyword[=KEYWORDSPEC]' - Additional keyword to be looked for (without KEYWORDSPEC means not - to use default keywords). - - If KEYWORDSPEC is a C identifer ID, `xgettext' looks for strings - in the first argument of each call to the function or macro ID. - If KEYWORDSPEC is of the form `ID:ARGNUM', `xgettext' looks for - strings in the ARGNUMth argument of the call. If KEYWORDSPEC is - of the form `ID:ARGNUM1,ARGNUM2', `xgettext' looks for strings in - the ARGNUM1st argument and in the ARGNUM2nd argument of the call, - and treats them as singular/plural variants for a message with - plural handling. - - The default keyword specifications, which are always looked for if - not explicitly disabled, are `gettext', `dgettext:2', - `dcgettext:2', `ngettext:1,2', `dngettext:2,3', `dcngettext:2,3', - and `gettext_noop'. - -`-T' -`--trigraphs' - Understand ANSI C trigraphs for input. - -`--debug' - Use the flags `c-format' and `possible-c-format' to show who was - responsible for marking a message as a format string. The latter - form is used if the `xgettext' program decided, the format form is - used if the programmer prescribed it. - - By default only the `c-format' form is used. The translator should - not have to care about these details. - - This implementation of `xgettext' 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. - -Output details --------------- - -`--force-po' - Always write an output file even if no message is defined. - -`-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 a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-F' -`--sort-by-file' - Sort output by file location. - -`--omit-header' - Don't write header with `msgid ""' entry. - - This is useful for testing purposes because it eliminates a source - of variance for generated `.gmo' files. With `--omit-header', two - invocations of `xgettext' on the same files with the same options - at different times are guaranteed to produce the same results. - -`--copyright-holder=STRING' - Set the copyright holder in the output. STRING 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 - STRING 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. - - The default value for STRING is the Free Software Foundation, Inc., - simply because `xgettext' was first used in the GNU project. - -`--foreign-user' - Omit FSF copyright in output. This option is equivalent to - `--copyright-holder='''. It can be useful for packages outside - the GNU project that want their translations to be in the public - domain. - -`-m [STRING]' -`--msgstr-prefix[=STRING]' - Use STRING (or "" if not specified) as prefix for msgstr entries. - -`-M [STRING]' -`--msgstr-suffix[=STRING]' - Use STRING (or "" if not specified) as suffix for msgstr entries. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - - -File: gettext.info, Node: Creating, Next: Updating, Prev: Template, Up: Top - -Creating a New PO File -********************** - - When starting a new translation, the translator creates a file called -`LANG.po', as a copy of the `PACKAGE.pot' 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). - - The easiest way to do so is by use of the `msginit' program. For -example: - - $ cd PACKAGE-VERSION - $ cd po - $ msginit - - The alternative way is to do the copy and modifications by hand. To -do so, the translator copies `PACKAGE.pot' to `LANG.po'. Then she -modifies the initial comments and the header entry of this file. - -* Menu: - -* msginit Invocation:: Invoking the `msginit' Program -* Header Entry:: Filling in the Header Entry - - -File: gettext.info, Node: msginit Invocation, Next: Header Entry, Prev: Creating, Up: Creating - -Invoking the `msginit' Program -============================== - - msginit [OPTION] - - The `msginit' program creates a new PO file, initializing the meta -information with values from the user's environment. - -Input file location -------------------- - -`-i INPUTFILE' -`--input=INPUTFILE' - Input POT file. - - If no INPUTFILE is given, the current directory is searched for the -POT file. If it is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--output-file=FILE' - Write output to specified PO file. - - If no output file is given, it depends on the `--locale' option or -the user's locale setting. If it is `-', the results are written to -standard output. - -Output details --------------- - -`-l LL_CC' -`--locale=LL_CC' - Set target locale. LL should be a language code, and CC should be - a country code. The command `locale -a' can be used to output a - list of all installed locales. The default is the user's locale - setting. - -`--no-translator' - Declares that the PO file will not have a human translator and is - instead automatically generated. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - - -File: gettext.info, Node: Header Entry, Prev: msginit Invocation, Up: Creating - -Filling in the Header Entry -=========================== - - The initial comments "SOME DESCRIPTIVE TITLE", "YEAR" and "FIRST -AUTHOR <EMAIL@ADDRESS>, 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 `M-x fundamental-mode'. - - Modifying the header entry can already be done using PO mode: in -Emacs, type `M-x po-mode RET' and then `RET' again to start editing the -entry. You should fill in the following fields. - -Project-Id-Version - This is the name and version of the package. - -POT-Creation-Date - This has already been filled in by `xgettext'. - -PO-Revision-Date - You don't need to fill this in. It will be filled by the Emacs PO - mode when you save the file. - -Last-Translator - Fill in your name and email address (without double quotes). - -Language-Team - Fill in the English name of the language, and the email address or - homepage URL of the language team you are part of. - - 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. - - 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, - `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National - teams" area. - -Content-Type - Replace `CHARSET' with the character encoding used for your - language, in your locale, or UTF-8. This field is needed for - correct operation of the `msgmerge' and `msgfmt' programs, as well - as for users whose locale's character encoding differs from yours - (see *Note Charset conversion::). - - You get the character encoding of your locale by running the shell - command `locale charmap'. If the result is `C' or - `ANSI_X3.4-1968', which is equivalent to `ASCII' (= `US-ASCII'), - it means that your locale is not correctly configured. In this - case, ask your translation team which charset to use. `ASCII' is - not usable for any language except Latin. - - 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 `libc' and GNU `libiconv'. These are: `ASCII', `ISO-8859-1', - `ISO-8859-2', `ISO-8859-3', `ISO-8859-4', `ISO-8859-5', - `ISO-8859-6', `ISO-8859-7', `ISO-8859-8', `ISO-8859-9', - `ISO-8859-13', `ISO-8859-14', `ISO-8859-15', `KOI8-R', `KOI8-U', - `KOI8-T', `CP850', `CP866', `CP874', `CP932', `CP949', `CP950', - `CP1250', `CP1251', `CP1252', `CP1253', `CP1254', `CP1255', - `CP1256', `CP1257', `GB2312', `EUC-JP', `EUC-KR', `EUC-TW', - `BIG5', `BIG5-HKSCS', `GBK', `GB18030', `SHIFT_JIS', `JOHAB', - `TIS-620', `VISCII', `GEORGIAN-PS', `UTF-8'. - - In the GNU system, the following encodings are frequently used for - the corresponding languages. - - * `ISO-8859-1' 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, - - * `ISO-8859-2' for Bosnian, Croatian, Czech, Hungarian, - Polish, Romanian, Serbian, Slovak, Slovenian, - - * `ISO-8859-3' for Maltese, - - * `ISO-8859-5' for Macedonian, Serbian, - - * `ISO-8859-6' for Arabic, - - * `ISO-8859-7' for Greek, - - * `ISO-8859-8' for Hebrew, - - * `ISO-8859-9' for Turkish, - - * `ISO-8859-13' for Latvian, Lithuanian, Maori, - - * `ISO-8859-14' for Welsh, - - * `ISO-8859-15' for Basque, Catalan, Dutch, English, Finnish, - French, Galician, German, Irish, Italian, Portuguese, - Spanish, Swedish, Walloon, - - * `KOI8-R' for Russian, - - * `KOI8-U' for Ukrainian, - - * `KOI8-T' for Tajik, - - * `CP1251' for Bulgarian, Byelorussian, - - * `GB2312', `GBK', `GB18030' for simplified writing of Chinese, - - * `BIG5', `BIG5-HKSCS' for traditional writing of Chinese, - - * `EUC-JP' for Japanese, - - * `EUC-KR' for Korean, - - * `TIS-620' for Thai, - - * `GEORGIAN-PS' for Georgian, - - * `UTF-8' for any language, including those listed above. - - 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). - - To enter such quote characters under X11, you can change your - keyboard mapping using the `xmodmap' program. The X11 names of - the quote characters are "leftsinglequotemark", - "rightsinglequotemark", "leftdoublequotemark", - "rightdoublequotemark", "singlelowquotemark", "doublelowquotemark". - - 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. - - The character encoding name can be written in either upper or - lower case. Usually upper case is preferred. - -Content-Transfer-Encoding - Set this to `8bit'. - -Plural-Forms - This field is optional. It is only needed if the PO file has - plural forms. You can find them by searching for the - `msgid_plural' keyword. The format of the plural forms field is - described in *Note Plural forms::. - - -File: gettext.info, Node: Updating, Next: Manipulating, Prev: Creating, Up: Top - -Updating Existing PO Files -************************** - -* Menu: - -* msgmerge Invocation:: Invoking the `msgmerge' Program -* Translated Entries:: Translated Entries -* Fuzzy Entries:: Fuzzy Entries -* Untranslated Entries:: Untranslated Entries -* Obsolete Entries:: Obsolete Entries -* Modifying Translations:: Modifying Translations -* Modifying Comments:: Modifying Comments -* Subedit:: Mode for Editing Translations -* C Sources Context:: C Sources Context -* Auxiliary:: Consulting Auxiliary PO Files -* Compendium:: Using Translation Compendia - - -File: gettext.info, Node: msgmerge Invocation, Next: Translated Entries, Prev: Updating, Up: Updating - -Invoking the `msgmerge' Program -=============================== - - msgmerge [OPTION] DEF.po REF.pot - - The `msgmerge' program 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. - -Input file location -------------------- - -`DEF.po' - Translations referring to old sources. - -`REF.pot' - References to the new sources. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - -`-C FILE' -`--compendium=FILE' - Specify an additional library of message translations. *Note - Compendium::. This option may be specified more than once. - -Operation mode --------------- - -`-U' -`--update' - Update DEF.po. Do nothing if DEF.po is already up to date. - -Output file location --------------------- - -`-o FILE' -`--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' - Make numbered backups if numbered backups for this file already - exist, otherwise make simple backups. - -`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. - -Output details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`-i' -`--indent' - Write the .po file using indented style. - -`--no-location' - Do not write `#: FILENAME:LINE' lines. - -`--add-location' - Generate `#: FILENAME:LINE' lines (default). - -`--strict' - Write out a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: Translated Entries, Next: Fuzzy Entries, Prev: msgmerge Invocation, Up: Updating - -Translated Entries -================== - - Each PO file entry for which the `msgstr' field has been filled with -a translation, and which is not marked as fuzzy (*note Fuzzy Entries::), -is said to be a "translated" entry. Only translated entries will later -be compiled by GNU `msgfmt' and become usable in programs. Other entry -types will be excluded; translation will not occur for them. - - Some commands are more specifically related to translated entry -processing. - -`t' - Find the next translated entry (`po-next-translated-entry'). - -`T' - Find the previous translated entry - (`po-previous-translated-entry'). - - The commands `t' (`po-next-translated-entry') and `T' -(`po-previous-translated-entry') 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. - - Translated entries usually result from the translator having edited -in a translation for them, *Note Modifying Translations::. However, if -the variable `po-auto-fuzzy-on-edit' is not `nil', 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. *Note Fuzzy Entries::. - - -File: gettext.info, Node: Fuzzy Entries, Next: Untranslated Entries, Prev: Translated Entries, Up: Updating - -Fuzzy Entries -============= - - Each PO file entry may have a set of "attributes", which are -qualities given a name and explicitly associated with the translation, -using a special system comment. One of these attributes has the name -`fuzzy', and entries having this attribute are said to have a fuzzy -translation. They are called fuzzy entries, for short. - - 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 `msgmerge' to update an older -translated PO files according to a new PO template file, when this tool -hypothesises that some new `msgid' 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 `msgid' string) should often be reflected in the -translated string, and this requires the intervention of the -translator. For this reason, `msgmerge' might mark some entries as -being fuzzy. - - 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. - -`z' - Find the next fuzzy entry (`po-next-fuzzy-entry'). - -`Z' - Find the previous fuzzy entry (`po-previous-fuzzy-entry'). - -`<TAB>' - Remove the fuzzy attribute of the current entry (`po-unfuzzy'). - - The commands `z' (`po-next-fuzzy-entry') and `Z' -(`po-previous-fuzzy-entry') 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. - - The command `<TAB>' (`po-unfuzzy') removes the fuzzy attribute -associated with an entry, usually leaving it translated. Further, if -the variable `po-auto-select-on-unfuzzy' has not the `nil' value, the -`<TAB>' command will automatically chase for another interesting entry -to work on. The initial value of `po-auto-select-on-unfuzzy' is `nil'. - - The initial value of `po-auto-fuzzy-on-edit' is `nil'. However, if -the variable `po-auto-fuzzy-on-edit' is set to `t', any entry edited -through the `<RET>' 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 -`<TAB>' to pick another entry to work on, clearing the fuzzy attribute -on the same blow. If she is not satisfied yet, she merely uses `<SPC>' -to chase another entry, leaving the entry fuzzy. - - The translator may also use the `<DEL>' command -(`po-fade-out-entry') 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. - - Also, when time comes to quit working on a PO file buffer with the -`q' command, the translator is asked for confirmation, if fuzzy string -still exists. - - -File: gettext.info, Node: Untranslated Entries, Next: Obsolete Entries, Prev: Fuzzy Entries, Up: Updating - -Untranslated Entries -==================== - - When `xgettext' originally creates a PO file, unless told otherwise, -it initializes the `msgid' field with the untranslated string, and -leaves the `msgstr' string to be empty. Such entries, having an empty -translation, are said to be "untranslated" 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. - - 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 `msgstr ""'. - - 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. - -`u' - Find the next untranslated entry (`po-next-untranslated-entry'). - -`U' - Find the previous untranslated entry - (`po-previous-untransted-entry'). - -`k' - Turn the current entry into an untranslated one (`po-kill-msgstr'). - - The commands `u' (`po-next-untranslated-entry') and `U' -(`po-previous-untransted-entry') 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. - - An entry can be turned back into an untranslated entry by merely -emptying its translation, using the command `k' (`po-kill-msgstr'). -*Note Modifying Translations::. - - Also, when time comes to quit working on a PO file buffer with the -`q' command, the translator is asked for confirmation, if some -untranslated string still exists. - - -File: gettext.info, Node: Obsolete Entries, Next: Modifying Translations, Prev: Untranslated Entries, Up: Updating - -Obsolete Entries -================ - - By "obsolete" PO file entries, we mean those entries which are -commented out, usually by `msgmerge' when it found that the translation -is not needed anymore by the package being localized. - - 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 `#', -even those lines containing `msgid' or `msgstr'. - - 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. - - Moreover, some commands are more specifically related to obsolete -entry processing. - -`o' - Find the next obsolete entry (`po-next-obsolete-entry'). - -`O' - Find the previous obsolete entry (`po-previous-obsolete-entry'). - -`<DEL>' - Make an active entry obsolete, or zap out an obsolete entry - (`po-fade-out-entry'). - - The commands `o' (`po-next-obsolete-entry') and `O' -(`po-previous-obsolete-entry') 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. - - 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 `msgid' values. - - However, it is possible to comment out an active entry, so making it -obsolete. GNU `gettext' utilities will later react to the -disappearance of a translation by using the untranslated string. The -command `<DEL>' (`po-fade-out-entry') 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. *Note Modifying -Translations::. - - 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. - - -File: gettext.info, Node: Modifying Translations, Next: Modifying Comments, Prev: Obsolete Entries, Up: Updating - -Modifying Translations -====================== - - 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 `V' 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. - - 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. - -`<RET>' - Interactively edit the translation (`po-edit-msgstr'). - -`<LFD>' -`C-j' - Reinitialize the translation with the original, untranslated string - (`po-msgid-to-msgstr'). - -`k' - Save the translation on the kill ring, and delete it - (`po-kill-msgstr'). - -`w' - Save the translation on the kill ring, without deleting it - (`po-kill-ring-save-msgstr'). - -`y' - Replace the translation, taking the new from the kill ring - (`po-yank-msgstr'). - - The command `<RET>' (`po-edit-msgstr') 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 `C-c C-c' to close the subedit window with -the automatically requoted results, or `C-c C-k' to abort her -modifications. *Note Subedit::, for more information. - - The command `<LFD>' (`po-msgid-to-msgstr') 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. - - It is possible to arrange so, whenever editing an untranslated -entry, the `<LFD>' command be automatically executed. If you set -`po-auto-edit-with-msgid' to `t', the translation gets initialised with -the original string, in case none exists already. The default value -for `po-auto-edit-with-msgid' is `nil'. - - 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. - - The command `k' (`po-kill-msgstr') 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 `w' (`po-kill-ring-save-msgstr') has also the -effect of taking a copy of the translation onto the kill ring, but it -otherwise leaves the entry alone, and does _not_ 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. - - The translator may use `k' or `w' 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. - - To facilitate exchanges with buffers which are not in PO mode, the -translation string put on the kill ring by the `k' 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. - - The command `y' (`po-yank-msgstr') 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 -"yanked" into the PO file buffer. *Note Yanking: (emacs)Yanking. The -first time `y' is used, the translation receives the value of the most -recent addition to the kill ring. If `y' 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 `y' many times in a row, the translator -may travel along the kill ring for saved strings, until she finds the -string she really wanted. - - 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. - - Note that `k' or `w' 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. - - 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 `msgstr' field with this retrieved translation. Once this done, -the obsolete entry is not wanted anymore, and may be safely deleted. - - When the translator finds an untranslated entry and suspects that a -slight variant of the translation exists, she immediately uses `m' to -mark the current entry location, then starts chasing obsolete entries -with `o', hoping to find some translation corresponding to the -unmodified string. Once found, she uses the `<DEL>' command for -deleting the obsolete entry, knowing that `<DEL>' also _kills_ the -translation, that is, pushes the translation on the kill ring. Then, -`r' returns to the initial untranslated entry, and `y' then _yanks_ the -saved translation right into the `msgstr' field. The translator is -then free to use `<RET>' for fine tuning the translation contents, and -maybe to later use `u', then `m' again, for going on with the next -untranslated string. - - 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. *Note Keyboard Macros: (emacs)Keyboard Macros. - - -File: gettext.info, Node: Modifying Comments, Next: Subedit, Prev: Modifying Translations, Up: Updating - -Modifying Comments -================== - - 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. - - Comments not having whitespace after the initial `#', for example, -those beginning with `#.' or `#:', are _not_ translator comments, they -are exclusively created by other `gettext' tools. So, the commands -below will never alter such system added comments, they are not meant -for the translator to modify. *Note PO Files::. - - The following commands are somewhat similar to those modifying -translations, so the general indications given for those apply here. -*Note Modifying Translations::. - -`#' - Interactively edit the translator comments (`po-edit-comment'). - -`K' - Save the translator comments on the kill ring, and delete it - (`po-kill-comment'). - -`W' - Save the translator comments on the kill ring, without deleting it - (`po-kill-ring-save-comment'). - -`Y' - Replace the translator comments, taking the new from the kill ring - (`po-yank-comment'). - - 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. *Note Modifying Translations::. - - The command `#' (`po-edit-comment') 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 (`#') 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 `C-c C-c' allow the translator to tell she is finished -with editing the comment. *Note Subedit::, for further details. - - Functions found on `po-subedit-mode-hook', if any, are executed after -the string has been inserted in the edit buffer. - - The command `K' (`po-kill-comment') gets rid of all translator -comments, while saving those comments on the kill ring. The command -`W' (`po-kill-ring-save-comment') takes a copy of the translator -comments on the kill ring, but leaves them undisturbed in the current -entry. The command `Y' (`po-yank-comment') 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. - - On the kill ring, all strings have the same nature. There is no -distinction between _translation_ strings and _translator comments_ -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 `M-w' prior to -`#', and the previous translation will be right there, all ready for -being introduced by some explanatory text. - - 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 `#'. Once inside the editing window, she can use the regular -Emacs commands `C-y' (`yank') and `M-y' (`yank-pop') to get the -previous translation where she likes. - - -File: gettext.info, Node: Subedit, Next: C Sources Context, Prev: Modifying Comments, Up: Updating - -Details of Sub Edition -====================== - - 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. - -`C-c C-c' - Complete edition (`po-subedit-exit'). - -`C-c C-k' - Abort edition (`po-subedit-abort'). - -`C-c C-a' - Consult auxiliary PO files (`po-subedit-cycle-auxiliary'). - - 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 `C-c C-c' -(`po-subedit-exit') 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. - - If the translator becomes unsatisfied with her translation or -comment, to the extent she prefers keeping what was existent prior to -the `<RET>' or `#' command, she may use the command `C-c C-k' -(`po-subedit-abort') to merely get rid of edition, while preserving the -original translation or comment. Another way would be for her to exit -normally with `C-c C-c', then type `U' once for undoing the whole -effect of last edition. - - The command `C-c C-a' (`po-subedit-cycle-auxiliary') 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 (*note Auxiliary::). - - Functions found on `po-subedit-mode-hook', if any, are executed after -the string has been inserted in the edit buffer. - - While editing her translation, the translator should pay attention -to not inserting unwanted `<RET>' (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, `<RET>' automatically puts the character `<' at the end of -the string being edited, but this `<' is not really part of the string. -On exiting the editing window with `C-c C-c', PO mode automatically -removes such `<' and all whitespace added after it. If the translator -adds characters after the terminating `<', it looses its delimiting -property and integrally becomes part of the string. If she removes the -delimiting `<', then the edited string is taken _as is_, with all -trailing newlines, even if invisible. Also, if the translated string -ought to end itself with a genuine `<', then the delimiting `<' may not -be removed; so the string should appear, in the editing window, as -ending with two `<' in a row. - - 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 _and_ -the comment of a single entry, or to edit entries in different PO -files, all at once. Typing `<RET>' on a field already being edited -merely resumes that particular edit. Yet, the translator should better -be comfortable at handling many Emacs windows! - - 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 `q' command), -subedits are automatically resumed one at a time, so she may decide for -each of them. - diff --git a/doc/gettext.info-4 b/doc/gettext.info-4 deleted file mode 100644 index 5abe608..0000000 --- a/doc/gettext.info-4 +++ /dev/null @@ -1,1513 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: C Sources Context, Next: Auxiliary, Prev: Subedit, Up: Updating - -C Sources Context -================= - - PO mode is particularly powerful when used with PO files created -through GNU `gettext' 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. - - 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 _any_ -kind. - - 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. - - The following commands are meant to help the translator at getting -program source context for a PO file entry. - -`s' - Resume the display of a program source context, or cycle through - them (`po-cycle-source-reference'). - -`M-s' - Display of a program source context selected by menu - (`po-select-source-reference'). - -`S' - Add a directory to the search path for source files - (`po-consider-source-path'). - -`M-S' - Delete a directory from the search path for source files - (`po-ignore-source-path'). - - The commands `s' (`po-cycle-source-reference') and `M-s' -(`po-select-source-reference') 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. - - Even if `s' (or `M-s') 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 -`O'. - - When `s' 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 `s' 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 `s' 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. - - The command `M-s' 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 `<TAB>' immediately after `M-s', 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. - - 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 "search path" for program sources. The command `S' -(`po-consider-source-path') is used to interactively enter a new -directory at the front of the search path, and the command `M-S' -(`po-ignore-source-path') is used to select, with completion, one of -the directories she does not want anymore on the search path. - - -File: gettext.info, Node: Auxiliary, Next: Compendium, Prev: C Sources Context, Up: Updating - -Consulting Auxiliary PO Files -============================= - - 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. - - An "auxiliary" 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. - - Here are the auxiliary file commands available in PO mode. - -`a' - Seek auxiliary files for another translation for the same entry - (`po-cycle-auxiliary'). - -`C-c C-a' - Switch to a particular auxiliary file (`po-select-auxiliary'). - -`A' - Declare this PO file as an auxiliary file - (`po-consider-as-auxiliary'). - -`M-A' - Remove this PO file from the list of auxiliary files - (`po-ignore-as-auxiliary'). - - Command `A' (`po-consider-as-auxiliary') adds the current PO file to -the list of auxiliary files, while command `M-A' -(`po-ignore-as-auxiliary' just removes it. - - The command `a' (`po-cycle-auxiliary') seeks all auxiliary PO files, -round-robin, searching for a translated entry in some other language -having an `msgid' 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, `a' in -this newly displayed PO file will seek another PO file, and so on, so -repeating `a' will eventually yield back the original PO file. - - The command `C-c C-a' (`po-select-auxiliary') 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 `msgid' 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. - - For all this to work fully, auxiliary PO files will have to be -normalized, in that way that `msgid' fields should be written _exactly_ -the same way. It is possible to write `msgid' 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 `msgid' entries written by the same GNU `gettext' tools. - - 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 the `M-x normalize' command. Until these -discrepancies between PO mode and other GNU `gettext' tools get fully -resolved, the translator should stay aware of normalisation issues. - - -File: gettext.info, Node: Compendium, Prev: Auxiliary, Up: Updating - -Using Translation Compendia -=========================== - - A "compendium" 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. - -* Menu: - -* Creating Compendia:: Merging translations for later use -* Using Compendia:: Using older translations if they fit - - -File: gettext.info, Node: Creating Compendia, Next: Using Compendia, Prev: Compendium, Up: Compendium - -Creating Compendia ------------------- - - 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: `concatenating PO files' -and `extracting a message subset from a PO file'. - -Concatenate PO Files -.................... - - To concatenate several valid PO files into one compendium file you -can use `msgcomm' or `msgcat' (the latter preferred): - - msgcat -o compendium.po file1.po file2.po - - By default, `msgcat' will accumulate divergent translations for the -same string. Those occurences will be marked as `fuzzy' and highly -visible decorated; calling `msgcat' on `file1.po': - - #: src/hello.c:200 - #, c-format - msgid "Report bugs to <%s>.\n" - msgstr "Comunicar `bugs' a <%s>.\n" - -and `file2.po': - - #: src/bye.c:100 - #, c-format - msgid "Report bugs to <%s>.\n" - msgstr "Comunicar \"bugs\" a <%s>.\n" - -will result in: - - #: src/hello.c:200 src/bye.c:100 - #, fuzzy, c-format - msgid "Report bugs to <%s>.\n" - msgstr "" - "#-#-#-#-# file1.po #-#-#-#-#\n" - "Comunicar `bugs' a <%s>.\n" - "#-#-#-#-# file2.po #-#-#-#-#\n" - "Comunicar \"bugs\" a <%s>.\n" - -The translator will have to resolve this "conflict" manually; she has -to decide whether the first or the second version is appropriate (or -provide a new translation), to delete the "marker lines", and finally -to remove the `fuzzy' mark. - - If the translator knows in advance the first found translation of a -message is always the best translation she can make use to the -`--use-first' switch: - - msgcat --use-first -o compendium.po file1.po file2.po - - A good compendium file must not contain `fuzzy' or untranslated -entries. If input files are "dirty" you must preprocess the input -files or postprocess the result using `msgattrib --translated ---no-fuzzy'. - -Extract a Message Subset from a PO File -....................................... - - Nobody wants to translate the same messages again and again; thus you -may wish to have a compendium file containing `getopt.c' messages. - - To extract a message subset (e.g., all `getopt.c' messages) from an -existing PO file into one compendium file you can use `msggrep': - - msggrep --location src/getopt.c -o compendium.po file.po - - -File: gettext.info, Node: Using Compendia, Prev: Creating Compendia, Up: Compendium - -Using Compendia ---------------- - - You can use a compendium file to initialize a translation from -scratch or to update an already existing translation. - -Initialize a New Translation File -................................. - - Since a PO file with translations does not exist the translator can -merely use `/dev/null' to fake the "old" translation file. - - msgmerge --compendium compendium.po -o file.po /dev/null file.pot - -Update an Existing Translation File -................................... - - 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 `sed'): - - msgcat --use-first -o update.po compendium1.po compendium2.po file.po - msgmerge update.po file.pot | sed -e '/^#~/d' > file.po - - -File: gettext.info, Node: Manipulating, Next: Binaries, Prev: Updating, Up: Top - -Manipulating PO Files -********************* - - Sometimes it is necessary to manipulate PO files in a way that is -better performed automatically than by hand. GNU `gettext' includes a -complete set of tools for this purpose. - - 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 `msgcat'. It is then the translators' duty to deal with any -possible conflicts that arose during the merge. - - 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 `msgconv' program. - - 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 `msggrep', another is to create a POT file for -that source file and use `msgmerge'. - - When a translator wants to adjust some translation catalog for a -special dialect or orthography -- for example, German as written in -Switzerland versus German as written in Germany -- she needs to apply -some text processing to every message in the catalog. The tool for -doing this is `msgfilter'. - - Another use of `msgfilter' is to produce approximately the POT file -for which a given PO file was made. This can be done through a filter -command like `msgfilter sed -e d | sed -e '/^# /d''. 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. - - 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 `msgexec' program. - - When third party tools create PO or POT files, sometimes duplicates -cannot be avoided. But the GNU `gettext' tools give an error when they -encounter duplicate msgids in the same file and in the same domain. To -merge duplicates, the `msguniq' program can be used. - - `msgcomm' is a more general tool for keeping or throwing away -duplicates, occurring in different files. - - `msgcmp' can be used to check whether a translation catalog is -completely translated. - - `msgattrib' can be used to select and extract only the fuzzy or -untranslated messages of a translation catalog. - - `msgen' is useful as a first step for preparing English translation -catalogs. It copies each message's msgid to its msgstr. - -* Menu: - -* msgcat Invocation:: Invoking the `msgcat' Program -* msgconv Invocation:: Invoking the `msgconv' Program -* msggrep Invocation:: Invoking the `msggrep' Program -* msgfilter Invocation:: Invoking the `msgfilter' Program -* msguniq Invocation:: Invoking the `msguniq' Program -* msgcomm Invocation:: Invoking the `msgcomm' Program -* msgcmp Invocation:: Invoking the `msgcmp' Program -* msgattrib Invocation:: Invoking the `msgattrib' Program -* msgen Invocation:: Invoking the `msgen' Program -* msgexec Invocation:: Invoking the `msgexec' Program - - -File: gettext.info, Node: msgcat Invocation, Next: msgconv Invocation, Prev: Manipulating, Up: Manipulating - -Invoking the `msgcat' Program -============================= - - msgcat [OPTION] [INPUTFILE]... - - The `msgcat' 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 `--more-than' option, greater commonality may be -requested before messages are printed. Conversely, the `--less-than' -option may be used to specify less commonality before messages are -printed (i.e. `--less-than=2' will only print the unique messages). -Translations, comments and extract comments will be cumulated, except -that if `--use-first' is specified, they will be taken from the first -PO file to define them. File positions from all PO files will be -cumulated. - -Input file location -------------------- - -`INPUTFILE ...' - Input files. - -`-f FILE' -`--files-from=FILE' - Read the names of the input files from FILE instead of getting - them from the command line. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If INPUTFILE is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -Message selection ------------------ - -`-< NUMBER' -`--less-than=NUMBER' - Print messages with less than NUMBER definitions, defaults to - infinite if not set. - -`-> NUMBER' -`--more-than=NUMBER' - Print messages with more than NUMBER definitions, defaults to 0 if - not set. - -`-u' -`--unique' - Shorthand for `--less-than=2'. Requests that only unique messages - be printed. - -Output details --------------- - -`-t' -`--to-code=NAME' - Specify encoding for output. - -`--use-first' - Use first available translation for each message. Don't merge - several translations into one. - -`--force-po' - Always write an output file even if it contains no message. - -`-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 a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: msgconv Invocation, Next: msggrep Invocation, Prev: msgcat Invocation, Up: Manipulating - -Invoking the `msgconv' Program -============================== - - msgconv [OPTION] [INPUTFILE] - - The `msgconv' program converts a translation catalog to a different -character encoding. - -Input file location -------------------- - -`INPUTFILE' - Input PO file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If no INPUTFILE is given or if it is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -Conversion target ------------------ - -`-t' -`--to-code=NAME' - Specify encoding for output. - - The default encoding is the current locale's encoding. - -Output details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`-i' -`--indent' - Write the .po file using indented style. - -`--no-location' - Do not write `#: FILENAME:LINE' lines. - -`--add-location' - Generate `#: FILENAME:LINE' lines (default). - -`--strict' - Write out a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: msggrep Invocation, Next: msgfilter Invocation, Prev: msgconv Invocation, Up: Manipulating - -Invoking the `msggrep' Program -============================== - - msggrep [OPTION] [INPUTFILE] - - The `msggrep' program extracts all messages of a translation catalog -that match a given pattern or belong to some given source files. - -Input file location -------------------- - -`INPUTFILE' - Input PO file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If no INPUTFILE is given or if it is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -Message selection ------------------ - - [-N SOURCEFILE]... [-M DOMAINNAME]... - [-K MSGID-PATTERN] [-T MSGSTR-PATTERN] [-C COMMENT-PATTERN] - - A message is selected if - * it comes from one of the specified source files, - - * or if it comes from one of the specified domains, - - * or if `-K' is given and its key (msgid or msgid_plural) matches - MSGID-PATTERN, - - * or if `-T' is given and its translation (msgstr) matches - MSGSTR-PATTERN, - - * or if `-C' is given and the translator's comment matches - COMMENT-PATTERN. - - When more than one selection criterion is specified, the set of -selected messages is the union of the selected messages of each -criterion. - - MSGID-PATTERN or MSGSTR-PATTERN syntax: - [-E | -F] [-e PATTERN | -f FILE]... - PATTERNs are basic regular expressions by default, or extended -regular expressions if -E is given, or fixed strings if -F is given. - -`-N SOURCEFILE' -`--location=SOURCEFILE' - Select messages extracted from SOURCEFILE. SOURCEFILE can be - either a literal file name or a wildcard pattern. - -`-M DOMAINNAME' -`--domain=DOMAINNAME' - Select messages belonging to domain DOMAINNAME. - -`-K' -`--msgid' - Start of patterns for the msgid. - -`-T' -`--msgstr' - Start of patterns for the msgstr. - -`-E' -`--extended-regexp' - Specify that PATTERN is an extended regular expression. - -`-F' -`--fixed-strings' - Specify that PATTERN is a set of newline-separated strings. - -`-e PATTERN' -`--regexp=PATTERN' - Use PATTERN as a regular expression. - -`-f FILE' -`--file=FILE' - Obtain PATTERN from FILE. - -`-i' -`--ignore-case' - Ignore case distinctions. - -Output details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`--indent' - Write the .po file using indented style. - -`--no-location' - Do not write `#: FILENAME:LINE' lines. - -`--add-location' - Generate `#: FILENAME:LINE' lines (default). - -`--strict' - Write out a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`--sort-by-file' - Sort output by file location. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - - -File: gettext.info, Node: msgfilter Invocation, Next: msguniq Invocation, Prev: msggrep Invocation, Up: Manipulating - -Invoking the `msgfilter' Program -================================ - - msgfilter [OPTION] FILTER [FILTER-OPTION] - - The `msgfilter' program applies a filter to all translations of a -translation catalog. - -Input file location -------------------- - -`-i INPUTFILE' -`--input=INPUTFILE' - Input PO file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If no INPUTFILE is given or if it is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -The filter ----------- - - The FILTER can be any program that reads a translation from standard -input and writes a modified translation to standard output. A -frequently used filter is `sed'. - - Note: It is your responsibility to ensure that the FILTER can cope -with input encoded in the translation catalog's encoding. If the -FILTER wants input in a particular encoding, you can in a first step -convert the translation catalog to that encoding using the `msgconv' -program, before invoking `msgfilter'. If the FILTER 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 -`msgconv' program and then make `msgfilter' work in an UTF-8 locale, by -using the `LC_ALL' environment variable. - - Note: Most translations in a translation catalog don't end with a -newline character. For this reason, it is important that the FILTER -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 `sed' -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 `sed' instead; it -does not have this limitation. - -Useful FILTER-OPTIONs when the FILTER is `sed' ----------------------------------------------- - -`-e SCRIPT' -`--expression=SCRIPT' - Add SCRIPT to the commands to be executed. - -`-f SCRIPTFILE' -`--file=SCRIPTFILE' - Add the contents of SCRIPTFILE to the commands to be executed. - -`-n' -`--quiet' -`--silent' - Suppress automatic printing of pattern space. - -Output details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`--indent' - Write the .po file using indented style. - -`--keep-header' - Keep the header entry, i.e. the message with `msgid ""', - unmodified, instead of filtering it. By default, the header entry - is subject to filtering like any other message. - -`--no-location' - Do not write `#: FILENAME:LINE' lines. - -`--add-location' - Generate `#: FILENAME:LINE' lines (default). - -`--strict' - Write out a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: msguniq Invocation, Next: msgcomm Invocation, Prev: msgfilter Invocation, Up: Manipulating - -Invoking the `msguniq' Program -============================== - - msguniq [OPTION] [INPUTFILE] - - The `msguniq' 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 `msgfmt', -`msgmerge' or `msgcat'. By default, duplicates are merged together. -When using the `--repeated' option, only duplicates are output, and all -other messages are discarded. Comments and extracted comments will be -cumulated, except that if `--use-first' is specified, they will be -taken from the first translation. File positions will be cumulated. -When using the `--unique' option, duplicates are discarded. - -Input file location -------------------- - -`INPUTFILE' - Input PO file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If no INPUTFILE is given or if it is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -Message selection ------------------ - -`-d' -`--repeated' - Print only duplicates. - -`-u' -`--unique' - Print only unique messages, discard duplicates. - -Output details --------------- - -`-t' -`--to-code=NAME' - Specify encoding for output. - -`--use-first' - Use first available translation for each message. Don't merge - several translations into one. - -`--force-po' - Always write an output file even if it contains no message. - -`-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 a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: msgcomm Invocation, Next: msgcmp Invocation, Prev: msguniq Invocation, Up: Manipulating - -Invoking the `msgcomm' Program -============================== - - msgcomm [OPTION] [INPUTFILE]... - - The `msgcomm' program finds messages which are common to two or more -of the specified PO files. By using the `--more-than' option, greater -commonality may be requested before messages are printed. Conversely, -the `--less-than' option may be used to specify less commonality before -messages are printed (i.e. `--less-than=2' 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. - -Input file location -------------------- - -`INPUTFILE ...' - Input files. - -`-f FILE' -`--files-from=FILE' - Read the names of the input files from FILE instead of getting - them from the command line. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If INPUTFILE is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -Message selection ------------------ - -`-< NUMBER' -`--less-than=NUMBER' - Print messages with less than NUMBER definitions, defaults to - infinite if not set. - -`-> NUMBER' -`--more-than=NUMBER' - Print messages with more than NUMBER definitions, defaults to 1 if - not set. - -`-u' -`--unique' - Shorthand for `--less-than=2'. Requests that only unique messages - be printed. - -Output details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`-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 a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-F' -`--sort-by-file' - Sort output by file location. - -`--omit-header' - Don't write header with `msgid ""' entry. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - - -File: gettext.info, Node: msgcmp Invocation, Next: msgattrib Invocation, Prev: msgcomm Invocation, Up: Manipulating - -Invoking the `msgcmp' Program -============================= - - msgcmp [OPTION] DEF.po REF.pot - - The `msgcmp' program compares two Uniforum style .po files to check -that both contain the same set of msgid strings. The DEF.po file is an -existing PO file with the translations. The REF.pot file is the last -created PO file, or a PO Template file (generally created by -`xgettext'). 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. - -Input file location -------------------- - -`DEF.po' - Translations. - -`REF.pot' - References to the sources. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. - -Operation modifiers -------------------- - -`-m' -`--multi-domain' - Apply REF.pot to each of the domains in DEF.po. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - - -File: gettext.info, Node: msgattrib Invocation, Next: msgen Invocation, Prev: msgcmp Invocation, Up: Manipulating - -Invoking the `msgattrib' Program -================================ - - msgattrib [OPTION] [INPUTFILE] - - The `msgattrib' program filters the messages of a translation catalog -according to their attributes, and manipulates the attributes. - -Input file location -------------------- - -`INPUTFILE' - Input PO file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If no INPUTFILE is given or if it is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 `-'. - -Message selection ------------------ - -`--translated' - Keep translated messages, remove untranslated messages. - -`--untranslated' - Keep untranslated messages, remove translated messages. - -`--no-fuzzy' - Remove `fuzzy' marked messages. - -`--only-fuzzy' - Keep `fuzzy' marked messages, remove all other messsages. - -`--no-obsolete' - Remove obsolete #~ messages. - -`--only-obsolete' - Keep obsolete #~ messages, remove all other messages. - -Attribute manipulation ----------------------- - - Attributes are modified after the message selection/removal has been -performed. - -`--set-fuzzy' - Set all messages `fuzzy'. - -`--clear-fuzzy' - Set all messages non-`fuzzy'. - -`--set-obsolete' - Set all messages obsolete. - -`--clear-obsolete' - Set all messages non-obsolete. - -`--fuzzy' - Synonym for `--only-fuzzy --clear-fuzzy': It keeps only the fuzzy - messages and removes their `fuzzy' mark. - -`--obsolete' - Synonym for `--only-obsolete --clear-obsolete': It keeps only the - obsolete messages and makes them non-obsolete. - -Output details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`-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 a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: msgen Invocation, Next: msgexec Invocation, Prev: msgattrib Invocation, Up: Manipulating - -Invoking the `msgen' Program -============================ - - msgen [OPTION] INPUTFILE - - The `msgen' 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, and are marked fuzzy. - - Note: `msginit --no-translator --locale=en' performs a very similar -task. The main difference is that `msginit' cares specially about the -header entry, whereas `msgen' doesn't. - -Input file location -------------------- - -`INPUTFILE' - Input PO or POT file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If INPUTFILE is `-', standard input is read. - -Output file location --------------------- - -`-o FILE' -`--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 details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`-i' -`--indent' - Write the .po file using indented style. - -`--no-location' - Do not write `#: FILENAME:LINE' lines. - -`--add-location' - Generate `#: FILENAME:LINE' lines (default). - -`--strict' - Write out a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -`-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. - - -File: gettext.info, Node: msgexec Invocation, Prev: msgen Invocation, Up: Manipulating - -Invoking the `msgexec' Program -============================== - - msgexec [OPTION] COMMAND [COMMAND-OPTION] - - The `msgexec' program applies a command to all translations of a -translation catalog. The COMMAND can be any program that reads a -translation from standard input. It is invoked once for each -translation. Its output becomes msgexec's output. `msgexec''s return -code is the maximum return code across all invocations. - - A special builtin command called `0' outputs the translation, -followed by a null byte. The output of `msgexec 0' is suitable as -input for `xargs -0'. - - During each COMMAND invocation, the environment variable -`MSGEXEC_MSGID' is bound to the message's msgid, and the environment -variable `MSGEXEC_LOCATION' is bound to the location in the PO file of -the message. - - Note: It is your responsibility to ensure that the COMMAND can cope -with input encoded in the translation catalog's encoding. If the -COMMAND wants input in a particular encoding, you can in a first step -convert the translation catalog to that encoding using the `msgconv' -program, before invoking `msgexec'. If the COMMAND 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 -`msgconv' program and then make `msgexec' work in an UTF-8 locale, by -using the `LC_ALL' environment variable. - -Input file location -------------------- - -`-i INPUTFILE' -`--input=INPUTFILE' - Input PO file. - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If no INPUTFILE is given or if it is `-', standard input is read. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - - -File: gettext.info, Node: Binaries, Next: Users, Prev: Manipulating, Up: Top - -Producing Binary MO Files -************************* - -* Menu: - -* msgfmt Invocation:: Invoking the `msgfmt' Program -* msgunfmt Invocation:: Invoking the `msgunfmt' Program -* MO Files:: The Format of GNU MO Files - diff --git a/doc/gettext.info-5 b/doc/gettext.info-5 deleted file mode 100644 index 777e513..0000000 --- a/doc/gettext.info-5 +++ /dev/null @@ -1,1213 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: msgfmt Invocation, Next: msgunfmt Invocation, Prev: Binaries, Up: Binaries - -Invoking the `msgfmt' Program -============================= - - msgfmt [OPTION] FILENAME.po ... - - The `msgfmt' programs generates a binary message catalog from a -textual translation description. - -Input file location -------------------- - -`FILENAME.po ...' - -`-D DIRECTORY' -`--directory=DIRECTORY' - Add DIRECTORY to the list of directories. Source files are - searched relative to this list of directories. The resulting `.po' - file will be written relative to the current directory, though. - - If an 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). - -`--tcl' - Tcl mode: generate a tcl/msgcat `.msg' file. - -Output file location --------------------- - -`-o FILE' -`--output-file=FILE' - Write output to specified file. - -`--strict' - 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 `.mo' is added to the file name if it is not - already present. - - We find this behaviour of Sun's implementation rather silly and so - by default this mode is _not_ selected. - - If the output FILE is `-', output is written to standard output. - -Output file location in Java mode ---------------------------------- - -`-r RESOURCE' -`--resource=RESOURCE' - Specify the resource name. - -`-l LOCALE' -`--locale=LOCALE' - Specify the locale name, either a language specification of the - form LL or a combined language and country specification of the - form LL_CC. - -`-d DIRECTORY' - Specify the 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 Tcl mode --------------------------------- - -`-l LOCALE' -`--locale=LOCALE' - Specify the locale name, either a language specification of the - form LL or a combined language and country specification of the - form LL_CC. - -`-d DIRECTORY' - Specify the base directory of `.msg' message catalogs. - - The `-l' and `-d' options are mandatory. The `.msg' file is written -in the specified directory. - -Input file interpretation -------------------------- - -`-c' -`--check' - Perform all the checks implied by `--check-format', - `--check-header', `--check-domain'. - -`--check-format' - Check language dependent format strings. - - If the string represents a format string used in a `printf'-like - function both strings should have the same number of `%' format - specifiers, with matching types. If the flag `c-format' or - `possible-c-format' appears in the special comment <#,> for this - entry a check is performed. For example, the check will diagnose - using `%.*s' against `%s', or `%d' against `%s', or `%d' against - `%x'. It can even handle positional parameters. - - Normally the `xgettext' 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 `printf'-like function and so `msgfmt' might report - errors where there are none. - - To solve this problem the programmer can dictate the decision to - the `xgettext' program (*note c-format::). The translator should - not consider removing the flag from the <#,> line. This "fix" - would be reversed again as soon as `msgmerge' is called the next - time. - -`--check-header' - Verify presence and contents of the header entry. *Note Header - Entry::, for a description of the various fields in 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. This will give - an error when attempting to use the GNU extensions. - -`--check-accelerators[=CHAR]' - 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 `&' character. Sometimes a keyboard accelerator is also - called "keyboard mnemonic". This check verifies that if the - untranslated string has exactly one `&' character, the translated - string has exactly one `&' as well. If this option is given with - a CHAR argument, this CHAR should be a non-alphanumeric character - and is used as keyboard acceleator mark instead of `&'. - -`-f' -`--use-fuzzy' - 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. - -Output details --------------- - -`-a NUMBER' -`--alignment=NUMBER' - Align strings to NUMBER bytes (default: 1). - -`--no-hash' - 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). - -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. - - -File: gettext.info, Node: msgunfmt Invocation, Next: MO Files, Prev: msgfmt Invocation, Up: Binaries - -Invoking the `msgunfmt' Program -=============================== - - msgunfmt [OPTION] [FILE]... - - The `msgunfmt' program converts a binary message catalog to a -Uniforum style .po file. - -Operation mode --------------- - -`-j' -`--java' - Java mode: input is a Java `ResourceBundle' class. - -`--tcl' - Tcl mode: input is a tcl/msgcat `.msg' file. - -Input file location -------------------- - -`FILE ...' - Input .mo files. - - If no input FILE is given or if it is `-', standard input is read. - -Input file location in Java mode --------------------------------- - -`-r RESOURCE' -`--resource=RESOURCE' - Specify the resource name. - -`-l LOCALE' -`--locale=LOCALE' - Specify the locale name, either a language specification of the - form LL or a combined language and country specification of the - form LL_CC. - - The class name is determined by appending the locale name to the -resource name, separated with an underscore. The class is located -using the `CLASSPATH'. - -Input file location in Tcl mode -------------------------------- - -`-l LOCALE' -`--locale=LOCALE' - Specify the locale name, either a language specification of the - form LL or a combined language and country specification of the - form LL_CC. - -`-d DIRECTORY' - Specify the base directory of `.msg' message catalogs. - - The `-l' and `-d' options are mandatory. The `.msg' file is located -in the specified directory. - -Output file location --------------------- - -`-o FILE' -`--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 details --------------- - -`--force-po' - Always write an output file even if it contains no message. - -`-i' -`--indent' - Write the .po file using indented style. - -`--strict' - Write out a strict Uniforum conforming PO file. Note that this - Uniforum format should be avoided because it doesn't support the - GNU extensions. - -`-w NUMBER' -`--width=NUMBER' - 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 - NUMBER. - -`--no-wrap' - 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. - -`-s' -`--sort-output' - Generate sorted output. Note that using this option makes it much - harder for the translator to understand each message's context. - -Informative output ------------------- - -`-h' -`--help' - Display this help and exit. - -`-V' -`--version' - Output version information and exit. - -`-v' -`--verbose' - Increase verbosity level. - - -File: gettext.info, Node: MO Files, Prev: msgunfmt Invocation, Up: Binaries - -The Format of GNU MO Files -========================== - - The format of the generated MO files is best described by a picture, -which appears below. - - 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: `0x950412de' and `0xde120495'. The second word describes the -current revision of the file format. For now the revision is 0. This -might change in future versions, and ensures that the readers of MO -files can distinguish new formats from old ones, so that both can be -handled correctly. The version is kept separate from the magic number, -instead of using different magic numbers for different formats, mainly -because `/etc/magic' is not updated often. It might be better to have -magic separated from internal format version identification. - - 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. - - Then, at offset O and offset T 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. - - 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 `gettext' is usually _translated_ 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. - - The size S 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 _that_ 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 -`gettext' code, and is not documented here. - - As for the strings themselves, they follow the hash file, and each -is terminated with a <NUL>, and this <NUL> is not counted in the length -which appears in the string descriptor. The `msgfmt' 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. - - Plural forms are stored by letting the plural of the original string -follow the singular of the original string, separated through a <NUL> -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 <NUL> byte. Here also, the -length in the string descriptor includes all of them. - - Nothing prevents a MO file from having embedded <NUL>s in strings. -However, the program interface currently used already presumes that -strings are <NUL> terminated, so embedded <NUL>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 <NUL> bytes may accidently appear. -(No, we don't want to have wide characters in MO files. They would -make the file unnecessarily large, and the `wchar_t' type being -platform dependent, MO files would be platform dependent as well.) - - This particular issue has been strongly debated in the GNU `gettext' -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. - - 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 & offset 0th string ----------------. - O + 8 | length & offset 1st string ------------------. - ... ... | | - O + ((N-1)*8)| length & offset (N-1)th string | | | - | | | | - T | length & offset 0th translation ---------------. - T + 8 | length & offset 1st translation -----------------. - ... ... | | | | - T + ((N-1)*8)| length & offset (N-1)th translation | | | | | - | | | | | | - H | start hash table | | | | | - ... ... | | | | - H + S * 4 | end hash table | | | | | - | | | | | | - | NUL terminated 0th string <----------------' | | | - | | | | | - | NUL terminated 1st string <------------------' | | - | | | | - ... ... | | - | | | | - | NUL terminated 0th translation <---------------' | - | | | - | NUL terminated 1st translation <-----------------' - | | - ... ... - | | - +------------------------------------------+ - - -File: gettext.info, Node: Users, Next: Programmers, Prev: Binaries, Up: Top - -The User's View -*************** - - When GNU `gettext' will truly have reached its goal, average users -should feel some kind of astonished pleasure, seeing the effect of that -strange kind of magic that just makes their own native language appear -everywhere on their screens. As for naive users, they would ideally -have no special pleasure about it, merely taking their own language for -_granted_, and becoming rather unhappy otherwise. - - So, let's try to describe here how we would like the magic to -operate, as we want the users' view to be the simplest, among all ways -one could look at GNU `gettext'. All other software engineers: -programmers, translators, maintainers, should work together in such a -way that the magic becomes possible. This is a long and progressive -undertaking, and information is available about the progress of the -Translation Project. - - When a package is distributed, there are two kinds of users: -"installers" who fetch the distribution, unpack it, configure it, -compile it and install it for themselves or others to use; and "end -users" that call programs of the package, once these have been -installed at their site. GNU `gettext' is offering magic for both -installers and end users. - -* Menu: - -* Matrix:: The Current `ABOUT-NLS' Matrix -* Installers:: Magic for Installers -* End Users:: Magic for End Users - - -File: gettext.info, Node: Matrix, Next: Installers, Prev: Users, Up: Users - -The Current `ABOUT-NLS' Matrix -============================== - - Languages are not equally supported in all packages using GNU -`gettext'. To know if some package uses GNU `gettext', one may check -the distribution for the `ABOUT-NLS' information file, for some `LL.po' -files, often kept together into some `po/' directory, or for an `intl/' -directory. Internationalized packages have usually many `LL.po' files, -where LL represents the language. *Note End Users:: for a complete -description of the format for LL. - - More generally, a matrix is available for showing the current state -of the Translation Project, listing which packages are prepared for -multi-lingual messages, and which languages are supported by each. -Because this information changes often, this matrix is not kept within -this GNU `gettext' manual. This information is often found in file -`ABOUT-NLS' from various distributions, but is also as old as the -distribution itself. A recent copy of this `ABOUT-NLS' file, -containing up-to-date information, should generally be found on the -Translation Project sites, and also on most GNU archive sites. - - -File: gettext.info, Node: Installers, Next: End Users, Prev: Matrix, Up: Users - -Magic for Installers -==================== - - By default, packages fully using GNU `gettext', internally, are -installed in such a way that they to allow translation of messages. At -_configuration_ time, those packages should automatically detect -whether the underlying host system already provides the GNU `gettext' -functions. If not, the GNU `gettext' library should be automatically -prepared and used. Installers may use special options at configuration -time for changing this behavior. The command `./configure ---with-included-gettext' bypasses system `gettext' to use the included -GNU `gettext' instead, while `./configure --disable-nls' produces -programs totally unable to translate messages. - - Internationalized packages have usually many `LL.po' files. Unless -translations are disabled, all those available are installed together -with the package. However, the environment variable `LINGUAS' may be -set, prior to configuration, to limit the installed set. `LINGUAS' -should then contain a space separated list of two-letter codes, stating -which languages are allowed. - - -File: gettext.info, Node: End Users, Prev: Installers, Up: Users - -Magic for End Users -=================== - - We consider here those packages using GNU `gettext' internally, and -for which the installers did not disable translation at _configure_ -time. Then, users only have to set the `LANG' environment variable to -the appropriate `LL_CC' combination prior to using the programs in the -package. *Note Matrix::. For example, let's presume a German site. -At the shell prompt, users merely have to execute `setenv LANG de_DE' -(in `csh') or `export LANG; LANG=de_DE' (in `sh'). They could even do -this from their `.login' or `.profile' file. - - -File: gettext.info, Node: Programmers, Next: Translators, Prev: Users, Up: Top - -The Programmer's View -********************* - - One aim of the current message catalog implementation provided by -GNU `gettext' 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. - -* Menu: - -* catgets:: About `catgets' -* gettext:: About `gettext' -* Comparison:: Comparing the two interfaces -* Using libintl.a:: Using libintl.a in own programs -* gettext grok:: Being a `gettext' grok -* Temp Programmers:: Temporary Notes for the Programmers Chapter - - -File: gettext.info, Node: catgets, Next: gettext, Prev: Programmers, Up: Programmers - -About `catgets' -=============== - - The `catgets' 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 `catgets' does -not guarantee a unique interface. - - 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...) - - But we must not forget one point: after all the trouble with -transfering 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 _allowed_ to wear this name). - -* Menu: - -* Interface to catgets:: The interface -* Problems with catgets:: Problems with the `catgets' interface?! - - -File: gettext.info, Node: Interface to catgets, Next: Problems with catgets, Prev: catgets, Up: catgets - -The Interface -------------- - - The interface to the `catgets' implementation consists of three -functions which correspond to those used in file access: `catopen' to -open the catalog for using, `catgets' for accessing the message tables, -and `catclose' for closing after work is done. Prototypes for the -functions and the needed definitions are in the `<nl_types.h>' header -file. - - `catopen' is used like in this: - - nl_catd catd = catopen ("catalog_name", 0); - - 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 `0' as the value. The return value is a handle -to the message catalog, equivalent to handles to file returned by -`open'. - - This handle is of course used in the `catgets' function which can be -used like this: - - char *translation = catgets (catd, set_no, msg_id, "original string"); - - The first parameter is this catalog descriptor. The second parameter -specifies the set of messages in this catalog, in which the message -described by `msg_id' is obtained. `catgets' therefore uses a -three-stage addressing: - - catalog name => set number => message ID => translation - - 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 `char *' the resulting string _must not_ be changed. It -should better be `const char *', but the standard is published in 1988, -one year before ANSI C. - -The last of these function functions is used and behaves as expected: - - catclose (catd); - - After this no `catgets' call using the descriptor is legal anymore. - - -File: gettext.info, Node: Problems with catgets, Prev: Interface to catgets, Up: catgets - -Problems with the `catgets' Interface?! ---------------------------------------- - - Now that this description seemed to be really easy -- 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 `catgets': 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. - - -File: gettext.info, Node: gettext, Next: Comparison, Prev: catgets, Up: Programmers - -About `gettext' -=============== - - The definition of the `gettext' interface comes from a Uniforum -proposal and it is followed by at least one major Unix vendor (Sun) in -its last developments. It is not specified in any official standard, -though. - - The main points 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 so many task, 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 *Note Comparison:: for a more -detailed comparison of the two methods. - - 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 `gettext' Library. Programmers interested in using -this library will be interested in this description. - -* Menu: - -* Interface to gettext:: The interface -* Ambiguities:: Solving ambiguities -* Locating Catalogs:: Locating message catalog files -* Charset conversion:: How to request conversion to Unicode -* Plural forms:: Additional functions for handling plurals -* GUI program problems:: Another technique for solving ambiguities -* Optimized gettext:: Optimization of the *gettext functions - - -File: gettext.info, Node: Interface to gettext, Next: Ambiguities, Prev: gettext, Up: gettext - -The Interface -------------- - - 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. - - This is principally the description of the `gettext' interface. It -has a global domain which unqualified usages reference. Of course this -domain is selectable by the user. - - char *textdomain (const char *domain_name); - - This provides the possibility to change or query the current status -of the current global domain of the `LC_MESSAGE' category. The -argument is a null-terminated string, whose characters must be legal in -the use in filenames. If the DOMAIN_NAME argument is `NULL', the -function returns the current value. If no value has been set before, -the name of the default domain is returned: _messages_. Please note -that although the return value of `textdomain' is of type `char *' 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. - -To use a domain set by `textdomain' the function - - char *gettext (const char *msgid); - -is to be used. This is the simplest reasonable form one can imagine. -The translation of the string MSGID is returned if it is available in -the current domain. If not available the argument itself is returned. -If the argument is `NULL' the result is undefined. - - One things which should come into mind is that no explicit -dependency to the used domain is given. The current value of the -domain for the `LC_MESSAGES' locale is used. If this changes between -two executions of the same `gettext' call in the program, both calls -reference a different message catalog. - - For the easiest case, which is normally used in internationalized -packages, once at the beginning of execution a call to `textdomain' 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. - - -File: gettext.info, Node: Ambiguities, Next: Locating Catalogs, Prev: Interface to gettext, Up: gettext - -Solving Ambiguities -------------------- - - 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 -`textdomain', 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 `error'. By this mean we -would only need to translate them once. Another case are messages from -a library, as these _have_ to be independent of the current domain set -by the application. - -For this reasons there are two more functions to retrieve strings: - - char *dgettext (const char *domain_name, const char *msgid); - char *dcgettext (const char *domain_name, const char *msgid, - int category); - - Both take an additional argument at the first place, which -corresponds to the argument of `textdomain'. The third argument of -`dcgettext' allows to use another locale but `LC_MESSAGES'. But I -really don't know where this can be useful. If the DOMAIN_NAME is -`NULL' or CATEGORY 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. - - 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. - - char *bindtextdomain (const char *domain_name, - const char *dir_name); - - 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 -`textdomain'). A `NULL' pointer for the DIR_NAME parameter returns the -binding associated with DOMAIN_NAME. If DOMAIN_NAME itself is `NULL' -nothing happens and a `NULL' pointer is returned. Here again as for -all the other functions is true that none of the return value must be -changed! - - It is important to remember that relative path names for the -DIR_NAME 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 `chdir' command. Relative paths should -always be avoided to avoid dependencies and unreliabilities. - - -File: gettext.info, Node: Locating Catalogs, Next: Charset conversion, Prev: Ambiguities, Up: gettext - -Locating Message Catalog Files ------------------------------- - - 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 `bindtextdomain's second argument (or the default directory), -followed by the value and name of the locale and the domain name are -concatenated: - - DIR_NAME/LOCALE/LC_CATEGORY/DOMAIN_NAME.mo - - The default value for DIR_NAME is system specific. For the GNU -library, and for packages adhering to its conventions, it's: - /usr/local/share/locale - -LOCALE is the value of the locale whose name is this `LC_CATEGORY'. -For `gettext' and `dgettext' this `LC_CATEGORY' is always -`LC_MESSAGES'.(1) The value of the locale is determined through -`setlocale (LC_CATEGORY, NULL)'. (2) `dcgettext' specifies the locale -category by the third argument. - - ---------- Footnotes ---------- - - (1) Some system, eg Ultrix, don't have `LC_MESSAGES'. 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. - - (2) When the system does not support `setlocale' its behavior in -setting the locale values is simulated by looking at the environment -variables. - - -File: gettext.info, Node: Charset conversion, Next: Plural forms, Prev: Locating Catalogs, Up: gettext - -How to specify the output character set `gettext' uses ------------------------------------------------------- - - `gettext' 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. - - The output character set is, by default, the value of `nl_langinfo -(CODESET)', which depends on the `LC_CTYPE' part of the current locale. -But programs which store strings in a locale independent way (e.g. -UTF-8) can request that `gettext' and related functions return the -translations in that encoding, by use of the `bind_textdomain_codeset' -function. - - Note that the MSGID argument to `gettext' is not subject to -character set conversion. Also, when `gettext' does not find a -translation for MSGID, it returns MSGID unchanged - independently of -the current output character set. It is therefore recommended that all -MSGIDs be US-ASCII strings. - - - Function: char * bind_textdomain_codeset (const char *DOMAINNAME, - const char *CODESET) - The `bind_textdomain_codeset' function can be used to specify the - output character set for message catalogs for domain DOMAINNAME. - The CODESET argument must be a valid codeset name which can be used - for the `iconv_open' function, or a null pointer. - - If the CODESET parameter is the null pointer, - `bind_textdomain_codeset' returns the currently selected codeset - for the domain with the name DOMAINNAME. It returns `NULL' if no - codeset has yet been selected. - - The `bind_textdomain_codeset' function can be used several times. - If used multiple times with the same DOMAINNAME argument, the - later call overrides the settings made by the earlier one. - - The `bind_textdomain_codeset' 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 - `bind_textdomain_codeset', the return value is `NULL' and the - global variable ERRNO is set accordingly. - - -File: gettext.info, Node: Plural forms, Next: GUI program problems, Prev: Charset conversion, Up: gettext - -Additional functions for plural forms -------------------------------------- - - The functions of the `gettext' family described so far (and all the -`catgets' 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. - - 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: - - printf ("%d file%s deleted", n, n == 1 ? "" : "s"); - -After the first complaints from people internationalizing the code -people either completely avoided formulations like this or used strings -like `"file(s)"'. Both look unnatural and should be avoided. First -tries to solve the problem correctly looked like this: - - if (n == 1) - printf ("%d file deleted", n); - else - printf ("%d files deleted", n); - - 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 `<rzm@mat.uni.torun.pl>' reports: - - In Polish we use e.g. plik (file) this way: - 1 plik - 2,3,4 pliki - 5-21 pliko'w - 22-24 pliki - 25-31 pliko'w - and so on (o' means 8859-2 oacute which should be rather okreska, - similar to aogonek). - - There are two things which can differ between languages (and even -inside language families); - - * 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. - - * 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). - - But other language families have only one form or many forms. More - information on this in an extra section. - - 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 `gettext' interface should be used. - - 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 -`gettext' 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. - - 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 `gettext' 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. - - - Function: char * ngettext (const char *MSGID1, const char *MSGID2, - unsigned long int N) - The `ngettext' function is similar to the `gettext' function as it - finds the message catalogs in the same way. But it takes two - extra arguments. The MSGID1 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 MSGID2 parameter is the plural - form. The parameter N is used to determine the plural form. If no - message catalog is found MSGID1 is returned if `n == 1', otherwise - `msgid2'. - - An example for the use of this function is: - - printf (ngettext ("%d file removed", "%d files removed", n), n); - - Please note that the numeric value N has to be passed to the - `printf' function as well. It is not sufficient to pass it only to - `ngettext'. - - - Function: char * dngettext (const char *DOMAIN, const char *MSGID1, - const char *MSGID2, unsigned long int N) - The `dngettext' is similar to the `dgettext' 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 `ngettext' handles them. - - - Function: char * dcngettext (const char *DOMAIN, const char *MSGID1, - const char *MSGID2, unsigned long int N, int CATEGORY) - The `dcngettext' is similar to the `dcgettext' 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 `ngettext' handles them. - - 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. - - 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). - - The information about the plural form selection has to be stored in -the header entry of the PO file (the one with the empty `msgid' string). -The plural form information looks like this: - - Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1; - - The `nplurals' value must be a decimal number which specifies how -many different plural forms exist for this language. The string -following `plural' 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 `n'. This expression -will be evaluated whenever one of the functions `ngettext', -`dngettext', or `dcngettext' is called. The numeric value passed to -these functions is then substituted for all uses of the variable `n' in -the expression. The resulting value then must be greater or equal to -zero and smaller than the value given as the value of `nplurals'. - -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).(1) - -Only one form: - 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: - - Plural-Forms: nplurals=1; plural=0; - - Languages with this property include: - - Finno-Ugric family - Hungarian - - Asian family - Japanese, Korean - - Turkic/Altaic family - Turkish - -Two forms, singular used for one only - This is the form used in most existing programs since it is what - English is using. A header entry would look like this: - - Plural-Forms: nplurals=2; plural=n != 1; - - (Note: this uses the feature of C expressions that boolean - expressions have to value zero or one.) - - Languages with this property include: - - Germanic family - Danish, Dutch, English, German, Norwegian, Swedish - - Finno-Ugric family - Estonian, Finnish - - Latin/Greek family - Greek - - Semitic family - Hebrew - - Romanic family - Italian, Portuguese, Spanish - - Artificial - Esperanto - -Two forms, singular used for zero and one - Exceptional case in the language family. The header entry would - be: - - Plural-Forms: nplurals=2; plural=n>1; - - Languages with this property include: - - Romanic family - French, Brazilian Portuguese - -Three forms, special case for zero - The header entry would be: - - Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2; - - Languages with this property include: - - Baltic family - Latvian - -Three forms, special cases for one and two - The header entry would be: - - Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2; - - Languages with this property include: - - Celtic - Gaeilge (Irish) - -Three forms, special case for numbers ending in 1[2-9] - The header entry would look like this: - - Plural-Forms: nplurals=3; \ - plural=n%10==1 && n%100!=11 ? 0 : \ - n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2; - - Languages with this property include: - - Baltic family - Lithuanian - -Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4] - The header entry would look like this: - - Plural-Forms: nplurals=3; \ - plural=n%10==1 && n%100!=11 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; - - Languages with this property include: - - Slavic family - Croatian, Czech, Russian, Slovak, Ukrainian - -Three forms, special case for one and some numbers ending in 2, 3, or 4 - The header entry would look like this: - - Plural-Forms: nplurals=3; \ - plural=n==1 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; - - Languages with this property include: - - Slavic family - Polish - -Four forms, special case for one and all numbers ending in 02, 03, or 04 - The header entry would look like this: - - Plural-Forms: nplurals=4; \ - plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3; - - Languages with this property include: - - Slavic family - Slovenian - - ---------- Footnotes ---------- - - (1) Additions are welcome. Send appropriate information to -<bug-glibc-manual@gnu.org>. - diff --git a/doc/gettext.info-6 b/doc/gettext.info-6 deleted file mode 100644 index eeadcb9..0000000 --- a/doc/gettext.info-6 +++ /dev/null @@ -1,1082 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: GUI program problems, Next: Optimized gettext, Prev: Plural forms, Up: gettext - -How to use `gettext' in GUI programs ------------------------------------- - - One place where the `gettext' 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. - - As a consequence many people say that the `gettext' approach is -wrong and instead `catgets' should be used which indeed does not have -this problem. But there is a very simple and powerful method to handle -these kind of problems with the `gettext' functions. - -As as example consider the following fictional situation. A GUI program -has a menu bar with the following entries: - - +------------+------------+--------------------------------------+ - | File | Printer | | - +------------+------------+--------------------------------------+ - | Open | | Select | - | New | | Open | - +----------+ | Connect | - +----------+ - - To have the strings `File', `Printer', `Open', `New', `Select', and -`Connect' translated there has to be at some point in the code a call -to a function of the `gettext' family. But in two places the string -passed into the function would be `Open'. The translations might not -be the same and therefore we are in the dilemma described above. - - One solution to this problem is to artificially enlengthen the -strings to make them unambiguous. But what would the program do if no -translation is available? The enlengthened string is not what should be -printed. So we should use a little bit modified version of the -functions. - - To enlengthen the strings a uniform method should be used. E.g., in -the example above the strings could be chosen as - - Menu|File - Menu|Printer - Menu|File|Open - Menu|File|New - Menu|Printer|Select - Menu|Printer|Open - Menu|Printer|Connect - - Now all the strings are different and if now instead of `gettext' -the following little wrapper function is used, everything works just -fine: - - char * - sgettext (const char *msgid) - { - char *msgval = gettext (msgid); - if (msgval == msgid) - msgval = strrchr (msgid, '|') + 1; - return msgval; - } - - What this little function does is to recognize the case when no -translation is available. This can be done very efficiently by a -pointer comparison since the return value is the input value. If there -is no translation we know that the input string is in the format we used -for the Menu entries and therefore contains a `|' character. We simply -search for the last occurrence of this character and return a pointer -to the character following it. That's it! - - If one now consistently uses the enlengthened string form and -replaces the `gettext' calls with calls to `sgettext' (this is normally -limited to very few places in the GUI implementation) then it is -possible to produce a program which can be internationalized. - - The other `gettext' functions (`dgettext', `dcgettext' and the -`ngettext' equivalents) can and should have corresponding functions as -well which look almost identical, except for the parameters and the -call to the underlying function. - - Now there is of course the question why such functions do not exist -in the GNU gettext package? There are two parts of the answer to this -question. - - * They are easy to write and therefore can be provided by the - project they are used in. This is not an answer by itself and - must be seen together with the second part which is: - - * There is no way the gettext package can contain a version which - can work everywhere. The problem is the selection of the - character to separate the prefix from the actual string in the - enlenghtened string. The examples above used `|' which is a quite - good choice because it resembles a notation frequently used in - this context and it also is a character not often used in message - strings. - - But what if the character is used in message strings? Or if the - chose character is not available in the character set on the - machine one compiles (e.g., `|' is not required to exist for - ISO C; this is why the `iso646.h' file exists in ISO C programming - environments). - - There is only one more comment to be said. The wrapper function -above requires that the translations strings are not enlengthened -themselves. This is only logical. There is no need to disambiguate -the strings (since they are never used as keys for a search) and one -also saves quite some memory and disk space by doing this. - - -File: gettext.info, Node: Optimized gettext, Prev: GUI program problems, Up: gettext - -Optimization of the *gettext functions --------------------------------------- - - At this point of the discussion we should talk about an advantage of -the GNU `gettext' 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: - - { - while (...) - { - puts (gettext ("Hello world")); - } - } - -When the locale selection does not change between two runs the resulting -string is always the same. One way to use this is: - - { - str = gettext ("Hello world"); - while (...) - { - puts (str); - } - } - -But this solution is not usable in all situation (e.g. when the locale -selection changes) nor does it lead to legible code. - - For this reason, GNU `gettext' caches previous translation results. -When the same translation is requested twice, with no new message -catalogs being loaded in between, `gettext' will, the second time, find -the result through a single cache lookup. - - -File: gettext.info, Node: Comparison, Next: Using libintl.a, Prev: gettext, Up: Programmers - -Comparing the Two Interfaces -============================ - - The following discussion is perhaps a little bit colored. As said -above we implemented GNU `gettext' following the Uniforum proposal and -this surely has its reasons. But it should show how we came to this -decision. - - First we take a look at the developing process. When we write an -application using NLS provided by `gettext' 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 `gettext("...")' instead of `"..."'. At the -beginning of each source file (or in a central header file) we define - - #define gettext(String) (String) - - Even this definition can be avoided when the system supports the -`gettext' 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 `gettext' code you will see that we use `_("...")' instead of -`gettext("...")'. This reduces the number of additional characters per -translatable string to _3_ (in words: three). - - When now a production version of the program is needed we simply -replace the definition - - #define _(String) (String) - -by - - #include <libintl.h> - #define _(String) gettext (String) - -Additionally we run the program `xgettext' 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. - - The same procedure can be done for the `gettext_noop' invocations -(*note Special cases::). One usually defines `gettext_noop' as a no-op -macro. So you should consider the following code for your project: - - #define gettext_noop(String) String - #define N_(String) gettext_noop (String) - - `N_' is a short form similar to `_'. The `Makefile' in the `po/' -directory of GNU `gettext' knows by default both of the mentioned short -forms so you are invited to follow this proposal for your own ease. - - Now to `catgets'. 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 `gettext' 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. - - But there are also some points people might call advantages speaking -for `catgets'. 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: - - printf ("%s: %d", gettext ("number"), number_of_errors) - - printf ("you should see %d %s", number_count, - number_count == 1 ? gettext ("number") : gettext ("numbers")) - - Here we have to translate two times the string `"number"'. 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 `"Anzahl"' and the second to -`"Zahl"'. - - 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: - - 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) - - 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. - - `catgets' allows same original entry to have different translations, -but `gettext' has another, scalable approach for solving ambiguities of -this kind: *Note Ambiguities::. - - -File: gettext.info, Node: Using libintl.a, Next: gettext grok, Prev: Comparison, Up: Programmers - -Using libintl.a in own programs -=============================== - - Starting with version 0.9.4 the library `libintl.h' should be -self-contained. I.e., you can use it in your own programs without -providing additional functions. The `Makefile' will put the header and -the library in directories selected using the `$(prefix)'. - - -File: gettext.info, Node: gettext grok, Next: Temp Programmers, Prev: Using libintl.a, Up: Programmers - -Being a `gettext' grok -====================== - - To fully exploit the functionality of the GNU `gettext' 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: - - * Changing the language at runtime - - 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 `gettext' function. The method which is presented here only - works correctly with the GNU implementation of the `gettext' - functions. - - In the function `dcgettext' 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: - - 1. `LANGUAGE' - - 2. `LC_ALL' - - 3. `LC_xxx', according to selected locale - - 4. `LANG' - - Afterwards the path is constructed using the found value and the - translation file is loaded if available. - - What happens now when the value for, say, `LANGUAGE' changes? - According to the process explained above the new value of this - variable is found as soon as the `dcgettext' function is called. - But this also means the (perhaps) different message catalog file - is loaded. In other words: the used language is changed. - - 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 `dcgettext' function as long as no new catalog - is loaded. But if `dcgettext' is not called the program also - cannot find the `LANGUAGE' variable be changed (*note Optimized - gettext::). A solution for this is very easy. Include the - following code in the language switching function. - - /* Change language. */ - setenv ("LANGUAGE", "fr", 1); - - /* Make change known. */ - { - extern int _nl_msg_cat_cntr; - ++_nl_msg_cat_cntr; - } - - The variable `_nl_msg_cat_cntr' is defined in `loadmsgcat.c'. You - don't need to know what this is for. But it can be used to detect - whether a `gettext' implementation is GNU gettext and not non-GNU - system's native gettext implementation. - - - -File: gettext.info, Node: Temp Programmers, Prev: gettext grok, Up: Programmers - -Temporary Notes for the Programmers Chapter -=========================================== - -* Menu: - -* Temp Implementations:: Temporary - Two Possible Implementations -* Temp catgets:: Temporary - About `catgets' -* Temp WSI:: Temporary - Why a single implementation -* Temp Notes:: Temporary - Notes - - -File: gettext.info, Node: Temp Implementations, Next: Temp catgets, Prev: Temp Programmers, Up: Temp Programmers - -Temporary - Two Possible Implementations ----------------------------------------- - - There are two competing methods for language independent messages: -the X/Open `catgets' method, and the Uniforum `gettext' method. The -`catgets' method indexes messages by integers; the `gettext' method -indexes them by their English translations. The `catgets' method has -been around longer and is supported by more vendors. The `gettext' -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. - - Neither one is in the POSIX standard. There was much disagreement -in the POSIX.1 committee about using the `gettext' routines vs. -`catgets' (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, "...as an example of a messaging system that has been -implemented..." - - 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. - - -File: gettext.info, Node: Temp catgets, Next: Temp WSI, Prev: Temp Implementations, Up: Temp Programmers - -Temporary - About `catgets' ---------------------------- - - There have been a few discussions of late on the use of `catgets' 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. - - I'll not deny the fact that `catgets' could have been designed a lot -better. It currently has quite a number of limitations and these have -already been pointed out. - - 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. - - 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. - - As I understand it, Spec1170 is roughly based upon version 4 of the -X/Open Portability Guidelines (XPG4). Because `catgets' and friends -are defined in XPG4, I'm led to believe that `catgets' is a part of -Spec1170 and hence will become a standardized component of all Unix -systems. - - -File: gettext.info, Node: Temp WSI, Next: Temp Notes, Prev: Temp catgets, Up: Temp Programmers - -Temporary - Why a single implementation ---------------------------------------- - - Now it seems kind of wasteful to me to have two different systems -installed for accessing message catalogs. If we do want to remedy -`catgets' deficiencies why don't we try to expand `catgets' (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 `gettext' for their internationalization, and another set of -routines (catgets) for all other software. Bloated? - - 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 `catgets'. We -will be implementing the `libintl' code within our `libc', but does -this mean we also have to incorporate another message catalog access -scheme within our `libc' as well? And what about people who are going -to be using the `libintl' + non-`catgets' routines. When they port -their software to other platforms, they're now going to have to include -the front-end (`libintl') code plus the back-end code (the non-`catgets' -access routines) with their software instead of just including the -`libintl' code with their software. - - 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 `libintl' expand -beyond message catalog support)? - - 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. - - -File: gettext.info, Node: Temp Notes, Prev: Temp WSI, Up: Temp Programmers - -Temporary - Notes ------------------ - - 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. - - OK. After incorporating the last changes I have to spend some time -on making the GNU/Linux `libc' `gettext' functions. So in future -Solaris is not the only system having `gettext'. - - -File: gettext.info, Node: Translators, Next: Maintainers, Prev: Programmers, Up: Top - -The Translator's View -********************* - -* Menu: - -* Trans Intro 0:: Introduction 0 -* Trans Intro 1:: Introduction 1 -* Discussions:: Discussions -* Organization:: Organization -* Information Flow:: Information Flow - - -File: gettext.info, Node: Trans Intro 0, Next: Trans Intro 1, Prev: Translators, Up: Translators - -Introduction 0 -============== - - 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. - - The GNU `gettext' tool set contains _everything_ 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. - - 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 _work_ at translating messages, please send mail -to your translating team. - - Each team has its own mailing list, courtesy of Linux International. -You may reach your translating team at the address `LL@li.org', -replacing LL by the two-letter ISO 639 code for your language. -Language codes are _not_ the same as country codes given in ISO 3166. -The following translating teams exist: - - Chinese `zh', Czech `cs', Danish `da', Dutch `nl', Esperanto `eo', - Finnish `fi', French `fr', Irish `ga', German `de', Greek `el', - Italian `it', Japanese `ja', Indonesian `in', Norwegian `no', - Polish `pl', Portuguese `pt', Russian `ru', Spanish `es', Swedish - `sv' and Turkish `tr'. - -For example, you may reach the Chinese translating team by writing to -`zh@li.org'. 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 `sv-request@li.org', having this message -body: - - subscribe - - Keep in mind that team members should be interested in _working_ 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 `translation@iro.umontreal.ca'; you will -then reach the coordinator for all translator teams. - - 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 -`translation@iro.umontreal.ca' indicating what language(s) you can work -on. - - -File: gettext.info, Node: Trans Intro 1, Next: Discussions, Prev: Trans Intro 0, Up: Translators - -Introduction 1 -============== - - This is now official, GNU is going international! Here is the -announcement submitted for the January 1995 GNU Bulletin: - - 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 - `translation@iro.umontreal.ca' indicating what language(s) you can - work on. - - 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. - - 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. - - 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. - - For suggestion clarifications, additions or corrections to this -document, please e-mail to `translation@iro.umontreal.ca'. - - -File: gettext.info, Node: Discussions, Next: Organization, Prev: Trans Intro 1, Up: Translators - -Discussions -=========== - - Facing this internationalization effort, a few users expressed their -concerns. Some of these doubts are presented and discussed, here. - - * Smaller groups - - 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 _into computers_, in some countries, - generally seem to prefer English versions of their software. - - 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. - - * Misinterpretation - - 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. - - 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. - - * Odd translations - - 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 "rather pushy, - obnoxious and sometimes even hilarious." As a French speaking - man, I have the experience of those instruction manuals for goods, - so poorly translated in French in Korea or Taiwan... - - 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. - - * Dependencies over the GPL or LGPL - - Some people wonder if using GNU `gettext' 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 "normally not". - - The GNU `gettext' library, i.e. the contents of `libintl', is - covered by the GNU Library General Public License. The rest of - the GNU `gettext' package is covered by the GNU General Public - License. - - 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 `libintl' are under the LGPL, the LGPL - needs to be considered. It gives the right to distribute the - complete unmodified source of `libintl' even with non-free - programs. It also gives the right to use `libintl' as a shared - library, even for non-free programs. But it gives the right to - use `libintl' as a static library or to incorporate `libintl' into - another library only to free software. - - - -File: gettext.info, Node: Organization, Next: Information Flow, Prev: Discussions, Up: Translators - -Organization -============ - - 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! - - 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. - - 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. - - 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 `gettext' becomes an official reality. The e-mail address -`translation@iro.umontreal.ca' has been setup for receiving offers from -volunteers and general e-mail on these topics. This address reaches -the Translation Project coordinator. - -* Menu: - -* Central Coordination:: Central Coordination -* National Teams:: National Teams -* Mailing Lists:: Mailing Lists - - -File: gettext.info, Node: Central Coordination, Next: National Teams, Prev: Organization, Up: Organization - -Central Coordination --------------------- - - I also think GNU will need sooner than it thinks, that someone setup -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 -`gnu.announce' a list of this national committee's can be published. - - 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. - - -File: gettext.info, Node: National Teams, Next: Mailing Lists, Prev: Central Coordination, Up: Organization - -National Teams --------------- - - 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. - - 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. - - We need to choose someone who is good at writing clear and concise -prose in the language in question. That is hard--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. - - 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? - - 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. - - 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. - - 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. - -* Menu: - -* Sub-Cultures:: Sub-Cultures -* Organizational Ideas:: Organizational Ideas - - -File: gettext.info, Node: Sub-Cultures, Next: Organizational Ideas, Prev: National Teams, Up: National Teams - -Sub-Cultures -............ - - 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. - - 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 _before_ GNU -`gettext' become officially published. And I suspect that this means -soon! - - -File: gettext.info, Node: Organizational Ideas, Prev: Sub-Cultures, Up: National Teams - -Organizational Ideas -.................... - - 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: - - * Each group should have one FTP server (at least one master). - - * 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). - - * 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). - - * A "core group" should judge about questionable changes (for now - this group consists solely by me but I ask some others - occasionally; this also seems to work). - - - -File: gettext.info, Node: Mailing Lists, Prev: National Teams, Up: Organization - -Mailing Lists -------------- - - If we get any inquiries about GNU `gettext', send them on to: - - `translation@iro.umontreal.ca' - - The `*-pretest' 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! - - Franc,ois, we have a mechanism in place here at `gnu.ai.mit.edu' 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. - - 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 `majordomo'. -These lists have been _very_ dependable so far... - - 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. - - 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 _their_ 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. - - -File: gettext.info, Node: Information Flow, Prev: Organization, Up: Translators - -Information Flow -================ - - 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. - - 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 _as the -maintainer_. 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. - - 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--same debates over again. - - 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. - - 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. - - -File: gettext.info, Node: Maintainers, Next: Programming Languages, Prev: Translators, Up: Top - -The Maintainer's View -********************* - - 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 (*note Users::) will work for -installers and end users. - - Of course, there are many possible ways by which GNU `gettext' 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 `gettext' 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 `configure.in' file and uses GNU Autoconf. - - Nevertheless, GNU `gettext' 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 `gettext' work for them in all situations. -There are surely many, out there. - - Even if `gettext' methods are now stabilizing, slight adjustments -might be needed between successive `gettext' versions, so you should -ideally revise this chapter in subsequent releases, looking for changes. - -* Menu: - -* Flat and Non-Flat:: Flat or Non-Flat Directory Structures -* Prerequisites:: Prerequisite Works -* gettextize Invocation:: Invoking the `gettextize' Program -* Adjusting Files:: Files You Must Create or Alter -* autoconf macros:: Autoconf macros for use in `configure.in' -* CVS Issues:: Integrating with CVS - - -File: gettext.info, Node: Flat and Non-Flat, Next: Prerequisites, Prev: Maintainers, Up: Maintainers - -Flat or Non-Flat Directory Structures -===================================== - - Some free software packages are distributed as `tar' files which -unpack in a single directory, these are said to be "flat" distributions. -Other free software packages have a one level hierarchy of -subdirectories, using for example a subdirectory named `doc/' for the -Texinfo manual and man pages, another called `lib/' for holding -functions meant to replace or complement C libraries, and a -subdirectory `src/' for holding the proper sources for the package. -These other distributions are said to be "non-flat". - - 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 `gettext'. Also, if you have many PO files, -this could somewhat pollute your single directory. Also, GNU -`gettext''s libintl sources consist of C sources, shell scripts, `sed' -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. - - Maybe because GNU `gettext' 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. - - -File: gettext.info, Node: Prerequisites, Next: gettextize Invocation, Prev: Flat and Non-Flat, Up: Maintainers - -Prerequisite Works -================== - - There are some works which are required for using GNU `gettext' 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. - - * Before attempting to use `gettextize' you should install some - other packages first. Ensure that recent versions of GNU `m4', - GNU Autoconf and GNU `gettext' are already installed at your site, - and if not, proceed to do this first. If you get to install these - things, beware that GNU `m4' must be fully installed before GNU - Autoconf is even _configured_. - - To further ease the task of a package maintainer the `automake' - package was designed and implemented. GNU `gettext' now uses this - tool and the `Makefile's in the `intl/' and `po/' therefore know - about all the goals necessary for using `automake' and `libintl' - in one project. - - 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 `m4', GNU Autoconf, GNU `gettext', or GNU `automake' - 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 `gettext' shall then be installed at the user site if the end - users want to see the translation of shell script messages. - - * Your package should use Autoconf and have a `configure.in' or - `configure.ac' 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. - - * Your C sources should have already been modified according to - instructions given earlier in this manual. *Note Sources::. - - * Your `po/' directory should receive all PO files submitted to you - by the translator teams, each having `LL.po' 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. - - - 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 `translation@iro.umontreal.ca' 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 `po/' for distribution. - - 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 _not_ 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 -`ABOUT-NLS' file. - - Maintainers should _never ever_ 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 _solve_ a team's problem on your own. - diff --git a/doc/gettext.info-7 b/doc/gettext.info-7 deleted file mode 100644 index be3288d..0000000 --- a/doc/gettext.info-7 +++ /dev/null @@ -1,1209 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: gettextize Invocation, Next: Adjusting Files, Prev: Prerequisites, Up: Maintainers - -Invoking the `gettextize' Program -================================= - - The `gettextize' program is an interactive tool that helps the -maintainer of a package internationalized through GNU `gettext'. It is -used for two purposes: - - * As a wizard, when a package is modified to use GNU `gettext' for - the first time. - - * As a migration tool, for upgrading the GNU `gettext' support in a - package from a previous to a newer version of GNU `gettext'. - - This program performs the following tasks: - - * It copies into the package some files that are consistently and - identically needed in every package internationalized through GNU - `gettext'. - - * It performs as many of the tasks mentioned in the next section - *Note Adjusting Files:: as can be performed automatically. - - * It removes obsolete files and idioms used for previous GNU - `gettext' versions to the form recommended for the current GNU - `gettext' version. - - * It prints a summary of the tasks that ought to be done manually - and could not be done automatically by `gettextize'. - - It can be invoked as follows: - - gettextize [ OPTION... ] [ DIRECTORY ] - -and accepts the following options: - -`-c' -`--copy' - Copy the needed files instead of making symbolic links. Using - links would allow the package to always use the latest `gettext' - code available on the system, but it might disturb some mechanism - the maintainer is used to apply to the sources. Because running - `gettextize' is easy there shouldn't be problems with using copies. - -`-f' -`--force' - Force replacement of files which already exist. - -`--intl' - Install the libintl sources in a subdirectory named `intl/'. 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 `AM_GNU_GETTEXT' in `configure.in' should read: - `AM_GNU_GETTEXT([external])', and internationalization will not be - enabled on systems lacking GNU gettext. - -`--no-changelog' - Don't update or create ChangeLog files. By default, `gettextize' - logs all changes (file additions, modifications and removals) in a - file called `ChangeLog' in each affected directory. - -`-n' -`--dry-run' - Print modifications but don't perform them. All actions that - `gettextize' would normally execute are inhibited and instead only - listed on standard output. - -`--help' - Display this help and exit. - -`--version' - Output version information and exit. - - If DIRECTORY is given, this is the top level directory of a package -to prepare for using GNU `gettext'. If not given, it is assumed that -the current directory is the top level directory of such a package. - - The program `gettextize' provides the following files. However, no -existing file will be replaced unless the option `--force' (`-f') is -specified. - - 1. The `ABOUT-NLS' 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 `ABOUT-NLS' file than the one provided through - `gettextize', if you have one handy. You may also fetch a more - recent copy of file `ABOUT-NLS' from Translation Project sites, - and from most GNU archive sites. - - 2. A `po/' directory is created for eventually holding all - translation files, but initially only containing the file - `po/Makefile.in.in' from the GNU `gettext' distribution (beware - the double `.in' in the file name) and a few auxiliary files. If - the `po/' directory already exists, it will be preserved along - with the files it contains, and only `Makefile.in.in' and the - auxiliary files will be overwritten. - - 3. Only if `--intl' has been specified: A `intl/' directory is - created and filled with most of the files originally in the - `intl/' directory of the GNU `gettext' distribution. Also, if - option `--force' (`-f') is given, the `intl/' directory is emptied - first. - - 4. The files `config.rpath' and `mkinstalldirs' are copied into the - directory containing configuration support files. It is needed by - the `AM_GNU_GETTEXT' autoconf macro. - - 5. Only if the project is using GNU `automake': A set of `autoconf' - macro files is copied into the package's `autoconf' macro - repository, usually in a directory called `m4/'. - - If your site support symbolic links, `gettextize' 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 `-h' option while creating the `tar' archive of your -distribution will resolve each link by an actual copy in the -distribution archive. So, to insist, you really should use `-h' option -with `tar' within your `dist' goal of your main `Makefile.in'. - - Furthermore, `gettextize' will update all `Makefile.am' files in -each affected directory, as well as the top level `configure.in' or -`configure.ac' file. - - It is interesting to understand that most new files for supporting -GNU `gettext' facilities in one package go in `intl/', `po/' and `m4/' -subdirectories. One distinction between `intl/' and the two other -directories is that `intl/' is meant to be completely identical in all -packages using GNU `gettext', while the other directories will mostly -contain package dependent files. - - The `gettextize' 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 -`gettextize' whether its changes are acceptable to him, and possibly -adjust them. An exception to this rule is the `intl/' directory, which -is added or replaced or removed as a whole. - - It is important to understand that `gettextize' can not do the -entire job of adapting a package for using GNU `gettext'. The amount -of remaining work depends on whether the package uses GNU `automake' or -not. But in any case, the maintainer should still read the section -*Note Adjusting Files:: after invoking `gettextize'. - - It is also important to understand that `gettextize' 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 *Note autopoint Invocation::. - - -File: gettext.info, Node: Adjusting Files, Next: autoconf macros, Prev: gettextize Invocation, Up: Maintainers - -Files You Must Create or Alter -============================== - - Besides files which are automatically added through `gettextize', -there are many files needing revision for properly interacting with GNU -`gettext'. 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. - - 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 -`gettext' 0.11.6-pre2 distribution itself, or from the GNU `hello' -distribution (`http://www.franken.de/users/gnu/ke/hello' or -`http://www.gnu.franken.de/ke/hello/') You may indeed refer to the -source code of the GNU `gettext' and GNU `hello' packages, as they are -intended to be good examples for using GNU gettext functionality. - -* Menu: - -* po/POTFILES.in:: `POTFILES.in' in `po/' -* po/LINGUAS:: `LINGUAS' in `po/' -* po/Makevars:: `Makefile' pieces in `po/' -* configure.in:: `configure.in' at top level -* config.guess:: `config.guess', `config.sub' at top level -* mkinstalldirs:: `mkinstalldirs' at top level -* aclocal:: `aclocal.m4' at top level -* acconfig:: `acconfig.h' at top level -* config.h.in:: `config.h.in' at top level -* Makefile:: `Makefile.in' at top level -* src/Makefile:: `Makefile.in' in `src/' -* lib/gettext.h:: `gettext.h' in `lib/' - - -File: gettext.info, Node: po/POTFILES.in, Next: po/LINGUAS, Prev: Adjusting Files, Up: Adjusting Files - -`POTFILES.in' in `po/' ----------------------- - - The `po/' directory should receive a file named `POTFILES.in'. This -file tells which files, among all program sources, have marked strings -needing translation. Here is an example of such a file: - - # 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 - -Hash-marked comments and white lines are ignored. All other lines list -those source files containing strings marked for translation (*note -Mark Keywords::), in a notation relative to the top level of your whole -distribution, rather than the location of the `POTFILES.in' file itself. - - When a C file is automatically generated by a tool, like `flex' or -`bison', that doesn't introduce translatable strings by itself, it is -recommended to list in `po/POTFILES.in' the real source file (ending in -`.l' in the case of `flex', or in `.y' in the case of `bison'), not the -generated C file. - - -File: gettext.info, Node: po/LINGUAS, Next: po/Makevars, Prev: po/POTFILES.in, Up: Adjusting Files - -`LINGUAS' in `po/' ------------------- - - The `po/' directory should also receive a file named `LINGUAS'. -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: - - # Set of available languages. - de fr - -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 `LINGUAS' file, but -rather by using the `LINGUAS' environment variable (*note Installers::). - - -File: gettext.info, Node: po/Makevars, Next: configure.in, Prev: po/LINGUAS, Up: Adjusting Files - -`Makefile' pieces in `po/' --------------------------- - - The `po/' directory also has a file named `Makevars'. It can be -left unmodified if your package has a single message domain and, -accordingly, a single `po/' directory. Only packages which have -multiple `po/' directories at different locations need to adjust the -three variables defined in `Makevars'. - - `po/Makevars' gets inserted into the `po/Makefile' when the latter -is created. At the same time, all files called `Rules-*' in the `po/' -directory get appended to the `po/Makefile'. They present an -opportunity to add rules for special PO files to the Makefile, without -needing to mess with `po/Makefile.in.in'. - - GNU gettext comes with a `Rules-quot' file, containing rules for -building catalogs `en@quot.po' and `en@boldquot.po'. The effect of -`en@quot.po' is that people who set their `LANGUAGE' environment -variable to `en@quot' 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 `en@quot' to the `po/LINGUAS' file. The effect of -`en@boldquot.po' is that people who set `LANGUAGE' to `en@boldquot' -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 `en@boldquot' to the `po/LINGUAS' file. - - -File: gettext.info, Node: configure.in, Next: config.guess, Prev: po/Makevars, Up: Adjusting Files - -`configure.in' at top level ---------------------------- - - `configure.in' or `configure.ac' - this is the source from which -`autoconf' generates the `configure' script. - - 1. Declare the package and version. - - This is done by a set of lines like these: - - PACKAGE=gettext - VERSION=0.11.6-pre2 - AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") - AC_DEFINE_UNQUOTED(VERSION, "$VERSION") - AC_SUBST(PACKAGE) - AC_SUBST(VERSION) - - or, if you are using GNU `automake', by a line like this: - - AM_INIT_AUTOMAKE(gettext, 0.11.6-pre2) - - Of course, you replace `gettext' with the name of your package, - and `0.11.6-pre2' by its version numbers, exactly as they should - appear in the packaged `tar' file name of your distribution - (`gettext-0.11.6-pre2.tar.gz', here). - - 2. Check for internationalization support. - - Here is the main `m4' macro for triggering internationalization - support. Just add this line to `configure.in': - - AM_GNU_GETTEXT - - This call is purposely simple, even if it generates a lot of - configure time checking and actions. - - If you have suppressed the `intl/' subdirectory by calling - `gettextize' without `--intl' option, this call should read - - AM_GNU_GETTEXT([external]) - - 3. Have output files created. - - The `AC_OUTPUT' directive, at the end of your `configure.in' file, - needs to be modified in two ways: - - AC_OUTPUT([EXISTING CONFIGURATION FILES intl/Makefile po/Makefile.in], - [EXISTING ADDITIONAL ACTIONS]) - - The modification to the first argument to `AC_OUTPUT' asks for - substitution in the `intl/' and `po/' directories. Note the `.in' - suffix used for `po/' only. This is because the distributed file - is really `po/Makefile.in.in'. - - If you have suppressed the `intl/' subdirectory by calling - `gettextize' without `--intl' option, then you don't need to add - `intl/Makefile' to the `AC_OUTPUT' line. - - - -File: gettext.info, Node: config.guess, Next: mkinstalldirs, Prev: configure.in, Up: Adjusting Files - -`config.guess', `config.sub' at top level ------------------------------------------ - - If you haven't suppressed the `intl/' subdirectory, you need to add -the GNU `config.guess' and `config.sub' files to your distribution. -They are needed because the `intl/' directory has platform dependent -support for determining the locale's character encoding and therefore -needs to identify the platform. - - You can obtain the newest version of `config.guess' and `config.sub' -from `ftp://ftp.gnu.org/pub/gnu/config/'. Less recent versions are -also contained in the GNU `automake' and GNU `libtool' packages. - - Normally, `config.guess' and `config.sub' 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 -`install-sh', `ltconfig', `ltmain.sh', `mkinstalldirs' or `missing'. -All you need to do, other than moving the files, is to add the -following line to your `configure.in'. - - AC_CONFIG_AUX_DIR([SUBDIR]) - - -File: gettext.info, Node: mkinstalldirs, Next: aclocal, Prev: config.guess, Up: Adjusting Files - -`mkinstalldirs' at top level ----------------------------- - - If `gettextize' has not already done it, you need to add the GNU -`mkinstalldirs' script to your distribution. It is needed because -`mkdir -p' is not portable enough. You find this script in the GNU -`automake' distribution. - - Normally, `mkinstalldirs' is put at the top level of a distribution. -But it is also possible to put it in a subdirectory, altogether with -other configuration support files like `install-sh', `ltconfig', -`ltmain.sh' or `missing'. All you need to do, other than moving the -files, is to add the following line to your `configure.in'. - - AC_CONFIG_AUX_DIR([SUBDIR]) - - -File: gettext.info, Node: aclocal, Next: acconfig, Prev: mkinstalldirs, Up: Adjusting Files - -`aclocal.m4' at top level -------------------------- - - If you do not have an `aclocal.m4' file in your distribution, the -simplest is to concatenate the files `codeset.m4', `gettext.m4', -`glibc21.m4', `iconv.m4', `intdiv0.m4', `inttypes.m4', `inttypes_h.m4', -`inttypes-pri.m4', `isc-posix.m4', `lcmessage.m4', `lib-ld.m4', -`lib-link.m4', `lib-prefix.m4', `progtest.m4', `stdint_h.m4', -`uintmax_t.m4', `ulonglong.m4' from GNU `gettext''s `m4/' directory -into a single file. If you have suppressed the `intl/' directory, only -`gettext.m4', `iconv.m4', `lib-ld.m4', `lib-link.m4', `lib-prefix.m4', -`progtest.m4' need to be concatenated. - - If you already have an `aclocal.m4' file, then you will have to -merge the said macro files into your `aclocal.m4'. Note that if you -are upgrading from a previous release of GNU `gettext', you should most -probably _replace_ the macros (`AM_GNU_GETTEXT', etc.), as they usually -change a little from one release of GNU `gettext' to the next. Their -contents may vary as we get more experience with strange systems out -there. - - If you are using GNU `automake' 1.5 or newer, it is enough to put -these macro files into a subdirectory named `m4/' and add the line - - ACLOCAL_AMFLAGS = -I m4 - -to your top level `Makefile.am'. - - 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 -`m4' code will be the same for all projects using GNU `gettext'. - - -File: gettext.info, Node: acconfig, Next: config.h.in, Prev: aclocal, Up: Adjusting Files - -`acconfig.h' at top level -------------------------- - - Earlier GNU `gettext' releases required to put definitions for -`ENABLE_NLS', `HAVE_GETTEXT' and `HAVE_LC_MESSAGES', `HAVE_STPCPY', -`PACKAGE' and `VERSION' into an `acconfig.h' file. This is not needed -any more; you can remove them from your `acconfig.h' file unless your -package uses them independently from the `intl/' directory. - - -File: gettext.info, Node: config.h.in, Next: Makefile, Prev: acconfig, Up: Adjusting Files - -`config.h.in' at top level --------------------------- - - The include file template that holds the C macros to be defined by -`configure' is usually called `config.h.in' and may be maintained -either manually or automatically. - - If it is maintained automatically, by use of the `autoheader' -program, you need to do nothing about it. This is the case in -particular if you are using GNU `automake'. - - If it is maintained manually, and if `gettextize' has created an -`intl/' directory, you should switch to using `autoheader'. The list -of C macros to be added for the sake of the `intl/' directory is just -too long to be maintained manually; it also changes between different -versions of GNU `gettext'. - - If it is maintained manually, and if on the other hand you have -suppressed the `intl/' directory by calling `gettextize' without -`--intl' option, then you can get away by adding the following lines to -`config.h.in': - - /* Define to 1 if translation of program messages to the user's - native language is requested. */ - #undef ENABLE_NLS - - -File: gettext.info, Node: Makefile, Next: src/Makefile, Prev: config.h.in, Up: Adjusting Files - -`Makefile.in' at top level --------------------------- - - Here are a few modifications you need to make to your main, top-level -`Makefile.in' file. - - 1. Add the following lines near the beginning of your `Makefile.in', - so the `dist:' goal will work properly (as explained further down): - - PACKAGE = @PACKAGE@ - VERSION = @VERSION@ - - 2. Add file `ABOUT-NLS' to the `DISTFILES' definition, so the file - gets distributed. - - 3. Wherever you process subdirectories in your `Makefile.in', be sure - you also process the subdirectories `intl' and `po'. Special - rules in the `Makefiles' take care for the case where no - internationalization is wanted. - - 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 `installdirs', `install', `uninstall', `clean', - `distclean'. - - Here is an example of a canonical order of processing. In this - example, we also define `SUBDIRS' in `Makefile.in' for it to be - further used in the `dist:' goal. - - SUBDIRS = doc intl lib src po - - Note that you must arrange for `make' to descend into the `intl' - directory before descending into other directories containing code - which make use of the `libintl.h' header file. For this reason, - here we mention `intl' before `lib' and `src'. - - 4. A delicate point is the `dist:' goal, as both `intl/Makefile' and - `po/Makefile' will later assume that the proper directory has been - set up from the main `Makefile'. Here is an example at what the - `dist:' goal might look like: - - distdir = $(PACKAGE)-$(VERSION) - dist: Makefile - rm -fr $(distdir) - mkdir $(distdir) - chmod 777 $(distdir) - for file in $(DISTFILES); do \ - ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ - done - for subdir in $(SUBDIRS); do \ - mkdir $(distdir)/$$subdir || exit 1; \ - chmod 777 $(distdir)/$$subdir; \ - (cd $$subdir && $(MAKE) $@) || exit 1; \ - done - tar chozf $(distdir).tar.gz $(distdir) - rm -fr $(distdir) - - - Note that if you are using GNU `automake', `Makefile.in' is -automatically generated from `Makefile.am', and all needed changes to -`Makefile.am' are already made by running `gettextize'. - - -File: gettext.info, Node: src/Makefile, Next: lib/gettext.h, Prev: Makefile, Up: Adjusting Files - -`Makefile.in' in `src/' ------------------------ - - Some of the modifications made in the main `Makefile.in' will also -be needed in the `Makefile.in' from your package sources, which we -assume here to be in the `src/' subdirectory. Here are all the -modifications needed in `src/Makefile.in': - - 1. In view of the `dist:' goal, you should have these lines near the - beginning of `src/Makefile.in': - - PACKAGE = @PACKAGE@ - VERSION = @VERSION@ - - 2. If not done already, you should guarantee that `top_srcdir' gets - defined. This will serve for `cpp' include files. Just add the - line: - - top_srcdir = @top_srcdir@ - - 3. You might also want to define `subdir' as `src', later allowing - for almost uniform `dist:' goals in all your `Makefile.in'. At - list, the `dist:' goal below assume that you used: - - subdir = src - - 4. The `main' function of your program will normally call - `bindtextdomain' (see *note Triggering::), like this: - - bindtextdomain (PACKAGE, LOCALEDIR); - textdomain (PACKAGE); - - To make LOCALEDIR known to the program, add the following lines to - Makefile.in: - - datadir = @datadir@ - localedir = $(datadir)/locale - DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ - - Note that `@datadir@' defaults to `$(prefix)/share', thus - `$(localedir)' defaults to `$(prefix)/share/locale'. - - 5. You should ensure that the final linking will use `@LIBINTL@' or - `@LTLIBINTL@' as a library. `@LIBINTL@' is for use without - `libtool', `@LTLIBINTL@' is for use with `libtool'. An easy way to - achieve this is to manage that it gets into `LIBS', like this: - - LIBS = @LIBINTL@ @LIBS@ - - In most packages internationalized with GNU `gettext', one will - find a directory `lib/' in which a library containing some helper - functions will be build. (You need at least the few functions - which the GNU `gettext' Library itself needs.) However some of - the functions in the `lib/' also give messages to the user which - of course should be translated, too. Taking care of this, the - support library (say `libsupport.a') should be placed before - `@LIBINTL@' and `@LIBS@' in the above example. So one has to - write this: - - LIBS = ../lib/libsupport.a @LIBINTL@ @LIBS@ - - 6. You should also ensure that directory `intl/' will be searched for - C preprocessor include files in all circumstances. So, you have to - manage so both `-I../intl' and `-I$(top_srcdir)/intl' will be - given to the C compiler. - - 7. Your `dist:' goal has to conform with others. Here is a - reasonable definition for it: - - distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) - dist: Makefile $(DISTFILES) - for file in $(DISTFILES); do \ - ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ - done - - - -File: gettext.info, Node: lib/gettext.h, Prev: src/Makefile, Up: Adjusting Files - -`gettext.h' in `lib/' ---------------------- - - Internationalization of packages, as provided by GNU `gettext', is -optional. It can be turned off in two situations: - - * When the installer has specified `./configure --disable-nls'. 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). - - * When the package does not include the `intl/' subdirectory, and the - libintl.h header (with its associated libintl library, if any) is - not already installed on the system, it is preferrable that the - package builds without internationalization support, rather than - to give a compilation error. - - A C preprocessor macro can be used to detect these two cases. -Usually, when `libintl.h' was found and not explicitly disabled, the -`ENABLE_NLS' macro will be defined to 1 in the autoconf generated -configuration file (usually called `config.h'). In the two negative -situations, however, this macro will not be defined, thus it will -evaluate to 0 in C preprocessor expressions. - - `gettext.h' is a convenience header file for conditional use of -`<libintl.h>', depending on the `ENABLE_NLS' macro. If `ENABLE_NLS' is -set, it includes `<libintl.h>'; otherwise it defines no-op substitutes -for the libintl.h functions. We recommend the use of `"gettext.h"' over -direct use of `<libintl.h>', 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 - - #include "gettext.h" - -instead of - - #include <libintl.h> - - The location of `gettext.h' is usually in a directory containing -auxiliary include files. In many GNU packages, there is a directory -`lib/' containing helper functions; `gettext.h' fits there. In other -packages, it can go into the `src' directory. - - Do not install the `gettext.h' file in public locations. Every -package that needs it should contain a copy of it on its own. - - -File: gettext.info, Node: autoconf macros, Next: CVS Issues, Prev: Adjusting Files, Up: Maintainers - -Autoconf macros for use in `configure.in' -========================================= - - GNU `gettext' installs macros for use in a package's `configure.in' -or `configure.ac'. *Note Introduction: (autoconf)Top. The primary -macro is, of course, `AM_GNU_GETTEXT'. - -* Menu: - -* AM_GNU_GETTEXT:: AM_GNU_GETTEXT in `gettext.m4' -* AM_GNU_GETTEXT_VERSION:: AM_GNU_GETTEXT_VERSION in `gettext.m4' -* AM_ICONV:: AM_ICONV in `iconv.m4' - - -File: gettext.info, Node: AM_GNU_GETTEXT, Next: AM_GNU_GETTEXT_VERSION, Prev: autoconf macros, Up: autoconf macros - -AM_GNU_GETTEXT in `gettext.m4' ------------------------------- - - The `AM_GNU_GETTEXT' macro tests for the presence of the GNU gettext -function family in either the C library or a separate `libintl' library -(shared or static libraries are both supported) or in the package's -`intl/' directory. - - `AM_GNU_GETTEXT' accepts up to three optional arguments. The general -syntax is - - AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]) - - INTLSYMBOL can be one of `external', `no-libtool', `use-libtool'. -The default (if it is not specified or empty) is `no-libtool'. -INTLSYMBOL should be `external' for packages with no `intl/' directory, -and `no-libtool' or `use-libtool' for packages with an `intl/' -directory. If INTLSYMBOL is `use-libtool', then a libtool library -`$(top_builddir)/intl/libintl.la' will be created (shared and/or static, -depending on `--{enable,disable}-{shared,static}' and on the presence -of `AM_DISABLE_SHARED'). If INTLSYMBOL is `no-libtool', a static library -`$(top_builddir)/intl/libintl.a' will be created. - - If NEEDSYMBOL is specified and is `need-ngettext', then GNU gettext -implementations (in libc or libintl) without the `ngettext()' function -will be ignored. If NEEDSYMBOL is specified and is -`need-formatstring-macros', then GNU gettext implementations that don't -support the ISO C 99 `<inttypes.h>' formatstring macros will be ignored. -Only one NEEDSYMBOL can be specified. To specify more than one -requirement, just specify the strongest one among them. The hierarchy -among the various alternatives is as follows: `need-formatstring-macros' -implies `need-ngettext'. - - INTLDIR is used to find the intl libraries. If empty, the value -`$(top_builddir)/intl/' is used. - - The `AM_GNU_GETTEXT' macro determines whether GNU gettext is -available and should be used. If so, it sets the `USE_NLS' variable to -`yes'; it defines `ENABLE_NLS' to 1 in the autoconf generated -configuration file (usually called `config.h'); it sets the variables -`LIBINTL' and `LTLIBINTL' to the linker options for use in a Makefile -(`LIBINTL' for use without libtool, `LTLIBINTL' for use with libtool); -it adds an `-I' option to `CPPFLAGS' if necessary. In the negative -case, it sets `USE_NLS' to `no'; it sets `LIBINTL' and `LTLIBINTL' to -empty and doesn't change `CPPFLAGS'. - - The complexities that `AM_GNU_GETTEXT' deals with are the following: - - * Some operating systems have `gettext' in the C library, for example - glibc. Some have it in a separate library `libintl'. GNU `libintl' - might have been installed as part of the GNU `gettext' package. - - * GNU `libintl', if installed, is not necessarily already in the - search path (`CPPFLAGS' for the include file search path, - `LDFLAGS' for the library search path). - - * Except for glibc, the operating system's native `gettext' 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. - - * GNU `libintl', if installed, is not necessarily already in the run - time library search path. To avoid the need for setting an - environment variable like `LD_LIBRARY_PATH', the macro adds the - appropriate run time search path options to the `LIBINTL' and - `LTLIBINTL' variables. This works on most systems, but not on some - operating systems with limited shared library support, like SCO. - - * GNU `libintl' relies on POSIX `iconv'. The macro checks for linker - options needed to use iconv and appends them to the `LIBINTL' and - `LTLIBINTL' variables. - - -File: gettext.info, Node: AM_GNU_GETTEXT_VERSION, Next: AM_ICONV, Prev: AM_GNU_GETTEXT, Up: autoconf macros - -AM_GNU_GETTEXT_VERSION in `gettext.m4' --------------------------------------- - - The `AM_GNU_GETTEXT_VERSION' macro declares the version number of -the GNU gettext infrastructure that is used by the package. - - The use of this macro is optional; only the `autopoint' program makes -use of it (*note CVS Issues::). - - -File: gettext.info, Node: AM_ICONV, Prev: AM_GNU_GETTEXT_VERSION, Up: autoconf macros - -AM_ICONV in `iconv.m4' ----------------------- - - The `AM_ICONV' macro tests for the presence of the POSIX `iconv' -function family in either the C library or a separate `libiconv' -library. If found, it sets the `am_cv_func_iconv' variable to `yes'; it -defines `HAVE_ICONV' to 1 in the autoconf generated configuration file -(usually called `config.h'); it defines `ICONV_CONST' to `const' or to -empty, depending on whether the second argument of `iconv()' is of type -`const char **' or `char **'; it sets the variables `LIBICONV' and -`LTLIBICONV' to the linker options for use in a Makefile (`LIBICONV' -for use without libtool, `LTLIBICONV' for use with libtool); it adds an -`-I' option to `CPPFLAGS' if necessary. If not found, it sets -`LIBICONV' and `LTLIBICONV' to empty and doesn't change `CPPFLAGS'. - - The complexities that `AM_ICONV' deals with are the following: - - * Some operating systems have `iconv' in the C library, for example - glibc. Some have it in a separate library `libiconv', for example - OSF/1 or FreeBSD. Regardless of the operating system, GNU - `libiconv' might have been installed. In that case, it should be - used instead of the operating system's native `iconv'. - - * GNU `libiconv', if installed, is not necessarily already in the - search path (`CPPFLAGS' for the include file search path, - `LDFLAGS' for the library search path). - - * GNU `libiconv' is binary incompatible with some operating system's - native `iconv', for example on FreeBSD. Use of an `iconv.h' and - `libiconv.so' that don't fit together would produce program - crashes. - - * GNU `libiconv', if installed, is not necessarily already in the - run time library search path. To avoid the need for setting an - environment variable like `LD_LIBRARY_PATH', the macro adds the - appropriate run time search path options to the `LIBICONV' - variable. This works on most systems, but not on some operating - systems with limited shared library support, like SCO. - - `iconv.m4' is distributed with the GNU gettext package because -`gettext.m4' relies on it. - - -File: gettext.info, Node: CVS Issues, Prev: autoconf macros, Up: Maintainers - -Integrating with CVS -==================== - - Many projects use CVS for distributed development, version control -and source backup. This section gives some advice how to manage the -uses of `cvs', `gettextize', `autopoint' and `autoconf'. - -* Menu: - -* Distributed CVS:: Avoiding version mismatch in distributed development -* Files under CVS:: Files to put under CVS version control -* autopoint Invocation:: Invoking the `autopoint' Program - - -File: gettext.info, Node: Distributed CVS, Next: Files under CVS, Prev: CVS Issues, Up: CVS Issues - -Avoiding version mismatch in distributed development ----------------------------------------------------- - - 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 `gettext' version - runs `gettextize' and performs the -changes listed in *Note Adjusting Files::, and then commits his changes -to the CVS. - - It is highly recommended that all developers on a project use the -same version of GNU `gettext' in the package. In other words, if a -developer runs `gettextize', 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: - - * Apparent version mismatch between developers. Since some `gettext' - specific portions in `configure.in', `configure.ac' and - `Makefile.am', `Makefile.in' files depend on the `gettext' - version, the use of infrastructure files belonging to different - `gettext' versions can easily lead to build errors. - - * 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. - - * 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 `gettext' than the other developers, the - distribution will be less well tested than if all had been using - the same `gettext' version. For example, it is possible that a - platform specific bug goes undiscovered due to this constellation. - - -File: gettext.info, Node: Files under CVS, Next: autopoint Invocation, Prev: Distributed CVS, Up: CVS Issues - -Files to put under CVS version control --------------------------------------- - - There are basically three ways to deal with generated files in the -context of a CVS repository, such as `configure' generated from -`configure.in', `PARSER.c' generated from `PARSER.y', or -`po/Makefile.in.in' autoinstalled by `gettextize' or `autopoint'. - - 1. All generated files are always committed into the repository. - - 2. All generated files are committed into the repository occasionally, - for example each time a release is made. - - 3. Generated files are never committed into the repository. - - Each of these three approaches has different advantages and -drawbacks. - - 1. 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 - reposity grows in size quite fast. - - 2. 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 `automake', GNU - `autoconf', GNU `m4' 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. - - 3. The advantage is less work for the maintainers. The drawback is - that anyone who checks out the CVS not only needs tools like GNU - `automake', GNU `autoconf', GNU `m4' installed in his PATH, but - also that he needs to perform a package specific pre-build step - before being able to "./configure; make". - - For the first and second approach, all files modified or brought in -by the occasional `gettextize' invocation and update should be -committed into the CVS. - - For the third approach, the maintainer can omit from the CVS -repository all the files that `gettextize' mentions as "copy". -Instead, he adds to the `configure.in' or `configure.ac' a line of the -form - - AM_GNU_GETTEXT_VERSION(0.11.6-pre2) - -and adds to the package's pre-build script an invocation of -`autopoint'. For everyone who checks out the CVS, this `autopoint' -invocation will copy into the right place the `gettext' infrastructure -files that have been omitted from the CVS. - - -File: gettext.info, Node: autopoint Invocation, Prev: Files under CVS, Up: CVS Issues - -Invoking the `autopoint' Program --------------------------------- - - autopoint [OPTION]... - - The `autopoint' program copies standard gettext infrastructure files -into a source package. It extracts from a macro call of the form -`AM_GNU_GETTEXT_VERSION(VERSION)', found in the package's -`configure.in' or `configure.ac' file, the gettext version used by the -package, and copies the infrastructure files belonging to this version -into the package. - -Options -....... - -`-f' -`--force' - Force overwriting of files that already exist. - -`-n' -`--dry-run' - Print modifications but don't perform them. All file copying - actions that `autopoint' would normally execute are inhibited and - instead only listed on standard output. - -Informative output -.................. - -`--help' - Display this help and exit. - -`--version' - Output version information and exit. - - `autopoint' supports the GNU `gettext' versions from 0.10.35 to the -current one, 0.11.6-pre2. In order to apply `autopoint' to a package -using a `gettext' version newer than 0.11.6-pre2, you need to install -this same version of GNU `gettext' at least. - - In packages using GNU `automake', an invocation of `autopoint' -should be followed by invocations of `aclocal' and then `autoconf' and -`autoheader'. The reason is that `autopoint' installs some autoconf -macro files, which are used by `aclocal' to create `aclocal.m4', and -the latter is used by `autoconf' to create the package's `configure' -script and by `autoheader' to create the package's `config.h.in' -include file template. - - The name `autopoint' is an abbreviation of `auto-po-intl-m4'; the -tool copies or updates mostly files in the `po', `intl', `m4' -directories. - - -File: gettext.info, Node: Programming Languages, Next: Conclusion, Prev: Maintainers, Up: Top - -Other Programming Languages -*************************** - - While the presentation of `gettext' 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. - -* Menu: - -* Language Implementors:: The Language Implementor's View -* Programmers for other Languages:: The Programmer's View -* Translators for other Languages:: The Translator's View -* Maintainers for other Languages:: The Maintainer's View -* List of Programming Languages:: Individual Programming Languages -* List of Data Formats:: Internationalizable Data - - -File: gettext.info, Node: Language Implementors, Next: Programmers for other Languages, Prev: Programming Languages, Up: Programming Languages - -The Language Implementor's View -=============================== - - All programming and scripting languages that have the notion of -strings are eligible to supporting `gettext'. Supporting `gettext' -means the following: - - 1. You should add to the language a syntax for translatable strings. - In principle, a function call of `gettext' would do, but a - shorthand syntax helps keeping the legibility of internationalized - programs. For example, in C we use the syntax `_("string")', in - bash we use the syntax `$"string"', and in GNU awk we use the - shorthand `_"string"'. - - 2. You should arrange that evaluation of such a translatable string at - runtime calls the `gettext' function, or performs equivalent - processing. - - 3. Similarly, you should make the functions `ngettext', `dcgettext', - `dcngettext' available from within the language. These functions - are less often used, but are nevertheless necessary for particular - purposes: `ngettext' for correct plural handling, and `dcgettext' - and `dcngettext' for obeying other locale environment variables - than `LC_MESSAGES', such as `LC_TIME' or `LC_MONETARY'. For these - latter functions, you need to make the `LC_*' constants, available - in the C header `<locale.h>', referenceable from within the - language, usually either as enumeration values or as strings. - - 4. You should allow the programmer to designate a message domain, - either by making the `textdomain' function available from within - the language, or by introducing a magic variable called - `TEXTDOMAIN'. Similarly, you should allow the programmer to - designate where to search for message catalogs, by providing - access to the `bindtextdomain' function. - - 5. You should either perform a `setlocale (LC_ALL, "")' 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 - `LC_MESSAGES' and `LC_CTYPE' locale facets are not both set. - - 6. A programmer should have a way to extract translatable strings - from a program into a PO file. The GNU `xgettext' program is being - extended to support very different programming languages. Please - contact the GNU `gettext' maintainers to help them doing this. If - the string extractor is best integrated into your language's - parser, GNU `xgettext' can function as a front end to your string - extractor. - - 7. 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. *Note c-format Flag::. - - 8. If the language has more than one implementation, and not all of - the implementations use `gettext', 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. - - 9. To help the programmer in the task of marking translatable strings, - which is usually performed using the Emacs PO mode, you are - welcome to contact the GNU `gettext' maintainers, so they can add - support for your language to `po-mode.el'. - - On the implementation side, three approaches are possible, with -different effects on portability and copyright: - - * You may integrate the GNU `gettext''s `intl/' directory in your - package, as described in *Note Maintainers::. 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. - - * You may link against GNU `gettext' functions if they are found in - the C library. For example, an autoconf test for `gettext()' and - `ngettext()' will detect this situation. For the moment, this test - will succeed on GNU systems and not on other platforms. No severe - copyright restrictions apply. - - * You may emulate or reimplement the GNU `gettext' functionality. - This has the advantage of full portability and no copyright - restrictions, but also the drawback that you have to reimplement - the GNU `gettext' features (such as the `LANGUAGE' environment - variable, the locale aliases database, the automatic charset - conversion, and plural handling). - - -File: gettext.info, Node: Programmers for other Languages, Next: Translators for other Languages, Prev: Language Implementors, Up: Programming Languages - -The Programmer's View -===================== - - For the programmer, the general procedure is the same as for the C -language. The Emacs PO mode supports other languages, and the GNU -`xgettext' string extractor recognizes other languages based on the -file extension or a command-line option. In some languages, -`setlocale' is not needed because it is already performed by the -underlying language runtime. - - -File: gettext.info, Node: Translators for other Languages, Next: Maintainers for other Languages, Prev: Programmers for other Languages, Up: Programming Languages - -The Translator's View -===================== - - 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. - -* Menu: - -* c-format:: C Format Strings -* python-format:: Python Format Strings -* lisp-format:: Lisp Format Strings -* elisp-format:: Emacs Lisp Format Strings -* librep-format:: librep Format Strings -* smalltalk-format:: Smalltalk Format Strings -* java-format:: Java Format Strings -* awk-format:: awk Format Strings -* object-pascal-format:: Object Pascal Format Strings -* ycp-format:: YCP Format Strings -* tcl-format:: Tcl Format Strings -* php-format:: PHP Format Strings - - -File: gettext.info, Node: c-format, Next: python-format, Prev: Translators for other Languages, Up: Translators for other Languages - -C Format Strings ----------------- - - C format strings are described in POSIX (IEEE P1003.1 2001), section -XSH 3 fprintf(), -`http://www.opengroup.org/onlinepubs/007904975/functions/fprintf.html'. -See also the fprintf(3) manual page, -`http://www.linuxvalley.it/encyclopedia/ldp/manpage/man3/printf.3.php', -`http://informatik.fh-wuerzburg.de/student/i510/man/printf.html'. - - -File: gettext.info, Node: python-format, Next: lisp-format, Prev: c-format, Up: Translators for other Languages - -Python Format Strings ---------------------- - - Python format strings are described in Python Library reference / -2. Built-in Types, Exceptions and Functions / 2.2. Built-in Types / -2.2.6. Sequence Types / 2.2.6.2. String Formatting Operations. -`http://www.python.org/doc/2.2.1/lib/typesseq-strings.html'. - - -File: gettext.info, Node: lisp-format, Next: elisp-format, Prev: python-format, Up: Translators for other Languages - -Lisp Format Strings -------------------- - - Lisp format strings are described in the Common Lisp HyperSpec, -chapter 22.3 Formatted Output, -`http://www.lisp.org/HyperSpec/Body/sec_22-3.html'. - - -File: gettext.info, Node: elisp-format, Next: librep-format, Prev: lisp-format, Up: Translators for other Languages - -Emacs Lisp Format Strings -------------------------- - - Emacs Lisp format strings are documented in the Emacs Lisp reference, -section Formatting Strings, -`http://www.gnu.org/manual/elisp-manual-21-2.8/html_chapter/elisp_4.html#SEC75'. -Note that as of version 21, XEmacs supports numbered argument -specifications in format strings while FSF Emacs doesn't. - diff --git a/doc/gettext.info-8 b/doc/gettext.info-8 deleted file mode 100644 index 6ccb66c..0000000 --- a/doc/gettext.info-8 +++ /dev/null @@ -1,2586 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: librep-format, Next: smalltalk-format, Prev: elisp-format, Up: Translators for other Languages - -librep Format Strings ---------------------- - - librep format strings are documented in the librep manual, section -Formatted Output, -<http://librep.sourceforge.net/librep-manual.html#Formatted%20Output>, -<http://www.gwinnup.org/research/docs/librep.html#SEC122>. - - -File: gettext.info, Node: smalltalk-format, Next: java-format, Prev: librep-format, Up: Translators for other Languages - -Smalltalk Format Strings ------------------------- - - Smalltalk format strings are described in the GNU Smalltalk -documentation, class `CharArray', methods `bindWith:' and -`bindWithArguments:'. -`http://www.gnu.org/software/smalltalk/gst-manual/gst_68.html#SEC238'. -In summary, a directive starts with `%' and is followed by `%' or a -nonzero digit (`1' to `9'). - - -File: gettext.info, Node: java-format, Next: awk-format, Prev: smalltalk-format, Up: Translators for other Languages - -Java Format Strings -------------------- - - Java format strings are described in the JDK documentation for class -`java.text.MessageFormat', -`http://java.sun.com/j2se/1.4/docs/api/java/text/MessageFormat.html'. -See also the ICU documentation -`http://oss.software.ibm.com/icu/apiref/classMessageFormat.html'. - - -File: gettext.info, Node: awk-format, Next: object-pascal-format, Prev: java-format, Up: Translators for other Languages - -awk Format Strings ------------------- - - awk format strings are described in the gawk documentation, section -Printf, `http://www.gnu.org/manual/gawk/html_node/Printf.html#Printf'. - - -File: gettext.info, Node: object-pascal-format, Next: ycp-format, Prev: awk-format, Up: Translators for other Languages - -Object Pascal Format Strings ----------------------------- - - Where is this documented? - - -File: gettext.info, Node: ycp-format, Next: tcl-format, Prev: object-pascal-format, Up: Translators for other Languages - -YCP Format Strings ------------------- - - YCP sformat strings are described in the libycp documentation -`file:/usr/share/doc/packages/libycp/YCP-builtins.html'. In summary, a -directive starts with `%' and is followed by `%' or a nonzero digit -(`1' to `9'). - - -File: gettext.info, Node: tcl-format, Next: php-format, Prev: ycp-format, Up: Translators for other Languages - -Tcl Format Strings ------------------- - - Tcl format strings are described in the `format.n' manual page, -`http://www.scriptics.com/man/tcl8.3/TclCmd/format.htm'. - - -File: gettext.info, Node: php-format, Prev: tcl-format, Up: Translators for other Languages - -PHP Format Strings ------------------- - - PHP format strings are described in the documentation of the PHP -function `sprintf', in `phpdoc/manual/function.sprintf.html' or -`http://www.php.net/manual/en/function.sprintf.php'. - - -File: gettext.info, Node: Maintainers for other Languages, Next: List of Programming Languages, Prev: Translators for other Languages, Up: Programming Languages - -The Maintainer's View -===================== - - For the maintainer, the general procedure differs from the C language -case in two ways. - - * For those languages that don't use GNU gettext, the `intl/' - directory is not needed and can be omitted. This means that the - maintainer calls the `gettextize' program without the `--intl' - option, and that he invokes the `AM_GNU_GETTEXT' autoconf macro via - `AM_GNU_GETTEXT([external])'. - - * If only a single programming language is used, the - `XGETTEXT_OPTIONS' variable in `po/Makevars' (*note po/Makevars::) - should be adjusted to match the `xgettext' options for that - particular programming language. If the package uses more than - one programming language with `gettext' support, it becomes - necessary to change the POT file construction rule in - `po/Makefile.in.in'. It is recommended to make one `xgettext' - invocation per programming language, each with the options - appropriate for that language, and to combine the resulting files - using `msgcat'. - - -File: gettext.info, Node: List of Programming Languages, Next: List of Data Formats, Prev: Maintainers for other Languages, Up: Programming Languages - -Individual Programming Languages -================================ - -* Menu: - -* C:: C, C++, Objective C -* sh:: sh - Shell Script -* bash:: bash - Bourne-Again Shell Script -* Python:: Python -* Common Lisp:: GNU clisp - Common Lisp -* clisp C:: GNU clisp C sources -* Emacs Lisp:: Emacs Lisp -* librep:: librep -* Smalltalk:: GNU Smalltalk -* Java:: Java -* gawk:: GNU awk -* Pascal:: Pascal - Free Pascal Compiler -* wxWindows:: wxWindows library -* YCP:: YCP - YaST2 scripting language -* Tcl:: Tcl - Tk's scripting language -* Perl:: Perl -* PHP:: PHP Hypertext Preprocessor -* Pike:: Pike - - -File: gettext.info, Node: C, Next: sh, Prev: List of Programming Languages, Up: List of Programming Languages - -C, C++, Objective C -------------------- - -RPMs - gcc, gpp, gobjc, glibc, gettext - -File extension - For C: `c', `h'. - For C++: `C', `c++', `cc', `cxx', `cpp', `hpp'. - For Objective C: `m'. - -String syntax - `"abc"' - -gettext shorthand - `_("abc")' - -gettext/ngettext functions - `gettext', `dgettext', `dcgettext', `ngettext', `dngettext', - `dcngettext' - -textdomain - `textdomain' function - -bindtextdomain - `bindtextdomain' function - -setlocale - Programmer must call `setlocale (LC_ALL, "")' - -Prerequisite - `#include <libintl.h>' - `#include <locale.h>' - `#define _(string) gettext (string)' - -Use or emulate GNU gettext - Use - -Extractor - `xgettext -k_' - -Formatting with positions - `fprintf "%2$d %1$d"' (POSIX but not C 99) - In C++: `autosprintf "%2$d %1$d"' (*note Introduction: - (autosprintf)Top.) - -Portability - autoconf (gettext.m4) and #if ENABLE_NLS - -po-mode marking - yes - - -File: gettext.info, Node: sh, Next: bash, Prev: C, Up: List of Programming Languages - -sh - Shell Script ------------------ - -RPMs - bash, gettext - -File extension - `sh' - -String syntax - `"abc"', `'abc'', `abc' - -gettext shorthand - `"`gettext "abc"`"' - -gettext/ngettext functions - `gettext', `ngettext' programs - -textdomain - environment variable `TEXTDOMAIN' - -bindtextdomain - environment variable `TEXTDOMAINDIR' - -setlocale - automatic - -Prerequisite - -- - -Use or emulate GNU gettext - use - -Extractor - -- - -Formatting with positions - -- - -Portability - -- - -po-mode marking - -- - - -File: gettext.info, Node: bash, Next: Python, Prev: sh, Up: List of Programming Languages - -bash - Bourne-Again Shell Script --------------------------------- - -RPMs - bash 2.0 or newer, gettext - -File extension - `sh' - -String syntax - `"abc"', `'abc'', `abc' - -gettext shorthand - `$"abc"' - -gettext/ngettext functions - `gettext', `ngettext' programs - -textdomain - environment variable `TEXTDOMAIN' - -bindtextdomain - environment variable `TEXTDOMAINDIR' - -setlocale - automatic - -Prerequisite - -- - -Use or emulate GNU gettext - use - -Extractor - `bash --dump-po-strings' - -Formatting with positions - -- - -Portability - -- - -po-mode marking - -- - - -File: gettext.info, Node: Python, Next: Common Lisp, Prev: bash, Up: List of Programming Languages - -Python ------- - -RPMs - python - -File extension - `py' - -String syntax - `'abc'', `u'abc'', `r'abc'', `ur'abc'', - `"abc"', `u"abc"', `r"abc"', `ur"abc"', - `'''abc'''', `u'''abc'''', `r'''abc'''', `ur'''abc'''', - `"""abc"""', `u"""abc"""', `r"""abc"""', `ur"""abc"""' - -gettext shorthand - `_('abc')' etc. - -gettext/ngettext functions - `gettext.gettext', `gettext.dgettext', also `ugettext' - -textdomain - `gettext.textdomain' function, or `gettext.install(DOMAIN)' - function - -bindtextdomain - `gettext.bindtextdomain' function, or - `gettext.install(DOMAIN,LOCALEDIR)' function - -setlocale - not used by the gettext emulation - -Prerequisite - `import gettext' - -Use or emulate GNU gettext - emulate. Bug: uses only the first found .mo file, not all of them - -Extractor - `xgettext' - -Formatting with positions - `'...%(ident)d...' % { 'ident': value }' - -Portability - fully portable - -po-mode marking - -- - - -File: gettext.info, Node: Common Lisp, Next: clisp C, Prev: Python, Up: List of Programming Languages - -GNU clisp - Common Lisp ------------------------ - -RPMs - clisp 2.28 or newer - -File extension - `lisp' - -String syntax - `"abc"' - -gettext shorthand - `(_ "abc")', `(ENGLISH "abc")' - -gettext/ngettext functions - `i18n:gettext', `i18n:ngettext' - -textdomain - `i18n:textdomain' - -bindtextdomain - `i18n:textdomaindir' - -setlocale - automatic - -Prerequisite - -- - -Use or emulate GNU gettext - use - -Extractor - `xgettext -k_ -kENGLISH' - -Formatting with positions - `format "~1@*~D ~0@*~D"' - -Portability - On platforms without gettext, no translation. - -po-mode marking - -- - - -File: gettext.info, Node: clisp C, Next: Emacs Lisp, Prev: Common Lisp, Up: List of Programming Languages - -GNU clisp C sources -------------------- - -RPMs - clisp - -File extension - `d' - -String syntax - `"abc"' - -gettext shorthand - `ENGLISH ? "abc" : ""' - `GETTEXT("abc")' - `GETTEXTL("abc")' - -gettext/ngettext functions - `clgettext', `clgettextl' - -textdomain - -- - -bindtextdomain - -- - -setlocale - automatic - -Prerequisite - `#include "lispbibl.c"' - -Use or emulate GNU gettext - use - -Extractor - `clisp-xgettext' - -Formatting with positions - `fprintf "%2$d %1$d"' (POSIX but not C 99) - -Portability - On platforms without gettext, no translation. - -po-mode marking - -- - - -File: gettext.info, Node: Emacs Lisp, Next: librep, Prev: clisp C, Up: List of Programming Languages - -Emacs Lisp ----------- - -RPMs - emacs, xemacs - -File extension - `el' - -String syntax - `"abc"' - -gettext shorthand - `(_"abc")' - -gettext/ngettext functions - `gettext', `dgettext' (xemacs only) - -textdomain - `domain' special form (xemacs only) - -bindtextdomain - `bind-text-domain' function (xemacs only) - -setlocale - automatic - -Prerequisite - -- - -Use or emulate GNU gettext - use - -Extractor - `xgettext' - -Formatting with positions - `format "%2$d %1$d"' - -Portability - Only XEmacs. Without `I18N3' defined at build time, no translation. - -po-mode marking - -- - - -File: gettext.info, Node: librep, Next: Smalltalk, Prev: Emacs Lisp, Up: List of Programming Languages - -librep ------- - -RPMs - librep 0.15.3 or newer - -File extension - `jl' - -String syntax - `"abc"' - -gettext shorthand - `(_"abc")' - -gettext/ngettext functions - `gettext' - -textdomain - `textdomain' function - -bindtextdomain - `bindtextdomain' function - -setlocale - -- - -Prerequisite - `(require 'rep.i18n.gettext)' - -Use or emulate GNU gettext - use - -Extractor - `xgettext' - -Formatting with positions - `format "%2$d %1$d"' - -Portability - On platforms without gettext, no translation. - -po-mode marking - -- - - -File: gettext.info, Node: Smalltalk, Next: Java, Prev: librep, Up: List of Programming Languages - -GNU Smalltalk -------------- - -RPMs - smalltalk - -File extension - `st' - -String syntax - `'abc'' - -gettext shorthand - `NLS ? 'abc'' - -gettext/ngettext functions - `LcMessagesDomain>>#at:', `LcMessagesDomain>>#at:plural:with:' - -textdomain - `LcMessages>>#domain:localeDirectory:' (returns a - `LcMessagesDomain' object). - Example: `I18N Locale default messages domain: 'gettext' - localeDirectory: /usr/local/share/locale'' - -bindtextdomain - `LcMessages>>#domain:localeDirectory:', see above. - -setlocale - Automatic if you use `I18N Locale default'. - -Prerequisite - `PackageLoader fileInPackage: 'I18N'!' - -Use or emulate GNU gettext - emulate - -Extractor - `xgettext' - -Formatting with positions - `'%1 %2' bindWith: 'Hello' with: 'world'' - -Portability - fully portable - -po-mode marking - -- - - -File: gettext.info, Node: Java, Next: gawk, Prev: Smalltalk, Up: List of Programming Languages - -Java ----- - -RPMs - java, java2 - -File extension - `java' - -String syntax - "abc" - -gettext shorthand - _("abc") - -gettext/ngettext functions - `GettextResource.gettext', `GettextResource.ngettext' - -textdomain - --, use `ResourceBundle.getResource' instead - -bindtextdomain - --, use CLASSPATH instead - -setlocale - automatic - -Prerequisite - -- - -Use or emulate GNU gettext - --, uses a Java specific message catalog format - -Extractor - `xgettext -k_' - -Formatting with positions - `MessageFormat.format "{1,number} {0,number}"' - -Portability - fully portable - -po-mode marking - -- - - Before marking strings as internationalizable, uses of the string -concatenation operator need to be converted to `MessageFormat' -applications. For example, `"file "+filename+" not found"' becomes -`MessageFormat.format("file {0} not found", new Object[] { filename })'. -Only after this is done, can the strings be marked and extracted. - - GNU gettext uses the native Java internationalization mechanism, -namely `ResourceBundle's. To convert a PO file to a ResourceBundle, the -`msgfmt' program can be used with the option `--java' or `--java2'. To -convert a ResourceBundle back to a PO file, the `msgunfmt' program can -be used with the option `--java'. - - Two different programmatic APIs can be used to access -ResourceBundles. Note that both APIs work with all kinds of -ResourceBundles, whether GNU gettext generated classes, or other -`.class' or `.properties' files. - - 1. The `java.util.ResourceBundle' API. - - In particular, its `getString' function returns a string - translation. Note that a missing translation yields a - `MissingResourceException'. - - This has the advantage of being the standard API. And it does not - require any additional libraries, only the `msgfmt' generated - `.class' files. But it cannot do plural handling, even if the - resource was generated from a PO file with plural handling. - - 2. The `gnu.gettext.GettextResource' API. - - Reference documentation in Javadoc 1.1 style format is in the - javadoc1 directory (javadoc1/tree.html) and in Javadoc 2 style - format in the javadoc2 directory (javadoc2/index.html). - - Its `gettext' function returns a string translation. Note that when - a translation is missing, the MSGID argument is returned unchanged. - - This has the advantage of having the `ngettext' function for plural - handling. - - To use this API, one needs the `libintl.jar' file which is part of - the GNU gettext package and distributed under the LGPL. - - -File: gettext.info, Node: gawk, Next: Pascal, Prev: Java, Up: List of Programming Languages - -GNU awk -------- - -RPMs - gawk 3.1 or newer - -File extension - `awk' - -String syntax - `"abc"' - -gettext shorthand - `_"abc"' - -gettext/ngettext functions - `dcgettext', missing `dcngettext' in gawk-3.1.0 - -textdomain - `TEXTDOMAIN' variable - -bindtextdomain - `bindtextdomain' function - -setlocale - automatic, but missing `setlocale (LC_MESSAGES, "")' in gawk-3.1.0 - -Prerequisite - -- - -Use or emulate GNU gettext - use - -Extractor - `xgettext' - -Formatting with positions - `printf "%2$d %1$d"' (GNU awk only) - -Portability - On platforms without gettext, no translation. On non-GNU awks, - you must define `dcgettext', `dcngettext' and `bindtextdomain' - yourself. - -po-mode marking - -- - - -File: gettext.info, Node: Pascal, Next: wxWindows, Prev: gawk, Up: List of Programming Languages - -Pascal - Free Pascal Compiler ------------------------------ - -RPMs - fpk - -File extension - `pp', `pas' - -String syntax - `'abc'' - -gettext shorthand - automatic - -gettext/ngettext functions - --, use `ResourceString' data type instead - -textdomain - --, use `TranslateResourceStrings' function instead - -bindtextdomain - --, use `TranslateResourceStrings' function instead - -setlocale - automatic, but uses only LANG, not LC_MESSAGES or LC_ALL - -Prerequisite - `{$mode delphi}' or `{$mode objfpc}' - `uses gettext;' - -Use or emulate GNU gettext - emulate partially - -Extractor - `ppc386' followed by `xgettext' or `rstconv' - -Formatting with positions - `uses sysutils;' - `format "%1:d %0:d"' - -Portability - ? - -po-mode marking - -- - - The Pascal compiler has special support for the `ResourceString' data -type. It generates a `.rst' file. This is then converted to a `.pot' -file by use of `xgettext' or `rstconv'. At runtime, a `.mo' file -corresponding to translations of this `.pot' file can be loaded using -the `TranslateResourceStrings' function in the `gettext' unit. - - -File: gettext.info, Node: wxWindows, Next: YCP, Prev: Pascal, Up: List of Programming Languages - -wxWindows library ------------------ - -RPMs - wxGTK, gettext - -File extension - `cpp' - -String syntax - `"abc"' - -gettext shorthand - `_("abc")' - -gettext/ngettext functions - `wxLocale::GetString', `wxGetTranslation' - -textdomain - `wxLocale::AddCatalog' - -bindtextdomain - `wxLocale::AddCatalogLookupPathPrefix' - -setlocale - `wxLocale::Init', `wxSetLocale' - -Prerequisite - `#include <wx/intl.h>' - -Use or emulate GNU gettext - emulate, see `include/wx/intl.h' and `src/common/intl.cpp' - -Extractor - `xgettext' - -Formatting with positions - -- - -Portability - fully portable - -po-mode marking - yes - - -File: gettext.info, Node: YCP, Next: Tcl, Prev: wxWindows, Up: List of Programming Languages - -YCP - YaST2 scripting language ------------------------------- - -RPMs - libycp, libycp-devel, yast2-core-translator - -File extension - `ycp' - -String syntax - `"abc"' - -gettext shorthand - `_("abc")' - -gettext/ngettext functions - `_()' with 1 or 3 arguments - -textdomain - `textdomain' statement - -bindtextdomain - -- - -setlocale - -- - -Prerequisite - -- - -Use or emulate GNU gettext - use maps instead - -Extractor - `xgettext' - -Formatting with positions - `sformat "%2 %1"' - -Portability - fully portable - -po-mode marking - -- - - -File: gettext.info, Node: Tcl, Next: Perl, Prev: YCP, Up: List of Programming Languages - -Tcl - Tk's scripting language ------------------------------ - -RPMs - tcl - -File extension - `tcl' - -String syntax - `"abc"' - -gettext shorthand - `[_ "abc"]' - -gettext/ngettext functions - `::msgcat::mc' - -textdomain - -- - -bindtextdomain - --, use `::msgcat::mcload' instead - -setlocale - automatic, uses LANG, but ignores LC_MESSAGES and LC_ALL - -Prerequisite - `package require msgcat' - `proc _ {s} {return [::msgcat::mc $s]}' - -Use or emulate GNU gettext - --, uses a Tcl specific message catalog format - -Extractor - `xgettext -k_' - -Formatting with positions - `format "%2\$d %1\$d"' - -Portability - fully portable - -po-mode marking - -- - - Before marking strings as internationalizable, substitutions of -variables into the string need to be converted to `format' -applications. For example, `"file $filename not found"' becomes -`[format "file %s not found" $filename]'. Only after this is done, can -the strings be marked and extracted. After marking, this example -becomes `[format [_ "file %s not found"] $filename]' or `[msgcat::mc -"file %s not found" $filename]'. Note that the `msgcat::mc' function -implicitly calls `format' when more than one argument is given. - - -File: gettext.info, Node: Perl, Next: PHP, Prev: Tcl, Up: List of Programming Languages - -Perl ----- - -RPMs - perl, perl-gettext - -File extension - `pl', `PL' - -String syntax - `"abc"' - -gettext shorthand - -- - -gettext/ngettext functions - `gettext', `dgettext', `dcgettext' - -textdomain - `textdomain' function - -bindtextdomain - `bindtextdomain' function - -setlocale - Use `setlocale (LC_ALL, "");' - -Prerequisite - `use POSIX;' - `use Locale::gettext;' - -Use or emulate GNU gettext - use - -Extractor - ? - -Formatting with positions - -- - -Portability - ? - -po-mode marking - -- - - -File: gettext.info, Node: PHP, Next: Pike, Prev: Perl, Up: List of Programming Languages - -PHP Hypertext Preprocessor --------------------------- - -RPMs - mod_php4, mod_php4-core, phplib, phpdoc - -File extension - `php', `php3', `php4' - -String syntax - `"abc"', `'abc'' - -gettext shorthand - `_("abc")' - -gettext/ngettext functions - `gettext', `dgettext', `dcgettext' - -textdomain - `textdomain' function - -bindtextdomain - `bindtextdomain' function - -setlocale - Programmer must call `setlocale (LC_ALL, "")' - -Prerequisite - -- - -Use or emulate GNU gettext - use - -Extractor - `xgettext' - -Formatting with positions - `printf "%2\$d %1\$d"' - -Portability - On platforms without gettext, the functions are not available. - -po-mode marking - -- - - -File: gettext.info, Node: Pike, Prev: PHP, Up: List of Programming Languages - -Pike ----- - -RPMs - roxen - -File extension - `pike' - -String syntax - `"abc"' - -gettext shorthand - -- - -gettext/ngettext functions - `gettext', `dgettext', `dcgettext' - -textdomain - `textdomain' function - -bindtextdomain - `bindtextdomain' function - -setlocale - `setlocale' function - -Prerequisite - `import Locale.Gettext;' - -Use or emulate GNU gettext - use - -Extractor - -- - -Formatting with positions - -- - -Portability - On platforms without gettext, the functions are not available. - -po-mode marking - -- - - -File: gettext.info, Node: List of Data Formats, Prev: List of Programming Languages, Up: Programming Languages - -Internationalizable Data -======================== - - Here is a list of other data formats which can be internationalized -using GNU gettext. - -* Menu: - -* POT:: POT - Portable Object Template -* RST:: Resource String Table -* Glade:: Glade - GNOME user interface description - - -File: gettext.info, Node: POT, Next: RST, Prev: List of Data Formats, Up: List of Data Formats - -POT - Portable Object Template ------------------------------- - -RPMs - gettext - -File extension - `pot', `po' - -Extractor - `xgettext' - - -File: gettext.info, Node: RST, Next: Glade, Prev: POT, Up: List of Data Formats - -Resource String Table ---------------------- - -RPMs - fpk - -File extension - `rst' - -Extractor - `xgettext', `rstconv' - - -File: gettext.info, Node: Glade, Prev: RST, Up: List of Data Formats - -Glade - GNOME user interface description ----------------------------------------- - -RPMs - glade, libglade, xml-i18n-tools - -File extension - `glade' - -Extractor - `xgettext', `libglade-xgettext' - - -File: gettext.info, Node: Conclusion, Next: Language Codes, Prev: Programming Languages, Up: Top - -Concluding Remarks -****************** - - We would like to conclude this GNU `gettext' manual by presenting an -history of the Translation Project so far. We finally give a few -pointers for those who want to do further research or readings about -Native Language Support matters. - -* Menu: - -* History:: History of GNU `gettext' -* References:: Related Readings - - -File: gettext.info, Node: History, Next: References, Prev: Conclusion, Up: Conclusion - -History of GNU `gettext' -======================== - - Internationalization concerns and algorithms have been informally -and casually discussed for years in GNU, sometimes around GNU `libc', -maybe around the incoming `Hurd', or otherwise (nobody clearly -remembers). And even then, when the work started for real, this was -somewhat independently of these previous discussions. - - This all began in July 1994, when Patrick D'Cruze had the idea and -initiative of internationalizing version 3.9.2 of GNU `fileutils'. He -then asked Jim Meyering, the maintainer, how to get those changes -folded into an official release. That first draft was full of -`#ifdef's and somewhat disconcerting, and Jim wanted to find nicer -ways. Patrick and Jim shared some tries and experimentations in this -area. Then, feeling that this might eventually have a deeper impact on -GNU, Jim wanted to know what standards were, and contacted Richard -Stallman, who very quickly and verbally described an overall design for -what was meant to become `glocale', at that time. - - Jim implemented `glocale' and got a lot of exhausting feedback from -Patrick and Richard, of course, but also from Mitchum DSouza (who wrote -a `catgets'-like package), Roland McGrath, maybe David MacKenzie, -Franc,ois Pinard, and Paul Eggert, all pushing and pulling in various -directions, not always compatible, to the extent that after a couple of -test releases, `glocale' was torn apart. - - While Jim took some distance and time and became dad for a second -time, Roland wanted to get GNU `libc' internationalized, and got Ulrich -Drepper involved in that project. Instead of starting from `glocale', -Ulrich rewrote something from scratch, but more conformant to the set -of guidelines who emerged out of the `glocale' effort. Then, Ulrich -got people from the previous forum to involve themselves into this new -project, and the switch from `glocale' to what was first named -`msgutils', renamed `nlsutils', and later `gettext', became officially -accepted by Richard in May 1995 or so. - - Let's summarize by saying that Ulrich Drepper wrote GNU `gettext' in -April 1995. The first official release of the package, including PO -mode, occurred in July 1995, and was numbered 0.7. Other people -contributed to the effort by providing a discussion forum around -Ulrich, writing little pieces of code, or testing. These are quoted in -the `THANKS' file which comes with the GNU `gettext' distribution. - - While this was being done, Franc,ois adapted half a dozen of GNU -packages to `glocale' first, then later to `gettext', putting them in -pretest, so providing along the way an effective user environment for -fine tuning the evolving tools. He also took the responsibility of -organizing and coordinating the Translation Project. After nearly a -year of informal exchanges between people from many countries, -translator teams started to exist in May 1995, through the creation and -support by Patrick D'Cruze of twenty unmoderated mailing lists for that -many native languages, and two moderated lists: one for reaching all -teams at once, the other for reaching all willing maintainers of -internationalized free software packages. - - Franc,ois also wrote PO mode in June 1995 with the collaboration of -Greg McGary, as a kind of contribution to Ulrich's package. He also -gave a hand with the GNU `gettext' Texinfo manual. - - In 1997, Ulrich Drepper released the GNU libc 2.0, which included the -`gettext', `textdomain' and `bindtextdomain' functions. - - In 2000, Ulrich Drepper added plural form handling (the `ngettext' -function) to GNU libc. Later, in 2001, he released GNU libc 2.2.x, -which is the first free C library with full internationalization -support. - - Ulrich being quite busy in his role of General Maintainer of GNU -libc, he handed over the GNU `gettext' maintenance to Bruno Haible in -2000. Bruno added the plural form handling to the tools as well, added -support for UTF-8 and CJK locales, and wrote a few new tools for -manipulating PO files. - - -File: gettext.info, Node: References, Prev: History, Up: Conclusion - -Related Readings -================ - - Eugene H. Dorr (`dorre@well.com') maintains an interesting -bibliography on internationalization matters, called -`Internationalization Reference List', which is available as: - ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/i18n-books.txt - - Michael Gschwind (`mike@vlsivie.tuwien.ac.at') maintains a -Frequently Asked Questions (FAQ) list, entitled `Programming for -Internationalisation'. This FAQ discusses writing programs which can -handle different language conventions, character sets, etc.; and is -applicable to all character set encodings, with particular emphasis on -ISO 8859-1. It is regularly published in Usenet groups -`comp.unix.questions', `comp.std.internat', -`comp.software.international', `comp.lang.c', `comp.windows.x', -`comp.std.c', `comp.answers' and `news.answers'. The home location of -this document is: - ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/ISO-programming - - Patrick D'Cruze (`pdcruze@li.org') wrote a tutorial about NLS -matters, and Jochen Hein (`Hein@student.tu-clausthal.de') took over the -responsibility of maintaining it. It may be found as: - ftp://sunsite.unc.edu/pub/Linux/utils/nls/catalogs/Incoming/... - ...locale-tutorial-0.8.txt.gz - -This site is mirrored in: - ftp://ftp.ibp.fr/pub/linux/sunsite/ - - A French version of the same tutorial should be findable at: - ftp://ftp.ibp.fr/pub/linux/french/docs/ - -together with French translations of many Linux-related documents. - - -File: gettext.info, Node: Language Codes, Next: Country Codes, Prev: Conclusion, Up: Top - -Language Codes -************** - - The ISO 639 standard defines two character codes for many languages. -All abbreviations for languages used in the Translation Project should -come from this standard. - -`aa' - Afar. - -`ab' - Abkhazian. - -`ae' - Avestan. - -`af' - Afrikaans. - -`am' - Amharic. - -`ar' - Arabic. - -`as' - Assamese. - -`ay' - Aymara. - -`az' - Azerbaijani. - -`ba' - Bashkir. - -`be' - Byelorussian; Belarusian. - -`bg' - Bulgarian. - -`bh' - Bihari. - -`bi' - Bislama. - -`bn' - Bengali; Bangla. - -`bo' - Tibetan. - -`br' - Breton. - -`bs' - Bosnian. - -`ca' - Catalan. - -`ce' - Chechen. - -`ch' - Chamorro. - -`co' - Corsican. - -`cs' - Czech. - -`cu' - Church Slavic. - -`cv' - Chuvash. - -`cy' - Welsh. - -`da' - Danish. - -`de' - German. - -`dz' - Dzongkha; Bhutani. - -`el' - Greek. - -`en' - English. - -`eo' - Esperanto. - -`es' - Spanish. - -`et' - Estonian. - -`eu' - Basque. - -`fa' - Persian. - -`fi' - Finnish. - -`fj' - Fijian; Fiji. - -`fo' - Faroese. - -`fr' - French. - -`fy' - Frisian. - -`ga' - Irish. - -`gd' - Scots; Gaelic. - -`gl' - Gallegan; Galician. - -`gn' - Guarani. - -`gu' - Gujarati. - -`gv' - Manx. - -`ha' - Hausa (?). - -`he' - Hebrew (formerly iw). - -`hi' - Hindi. - -`ho' - Hiri Motu. - -`hr' - Croatian. - -`hu' - Hungarian. - -`hy' - Armenian. - -`hz' - Herero. - -`ia' - Interlingua. - -`id' - Indonesian (formerly in). - -`ie' - Interlingue. - -`ik' - Inupiak. - -`io' - Ido. - -`is' - Icelandic. - -`it' - Italian. - -`iu' - Inuktitut. - -`ja' - Japanese. - -`jv' - Javanese. - -`ka' - Georgian. - -`ki' - Kikuyu. - -`kj' - Kuanyama. - -`kk' - Kazakh. - -`kl' - Kalaallisut; Greenlandic. - -`km' - Khmer; Cambodian. - -`kn' - Kannada. - -`ko' - Korean. - -`ks' - Kashmiri. - -`ku' - Kurdish. - -`kv' - Komi. - -`kw' - Cornish. - -`ky' - Kirghiz. - -`la' - Latin. - -`lb' - Letzeburgesch. - -`ln' - Lingala. - -`lo' - Lao; Laotian. - -`lt' - Lithuanian. - -`lv' - Latvian; Lettish. - -`mg' - Malagasy. - -`mh' - Marshall. - -`mi' - Maori. - -`mk' - Macedonian. - -`ml' - Malayalam. - -`mn' - Mongolian. - -`mo' - Moldavian. - -`mr' - Marathi. - -`ms' - Malay. - -`mt' - Maltese. - -`my' - Burmese. - -`na' - Nauru. - -`nb' - Norwegian Bokmaal. - -`nd' - Ndebele, North. - -`ne' - Nepali. - -`ng' - Ndonga. - -`nl' - Dutch. - -`nn' - Norwegian Nynorsk. - -`no' - Norwegian. - -`nr' - Ndebele, South. - -`nv' - Navajo. - -`ny' - Chichewa; Nyanja. - -`oc' - Occitan; Provenc,al. - -`om' - (Afan) Oromo. - -`or' - Oriya. - -`os' - Ossetian; Ossetic. - -`pa' - Panjabi; Punjabi. - -`pi' - Pali. - -`pl' - Polish. - -`ps' - Pashto, Pushto. - -`pt' - Portuguese. - -`qu' - Quechua. - -`rm' - Rhaeto-Romance. - -`rn' - Rundi; Kirundi. - -`ro' - Romanian. - -`ru' - Russian. - -`rw' - Kinyarwanda. - -`sa' - Sanskrit. - -`sc' - Sardinian. - -`sd' - Sindhi. - -`se' - Northern Sami. - -`sg' - Sango; Sangro. - -`si' - Sinhalese. - -`sk' - Slovak. - -`sl' - Slovenian. - -`sm' - Samoan. - -`sn' - Shona. - -`so' - Somali. - -`sq' - Albanian. - -`sr' - Serbian. - -`ss' - Swati; Siswati. - -`st' - Sesotho; Sotho, Southern. - -`su' - Sundanese. - -`sv' - Swedish. - -`sw' - Swahili. - -`ta' - Tamil. - -`te' - Telugu. - -`tg' - Tajik. - -`th' - Thai. - -`ti' - Tigrinya. - -`tk' - Turkmen. - -`tl' - Tagalog. - -`tn' - Tswana; Setswana. - -`to' - Tonga (?). - -`tr' - Turkish. - -`ts' - Tsonga. - -`tt' - Tatar. - -`tw' - Twi. - -`ty' - Tahitian. - -`ug' - Uighur. - -`uk' - Ukrainian. - -`ur' - Urdu. - -`uz' - Uzbek. - -`vi' - Vietnamese. - -`vo' - Volapu"k; Volapuk. - -`wa' - Walloon. - -`wo' - Wolof. - -`xh' - Xhosa. - -`yi' - Yiddish (formerly ji). - -`yo' - Yoruba. - -`za' - Zhuang. - -`zh' - Chinese. - -`zu' - Zulu. - - -File: gettext.info, Node: Country Codes, Next: Program Index, Prev: Language Codes, Up: Top - -Country Codes -************* - - The ISO 3166 standard defines two character codes for many countries -and territories. All abbreviations for countries used in the -Translation Project should come from this standard. - -`AD' - Andorra. - -`AE' - United Arab Emirates. - -`AF' - Afghanistan. - -`AG' - Antigua and Barbuda. - -`AI' - Anguilla. - -`AL' - Albania. - -`AM' - Armenia. - -`AN' - Netherlands Antilles. - -`AO' - Angola. - -`AQ' - Antarctica. - -`AR' - Argentina. - -`AS' - Samoa (American). - -`AT' - Austria. - -`AU' - Australia. - -`AW' - Aruba. - -`AZ' - Azerbaijan. - -`BA' - Bosnia and Herzegovina. - -`BB' - Barbados. - -`BD' - Bangladesh. - -`BE' - Belgium. - -`BF' - Burkina Faso. - -`BG' - Bulgaria. - -`BH' - Bahrain. - -`BI' - Burundi. - -`BJ' - Benin. - -`BM' - Bermuda. - -`BN' - Brunei. - -`BO' - Bolivia. - -`BR' - Brazil. - -`BS' - Bahamas. - -`BT' - Bhutan. - -`BV' - Bouvet Island. - -`BW' - Botswana. - -`BY' - Belarus. - -`BZ' - Belize. - -`CA' - Canada. - -`CC' - Cocos (Keeling) Islands. - -`CD' - Congo (Dem. Rep.). - -`CF' - Central African Rep.. - -`CG' - Congo (Rep.). - -`CH' - Switzerland. - -`CI' - Cote d'Ivoire. - -`CK' - Cook Islands. - -`CL' - Chile. - -`CM' - Cameroon. - -`CN' - China. - -`CO' - Colombia. - -`CR' - Costa Rica. - -`CU' - Cuba. - -`CV' - Cape Verde. - -`CX' - Christmas Island. - -`CY' - Cyprus. - -`CZ' - Czech Republic. - -`DE' - Germany. - -`DJ' - Djibouti. - -`DK' - Denmark. - -`DM' - Dominica. - -`DO' - Dominican Republic. - -`DZ' - Algeria. - -`EC' - Ecuador. - -`EE' - Estonia. - -`EG' - Egypt. - -`EH' - Western Sahara. - -`ER' - Eritrea. - -`ES' - Spain. - -`ET' - Ethiopia. - -`FI' - Finland. - -`FJ' - Fiji. - -`FK' - Falkland Islands. - -`FM' - Micronesia. - -`FO' - Faeroe Islands. - -`FR' - France. - -`GA' - Gabon. - -`GB' - Britain (UK). - -`GD' - Grenada. - -`GE' - Georgia. - -`GF' - French Guiana. - -`GH' - Ghana. - -`GI' - Gibraltar. - -`GL' - Greenland. - -`GM' - Gambia. - -`GN' - Guinea. - -`GP' - Guadeloupe. - -`GQ' - Equatorial Guinea. - -`GR' - Greece. - -`GS' - South Georgia and the South Sandwich Islands. - -`GT' - Guatemala. - -`GU' - Guam. - -`GW' - Guinea-Bissau. - -`GY' - Guyana. - -`HK' - Hong Kong. - -`HM' - Heard Island and McDonald Islands. - -`HN' - Honduras. - -`HR' - Croatia. - -`HT' - Haiti. - -`HU' - Hungary. - -`ID' - Indonesia. - -`IE' - Ireland. - -`IL' - Israel. - -`IN' - India. - -`IO' - British Indian Ocean Territory. - -`IQ' - Iraq. - -`IR' - Iran. - -`IS' - Iceland. - -`IT' - Italy. - -`JM' - Jamaica. - -`JO' - Jordan. - -`JP' - Japan. - -`KE' - Kenya. - -`KG' - Kyrgyzstan. - -`KH' - Cambodia. - -`KI' - Kiribati. - -`KM' - Comoros. - -`KN' - St Kitts and Nevis. - -`KP' - Korea (North). - -`KR' - Korea (South). - -`KW' - Kuwait. - -`KY' - Cayman Islands. - -`KZ' - Kazakhstan. - -`LA' - Laos. - -`LB' - Lebanon. - -`LC' - St Lucia. - -`LI' - Liechtenstein. - -`LK' - Sri Lanka. - -`LR' - Liberia. - -`LS' - Lesotho. - -`LT' - Lithuania. - -`LU' - Luxembourg. - -`LV' - Latvia. - -`LY' - Libya. - -`MA' - Morocco. - -`MC' - Monaco. - -`MD' - Moldova. - -`MG' - Madagascar. - -`MH' - Marshall Islands. - -`MK' - Macedonia. - -`ML' - Mali. - -`MM' - Myanmar (Burma). - -`MN' - Mongolia. - -`MO' - Macao. - -`MP' - Northern Mariana Islands. - -`MQ' - Martinique. - -`MR' - Mauritania. - -`MS' - Montserrat. - -`MT' - Malta. - -`MU' - Mauritius. - -`MV' - Maldives. - -`MW' - Malawi. - -`MX' - Mexico. - -`MY' - Malaysia. - -`MZ' - Mozambique. - -`NA' - Namibia. - -`NC' - New Caledonia. - -`NE' - Niger. - -`NF' - Norfolk Island. - -`NG' - Nigeria. - -`NI' - Nicaragua. - -`NL' - Netherlands. - -`NO' - Norway. - -`NP' - Nepal. - -`NR' - Nauru. - -`NU' - Niue. - -`NZ' - New Zealand. - -`OM' - Oman. - -`PA' - Panama. - -`PE' - Peru. - -`PF' - French Polynesia. - -`PG' - Papua New Guinea. - -`PH' - Philippines. - -`PK' - Pakistan. - -`PL' - Poland. - -`PM' - St Pierre and Miquelon. - -`PN' - Pitcairn. - -`PR' - Puerto Rico. - -`PS' - Palestine. - -`PT' - Portugal. - -`PW' - Palau. - -`PY' - Paraguay. - -`QA' - Qatar. - -`RE' - Reunion. - -`RO' - Romania. - -`RU' - Russia. - -`RW' - Rwanda. - -`SA' - Saudi Arabia. - -`SB' - Solomon Islands. - -`SC' - Seychelles. - -`SD' - Sudan. - -`SE' - Sweden. - -`SG' - Singapore. - -`SH' - St Helena. - -`SI' - Slovenia. - -`SJ' - Svalbard and Jan Mayen. - -`SK' - Slovakia. - -`SL' - Sierra Leone. - -`SM' - San Marino. - -`SN' - Senegal. - -`SO' - Somalia. - -`SR' - Suriname. - -`ST' - Sao Tome and Principe. - -`SV' - El Salvador. - -`SY' - Syria. - -`SZ' - Swaziland. - -`TC' - Turks and Caicos Is. - -`TD' - Chad. - -`TF' - French Southern and Antarctic Lands. - -`TG' - Togo. - -`TH' - Thailand. - -`TJ' - Tajikistan. - -`TK' - Tokelau. - -`TM' - Turkmenistan. - -`TN' - Tunisia. - -`TO' - Tonga. - -`TP' - East Timor. - -`TR' - Turkey. - -`TT' - Trinidad and Tobago. - -`TV' - Tuvalu. - -`TW' - Taiwan. - -`TZ' - Tanzania. - -`UA' - Ukraine. - -`UG' - Uganda. - -`UM' - US minor outlying islands. - -`US' - United States. - -`UY' - Uruguay. - -`UZ' - Uzbekistan. - -`VA' - Vatican City. - -`VC' - St Vincent. - -`VE' - Venezuela. - -`VG' - Virgin Islands (UK). - -`VI' - Virgin Islands (US). - -`VN' - Vietnam. - -`VU' - Vanuatu. - -`WF' - Wallis and Futuna. - -`WS' - Samoa (Western). - -`YE' - Yemen. - -`YT' - Mayotte. - -`YU' - Yugoslavia. - -`ZA' - South Africa. - -`ZM' - Zambia. - -`ZW' - Zimbabwe. - - -File: gettext.info, Node: Program Index, Next: Option Index, Prev: Country Codes, Up: Top - -Program Index -************* - -* Menu: - -* autopoint: autopoint Invocation. -* gettext <1>: bash. -* gettext: sh. -* gettextize: gettextize Invocation. -* msgattrib: msgattrib Invocation. -* msgcat: msgcat Invocation. -* msgcmp: msgcmp Invocation. -* msgcomm: msgcomm Invocation. -* msgconv: msgconv Invocation. -* msgen: msgen Invocation. -* msgexec: msgexec Invocation. -* msgfilter: msgfilter Invocation. -* msgfmt: msgfmt Invocation. -* msggrep: msggrep Invocation. -* msginit: msginit Invocation. -* msgmerge: msgmerge Invocation. -* msgunfmt: msgunfmt Invocation. -* msguniq: msguniq Invocation. -* ngettext <1>: bash. -* ngettext: sh. -* xgettext: xgettext Invocation. - diff --git a/doc/gettext.info-9 b/doc/gettext.info-9 deleted file mode 100644 index 2a32909..0000000 --- a/doc/gettext.info-9 +++ /dev/null @@ -1,689 +0,0 @@ -This is gettext.info, produced by makeinfo version 4.2 from -gettext.texi. - -INFO-DIR-SECTION GNU Gettext Utilities -START-INFO-DIR-ENTRY -* gettext: (gettext). GNU gettext utilities. -* autopoint: (gettext)autopoint Invocation. Copy gettext infrastructure. -* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. -* msgattrib: (gettext)msgattrib Invocation. Select part of a PO file. -* msgcat: (gettext)msgcat Invocation. Combine several PO files. -* msgcmp: (gettext)msgcmp Invocation. Compare a PO file and template. -* msgcomm: (gettext)msgcomm Invocation. Match two PO files. -* msgconv: (gettext)msgconv Invocation. Convert PO file to encoding. -* msgen: (gettext)msgen Invocation. Create an English PO file. -* msgexec: (gettext)msgexec Invocation. Process a PO file. -* msgfilter: (gettext)msgfilter Invocation. Pipe a PO file through a filter. -* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. -* msggrep: (gettext)msggrep Invocation. Select part of a PO file. -* msginit: (gettext)msginit Invocation. Create a fresh PO file. -* msgmerge: (gettext)msgmerge Invocation. Update a PO file from template. -* msgunfmt: (gettext)msgunfmt Invocation. Uncompile MO file into PO file. -* msguniq: (gettext)msguniq Invocation. Unify duplicates for PO file. -* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. -* ISO639: (gettext)Language Codes. ISO 639 language codes. -* ISO3166: (gettext)Country Codes. ISO 3166 country codes. -END-INFO-DIR-ENTRY - - This file provides documentation for GNU `gettext' utilities. It -also serves as a reference for the free Translation Project. - - Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software -Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: gettext.info, Node: Option Index, Next: Variable Index, Prev: Program Index, Up: Top - -Option Index -************ - -* Menu: - -* --add-comments, xgettext option: xgettext Invocation. -* --add-location, msgattrib option: msgattrib Invocation. -* --add-location, msgcat option: msgcat Invocation. -* --add-location, msgcomm option: msgcomm Invocation. -* --add-location, msgconv option: msgconv Invocation. -* --add-location, msgen option: msgen Invocation. -* --add-location, msgfilter option: msgfilter Invocation. -* --add-location, msggrep option: msggrep Invocation. -* --add-location, msgmerge option: msgmerge Invocation. -* --add-location, msguniq option: msguniq Invocation. -* --add-location, xgettext option: xgettext Invocation. -* --alignment, msgfmt option: msgfmt Invocation. -* --backup, msgmerge option: msgmerge Invocation. -* --c++, xgettext option: xgettext Invocation. -* --check, msgfmt option: msgfmt Invocation. -* --check-accelerators, msgfmt option: msgfmt Invocation. -* --check-compatibility, msgfmt option: msgfmt Invocation. -* --check-domain, msgfmt option: msgfmt Invocation. -* --check-format, msgfmt option: msgfmt Invocation. -* --check-header, msgfmt option: msgfmt Invocation. -* --clear-fuzzy, msgattrib option: msgattrib Invocation. -* --clear-obsolete, msgattrib option: msgattrib Invocation. -* --compendium, msgmerge option: msgmerge Invocation. -* --copy, gettextize option: gettextize Invocation. -* --copyright-holder, xgettext option: xgettext Invocation. -* --debug, xgettext option: xgettext Invocation. -* --default-domain, xgettext option: xgettext Invocation. -* --directory, msgattrib option: msgattrib Invocation. -* --directory, msgcat option: msgcat Invocation. -* --directory, msgcmp option: msgcmp Invocation. -* --directory, msgcomm option: msgcomm Invocation. -* --directory, msgconv option: msgconv Invocation. -* --directory, msgen option: msgen Invocation. -* --directory, msgexec option: msgexec Invocation. -* --directory, msgfilter option: msgfilter Invocation. -* --directory, msgfmt option: msgfmt Invocation. -* --directory, msggrep option: msggrep Invocation. -* --directory, msgmerge option: msgmerge Invocation. -* --directory, msguniq option: msguniq Invocation. -* --directory, xgettext option: xgettext Invocation. -* --domain, msggrep option: msggrep Invocation. -* --dry-run, autopoint option: autopoint Invocation. -* --dry-run, gettextize option: gettextize Invocation. -* --exclude-file, xgettext option: xgettext Invocation. -* --expression, msgfilter option: msgfilter Invocation. -* --extended-regexp, msggrep option: msggrep Invocation. -* --extract-all, xgettext option: xgettext Invocation. -* --file, msgfilter option: msgfilter Invocation. -* --file, msggrep option: msggrep Invocation. -* --files-from, msgcat option: msgcat Invocation. -* --files-from, msgcomm option: msgcomm Invocation. -* --files-from, xgettext option: xgettext Invocation. -* --fixed-strings, msggrep option: msggrep Invocation. -* --force, autopoint option: autopoint Invocation. -* --force, gettextize option: gettextize Invocation. -* --force-po, msgattrib option: msgattrib Invocation. -* --force-po, msgcat option: msgcat Invocation. -* --force-po, msgcomm option: msgcomm Invocation. -* --force-po, msgconv option: msgconv Invocation. -* --force-po, msgen option: msgen Invocation. -* --force-po, msgfilter option: msgfilter Invocation. -* --force-po, msggrep option: msggrep Invocation. -* --force-po, msgmerge option: msgmerge Invocation. -* --force-po, msgunfmt option: msgunfmt Invocation. -* --force-po, msguniq option: msguniq Invocation. -* --force-po, xgettext option: xgettext Invocation. -* --foreign-user, xgettext option: xgettext Invocation. -* --from-code, xgettext option: xgettext Invocation. -* --fuzzy, msgattrib option: msgattrib Invocation. -* --help, autopoint option: autopoint Invocation. -* --help, gettextize option: gettextize Invocation. -* --help, msgattrib option: msgattrib Invocation. -* --help, msgcat option: msgcat Invocation. -* --help, msgcmp option: msgcmp Invocation. -* --help, msgcomm option: msgcomm Invocation. -* --help, msgconv option: msgconv Invocation. -* --help, msgen option: msgen Invocation. -* --help, msgexec option: msgexec Invocation. -* --help, msgfilter option: msgfilter Invocation. -* --help, msgfmt option: msgfmt Invocation. -* --help, msggrep option: msggrep Invocation. -* --help, msginit option: msginit Invocation. -* --help, msgmerge option: msgmerge Invocation. -* --help, msgunfmt option: msgunfmt Invocation. -* --help, msguniq option: msguniq Invocation. -* --help, xgettext option: xgettext Invocation. -* --ignore-case, msggrep option: msggrep Invocation. -* --indent, msgattrib option: msgattrib Invocation. -* --indent, msgcat option: msgcat Invocation. -* --indent, msgcomm option: msgcomm Invocation. -* --indent, msgconv option: msgconv Invocation. -* --indent, msgen option: msgen Invocation. -* --indent, msgfilter option: msgfilter Invocation. -* --indent, msggrep option: msggrep Invocation. -* --indent, msgmerge option: msgmerge Invocation. -* --indent, msgunfmt option: msgunfmt Invocation. -* --indent, msguniq option: msguniq Invocation. -* --indent, xgettext option: xgettext Invocation. -* --input, msgexec option: msgexec Invocation. -* --input, msgfilter option: msgfilter Invocation. -* --input, msginit option: msginit Invocation. -* --intl, gettextize option: gettextize Invocation. -* --java, msgfmt option: msgfmt Invocation. -* --java, msgunfmt option: msgunfmt Invocation. -* --java2, msgfmt option: msgfmt Invocation. -* --join-existing, xgettext option: xgettext Invocation. -* --keep-header, msgfilter option: msgfilter Invocation. -* --keyword, xgettext option: xgettext Invocation. -* --language, xgettext option: xgettext Invocation. -* --less-than, msgcat option: msgcat Invocation. -* --less-than, msgcomm option: msgcomm Invocation. -* --locale, msgfmt option: msgfmt Invocation. -* --locale, msginit option: msginit Invocation. -* --locale, msgunfmt option: msgunfmt Invocation. -* --location, msggrep option: msggrep Invocation. -* --more-than, msgcat option: msgcat Invocation. -* --more-than, msgcomm option: msgcomm Invocation. -* --msgid, msggrep option: msggrep Invocation. -* --msgstr, msggrep option: msggrep Invocation. -* --msgstr-prefix, xgettext option: xgettext Invocation. -* --msgstr-suffix, xgettext option: xgettext Invocation. -* --multi-domain, msgcmp option: msgcmp Invocation. -* --multi-domain, msgmerge option: msgmerge Invocation. -* --no-changelog, gettextize option: gettextize Invocation. -* --no-fuzzy, msgattrib option: msgattrib Invocation. -* --no-hash, msgfmt option: msgfmt Invocation. -* --no-location, msgattrib option: msgattrib Invocation. -* --no-location, msgcat option: msgcat Invocation. -* --no-location, msgcomm option: msgcomm Invocation. -* --no-location, msgconv option: msgconv Invocation. -* --no-location, msgen option: msgen Invocation. -* --no-location, msgfilter option: msgfilter Invocation. -* --no-location, msggrep option: msggrep Invocation. -* --no-location, msgmerge option: msgmerge Invocation. -* --no-location, msguniq option: msguniq Invocation. -* --no-location, xgettext option: xgettext Invocation. -* --no-obsolete, msgattrib option: msgattrib Invocation. -* --no-translator, msginit option: msginit Invocation. -* --no-wrap, msgattrib option: msgattrib Invocation. -* --no-wrap, msgcat option: msgcat Invocation. -* --no-wrap, msgcomm option: msgcomm Invocation. -* --no-wrap, msgconv option: msgconv Invocation. -* --no-wrap, msgen option: msgen Invocation. -* --no-wrap, msgfilter option: msgfilter Invocation. -* --no-wrap, msggrep option: msggrep Invocation. -* --no-wrap, msginit option: msginit Invocation. -* --no-wrap, msgmerge option: msgmerge Invocation. -* --no-wrap, msgunfmt option: msgunfmt Invocation. -* --no-wrap, msguniq option: msguniq Invocation. -* --no-wrap, xgettext option: xgettext Invocation. -* --obsolete, msgattrib option: msgattrib Invocation. -* --omit-header, msgcomm option: msgcomm Invocation. -* --omit-header, xgettext option: xgettext Invocation. -* --only-fuzzy, msgattrib option: msgattrib Invocation. -* --only-obsolete, msgattrib option: msgattrib Invocation. -* --output, xgettext option: xgettext Invocation. -* --output-dir, xgettext option: xgettext Invocation. -* --output-file, msgattrib option: msgattrib Invocation. -* --output-file, msgcat option: msgcat Invocation. -* --output-file, msgcomm option: msgcomm Invocation. -* --output-file, msgconv option: msgconv Invocation. -* --output-file, msgen option: msgen Invocation. -* --output-file, msgfilter option: msgfilter Invocation. -* --output-file, msgfmt option: msgfmt Invocation. -* --output-file, msggrep option: msggrep Invocation. -* --output-file, msginit option: msginit Invocation. -* --output-file, msgmerge option: msgmerge Invocation. -* --output-file, msgunfmt option: msgunfmt Invocation. -* --output-file, msguniq option: msguniq Invocation. -* --quiet, msgfilter option: msgfilter Invocation. -* --quiet, msgmerge option: msgmerge Invocation. -* --regexp=, msggrep option: msggrep Invocation. -* --repeated, msguniq option: msguniq Invocation. -* --resource, msgfmt option: msgfmt Invocation. -* --resource, msgunfmt option: msgunfmt Invocation. -* --set-fuzzy, msgattrib option: msgattrib Invocation. -* --set-obsolete, msgattrib option: msgattrib Invocation. -* --silent, msgfilter option: msgfilter Invocation. -* --silent, msgmerge option: msgmerge Invocation. -* --sort-by-file, msgattrib option: msgattrib Invocation. -* --sort-by-file, msgcat option: msgcat Invocation. -* --sort-by-file, msgcomm option: msgcomm Invocation. -* --sort-by-file, msgconv option: msgconv Invocation. -* --sort-by-file, msgen option: msgen Invocation. -* --sort-by-file, msgfilter option: msgfilter Invocation. -* --sort-by-file, msggrep option: msggrep Invocation. -* --sort-by-file, msgmerge option: msgmerge Invocation. -* --sort-by-file, msguniq option: msguniq Invocation. -* --sort-by-file, xgettext option: xgettext Invocation. -* --sort-output, msgattrib option: msgattrib Invocation. -* --sort-output, msgcat option: msgcat Invocation. -* --sort-output, msgcomm option: msgcomm Invocation. -* --sort-output, msgconv option: msgconv Invocation. -* --sort-output, msgen option: msgen Invocation. -* --sort-output, msgfilter option: msgfilter Invocation. -* --sort-output, msggrep option: msggrep Invocation. -* --sort-output, msgmerge option: msgmerge Invocation. -* --sort-output, msgunfmt option: msgunfmt Invocation. -* --sort-output, msguniq option: msguniq Invocation. -* --sort-output, xgettext option: xgettext Invocation. -* --statistics, msgfmt option: msgfmt Invocation. -* --strict, msgattrib option: msgattrib Invocation. -* --strict, msgcat option: msgcat Invocation. -* --strict, msgcomm option: msgcomm Invocation. -* --strict, msgconv option: msgconv Invocation. -* --strict, msgen option: msgen Invocation. -* --strict, msgfilter option: msgfilter Invocation. -* --strict, msgfmt option: msgfmt Invocation. -* --strict, msggrep option: msggrep Invocation. -* --strict, msgmerge option: msgmerge Invocation. -* --strict, msgunfmt option: msgunfmt Invocation. -* --strict, msguniq option: msguniq Invocation. -* --strict, xgettext option: xgettext Invocation. -* --suffix, msgmerge option: msgmerge Invocation. -* --tcl, msgfmt option: msgfmt Invocation. -* --tcl, msgunfmt option: msgunfmt Invocation. -* --to-code, msgcat option: msgcat Invocation. -* --to-code, msgconv option: msgconv Invocation. -* --to-code, msguniq option: msguniq Invocation. -* --translated, msgattrib option: msgattrib Invocation. -* --trigraphs, xgettext option: xgettext Invocation. -* --unique, msgcat option: msgcat Invocation. -* --unique, msgcomm option: msgcomm Invocation. -* --unique, msguniq option: msguniq Invocation. -* --untranslated, msgattrib option: msgattrib Invocation. -* --update, msgmerge option: msgmerge Invocation. -* --use-first, msgcat option: msgcat Invocation. -* --use-first, msguniq option: msguniq Invocation. -* --use-fuzzy, msgfmt option: msgfmt Invocation. -* --verbose, msgfmt option: msgfmt Invocation. -* --verbose, msgmerge option: msgmerge Invocation. -* --verbose, msgunfmt option: msgunfmt Invocation. -* --version, autopoint option: autopoint Invocation. -* --version, gettextize option: gettextize Invocation. -* --version, msgattrib option: msgattrib Invocation. -* --version, msgcat option: msgcat Invocation. -* --version, msgcmp option: msgcmp Invocation. -* --version, msgcomm option: msgcomm Invocation. -* --version, msgconv option: msgconv Invocation. -* --version, msgen option: msgen Invocation. -* --version, msgexec option: msgexec Invocation. -* --version, msgfilter option: msgfilter Invocation. -* --version, msgfmt option: msgfmt Invocation. -* --version, msggrep option: msggrep Invocation. -* --version, msginit option: msginit Invocation. -* --version, msgmerge option: msgmerge Invocation. -* --version, msgunfmt option: msgunfmt Invocation. -* --version, msguniq option: msguniq Invocation. -* --version, xgettext option: xgettext Invocation. -* --width, msgattrib option: msgattrib Invocation. -* --width, msgcat option: msgcat Invocation. -* --width, msgcomm option: msgcomm Invocation. -* --width, msgconv option: msgconv Invocation. -* --width, msgen option: msgen Invocation. -* --width, msgfilter option: msgfilter Invocation. -* --width, msggrep option: msggrep Invocation. -* --width, msginit option: msginit Invocation. -* --width, msgmerge option: msgmerge Invocation. -* --width, msgunfmt option: msgunfmt Invocation. -* --width, msguniq option: msguniq Invocation. -* --width, xgettext option: xgettext Invocation. -* -<, msgcat option: msgcat Invocation. -* -<, msgcomm option: msgcomm Invocation. -* ->, msgcat option: msgcat Invocation. -* ->, msgcomm option: msgcomm Invocation. -* -a, msgfmt option: msgfmt Invocation. -* -a, xgettext option: xgettext Invocation. -* -c, gettextize option: gettextize Invocation. -* -C, msgfmt option: msgfmt Invocation. -* -c, msgfmt option: msgfmt Invocation. -* -C, msgmerge option: msgmerge Invocation. -* -c, xgettext option: xgettext Invocation. -* -C, xgettext option: xgettext Invocation. -* -d, autopoint option: autopoint Invocation. -* -d, gettextize option: gettextize Invocation. -* -D, msgattrib option: msgattrib Invocation. -* -D, msgcat option: msgcat Invocation. -* -D, msgcmp option: msgcmp Invocation. -* -D, msgcomm option: msgcomm Invocation. -* -D, msgconv option: msgconv Invocation. -* -D, msgen option: msgen Invocation. -* -D, msgexec option: msgexec Invocation. -* -D, msgfilter option: msgfilter Invocation. -* -d, msgfmt option: msgfmt Invocation. -* -D, msgfmt option: msgfmt Invocation. -* -D, msggrep option: msggrep Invocation. -* -D, msgmerge option: msgmerge Invocation. -* -d, msgunfmt option: msgunfmt Invocation. -* -d, msguniq option: msguniq Invocation. -* -D, msguniq option: msguniq Invocation. -* -d, xgettext option: xgettext Invocation. -* -D, xgettext option: xgettext Invocation. -* -e, msgfilter option: msgfilter Invocation. -* -e, msggrep option: msggrep Invocation. -* -E, msggrep option: msggrep Invocation. -* -f, autopoint option: autopoint Invocation. -* -f, gettextize option: gettextize Invocation. -* -F, msgattrib option: msgattrib Invocation. -* -F, msgcat option: msgcat Invocation. -* -f, msgcat option: msgcat Invocation. -* -F, msgcomm option: msgcomm Invocation. -* -f, msgcomm option: msgcomm Invocation. -* -F, msgconv option: msgconv Invocation. -* -F, msgen option: msgen Invocation. -* -F, msgfilter option: msgfilter Invocation. -* -f, msgfilter option: msgfilter Invocation. -* -f, msgfmt option: msgfmt Invocation. -* -f, msggrep option: msggrep Invocation. -* -F, msggrep option: msggrep Invocation. -* -F, msgmerge option: msgmerge Invocation. -* -F, msguniq option: msguniq Invocation. -* -F, xgettext option: xgettext Invocation. -* -f, xgettext option: xgettext Invocation. -* -h, msgattrib option: msgattrib Invocation. -* -h, msgcat option: msgcat Invocation. -* -h, msgcmp option: msgcmp Invocation. -* -h, msgcomm option: msgcomm Invocation. -* -h, msgconv option: msgconv Invocation. -* -h, msgen option: msgen Invocation. -* -h, msgexec option: msgexec Invocation. -* -h, msgfilter option: msgfilter Invocation. -* -h, msgfmt option: msgfmt Invocation. -* -h, msggrep option: msggrep Invocation. -* -h, msginit option: msginit Invocation. -* -h, msgmerge option: msgmerge Invocation. -* -h, msgunfmt option: msgunfmt Invocation. -* -h, msguniq option: msguniq Invocation. -* -h, xgettext option: xgettext Invocation. -* -i, msgattrib option: msgattrib Invocation. -* -i, msgcat option: msgcat Invocation. -* -i, msgcomm option: msgcomm Invocation. -* -i, msgconv option: msgconv Invocation. -* -i, msgen option: msgen Invocation. -* -i, msgexec option: msgexec Invocation. -* -i, msgfilter option: msgfilter Invocation. -* -i, msggrep option: msggrep Invocation. -* -i, msginit option: msginit Invocation. -* -i, msgmerge option: msgmerge Invocation. -* -i, msgunfmt option: msgunfmt Invocation. -* -i, msguniq option: msguniq Invocation. -* -i, xgettext option: xgettext Invocation. -* -j, msgfmt option: msgfmt Invocation. -* -j, msgunfmt option: msgunfmt Invocation. -* -j, xgettext option: xgettext Invocation. -* -K, msggrep option: msggrep Invocation. -* -k, xgettext option: xgettext Invocation. -* -l, msgfmt option: msgfmt Invocation. -* -l, msginit option: msginit Invocation. -* -l, msgunfmt option: msgunfmt Invocation. -* -L, xgettext option: xgettext Invocation. -* -m, msgcmp option: msgcmp Invocation. -* -M, msggrep option: msggrep Invocation. -* -m, msgmerge option: msgmerge Invocation. -* -M, xgettext option: xgettext Invocation. -* -m, xgettext option: xgettext Invocation. -* -n, msgattrib option: msgattrib Invocation. -* -n, msgcat option: msgcat Invocation. -* -n, msgcomm option: msgcomm Invocation. -* -n, msgfilter option: msgfilter Invocation. -* -N, msggrep option: msggrep Invocation. -* -n, msguniq option: msguniq Invocation. -* -n, xgettext option: xgettext Invocation. -* -o, msgattrib option: msgattrib Invocation. -* -o, msgcat option: msgcat Invocation. -* -o, msgcomm option: msgcomm Invocation. -* -o, msgconv option: msgconv Invocation. -* -o, msgen option: msgen Invocation. -* -o, msgfilter option: msgfilter Invocation. -* -o, msgfmt option: msgfmt Invocation. -* -o, msggrep option: msggrep Invocation. -* -o, msginit option: msginit Invocation. -* -o, msgmerge option: msgmerge Invocation. -* -o, msgunfmt option: msgunfmt Invocation. -* -o, msguniq option: msguniq Invocation. -* -o, xgettext option: xgettext Invocation. -* -p, xgettext option: xgettext Invocation. -* -q, msgmerge option: msgmerge Invocation. -* -r, msgfmt option: msgfmt Invocation. -* -r, msgunfmt option: msgunfmt Invocation. -* -s, msgattrib option: msgattrib Invocation. -* -s, msgcat option: msgcat Invocation. -* -s, msgcomm option: msgcomm Invocation. -* -s, msgconv option: msgconv Invocation. -* -s, msgen option: msgen Invocation. -* -s, msgfilter option: msgfilter Invocation. -* -s, msgmerge option: msgmerge Invocation. -* -s, msgunfmt option: msgunfmt Invocation. -* -s, msguniq option: msguniq Invocation. -* -s, xgettext option: xgettext Invocation. -* -t, msgcat option: msgcat Invocation. -* -t, msgconv option: msgconv Invocation. -* -T, msggrep option: msggrep Invocation. -* -t, msguniq option: msguniq Invocation. -* -T, xgettext option: xgettext Invocation. -* -u, msgcat option: msgcat Invocation. -* -u, msgcomm option: msgcomm Invocation. -* -U, msgmerge option: msgmerge Invocation. -* -u, msguniq option: msguniq Invocation. -* -V, msgattrib option: msgattrib Invocation. -* -V, msgcat option: msgcat Invocation. -* -V, msgcmp option: msgcmp Invocation. -* -V, msgcomm option: msgcomm Invocation. -* -V, msgconv option: msgconv Invocation. -* -V, msgen option: msgen Invocation. -* -V, msgexec option: msgexec Invocation. -* -V, msgfilter option: msgfilter Invocation. -* -v, msgfmt option: msgfmt Invocation. -* -V, msgfmt option: msgfmt Invocation. -* -V, msggrep option: msggrep Invocation. -* -V, msginit option: msginit Invocation. -* -v, msgmerge option: msgmerge Invocation. -* -V, msgmerge option: msgmerge Invocation. -* -v, msgunfmt option: msgunfmt Invocation. -* -V, msgunfmt option: msgunfmt Invocation. -* -V, msguniq option: msguniq Invocation. -* -V, xgettext option: xgettext Invocation. -* -w, msgattrib option: msgattrib Invocation. -* -w, msgcat option: msgcat Invocation. -* -w, msgcomm option: msgcomm Invocation. -* -w, msgconv option: msgconv Invocation. -* -w, msgen option: msgen Invocation. -* -w, msgfilter option: msgfilter Invocation. -* -w, msggrep option: msggrep Invocation. -* -w, msginit option: msginit Invocation. -* -w, msgmerge option: msgmerge Invocation. -* -w, msgunfmt option: msgunfmt Invocation. -* -w, msguniq option: msguniq Invocation. -* -w, xgettext option: xgettext Invocation. -* -x, xgettext option: xgettext Invocation. - - -File: gettext.info, Node: Variable Index, Next: PO Mode Index, Prev: Option Index, Up: Top - -Variable Index -************** - -* Menu: - -* LANG, environment variable <1>: gettext grok. -* LANG, environment variable: End Users. -* LANGUAGE, environment variable <1>: po/Makevars. -* LANGUAGE, environment variable: gettext grok. -* LC_ALL, environment variable: gettext grok. -* LC_COLLATE, environment variable: gettext grok. -* LC_CTYPE, environment variable: gettext grok. -* LC_MESSAGES, environment variable: gettext grok. -* LC_MONETARY, environment variable: gettext grok. -* LC_NUMERIC, environment variable: gettext grok. -* LC_TIME, environment variable: gettext grok. -* LINGUAS, environment variable: Installers. -* MSGEXEC_LOCATION, environment variable: msgexec Invocation. -* MSGEXEC_MSGID, environment variable: msgexec Invocation. -* TEXTDOMAIN, environment variable <1>: bash. -* TEXTDOMAIN, environment variable: sh. -* TEXTDOMAINDIR, environment variable <1>: bash. -* TEXTDOMAINDIR, environment variable: sh. - - -File: gettext.info, Node: PO Mode Index, Next: Autoconf Macro Index, Prev: Variable Index, Up: Top - -PO Mode Index -************* - -* Menu: - -* #, PO Mode command: Modifying Comments. -* ,, PO Mode command: Marking. -* ., PO Mode command: Entry Positioning. -* .emacs customizations: Installation. -* 0, PO Mode command: Main PO Commands. -* <, PO Mode command: Entry Positioning. -* =, PO Mode command: Main PO Commands. -* >, PO Mode command: Entry Positioning. -* ?, PO Mode command: Main PO Commands. -* _, PO Mode command: Main PO Commands. -* a, PO Mode command: Auxiliary. -* A, PO Mode command: Auxiliary. -* a, PO Mode command: Auxiliary. -* auxiliary PO file: Auxiliary. -* C-c C-a, PO Mode command <1>: Auxiliary. -* C-c C-a, PO Mode command: Subedit. -* C-c C-c, PO Mode command: Subedit. -* C-c C-k, PO Mode command: Subedit. -* C-j, PO Mode command: Modifying Translations. -* commands: Main PO Commands. -* comment out PO file entry: Obsolete Entries. -* consulting program sources: C Sources Context. -* consulting translations to other languages: Auxiliary. -* current entry of a PO file: Entry Positioning. -* cut and paste for translated strings: Modifying Translations. -* DEL, PO Mode command <1>: Obsolete Entries. -* DEL, PO Mode command: Fuzzy Entries. -* editing comments: Modifying Comments. -* editing multiple entries: Subedit. -* editing translations: Modifying Translations. -* etags, using for marking strings: Marking. -* exiting PO subedit: Subedit. -* find source fragment for a PO file entry: C Sources Context. -* h, PO Mode command: Main PO Commands. -* installing PO mode: Installation. -* K, PO Mode command: Modifying Comments. -* k, PO Mode command <1>: Modifying Translations. -* k, PO Mode command: Untranslated Entries. -* LFD, PO Mode command: Modifying Translations. -* looking at the source to aid translation: C Sources Context. -* m, PO Mode command: Entry Positioning. -* M-,, PO Mode command: Marking. -* M-., PO Mode command: Marking. -* M-A, PO Mode command: Auxiliary. -* M-S, PO Mode command: C Sources Context. -* M-s, PO Mode command: C Sources Context. -* M-S, PO Mode command: C Sources Context. -* M-s, PO Mode command: C Sources Context. -* marking strings for translation: Marking. -* moving by fuzzy entries: Fuzzy Entries. -* moving by obsolete entries: Obsolete Entries. -* moving by translated entries: Translated Entries. -* moving by untranslated entries: Untranslated Entries. -* moving through a PO file: Entry Positioning. -* n, PO Mode command: Entry Positioning. -* next-error, stepping through PO file validation results: Main PO Commands. -* normalize, PO Mode command: Auxiliary. -* O, PO Mode command: Obsolete Entries. -* o, PO Mode command: Obsolete Entries. -* O, PO Mode command: Obsolete Entries. -* o, PO Mode command: Obsolete Entries. -* obsolete active entry: Obsolete Entries. -* p, PO Mode command: Entry Positioning. -* pending subedits: Subedit. -* po-auto-edit-with-msgid, PO Mode variable: Modifying Translations. -* po-auto-fuzzy-on-edit, PO Mode variable: Translated Entries. -* po-auto-select-on-unfuzzy, PO Mode variable: Fuzzy Entries. -* po-confirm-and-quit, PO Mode command: Main PO Commands. -* po-consider-as-auxiliary, PO Mode command: Auxiliary. -* po-consider-source-path, PO Mode command: C Sources Context. -* po-current-entry, PO Mode command: Entry Positioning. -* po-cycle-auxiliary, PO Mode command: Auxiliary. -* po-cycle-source-reference, PO Mode command: C Sources Context. -* po-edit-comment, PO Mode command: Modifying Comments. -* po-edit-msgstr, PO Mode command: Modifying Translations. -* po-exchange-location, PO Mode command: Entry Positioning. -* po-fade-out-entry, PO Mode command <1>: Obsolete Entries. -* po-fade-out-entry, PO Mode command: Fuzzy Entries. -* po-first-entry, PO Mode command: Entry Positioning. -* po-help, PO Mode command: Main PO Commands. -* po-ignore-as-auxiliary, PO Mode command: Auxiliary. -* po-ignore-source-path, PO Mode command: C Sources Context. -* po-kill-comment, PO Mode command: Modifying Comments. -* po-kill-msgstr, PO Mode command <1>: Modifying Translations. -* po-kill-msgstr, PO Mode command: Untranslated Entries. -* po-kill-ring-save-comment, PO Mode command: Modifying Comments. -* po-kill-ring-save-msgstr, PO Mode command: Modifying Translations. -* po-last-entry, PO Mode command: Entry Positioning. -* po-mark-translatable, PO Mode command: Marking. -* po-msgid-to-msgstr, PO Mode command: Modifying Translations. -* po-next-entry, PO Mode command: Entry Positioning. -* po-next-fuzzy-entry, PO Mode command: Fuzzy Entries. -* po-next-obsolete-entry, PO Mode command: Obsolete Entries. -* po-next-translated-entry, PO Mode command: Translated Entries. -* po-next-untranslated-entry, PO Mode command: Untranslated Entries. -* po-normalize, PO Mode command <1>: Normalizing. -* po-normalize, PO Mode command: PO Files. -* po-other-window, PO Mode command: Main PO Commands. -* po-pop-location, PO Mode command: Entry Positioning. -* po-previous-entry, PO Mode command: Entry Positioning. -* po-previous-fuzzy-entry, PO Mode command: Fuzzy Entries. -* po-previous-obsolete-entry, PO Mode command: Obsolete Entries. -* po-previous-translated-entry, PO Mode command: Translated Entries. -* po-previous-untransted-entry, PO Mode command: Untranslated Entries. -* po-push-location, PO Mode command: Entry Positioning. -* po-quit, PO Mode command: Main PO Commands. -* po-select-auxiliary, PO Mode command: Auxiliary. -* po-select-mark-and-mark, PO Mode command: Marking. -* po-select-source-reference, PO Mode command: C Sources Context. -* po-statistics, PO Mode command: Main PO Commands. -* po-subedit-abort, PO Mode command: Subedit. -* po-subedit-cycle-auxiliary, PO Mode command: Subedit. -* po-subedit-exit, PO Mode command: Subedit. -* po-subedit-mode-hook, PO Mode variable: Modifying Comments. -* po-tags-search, PO Mode command: Marking. -* po-undo, PO Mode command: Main PO Commands. -* po-unfuzzy, PO Mode command: Fuzzy Entries. -* po-validate, PO Mode command: Main PO Commands. -* po-yank-comment, PO Mode command: Modifying Comments. -* po-yank-msgstr, PO Mode command: Modifying Translations. -* q, PO Mode command: Main PO Commands. -* Q, PO Mode command: Main PO Commands. -* q, PO Mode command: Main PO Commands. -* Q, PO Mode command: Main PO Commands. -* r, PO Mode command: Entry Positioning. -* RET, PO Mode command: Modifying Translations. -* S, PO Mode command: C Sources Context. -* s, PO Mode command: C Sources Context. -* S, PO Mode command: C Sources Context. -* s, PO Mode command: C Sources Context. -* starting a string translation: Modifying Translations. -* string normalization in entries: Normalizing. -* subedit minor mode: Subedit. -* T, PO Mode command: Translated Entries. -* t, PO Mode command: Translated Entries. -* T, PO Mode command: Translated Entries. -* t, PO Mode command: Translated Entries. -* TAB, PO Mode command: Fuzzy Entries. -* TAGS, and marking translatable strings: Marking. -* U, PO Mode command: Untranslated Entries. -* u, PO Mode command: Untranslated Entries. -* U, PO Mode command: Untranslated Entries. -* u, PO Mode command: Untranslated Entries. -* use the source, Luke: C Sources Context. -* using obsolete translations to make new entries: Modifying Translations. -* using translation compendia: Compendium. -* V, PO Mode command: Main PO Commands. -* W, PO Mode command: Modifying Comments. -* w, PO Mode command: Modifying Translations. -* x, PO Mode command: Entry Positioning. -* Y, PO Mode command: Modifying Comments. -* y, PO Mode command: Modifying Translations. -* Z, PO Mode command: Fuzzy Entries. -* z, PO Mode command: Fuzzy Entries. -* Z, PO Mode command: Fuzzy Entries. -* z, PO Mode command: Fuzzy Entries. - - -File: gettext.info, Node: Autoconf Macro Index, Next: Index, Prev: PO Mode Index, Up: Top - -Autoconf Macro Index -******************** - -* Menu: - -* AM_GNU_GETTEXT: AM_GNU_GETTEXT. -* AM_GNU_GETTEXT_VERSION: AM_GNU_GETTEXT_VERSION. -* AM_ICONV: AM_ICONV. - diff --git a/doc/gettext_1.html b/doc/gettext_1.html deleted file mode 100644 index 988e875..0000000 --- a/doc/gettext_1.html +++ /dev/null @@ -1,703 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 1 Introduction</TITLE> -</HEAD> -<BODY> -Go to the first, previous, <A HREF="gettext_2.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC1" HREF="gettext_toc.html#TOC1">1 Introduction</A></H1> - - -<BLOCKQUOTE> -<P> -This manual is still in <EM>DRAFT</EM> state. Some sections are still -empty, or almost. We keep merging material from other sources -(essentially e-mail folders) while the proper integration of this -material is delayed. -</BLOCKQUOTE> - -<P> -<A NAME="IDX1"></A> -<A NAME="IDX2"></A> -<A NAME="IDX3"></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> -<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 -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> -<P> -<A NAME="IDX4"></A> -Please send suggestions and corrections to: - -</P> - -<PRE> -Internet address: - bug-gnu-gettext@gnu.org -</PRE> - -<P> -Please include the manual's edition number and update date in your messages. - -</P> - - - -<H2><A NAME="SEC2" HREF="gettext_toc.html#TOC2">1.1 The Purpose of GNU <CODE>gettext</CODE></A></H2> - -<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 commercial -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> -<P> -<A NAME="IDX5"></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> -<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 - -</P> - -<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 special mode for Emacs<A NAME="DOCF1" HREF="gettext_foot.html#FOOT1">(1)</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> -<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>. - -</P> - - -<H2><A NAME="SEC3" HREF="gettext_toc.html#TOC3">1.2 I18n, L10n, and Such</A></H2> - -<P> -<A NAME="IDX6"></A> -<A NAME="IDX7"></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 <EM>i18n</EM> and <EM>l10n</EM> 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... - -</P> -<P> -<A NAME="IDX8"></A> -By <EM>internationalization</EM>, 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 section <A HREF="gettext_10.html#SEC142">10 The Programmer's View</A>. - -</P> -<P> -<A NAME="IDX9"></A> -By <EM>localization</EM>, 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 <EM>locale</EM> 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> -<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 "accessing the locale routines", they are referring to the -complete suite of routines that access all of the locale's information. - -</P> -<P> -<A NAME="IDX10"></A> -<A NAME="IDX11"></A> -<A NAME="IDX12"></A> -One uses the expression <EM>Native Language Support</EM>, 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> -<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. - -</P> - - -<H2><A NAME="SEC4" HREF="gettext_toc.html#TOC4">1.3 Aspects in Native Language Support</A></H2> - -<P> -<A NAME="IDX13"></A> -For a totally multi-lingual distribution, there are many things to -translate beyond output messages. - -</P> - -<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 1345 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; <SAMP>`rm -i´</SAMP> might accept something else than -<SAMP>`y´</SAMP> or <SAMP>`n´</SAMP> 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 <EM>rules</EM> are -termed the country's locale. The locale represents the knowledge -needed to support the country's native attributes. - -</P> -<P> -<A NAME="IDX14"></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. - -</P> -<DL COMPACT> - -<DT><EM>Characters and Codesets</EM> -<DD> -<A NAME="IDX15"></A> -<A NAME="IDX16"></A> -<A NAME="IDX17"></A> -<A NAME="IDX18"></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 8859-1 code set has most of the special -characters needed to handle the major European languages. However, in -many cases, the ISO 8859-1 font is 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. - -<DT><EM>Currency</EM> -<DD> -<A NAME="IDX19"></A> -<A NAME="IDX20"></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. - -<DT><EM>Dates</EM> -<DD> -<A NAME="IDX21"></A> -<A NAME="IDX22"></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 8061 dates, etc. - -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. - -<DT><EM>Numbers</EM> -<DD> -<A NAME="IDX23"></A> -<A NAME="IDX24"></A> - -Numbers can be represented differently in different locales. -For example, the following numbers are all written correctly for -their respective locales: - - -<PRE> -12,345.67 English -12.345,67 German - 12345,67 French -1,2345.67 Asia -</PRE> - -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. - -<DT><EM>Messages</EM> -<DD> -<A NAME="IDX25"></A> -<A NAME="IDX26"></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="IDX27"></A> -Components of locale outside of message handling are standardized in -the ISO C standard and the SUSV2 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. - -</P> - - -<H2><A NAME="SEC5" HREF="gettext_toc.html#TOC5">1.4 Files Conveying Translations</A></H2> - -<P> -<A NAME="IDX28"></A> -The letters PO in <TT>`.po´</TT> files means Portable Object, to -distinguish it from <TT>`.mo´</TT> 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> -<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 <TT>`.pot´</TT> are kind of base -translation files found in distributions, in PO file format. - -</P> -<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 -<TT>`.gmo´</TT> are really MO files, when it is known that these files use -the GNU format. - -</P> - - -<H2><A NAME="SEC6" HREF="gettext_toc.html#TOC6">1.5 Overview of GNU <CODE>gettext</CODE></A></H2> - -<P> -<A NAME="IDX29"></A> -<A NAME="IDX30"></A> -<A NAME="IDX31"></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. - -</P> - -<PRE> -Original C Sources ---> PO mode ---> Marked C Sources ---. - | - .---------<--- GNU gettext Library | -.--- make <---+ | -| `---------<--------------------+-----------' -| | -| .-----<--- PACKAGE.pot <--- xgettext <---' .---<--- PO Compendium -| | | ^ -| | `---. | -| `---. +---> PO mode ---. -| +----> msgmerge ------> LANG.po ---->--------' | -| .---' | -| | | -| `-------------<---------------. | -| +--- New LANG.po <------------------' -| .--- LANG.gmo <--- msgfmt <---' -| | -| `---> install ---> /.../LANG/PACKAGE.mo ---. -| +---> "Hello world!" -`-------> install ---> /.../bin/PROGRAM -------' -</PRE> - -<P> -The indication <SAMP>`PO mode´</SAMP> appears in two places in this picture, -and you may safely read it as merely meaning "hand editing", using -any editor of your choice, really. However, 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> -<P> -<A NAME="IDX32"></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 section <A HREF="gettext_3.html#SEC13">3 Preparing Program Sources</A>, for -more information about all this. - -</P> -<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: - -</P> - -<PRE> -#define _(String) (String) -#define N_(String) String -#define textdomain(Domain) -#define bindtextdomain(Package, Directory) -</PRE> - -<P> -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> -<P> -<A NAME="IDX33"></A> - -<PRE> -#include <libintl.h> -#define _(String) gettext (String) -#define gettext_noop(String) String -#define N_(String) gettext_noop (String) -</PRE> - -<P> -<A NAME="IDX34"></A> -<A NAME="IDX35"></A> -and link against <TT>`libintl.a´</TT> or <TT>`libintl.so´</TT>. 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> -<P> -<A NAME="IDX36"></A> -<A NAME="IDX37"></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 <TT>`<VAR>package</VAR>.pot´</TT> 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 <KBD>t</KBD> in <TT>`.pot´</TT> marks this as -a Template PO file, not yet oriented towards any particular language. -See section <A HREF="gettext_4.html#SEC21">4.1 Invoking the <CODE>xgettext</CODE> Program</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 section <A HREF="gettext_12.html#SEC173">12 The Maintainer's View</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> -<P> -The first time through, there is no <TT>`<VAR>lang</VAR>.po´</TT> yet, so the -<CODE>msgmerge</CODE> step may be skipped and replaced by a mere copy of -<TT>`<VAR>package</VAR>.pot´</TT> to <TT>`<VAR>lang</VAR>.po´</TT>, where <VAR>lang</VAR> -represents the target language. See section <A HREF="gettext_5.html#SEC30">5 Creating a New PO File</A> for details. - -</P> -<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 section <A HREF="gettext_11.html#SEC162">11 The Translator's View</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> -<P> -While adding the translated messages into the <TT>`<VAR>lang</VAR>.po´</TT> -PO file, if you do not have Emacs handy, you are on your own -for ensuring that your efforts fully respect the PO file format, and quoting -conventions (see section <A HREF="gettext_2.html#SEC9">2.2 The Format of PO Files</A>). This is surely not an impossible task, -as this is the way many people have handled PO files already for Uniforum or -Solaris. On the other hand, by using PO mode in Emacs, most details -of PO file format are taken care of for you, but you have to acquire -some familiarity with PO mode itself. Besides main PO mode commands -(see section <A HREF="gettext_2.html#SEC10">2.3 Main PO mode Commands</A>), you should know how to move between entries -(see section <A HREF="gettext_2.html#SEC11">2.4 Entry Positioning</A>), and how to handle untranslated entries -(see section <A HREF="gettext_6.html#SEC48">6.4 Untranslated Entries</A>). - -</P> -<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 section <A HREF="gettext_6.html#SEC55">6.11 Using Translation Compendia</A>). Compendium files -are meant to be exchanged between members of a given translation team. - -</P> -<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> -<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 <TT>`<VAR>package</VAR>.pot´</TT> files which are -evolving over time, so the translations carried by <TT>`<VAR>lang</VAR>.po´</TT> -are slowly fading out of date. - -</P> -<P> -<A NAME="IDX38"></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> -<P> -The <CODE>msgmerge</CODE> program has the purpose of refreshing an already -existing <TT>`<VAR>lang</VAR>.po´</TT> file, by comparing it with a newer -<TT>`<VAR>package</VAR>.pot´</TT> 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 <TT>`<VAR>lang</VAR>.po´</TT>, those already translated entries -which are no longer used in the program sources (see section <A HREF="gettext_6.html#SEC49">6.5 Obsolete Entries</A>). It finally discovers new strings and inserts them in -the resulting PO file as untranslated entries (see section <A HREF="gettext_6.html#SEC48">6.4 Untranslated Entries</A>). See section <A HREF="gettext_6.html#SEC38">6.1 Invoking the <CODE>msgmerge</CODE> Program</A>, for more information about what -<CODE>msgmerge</CODE> really does. - -</P> -<P> -Whatever route or means taken, the goal is to obtain an updated -<TT>`<VAR>lang</VAR>.po´</TT> file offering translations for all strings. - -</P> -<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> -<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 section <A HREF="gettext_8.html#SEC137">8.3 The Format of GNU MO Files</A>). See section <A HREF="gettext_8.html#SEC120">8.1 Invoking the <CODE>msgfmt</CODE> Program</A>, for more information about all modes of execution -for the <CODE>msgfmt</CODE> program. - -</P> -<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 <TT>`Makefile´</TT> 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 section <A HREF="gettext_9.html#SEC141">9.3 Magic for End Users</A>), the -program should localize itself automatically, whenever it executes. - -</P> -<P> -The remainder of this manual has the purpose of explaining in depth the various -steps outlined above. - -</P> -<P><HR><P> -Go to the first, previous, <A HREF="gettext_2.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_10.html b/doc/gettext_10.html deleted file mode 100644 index cfda479..0000000 --- a/doc/gettext_10.html +++ /dev/null @@ -1,1483 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 10 The Programmer's View</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_9.html">previous</A>, <A HREF="gettext_11.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC142" HREF="gettext_toc.html#TOC142">10 The Programmer's View</A></H1> - -<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. - -</P> - - - -<H2><A NAME="SEC143" HREF="gettext_toc.html#TOC143">10.1 About <CODE>catgets</CODE></A></H2> -<P> -<A NAME="IDX822"></A> - -</P> -<P> -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> -<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...) - -</P> -<P> -But we must not forget one point: after all the trouble with transfering -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). - -</P> - - - -<H3><A NAME="SEC144" HREF="gettext_toc.html#TOC144">10.1.1 The Interface</A></H3> -<P> -<A NAME="IDX823"></A> - -</P> -<P> -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><nl_types.h></CODE> header file. - -</P> -<P> -<A NAME="IDX824"></A> -<CODE>catopen</CODE> is used like in this: - -</P> - -<PRE> -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> -<P> -<A NAME="IDX825"></A> -This handle is of course used in the <CODE>catgets</CODE> function which can -be used like this: - -</P> - -<PRE> -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: - -</P> - -<PRE> -catalog name => set number => message ID => translation -</PRE> - -<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> -<P> -<A NAME="IDX826"></A> -The last of these function functions is used and behaves as expected: - -</P> - -<PRE> -catclose (catd); -</PRE> - -<P> -After this no <CODE>catgets</CODE> call using the descriptor is legal anymore. - -</P> - - -<H3><A NAME="SEC145" HREF="gettext_toc.html#TOC145">10.1.2 Problems with the <CODE>catgets</CODE> Interface?!</A></H3> -<P> -<A NAME="IDX827"></A> - -</P> -<P> -Now that this description seemed to be really easy -- 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. - -</P> - - -<H2><A NAME="SEC146" HREF="gettext_toc.html#TOC146">10.2 About <CODE>gettext</CODE></A></H2> -<P> -<A NAME="IDX828"></A> - -</P> -<P> -The definition of the <CODE>gettext</CODE> interface comes from a Uniforum -proposal and it is followed by at least one major Unix vendor -(Sun) in its last developments. It is not specified in any official -standard, though. - -</P> -<P> -The main points 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 so many task, 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 section <A HREF="gettext_10.html#SEC154">10.3 Comparing the Two Interfaces</A> for a more -detailed comparison of the two methods. - -</P> -<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. - -</P> - - - -<H3><A NAME="SEC147" HREF="gettext_toc.html#TOC147">10.2.1 The Interface</A></H3> -<P> -<A NAME="IDX829"></A> - -</P> -<P> -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> -<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. - -</P> - -<PRE> -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> -<P> -To use a domain set by <CODE>textdomain</CODE> the function - -</P> - -<PRE> -char *gettext (const char *msgid); -</PRE> - -<P> -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 not available the argument itself is -returned. If the argument is <CODE>NULL</CODE> the result is undefined. - -</P> -<P> -One things which should come into mind is that no explicit dependency to -the used domain is given. The current value of the domain for the -<CODE>LC_MESSAGES</CODE> locale 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> -<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. - -</P> - - -<H3><A NAME="SEC148" HREF="gettext_toc.html#TOC148">10.2.2 Solving Ambiguities</A></H3> -<P> -<A NAME="IDX830"></A> -<A NAME="IDX831"></A> -<A NAME="IDX832"></A> - -</P> -<P> -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> -<P> -For this reasons there are two more functions to retrieve strings: - -</P> - -<PRE> -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 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> -<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. - -</P> - -<PRE> -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> -<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. - -</P> - - -<H3><A NAME="SEC149" HREF="gettext_toc.html#TOC149">10.2.3 Locating Message Catalog Files</A></H3> -<P> -<A NAME="IDX833"></A> - -</P> -<P> -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 value and name of the locale and the domain name are -concatenated: - -</P> - -<PRE> -<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> -/usr/local/share/locale -</PRE> - -<P> -<VAR>locale</VAR> is the value of the locale whose name is this -<CODE>LC_<VAR>category</VAR></CODE>. For <CODE>gettext</CODE> and <CODE>dgettext</CODE> this -<CODE>LC_<VAR>category</VAR></CODE> is always <CODE>LC_MESSAGES</CODE>.<A NAME="DOCF3" HREF="gettext_foot.html#FOOT3">(3)</A> -The value of the locale is determined through -<CODE>setlocale (LC_<VAR>category</VAR>, NULL)</CODE>. -<A NAME="DOCF4" HREF="gettext_foot.html#FOOT4">(4)</A> -<CODE>dcgettext</CODE> specifies the locale category by the third argument. - -</P> - - -<H3><A NAME="SEC150" HREF="gettext_toc.html#TOC150">10.2.4 How to specify the output character set <CODE>gettext</CODE> uses</A></H3> -<P> -<A NAME="IDX834"></A> -<A NAME="IDX835"></A> - -</P> -<P> -<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> -<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> -<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 -- -independently of the current output character set. It is therefore -recommended that all <VAR>msgid</VAR>s be US-ASCII strings. - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>bind_textdomain_codeset</B> <I>(const char *<VAR>domainname</VAR>, const char *<VAR>codeset</VAR>)</I> -<DD><A NAME="IDX836"></A> -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> -<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> -<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> -<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. -</DL> - -</P> - - -<H3><A NAME="SEC151" HREF="gettext_toc.html#TOC151">10.2.5 Additional functions for plural forms</A></H3> -<P> -<A NAME="IDX837"></A> - -</P> -<P> -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> -<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: - -</P> - -<PRE> - printf ("%d file%s deleted", n, n == 1 ? "" : "s"); -</PRE> - -<P> -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: - -</P> - -<PRE> - 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><rzm@mat.uni.torun.pl></CODE> reports: - -</P> - -<BLOCKQUOTE> -<P> -In Polish we use e.g. plik (file) this way: - -<PRE> -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); - -</P> - -<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). - -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> -<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> -<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. - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>ngettext</B> <I>(const char *<VAR>msgid1</VAR>, const char *<VAR>msgid2</VAR>, unsigned long int <VAR>n</VAR>)</I> -<DD><A NAME="IDX838"></A> -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> -<P> -An example for the use of this function is: - -</P> - -<PRE> -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>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>dngettext</B> <I>(const char *<VAR>domain</VAR>, const char *<VAR>msgid1</VAR>, const char *<VAR>msgid2</VAR>, unsigned long int <VAR>n</VAR>)</I> -<DD><A NAME="IDX839"></A> -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. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>dcngettext</B> <I>(const char *<VAR>domain</VAR>, const char *<VAR>msgid1</VAR>, const char *<VAR>msgid2</VAR>, unsigned long int <VAR>n</VAR>, int <VAR>category</VAR>)</I> -<DD><A NAME="IDX840"></A> -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. -</DL> - -</P> -<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> -<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> -<P> -<A NAME="IDX841"></A> -<A NAME="IDX842"></A> -<A NAME="IDX843"></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: - -</P> - -<PRE> -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>. 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> -<P> -<A NAME="IDX844"></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 NAME="DOCF5" HREF="gettext_foot.html#FOOT5">(5)</A> - -</P> -<DL COMPACT> - -<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> -Plural-Forms: nplurals=1; plural=0; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Finno-Ugric family -<DD> -Hungarian -<DT>Asian family -<DD> -Japanese, Korean -<DT>Turkic/Altaic family -<DD> -Turkish -</DL> - -<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> -Plural-Forms: nplurals=2; plural=n != 1; -</PRE> - -(Note: this uses the feature of C expressions that boolean expressions -have to value zero or one.) - -Languages with this property include: - -<DL COMPACT> - -<DT>Germanic family -<DD> -Danish, Dutch, English, German, Norwegian, Swedish -<DT>Finno-Ugric family -<DD> -Estonian, Finnish -<DT>Latin/Greek family -<DD> -Greek -<DT>Semitic family -<DD> -Hebrew -<DT>Romanic family -<DD> -Italian, Portuguese, Spanish -<DT>Artificial -<DD> -Esperanto -</DL> - -<DT>Two forms, singular used for zero and one -<DD> -Exceptional case in the language family. The header entry would be: - - -<PRE> -Plural-Forms: nplurals=2; plural=n>1; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Romanic family -<DD> -French, Brazilian Portuguese -</DL> - -<DT>Three forms, special case for zero -<DD> -The header entry would be: - - -<PRE> -Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Baltic family -<DD> -Latvian -</DL> - -<DT>Three forms, special cases for one and two -<DD> -The header entry would be: - - -<PRE> -Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Celtic -<DD> -Gaeilge (Irish) -</DL> - -<DT>Three forms, special case for numbers ending in 1[2-9] -<DD> -The header entry would look like this: - - -<PRE> -Plural-Forms: nplurals=3; \ - plural=n%10==1 && n%100!=11 ? 0 : \ - n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Baltic family -<DD> -Lithuanian -</DL> - -<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> -Plural-Forms: nplurals=3; \ - plural=n%10==1 && n%100!=11 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Slavic family -<DD> -Croatian, Czech, Russian, Slovak, Ukrainian -</DL> - -<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> -Plural-Forms: nplurals=3; \ - plural=n==1 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Slavic family -<DD> -Polish -</DL> - -<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> -Plural-Forms: nplurals=4; \ - plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3; -</PRE> - -Languages with this property include: - -<DL COMPACT> - -<DT>Slavic family -<DD> -Slovenian -</DL> -</DL> - - - -<H3><A NAME="SEC152" HREF="gettext_toc.html#TOC152">10.2.6 How to use <CODE>gettext</CODE> in GUI programs</A></H3> -<P> -<A NAME="IDX845"></A> -<A NAME="IDX846"></A> -<A NAME="IDX847"></A> - -</P> -<P> -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> -<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 these kind of problems with the <CODE>gettext</CODE> functions. - -</P> -<P> -As as example consider the following fictional situation. A GUI program -has a menu bar with the following entries: - -</P> - -<PRE> -+------------+------------+--------------------------------------+ -| 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> -<P> -One solution to this problem is to artificially enlengthen the strings -to make them unambiguous. But what would the program do if no -translation is available? The enlengthened string is not what should be -printed. So we should use a little bit modified version of the functions. - -</P> -<P> -To enlengthen the strings a uniform method should be used. E.g., in the -example above the strings could be chosen as - -</P> - -<PRE> -Menu|File -Menu|Printer -Menu|File|Open -Menu|File|New -Menu|Printer|Select -Menu|Printer|Open -Menu|Printer|Connect -</PRE> - -<P> -Now all the strings are different and if now instead of <CODE>gettext</CODE> -the following little wrapper function is used, everything works just -fine: - -</P> -<P> -<A NAME="IDX848"></A> - -<PRE> - char * - sgettext (const char *msgid) - { - char *msgval = gettext (msgid); - if (msgval == msgid) - msgval = strrchr (msgid, '|') + 1; - return msgval; - } -</PRE> - -<P> -What this little function does is to recognize the case when no -translation is available. This can be done very efficiently by a -pointer comparison since the return value is the input value. If there -is no translation we know that the input string is in the format we used -for the Menu entries and therefore contains a <CODE>|</CODE> character. We -simply search for the last occurrence of this character and return a -pointer to the character following it. That's it! - -</P> -<P> -If one now consistently uses the enlengthened string form and replaces -the <CODE>gettext</CODE> calls with calls to <CODE>sgettext</CODE> (this is normally -limited to very few places in the GUI implementation) then it is -possible to produce a program which can be internationalized. - -</P> -<P> -The other <CODE>gettext</CODE> functions (<CODE>dgettext</CODE>, <CODE>dcgettext</CODE> -and the <CODE>ngettext</CODE> equivalents) can and should have corresponding -functions as well which look almost identical, except for the parameters -and the call to the underlying function. - -</P> -<P> -Now there is of course the question why such functions do not exist in -the GNU gettext package? There are two parts of the answer to this question. - -</P> - -<UL> -<LI> - -They are easy to write and therefore can be provided by the project they -are used in. This is not an answer by itself and must be seen together -with the second part which is: - -<LI> - -There is no way the gettext package can contain a version which can work -everywhere. The problem is the selection of the character to separate -the prefix from the actual string in the enlenghtened string. The -examples above used <CODE>|</CODE> which is a quite good choice because it -resembles a notation frequently used in this context and it also is a -character not often used in message strings. - -But what if the character is used in message strings? Or if the chose -character is not available in the character set on the machine one -compiles (e.g., <CODE>|</CODE> is not required to exist for ISO C; this is -why the <TT>`iso646.h´</TT> file exists in ISO C programming environments). -</UL> - -<P> -There is only one more comment to be said. The wrapper function above -requires that the translations strings are not enlengthened themselves. -This is only logical. There is no need to disambiguate the strings -(since they are never used as keys for a search) and one also saves -quite some memory and disk space by doing this. - -</P> - - -<H3><A NAME="SEC153" HREF="gettext_toc.html#TOC153">10.2.7 Optimization of the *gettext functions</A></H3> -<P> -<A NAME="IDX849"></A> - -</P> -<P> -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: - -</P> - -<PRE> -{ - while (...) - { - puts (gettext ("Hello world")); - } -} -</PRE> - -<P> -When the locale selection does not change between two runs the resulting -string is always the same. One way to use this is: - -</P> - -<PRE> -{ - str = gettext ("Hello world"); - while (...) - { - puts (str); - } -} -</PRE> - -<P> -But this solution is not usable in all situation (e.g. when the locale -selection changes) nor does it lead to legible code. - -</P> -<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. - -</P> - - -<H2><A NAME="SEC154" HREF="gettext_toc.html#TOC154">10.3 Comparing the Two Interfaces</A></H2> -<P> -<A NAME="IDX850"></A> -<A NAME="IDX851"></A> - -</P> - -<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> -<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 - -</P> - -<PRE> -#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> -<P> -When now a production version of the program is needed we simply replace -the definition - -</P> - -<PRE> -#define _(String) (String) -</PRE> - -<P> -by - -</P> -<P> -<A NAME="IDX852"></A> - -<PRE> -#include <libintl.h> -#define _(String) gettext (String) -</PRE> - -<P> -Additionally we run the program <TT>`xgettext´</TT> 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> -<P> -<A NAME="IDX853"></A> -The same procedure can be done for the <CODE>gettext_noop</CODE> invocations -(see section <A HREF="gettext_3.html#SEC19">3.6 Special Cases of Translatable Strings</A>). One usually defines <CODE>gettext_noop</CODE> as a -no-op macro. So you should consider the following code for your project: - -</P> - -<PRE> -#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 <TT>`Makefile´</TT> in -the <TT>`po/´</TT> 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> -<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> -<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: - -</P> - -<PRE> -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> -<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: - -</P> - -<PRE> -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> -<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 section <A HREF="gettext_10.html#SEC148">10.2.2 Solving Ambiguities</A>. - -</P> - - -<H2><A NAME="SEC155" HREF="gettext_toc.html#TOC155">10.4 Using libintl.a in own programs</A></H2> - -<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 <TT>`Makefile´</TT> will put the header -and the library in directories selected using the <CODE>$(prefix)</CODE>. - -</P> - - -<H2><A NAME="SEC156" HREF="gettext_toc.html#TOC156">10.5 Being a <CODE>gettext</CODE> grok</A></H2> - -<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: - -</P> - -<UL> -<LI>Changing the language at runtime - -<A NAME="IDX854"></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. - -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> -<LI><CODE>LANGUAGE</CODE> - -<A NAME="IDX855"></A> - -<A NAME="IDX856"></A> -<LI><CODE>LC_ALL</CODE> - -<A NAME="IDX857"></A> -<A NAME="IDX858"></A> -<A NAME="IDX859"></A> -<A NAME="IDX860"></A> -<A NAME="IDX861"></A> -<A NAME="IDX862"></A> -<LI><CODE>LC_xxx</CODE>, according to selected locale - -<A NAME="IDX863"></A> -<LI><CODE>LANG</CODE> - -</OL> - -Afterwards the path is constructed using the found value and the -translation file is loaded if available. - -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. - -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 section <A HREF="gettext_10.html#SEC153">10.2.7 Optimization of the *gettext functions</A>). A -solution for this is very easy. Include the following code in the -language switching function. - - -<PRE> - /* Change language. */ - setenv ("LANGUAGE", "fr", 1); - - /* Make change known. */ - { - extern int _nl_msg_cat_cntr; - ++_nl_msg_cat_cntr; - } -</PRE> - -<A NAME="IDX864"></A> -The variable <CODE>_nl_msg_cat_cntr</CODE> is defined in <TT>`loadmsgcat.c´</TT>. -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> - - - -<H2><A NAME="SEC157" HREF="gettext_toc.html#TOC157">10.6 Temporary Notes for the Programmers Chapter</A></H2> - - - -<H3><A NAME="SEC158" HREF="gettext_toc.html#TOC158">10.6.1 Temporary - Two Possible Implementations</A></H3> - -<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> -<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, "...as an example of -a messaging system that has been implemented..." - -</P> -<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. - -</P> - - -<H3><A NAME="SEC159" HREF="gettext_toc.html#TOC159">10.6.2 Temporary - About <CODE>catgets</CODE></A></H3> - -<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> -<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> -<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> -<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> -<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. - -</P> - - -<H3><A NAME="SEC160" HREF="gettext_toc.html#TOC160">10.6.3 Temporary - Why a single implementation</A></H3> - -<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> -<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> -<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> -<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. - -</P> - - -<H3><A NAME="SEC161" HREF="gettext_toc.html#TOC161">10.6.4 Temporary - Notes</A></H3> - -<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> -<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>. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_9.html">previous</A>, <A HREF="gettext_11.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_11.html b/doc/gettext_11.html deleted file mode 100644 index 0c1b022..0000000 --- a/doc/gettext_11.html +++ /dev/null @@ -1,517 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 11 The Translator's View</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_10.html">previous</A>, <A HREF="gettext_12.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC162" HREF="gettext_toc.html#TOC162">11 The Translator's View</A></H1> - - - -<H2><A NAME="SEC163" HREF="gettext_toc.html#TOC163">11.1 Introduction 0</A></H2> - -<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> -<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> -<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> -<P> -Each team has its own mailing list, courtesy of Linux -International. You may reach your translating team at the address -<TT>`<VAR>ll</VAR>@li.org´</TT>, replacing <VAR>ll</VAR> by the two-letter ISO 639 -code for your language. Language codes are <EM>not</EM> the same as -country codes given in ISO 3166. The following translating teams -exist: - -</P> - -<BLOCKQUOTE> -<P> -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> -For example, you may reach the Chinese translating team by writing to -<TT>`zh@li.org´</TT>. 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 <TT>`sv-request@li.org´</TT>, -having this message body: - -</P> - -<PRE> -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 <TT>`translation@iro.umontreal.ca´</TT>; -you will then reach the coordinator for all translator teams. - -</P> -<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 -<TT>`translation@iro.umontreal.ca´</TT> indicating what language(s) -you can work on. - -</P> - - -<H2><A NAME="SEC164" HREF="gettext_toc.html#TOC164">11.2 Introduction 1</A></H2> - -<P> -This is now official, GNU is going international! Here is the -announcement submitted for the January 1995 GNU Bulletin: - -</P> - -<BLOCKQUOTE> -<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'd like to -volunteer to work at translating messages, please send mail to -<SAMP>`translation@iro.umontreal.ca´</SAMP> 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> -<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> -<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> -<P> -For suggestion clarifications, additions or corrections to this -document, please e-mail to <TT>`translation@iro.umontreal.ca´</TT>. - -</P> - - -<H2><A NAME="SEC165" HREF="gettext_toc.html#TOC165">11.3 Discussions</A></H2> - -<P> -Facing this internationalization effort, a few users expressed their -concerns. Some of these doubts are presented and discussed, here. - -</P> - -<UL> -<LI>Smaller groups - -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. - -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 - -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. - -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 - -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 "rather pushy, obnoxious -and sometimes even hilarious." As a French speaking man, I have -the experience of those instruction manuals for goods, so poorly -translated in French in Korea or Taiwan... - -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 - -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 "normally not". - -The GNU <CODE>gettext</CODE> library, i.e. the contents of <CODE>libintl</CODE>, -is covered by the GNU Library General Public License. The rest of -the GNU <CODE>gettext</CODE> package is covered by the GNU General Public -License. - -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> - - - -<H2><A NAME="SEC166" HREF="gettext_toc.html#TOC166">11.4 Organization</A></H2> - -<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> -<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> -<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> -<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 -<TT>`translation@iro.umontreal.ca´</TT> has been setup for receiving -offers from volunteers and general e-mail on these topics. This address -reaches the Translation Project coordinator. - -</P> - - - -<H3><A NAME="SEC167" HREF="gettext_toc.html#TOC167">11.4.1 Central Coordination</A></H3> - -<P> -I also think GNU will need sooner than it thinks, that someone setup -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 <TT>`gnu.announce´</TT> a list of this national committee's -can be published. - -</P> -<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. - -</P> - - -<H3><A NAME="SEC168" HREF="gettext_toc.html#TOC168">11.4.2 National Teams</A></H3> - -<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> -<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> -<P> -We need to choose someone who is good at writing clear and concise -prose in the language in question. That is hard--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> -<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> -<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> -<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> -<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. - -</P> - - - -<H4><A NAME="SEC169" HREF="gettext_toc.html#TOC169">11.4.2.1 Sub-Cultures</A></H4> - -<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> -<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! - -</P> - - -<H4><A NAME="SEC170" HREF="gettext_toc.html#TOC170">11.4.2.2 Organizational Ideas</A></H4> - -<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: - -</P> - -<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 <EM>core group</EM> 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> - - - -<H3><A NAME="SEC171" HREF="gettext_toc.html#TOC171">11.4.3 Mailing Lists</A></H3> - -<P> -If we get any inquiries about GNU <CODE>gettext</CODE>, send them on to: - -</P> - -<PRE> -<TT>`translation@iro.umontreal.ca´</TT> -</PRE> - -<P> -The <TT>`*-pretest´</TT> 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> -<P> -François, we have a mechanism in place here at -<TT>`gnu.ai.mit.edu´</TT> 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> -<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... - -</P> -<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> -<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. - -</P> - - -<H2><A NAME="SEC172" HREF="gettext_toc.html#TOC172">11.5 Information Flow</A></H2> - -<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> -<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> -<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--same debates over again. - -</P> -<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> -<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. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_10.html">previous</A>, <A HREF="gettext_12.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_12.html b/doc/gettext_12.html deleted file mode 100644 index 7faffe4..0000000 --- a/doc/gettext_12.html +++ /dev/null @@ -1,1547 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 12 The Maintainer's View</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_11.html">previous</A>, <A HREF="gettext_13.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC173" HREF="gettext_toc.html#TOC173">12 The Maintainer's View</A></H1> -<P> -<A NAME="IDX865"></A> - -</P> -<P> -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 section <A HREF="gettext_9.html#SEC138">9 The User's View</A>) will work -for installers and end users. - -</P> -<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 <TT>`configure.in´</TT> file and uses GNU Autoconf. - -</P> -<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> -<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. - -</P> - - - -<H2><A NAME="SEC174" HREF="gettext_toc.html#TOC174">12.1 Flat or Non-Flat Directory Structures</A></H2> - -<P> -Some free software packages are distributed as <CODE>tar</CODE> files which unpack -in a single directory, these are said to be <EM>flat</EM> distributions. -Other free software packages have a one level hierarchy of subdirectories, using -for example a subdirectory named <TT>`doc/´</TT> for the Texinfo manual and -man pages, another called <TT>`lib/´</TT> for holding functions meant to -replace or complement C libraries, and a subdirectory <TT>`src/´</TT> for -holding the proper sources for the package. These other distributions -are said to be <EM>non-flat</EM>. - -</P> -<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> -<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. - -</P> - - -<H2><A NAME="SEC175" HREF="gettext_toc.html#TOC175">12.2 Prerequisite Works</A></H2> -<P> -<A NAME="IDX866"></A> -<A NAME="IDX867"></A> -<A NAME="IDX868"></A> - -</P> -<P> -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. - -</P> - -<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>. - -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 <TT>`Makefile´</TT>s in the <TT>`intl/´</TT> and <TT>`po/´</TT> -therefore know about all the goals necessary for using <CODE>automake</CODE> -and <TT>`libintl´</TT> in one project. - -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 <TT>`configure.in´</TT> or -<TT>`configure.ac´</TT> 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 section <A HREF="gettext_3.html#SEC13">3 Preparing Program Sources</A>. - -<LI> - -Your <TT>`po/´</TT> directory should receive all PO files submitted to you -by the translator teams, each having <TT>`<VAR>ll</VAR>.po´</TT> 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 <TT>`translation@iro.umontreal.ca´</TT> 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 <TT>`po/´</TT> for distribution. - -</P> -<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 <TT>`ABOUT-NLS´</TT> file. - -</P> -<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. - -</P> - - -<H2><A NAME="SEC176" HREF="gettext_toc.html#TOC176">12.3 Invoking the <CODE>gettextize</CODE> Program</A></H2> - -<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: - -</P> - -<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: - -</P> - -<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 - -section <A HREF="gettext_12.html#SEC177">12.4 Files You Must Create or Alter</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> -<P> -<A NAME="IDX869"></A> -<A NAME="IDX870"></A> - -<PRE> -gettextize [ <VAR>option</VAR>... ] [ <VAR>directory</VAR> ] -</PRE> - -<P> -and accepts the following options: - -</P> -<DL COMPACT> - -<DT><SAMP>`-c´</SAMP> -<DD> -<DT><SAMP>`--copy´</SAMP> -<DD> -<A NAME="IDX871"></A> -<A NAME="IDX872"></A> -Copy the needed files instead of making symbolic links. Using links -would allow the package to always use the latest <CODE>gettext</CODE> code -available on the system, but it might disturb some mechanism the -maintainer is used to apply to the sources. Because running -<CODE>gettextize</CODE> is easy there shouldn't be problems with using copies. - -<DT><SAMP>`-f´</SAMP> -<DD> -<DT><SAMP>`--force´</SAMP> -<DD> -<A NAME="IDX873"></A> -<A NAME="IDX874"></A> -Force replacement of files which already exist. - -<DT><SAMP>`--intl´</SAMP> -<DD> -<A NAME="IDX875"></A> -Install the libintl sources in a subdirectory named <TT>`intl/´</TT>. -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 <TT>`configure.in´</TT> should read: -<SAMP>`AM_GNU_GETTEXT([external])´</SAMP>, and internationalization will not -be enabled on systems lacking GNU gettext. - -<DT><SAMP>`--no-changelog´</SAMP> -<DD> -<A NAME="IDX876"></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 <SAMP>`ChangeLog´</SAMP> in each affected directory. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--dry-run´</SAMP> -<DD> -<A NAME="IDX877"></A> -<A NAME="IDX878"></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. - -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX879"></A> -Display this help and exit. - -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX880"></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> -<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. - -</P> - -<OL> -<LI> - -The <TT>`ABOUT-NLS´</TT> 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 -<TT>`ABOUT-NLS´</TT> file than the one provided through <CODE>gettextize</CODE>, -if you have one handy. You may also fetch a more recent copy of file -<TT>`ABOUT-NLS´</TT> from Translation Project sites, and from most GNU -archive sites. - -<LI> - -A <TT>`po/´</TT> directory is created for eventually holding -all translation files, but initially only containing the file -<TT>`po/Makefile.in.in´</TT> from the GNU <CODE>gettext</CODE> distribution -(beware the double <SAMP>`.in´</SAMP> in the file name) and a few auxiliary -files. If the <TT>`po/´</TT> directory already exists, it will be preserved -along with the files it contains, and only <TT>`Makefile.in.in´</TT> and -the auxiliary files will be overwritten. - -<LI> - -Only if <SAMP>`--intl´</SAMP> has been specified: -A <TT>`intl/´</TT> directory is created and filled with most of the files -originally in the <TT>`intl/´</TT> directory of the GNU <CODE>gettext</CODE> -distribution. Also, if option <CODE>--force</CODE> (<CODE>-f</CODE>) is given, -the <TT>`intl/´</TT> directory is emptied first. - -<LI> - -The files <TT>`config.rpath´</TT> and <TT>`mkinstalldirs´</TT> are 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 <TT>`m4/´</TT>. -</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 <SAMP>`-h´</SAMP> 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 <SAMP>`-h´</SAMP> option with <CODE>tar</CODE> within your <CODE>dist</CODE> -goal of your main <TT>`Makefile.in´</TT>. - -</P> -<P> -Furthermore, <CODE>gettextize</CODE> will update all <TT>`Makefile.am´</TT> files -in each affected directory, as well as the top level <TT>`configure.in´</TT> -or <TT>`configure.ac´</TT> file. - -</P> -<P> -It is interesting to understand that most new files for supporting -GNU <CODE>gettext</CODE> facilities in one package go in <TT>`intl/´</TT>, -<TT>`po/´</TT> and <TT>`m4/´</TT> subdirectories. One distinction between -<TT>`intl/´</TT> and the two other directories is that <TT>`intl/´</TT> 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> -<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 <TT>`intl/´</TT> -directory, which is added or replaced or removed as a whole. - -</P> -<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 section <A HREF="gettext_12.html#SEC177">12.4 Files You Must Create or Alter</A> after invoking <CODE>gettextize</CODE>. - -</P> -<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 section <A HREF="gettext_12.html#SEC197">12.6.3 Invoking the <CODE>autopoint</CODE> Program</A>. - -</P> - - -<H2><A NAME="SEC177" HREF="gettext_toc.html#TOC177">12.4 Files You Must Create or Alter</A></H2> -<P> -<A NAME="IDX881"></A> - -</P> -<P> -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> -<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.11.6-pre2 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. - -</P> - - - -<H3><A NAME="SEC178" HREF="gettext_toc.html#TOC178">12.4.1 <TT>`POTFILES.in´</TT> in <TT>`po/´</TT></A></H3> -<P> -<A NAME="IDX882"></A> - -</P> -<P> -The <TT>`po/´</TT> directory should receive a file named -<TT>`POTFILES.in´</TT>. This file tells which files, among all program -sources, have marked strings needing translation. Here is an example -of such a file: - -</P> - -<PRE> -# 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> -Hash-marked comments and white lines are ignored. All other lines -list those source files containing strings marked for translation -(see section <A HREF="gettext_3.html#SEC16">3.3 How Marks Appear in Sources</A>), in a notation relative to the top level -of your whole distribution, rather than the location of the -<TT>`POTFILES.in´</TT> file itself. - -</P> -<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 <TT>`po/POTFILES.in´</TT> the real source file -(ending in <TT>`.l´</TT> in the case of <CODE>flex</CODE>, or in <TT>`.y´</TT> in the -case of <CODE>bison</CODE>), not the generated C file. - -</P> - - -<H3><A NAME="SEC179" HREF="gettext_toc.html#TOC179">12.4.2 <TT>`LINGUAS´</TT> in <TT>`po/´</TT></A></H3> -<P> -<A NAME="IDX883"></A> - -</P> -<P> -The <TT>`po/´</TT> directory should also receive a file named -<TT>`LINGUAS´</TT>. 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: - -</P> - -<PRE> -# Set of available languages. -de fr -</PRE> - -<P> -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 <TT>`LINGUAS´</TT> file, -but rather by using the <CODE>LINGUAS</CODE> environment variable -(see section <A HREF="gettext_9.html#SEC140">9.2 Magic for Installers</A>). - -</P> - - -<H3><A NAME="SEC180" HREF="gettext_toc.html#TOC180">12.4.3 <TT>`Makefile´</TT> pieces in <TT>`po/´</TT></A></H3> -<P> -<A NAME="IDX884"></A> - -</P> -<P> -The <TT>`po/´</TT> directory also has a file named <TT>`Makevars´</TT>. -It can be left unmodified if your package has a single message domain -and, accordingly, a single <TT>`po/´</TT> directory. Only packages which -have multiple <TT>`po/´</TT> directories at different locations need to -adjust the three variables defined in <TT>`Makevars´</TT>. - -</P> -<P> -<TT>`po/Makevars´</TT> gets inserted into the <TT>`po/Makefile´</TT> when the -latter is created. At the same time, all files called <TT>`Rules-*´</TT> in the -<TT>`po/´</TT> directory get appended to the <TT>`po/Makefile´</TT>. They present -an opportunity to add rules for special PO files to the Makefile, without -needing to mess with <TT>`po/Makefile.in.in´</TT>. - -</P> -<P> -<A NAME="IDX885"></A> -<A NAME="IDX886"></A> -GNU gettext comes with a <TT>`Rules-quot´</TT> file, containing rules for -building catalogs <TT>`en@quot.po´</TT> and <TT>`en@boldquot.po´</TT>. The -effect of <TT>`en@quot.po´</TT> is that people who set their <CODE>LANGUAGE</CODE> -environment variable to <SAMP>`en@quot´</SAMP> 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 <TT>`po/LINGUAS´</TT> -file. The effect of <TT>`en@boldquot.po´</TT> is that people who set -<CODE>LANGUAGE</CODE> to <SAMP>`en@boldquot´</SAMP> 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 -<TT>`po/LINGUAS´</TT> file. - -</P> - - -<H3><A NAME="SEC181" HREF="gettext_toc.html#TOC181">12.4.4 <TT>`configure.in´</TT> at top level</A></H3> - -<P> -<TT>`configure.in´</TT> or <TT>`configure.ac´</TT> - this is the source from which -<CODE>autoconf</CODE> generates the <TT>`configure´</TT> script. - -</P> - -<OL> -<LI>Declare the package and version. - -<A NAME="IDX887"></A> - -This is done by a set of lines like these: - - -<PRE> -PACKAGE=gettext -VERSION=0.11.6-pre2 -AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") -AC_DEFINE_UNQUOTED(VERSION, "$VERSION") -AC_SUBST(PACKAGE) -AC_SUBST(VERSION) -</PRE> - -or, if you are using GNU <CODE>automake</CODE>, by a line like this: - - -<PRE> -AM_INIT_AUTOMAKE(gettext, 0.11.6-pre2) -</PRE> - -Of course, you replace <SAMP>`gettext´</SAMP> with the name of your package, -and <SAMP>`0.11.6-pre2´</SAMP> by its version numbers, exactly as they -should appear in the packaged <CODE>tar</CODE> file name of your distribution -(<TT>`gettext-0.11.6-pre2.tar.gz´</TT>, here). - -<LI>Check for internationalization support. - -Here is the main <CODE>m4</CODE> macro for triggering internationalization -support. Just add this line to <TT>`configure.in´</TT>: - - -<PRE> -AM_GNU_GETTEXT -</PRE> - -This call is purposely simple, even if it generates a lot of configure -time checking and actions. - -If you have suppressed the <TT>`intl/´</TT> subdirectory by calling -<CODE>gettextize</CODE> without <SAMP>`--intl´</SAMP> option, this call should read - - -<PRE> -AM_GNU_GETTEXT([external]) -</PRE> - -<LI>Have output files created. - -The <CODE>AC_OUTPUT</CODE> directive, at the end of your <TT>`configure.in´</TT> -file, needs to be modified in two ways: - - -<PRE> -AC_OUTPUT([<VAR>existing configuration files</VAR> intl/Makefile po/Makefile.in], -[<VAR>existing additional actions</VAR>]) -</PRE> - -The modification to the first argument to <CODE>AC_OUTPUT</CODE> asks -for substitution in the <TT>`intl/´</TT> and <TT>`po/´</TT> directories. -Note the <SAMP>`.in´</SAMP> suffix used for <TT>`po/´</TT> only. This is because -the distributed file is really <TT>`po/Makefile.in.in´</TT>. - -If you have suppressed the <TT>`intl/´</TT> subdirectory by calling -<CODE>gettextize</CODE> without <SAMP>`--intl´</SAMP> option, then you don't need to -add <CODE>intl/Makefile</CODE> to the <CODE>AC_OUTPUT</CODE> line. - -</OL> - - - -<H3><A NAME="SEC182" HREF="gettext_toc.html#TOC182">12.4.5 <TT>`config.guess´</TT>, <TT>`config.sub´</TT> at top level</A></H3> - -<P> -If you haven't suppressed the <TT>`intl/´</TT> subdirectory, -you need to add the GNU <TT>`config.guess´</TT> and <TT>`config.sub´</TT> files -to your distribution. They are needed because the <TT>`intl/´</TT> directory -has platform dependent support for determining the locale's character -encoding and therefore needs to identify the platform. - -</P> -<P> -You can obtain the newest version of <TT>`config.guess´</TT> and -<TT>`config.sub´</TT> from <TT>`ftp://ftp.gnu.org/pub/gnu/config/´</TT>. -Less recent versions are also contained in the GNU <CODE>automake</CODE> and -GNU <CODE>libtool</CODE> packages. - -</P> -<P> -Normally, <TT>`config.guess´</TT> and <TT>`config.sub´</TT> 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 -<TT>`install-sh´</TT>, <TT>`ltconfig´</TT>, <TT>`ltmain.sh´</TT>, -<TT>`mkinstalldirs´</TT> or <TT>`missing´</TT>. All you need to do, other than -moving the files, is to add the following line to your -<TT>`configure.in´</TT>. - -</P> - -<PRE> -AC_CONFIG_AUX_DIR([<VAR>subdir</VAR>]) -</PRE> - - - -<H3><A NAME="SEC183" HREF="gettext_toc.html#TOC183">12.4.6 <TT>`mkinstalldirs´</TT> at top level</A></H3> -<P> -<A NAME="IDX888"></A> - -</P> -<P> -If <CODE>gettextize</CODE> has not already done it, you need to add the GNU -<TT>`mkinstalldirs´</TT> script to your distribution. It is needed because -<SAMP>`mkdir -p´</SAMP> is not portable enough. You find this script in the -GNU <CODE>automake</CODE> distribution. - -</P> -<P> -Normally, <TT>`mkinstalldirs´</TT> is put at the top level of a distribution. -But it is also possible to put it in a subdirectory, altogether with other -configuration support files like <TT>`install-sh´</TT>, <TT>`ltconfig´</TT>, -<TT>`ltmain.sh´</TT> or <TT>`missing´</TT>. All you need to do, other than -moving the files, is to add the following line to your <TT>`configure.in´</TT>. - -</P> - -<PRE> -AC_CONFIG_AUX_DIR([<VAR>subdir</VAR>]) -</PRE> - - - -<H3><A NAME="SEC184" HREF="gettext_toc.html#TOC184">12.4.7 <TT>`aclocal.m4´</TT> at top level</A></H3> -<P> -<A NAME="IDX889"></A> - -</P> -<P> -If you do not have an <TT>`aclocal.m4´</TT> file in your distribution, -the simplest is to concatenate the files <TT>`codeset.m4´</TT>, -<TT>`gettext.m4´</TT>, <TT>`glibc21.m4´</TT>, <TT>`iconv.m4´</TT>, <TT>`intdiv0.m4´</TT>, -<TT>`inttypes.m4´</TT>, <TT>`inttypes_h.m4´</TT>, <TT>`inttypes-pri.m4´</TT>, -<TT>`isc-posix.m4´</TT>, <TT>`lcmessage.m4´</TT>, <TT>`lib-ld.m4´</TT>, -<TT>`lib-link.m4´</TT>, <TT>`lib-prefix.m4´</TT>, <TT>`progtest.m4´</TT>, -<TT>`stdint_h.m4´</TT>, <TT>`uintmax_t.m4´</TT>, <TT>`ulonglong.m4´</TT> -from GNU <CODE>gettext</CODE>'s -<TT>`m4/´</TT> directory into a single file. If you have suppressed the -<TT>`intl/´</TT> directory, only <TT>`gettext.m4´</TT>, <TT>`iconv.m4´</TT>, -<TT>`lib-ld.m4´</TT>, <TT>`lib-link.m4´</TT>, <TT>`lib-prefix.m4´</TT>, -<TT>`progtest.m4´</TT> need to be concatenated. - -</P> -<P> -If you already have an <TT>`aclocal.m4´</TT> file, then you will have -to merge the said macro files into your <TT>`aclocal.m4´</TT>. 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> -<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 <TT>`m4/´</TT> and add the line - -</P> - -<PRE> -ACLOCAL_AMFLAGS = -I m4 -</PRE> - -<P> -to your top level <TT>`Makefile.am´</TT>. - -</P> -<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>. - -</P> - - -<H3><A NAME="SEC185" HREF="gettext_toc.html#TOC185">12.4.8 <TT>`acconfig.h´</TT> at top level</A></H3> -<P> -<A NAME="IDX890"></A> - -</P> -<P> -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 -<TT>`acconfig.h´</TT> file. This is not needed any more; you can remove -them from your <TT>`acconfig.h´</TT> file unless your package uses them -independently from the <TT>`intl/´</TT> directory. - -</P> - - -<H3><A NAME="SEC186" HREF="gettext_toc.html#TOC186">12.4.9 <TT>`config.h.in´</TT> at top level</A></H3> -<P> -<A NAME="IDX891"></A> - -</P> -<P> -The include file template that holds the C macros to be defined by -<CODE>configure</CODE> is usually called <TT>`config.h.in´</TT> and may be -maintained either manually or automatically. - -</P> -<P> -If it is maintained automatically, by use of the <SAMP>`autoheader´</SAMP> -program, you need to do nothing about it. This is the case in particular -if you are using GNU <CODE>automake</CODE>. - -</P> -<P> -If it is maintained manually, and if <CODE>gettextize</CODE> has created an -<TT>`intl/´</TT> directory, you should switch to using <SAMP>`autoheader´</SAMP>. -The list of C macros to be added for the sake of the <TT>`intl/´</TT> -directory is just too long to be maintained manually; it also changes -between different versions of GNU <CODE>gettext</CODE>. - -</P> -<P> -If it is maintained manually, and if on the other hand you have -suppressed the <TT>`intl/´</TT> directory by calling <CODE>gettextize</CODE> -without <SAMP>`--intl´</SAMP> option, then you can get away by adding the -following lines to <TT>`config.h.in´</TT>: - -</P> - -<PRE> -/* Define to 1 if translation of program messages to the user's - native language is requested. */ -#undef ENABLE_NLS -</PRE> - - - -<H3><A NAME="SEC187" HREF="gettext_toc.html#TOC187">12.4.10 <TT>`Makefile.in´</TT> at top level</A></H3> - -<P> -Here are a few modifications you need to make to your main, top-level -<TT>`Makefile.in´</TT> file. - -</P> - -<OL> -<LI> - -Add the following lines near the beginning of your <TT>`Makefile.in´</TT>, -so the <SAMP>`dist:´</SAMP> goal will work properly (as explained further down): - - -<PRE> -PACKAGE = @PACKAGE@ -VERSION = @VERSION@ -</PRE> - -<LI> - -Add file <TT>`ABOUT-NLS´</TT> to the <CODE>DISTFILES</CODE> definition, so the file gets -distributed. - -<LI> - -Wherever you process subdirectories in your <TT>`Makefile.in´</TT>, be sure -you also process the subdirectories <SAMP>`intl´</SAMP> and <SAMP>`po´</SAMP>. Special -rules in the <TT>`Makefiles´</TT> take care for the case where no -internationalization is wanted. - -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 <SAMP>`installdirs´</SAMP>, -<SAMP>`install´</SAMP>, <SAMP>`uninstall´</SAMP>, <SAMP>`clean´</SAMP>, <SAMP>`distclean´</SAMP>. - -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 <SAMP>`dist:´</SAMP> goal. - - -<PRE> -SUBDIRS = doc intl lib src po -</PRE> - -Note that you must arrange for <SAMP>`make´</SAMP> 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 <SAMP>`dist:´</SAMP> goal, as both -<TT>`intl/Makefile´</TT> and <TT>`po/Makefile´</TT> will later assume that the -proper directory has been set up from the main <TT>`Makefile´</TT>. Here is -an example at what the <SAMP>`dist:´</SAMP> goal might look like: - - -<PRE> -distdir = $(PACKAGE)-$(VERSION) -dist: Makefile - rm -fr $(distdir) - mkdir $(distdir) - chmod 777 $(distdir) - for file in $(DISTFILES); do \ - ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ - done - for subdir in $(SUBDIRS); do \ - mkdir $(distdir)/$$subdir || exit 1; \ - chmod 777 $(distdir)/$$subdir; \ - (cd $$subdir && $(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>, <TT>`Makefile.in´</TT> is -automatically generated from <TT>`Makefile.am´</TT>, and all needed changes -to <TT>`Makefile.am´</TT> are already made by running <SAMP>`gettextize´</SAMP>. - -</P> - - -<H3><A NAME="SEC188" HREF="gettext_toc.html#TOC188">12.4.11 <TT>`Makefile.in´</TT> in <TT>`src/´</TT></A></H3> - -<P> -Some of the modifications made in the main <TT>`Makefile.in´</TT> will -also be needed in the <TT>`Makefile.in´</TT> from your package sources, -which we assume here to be in the <TT>`src/´</TT> subdirectory. Here are -all the modifications needed in <TT>`src/Makefile.in´</TT>: - -</P> - -<OL> -<LI> - -In view of the <SAMP>`dist:´</SAMP> goal, you should have these lines near the -beginning of <TT>`src/Makefile.in´</TT>: - - -<PRE> -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> -top_srcdir = @top_srcdir@ -</PRE> - -<LI> - -You might also want to define <CODE>subdir</CODE> as <SAMP>`src´</SAMP>, later -allowing for almost uniform <SAMP>`dist:´</SAMP> goals in all your -<TT>`Makefile.in´</TT>. At list, the <SAMP>`dist:´</SAMP> goal below assume that -you used: - - -<PRE> -subdir = src -</PRE> - -<LI> - -The <CODE>main</CODE> function of your program will normally call -<CODE>bindtextdomain</CODE> (see see section <A HREF="gettext_3.html#SEC14">3.1 Triggering <CODE>gettext</CODE> Operations</A>), like this: - - -<PRE> -bindtextdomain (<VAR>PACKAGE</VAR>, LOCALEDIR); -textdomain (<VAR>PACKAGE</VAR>); -</PRE> - -To make LOCALEDIR known to the program, add the following lines to -Makefile.in: - - -<PRE> -datadir = @datadir@ -localedir = $(datadir)/locale -DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ -</PRE> - -Note that <CODE>@datadir@</CODE> defaults to <SAMP>`$(prefix)/share´</SAMP>, thus -<CODE>$(localedir)</CODE> defaults to <SAMP>`$(prefix)/share/locale´</SAMP>. - -<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> -LIBS = @LIBINTL@ @LIBS@ -</PRE> - -In most packages internationalized with GNU <CODE>gettext</CODE>, one will -find a directory <TT>`lib/´</TT> 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 <TT>`lib/´</TT> also give messages to the user which of course should be -translated, too. Taking care of this, the support library (say -<TT>`libsupport.a´</TT>) should be placed before <CODE>@LIBINTL@</CODE> and -<CODE>@LIBS@</CODE> in the above example. So one has to write this: - - -<PRE> -LIBS = ../lib/libsupport.a @LIBINTL@ @LIBS@ -</PRE> - -<LI> - -You should also ensure that directory <TT>`intl/´</TT> will be searched for -C preprocessor include files in all circumstances. So, you have to -manage so both <SAMP>`-I../intl´</SAMP> and <SAMP>`-I$(top_srcdir)/intl´</SAMP> will -be given to the C compiler. - -<LI> - -Your <SAMP>`dist:´</SAMP> goal has to conform with others. Here is a -reasonable definition for it: - - -<PRE> -distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) -dist: Makefile $(DISTFILES) - for file in $(DISTFILES); do \ - ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ - done -</PRE> - -</OL> - - - -<H3><A NAME="SEC189" HREF="gettext_toc.html#TOC189">12.4.12 <TT>`gettext.h´</TT> in <TT>`lib/´</TT></A></H3> -<P> -<A NAME="IDX892"></A> -<A NAME="IDX893"></A> -<A NAME="IDX894"></A> - -</P> -<P> -Internationalization of packages, as provided by GNU <CODE>gettext</CODE>, is -optional. It can be turned off in two situations: - -</P> - -<UL> -<LI> - -When the installer has specified <SAMP>`./configure --disable-nls´</SAMP>. 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 preferrable 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 <TT>`config.h´</TT>). In the two negative -situations, however, this macro will not be defined, thus it will evaluate -to 0 in C preprocessor expressions. - -</P> -<P> -<A NAME="IDX895"></A> -<TT>`gettext.h´</TT> is a convenience header file for conditional use of -<TT>`<libintl.h>´</TT>, depending on the <CODE>ENABLE_NLS</CODE> macro. If -<CODE>ENABLE_NLS</CODE> is set, it includes <TT>`<libintl.h>´</TT>; otherwise it -defines no-op substitutes for the libintl.h functions. We recommend -the use of <CODE>"gettext.h"</CODE> over direct use of <TT>`<libintl.h>´</TT>, -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 - -</P> - -<PRE> -#include "gettext.h" -</PRE> - -<P> -instead of - -</P> - -<PRE> -#include <libintl.h> -</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 -<TT>`lib/´</TT> containing helper functions; <TT>`gettext.h´</TT> fits there. -In other packages, it can go into the <TT>`src´</TT> directory. - -</P> -<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. - -</P> - - -<H2><A NAME="SEC190" HREF="gettext_toc.html#TOC190">12.5 Autoconf macros for use in <TT>`configure.in´</TT></A></H2> -<P> -<A NAME="IDX896"></A> - -</P> -<P> -GNU <CODE>gettext</CODE> installs macros for use in a package's -<TT>`configure.in´</TT> or <TT>`configure.ac´</TT>. -See section `Introduction' in <CITE>The Autoconf Manual</CITE>. -The primary macro is, of course, <CODE>AM_GNU_GETTEXT</CODE>. - -</P> - - - -<H3><A NAME="SEC191" HREF="gettext_toc.html#TOC191">12.5.1 AM_GNU_GETTEXT in <TT>`gettext.m4´</TT></A></H3> - -<P> -<A NAME="IDX897"></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 -<TT>`intl/´</TT> directory. - -</P> -<P> -<CODE>AM_GNU_GETTEXT</CODE> accepts up to three optional arguments. The general -syntax is - -</P> - -<PRE> -AM_GNU_GETTEXT([<VAR>intlsymbol</VAR>], [<VAR>needsymbol</VAR>], [<VAR>intldir</VAR>]) -</PRE> - -<P> -<VAR>intlsymbol</VAR> can be one of <SAMP>`external´</SAMP>, <SAMP>`no-libtool´</SAMP>, -<SAMP>`use-libtool´</SAMP>. The default (if it is not specified or empty) is -<SAMP>`no-libtool´</SAMP>. <VAR>intlsymbol</VAR> should be <SAMP>`external´</SAMP> for packages -with no <TT>`intl/´</TT> directory, and <SAMP>`no-libtool´</SAMP> or <SAMP>`use-libtool´</SAMP> -for packages with an <TT>`intl/´</TT> directory. If <VAR>intlsymbol</VAR> is -<SAMP>`use-libtool´</SAMP>, then a libtool library -<CODE>$(top_builddir)/intl/libintl.la</CODE> will be created (shared and/or static, -depending on <CODE>--{enable,disable}-{shared,static}</CODE> and on the -presence of <CODE>AM_DISABLE_SHARED</CODE>). If <VAR>intlsymbol</VAR> is -<SAMP>`no-libtool´</SAMP>, a static library -<CODE>$(top_builddir)/intl/libintl.a</CODE> will be created. - -</P> -<P> -If <VAR>needsymbol</VAR> is specified and is <SAMP>`need-ngettext´</SAMP>, 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 -<SAMP>`need-formatstring-macros´</SAMP>, then GNU gettext implementations that don't -support the ISO C 99 <TT>`<inttypes.h>´</TT> formatstring macros will be ignored. -Only one <VAR>needsymbol</VAR> can be specified. To specify more than one -requirement, just specify the strongest one among them. The hierarchy among -the various alternatives is as follows: <SAMP>`need-formatstring-macros´</SAMP> -implies <SAMP>`need-ngettext´</SAMP>. - -</P> -<P> -<VAR>intldir</VAR> is used to find the intl libraries. If empty, the value -<SAMP>`$(top_builddir)/intl/´</SAMP> is used. - -</P> -<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 <SAMP>`yes´</SAMP>; it defines <CODE>ENABLE_NLS</CODE> to 1 in the autoconf -generated configuration file (usually called <TT>`config.h´</TT>); 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 <SAMP>`-I´</SAMP> option to -<CODE>CPPFLAGS</CODE> if necessary. In the negative case, it sets -<CODE>USE_NLS</CODE> to <SAMP>`no´</SAMP>; it sets <CODE>LIBINTL</CODE> and <CODE>LTLIBINTL</CODE> -to empty and doesn't change <CODE>CPPFLAGS</CODE>. - -</P> -<P> -The complexities that <CODE>AM_GNU_GETTEXT</CODE> deals with are the following: - -</P> - -<UL> -<LI> - -<A NAME="IDX898"></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 <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> - - - -<H3><A NAME="SEC192" HREF="gettext_toc.html#TOC192">12.5.2 AM_GNU_GETTEXT_VERSION in <TT>`gettext.m4´</TT></A></H3> - -<P> -<A NAME="IDX899"></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> -<P> -The use of this macro is optional; only the <CODE>autopoint</CODE> program makes -use of it (see section <A HREF="gettext_12.html#SEC194">12.6 Integrating with CVS</A>). - -</P> - - -<H3><A NAME="SEC193" HREF="gettext_toc.html#TOC193">12.5.3 AM_ICONV in <TT>`iconv.m4´</TT></A></H3> - -<P> -<A NAME="IDX900"></A> -The <CODE>AM_ICONV</CODE> macro tests for the presence of the POSIX -<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 <SAMP>`yes´</SAMP>; it defines <CODE>HAVE_ICONV</CODE> to 1 in the autoconf -generated configuration file (usually called <TT>`config.h´</TT>); it defines -<CODE>ICONV_CONST</CODE> to <SAMP>`const´</SAMP> or to empty, depending on whether the -second argument of <CODE>iconv()</CODE> is of type <SAMP>`const char **´</SAMP> or -<SAMP>`char **´</SAMP>; 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 <SAMP>`-I´</SAMP> 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> -<P> -The complexities that <CODE>AM_ICONV</CODE> deals with are the following: - -</P> - -<UL> -<LI> - -<A NAME="IDX901"></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 <TT>`iconv.h´</TT> -and <TT>`libiconv.so´</TT> 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> -<TT>`iconv.m4´</TT> is distributed with the GNU gettext package because -<TT>`gettext.m4´</TT> relies on it. - -</P> - - -<H2><A NAME="SEC194" HREF="gettext_toc.html#TOC194">12.6 Integrating with CVS</A></H2> - -<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>. - -</P> - - - -<H3><A NAME="SEC195" HREF="gettext_toc.html#TOC195">12.6.1 Avoiding version mismatch in distributed development</A></H3> - -<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 section <A HREF="gettext_12.html#SEC177">12.4 Files You Must Create or Alter</A>, and then commits -his changes to the CVS. - -</P> -<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: - -</P> - -<UL> -<LI> - -Apparent version mismatch between developers. Since some <CODE>gettext</CODE> -specific portions in <TT>`configure.in´</TT>, <TT>`configure.ac´</TT> 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> - - - -<H3><A NAME="SEC196" HREF="gettext_toc.html#TOC196">12.6.2 Files to put under CVS version control</A></H3> - -<P> -There are basically three ways to deal with generated files in the -context of a CVS repository, such as <TT>`configure´</TT> generated from -<TT>`configure.in´</TT>, <CODE><VAR>parser</VAR>.c</CODE> generated from -<CODE><VAR>parser</VAR>.y</CODE>, or <CODE>po/Makefile.in.in</CODE> autoinstalled by -<CODE>gettextize</CODE> or <CODE>autopoint</CODE>. - -</P> - -<OL> -<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. - -</P> - -<OL> -<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 reposity 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> -<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 <TT>`configure.in´</TT> or <TT>`configure.ac´</TT> a line of the -form - -</P> - -<PRE> -AM_GNU_GETTEXT_VERSION(0.11.6-pre2) -</PRE> - -<P> -and adds to the package's pre-build script an invocation of -<SAMP>`autopoint´</SAMP>. 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> - - -<H3><A NAME="SEC197" HREF="gettext_toc.html#TOC197">12.6.3 Invoking the <CODE>autopoint</CODE> Program</A></H3> - -<P> -<A NAME="IDX902"></A> -<A NAME="IDX903"></A> - -<PRE> -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(<VAR>version</VAR>)</CODE>, found in the package's -<TT>`configure.in´</TT> or <TT>`configure.ac´</TT> file, the gettext version -used by the package, and copies the infrastructure files belonging to -this version into the package. - -</P> - - -<H4><A NAME="SEC198" HREF="gettext_toc.html#TOC198">12.6.3.1 Options</A></H4> - -<DL COMPACT> - -<DT><SAMP>`-f´</SAMP> -<DD> -<DT><SAMP>`--force´</SAMP> -<DD> -<A NAME="IDX904"></A> -<A NAME="IDX905"></A> -Force overwriting of files that already exist. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--dry-run´</SAMP> -<DD> -<A NAME="IDX906"></A> -<A NAME="IDX907"></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> - - - -<H4><A NAME="SEC199" HREF="gettext_toc.html#TOC199">12.6.3.2 Informative output</A></H4> - -<DL COMPACT> - -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX908"></A> -Display this help and exit. - -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX909"></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.11.6-pre2. In order to apply <CODE>autopoint</CODE> to -a package using a <CODE>gettext</CODE> version newer than 0.11.6-pre2, you -need to install this same version of GNU <CODE>gettext</CODE> at least. - -</P> -<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 -<TT>`aclocal.m4´</TT>, and the latter is used by <CODE>autoconf</CODE> to create the -package's <TT>`configure´</TT> script and by <CODE>autoheader</CODE> to create the -package's <TT>`config.h.in´</TT> include file template. - -</P> -<P> -The name <SAMP>`autopoint´</SAMP> is an abbreviation of <SAMP>`auto-po-intl-m4´</SAMP>; -the tool copies or updates mostly files in the <TT>`po´</TT>, <TT>`intl´</TT>, -<TT>`m4´</TT> directories. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_11.html">previous</A>, <A HREF="gettext_13.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_13.html b/doc/gettext_13.html deleted file mode 100644 index ec23fc2..0000000 --- a/doc/gettext_13.html +++ /dev/null @@ -1,1718 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 13 Other Programming Languages</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_12.html">previous</A>, <A HREF="gettext_14.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC200" HREF="gettext_toc.html#TOC200">13 Other Programming Languages</A></H1> - -<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. - -</P> - - - -<H2><A NAME="SEC201" HREF="gettext_toc.html#TOC201">13.1 The Language Implementor's View</A></H2> -<P> -<A NAME="IDX910"></A> -<A NAME="IDX911"></A> - -</P> -<P> -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: - -</P> - -<OL> -<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>, in bash 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 -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><locale.h></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 facets 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 section <A HREF="gettext_3.html#SEC18">3.5 Special Comments preceding Keywords</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 usually performed using the Emacs PO mode, you are welcome to -contact the GNU <CODE>gettext</CODE> maintainers, so they can add support for -your language to <TT>`po-mode.el´</TT>. -</OL> - -<P> -On the implementation side, three approaches are possible, with -different effects on portability and copyright: - -</P> - -<UL> -<LI> - -You may integrate the GNU <CODE>gettext</CODE>'s <TT>`intl/´</TT> directory in -your package, as described in section <A HREF="gettext_12.html#SEC173">12 The Maintainer's View</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> - - - -<H2><A NAME="SEC202" HREF="gettext_toc.html#TOC202">13.2 The Programmer's View</A></H2> - -<P> -For the programmer, the general procedure is the same as for the C -language. The Emacs PO mode 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. - -</P> - - -<H2><A NAME="SEC203" HREF="gettext_toc.html#TOC203">13.3 The Translator's View</A></H2> - -<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. - -</P> - - - -<H3><A NAME="SEC204" HREF="gettext_toc.html#TOC204">13.3.1 C Format Strings</A></H3> - -<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(3) 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> - - -<H3><A NAME="SEC205" HREF="gettext_toc.html#TOC205">13.3.2 Python Format Strings</A></H3> - -<P> -Python format strings are described in -Python Library reference / -2. Built-in Types, Exceptions and Functions / -2.2. Built-in Types / -2.2.6. Sequence Types / -2.2.6.2. String Formatting Operations. -<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>. - -</P> - - -<H3><A NAME="SEC206" HREF="gettext_toc.html#TOC206">13.3.3 Lisp Format Strings</A></H3> - -<P> -Lisp format strings are described in the Common Lisp HyperSpec, -chapter 22.3 Formatted Output, -<A HREF="http://www.lisp.org/HyperSpec/Body/sec_22-3.html">http://www.lisp.org/HyperSpec/Body/sec_22-3.html</A>. - -</P> - - -<H3><A NAME="SEC207" HREF="gettext_toc.html#TOC207">13.3.4 Emacs Lisp Format Strings</A></H3> - -<P> -Emacs Lisp format strings are documented in the Emacs Lisp reference, -section Formatting Strings, -<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. - -</P> - - -<H3><A NAME="SEC208" HREF="gettext_toc.html#TOC208">13.3.5 librep Format Strings</A></H3> - -<P> -librep format strings are documented in the librep manual, section -Formatted Output, -<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>. - -</P> - - -<H3><A NAME="SEC209" HREF="gettext_toc.html#TOC209">13.3.6 Smalltalk Format Strings</A></H3> - -<P> -Smalltalk format strings are described in the GNU Smalltalk documentation, -class <CODE>CharArray</CODE>, methods <SAMP>`bindWith:´</SAMP> and -<SAMP>`bindWithArguments:´</SAMP>. -<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 <SAMP>`%´</SAMP> and is followed by <SAMP>`%´</SAMP> -or a nonzero digit (<SAMP>`1´</SAMP> to <SAMP>`9´</SAMP>). - -</P> - - -<H3><A NAME="SEC210" HREF="gettext_toc.html#TOC210">13.3.7 Java Format Strings</A></H3> - -<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>. - -</P> - - -<H3><A NAME="SEC211" HREF="gettext_toc.html#TOC211">13.3.8 awk Format Strings</A></H3> - -<P> -awk format strings are described in the gawk documentation, section -Printf, -<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>. - -</P> - - -<H3><A NAME="SEC212" HREF="gettext_toc.html#TOC212">13.3.9 Object Pascal Format Strings</A></H3> - -<P> -Where is this documented? - -</P> - - -<H3><A NAME="SEC213" HREF="gettext_toc.html#TOC213">13.3.10 YCP Format Strings</A></H3> - -<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 <SAMP>`%´</SAMP> and is followed by <SAMP>`%´</SAMP> -or a nonzero digit (<SAMP>`1´</SAMP> to <SAMP>`9´</SAMP>). - -</P> - - -<H3><A NAME="SEC214" HREF="gettext_toc.html#TOC214">13.3.11 Tcl Format Strings</A></H3> - -<P> -Tcl format strings are described in the <TT>`format.n´</TT> 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>. - -</P> - - -<H3><A NAME="SEC215" HREF="gettext_toc.html#TOC215">13.3.12 PHP Format Strings</A></H3> - -<P> -PHP format strings are described in the documentation of the PHP function -<CODE>sprintf</CODE>, in <TT>`phpdoc/manual/function.sprintf.html´</TT> or -<A HREF="http://www.php.net/manual/en/function.sprintf.php">http://www.php.net/manual/en/function.sprintf.php</A>. - -</P> - - -<H2><A NAME="SEC216" HREF="gettext_toc.html#TOC216">13.4 The Maintainer's View</A></H2> - -<P> -For the maintainer, the general procedure differs from the C language -case in two ways. - -</P> - -<UL> -<LI> - -For those languages that don't use GNU gettext, the <TT>`intl/´</TT> directory -is not needed and can be omitted. This means that the maintainer calls the -<CODE>gettextize</CODE> program without the <SAMP>`--intl´</SAMP> option, and that he -invokes the <CODE>AM_GNU_GETTEXT</CODE> autoconf macro via -<SAMP>`AM_GNU_GETTEXT([external])´</SAMP>. - -<LI> - -If only a single programming language is used, the <CODE>XGETTEXT_OPTIONS</CODE> -variable in <TT>`po/Makevars´</TT> (see section <A HREF="gettext_12.html#SEC180">12.4.3 <TT>`Makefile´</TT> pieces in <TT>`po/´</TT></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 <TT>`po/Makefile.in.in´</TT>. 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> - - - -<H2><A NAME="SEC217" HREF="gettext_toc.html#TOC217">13.5 Individual Programming Languages</A></H2> - - - -<H3><A NAME="SEC218" HREF="gettext_toc.html#TOC218">13.5.1 C, C++, Objective C</A></H3> -<P> -<A NAME="IDX912"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -gcc, gpp, gobjc, glibc, gettext - -<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>. - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>_("abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext</CODE>, <CODE>dgettext</CODE>, <CODE>dcgettext</CODE>, <CODE>ngettext</CODE>, -<CODE>dngettext</CODE>, <CODE>dcngettext</CODE> - -<DT>textdomain -<DD> -<CODE>textdomain</CODE> function - -<DT>bindtextdomain -<DD> -<CODE>bindtextdomain</CODE> function - -<DT>setlocale -<DD> -Programmer must call <CODE>setlocale (LC_ALL, "")</CODE> - -<DT>Prerequisite -<DD> -<CODE>#include <libintl.h></CODE> -<BR><CODE>#include <locale.h></CODE> -<BR><CODE>#define _(string) gettext (string)</CODE> - -<DT>Use or emulate GNU gettext -<DD> -Use - -<DT>Extractor -<DD> -<CODE>xgettext -k_</CODE> - -<DT>Formatting with positions -<DD> -<CODE>fprintf "%2$d %1$d"</CODE> (POSIX but not C 99) -<BR>In C++: <CODE>autosprintf "%2$d %1$d"</CODE> -(see section `Introduction' in <CITE>GNU autosprintf</CITE>) - -<DT>Portability -<DD> -autoconf (gettext.m4) and #if ENABLE_NLS - -<DT>po-mode marking -<DD> -yes -</DL> - - - -<H3><A NAME="SEC219" HREF="gettext_toc.html#TOC219">13.5.2 sh - Shell Script</A></H3> -<P> -<A NAME="IDX913"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -bash, gettext - -<DT>File extension -<DD> -<CODE>sh</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE>, <CODE>'abc'</CODE>, <CODE>abc</CODE> - -<DT>gettext shorthand -<DD> -<CODE>"`gettext "abc"`"</CODE> - -<DT>gettext/ngettext functions -<DD> -<A NAME="IDX914"></A> -<A NAME="IDX915"></A> -<CODE>gettext</CODE>, <CODE>ngettext</CODE> programs - -<DT>textdomain -<DD> -<A NAME="IDX916"></A> -environment variable <CODE>TEXTDOMAIN</CODE> - -<DT>bindtextdomain -<DD> -<A NAME="IDX917"></A> -environment variable <CODE>TEXTDOMAINDIR</CODE> - -<DT>setlocale -<DD> -automatic - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> ---- - -<DT>Formatting with positions -<DD> ---- - -<DT>Portability -<DD> ---- - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC220" HREF="gettext_toc.html#TOC220">13.5.3 bash - Bourne-Again Shell Script</A></H3> -<P> -<A NAME="IDX918"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -bash 2.0 or newer, gettext - -<DT>File extension -<DD> -<CODE>sh</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE>, <CODE>'abc'</CODE>, <CODE>abc</CODE> - -<DT>gettext shorthand -<DD> -<CODE>$"abc"</CODE> - -<DT>gettext/ngettext functions -<DD> -<A NAME="IDX919"></A> -<A NAME="IDX920"></A> -<CODE>gettext</CODE>, <CODE>ngettext</CODE> programs - -<DT>textdomain -<DD> -<A NAME="IDX921"></A> -environment variable <CODE>TEXTDOMAIN</CODE> - -<DT>bindtextdomain -<DD> -<A NAME="IDX922"></A> -environment variable <CODE>TEXTDOMAINDIR</CODE> - -<DT>setlocale -<DD> -automatic - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>bash --dump-po-strings</CODE> - -<DT>Formatting with positions -<DD> ---- - -<DT>Portability -<DD> ---- - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC221" HREF="gettext_toc.html#TOC221">13.5.4 Python</A></H3> -<P> -<A NAME="IDX923"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -python - -<DT>File extension -<DD> -<CODE>py</CODE> - -<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> - -<DT>gettext shorthand -<DD> -<CODE>_('abc')</CODE> etc. - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext.gettext</CODE>, <CODE>gettext.dgettext</CODE>, also <CODE>ugettext</CODE> - -<DT>textdomain -<DD> -<CODE>gettext.textdomain</CODE> function, or -<CODE>gettext.install(<VAR>domain</VAR>)</CODE> function - -<DT>bindtextdomain -<DD> -<CODE>gettext.bindtextdomain</CODE> function, or -<CODE>gettext.install(<VAR>domain</VAR>,<VAR>localedir</VAR>)</CODE> function - -<DT>setlocale -<DD> -not used by the gettext emulation - -<DT>Prerequisite -<DD> -<CODE>import gettext</CODE> - -<DT>Use or emulate GNU gettext -<DD> -emulate. Bug: uses only the first found .mo file, not all of them - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>'...%(ident)d...' % { 'ident': value }</CODE> - -<DT>Portability -<DD> -fully portable - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC222" HREF="gettext_toc.html#TOC222">13.5.5 GNU clisp - Common Lisp</A></H3> -<P> -<A NAME="IDX924"></A> -<A NAME="IDX925"></A> -<A NAME="IDX926"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -clisp 2.28 or newer - -<DT>File extension -<DD> -<CODE>lisp</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>(_ "abc")</CODE>, <CODE>(ENGLISH "abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>i18n:gettext</CODE>, <CODE>i18n:ngettext</CODE> - -<DT>textdomain -<DD> -<CODE>i18n:textdomain</CODE> - -<DT>bindtextdomain -<DD> -<CODE>i18n:textdomaindir</CODE> - -<DT>setlocale -<DD> -automatic - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>xgettext -k_ -kENGLISH</CODE> - -<DT>Formatting with positions -<DD> -<CODE>format "~1@*~D ~0@*~D"</CODE> - -<DT>Portability -<DD> -On platforms without gettext, no translation. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC223" HREF="gettext_toc.html#TOC223">13.5.6 GNU clisp C sources</A></H3> -<P> -<A NAME="IDX927"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -clisp - -<DT>File extension -<DD> -<CODE>d</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>ENGLISH ? "abc" : ""</CODE> -<BR><CODE>GETTEXT("abc")</CODE> -<BR><CODE>GETTEXTL("abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>clgettext</CODE>, <CODE>clgettextl</CODE> - -<DT>textdomain -<DD> ---- - -<DT>bindtextdomain -<DD> ---- - -<DT>setlocale -<DD> -automatic - -<DT>Prerequisite -<DD> -<CODE>#include "lispbibl.c"</CODE> - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>clisp-xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>fprintf "%2$d %1$d"</CODE> (POSIX but not C 99) - -<DT>Portability -<DD> -On platforms without gettext, no translation. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC224" HREF="gettext_toc.html#TOC224">13.5.7 Emacs Lisp</A></H3> -<P> -<A NAME="IDX928"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -emacs, xemacs - -<DT>File extension -<DD> -<CODE>el</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>(_"abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext</CODE>, <CODE>dgettext</CODE> (xemacs only) - -<DT>textdomain -<DD> -<CODE>domain</CODE> special form (xemacs only) - -<DT>bindtextdomain -<DD> -<CODE>bind-text-domain</CODE> function (xemacs only) - -<DT>setlocale -<DD> -automatic - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>format "%2$d %1$d"</CODE> - -<DT>Portability -<DD> -Only XEmacs. Without <CODE>I18N3</CODE> defined at build time, no translation. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC225" HREF="gettext_toc.html#TOC225">13.5.8 librep</A></H3> -<P> -<A NAME="IDX929"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -librep 0.15.3 or newer - -<DT>File extension -<DD> -<CODE>jl</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>(_"abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext</CODE> - -<DT>textdomain -<DD> -<CODE>textdomain</CODE> function - -<DT>bindtextdomain -<DD> -<CODE>bindtextdomain</CODE> function - -<DT>setlocale -<DD> ---- - -<DT>Prerequisite -<DD> -<CODE>(require 'rep.i18n.gettext)</CODE> - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>format "%2$d %1$d"</CODE> - -<DT>Portability -<DD> -On platforms without gettext, no translation. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC226" HREF="gettext_toc.html#TOC226">13.5.9 GNU Smalltalk</A></H3> -<P> -<A NAME="IDX930"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -smalltalk - -<DT>File extension -<DD> -<CODE>st</CODE> - -<DT>String syntax -<DD> -<CODE>'abc'</CODE> - -<DT>gettext shorthand -<DD> -<CODE>NLS ? 'abc'</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>LcMessagesDomain>>#at:</CODE>, <CODE>LcMessagesDomain>>#at:plural:with:</CODE> - -<DT>textdomain -<DD> -<CODE>LcMessages>>#domain:localeDirectory:</CODE> (returns a <CODE>LcMessagesDomain</CODE> -object).<BR> -Example: <CODE>I18N Locale default messages domain: 'gettext' localeDirectory: /usr/local/share/locale'</CODE> - -<DT>bindtextdomain -<DD> -<CODE>LcMessages>>#domain:localeDirectory:</CODE>, see above. - -<DT>setlocale -<DD> -Automatic if you use <CODE>I18N Locale default</CODE>. - -<DT>Prerequisite -<DD> -<CODE>PackageLoader fileInPackage: 'I18N'!</CODE> - -<DT>Use or emulate GNU gettext -<DD> -emulate - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>'%1 %2' bindWith: 'Hello' with: 'world'</CODE> - -<DT>Portability -<DD> -fully portable - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC227" HREF="gettext_toc.html#TOC227">13.5.10 Java</A></H3> -<P> -<A NAME="IDX931"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -java, java2 - -<DT>File extension -<DD> -<CODE>java</CODE> - -<DT>String syntax -<DD> -"abc" - -<DT>gettext shorthand -<DD> -_("abc") - -<DT>gettext/ngettext functions -<DD> -<CODE>GettextResource.gettext</CODE>, <CODE>GettextResource.ngettext</CODE> - -<DT>textdomain -<DD> ----, use <CODE>ResourceBundle.getResource</CODE> instead - -<DT>bindtextdomain -<DD> ----, use CLASSPATH instead - -<DT>setlocale -<DD> -automatic - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> ----, uses a Java specific message catalog format - -<DT>Extractor -<DD> -<CODE>xgettext -k_</CODE> - -<DT>Formatting with positions -<DD> -<CODE>MessageFormat.format "{1,number} {0,number}"</CODE> - -<DT>Portability -<DD> -fully portable - -<DT>po-mode marking -<DD> ---- -</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> -<P> -GNU gettext uses the native Java internationalization mechanism, namely -<CODE>ResourceBundle</CODE>s. To convert a PO file to a ResourceBundle, 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> -<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. - -</P> - -<OL> -<LI> - -The <CODE>java.util.ResourceBundle</CODE> API. - -In particular, its <CODE>getString</CODE> function returns a string translation. -Note that a missing translation yields a <CODE>MissingResourceException</CODE>. - -This has the advantage of being the standard API. And it does not require -any additional libraries, only the <CODE>msgfmt</CODE> generated <CODE>.class</CODE> -files. But it cannot do plural handling, even if the resource was generated -from a PO file with plural handling. - -<LI> - -The <CODE>gnu.gettext.GettextResource</CODE> API. - -Reference documentation in Javadoc 1.1 style format -is in the <A HREF="javadoc1/tree.html">javadoc1 directory</A> and -in Javadoc 2 style format -in the <A HREF="javadoc2/index.html">javadoc2 directory</A>. - -Its <CODE>gettext</CODE> function returns a string translation. Note that when -a translation is missing, the <VAR>msgid</VAR> argument is returned unchanged. - -This has the advantage of having the <CODE>ngettext</CODE> function for plural -handling. - -<A NAME="IDX932"></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> - - - -<H3><A NAME="SEC228" HREF="gettext_toc.html#TOC228">13.5.11 GNU awk</A></H3> -<P> -<A NAME="IDX933"></A> -<A NAME="IDX934"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -gawk 3.1 or newer - -<DT>File extension -<DD> -<CODE>awk</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>_"abc"</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>dcgettext</CODE>, missing <CODE>dcngettext</CODE> in gawk-3.1.0 - -<DT>textdomain -<DD> -<CODE>TEXTDOMAIN</CODE> variable - -<DT>bindtextdomain -<DD> -<CODE>bindtextdomain</CODE> function - -<DT>setlocale -<DD> -automatic, but missing <CODE>setlocale (LC_MESSAGES, "")</CODE> in gawk-3.1.0 - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>printf "%2$d %1$d"</CODE> (GNU awk only) - -<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. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC229" HREF="gettext_toc.html#TOC229">13.5.12 Pascal - Free Pascal Compiler</A></H3> -<P> -<A NAME="IDX935"></A> -<A NAME="IDX936"></A> -<A NAME="IDX937"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -fpk - -<DT>File extension -<DD> -<CODE>pp</CODE>, <CODE>pas</CODE> - -<DT>String syntax -<DD> -<CODE>'abc'</CODE> - -<DT>gettext shorthand -<DD> -automatic - -<DT>gettext/ngettext functions -<DD> ----, use <CODE>ResourceString</CODE> data type instead - -<DT>textdomain -<DD> ----, use <CODE>TranslateResourceStrings</CODE> function instead - -<DT>bindtextdomain -<DD> ----, use <CODE>TranslateResourceStrings</CODE> function instead - -<DT>setlocale -<DD> -automatic, but uses only LANG, not LC_MESSAGES or LC_ALL - -<DT>Prerequisite -<DD> -<CODE>{$mode delphi}</CODE> or <CODE>{$mode objfpc}</CODE><BR><CODE>uses gettext;</CODE> - -<DT>Use or emulate GNU gettext -<DD> -emulate partially - -<DT>Extractor -<DD> -<CODE>ppc386</CODE> followed by <CODE>xgettext</CODE> or <CODE>rstconv</CODE> - -<DT>Formatting with positions -<DD> -<CODE>uses sysutils;</CODE><BR><CODE>format "%1:d %0:d"</CODE> - -<DT>Portability -<DD> -? - -<DT>po-mode marking -<DD> ---- -</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> - - -<H3><A NAME="SEC230" HREF="gettext_toc.html#TOC230">13.5.13 wxWindows library</A></H3> -<P> -<A NAME="IDX938"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -wxGTK, gettext - -<DT>File extension -<DD> -<CODE>cpp</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>_("abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>wxLocale::GetString</CODE>, <CODE>wxGetTranslation</CODE> - -<DT>textdomain -<DD> -<CODE>wxLocale::AddCatalog</CODE> - -<DT>bindtextdomain -<DD> -<CODE>wxLocale::AddCatalogLookupPathPrefix</CODE> - -<DT>setlocale -<DD> -<CODE>wxLocale::Init</CODE>, <CODE>wxSetLocale</CODE> - -<DT>Prerequisite -<DD> -<CODE>#include <wx/intl.h></CODE> - -<DT>Use or emulate GNU gettext -<DD> -emulate, see <CODE>include/wx/intl.h</CODE> and <CODE>src/common/intl.cpp</CODE> - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> ---- - -<DT>Portability -<DD> -fully portable - -<DT>po-mode marking -<DD> -yes -</DL> - - - -<H3><A NAME="SEC231" HREF="gettext_toc.html#TOC231">13.5.14 YCP - YaST2 scripting language</A></H3> -<P> -<A NAME="IDX939"></A> -<A NAME="IDX940"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -libycp, libycp-devel, yast2-core-translator - -<DT>File extension -<DD> -<CODE>ycp</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>_("abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>_()</CODE> with 1 or 3 arguments - -<DT>textdomain -<DD> -<CODE>textdomain</CODE> statement - -<DT>bindtextdomain -<DD> ---- - -<DT>setlocale -<DD> ---- - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use maps instead - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>sformat "%2 %1"</CODE> - -<DT>Portability -<DD> -fully portable - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC232" HREF="gettext_toc.html#TOC232">13.5.15 Tcl - Tk's scripting language</A></H3> -<P> -<A NAME="IDX941"></A> -<A NAME="IDX942"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -tcl - -<DT>File extension -<DD> -<CODE>tcl</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> -<CODE>[_ "abc"]</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>::msgcat::mc</CODE> - -<DT>textdomain -<DD> ---- - -<DT>bindtextdomain -<DD> ----, use <CODE>::msgcat::mcload</CODE> instead - -<DT>setlocale -<DD> -automatic, uses LANG, but ignores LC_MESSAGES and LC_ALL - -<DT>Prerequisite -<DD> -<CODE>package require msgcat</CODE> -<BR><CODE>proc _ {s} {return [::msgcat::mc $s]}</CODE> - -<DT>Use or emulate GNU gettext -<DD> ----, uses a Tcl specific message catalog format - -<DT>Extractor -<DD> -<CODE>xgettext -k_</CODE> - -<DT>Formatting with positions -<DD> -<CODE>format "%2\$d %1\$d"</CODE> - -<DT>Portability -<DD> -fully portable - -<DT>po-mode marking -<DD> ---- -</DL> - -<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. - -</P> - - -<H3><A NAME="SEC233" HREF="gettext_toc.html#TOC233">13.5.16 Perl</A></H3> -<P> -<A NAME="IDX943"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -perl, perl-gettext - -<DT>File extension -<DD> -<CODE>pl</CODE>, <CODE>PL</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> ---- - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext</CODE>, <CODE>dgettext</CODE>, <CODE>dcgettext</CODE> - -<DT>textdomain -<DD> -<CODE>textdomain</CODE> function - -<DT>bindtextdomain -<DD> -<CODE>bindtextdomain</CODE> function - -<DT>setlocale -<DD> -Use <CODE>setlocale (LC_ALL, "");</CODE> - -<DT>Prerequisite -<DD> -<CODE>use POSIX;</CODE> -<BR><CODE>use Locale::gettext;</CODE> - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -? - -<DT>Formatting with positions -<DD> ---- - -<DT>Portability -<DD> -? - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC234" HREF="gettext_toc.html#TOC234">13.5.17 PHP Hypertext Preprocessor</A></H3> -<P> -<A NAME="IDX944"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -mod_php4, mod_php4-core, phplib, phpdoc - -<DT>File extension -<DD> -<CODE>php</CODE>, <CODE>php3</CODE>, <CODE>php4</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE>, <CODE>'abc'</CODE> - -<DT>gettext shorthand -<DD> -<CODE>_("abc")</CODE> - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext</CODE>, <CODE>dgettext</CODE>, <CODE>dcgettext</CODE> - -<DT>textdomain -<DD> -<CODE>textdomain</CODE> function - -<DT>bindtextdomain -<DD> -<CODE>bindtextdomain</CODE> function - -<DT>setlocale -<DD> -Programmer must call <CODE>setlocale (LC_ALL, "")</CODE> - -<DT>Prerequisite -<DD> ---- - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> - -<DT>Formatting with positions -<DD> -<CODE>printf "%2\$d %1\$d"</CODE> - -<DT>Portability -<DD> -On platforms without gettext, the functions are not available. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H3><A NAME="SEC235" HREF="gettext_toc.html#TOC235">13.5.18 Pike</A></H3> -<P> -<A NAME="IDX945"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -roxen - -<DT>File extension -<DD> -<CODE>pike</CODE> - -<DT>String syntax -<DD> -<CODE>"abc"</CODE> - -<DT>gettext shorthand -<DD> ---- - -<DT>gettext/ngettext functions -<DD> -<CODE>gettext</CODE>, <CODE>dgettext</CODE>, <CODE>dcgettext</CODE> - -<DT>textdomain -<DD> -<CODE>textdomain</CODE> function - -<DT>bindtextdomain -<DD> -<CODE>bindtextdomain</CODE> function - -<DT>setlocale -<DD> -<CODE>setlocale</CODE> function - -<DT>Prerequisite -<DD> -<CODE>import Locale.Gettext;</CODE> - -<DT>Use or emulate GNU gettext -<DD> -use - -<DT>Extractor -<DD> ---- - -<DT>Formatting with positions -<DD> ---- - -<DT>Portability -<DD> -On platforms without gettext, the functions are not available. - -<DT>po-mode marking -<DD> ---- -</DL> - - - -<H2><A NAME="SEC236" HREF="gettext_toc.html#TOC236">13.6 Internationalizable Data</A></H2> - -<P> -Here is a list of other data formats which can be internationalized -using GNU gettext. - -</P> - - - -<H3><A NAME="SEC237" HREF="gettext_toc.html#TOC237">13.6.1 POT - Portable Object Template</A></H3> - -<DL COMPACT> - -<DT>RPMs -<DD> -gettext - -<DT>File extension -<DD> -<CODE>pot</CODE>, <CODE>po</CODE> - -<DT>Extractor -<DD> -<CODE>xgettext</CODE> -</DL> - - - -<H3><A NAME="SEC238" HREF="gettext_toc.html#TOC238">13.6.2 Resource String Table</A></H3> -<P> -<A NAME="IDX946"></A> - -</P> -<DL COMPACT> - -<DT>RPMs -<DD> -fpk - -<DT>File extension -<DD> -<CODE>rst</CODE> - -<DT>Extractor -<DD> -<CODE>xgettext</CODE>, <CODE>rstconv</CODE> -</DL> - - - -<H3><A NAME="SEC239" HREF="gettext_toc.html#TOC239">13.6.3 Glade - GNOME user interface description</A></H3> - -<DL COMPACT> - -<DT>RPMs -<DD> -glade, libglade, xml-i18n-tools - -<DT>File extension -<DD> -<CODE>glade</CODE> - -<DT>Extractor -<DD> -<CODE>xgettext</CODE>, <CODE>libglade-xgettext</CODE> -</DL> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_12.html">previous</A>, <A HREF="gettext_14.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_14.html b/doc/gettext_14.html deleted file mode 100644 index c84fd6e..0000000 --- a/doc/gettext_14.html +++ /dev/null @@ -1,186 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 14 Concluding Remarks</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_13.html">previous</A>, <A HREF="gettext_15.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC240" HREF="gettext_toc.html#TOC240">14 Concluding Remarks</A></H1> - -<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. - -</P> - - - -<H2><A NAME="SEC241" HREF="gettext_toc.html#TOC241">14.1 History of GNU <CODE>gettext</CODE></A></H2> -<P> -<A NAME="IDX947"></A> - -</P> -<P> -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> -<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> -<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ç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. - -</P> -<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 conformant 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> -<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> -<P> -While this was being done, Franç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> -<P> -Franç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> -<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> -<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> -<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. - -</P> - - -<H2><A NAME="SEC242" HREF="gettext_toc.html#TOC242">14.2 Related Readings</A></H2> -<P> -<A NAME="IDX948"></A> -<A NAME="IDX949"></A> - -</P> -<P> -Eugene H. Dorr (<TT>`dorre@well.com´</TT>) maintains an interesting -bibliography on internationalization matters, called -<CITE>Internationalization Reference List</CITE>, which is available as: - -<PRE> -ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/i18n-books.txt -</PRE> - -<P> -Michael Gschwind (<TT>`mike@vlsivie.tuwien.ac.at´</TT>) 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 8859-1. It is regularly published in Usenet -groups <TT>`comp.unix.questions´</TT>, <TT>`comp.std.internat´</TT>, -<TT>`comp.software.international´</TT>, <TT>`comp.lang.c´</TT>, -<TT>`comp.windows.x´</TT>, <TT>`comp.std.c´</TT>, <TT>`comp.answers´</TT> -and <TT>`news.answers´</TT>. The home location of this document is: - -<PRE> -ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/ISO-programming -</PRE> - -<P> -Patrick D'Cruze (<TT>`pdcruze@li.org´</TT>) wrote a tutorial about NLS -matters, and Jochen Hein (<TT>`Hein@student.tu-clausthal.de´</TT>) took -over the responsibility of maintaining it. It may be found as: - -<PRE> -ftp://sunsite.unc.edu/pub/Linux/utils/nls/catalogs/Incoming/... - ...locale-tutorial-0.8.txt.gz -</PRE> - -<P> -This site is mirrored in: - -<PRE> -ftp://ftp.ibp.fr/pub/linux/sunsite/ -</PRE> - -<P> -A French version of the same tutorial should be findable at: - -<PRE> -ftp://ftp.ibp.fr/pub/linux/french/docs/ -</PRE> - -<P> -together with French translations of many Linux-related documents. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_13.html">previous</A>, <A HREF="gettext_15.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_15.html b/doc/gettext_15.html deleted file mode 100644 index 538820c..0000000 --- a/doc/gettext_15.html +++ /dev/null @@ -1,533 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - A Language Codes</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_14.html">previous</A>, <A HREF="gettext_16.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC243" HREF="gettext_toc.html#TOC243">A Language Codes</A></H1> -<P> -<A NAME="IDX950"></A> -<A NAME="IDX951"></A> - -</P> -<P> -The ISO 639 standard defines two character codes for many languages. -All abbreviations for languages used in the Translation Project should -come from this standard. - -</P> -<DL COMPACT> - -<DT><SAMP>`aa´</SAMP> -<DD> -Afar. -<DT><SAMP>`ab´</SAMP> -<DD> -Abkhazian. -<DT><SAMP>`ae´</SAMP> -<DD> -Avestan. -<DT><SAMP>`af´</SAMP> -<DD> -Afrikaans. -<DT><SAMP>`am´</SAMP> -<DD> -Amharic. -<DT><SAMP>`ar´</SAMP> -<DD> -Arabic. -<DT><SAMP>`as´</SAMP> -<DD> -Assamese. -<DT><SAMP>`ay´</SAMP> -<DD> -Aymara. -<DT><SAMP>`az´</SAMP> -<DD> -Azerbaijani. -<DT><SAMP>`ba´</SAMP> -<DD> -Bashkir. -<DT><SAMP>`be´</SAMP> -<DD> -Byelorussian; Belarusian. -<DT><SAMP>`bg´</SAMP> -<DD> -Bulgarian. -<DT><SAMP>`bh´</SAMP> -<DD> -Bihari. -<DT><SAMP>`bi´</SAMP> -<DD> -Bislama. -<DT><SAMP>`bn´</SAMP> -<DD> -Bengali; Bangla. -<DT><SAMP>`bo´</SAMP> -<DD> -Tibetan. -<DT><SAMP>`br´</SAMP> -<DD> -Breton. -<DT><SAMP>`bs´</SAMP> -<DD> -Bosnian. -<DT><SAMP>`ca´</SAMP> -<DD> -Catalan. -<DT><SAMP>`ce´</SAMP> -<DD> -Chechen. -<DT><SAMP>`ch´</SAMP> -<DD> -Chamorro. -<DT><SAMP>`co´</SAMP> -<DD> -Corsican. -<DT><SAMP>`cs´</SAMP> -<DD> -Czech. -<DT><SAMP>`cu´</SAMP> -<DD> -Church Slavic. -<DT><SAMP>`cv´</SAMP> -<DD> -Chuvash. -<DT><SAMP>`cy´</SAMP> -<DD> -Welsh. -<DT><SAMP>`da´</SAMP> -<DD> -Danish. -<DT><SAMP>`de´</SAMP> -<DD> -German. -<DT><SAMP>`dz´</SAMP> -<DD> -Dzongkha; Bhutani. -<DT><SAMP>`el´</SAMP> -<DD> -Greek. -<DT><SAMP>`en´</SAMP> -<DD> -English. -<DT><SAMP>`eo´</SAMP> -<DD> -Esperanto. -<DT><SAMP>`es´</SAMP> -<DD> -Spanish. -<DT><SAMP>`et´</SAMP> -<DD> -Estonian. -<DT><SAMP>`eu´</SAMP> -<DD> -Basque. -<DT><SAMP>`fa´</SAMP> -<DD> -Persian. -<DT><SAMP>`fi´</SAMP> -<DD> -Finnish. -<DT><SAMP>`fj´</SAMP> -<DD> -Fijian; Fiji. -<DT><SAMP>`fo´</SAMP> -<DD> -Faroese. -<DT><SAMP>`fr´</SAMP> -<DD> -French. -<DT><SAMP>`fy´</SAMP> -<DD> -Frisian. -<DT><SAMP>`ga´</SAMP> -<DD> -Irish. -<DT><SAMP>`gd´</SAMP> -<DD> -Scots; Gaelic. -<DT><SAMP>`gl´</SAMP> -<DD> -Gallegan; Galician. -<DT><SAMP>`gn´</SAMP> -<DD> -Guarani. -<DT><SAMP>`gu´</SAMP> -<DD> -Gujarati. -<DT><SAMP>`gv´</SAMP> -<DD> -Manx. -<DT><SAMP>`ha´</SAMP> -<DD> -Hausa (?). -<DT><SAMP>`he´</SAMP> -<DD> -Hebrew (formerly iw). -<DT><SAMP>`hi´</SAMP> -<DD> -Hindi. -<DT><SAMP>`ho´</SAMP> -<DD> -Hiri Motu. -<DT><SAMP>`hr´</SAMP> -<DD> -Croatian. -<DT><SAMP>`hu´</SAMP> -<DD> -Hungarian. -<DT><SAMP>`hy´</SAMP> -<DD> -Armenian. -<DT><SAMP>`hz´</SAMP> -<DD> -Herero. -<DT><SAMP>`ia´</SAMP> -<DD> -Interlingua. -<DT><SAMP>`id´</SAMP> -<DD> -Indonesian (formerly in). -<DT><SAMP>`ie´</SAMP> -<DD> -Interlingue. -<DT><SAMP>`ik´</SAMP> -<DD> -Inupiak. -<DT><SAMP>`io´</SAMP> -<DD> -Ido. -<DT><SAMP>`is´</SAMP> -<DD> -Icelandic. -<DT><SAMP>`it´</SAMP> -<DD> -Italian. -<DT><SAMP>`iu´</SAMP> -<DD> -Inuktitut. -<DT><SAMP>`ja´</SAMP> -<DD> -Japanese. -<DT><SAMP>`jv´</SAMP> -<DD> -Javanese. -<DT><SAMP>`ka´</SAMP> -<DD> -Georgian. -<DT><SAMP>`ki´</SAMP> -<DD> -Kikuyu. -<DT><SAMP>`kj´</SAMP> -<DD> -Kuanyama. -<DT><SAMP>`kk´</SAMP> -<DD> -Kazakh. -<DT><SAMP>`kl´</SAMP> -<DD> -Kalaallisut; Greenlandic. -<DT><SAMP>`km´</SAMP> -<DD> -Khmer; Cambodian. -<DT><SAMP>`kn´</SAMP> -<DD> -Kannada. -<DT><SAMP>`ko´</SAMP> -<DD> -Korean. -<DT><SAMP>`ks´</SAMP> -<DD> -Kashmiri. -<DT><SAMP>`ku´</SAMP> -<DD> -Kurdish. -<DT><SAMP>`kv´</SAMP> -<DD> -Komi. -<DT><SAMP>`kw´</SAMP> -<DD> -Cornish. -<DT><SAMP>`ky´</SAMP> -<DD> -Kirghiz. -<DT><SAMP>`la´</SAMP> -<DD> -Latin. -<DT><SAMP>`lb´</SAMP> -<DD> -Letzeburgesch. -<DT><SAMP>`ln´</SAMP> -<DD> -Lingala. -<DT><SAMP>`lo´</SAMP> -<DD> -Lao; Laotian. -<DT><SAMP>`lt´</SAMP> -<DD> -Lithuanian. -<DT><SAMP>`lv´</SAMP> -<DD> -Latvian; Lettish. -<DT><SAMP>`mg´</SAMP> -<DD> -Malagasy. -<DT><SAMP>`mh´</SAMP> -<DD> -Marshall. -<DT><SAMP>`mi´</SAMP> -<DD> -Maori. -<DT><SAMP>`mk´</SAMP> -<DD> -Macedonian. -<DT><SAMP>`ml´</SAMP> -<DD> -Malayalam. -<DT><SAMP>`mn´</SAMP> -<DD> -Mongolian. -<DT><SAMP>`mo´</SAMP> -<DD> -Moldavian. -<DT><SAMP>`mr´</SAMP> -<DD> -Marathi. -<DT><SAMP>`ms´</SAMP> -<DD> -Malay. -<DT><SAMP>`mt´</SAMP> -<DD> -Maltese. -<DT><SAMP>`my´</SAMP> -<DD> -Burmese. -<DT><SAMP>`na´</SAMP> -<DD> -Nauru. -<DT><SAMP>`nb´</SAMP> -<DD> -Norwegian Bokmål. -<DT><SAMP>`nd´</SAMP> -<DD> -Ndebele, North. -<DT><SAMP>`ne´</SAMP> -<DD> -Nepali. -<DT><SAMP>`ng´</SAMP> -<DD> -Ndonga. -<DT><SAMP>`nl´</SAMP> -<DD> -Dutch. -<DT><SAMP>`nn´</SAMP> -<DD> -Norwegian Nynorsk. -<DT><SAMP>`no´</SAMP> -<DD> -Norwegian. -<DT><SAMP>`nr´</SAMP> -<DD> -Ndebele, South. -<DT><SAMP>`nv´</SAMP> -<DD> -Navajo. -<DT><SAMP>`ny´</SAMP> -<DD> -Chichewa; Nyanja. -<DT><SAMP>`oc´</SAMP> -<DD> -Occitan; Provençal. -<DT><SAMP>`om´</SAMP> -<DD> -(Afan) Oromo. -<DT><SAMP>`or´</SAMP> -<DD> -Oriya. -<DT><SAMP>`os´</SAMP> -<DD> -Ossetian; Ossetic. -<DT><SAMP>`pa´</SAMP> -<DD> -Panjabi; Punjabi. -<DT><SAMP>`pi´</SAMP> -<DD> -Pali. -<DT><SAMP>`pl´</SAMP> -<DD> -Polish. -<DT><SAMP>`ps´</SAMP> -<DD> -Pashto, Pushto. -<DT><SAMP>`pt´</SAMP> -<DD> -Portuguese. -<DT><SAMP>`qu´</SAMP> -<DD> -Quechua. -<DT><SAMP>`rm´</SAMP> -<DD> -Rhaeto-Romance. -<DT><SAMP>`rn´</SAMP> -<DD> -Rundi; Kirundi. -<DT><SAMP>`ro´</SAMP> -<DD> -Romanian. -<DT><SAMP>`ru´</SAMP> -<DD> -Russian. -<DT><SAMP>`rw´</SAMP> -<DD> -Kinyarwanda. -<DT><SAMP>`sa´</SAMP> -<DD> -Sanskrit. -<DT><SAMP>`sc´</SAMP> -<DD> -Sardinian. -<DT><SAMP>`sd´</SAMP> -<DD> -Sindhi. -<DT><SAMP>`se´</SAMP> -<DD> -Northern Sami. -<DT><SAMP>`sg´</SAMP> -<DD> -Sango; Sangro. -<DT><SAMP>`si´</SAMP> -<DD> -Sinhalese. -<DT><SAMP>`sk´</SAMP> -<DD> -Slovak. -<DT><SAMP>`sl´</SAMP> -<DD> -Slovenian. -<DT><SAMP>`sm´</SAMP> -<DD> -Samoan. -<DT><SAMP>`sn´</SAMP> -<DD> -Shona. -<DT><SAMP>`so´</SAMP> -<DD> -Somali. -<DT><SAMP>`sq´</SAMP> -<DD> -Albanian. -<DT><SAMP>`sr´</SAMP> -<DD> -Serbian. -<DT><SAMP>`ss´</SAMP> -<DD> -Swati; Siswati. -<DT><SAMP>`st´</SAMP> -<DD> -Sesotho; Sotho, Southern. -<DT><SAMP>`su´</SAMP> -<DD> -Sundanese. -<DT><SAMP>`sv´</SAMP> -<DD> -Swedish. -<DT><SAMP>`sw´</SAMP> -<DD> -Swahili. -<DT><SAMP>`ta´</SAMP> -<DD> -Tamil. -<DT><SAMP>`te´</SAMP> -<DD> -Telugu. -<DT><SAMP>`tg´</SAMP> -<DD> -Tajik. -<DT><SAMP>`th´</SAMP> -<DD> -Thai. -<DT><SAMP>`ti´</SAMP> -<DD> -Tigrinya. -<DT><SAMP>`tk´</SAMP> -<DD> -Turkmen. -<DT><SAMP>`tl´</SAMP> -<DD> -Tagalog. -<DT><SAMP>`tn´</SAMP> -<DD> -Tswana; Setswana. -<DT><SAMP>`to´</SAMP> -<DD> -Tonga (?). -<DT><SAMP>`tr´</SAMP> -<DD> -Turkish. -<DT><SAMP>`ts´</SAMP> -<DD> -Tsonga. -<DT><SAMP>`tt´</SAMP> -<DD> -Tatar. -<DT><SAMP>`tw´</SAMP> -<DD> -Twi. -<DT><SAMP>`ty´</SAMP> -<DD> -Tahitian. -<DT><SAMP>`ug´</SAMP> -<DD> -Uighur. -<DT><SAMP>`uk´</SAMP> -<DD> -Ukrainian. -<DT><SAMP>`ur´</SAMP> -<DD> -Urdu. -<DT><SAMP>`uz´</SAMP> -<DD> -Uzbek. -<DT><SAMP>`vi´</SAMP> -<DD> -Vietnamese. -<DT><SAMP>`vo´</SAMP> -<DD> -Volapük; Volapuk. -<DT><SAMP>`wa´</SAMP> -<DD> -Walloon. -<DT><SAMP>`wo´</SAMP> -<DD> -Wolof. -<DT><SAMP>`xh´</SAMP> -<DD> -Xhosa. -<DT><SAMP>`yi´</SAMP> -<DD> -Yiddish (formerly ji). -<DT><SAMP>`yo´</SAMP> -<DD> -Yoruba. -<DT><SAMP>`za´</SAMP> -<DD> -Zhuang. -<DT><SAMP>`zh´</SAMP> -<DD> -Chinese. -<DT><SAMP>`zu´</SAMP> -<DD> -Zulu. -</DL> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_14.html">previous</A>, <A HREF="gettext_16.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_16.html b/doc/gettext_16.html deleted file mode 100644 index e6affcd..0000000 --- a/doc/gettext_16.html +++ /dev/null @@ -1,749 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - B Country Codes</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_15.html">previous</A>, <A HREF="gettext_17.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC244" HREF="gettext_toc.html#TOC244">B Country Codes</A></H1> -<P> -<A NAME="IDX952"></A> -<A NAME="IDX953"></A> - -</P> -<P> -The ISO 3166 standard defines two character codes for many countries -and territories. All abbreviations for countries used in the Translation -Project should come from this standard. - -</P> -<DL COMPACT> - -<DT><SAMP>`AD´</SAMP> -<DD> -Andorra. -<DT><SAMP>`AE´</SAMP> -<DD> -United Arab Emirates. -<DT><SAMP>`AF´</SAMP> -<DD> -Afghanistan. -<DT><SAMP>`AG´</SAMP> -<DD> -Antigua and Barbuda. -<DT><SAMP>`AI´</SAMP> -<DD> -Anguilla. -<DT><SAMP>`AL´</SAMP> -<DD> -Albania. -<DT><SAMP>`AM´</SAMP> -<DD> -Armenia. -<DT><SAMP>`AN´</SAMP> -<DD> -Netherlands Antilles. -<DT><SAMP>`AO´</SAMP> -<DD> -Angola. -<DT><SAMP>`AQ´</SAMP> -<DD> -Antarctica. -<DT><SAMP>`AR´</SAMP> -<DD> -Argentina. -<DT><SAMP>`AS´</SAMP> -<DD> -Samoa (American). -<DT><SAMP>`AT´</SAMP> -<DD> -Austria. -<DT><SAMP>`AU´</SAMP> -<DD> -Australia. -<DT><SAMP>`AW´</SAMP> -<DD> -Aruba. -<DT><SAMP>`AZ´</SAMP> -<DD> -Azerbaijan. -<DT><SAMP>`BA´</SAMP> -<DD> -Bosnia and Herzegovina. -<DT><SAMP>`BB´</SAMP> -<DD> -Barbados. -<DT><SAMP>`BD´</SAMP> -<DD> -Bangladesh. -<DT><SAMP>`BE´</SAMP> -<DD> -Belgium. -<DT><SAMP>`BF´</SAMP> -<DD> -Burkina Faso. -<DT><SAMP>`BG´</SAMP> -<DD> -Bulgaria. -<DT><SAMP>`BH´</SAMP> -<DD> -Bahrain. -<DT><SAMP>`BI´</SAMP> -<DD> -Burundi. -<DT><SAMP>`BJ´</SAMP> -<DD> -Benin. -<DT><SAMP>`BM´</SAMP> -<DD> -Bermuda. -<DT><SAMP>`BN´</SAMP> -<DD> -Brunei. -<DT><SAMP>`BO´</SAMP> -<DD> -Bolivia. -<DT><SAMP>`BR´</SAMP> -<DD> -Brazil. -<DT><SAMP>`BS´</SAMP> -<DD> -Bahamas. -<DT><SAMP>`BT´</SAMP> -<DD> -Bhutan. -<DT><SAMP>`BV´</SAMP> -<DD> -Bouvet Island. -<DT><SAMP>`BW´</SAMP> -<DD> -Botswana. -<DT><SAMP>`BY´</SAMP> -<DD> -Belarus. -<DT><SAMP>`BZ´</SAMP> -<DD> -Belize. -<DT><SAMP>`CA´</SAMP> -<DD> -Canada. -<DT><SAMP>`CC´</SAMP> -<DD> -Cocos (Keeling) Islands. -<DT><SAMP>`CD´</SAMP> -<DD> -Congo (Dem. Rep.). -<DT><SAMP>`CF´</SAMP> -<DD> -Central African Rep.. -<DT><SAMP>`CG´</SAMP> -<DD> -Congo (Rep.). -<DT><SAMP>`CH´</SAMP> -<DD> -Switzerland. -<DT><SAMP>`CI´</SAMP> -<DD> -Cote d'Ivoire. -<DT><SAMP>`CK´</SAMP> -<DD> -Cook Islands. -<DT><SAMP>`CL´</SAMP> -<DD> -Chile. -<DT><SAMP>`CM´</SAMP> -<DD> -Cameroon. -<DT><SAMP>`CN´</SAMP> -<DD> -China. -<DT><SAMP>`CO´</SAMP> -<DD> -Colombia. -<DT><SAMP>`CR´</SAMP> -<DD> -Costa Rica. -<DT><SAMP>`CU´</SAMP> -<DD> -Cuba. -<DT><SAMP>`CV´</SAMP> -<DD> -Cape Verde. -<DT><SAMP>`CX´</SAMP> -<DD> -Christmas Island. -<DT><SAMP>`CY´</SAMP> -<DD> -Cyprus. -<DT><SAMP>`CZ´</SAMP> -<DD> -Czech Republic. -<DT><SAMP>`DE´</SAMP> -<DD> -Germany. -<DT><SAMP>`DJ´</SAMP> -<DD> -Djibouti. -<DT><SAMP>`DK´</SAMP> -<DD> -Denmark. -<DT><SAMP>`DM´</SAMP> -<DD> -Dominica. -<DT><SAMP>`DO´</SAMP> -<DD> -Dominican Republic. -<DT><SAMP>`DZ´</SAMP> -<DD> -Algeria. -<DT><SAMP>`EC´</SAMP> -<DD> -Ecuador. -<DT><SAMP>`EE´</SAMP> -<DD> -Estonia. -<DT><SAMP>`EG´</SAMP> -<DD> -Egypt. -<DT><SAMP>`EH´</SAMP> -<DD> -Western Sahara. -<DT><SAMP>`ER´</SAMP> -<DD> -Eritrea. -<DT><SAMP>`ES´</SAMP> -<DD> -Spain. -<DT><SAMP>`ET´</SAMP> -<DD> -Ethiopia. -<DT><SAMP>`FI´</SAMP> -<DD> -Finland. -<DT><SAMP>`FJ´</SAMP> -<DD> -Fiji. -<DT><SAMP>`FK´</SAMP> -<DD> -Falkland Islands. -<DT><SAMP>`FM´</SAMP> -<DD> -Micronesia. -<DT><SAMP>`FO´</SAMP> -<DD> -Faeroe Islands. -<DT><SAMP>`FR´</SAMP> -<DD> -France. -<DT><SAMP>`GA´</SAMP> -<DD> -Gabon. -<DT><SAMP>`GB´</SAMP> -<DD> -Britain (UK). -<DT><SAMP>`GD´</SAMP> -<DD> -Grenada. -<DT><SAMP>`GE´</SAMP> -<DD> -Georgia. -<DT><SAMP>`GF´</SAMP> -<DD> -French Guiana. -<DT><SAMP>`GH´</SAMP> -<DD> -Ghana. -<DT><SAMP>`GI´</SAMP> -<DD> -Gibraltar. -<DT><SAMP>`GL´</SAMP> -<DD> -Greenland. -<DT><SAMP>`GM´</SAMP> -<DD> -Gambia. -<DT><SAMP>`GN´</SAMP> -<DD> -Guinea. -<DT><SAMP>`GP´</SAMP> -<DD> -Guadeloupe. -<DT><SAMP>`GQ´</SAMP> -<DD> -Equatorial Guinea. -<DT><SAMP>`GR´</SAMP> -<DD> -Greece. -<DT><SAMP>`GS´</SAMP> -<DD> -South Georgia and the South Sandwich Islands. -<DT><SAMP>`GT´</SAMP> -<DD> -Guatemala. -<DT><SAMP>`GU´</SAMP> -<DD> -Guam. -<DT><SAMP>`GW´</SAMP> -<DD> -Guinea-Bissau. -<DT><SAMP>`GY´</SAMP> -<DD> -Guyana. -<DT><SAMP>`HK´</SAMP> -<DD> -Hong Kong. -<DT><SAMP>`HM´</SAMP> -<DD> -Heard Island and McDonald Islands. -<DT><SAMP>`HN´</SAMP> -<DD> -Honduras. -<DT><SAMP>`HR´</SAMP> -<DD> -Croatia. -<DT><SAMP>`HT´</SAMP> -<DD> -Haiti. -<DT><SAMP>`HU´</SAMP> -<DD> -Hungary. -<DT><SAMP>`ID´</SAMP> -<DD> -Indonesia. -<DT><SAMP>`IE´</SAMP> -<DD> -Ireland. -<DT><SAMP>`IL´</SAMP> -<DD> -Israel. -<DT><SAMP>`IN´</SAMP> -<DD> -India. -<DT><SAMP>`IO´</SAMP> -<DD> -British Indian Ocean Territory. -<DT><SAMP>`IQ´</SAMP> -<DD> -Iraq. -<DT><SAMP>`IR´</SAMP> -<DD> -Iran. -<DT><SAMP>`IS´</SAMP> -<DD> -Iceland. -<DT><SAMP>`IT´</SAMP> -<DD> -Italy. -<DT><SAMP>`JM´</SAMP> -<DD> -Jamaica. -<DT><SAMP>`JO´</SAMP> -<DD> -Jordan. -<DT><SAMP>`JP´</SAMP> -<DD> -Japan. -<DT><SAMP>`KE´</SAMP> -<DD> -Kenya. -<DT><SAMP>`KG´</SAMP> -<DD> -Kyrgyzstan. -<DT><SAMP>`KH´</SAMP> -<DD> -Cambodia. -<DT><SAMP>`KI´</SAMP> -<DD> -Kiribati. -<DT><SAMP>`KM´</SAMP> -<DD> -Comoros. -<DT><SAMP>`KN´</SAMP> -<DD> -St Kitts and Nevis. -<DT><SAMP>`KP´</SAMP> -<DD> -Korea (North). -<DT><SAMP>`KR´</SAMP> -<DD> -Korea (South). -<DT><SAMP>`KW´</SAMP> -<DD> -Kuwait. -<DT><SAMP>`KY´</SAMP> -<DD> -Cayman Islands. -<DT><SAMP>`KZ´</SAMP> -<DD> -Kazakhstan. -<DT><SAMP>`LA´</SAMP> -<DD> -Laos. -<DT><SAMP>`LB´</SAMP> -<DD> -Lebanon. -<DT><SAMP>`LC´</SAMP> -<DD> -St Lucia. -<DT><SAMP>`LI´</SAMP> -<DD> -Liechtenstein. -<DT><SAMP>`LK´</SAMP> -<DD> -Sri Lanka. -<DT><SAMP>`LR´</SAMP> -<DD> -Liberia. -<DT><SAMP>`LS´</SAMP> -<DD> -Lesotho. -<DT><SAMP>`LT´</SAMP> -<DD> -Lithuania. -<DT><SAMP>`LU´</SAMP> -<DD> -Luxembourg. -<DT><SAMP>`LV´</SAMP> -<DD> -Latvia. -<DT><SAMP>`LY´</SAMP> -<DD> -Libya. -<DT><SAMP>`MA´</SAMP> -<DD> -Morocco. -<DT><SAMP>`MC´</SAMP> -<DD> -Monaco. -<DT><SAMP>`MD´</SAMP> -<DD> -Moldova. -<DT><SAMP>`MG´</SAMP> -<DD> -Madagascar. -<DT><SAMP>`MH´</SAMP> -<DD> -Marshall Islands. -<DT><SAMP>`MK´</SAMP> -<DD> -Macedonia. -<DT><SAMP>`ML´</SAMP> -<DD> -Mali. -<DT><SAMP>`MM´</SAMP> -<DD> -Myanmar (Burma). -<DT><SAMP>`MN´</SAMP> -<DD> -Mongolia. -<DT><SAMP>`MO´</SAMP> -<DD> -Macao. -<DT><SAMP>`MP´</SAMP> -<DD> -Northern Mariana Islands. -<DT><SAMP>`MQ´</SAMP> -<DD> -Martinique. -<DT><SAMP>`MR´</SAMP> -<DD> -Mauritania. -<DT><SAMP>`MS´</SAMP> -<DD> -Montserrat. -<DT><SAMP>`MT´</SAMP> -<DD> -Malta. -<DT><SAMP>`MU´</SAMP> -<DD> -Mauritius. -<DT><SAMP>`MV´</SAMP> -<DD> -Maldives. -<DT><SAMP>`MW´</SAMP> -<DD> -Malawi. -<DT><SAMP>`MX´</SAMP> -<DD> -Mexico. -<DT><SAMP>`MY´</SAMP> -<DD> -Malaysia. -<DT><SAMP>`MZ´</SAMP> -<DD> -Mozambique. -<DT><SAMP>`NA´</SAMP> -<DD> -Namibia. -<DT><SAMP>`NC´</SAMP> -<DD> -New Caledonia. -<DT><SAMP>`NE´</SAMP> -<DD> -Niger. -<DT><SAMP>`NF´</SAMP> -<DD> -Norfolk Island. -<DT><SAMP>`NG´</SAMP> -<DD> -Nigeria. -<DT><SAMP>`NI´</SAMP> -<DD> -Nicaragua. -<DT><SAMP>`NL´</SAMP> -<DD> -Netherlands. -<DT><SAMP>`NO´</SAMP> -<DD> -Norway. -<DT><SAMP>`NP´</SAMP> -<DD> -Nepal. -<DT><SAMP>`NR´</SAMP> -<DD> -Nauru. -<DT><SAMP>`NU´</SAMP> -<DD> -Niue. -<DT><SAMP>`NZ´</SAMP> -<DD> -New Zealand. -<DT><SAMP>`OM´</SAMP> -<DD> -Oman. -<DT><SAMP>`PA´</SAMP> -<DD> -Panama. -<DT><SAMP>`PE´</SAMP> -<DD> -Peru. -<DT><SAMP>`PF´</SAMP> -<DD> -French Polynesia. -<DT><SAMP>`PG´</SAMP> -<DD> -Papua New Guinea. -<DT><SAMP>`PH´</SAMP> -<DD> -Philippines. -<DT><SAMP>`PK´</SAMP> -<DD> -Pakistan. -<DT><SAMP>`PL´</SAMP> -<DD> -Poland. -<DT><SAMP>`PM´</SAMP> -<DD> -St Pierre and Miquelon. -<DT><SAMP>`PN´</SAMP> -<DD> -Pitcairn. -<DT><SAMP>`PR´</SAMP> -<DD> -Puerto Rico. -<DT><SAMP>`PS´</SAMP> -<DD> -Palestine. -<DT><SAMP>`PT´</SAMP> -<DD> -Portugal. -<DT><SAMP>`PW´</SAMP> -<DD> -Palau. -<DT><SAMP>`PY´</SAMP> -<DD> -Paraguay. -<DT><SAMP>`QA´</SAMP> -<DD> -Qatar. -<DT><SAMP>`RE´</SAMP> -<DD> -Reunion. -<DT><SAMP>`RO´</SAMP> -<DD> -Romania. -<DT><SAMP>`RU´</SAMP> -<DD> -Russia. -<DT><SAMP>`RW´</SAMP> -<DD> -Rwanda. -<DT><SAMP>`SA´</SAMP> -<DD> -Saudi Arabia. -<DT><SAMP>`SB´</SAMP> -<DD> -Solomon Islands. -<DT><SAMP>`SC´</SAMP> -<DD> -Seychelles. -<DT><SAMP>`SD´</SAMP> -<DD> -Sudan. -<DT><SAMP>`SE´</SAMP> -<DD> -Sweden. -<DT><SAMP>`SG´</SAMP> -<DD> -Singapore. -<DT><SAMP>`SH´</SAMP> -<DD> -St Helena. -<DT><SAMP>`SI´</SAMP> -<DD> -Slovenia. -<DT><SAMP>`SJ´</SAMP> -<DD> -Svalbard and Jan Mayen. -<DT><SAMP>`SK´</SAMP> -<DD> -Slovakia. -<DT><SAMP>`SL´</SAMP> -<DD> -Sierra Leone. -<DT><SAMP>`SM´</SAMP> -<DD> -San Marino. -<DT><SAMP>`SN´</SAMP> -<DD> -Senegal. -<DT><SAMP>`SO´</SAMP> -<DD> -Somalia. -<DT><SAMP>`SR´</SAMP> -<DD> -Suriname. -<DT><SAMP>`ST´</SAMP> -<DD> -Sao Tome and Principe. -<DT><SAMP>`SV´</SAMP> -<DD> -El Salvador. -<DT><SAMP>`SY´</SAMP> -<DD> -Syria. -<DT><SAMP>`SZ´</SAMP> -<DD> -Swaziland. -<DT><SAMP>`TC´</SAMP> -<DD> -Turks and Caicos Is. -<DT><SAMP>`TD´</SAMP> -<DD> -Chad. -<DT><SAMP>`TF´</SAMP> -<DD> -French Southern and Antarctic Lands. -<DT><SAMP>`TG´</SAMP> -<DD> -Togo. -<DT><SAMP>`TH´</SAMP> -<DD> -Thailand. -<DT><SAMP>`TJ´</SAMP> -<DD> -Tajikistan. -<DT><SAMP>`TK´</SAMP> -<DD> -Tokelau. -<DT><SAMP>`TM´</SAMP> -<DD> -Turkmenistan. -<DT><SAMP>`TN´</SAMP> -<DD> -Tunisia. -<DT><SAMP>`TO´</SAMP> -<DD> -Tonga. -<DT><SAMP>`TP´</SAMP> -<DD> -East Timor. -<DT><SAMP>`TR´</SAMP> -<DD> -Turkey. -<DT><SAMP>`TT´</SAMP> -<DD> -Trinidad and Tobago. -<DT><SAMP>`TV´</SAMP> -<DD> -Tuvalu. -<DT><SAMP>`TW´</SAMP> -<DD> -Taiwan. -<DT><SAMP>`TZ´</SAMP> -<DD> -Tanzania. -<DT><SAMP>`UA´</SAMP> -<DD> -Ukraine. -<DT><SAMP>`UG´</SAMP> -<DD> -Uganda. -<DT><SAMP>`UM´</SAMP> -<DD> -US minor outlying islands. -<DT><SAMP>`US´</SAMP> -<DD> -United States. -<DT><SAMP>`UY´</SAMP> -<DD> -Uruguay. -<DT><SAMP>`UZ´</SAMP> -<DD> -Uzbekistan. -<DT><SAMP>`VA´</SAMP> -<DD> -Vatican City. -<DT><SAMP>`VC´</SAMP> -<DD> -St Vincent. -<DT><SAMP>`VE´</SAMP> -<DD> -Venezuela. -<DT><SAMP>`VG´</SAMP> -<DD> -Virgin Islands (UK). -<DT><SAMP>`VI´</SAMP> -<DD> -Virgin Islands (US). -<DT><SAMP>`VN´</SAMP> -<DD> -Vietnam. -<DT><SAMP>`VU´</SAMP> -<DD> -Vanuatu. -<DT><SAMP>`WF´</SAMP> -<DD> -Wallis and Futuna. -<DT><SAMP>`WS´</SAMP> -<DD> -Samoa (Western). -<DT><SAMP>`YE´</SAMP> -<DD> -Yemen. -<DT><SAMP>`YT´</SAMP> -<DD> -Mayotte. -<DT><SAMP>`YU´</SAMP> -<DD> -Yugoslavia. -<DT><SAMP>`ZA´</SAMP> -<DD> -South Africa. -<DT><SAMP>`ZM´</SAMP> -<DD> -Zambia. -<DT><SAMP>`ZW´</SAMP> -<DD> -Zimbabwe. -</DL> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_15.html">previous</A>, <A HREF="gettext_17.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_17.html b/doc/gettext_17.html deleted file mode 100644 index 1947cdb..0000000 --- a/doc/gettext_17.html +++ /dev/null @@ -1,66 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - Program Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_16.html">previous</A>, <A HREF="gettext_18.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC245" HREF="gettext_toc.html#TOC245">Program Index</A></H1> - -<P> -Jump to: -<A HREF="#pindex_a">a</A> -- -<A HREF="#pindex_g">g</A> -- -<A HREF="#pindex_m">m</A> -- -<A HREF="#pindex_n">n</A> -- -<A HREF="#pindex_x">x</A> -<P> -<H2><A NAME="pindex_a">a</A></H2> -<DIR> -<LI><A HREF="gettext_12.html#IDX902">autopoint</A> -</DIR> -<H2><A NAME="pindex_g">g</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX914">gettext</A>, <A HREF="gettext_13.html#IDX919">gettext</A> -<LI><A HREF="gettext_12.html#IDX869">gettextize</A> -</DIR> -<H2><A NAME="pindex_m">m</A></H2> -<DIR> -<LI><A HREF="gettext_7.html#IDX648">msgattrib</A> -<LI><A HREF="gettext_7.html#IDX431">msgcat</A> -<LI><A HREF="gettext_7.html#IDX637">msgcmp</A> -<LI><A HREF="gettext_7.html#IDX603">msgcomm</A> -<LI><A HREF="gettext_7.html#IDX470">msgconv</A> -<LI><A HREF="gettext_7.html#IDX687">msgen</A> -<LI><A HREF="gettext_7.html#IDX711">msgexec</A> -<LI><A HREF="gettext_7.html#IDX535">msgfilter</A> -<LI><A HREF="gettext_8.html#IDX726">msgfmt</A> -<LI><A HREF="gettext_7.html#IDX496">msggrep</A> -<LI><A HREF="gettext_5.html#IDX213">msginit</A> -<LI><A HREF="gettext_6.html#IDX242">msgmerge</A> -<LI><A HREF="gettext_8.html#IDX774">msgunfmt</A> -<LI><A HREF="gettext_7.html#IDX570">msguniq</A> -</DIR> -<H2><A NAME="pindex_n">n</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX915">ngettext</A>, <A HREF="gettext_13.html#IDX920">ngettext</A> -</DIR> -<H2><A NAME="pindex_x">x</A></H2> -<DIR> -<LI><A HREF="gettext_4.html#IDX150">xgettext</A> -</DIR> - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_16.html">previous</A>, <A HREF="gettext_18.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_18.html b/doc/gettext_18.html deleted file mode 100644 index 40b3ad2..0000000 --- a/doc/gettext_18.html +++ /dev/null @@ -1,456 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - Option Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_17.html">previous</A>, <A HREF="gettext_19.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC246" HREF="gettext_toc.html#TOC246">Option Index</A></H1> - -<P> -Jump to: -<A HREF="#opindex_-">-</A> -<P> -<H2><A NAME="opindex_-">-</A></H2> -<DIR> -<LI><A HREF="gettext_4.html#IDX174">--add-comments, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX674">--add-location, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX456">--add-location, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX623">--add-location, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX483">--add-location, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX698">--add-location, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX557">--add-location, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX524">--add-location, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX263">--add-location, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX590">--add-location, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX190">--add-location, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX765">--alignment, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX253">--backup, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX167">--c++, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX749">--check, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX757">--check-accelerators, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX755">--check-compatibility, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX753">--check-domain, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX750">--check-format, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX752">--check-header, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX664">--clear-fuzzy, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX666">--clear-obsolete, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX247">--compendium, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX872">--copy, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX202">--copyright-holder, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX183">--debug, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX157">--default-domain, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX653">--directory, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX438">--directory, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX641">--directory, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX609">--directory, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX474">--directory, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX691">--directory, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX721">--directory, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX541">--directory, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX730">--directory, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX500">--directory, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX245">--directory, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX575">--directory, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX155">--directory, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX506">--domain, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX907">--dry-run, <CODE>autopoint</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX878">--dry-run, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX172">--exclude-file, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX547">--expression, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX512">--extended-regexp, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX176">--extract-all, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX549">--file, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX518">--file, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX436">--files-from, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX607">--files-from, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX153">--files-from, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX514">--fixed-strings, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX905">--force, <CODE>autopoint</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX874">--force, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX669">--force-po, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX451">--force-po, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX618">--force-po, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX479">--force-po, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX694">--force-po, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX553">--force-po, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX521">--force-po, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX259">--force-po, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX791">--force-po, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX585">--force-po, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX185">--force-po, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX203">--foreign-user, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX168">--from-code, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX667">--fuzzy, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX908">--help, <CODE>autopoint</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX879">--help, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX684">--help, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX467">--help, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX645">--help, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX634">--help, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX493">--help, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX708">--help, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX723">--help, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX567">--help, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX768">--help, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX532">--help, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX228">--help, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX274">--help, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX802">--help, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX600">--help, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX209">--help, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX520">--ignore-case, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX671">--indent, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX453">--indent, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX620">--indent, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX481">--indent, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX696">--indent, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX554">--indent, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX522">--indent, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX261">--indent, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX793">--indent, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX587">--indent, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX187">--indent, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX719">--input, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX539">--input, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX218">--input, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX875">--intl, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX732">--java, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX778">--java, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX734">--java2, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX170">--join-existing, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX555">--keep-header, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX178">--keyword, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX164">--language, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX443">--less-than, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX613">--less-than, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX743">--locale, <CODE>msgfmt</CODE> option</A>, <A HREF="gettext_8.html#IDX746">--locale, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX222">--locale, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX785">--locale, <CODE>msgunfmt</CODE> option</A>, <A HREF="gettext_8.html#IDX787">--locale, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX504">--location, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX445">--more-than, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX615">--more-than, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX508">--msgid, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX510">--msgstr, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX205">--msgstr-prefix, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX207">--msgstr-suffix, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX643">--multi-domain, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX258">--multi-domain, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX876">--no-changelog, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX658">--no-fuzzy, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX766">--no-hash, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX672">--no-location, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX454">--no-location, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX621">--no-location, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX482">--no-location, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX697">--no-location, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX556">--no-location, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX523">--no-location, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX262">--no-location, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX588">--no-location, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX188">--no-location, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX660">--no-obsolete, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX223">--no-translator, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX678">--no-wrap, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX460">--no-wrap, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX627">--no-wrap, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX487">--no-wrap, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX702">--no-wrap, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX561">--no-wrap, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX528">--no-wrap, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX226">--no-wrap, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX267">--no-wrap, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX797">--no-wrap, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX594">--no-wrap, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX194">--no-wrap, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX668">--obsolete, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX632">--omit-header, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX200">--omit-header, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX659">--only-fuzzy, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX661">--only-obsolete, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX159">--output, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX161">--output-dir, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX655">--output-file, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX440">--output-file, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX611">--output-file, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX476">--output-file, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX693">--output-file, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX543">--output-file, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX738">--output-file, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX502">--output-file, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX220">--output-file, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX251">--output-file, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX790">--output-file, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX577">--output-file, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX551">--quiet, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX280">--quiet, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX516">--regexp=, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX579">--repeated, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX741">--resource, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX783">--resource, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX663">--set-fuzzy, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX665">--set-obsolete, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX552">--silent, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX281">--silent, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX682">--sort-by-file, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX465">--sort-by-file, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX631">--sort-by-file, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX491">--sort-by-file, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX706">--sort-by-file, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX565">--sort-by-file, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX530">--sort-by-file, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX272">--sort-by-file, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX598">--sort-by-file, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX199">--sort-by-file, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX680">--sort-output, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX462">--sort-output, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX629">--sort-output, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX489">--sort-output, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX704">--sort-output, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX563">--sort-output, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX529">--sort-output, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX269">--sort-output, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX799">--sort-output, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX596">--sort-output, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX196">--sort-output, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX771">--statistics, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX675">--strict, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX457">--strict, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX624">--strict, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX484">--strict, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX699">--strict, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX558">--strict, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX739">--strict, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX525">--strict, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX264">--strict, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX794">--strict, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX591">--strict, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX191">--strict, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX255">--suffix, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX735">--tcl, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX780">--tcl, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX449">--to-code, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX478">--to-code, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX583">--to-code, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX656">--translated, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX181">--trigraphs, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX447">--unique, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX617">--unique, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX581">--unique, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX657">--untranslated, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX249">--update, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX450">--use-first, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX584">--use-first, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX762">--use-fuzzy, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX773">--verbose, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX278">--verbose, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX806">--verbose, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX909">--version, <CODE>autopoint</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX880">--version, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX686">--version, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX469">--version, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX647">--version, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX636">--version, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX495">--version, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX710">--version, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX725">--version, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX569">--version, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX770">--version, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX534">--version, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX230">--version, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX276">--version, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX804">--version, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX602">--version, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX211">--version, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX677">--width, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX459">--width, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX626">--width, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX486">--width, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX701">--width, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX560">--width, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX527">--width, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX225">--width, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX266">--width, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX796">--width, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX593">--width, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX193">--width, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX442">-<, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX612">-<, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX444">->, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX614">->, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX764">-a, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX175">-a, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX871">-c, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX754">-C, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX748">-c, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX246">-C, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX166">-C, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX173">-c, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX906">-d, <CODE>autopoint</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX877">-d, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX652">-D, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX437">-D, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX640">-D, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX608">-D, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX473">-D, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX690">-D, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX720">-D, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX540">-D, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX729">-D, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX744">-d, <CODE>msgfmt</CODE> option</A>, <A HREF="gettext_8.html#IDX747">-d, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX499">-D, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX244">-D, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX788">-d, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX578">-d, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX574">-D, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX156">-d, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX154">-D, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX546">-e, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX515">-e, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX511">-E, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX904">-f, <CODE>autopoint</CODE> option</A> -<LI><A HREF="gettext_12.html#IDX873">-f, <CODE>gettextize</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX681">-F, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX464">-F, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX435">-f, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX606">-f, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX630">-F, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX490">-F, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX705">-F, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX548">-f, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX564">-F, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX761">-f, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX513">-F, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX517">-f, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX271">-F, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX597">-F, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX198">-F, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX152">-f, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX683">-h, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX466">-h, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX644">-h, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX633">-h, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX492">-h, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX707">-h, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX722">-h, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX566">-h, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX767">-h, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX531">-h, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX227">-h, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX273">-h, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX801">-h, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX599">-h, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX208">-h, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX670">-i, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX452">-i, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX619">-i, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX480">-i, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX695">-i, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX718">-i, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX538">-i, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX519">-i, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX217">-i, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX260">-i, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX792">-i, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX586">-i, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX186">-i, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX731">-j, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX777">-j, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX169">-j, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX507">-K, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX177">-k, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX742">-l, <CODE>msgfmt</CODE> option</A>, <A HREF="gettext_8.html#IDX745">-l, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX221">-l, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX784">-l, <CODE>msgunfmt</CODE> option</A>, <A HREF="gettext_8.html#IDX786">-l, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX163">-L, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX642">-m, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX505">-M, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX257">-m, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX206">-M, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX204">-m, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX673">-n, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX455">-n, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX622">-n, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX550">-n, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX503">-N, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX589">-n, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX189">-n, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX654">-o, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX439">-o, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX610">-o, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX475">-o, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX692">-o, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX542">-o, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX737">-o, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX501">-o, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX219">-o, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX250">-o, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX789">-o, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX576">-o, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX158">-o, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX160">-p, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX279">-q, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX740">-r, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX782">-r, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX679">-s, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX461">-s, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX628">-s, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX488">-s, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX703">-s, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX562">-s, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX268">-s, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX798">-s, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX595">-s, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX195">-s, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX448">-t, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX477">-t, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX509">-T, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX582">-t, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX180">-T, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX446">-u, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX616">-u, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX248">-U, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX580">-u, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX685">-V, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX468">-V, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX646">-V, <CODE>msgcmp</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX635">-V, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX494">-V, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX709">-V, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX724">-V, <CODE>msgexec</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX568">-V, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX772">-v, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX769">-V, <CODE>msgfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX533">-V, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX229">-V, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX275">-V, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX277">-v, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX805">-v, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX803">-V, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX601">-V, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX210">-V, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX676">-w, <CODE>msgattrib</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX458">-w, <CODE>msgcat</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX625">-w, <CODE>msgcomm</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX485">-w, <CODE>msgconv</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX700">-w, <CODE>msgen</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX559">-w, <CODE>msgfilter</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX526">-w, <CODE>msggrep</CODE> option</A> -<LI><A HREF="gettext_5.html#IDX224">-w, <CODE>msginit</CODE> option</A> -<LI><A HREF="gettext_6.html#IDX265">-w, <CODE>msgmerge</CODE> option</A> -<LI><A HREF="gettext_8.html#IDX795">-w, <CODE>msgunfmt</CODE> option</A> -<LI><A HREF="gettext_7.html#IDX592">-w, <CODE>msguniq</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX192">-w, <CODE>xgettext</CODE> option</A> -<LI><A HREF="gettext_4.html#IDX171">-x, <CODE>xgettext</CODE> option</A> -</DIR> - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_17.html">previous</A>, <A HREF="gettext_19.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_19.html b/doc/gettext_19.html deleted file mode 100644 index 1981ad2..0000000 --- a/doc/gettext_19.html +++ /dev/null @@ -1,51 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - Variable Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_18.html">previous</A>, <A HREF="gettext_20.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC247" HREF="gettext_toc.html#TOC247">Variable Index</A></H1> - -<P> -Jump to: -<A HREF="#vindex_l">l</A> -- -<A HREF="#vindex_m">m</A> -- -<A HREF="#vindex_t">t</A> -<P> -<H2><A NAME="vindex_l">l</A></H2> -<DIR> -<LI><A HREF="gettext_9.html#IDX821">LANG, environment variable</A>, <A HREF="gettext_10.html#IDX863">LANG, environment variable</A> -<LI><A HREF="gettext_10.html#IDX855">LANGUAGE, environment variable</A>, <A HREF="gettext_12.html#IDX886">LANGUAGE, environment variable</A> -<LI><A HREF="gettext_10.html#IDX856">LC_ALL, environment variable</A> -<LI><A HREF="gettext_10.html#IDX860">LC_COLLATE, environment variable</A> -<LI><A HREF="gettext_10.html#IDX857">LC_CTYPE, environment variable</A> -<LI><A HREF="gettext_10.html#IDX862">LC_MESSAGES, environment variable</A> -<LI><A HREF="gettext_10.html#IDX861">LC_MONETARY, environment variable</A> -<LI><A HREF="gettext_10.html#IDX858">LC_NUMERIC, environment variable</A> -<LI><A HREF="gettext_10.html#IDX859">LC_TIME, environment variable</A> -<LI><A HREF="gettext_9.html#IDX817">LINGUAS, environment variable</A> -</DIR> -<H2><A NAME="vindex_m">m</A></H2> -<DIR> -<LI><A HREF="gettext_7.html#IDX716">MSGEXEC_LOCATION, environment variable</A> -<LI><A HREF="gettext_7.html#IDX715">MSGEXEC_MSGID, environment variable</A> -</DIR> -<H2><A NAME="vindex_t">t</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX916">TEXTDOMAIN, environment variable</A>, <A HREF="gettext_13.html#IDX921">TEXTDOMAIN, environment variable</A> -<LI><A HREF="gettext_13.html#IDX917">TEXTDOMAINDIR, environment variable</A>, <A HREF="gettext_13.html#IDX922">TEXTDOMAINDIR, environment variable</A> -</DIR> - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_18.html">previous</A>, <A HREF="gettext_20.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_2.html b/doc/gettext_2.html deleted file mode 100644 index bb19ddf..0000000 --- a/doc/gettext_2.html +++ /dev/null @@ -1,788 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 2 PO Files and PO Mode Basics</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_1.html">previous</A>, <A HREF="gettext_3.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC7" HREF="gettext_toc.html#TOC7">2 PO Files and PO Mode Basics</A></H1> - -<P> -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 stresses -the format of PO files, and contains a PO mode starter. PO mode -description is spread throughout this manual instead of being concentrated -in one place. Here we present only the basics of PO mode. - -</P> - - - -<H2><A NAME="SEC8" HREF="gettext_toc.html#TOC8">2.1 Completing GNU <CODE>gettext</CODE> Installation</A></H2> - -<P> -<A NAME="IDX39"></A> -<A NAME="IDX40"></A> -Once you have received, unpacked, configured and compiled the GNU -<CODE>gettext</CODE> distribution, the <SAMP>`make install´</SAMP> 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> -<P> -<A NAME="IDX41"></A> -<A NAME="IDX42"></A> -During the installation of the PO mode, you might want to modify your -file <TT>`.emacs´</TT>, once and for all, so it contains a few lines looking -like: - -</P> - -<PRE> -(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 <TT>`.po´</TT> -file, or any file having the string <SAMP>`.po.´</SAMP> within its name, -Emacs loads <TT>`po-mode.elc´</TT> (or <TT>`po-mode.el´</TT>) 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> -<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: - -</P> - -<PRE> -(modify-coding-system-alist 'file "\\.po\\'\\|\\.po\\." - 'po-find-file-coding-system) -(autoload 'po-find-file-coding-system "po-mode") -</PRE> - -<P> -to your <TT>`.emacs´</TT> file. If, with this, you still see boxes instead -of international characters, try a different font set (via Shift Mouse -button 1). - -</P> - - -<H2><A NAME="SEC9" HREF="gettext_toc.html#TOC9">2.2 The Format of PO Files</A></H2> -<P> -<A NAME="IDX43"></A> -<A NAME="IDX44"></A> - -</P> -<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 <EM>entry</EM> has the following schematic -structure: - -</P> - -<PRE> -<VAR>white-space</VAR> -# <VAR>translator-comments</VAR> -#. <VAR>automatic-comments</VAR> -#: <VAR>reference</VAR>... -#, <VAR>flag</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> -<P> -A simple entry can look like this: - -</P> - -<PRE> -#: lib/error.c:116 -msgid "Unknown system error" -msgstr "Error desconegut del sistema" -</PRE> - -<P> -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 <KBD>#</KBD>. There are two kinds of comments: those which have -some white space immediately following the <KBD>#</KBD>, which comments are -created and maintained exclusively by the translator, and those which -have some non-white character just after the <KBD>#</KBD>, which comments -are created and maintained automatically by GNU <CODE>gettext</CODE> tools. -All comments, of either kind, are optional. - -</P> -<P> -<A NAME="IDX45"></A> -<A NAME="IDX46"></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 <KBD>"</KBD> -delimiters and <KBD>\</KBD> 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> -<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> -<P> -The comment lines beginning with <KBD>#,</KBD> 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: - -</P> -<DL COMPACT> - -<DT><KBD>fuzzy</KBD> -<DD> -<A NAME="IDX47"></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 <KBD>fuzzy</KBD> 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 section <A HREF="gettext_6.html#SEC47">6.3 Fuzzy Entries</A>. - -<DT><KBD>c-format</KBD> -<DD> -<A NAME="IDX48"></A> -<DT><KBD>no-c-format</KBD> -<DD> -<A NAME="IDX49"></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 changes would be thrown away again as -soon as the <CODE>xgettext</CODE> program generates a new template file. - -In case the <KBD>c-format</KBD> flag is given for a string the <CODE>msgfmt</CODE> -does some more tests to check to validity of the translation. -See section <A HREF="gettext_8.html#SEC120">8.1 Invoking the <CODE>msgfmt</CODE> Program</A>. - -</DL> - -<P> -<A NAME="IDX50"></A> -<A NAME="IDX51"></A> -A different kind of entries is used for translations which involve -plural forms. - -</P> - -<PRE> -<VAR>white-space</VAR> -# <VAR>translator-comments</VAR> -#. <VAR>automatic-comments</VAR> -#: <VAR>reference</VAR>... -#, <VAR>flag</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: - -</P> - -<PRE> -#: 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> -<A NAME="IDX52"></A> -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 PO mode is unable to take action on those lines. By using the -PO mode function <KBD>M-x po-normalize</KBD>, the translator may get -rid of those spurious lines. See section <A HREF="gettext_2.html#SEC12">2.5 Normalizing Strings in Entries</A>. - -</P> -<P> -The remainder of this section may be safely skipped by those using -PO mode, 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 -not having Emacs handy should carefully continue reading on. - -</P> -<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: - -</P> - -<PRE> -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> -In this example, the empty string is used on the first line, to -allow better alignment of the <KBD>H</KBD> from the word <SAMP>`Here´</SAMP> -over the <KBD>f</KBD> from the word <SAMP>`for´</SAMP>. 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 <SAMP>`Here´</SAMP> was -promoted on the first line, right after <CODE>msgid</CODE>.<A NAME="DOCF2" HREF="gettext_foot.html#FOOT2">(2)</A> It was not really necessary -either to switch between the two last quoted strings immediately after -the newline <SAMP>`\n´</SAMP>, the switch could have occurred after <EM>any</EM> -other character, we just did it this way because it is neater. - -</P> -<P> -<A NAME="IDX53"></A> -One should carefully distinguish between end of lines marked as -<SAMP>`\n´</SAMP> <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> -<P> -<A NAME="IDX54"></A> -Outside strings, white lines and comments may be used freely. -Comments start at the beginning of a line with <SAMP>`#´</SAMP> and extend -until the end of the PO file line. Comments written by translators -should have the initial <SAMP>`#´</SAMP> immediately followed by some white -space. If the <SAMP>`#´</SAMP> 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>. - -</P> - - -<H2><A NAME="SEC10" HREF="gettext_toc.html#TOC10">2.3 Main PO mode Commands</A></H2> - -<P> -<A NAME="IDX55"></A> -<A NAME="IDX56"></A> -After setting up Emacs with something similar to the lines in -section <A HREF="gettext_2.html#SEC8">2.1 Completing GNU <CODE>gettext</CODE> 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> -<P> -When PO mode is active in a window, the letters <SAMP>`PO´</SAMP> 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 <SAMP>`132t+3f+10u+2o´</SAMP> would tell the translator that the -PO mode contains 132 translated entries (see section <A HREF="gettext_6.html#SEC46">6.2 Translated Entries</A>, -3 fuzzy entries (see section <A HREF="gettext_6.html#SEC47">6.3 Fuzzy Entries</A>), 10 untranslated entries -(see section <A HREF="gettext_6.html#SEC48">6.4 Untranslated Entries</A>) and 2 obsolete entries (see section <A HREF="gettext_6.html#SEC49">6.5 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 -<SAMP>`145t´</SAMP> for the counters. - -</P> -<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. - -</P> -<DL COMPACT> - -<DT><KBD>_</KBD> -<DD> -<A NAME="IDX57"></A> -Undo last modification to the PO file (<CODE>po-undo</CODE>). - -<DT><KBD>Q</KBD> -<DD> -<A NAME="IDX58"></A> -Quit processing and save the PO file (<CODE>po-quit</CODE>). - -<DT><KBD>q</KBD> -<DD> -<A NAME="IDX59"></A> -Quit processing, possibly after confirmation (<CODE>po-confirm-and-quit</CODE>). - -<DT><KBD>0</KBD> -<DD> -<A NAME="IDX60"></A> -Temporary leave the PO file window (<CODE>po-other-window</CODE>). - -<DT><KBD>?</KBD> -<DD> -<DT><KBD>h</KBD> -<DD> -<A NAME="IDX61"></A> -<A NAME="IDX62"></A> -Show help about PO mode (<CODE>po-help</CODE>). - -<DT><KBD>=</KBD> -<DD> -<A NAME="IDX63"></A> -Give some PO file statistics (<CODE>po-statistics</CODE>). - -<DT><KBD>V</KBD> -<DD> -<A NAME="IDX64"></A> -Batch validate the format of the whole PO file (<CODE>po-validate</CODE>). - -</DL> - -<P> -<A NAME="IDX65"></A> -<A NAME="IDX66"></A> -The command <KBD>_</KBD> (<CODE>po-undo</CODE>) interfaces to the Emacs -<EM>undo</EM> facility. See section `Undoing Changes' in <CITE>The Emacs Editor</CITE>. Each time <KBD>U</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><KBD>RET</KBD></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> -<P> -<A NAME="IDX67"></A> -<A NAME="IDX68"></A> -<A NAME="IDX69"></A> -<A NAME="IDX70"></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 k</KBD> (<CODE>kill-buffer</CODE>) is not the tidiest way to proceed. - -</P> -<P> -<A NAME="IDX71"></A> -<A NAME="IDX72"></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> -<P> -<A NAME="IDX73"></A> -<A NAME="IDX74"></A> -<A NAME="IDX75"></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> -<P> -<A NAME="IDX76"></A> -<A NAME="IDX77"></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> -<P> -<A NAME="IDX78"></A> -<A NAME="IDX79"></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> -<P> -<A NAME="IDX80"></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 <SAMP>`*compilation*´</SAMP> 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. - -</P> - - -<H2><A NAME="SEC11" HREF="gettext_toc.html#TOC11">2.4 Entry Positioning</A></H2> - -<P> -<A NAME="IDX81"></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> -<P> -<A NAME="IDX82"></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>): - -</P> -<DL COMPACT> - -<DT><KBD>.</KBD> -<DD> -<A NAME="IDX83"></A> -Redisplay the current entry (<CODE>po-current-entry</CODE>). - -<DT><KBD>n</KBD> -<DD> -<A NAME="IDX84"></A> -Select the entry after the current one (<CODE>po-next-entry</CODE>). - -<DT><KBD>p</KBD> -<DD> -<A NAME="IDX85"></A> -Select the entry before the current one (<CODE>po-previous-entry</CODE>). - -<DT><KBD><</KBD> -<DD> -<A NAME="IDX86"></A> -Select the first entry in the PO file (<CODE>po-first-entry</CODE>). - -<DT><KBD>></KBD> -<DD> -<A NAME="IDX87"></A> -Select the last entry in the PO file (<CODE>po-last-entry</CODE>). - -<DT><KBD>m</KBD> -<DD> -<A NAME="IDX88"></A> -Record the location of the current entry for later use -(<CODE>po-push-location</CODE>). - -<DT><KBD>r</KBD> -<DD> -<A NAME="IDX89"></A> -Return to a previously saved entry location (<CODE>po-pop-location</CODE>). - -<DT><KBD>x</KBD> -<DD> -<A NAME="IDX90"></A> -Exchange the current entry location with the previously saved one -(<CODE>po-exchange-location</CODE>). - -</DL> - -<P> -<A NAME="IDX91"></A> -<A NAME="IDX92"></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> -<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> -<P> -<A NAME="IDX93"></A> -<A NAME="IDX94"></A> -<A NAME="IDX95"></A> -<A NAME="IDX96"></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> -<P> -<A NAME="IDX97"></A> -<A NAME="IDX98"></A> -<A NAME="IDX99"></A> -<A NAME="IDX100"></A> -The commands <KBD><</KBD> (<CODE>po-first-entry</CODE>) and <KBD>></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 -<SAMP>`After last entry´</SAMP>. Moreover, the commands <KBD><</KBD> and <KBD>></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 section <A HREF="gettext_3.html#SEC17">3.4 Marking Translatable Strings</A>. - -</P> -<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> -<P> -<A NAME="IDX101"></A> -<A NAME="IDX102"></A> -<A NAME="IDX103"></A> -<A NAME="IDX104"></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> -<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> -<P> -<A NAME="IDX105"></A> -<A NAME="IDX106"></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. - -</P> - - -<H2><A NAME="SEC12" HREF="gettext_toc.html#TOC12">2.5 Normalizing Strings in Entries</A></H2> -<P> -<A NAME="IDX107"></A> - -</P> -<P> -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> -<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> -<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> -<P> -<A NAME="IDX108"></A> -<DL COMPACT> - -<DT><KBD>M-x po-normalize</KBD> -<DD> -<A NAME="IDX109"></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> -<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&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> -<P> -<A NAME="IDX110"></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> -<P> -<A NAME="IDX111"></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 <SAMP>`[^\n]\n+[^\n]´</SAMP>. So, we would have: - -</P> - -<PRE> -msgstr "\n\nHello, world!\n\n\n" -</PRE> - -<P> -but, replacing the space by a newline, this becomes: - -</P> - -<PRE> -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> -> 1, the <VAR>n</VAR>-1'th last newlines would go together on a separate -string), so making the previous example appear: - -</P> - -<PRE> -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. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_1.html">previous</A>, <A HREF="gettext_3.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_20.html b/doc/gettext_20.html deleted file mode 100644 index 7531c2a..0000000 --- a/doc/gettext_20.html +++ /dev/null @@ -1,118 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - PO Mode Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_19.html">previous</A>, <A HREF="gettext_21.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC248" HREF="gettext_toc.html#TOC248">PO Mode Index</A></H1> - -<P> -Jump to: -<A HREF="#emindex_.">.</A> -- -<A HREF="#emindex_a">a</A> -- -<A HREF="#emindex_c">c</A> -- -<A HREF="#emindex_e">e</A> -- -<A HREF="#emindex_f">f</A> -- -<A HREF="#emindex_i">i</A> -- -<A HREF="#emindex_l">l</A> -- -<A HREF="#emindex_m">m</A> -- -<A HREF="#emindex_o">o</A> -- -<A HREF="#emindex_p">p</A> -- -<A HREF="#emindex_s">s</A> -- -<A HREF="#emindex_t">t</A> -- -<A HREF="#emindex_u">u</A> -<P> -<H2><A NAME="emindex_.">.</A></H2> -<DIR> -<LI><A HREF="gettext_2.html#IDX41"><TT>`.emacs´</TT> customizations</A> -</DIR> -<H2><A NAME="emindex_a">a</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX400">auxiliary PO file</A> -</DIR> -<H2><A NAME="emindex_c">c</A></H2> -<DIR> -<LI><A HREF="gettext_2.html#IDX56">commands</A> -<LI><A HREF="gettext_6.html#IDX330">comment out PO file entry</A> -<LI><A HREF="gettext_6.html#IDX382">consulting program sources</A> -<LI><A HREF="gettext_6.html#IDX398">consulting translations to other languages</A> -<LI><A HREF="gettext_2.html#IDX81">current entry of a PO file</A> -<LI><A HREF="gettext_6.html#IDX346">cut and paste for translated strings</A> -</DIR> -<H2><A NAME="emindex_e">e</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX355">editing comments</A> -<LI><A HREF="gettext_6.html#IDX380">editing multiple entries</A> -<LI><A HREF="gettext_6.html#IDX332">editing translations</A> -<LI><A HREF="gettext_3.html#IDX137"><CODE>etags</CODE>, using for marking strings</A> -<LI><A HREF="gettext_6.html#IDX373">exiting PO subedit</A> -</DIR> -<H2><A NAME="emindex_f">f</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX385">find source fragment for a PO file entry</A> -</DIR> -<H2><A NAME="emindex_i">i</A></H2> -<DIR> -<LI><A HREF="gettext_2.html#IDX42">installing PO mode</A> -</DIR> -<H2><A NAME="emindex_l">l</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX383">looking at the source to aid translation</A> -</DIR> -<H2><A NAME="emindex_m">m</A></H2> -<DIR> -<LI><A HREF="gettext_3.html#IDX136">marking strings for translation</A> -<LI><A HREF="gettext_6.html#IDX294">moving by fuzzy entries</A> -<LI><A HREF="gettext_6.html#IDX319">moving by obsolete entries</A> -<LI><A HREF="gettext_6.html#IDX283">moving by translated entries</A> -<LI><A HREF="gettext_6.html#IDX308">moving by untranslated entries</A> -<LI><A HREF="gettext_2.html#IDX82">moving through a PO file</A> -</DIR> -<H2><A NAME="emindex_o">o</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX329">obsolete active entry</A> -</DIR> -<H2><A NAME="emindex_p">p</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX381">pending subedits</A> -</DIR> -<H2><A NAME="emindex_s">s</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX345">starting a string translation</A> -<LI><A HREF="gettext_2.html#IDX108">string normalization in entries</A> -<LI><A HREF="gettext_6.html#IDX369">subedit minor mode</A> -</DIR> -<H2><A NAME="emindex_t">t</A></H2> -<DIR> -<LI><A HREF="gettext_3.html#IDX138"><TT>`TAGS´</TT>, and marking translatable strings</A> -</DIR> -<H2><A NAME="emindex_u">u</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX384">use the source, Luke</A> -<LI><A HREF="gettext_6.html#IDX353">using obsolete translations to make new entries</A> -<LI><A HREF="gettext_6.html#IDX414">using translation compendia</A> -</DIR> - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_19.html">previous</A>, <A HREF="gettext_21.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_21.html b/doc/gettext_21.html deleted file mode 100644 index 5595e6b..0000000 --- a/doc/gettext_21.html +++ /dev/null @@ -1,30 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - Autoconf Macro Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_20.html">previous</A>, <A HREF="gettext_22.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC249" HREF="gettext_toc.html#TOC249">Autoconf Macro Index</A></H1> - -<P> -Jump to: -<A HREF="#amindex_a">a</A> -<P> -<H2><A NAME="amindex_a">a</A></H2> -<DIR> -<LI><A HREF="gettext_12.html#IDX897">AM_GNU_GETTEXT</A> -<LI><A HREF="gettext_12.html#IDX899">AM_GNU_GETTEXT_VERSION</A> -<LI><A HREF="gettext_12.html#IDX900">AM_ICONV</A> -</DIR> - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_20.html">previous</A>, <A HREF="gettext_22.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_22.html b/doc/gettext_22.html deleted file mode 100644 index 440947f..0000000 --- a/doc/gettext_22.html +++ /dev/null @@ -1,418 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - General Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_21.html">previous</A>, next, last section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC250" HREF="gettext_toc.html#TOC250">General Index</A></H1> - -<P> -Jump to: -<A HREF="#cindex__">_</A> -- -<A HREF="#cindex_a">a</A> -- -<A HREF="#cindex_b">b</A> -- -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_d">d</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_f">f</A> -- -<A HREF="#cindex_g">g</A> -- -<A HREF="#cindex_h">h</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_j">j</A> -- -<A HREF="#cindex_k">k</A> -- -<A HREF="#cindex_l">l</A> -- -<A HREF="#cindex_m">m</A> -- -<A HREF="#cindex_n">n</A> -- -<A HREF="#cindex_o">o</A> -- -<A HREF="#cindex_p">p</A> -- -<A HREF="#cindex_q">q</A> -- -<A HREF="#cindex_r">r</A> -- -<A HREF="#cindex_s">s</A> -- -<A HREF="#cindex_t">t</A> -- -<A HREF="#cindex_u">u</A> -- -<A HREF="#cindex_v">v</A> -- -<A HREF="#cindex_w">w</A> -- -<A HREF="#cindex_x">x</A> -- -<A HREF="#cindex_y">y</A> -<P> -<H2><A NAME="cindex__">_</A></H2> -<DIR> -<LI><A HREF="gettext_3.html#IDX135"><CODE>_</CODE>, a macro to mark strings for translation</A> -<LI><A HREF="gettext_10.html#IDX864"><CODE>_nl_msg_cat_cntr</CODE></A> -</DIR> -<H2><A NAME="cindex_a">a</A></H2> -<DIR> -<LI><A HREF="gettext_9.html#IDX814"><TT>`ABOUT-NLS´</TT> file</A> -<LI><A HREF="gettext_12.html#IDX890"><TT>`acconfig.h´</TT> file</A> -<LI><A HREF="gettext_6.html#IDX419">accumulating translations</A> -<LI><A HREF="gettext_12.html#IDX889"><TT>`aclocal.m4´</TT> file</A> -<LI><A HREF="gettext_4.html#IDX179">adding keywords, <CODE>xgettext</CODE></A> -<LI><A HREF="gettext_3.html#IDX126">ambiguities</A> -<LI><A HREF="gettext_7.html#IDX537">apply a filter to translations</A> -<LI><A HREF="gettext_7.html#IDX713">apply command to all translations in a catalog</A> -<LI><A HREF="gettext_7.html#IDX651">attribute manipulation</A> -<LI><A HREF="gettext_6.html#IDX293">attribute, fuzzy</A> -<LI><A HREF="gettext_6.html#IDX292">attributes of a PO file entry</A> -<LI><A HREF="gettext_7.html#IDX430">attributes, manipulating</A> -<LI><A HREF="gettext_12.html#IDX896">autoconf macros for <CODE>gettext</CODE></A> -<LI><A HREF="gettext_12.html#IDX903"><CODE>autopoint</CODE> program, usage</A> -<LI><A HREF="gettext_6.html#IDX399">auxiliary PO file</A> -<LI><A HREF="gettext_9.html#IDX813">available translations</A> -<LI><A HREF="gettext_13.html#IDX933">awk</A> -</DIR> -<H2><A NAME="cindex_b">b</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX254">backup old file, and <CODE>msgmerge</CODE> program</A> -<LI><A HREF="gettext_13.html#IDX918">bash</A> -<LI><A HREF="gettext_14.html#IDX949">bibliography</A> -<LI><A HREF="gettext_1.html#IDX30">big picture</A> -<LI><A HREF="gettext_10.html#IDX836">bind_textdomain_codeset</A> -<LI><A HREF="gettext_1.html#IDX4">bug report address</A> -</DIR> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX912">C and C-like languages</A> -<LI><A HREF="gettext_4.html#IDX182">C trigraphs</A> -<LI><A HREF="gettext_7.html#IDX717">catalog encoding and <CODE>msgexec</CODE> output</A> -<LI><A HREF="gettext_10.html#IDX826"><CODE>catclose</CODE>, a <CODE>catgets</CODE> function</A> -<LI><A HREF="gettext_10.html#IDX822"><CODE>catgets</CODE>, X/Open specification</A> -<LI><A HREF="gettext_10.html#IDX825"><CODE>catgets</CODE>, a <CODE>catgets</CODE> function</A> -<LI><A HREF="gettext_10.html#IDX824"><CODE>catopen</CODE>, a <CODE>catgets</CODE> function</A> -<LI><A HREF="gettext_1.html#IDX17">character encoding</A> -<LI><A HREF="gettext_10.html#IDX834">charset conversion at runtime</A> -<LI><A HREF="gettext_5.html#IDX234">charset of PO files</A> -<LI><A HREF="gettext_8.html#IDX751">check format strings</A> -<LI><A HREF="gettext_7.html#IDX428">checking of translations</A> -<LI><A HREF="gettext_13.html#IDX926">clisp</A> -<LI><A HREF="gettext_13.html#IDX927">clisp C sources</A> -<LI><A HREF="gettext_1.html#IDX15">codeset</A> -<LI><A HREF="gettext_2.html#IDX54">comments in PO files</A> -<LI><A HREF="gettext_13.html#IDX924">Common Lisp</A> -<LI><A HREF="gettext_7.html#IDX639">compare PO files</A> -<LI><A HREF="gettext_10.html#IDX851">comparison of interfaces</A> -<LI><A HREF="gettext_8.html#IDX756">compatibility with X/Open <CODE>msgfmt</CODE></A> -<LI><A HREF="gettext_6.html#IDX415">compendium</A> -<LI><A HREF="gettext_6.html#IDX417">compendium, creating</A> -<LI><A HREF="gettext_7.html#IDX433">concatenate PO files</A> -<LI><A HREF="gettext_6.html#IDX418">concatenating PO files into a compendium</A> -<LI><A HREF="gettext_3.html#IDX131">concatenation of strings</A> -<LI><A HREF="gettext_12.html#IDX891"><TT>`config.h.in´</TT> file</A> -<LI><A HREF="gettext_8.html#IDX776">convert binary message catalog into PO file</A> -<LI><A HREF="gettext_7.html#IDX472">convert translations to a different encoding</A> -<LI><A HREF="gettext_12.html#IDX866">converting a package to use <CODE>gettext</CODE></A> -<LI><A HREF="gettext_16.html#IDX952">country codes</A> -<LI><A HREF="gettext_5.html#IDX215">create new PO file</A> -<LI><A HREF="gettext_5.html#IDX212">creating a new PO file</A> -<LI><A HREF="gettext_6.html#IDX416">creating compendia</A> -<LI><A HREF="gettext_1.html#IDX19">currency symbols</A> -</DIR> -<H2><A NAME="cindex_d">d</A></H2> -<DIR> -<LI><A HREF="gettext_1.html#IDX21">date format</A> -<LI><A HREF="gettext_10.html#IDX840">dcngettext</A> -<LI><A HREF="gettext_4.html#IDX184">debugging messages marked as format strings</A> -<LI><A HREF="gettext_7.html#IDX426">dialect</A> -<LI><A HREF="gettext_12.html#IDX894">disabling NLS</A> -<LI><A HREF="gettext_10.html#IDX839">dngettext</A> -<LI><A HREF="gettext_10.html#IDX831">domain ambiguities</A> -<LI><A HREF="gettext_7.html#IDX429">duplicate elimination</A> -<LI><A HREF="gettext_7.html#IDX573">duplicate removal</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX354">editing comments in PO files</A> -<LI><A HREF="gettext_6.html#IDX331">editing translations</A> -<LI><A HREF="gettext_13.html#IDX928">Emacs Lisp</A> -<LI><A HREF="gettext_1.html#IDX16">encoding</A> -<LI><A HREF="gettext_7.html#IDX425">encoding conversion</A> -<LI><A HREF="gettext_10.html#IDX835">encoding conversion at runtime</A> -<LI><A HREF="gettext_5.html#IDX238">encoding for your language</A> -<LI><A HREF="gettext_5.html#IDX236">encoding list</A> -<LI><A HREF="gettext_5.html#IDX233">encoding of PO files</A> -<LI><A HREF="gettext_1.html#IDX38">evolution of packages</A> -<LI><A HREF="gettext_6.html#IDX420">extracting parts of a PO file into a compendium</A> -</DIR> -<H2><A NAME="cindex_f">f</A></H2> -<DIR> -<LI><A HREF="gettext_8.html#IDX808">file format, <TT>`.mo´</TT></A> -<LI><A HREF="gettext_2.html#IDX44">file format, <TT>`.po´</TT></A> -<LI><A HREF="gettext_1.html#IDX28">files, <TT>`.po´</TT> and <TT>`.mo´</TT></A> -<LI><A HREF="gettext_1.html#IDX37">files, <TT>`.pot´</TT></A> -<LI><A HREF="gettext_7.html#IDX650">filter messages according to attributes</A> -<LI><A HREF="gettext_7.html#IDX605">find common messages</A> -<LI><A HREF="gettext_8.html#IDX763">force use of fuzzy entries</A> -<LI><A HREF="gettext_3.html#IDX145">format strings</A> -<LI><A HREF="gettext_13.html#IDX936">Free Pascal</A> -<LI><A HREF="gettext_6.html#IDX291">fuzzy entries</A> -</DIR> -<H2><A NAME="cindex_g">g</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX934">gawk</A> -<LI><A HREF="gettext_8.html#IDX728">generate binary message catalog from PO file</A> -<LI><A HREF="gettext_7.html#IDX689">generate translation catalog in English</A> -<LI><A HREF="gettext_12.html#IDX881"><CODE>gettext</CODE> files</A> -<LI><A HREF="gettext_2.html#IDX40"><CODE>gettext</CODE> installation</A> -<LI><A HREF="gettext_10.html#IDX829"><CODE>gettext</CODE> interface</A> -<LI><A HREF="gettext_10.html#IDX828"><CODE>gettext</CODE>, a programmer's view</A> -<LI><A HREF="gettext_12.html#IDX892"><TT>`gettext.h´</TT> file</A> -<LI><A HREF="gettext_10.html#IDX850"><CODE>gettext</CODE> vs <CODE>catgets</CODE></A> -<LI><A HREF="gettext_12.html#IDX870"><CODE>gettextize</CODE> program, usage</A> -<LI><A HREF="gettext_10.html#IDX845">GUI programs</A> -</DIR> -<H2><A NAME="cindex_h">h</A></H2> -<DIR> -<LI><A HREF="gettext_8.html#IDX810">hash table, inside MO files</A> -<LI><A HREF="gettext_1.html#IDX2">he, she, and they</A> -<LI><A HREF="gettext_5.html#IDX231">header entry of a PO file</A> -<LI><A HREF="gettext_3.html#IDX129">help option</A> -<LI><A HREF="gettext_14.html#IDX947">history of GNU <CODE>gettext</CODE></A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="gettext_1.html#IDX6">i18n</A> -<LI><A HREF="gettext_2.html#IDX110">importing PO files</A> -<LI><A HREF="gettext_1.html#IDX33">include file <TT>`libintl.h´</TT></A>, <A HREF="gettext_3.html#IDX113">include file <TT>`libintl.h´</TT></A>, <A HREF="gettext_10.html#IDX852">include file <TT>`libintl.h´</TT></A>, <A HREF="gettext_12.html#IDX895">include file <TT>`libintl.h´</TT></A> -<LI><A HREF="gettext_3.html#IDX114">initialization</A> -<LI><A HREF="gettext_5.html#IDX216">initialize new PO file</A> -<LI><A HREF="gettext_6.html#IDX421">initialize translations from a compendium</A> -<LI><A HREF="gettext_2.html#IDX39">installing <CODE>gettext</CODE></A> -<LI><A HREF="gettext_10.html#IDX823">interface to <CODE>catgets</CODE></A> -<LI><A HREF="gettext_1.html#IDX8">internationalization</A> -<LI><A HREF="gettext_3.html#IDX132"><CODE>inttypes.h</CODE></A> -<LI><A HREF="gettext_16.html#IDX953">ISO 3166</A> -<LI><A HREF="gettext_15.html#IDX951">ISO 639</A> -</DIR> -<H2><A NAME="cindex_j">j</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX931">Java</A> -<LI><A HREF="gettext_8.html#IDX733">Java mode, and <CODE>msgfmt</CODE> program</A> -<LI><A HREF="gettext_8.html#IDX779">Java mode, and <CODE>msgunfmt</CODE> program</A> -<LI><A HREF="gettext_3.html#IDX133">Java, string concatenation</A> -</DIR> -<H2><A NAME="cindex_k">k</A></H2> -<DIR> -<LI><A HREF="gettext_8.html#IDX758">keyboard accelerator checking</A> -</DIR> -<H2><A NAME="cindex_l">l</A></H2> -<DIR> -<LI><A HREF="gettext_1.html#IDX7">l10n</A> -<LI><A HREF="gettext_15.html#IDX950">language codes</A> -<LI><A HREF="gettext_9.html#IDX820">language selection</A> -<LI><A HREF="gettext_10.html#IDX854">language selection at runtime</A> -<LI><A HREF="gettext_10.html#IDX832">large package</A> -<LI><A HREF="gettext_12.html#IDX901"><CODE>libiconv</CODE> library</A> -<LI><A HREF="gettext_13.html#IDX932"><CODE>libintl</CODE> for Java</A> -<LI><A HREF="gettext_12.html#IDX898"><CODE>libintl</CODE> library</A> -<LI><A HREF="gettext_13.html#IDX929"><CODE>librep</CODE> Lisp</A> -<LI><A HREF="gettext_12.html#IDX883"><TT>`LINGUAS´</TT> file</A> -<LI><A HREF="gettext_1.html#IDX34">link with <TT>`libintl´</TT></A> -<LI><A HREF="gettext_1.html#IDX27">Linux</A>, <A HREF="gettext_1.html#IDX35">Linux</A>, <A HREF="gettext_5.html#IDX237">Linux</A> -<LI><A HREF="gettext_13.html#IDX925">Lisp</A> -<LI><A HREF="gettext_5.html#IDX232">list of translation teams, where to find</A> -<LI><A HREF="gettext_3.html#IDX115">locale facet, LC_ALL</A> -<LI><A HREF="gettext_3.html#IDX118">locale facet, LC_COLLATE</A> -<LI><A HREF="gettext_1.html#IDX18">locale facet, LC_CTYPE</A>, <A HREF="gettext_3.html#IDX116">locale facet, LC_CTYPE</A>, <A HREF="gettext_3.html#IDX117">locale facet, LC_CTYPE</A> -<LI><A HREF="gettext_1.html#IDX26">locale facet, LC_MESSAGES</A>, <A HREF="gettext_3.html#IDX122">locale facet, LC_MESSAGES</A> -<LI><A HREF="gettext_1.html#IDX20">locale facet, LC_MONETARY</A>, <A HREF="gettext_3.html#IDX119">locale facet, LC_MONETARY</A> -<LI><A HREF="gettext_1.html#IDX24">locale facet, LC_NUMERIC</A>, <A HREF="gettext_3.html#IDX120">locale facet, LC_NUMERIC</A> -<LI><A HREF="gettext_3.html#IDX123">locale facet, LC_RESPONSES</A> -<LI><A HREF="gettext_1.html#IDX22">locale facet, LC_TIME</A>, <A HREF="gettext_3.html#IDX121">locale facet, LC_TIME</A> -<LI><A HREF="gettext_1.html#IDX14">locale facets</A> -<LI><A HREF="gettext_5.html#IDX235"><CODE>locale</CODE> program</A> -<LI><A HREF="gettext_1.html#IDX9">localization</A> -</DIR> -<H2><A NAME="cindex_m">m</A></H2> -<DIR> -<LI><A HREF="gettext_8.html#IDX809">magic signature of MO files</A> -<LI><A HREF="gettext_12.html#IDX884"><TT>`Makevars´</TT> file</A> -<LI><A HREF="gettext_7.html#IDX423">manipulating PO files</A> -<LI><A HREF="gettext_3.html#IDX148">marking string initializers</A> -<LI><A HREF="gettext_3.html#IDX134">marking strings that require translation</A> -<LI><A HREF="gettext_3.html#IDX124">marking strings, preparations</A> -<LI><A HREF="gettext_1.html#IDX32">marking translatable strings</A> -<LI><A HREF="gettext_10.html#IDX847">menu entries</A> -<LI><A HREF="gettext_8.html#IDX759">menu, keyboard accelerator support</A> -<LI><A HREF="gettext_7.html#IDX434">merge PO files</A> -<LI><A HREF="gettext_7.html#IDX424">merging two PO files</A> -<LI><A HREF="gettext_10.html#IDX833">message catalog files location</A> -<LI><A HREF="gettext_1.html#IDX25">messages</A> -<LI><A HREF="gettext_12.html#IDX867">migration from earlier versions of <CODE>gettext</CODE></A> -<LI><A HREF="gettext_12.html#IDX888"><TT>`mkinstalldirs´</TT> file</A> -<LI><A HREF="gettext_8.html#IDX760">mnemonics of menu entries</A> -<LI><A HREF="gettext_8.html#IDX807">MO file's format</A> -<LI><A HREF="gettext_7.html#IDX662">modify message attrributes</A> -<LI><A HREF="gettext_7.html#IDX649"><CODE>msgattrib</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX432"><CODE>msgcat</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX638"><CODE>msgcmp</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX604"><CODE>msgcomm</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX471"><CODE>msgconv</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX688"><CODE>msgen</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX712"><CODE>msgexec</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX544"><CODE>msgfilter</CODE> filter and catalog encoding</A> -<LI><A HREF="gettext_7.html#IDX536"><CODE>msgfilter</CODE> program, usage</A> -<LI><A HREF="gettext_8.html#IDX727"><CODE>msgfmt</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX497"><CODE>msggrep</CODE> program, usage</A> -<LI><A HREF="gettext_5.html#IDX214"><CODE>msginit</CODE> program, usage</A> -<LI><A HREF="gettext_6.html#IDX243"><CODE>msgmerge</CODE> program, usage</A> -<LI><A HREF="gettext_8.html#IDX775"><CODE>msgunfmt</CODE> program, usage</A> -<LI><A HREF="gettext_7.html#IDX571"><CODE>msguniq</CODE> program, usage</A> -<LI><A HREF="gettext_2.html#IDX111">multi-line strings</A> -</DIR> -<H2><A NAME="cindex_n">n</A></H2> -<DIR> -<LI><A HREF="gettext_10.html#IDX853"><CODE>N_</CODE>, a convenience macro</A> -<LI><A HREF="gettext_1.html#IDX11">Native Language Support</A> -<LI><A HREF="gettext_1.html#IDX12">Natural Language Support</A> -<LI><A HREF="gettext_2.html#IDX53">newlines in PO files</A> -<LI><A HREF="gettext_10.html#IDX838">ngettext</A> -<LI><A HREF="gettext_1.html#IDX10">NLS</A> -<LI><A HREF="gettext_1.html#IDX23">number format</A> -</DIR> -<H2><A NAME="cindex_o">o</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX937">Object Pascal</A> -<LI><A HREF="gettext_6.html#IDX318">obsolete entries</A> -<LI><A HREF="gettext_10.html#IDX849">optimization of <CODE>gettext</CODE> functions</A> -<LI><A HREF="gettext_7.html#IDX427">orthography</A> -<LI><A HREF="gettext_4.html#IDX162">output to stdout, <CODE>xgettext</CODE></A> -<LI><A HREF="gettext_1.html#IDX29">overview of <CODE>gettext</CODE></A> -</DIR> -<H2><A NAME="cindex_p">p</A></H2> -<DIR> -<LI><A HREF="gettext_12.html#IDX887">package and version declaration in <TT>`configure.in´</TT></A> -<LI><A HREF="gettext_9.html#IDX815">package build and installation options</A> -<LI><A HREF="gettext_12.html#IDX865">package maintainer's view of <CODE>gettext</CODE></A> -<LI><A HREF="gettext_3.html#IDX128">paragraphs</A> -<LI><A HREF="gettext_13.html#IDX935">Pascal</A> -<LI><A HREF="gettext_13.html#IDX943">Perl</A> -<LI><A HREF="gettext_13.html#IDX944">PHP</A> -<LI><A HREF="gettext_13.html#IDX945">Pike</A> -<LI><A HREF="gettext_10.html#IDX844">plural form formulas</A> -<LI><A HREF="gettext_10.html#IDX837">plural forms</A> -<LI><A HREF="gettext_8.html#IDX811">plural forms, in MO files</A> -<LI><A HREF="gettext_2.html#IDX51">plural forms, in PO files</A> -<LI><A HREF="gettext_2.html#IDX43">PO files' format</A> -<LI><A HREF="gettext_2.html#IDX55">PO mode (Emacs) commands</A> -<LI><A HREF="gettext_4.html#IDX149">PO template file</A> -<LI><A HREF="gettext_7.html#IDX545">portability problems with <CODE>sed</CODE></A> -<LI><A HREF="gettext_12.html#IDX882"><TT>`POTFILES.in´</TT> file</A> -<LI><A HREF="gettext_3.html#IDX112">preparing programs for translation</A> -<LI><A HREF="gettext_10.html#IDX827">problems with <CODE>catgets</CODE> interface</A> -<LI><A HREF="gettext_13.html#IDX910">programming languages</A> -<LI><A HREF="gettext_13.html#IDX923">Python</A> -</DIR> -<H2><A NAME="cindex_q">q</A></H2> -<DIR> -<LI><A HREF="gettext_5.html#IDX240">quotation marks</A>, <A HREF="gettext_12.html#IDX885">quotation marks</A> -<LI><A HREF="gettext_5.html#IDX239">quote characters, use in PO files</A> -</DIR> -<H2><A NAME="cindex_r">r</A></H2> -<DIR> -<LI><A HREF="gettext_14.html#IDX948">related reading</A> -<LI><A HREF="gettext_13.html#IDX946">RST</A> -</DIR> -<H2><A NAME="cindex_s">s</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX911">scripting languages</A> -<LI><A HREF="gettext_7.html#IDX498">search messages in a catalog</A> -<LI><A HREF="gettext_9.html#IDX819">selecting message language</A> -<LI><A HREF="gettext_3.html#IDX127">sentences</A> -<LI><A HREF="gettext_9.html#IDX816">setting up <CODE>gettext</CODE> at build time</A> -<LI><A HREF="gettext_9.html#IDX818">setting up <CODE>gettext</CODE> at run time</A> -<LI><A HREF="gettext_10.html#IDX830">several domains</A> -<LI><A HREF="gettext_1.html#IDX1">sex</A> -<LI><A HREF="gettext_10.html#IDX848">sgettext</A> -<LI><A HREF="gettext_1.html#IDX3">she, he, and they</A> -<LI><A HREF="gettext_13.html#IDX913">shell scripts</A> -<LI><A HREF="gettext_13.html#IDX930">Smalltalk</A> -<LI><A HREF="gettext_7.html#IDX463">sorting <CODE>msgcat</CODE> output</A> -<LI><A HREF="gettext_6.html#IDX270">sorting <CODE>msgmerge</CODE> output</A> -<LI><A HREF="gettext_8.html#IDX800">sorting <CODE>msgunfmt</CODE> output</A> -<LI><A HREF="gettext_4.html#IDX197">sorting output of <CODE>xgettext</CODE></A> -<LI><A HREF="gettext_10.html#IDX841">specifying plural form in a PO file</A> -<LI><A HREF="gettext_7.html#IDX441">standard output, and <CODE>msgcat</CODE></A> -<LI><A HREF="gettext_6.html#IDX252">standard output, and <CODE>msgmerge</CODE> program</A> -<LI><A HREF="gettext_3.html#IDX130">string concatenation</A> -<LI><A HREF="gettext_2.html#IDX107">string normalization in entries</A> -<LI><A HREF="gettext_3.html#IDX125">style</A> -<LI><A HREF="gettext_4.html#IDX165">supported languages, <CODE>xgettext</CODE></A> -</DIR> -<H2><A NAME="cindex_t">t</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX941">Tcl</A> -<LI><A HREF="gettext_8.html#IDX736">Tcl mode, and <CODE>msgfmt</CODE> program</A> -<LI><A HREF="gettext_8.html#IDX781">Tcl mode, and <CODE>msgunfmt</CODE> program</A> -<LI><A HREF="gettext_1.html#IDX36">template PO file</A> -<LI><A HREF="gettext_4.html#IDX201">testing <TT>`.po´</TT> files for equivalence</A> -<LI><A HREF="gettext_13.html#IDX942">Tk's scripting language</A> -<LI><A HREF="gettext_6.html#IDX282">translated entries</A> -<LI><A HREF="gettext_10.html#IDX846">translating menu entries</A> -<LI><A HREF="gettext_1.html#IDX13">translation aspects</A> -<LI><A HREF="gettext_9.html#IDX812">Translation Matrix</A> -<LI><A HREF="gettext_1.html#IDX5">Translation Project</A> -<LI><A HREF="gettext_12.html#IDX893">turning off NLS support</A> -<LI><A HREF="gettext_1.html#IDX31">tutorial of <CODE>gettext</CODE> usage</A> -</DIR> -<H2><A NAME="cindex_u">u</A></H2> -<DIR> -<LI><A HREF="gettext_7.html#IDX572">unify duplicate translations</A> -<LI><A HREF="gettext_6.html#IDX307">untranslated entries</A> -<LI><A HREF="gettext_6.html#IDX422">update translations from a compendium</A> -<LI><A HREF="gettext_12.html#IDX868">upgrading to new versions of <CODE>gettext</CODE></A> -</DIR> -<H2><A NAME="cindex_v">v</A></H2> -<DIR> -<LI><A HREF="gettext_6.html#IDX256">version control for backup files, <CODE>msgmerge</CODE></A> -</DIR> -<H2><A NAME="cindex_w">w</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX938"><CODE>wxWindows</CODE> library</A> -</DIR> -<H2><A NAME="cindex_x">x</A></H2> -<DIR> -<LI><A HREF="gettext_7.html#IDX714"><CODE>xargs</CODE>, and output from <CODE>msgexec</CODE></A> -<LI><A HREF="gettext_4.html#IDX151"><CODE>xgettext</CODE> program, usage</A> -<LI><A HREF="gettext_5.html#IDX241"><CODE>xmodmap</CODE> program, and typing quotation marks</A> -</DIR> -<H2><A NAME="cindex_y">y</A></H2> -<DIR> -<LI><A HREF="gettext_13.html#IDX940">YaST2 scripting language</A> -<LI><A HREF="gettext_13.html#IDX939">YCP</A> -</DIR> - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_21.html">previous</A>, next, last section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_3.html b/doc/gettext_3.html deleted file mode 100644 index 147c557..0000000 --- a/doc/gettext_3.html +++ /dev/null @@ -1,929 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 3 Preparing Program Sources</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_2.html">previous</A>, <A HREF="gettext_4.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC13" HREF="gettext_toc.html#TOC13">3 Preparing Program Sources</A></H1> -<P> -<A NAME="IDX112"></A> - -</P> - -<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 and especially mark all constant strings in your program -needing translation. - -</P> -<P> -Presuming that your set of programs, or package, has been adjusted -so all needed GNU <CODE>gettext</CODE> files are available, and your -<TT>`Makefile´</TT> files are adjusted (see section <A HREF="gettext_12.html#SEC173">12 The Maintainer's View</A>), each C module -having translated C strings should contain the line: - -</P> -<P> -<A NAME="IDX113"></A> - -<PRE> -#include <libintl.h> -</PRE> - -<P> -The remaining changes to your C sources are discussed in the further -sections of this chapter. - -</P> - - - -<H2><A NAME="SEC14" HREF="gettext_toc.html#TOC14">3.1 Triggering <CODE>gettext</CODE> Operations</A></H2> - -<P> -<A NAME="IDX114"></A> -The initialization of locale data should be done with more or less -the same code in every program, as demonstrated below: - -</P> - -<PRE> -int -main (argc, argv) - 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 -<TT>`config.h´</TT> or by the Makefile. For now consult the <CODE>gettext</CODE> -or <CODE>hello</CODE> sources for more information. - -</P> -<P> -<A NAME="IDX115"></A> -<A NAME="IDX116"></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 later category is responsible for determining -character classes with the <CODE>isalnum</CODE> etc. functions from -<TT>`ctype.h´</TT> 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 ç (c-cedilla character) is runnable in -France but not in the U.S. - -</P> -<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 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> -<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 - -</P> - -<PRE> -{ - ... - setlocale (LC_CTYPE, ""); - setlocale (LC_MESSAGES, ""); - ... -} -</PRE> - -<P> -<A NAME="IDX117"></A> -<A NAME="IDX118"></A> -<A NAME="IDX119"></A> -<A NAME="IDX120"></A> -<A NAME="IDX121"></A> -<A NAME="IDX122"></A> -<A NAME="IDX123"></A> -On all POSIX conformant systems the locale categories <CODE>LC_CTYPE</CODE>, -<CODE>LC_COLLATE</CODE>, <CODE>LC_MONETARY</CODE>, <CODE>LC_NUMERIC</CODE>, and -<CODE>LC_TIME</CODE> are available. On some modern systems there is also a -locale <CODE>LC_MESSAGES</CODE> which is called on some old, XPG2 compliant -systems <CODE>LC_RESPONSES</CODE>. - -</P> -<P> -Note that changing the <CODE>LC_CTYPE</CODE> also affects the functions -declared in the <CODE><ctype.h></CODE> standard header. 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 <CODE><c-ctype.h></CODE> and <CODE><c-ctype.c></CODE> files -in the gettext source distribution. - -</P> -<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. - -</P> - - -<H2><A NAME="SEC15" HREF="gettext_toc.html#TOC15">3.2 Preparing Translatable Strings</A></H2> - -<P> -<A NAME="IDX124"></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. - -</P> - -<UL> -<LI> - -Decent English style. - -<LI> - -Entire sentences. - -<LI> - -Split at paragraphs. - -<LI> - -Use format strings instead of string concatenation. -</UL> - -<P> -Let's look at some examples of these guidelines. - -</P> -<P> -<A NAME="IDX125"></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. - -</P> - -<PRE> -"%s: is parameter\n" -</PRE> - -<P> -This is nearly untranslatable: Is the displayed item <EM>a</EM> parameter or -<EM>the</EM> parameter? - -</P> - -<PRE> -"No match" -</PRE> - -<P> -The ambiguity in this message makes it ununderstandable: 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> -<P> -<A NAME="IDX126"></A> -In both cases, adding more words to the message will help both the -translator and the English speaking user. - -</P> -<P> -<A NAME="IDX127"></A> -Translatable strings should be entire sentences. It is often not possible -to translate single verbs or adjectives in a substitutable way. - -</P> - -<PRE> -printf ("File %s is %s protected", filename, rw ? "write" : "read"); -</PRE> - -<P> -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 - -</P> - -<PRE> -printf (rw ? "File %s is write protected" : "File %s is read protected", - filename); -</PRE> - -<P> -This way the translator will not only understand the message, she will -also be able to find the appropriate grammatical construction. The French -translator for example translates "write protected" like "protected -against writing". - -</P> -<P> -Often sentences don't fit into a single line. If a sentence is output -using two subsequent <CODE>printf</CODE> statements, like this - -</P> - -<PRE> -printf ("Locale charset \"%s\" is different from\n", lcharset); -printf ("input file charset \"%s\".\n", fcharset); -</PRE> - -<P> -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): - -</P> - -<PRE> -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: - -</P> - -<PRE> -puts ("Apollo 13 scenario: Stack overflow handling failed."); -puts ("On the next stack overflow we will crash!!!"); -</PRE> - -<P> -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> -<P> -<A NAME="IDX128"></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> -<P> -<A NAME="IDX129"></A> -Many GNU programs have a <SAMP>`--help´</SAMP> 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> -<P> -<A NAME="IDX130"></A> -<A NAME="IDX131"></A> -Hardcoded string concatenation is sometimes used to construct English -strings: - -</P> - -<PRE> -strcpy (s, "Replace "); -strcat (s, object1); -strcat (s, " with "); -strcat (s, object2); -strcat (s, "?"); -</PRE> - -<P> -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: - -</P> - -<PRE> -sprintf (s, "Replace %s with %s?", object1, object2); -</PRE> - -<P> -<A NAME="IDX132"></A> -A similar case is compile time concatenation of strings. The ISO C 99 -include file <CODE><inttypes.h></CODE> contains a macro <CODE>PRId64</CODE> that -can be used as a formatting directive for outputting an <SAMP>`int64_t´</SAMP> -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 - -</P> - -<PRE> -printf ("The amount is %0" PRId64 "\n", number); -</PRE> - -<P> -The <CODE>gettext</CODE> tools and library have special support for these -<CODE><inttypes.h></CODE> macros. You can therefore simply write - -</P> - -<PRE> -printf (gettext ("The amount is %0" PRId64 "\n"), number); -</PRE> - -<P> -The PO file will contain the string "The amount is %0<PRId64>\n". -The translators will provide a translation containing "%0<PRId64>" -as well, and at runtime the <CODE>gettext</CODE> function's result will -contain the appropriate constant string, "d" or "ld" or "lld". - -</P> -<P> -This works only for the predefined <CODE><inttypes.h></CODE> macros. If -you have defined your own similar macros, let's say <SAMP>`MYPRId64´</SAMP>, -that are not known to <CODE>xgettext</CODE>, the solution for this problem -is to change the code like this: - -</P> - -<PRE> -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> -<P> -<A NAME="IDX133"></A> -All this applies to other programming languages as well. For example, in -Java, string contenation is very frequently used, because it is a compiler -built-in operator. Like in C, in Java, you would change - -</P> - -<PRE> -System.out.println("Replace "+object1+" with "+object2+"?"); -</PRE> - -<P> -into a statement involving a format string: - -</P> - -<PRE> -System.out.println( - MessageFormat.format("Replace {0} with {1}?", - new Object[] { object1, object2 })); -</PRE> - - - -<H2><A NAME="SEC16" HREF="gettext_toc.html#TOC16">3.3 How Marks Appear in Sources</A></H2> -<P> -<A NAME="IDX134"></A> - -</P> -<P> -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 <SAMP>`%s´</SAMP> 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 -<SAMP>`error_string_out()´</SAMP> routine, say. - -</P> -<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 are 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 section <A HREF="gettext_3.html#SEC19">3.6 Special Cases of Translatable Strings</A>. - -</P> -<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> -<P> -The canonical keyword for marking translatable strings is -<SAMP>`gettext´</SAMP>, it gave its name to the whole GNU <CODE>gettext</CODE> -package. For packages making only light use of the <SAMP>`gettext´</SAMP> -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> -<P> -<A NAME="IDX135"></A> -Many packages use <SAMP>`_´</SAMP> (a simple underline) as a keyword, -and write <SAMP>`_("Translatable string")´</SAMP> instead of <SAMP>`gettext -("Translatable string")´</SAMP>. 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 -<SAMP>`gettext´</SAMP> indeed. It is fairly easy for those wanting to use -<SAMP>`_´</SAMP> instead of <SAMP>`gettext´</SAMP> to declare: - -</P> - -<PRE> -#include <libintl.h> -#define _(String) gettext (String) -</PRE> - -<P> -instead of merely using <SAMP>`#include <libintl.h>´</SAMP>. - -</P> -<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 -<SAMP>`_()´</SAMP> if you think it should be translated. <SAMP>`"%s: %d"´</SAMP> is -an example of string <EM>not</EM> requiring translation! - -</P> - - -<H2><A NAME="SEC17" HREF="gettext_toc.html#TOC17">3.4 Marking Translatable Strings</A></H2> -<P> -<A NAME="IDX136"></A> - -</P> -<P> -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> -<P> -<A NAME="IDX137"></A> -The set of program sources, targetted 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: - -</P> - -<PRE> -etags src/*.[hc] lib/*.[hc] -</PRE> - -<P> -presuming here you want to process all <TT>`.h´</TT> and <TT>`.c´</TT> files -from the <TT>`src/´</TT> and <TT>`lib/´</TT> directories. This command will -explore all said files and create a <TT>`TAGS´</TT> file in your root -directory, somewhat summarizing the contents using a special file -format Emacs can understand. - -</P> -<P> -<A NAME="IDX138"></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> -<P> -Once your <TT>`TAGS´</TT> 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. - -</P> -<DL COMPACT> - -<DT><KBD>,</KBD> -<DD> -<A NAME="IDX139"></A> -Search through program sources for a string which looks like a -candidate for translation (<CODE>po-tags-search</CODE>). - -<DT><KBD>M-,</KBD> -<DD> -<A NAME="IDX140"></A> -Mark the last string found with <SAMP>`_()´</SAMP> (<CODE>po-mark-translatable</CODE>). - -<DT><KBD>M-.</KBD> -<DD> -<A NAME="IDX141"></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="IDX142"></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> -<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> -<P> -If you have never told Emacs about some <TT>`TAGS´</TT> 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 <TT>`TAGS´</TT> -file by using the regular Emacs command <KBD>M-x visit-tags-table</KBD>, -which will ask you to name the precise <TT>`TAGS´</TT> file you want -to use. See section `Tag Tables' in <CITE>The Emacs Editor</CITE>. - -</P> -<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 <TT>`TAGS´</TT> file, until all sources have been processed. -However, by giving a prefix argument to the command (<KBD>C-u -,)</KBD>, 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> -<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> -<P> -<A NAME="IDX143"></A> -<A NAME="IDX144"></A> -The <KBD>M-,</KBD> (<CODE>po-mark-translatable</CODE>) command will mark the -recently found string with the <SAMP>`_´</SAMP> 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> -<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><KBD>RET</KBD></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> -<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 M-.</KBD>), 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 M-.</KBD>, one merely -changes the <EM>preferred</EM> keyword and does nothing more. - -</P> -<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 -<SAMP>`gettext´</SAMP> and <SAMP>`_´</SAMP> are known as keywords, and <SAMP>`gettext´</SAMP> -is preferred for the <KBD>M-.</KBD> command. In fact, this is not useful to -prefer <SAMP>`_´</SAMP>, as this one is already built in the <KBD>M-,</KBD> command. - -</P> - - -<H2><A NAME="SEC18" HREF="gettext_toc.html#TOC18">3.5 Special Comments preceding Keywords</A></H2> - -<P> -<A NAME="IDX145"></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 - -</P> - -<PRE> -printf (gettext ("String `%s' has %d characters\n"), s, strlen (s)); -</PRE> - -<P> -A possible German translation for the above string might be: - -</P> - -<PRE> -"%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> -<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 <SAMP>`-c´</SAMP> 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 <SAMP>`msgfmt -c´</SAMP> will catch the error, so that it cannot cause -cause problems at runtime. - -</P> -<P> -If the word order in the above German translation would be correct one -would have to write - -</P> - -<PRE> -"%2$d Zeichen lang ist die Zeichenkette `%1$s'" -</PRE> - -<P> -The routines in <CODE>msgfmt</CODE> know about this special notation. - -</P> -<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 <TT>`.po´</TT> 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> -<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 <TT>`.po´</TT> file the entry is marked using the -<CODE>c-format</CODE> flag in the <KBD>#,</KBD> comment line (see section <A HREF="gettext_2.html#SEC9">2.2 The Format of PO Files</A>). - -</P> -<P> -<A NAME="IDX146"></A> -<A NAME="IDX147"></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 -<KBD>xgettext:c-format</KBD>, it will mark the string in any case with -the <KBD>c-format</KBD> 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> -<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> -<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 <TT>`.po´</TT> file. The method to prevent -this wrong decision is similar to the one used above, only the comment -to use must contain the string <KBD>xgettext:no-c-format</KBD>. - -</P> -<P> -If a string is marked with <KBD>c-format</KBD> and this is not correct the -user can find out who is responsible for the decision. See -section <A HREF="gettext_4.html#SEC21">4.1 Invoking the <CODE>xgettext</CODE> Program</A> to see how the <KBD>--debug</KBD> option can be -used for solving this problem. - -</P> - - -<H2><A NAME="SEC19" HREF="gettext_toc.html#TOC19">3.6 Special Cases of Translatable Strings</A></H2> - -<P> -<A NAME="IDX148"></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: - -</P> - -<PRE> -{ - static const char *messages[] = { - "some very meaningful message", - "and another one" - }; - const char *string; - ... - string - = index > 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 section <A HREF="gettext_4.html#SEC21">4.1 Invoking the <CODE>xgettext</CODE> Program</A>) -can find them, and second we have to translate the string at runtime -before printing them. - -</P> -<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: - -</P> - -<PRE> -#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 > 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 section <A HREF="gettext_4.html#SEC21">4.1 Invoking the <CODE>xgettext</CODE> Program</A>. - -</P> -<P> -The above is of course not the only solution. You could also come along -with the following one: - -</P> - -<PRE> -#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 > 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> -<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. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_2.html">previous</A>, <A HREF="gettext_4.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_4.html b/doc/gettext_4.html deleted file mode 100644 index 026c851..0000000 --- a/doc/gettext_4.html +++ /dev/null @@ -1,432 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 4 Making the PO Template File</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_3.html">previous</A>, <A HREF="gettext_5.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC20" HREF="gettext_toc.html#TOC20">4 Making the PO Template File</A></H1> -<P> -<A NAME="IDX149"></A> - -</P> -<P> -After preparing the sources, the programmer creates a PO template file. -This section explains how to use <CODE>xgettext</CODE> for this purpose. - -</P> -<P> -<CODE>xgettext</CODE> creates a file named <TT>`<VAR>domainname</VAR>.po´</TT>. You -should then rename it to <TT>`<VAR>domainname</VAR>.pot´</TT>. (Why doesn't -<CODE>xgettext</CODE> create it under the name <TT>`<VAR>domainname</VAR>.pot´</TT> -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 <SAMP>`.pot´</SAMP> wasn't in use at that time.) - -</P> - - - -<H2><A NAME="SEC21" HREF="gettext_toc.html#TOC21">4.1 Invoking the <CODE>xgettext</CODE> Program</A></H2> - -<P> -<A NAME="IDX150"></A> -<A NAME="IDX151"></A> - -<PRE> -xgettext [<VAR>option</VAR>] [<VAR>inputfile</VAR>] ... -</PRE> - -<P> -The <CODE>xgettext</CODE> program extracts translatable strings from given -input files. - -</P> - - -<H3><A NAME="SEC22" HREF="gettext_toc.html#TOC22">4.1.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR> ...´</SAMP> -<DD> -Input files. - -<DT><SAMP>`-f <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--files-from=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX152"></A> -<A NAME="IDX153"></A> -Read the names of the input files from <VAR>file</VAR> instead of getting -them from the command line. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX154"></A> -<A NAME="IDX155"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If <VAR>inputfile</VAR> is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC23" HREF="gettext_toc.html#TOC23">4.1.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-d <VAR>name</VAR>´</SAMP> -<DD> -<DT><SAMP>`--default-domain=<VAR>name</VAR>´</SAMP> -<DD> -<A NAME="IDX156"></A> -<A NAME="IDX157"></A> -Use <TT>`<VAR>name</VAR>.po´</TT> for output (instead of <TT>`messages.po´</TT>). - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX158"></A> -<A NAME="IDX159"></A> -Write output to specified file (instead of <TT>`<VAR>name</VAR>.po´</TT> or -<TT>`messages.po´</TT>). - -<DT><SAMP>`-p <VAR>dir</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-dir=<VAR>dir</VAR>´</SAMP> -<DD> -<A NAME="IDX160"></A> -<A NAME="IDX161"></A> -Output files will be placed in directory <VAR>dir</VAR>. - -</DL> - -<P> -<A NAME="IDX162"></A> -If the output <VAR>file</VAR> is <SAMP>`-´</SAMP> or <SAMP>`/dev/stdout´</SAMP>, the output -is written to standard output. - -</P> - - -<H3><A NAME="SEC24" HREF="gettext_toc.html#TOC24">4.1.3 Choice of input file language</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-L <VAR>name</VAR>´</SAMP> -<DD> -<DT><SAMP>`--language=<VAR>name</VAR>´</SAMP> -<DD> -<A NAME="IDX163"></A> -<A NAME="IDX164"></A> -<A NAME="IDX165"></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>Smalltalk</CODE>, <CODE>Java</CODE>, -<CODE>awk</CODE>, <CODE>YCP</CODE>, <CODE>Tcl</CODE>, <CODE>PHP</CODE>, <CODE>RST</CODE>, <CODE>Glade</CODE>. - -<DT><SAMP>`-C´</SAMP> -<DD> -<DT><SAMP>`--c++´</SAMP> -<DD> -<A NAME="IDX166"></A> -<A NAME="IDX167"></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. - -</P> - - -<H3><A NAME="SEC25" HREF="gettext_toc.html#TOC25">4.1.4 Input file interpretation</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--from-code=<VAR>name</VAR>´</SAMP> -<DD> -<A NAME="IDX168"></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 Python, 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. - -</P> - - -<H3><A NAME="SEC26" HREF="gettext_toc.html#TOC26">4.1.5 Operation mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-j´</SAMP> -<DD> -<DT><SAMP>`--join-existing´</SAMP> -<DD> -<A NAME="IDX169"></A> -<A NAME="IDX170"></A> -Join messages with existing file. - -<DT><SAMP>`-x <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--exclude-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX171"></A> -<A NAME="IDX172"></A> -Entries from <VAR>file</VAR> are not extracted. <VAR>file</VAR> should be a PO or -POT file. - -<DT><SAMP>`-c [<VAR>tag</VAR>]´</SAMP> -<DD> -<DT><SAMP>`--add-comments[=<VAR>tag</VAR>]´</SAMP> -<DD> -<A NAME="IDX173"></A> -<A NAME="IDX174"></A> -Place comment block with <VAR>tag</VAR> (or those preceding keyword lines) -in output file. - -</DL> - - - -<H3><A NAME="SEC27" HREF="gettext_toc.html#TOC27">4.1.6 Language=C/C++ specific options</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-a´</SAMP> -<DD> -<DT><SAMP>`--extract-all´</SAMP> -<DD> -<A NAME="IDX175"></A> -<A NAME="IDX176"></A> -Extract all strings. - -<DT><SAMP>`-k <VAR>keywordspec</VAR>´</SAMP> -<DD> -<DT><SAMP>`--keyword[=<VAR>keywordspec</VAR>]´</SAMP> -<DD> -<A NAME="IDX177"></A> -<A NAME="IDX178"></A> -Additional keyword to be looked for (without <VAR>keywordspec</VAR> means not to -use default keywords). - -<A NAME="IDX179"></A> -If <VAR>keywordspec</VAR> is a C identifer <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 -<SAMP>`<VAR>id</VAR>:<VAR>argnum</VAR>´</SAMP>, <CODE>xgettext</CODE> looks for strings in the -<VAR>argnum</VAR>th argument of the call. If <VAR>keywordspec</VAR> is of the form -<SAMP>`<VAR>id</VAR>:<VAR>argnum1</VAR>,<VAR>argnum2</VAR>´</SAMP>, <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. - -The default keyword specifications, which are always looked for if not -explicitly disabled, are <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>, and <CODE>gettext_noop</CODE>. - -<DT><SAMP>`-T´</SAMP> -<DD> -<DT><SAMP>`--trigraphs´</SAMP> -<DD> -<A NAME="IDX180"></A> -<A NAME="IDX181"></A> -<A NAME="IDX182"></A> -Understand ANSI C trigraphs for input. - -<DT><SAMP>`--debug´</SAMP> -<DD> -<A NAME="IDX183"></A> -<A NAME="IDX184"></A> -Use the flags <KBD>c-format</KBD> and <KBD>possible-c-format</KBD> 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. - -By default only the <KBD>c-format</KBD> 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. - -</P> - - -<H3><A NAME="SEC28" HREF="gettext_toc.html#TOC28">4.1.7 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX185"></A> -Always write an output file even if no message is defined. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX186"></A> -<A NAME="IDX187"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX188"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX189"></A> -<A NAME="IDX190"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX191"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX192"></A> -<A NAME="IDX193"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX194"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX195"></A> -<A NAME="IDX196"></A> -<A NAME="IDX197"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX198"></A> -<A NAME="IDX199"></A> -Sort output by file location. - -<DT><SAMP>`--omit-header´</SAMP> -<DD> -<A NAME="IDX200"></A> -Don't write header with <SAMP>`msgid ""´</SAMP> entry. - -<A NAME="IDX201"></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. - -<DT><SAMP>`--copyright-holder=<VAR>string</VAR>´</SAMP> -<DD> -<A NAME="IDX202"></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. - -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. - -<DT><SAMP>`--foreign-user´</SAMP> -<DD> -<A NAME="IDX203"></A> -Omit FSF copyright in output. This option is equivalent to -<SAMP>`--copyright-holder="´</SAMP>. It can be useful for packages outside the GNU -project that want their translations to be in the public domain. - -<DT><SAMP>`-m [<VAR>string</VAR>]´</SAMP> -<DD> -<DT><SAMP>`--msgstr-prefix[=<VAR>string</VAR>]´</SAMP> -<DD> -<A NAME="IDX204"></A> -<A NAME="IDX205"></A> -Use <VAR>string</VAR> (or "" if not specified) as prefix for msgstr entries. - -<DT><SAMP>`-M [<VAR>string</VAR>]´</SAMP> -<DD> -<DT><SAMP>`--msgstr-suffix[=<VAR>string</VAR>]´</SAMP> -<DD> -<A NAME="IDX206"></A> -<A NAME="IDX207"></A> -Use <VAR>string</VAR> (or "" if not specified) as suffix for msgstr entries. - -</DL> - - - -<H3><A NAME="SEC29" HREF="gettext_toc.html#TOC29">4.1.8 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX208"></A> -<A NAME="IDX209"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX210"></A> -<A NAME="IDX211"></A> -Output version information and exit. - -</DL> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_3.html">previous</A>, <A HREF="gettext_5.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_5.html b/doc/gettext_5.html deleted file mode 100644 index 1d1a4d3..0000000 --- a/doc/gettext_5.html +++ /dev/null @@ -1,366 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 5 Creating a New PO File</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_4.html">previous</A>, <A HREF="gettext_6.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC30" HREF="gettext_toc.html#TOC30">5 Creating a New PO File</A></H1> -<P> -<A NAME="IDX212"></A> - -</P> -<P> -When starting a new translation, the translator creates a file called -<TT>`<VAR>LANG</VAR>.po´</TT>, as a copy of the <TT>`<VAR>package</VAR>.pot´</TT> 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> -<P> -The easiest way to do so is by use of the <SAMP>`msginit´</SAMP> program. -For example: - -</P> - -<PRE> -$ 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 <TT>`<VAR>package</VAR>.pot´</TT> to -<TT>`<VAR>LANG</VAR>.po´</TT>. Then she modifies the initial comments and -the header entry of this file. - -</P> - - - -<H2><A NAME="SEC31" HREF="gettext_toc.html#TOC31">5.1 Invoking the <CODE>msginit</CODE> Program</A></H2> - -<P> -<A NAME="IDX213"></A> -<A NAME="IDX214"></A> - -<PRE> -msginit [<VAR>option</VAR>] -</PRE> - -<P> -<A NAME="IDX215"></A> -<A NAME="IDX216"></A> -The <CODE>msginit</CODE> program creates a new PO file, initializing the meta -information with values from the user's environment. - -</P> - - -<H3><A NAME="SEC32" HREF="gettext_toc.html#TOC32">5.1.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-i <VAR>inputfile</VAR>´</SAMP> -<DD> -<DT><SAMP>`--input=<VAR>inputfile</VAR>´</SAMP> -<DD> -<A NAME="IDX217"></A> -<A NAME="IDX218"></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 <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC33" HREF="gettext_toc.html#TOC33">5.1.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX219"></A> -<A NAME="IDX220"></A> -Write output to specified PO file. - -</DL> - -<P> -If no output file is given, it depends on the <SAMP>`--locale´</SAMP> option or the -user's locale setting. If it is <SAMP>`-´</SAMP>, the results are written to -standard output. - -</P> - - -<H3><A NAME="SEC34" HREF="gettext_toc.html#TOC34">5.1.3 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-l <VAR>ll_CC</VAR>´</SAMP> -<DD> -<DT><SAMP>`--locale=<VAR>ll_CC</VAR>´</SAMP> -<DD> -<A NAME="IDX221"></A> -<A NAME="IDX222"></A> -Set target locale. <VAR>ll</VAR> should be a language code, and <VAR>CC</VAR> should -be a country code. The command <SAMP>`locale -a´</SAMP> can be used to output a list -of all installed locales. The default is the user's locale setting. - -<DT><SAMP>`--no-translator´</SAMP> -<DD> -<A NAME="IDX223"></A> -Declares that the PO file will not have a human translator and is instead -automatically generated. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX224"></A> -<A NAME="IDX225"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX226"></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> - - - -<H3><A NAME="SEC35" HREF="gettext_toc.html#TOC35">5.1.4 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX227"></A> -<A NAME="IDX228"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX229"></A> -<A NAME="IDX230"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC36" HREF="gettext_toc.html#TOC36">5.2 Filling in the Header Entry</A></H2> -<P> -<A NAME="IDX231"></A> - -</P> -<P> -The initial comments "SOME DESCRIPTIVE TITLE", "YEAR" and -"FIRST AUTHOR <EMAIL@ADDRESS>, 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> -<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. - -</P> -<DL COMPACT> - -<DT>Project-Id-Version -<DD> -This is the name and version of the package. - -<DT>POT-Creation-Date -<DD> -This has already been filled in by <CODE>xgettext</CODE>. - -<DT>PO-Revision-Date -<DD> -You don't need to fill this in. It will be filled by the Emacs PO mode -when you save the file. - -<DT>Last-Translator -<DD> -Fill in your name and email address (without double quotes). - -<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. - -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. - -<A NAME="IDX232"></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://www.iro.umontreal.ca/contrib/po/HTML/">http://www.iro.umontreal.ca/contrib/po/HTML/</A>, -in the "National teams" area. - -<DT>Content-Type -<DD> -<A NAME="IDX233"></A> -<A NAME="IDX234"></A> -Replace <SAMP>`CHARSET´</SAMP> 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 section <A HREF="gettext_10.html#SEC150">10.2.4 How to specify the output character set <CODE>gettext</CODE> uses</A>). - -<A NAME="IDX235"></A> -You get the character encoding of your locale by running the shell command -<SAMP>`locale charmap´</SAMP>. If the result is <SAMP>`C´</SAMP> or <SAMP>`ANSI_X3.4-1968´</SAMP>, -which is equivalent to <SAMP>`ASCII´</SAMP> (= <SAMP>`US-ASCII´</SAMP>), it means that your -locale is not correctly configured. In this case, ask your translation -team which charset to use. <SAMP>`ASCII´</SAMP> is not usable for any language -except Latin. - -<A NAME="IDX236"></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>. - -<A NAME="IDX237"></A> -In the GNU system, the following encodings are frequently used for the -corresponding languages. - -<A NAME="IDX238"></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, Byelorussian, - -<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> - -<A NAME="IDX239"></A> -<A NAME="IDX240"></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). - -<A NAME="IDX241"></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". - -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. - -The character encoding name can be written in either upper or lower case. -Usually upper case is preferred. - -<DT>Content-Transfer-Encoding -<DD> -Set this to <CODE>8bit</CODE>. - -<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 <SAMP>`msgid_plural´</SAMP> keyword. The -format of the plural forms field is described in section <A HREF="gettext_10.html#SEC151">10.2.5 Additional functions for plural forms</A>. -</DL> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_4.html">previous</A>, <A HREF="gettext_6.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_6.html b/doc/gettext_6.html deleted file mode 100644 index 2190301..0000000 --- a/doc/gettext_6.html +++ /dev/null @@ -1,1548 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 6 Updating Existing PO Files</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_5.html">previous</A>, <A HREF="gettext_7.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC37" HREF="gettext_toc.html#TOC37">6 Updating Existing PO Files</A></H1> - - - -<H2><A NAME="SEC38" HREF="gettext_toc.html#TOC38">6.1 Invoking the <CODE>msgmerge</CODE> Program</A></H2> - -<P> -<A NAME="IDX242"></A> -<A NAME="IDX243"></A> - -<PRE> -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. - -</P> - - -<H3><A NAME="SEC39" HREF="gettext_toc.html#TOC39">6.1.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>def</VAR>.po´</SAMP> -<DD> -Translations referring to old sources. - -<DT><SAMP>`<VAR>ref</VAR>.pot´</SAMP> -<DD> -References to the new sources. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX244"></A> -<A NAME="IDX245"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -<DT><SAMP>`-C <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--compendium=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX246"></A> -<A NAME="IDX247"></A> -Specify an additional library of message translations. See section <A HREF="gettext_6.html#SEC55">6.11 Using Translation Compendia</A>. -This option may be specified more than once. - -</DL> - - - -<H3><A NAME="SEC40" HREF="gettext_toc.html#TOC40">6.1.2 Operation mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-U´</SAMP> -<DD> -<DT><SAMP>`--update´</SAMP> -<DD> -<A NAME="IDX248"></A> -<A NAME="IDX249"></A> -Update <VAR>def</VAR>.po. Do nothing if <VAR>def</VAR>.po is already up to date. - -</DL> - - - -<H3><A NAME="SEC41" HREF="gettext_toc.html#TOC41">6.1.3 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX250"></A> -<A NAME="IDX251"></A> -Write output to specified file. - -</DL> - -<P> -<A NAME="IDX252"></A> -The results are written to standard output if no output file is specified -or if it is <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC42" HREF="gettext_toc.html#TOC42">6.1.4 Output file location in update mode</A></H3> - -<P> -The result is written back to <VAR>def</VAR>.po. - -</P> -<DL COMPACT> - -<DT><SAMP>`--backup=<VAR>control</VAR>´</SAMP> -<DD> -<A NAME="IDX253"></A> -<A NAME="IDX254"></A> -Make a backup of <VAR>def</VAR>.po - -<DT><SAMP>`--suffix=<VAR>suffix</VAR>´</SAMP> -<DD> -<A NAME="IDX255"></A> -Override the usual backup suffix. - -</DL> - -<P> -<A NAME="IDX256"></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: - -</P> -<DL COMPACT> - -<DT><SAMP>`none´</SAMP> -<DD> -<DT><SAMP>`off´</SAMP> -<DD> -Never make backups (even if <CODE>--backup</CODE> is given). - -<DT><SAMP>`numbered´</SAMP> -<DD> -<DT><SAMP>`t´</SAMP> -<DD> -Make numbered backups. - -<DT><SAMP>`existing´</SAMP> -<DD> -<DT><SAMP>`nil´</SAMP> -<DD> -Make numbered backups if numbered backups for this file already exist, -otherwise make simple backups. - -<DT><SAMP>`simple´</SAMP> -<DD> -<DT><SAMP>`never´</SAMP> -<DD> -Always make simple backups. - -</DL> - -<P> -The backup suffix is <SAMP>`~´</SAMP>, unless set with <CODE>--suffix</CODE> or the -<CODE>SIMPLE_BACKUP_SUFFIX</CODE> environment variable. - -</P> - - -<H3><A NAME="SEC43" HREF="gettext_toc.html#TOC43">6.1.5 Operation modifiers</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-m´</SAMP> -<DD> -<DT><SAMP>`--multi-domain´</SAMP> -<DD> -<A NAME="IDX257"></A> -<A NAME="IDX258"></A> -Apply <VAR>ref</VAR>.pot to each of the domains in <VAR>def</VAR>.po. - -</DL> - - - -<H3><A NAME="SEC44" HREF="gettext_toc.html#TOC44">6.1.6 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX259"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX260"></A> -<A NAME="IDX261"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX262"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX263"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX264"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX265"></A> -<A NAME="IDX266"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX267"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX268"></A> -<A NAME="IDX269"></A> -<A NAME="IDX270"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX271"></A> -<A NAME="IDX272"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC45" HREF="gettext_toc.html#TOC45">6.1.7 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX273"></A> -<A NAME="IDX274"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX275"></A> -<A NAME="IDX276"></A> -Output version information and exit. - -<DT><SAMP>`-v´</SAMP> -<DD> -<DT><SAMP>`--verbose´</SAMP> -<DD> -<A NAME="IDX277"></A> -<A NAME="IDX278"></A> -Increase verbosity level. - -<DT><SAMP>`-q´</SAMP> -<DD> -<DT><SAMP>`--quiet´</SAMP> -<DD> -<DT><SAMP>`--silent´</SAMP> -<DD> -<A NAME="IDX279"></A> -<A NAME="IDX280"></A> -<A NAME="IDX281"></A> -Suppress progress indicators. - -</DL> - - - -<H2><A NAME="SEC46" HREF="gettext_toc.html#TOC46">6.2 Translated Entries</A></H2> -<P> -<A NAME="IDX282"></A> - -</P> -<P> -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 section <A HREF="gettext_6.html#SEC47">6.3 Fuzzy Entries</A>), -is said to be a <EM>translated</EM> 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> -<P> -<A NAME="IDX283"></A> -Some commands are more specifically related to translated entry processing. - -</P> -<DL COMPACT> - -<DT><KBD>t</KBD> -<DD> -<A NAME="IDX284"></A> -Find the next translated entry (<CODE>po-next-translated-entry</CODE>). - -<DT><KBD>T</KBD> -<DD> -<A NAME="IDX285"></A> -Find the previous translated entry (<CODE>po-previous-translated-entry</CODE>). - -</DL> - -<P> -<A NAME="IDX286"></A> -<A NAME="IDX287"></A> -<A NAME="IDX288"></A> -<A NAME="IDX289"></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> -<P> -<A NAME="IDX290"></A> -Translated entries usually result from the translator having edited in -a translation for them, section <A HREF="gettext_6.html#SEC50">6.6 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 section <A HREF="gettext_6.html#SEC47">6.3 Fuzzy Entries</A>. - -</P> - - -<H2><A NAME="SEC47" HREF="gettext_toc.html#TOC47">6.3 Fuzzy Entries</A></H2> -<P> -<A NAME="IDX291"></A> - -</P> -<P> -<A NAME="IDX292"></A> -<A NAME="IDX293"></A> -Each PO file entry may have a set of <EM>attributes</EM>, 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> -<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> -<P> -<A NAME="IDX294"></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. - -</P> -<DL COMPACT> - -<DT><KBD>z</KBD> -<DD> -<A NAME="IDX295"></A> -Find the next fuzzy entry (<CODE>po-next-fuzzy-entry</CODE>). - -<DT><KBD>Z</KBD> -<DD> -<A NAME="IDX296"></A> -Find the previous fuzzy entry (<CODE>po-previous-fuzzy-entry</CODE>). - -<DT><KBD><KBD>TAB</KBD></KBD> -<DD> -<A NAME="IDX297"></A> -Remove the fuzzy attribute of the current entry (<CODE>po-unfuzzy</CODE>). - -</DL> - -<P> -<A NAME="IDX298"></A> -<A NAME="IDX299"></A> -<A NAME="IDX300"></A> -<A NAME="IDX301"></A> -The commands <KBD>z</KBD> (<CODE>po-next-fuzzy-entry</CODE>) and <KBD>Z</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> -<P> -<A NAME="IDX302"></A> -<A NAME="IDX303"></A> -<A NAME="IDX304"></A> -The command <KBD><KBD>TAB</KBD></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><KBD>TAB</KBD></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> -<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><KBD>RET</KBD></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><KBD>TAB</KBD></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><KBD>SPC</KBD></KBD> -to chase another entry, leaving the entry fuzzy. - -</P> -<P> -<A NAME="IDX305"></A> -<A NAME="IDX306"></A> -The translator may also use the <KBD><KBD>DEL</KBD></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> -<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. - -</P> - - -<H2><A NAME="SEC48" HREF="gettext_toc.html#TOC48">6.4 Untranslated Entries</A></H2> -<P> -<A NAME="IDX307"></A> - -</P> -<P> -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 <EM>untranslated</EM> 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> -<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 <SAMP>`msgstr ""´</SAMP>. - -</P> -<P> -<A NAME="IDX308"></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. - -</P> -<DL COMPACT> - -<DT><KBD>u</KBD> -<DD> -<A NAME="IDX309"></A> -Find the next untranslated entry (<CODE>po-next-untranslated-entry</CODE>). - -<DT><KBD>U</KBD> -<DD> -<A NAME="IDX310"></A> -Find the previous untranslated entry (<CODE>po-previous-untransted-entry</CODE>). - -<DT><KBD>k</KBD> -<DD> -<A NAME="IDX311"></A> -Turn the current entry into an untranslated one (<CODE>po-kill-msgstr</CODE>). - -</DL> - -<P> -<A NAME="IDX312"></A> -<A NAME="IDX313"></A> -<A NAME="IDX314"></A> -<A NAME="IDX315"></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> -<P> -<A NAME="IDX316"></A> -<A NAME="IDX317"></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 section <A HREF="gettext_6.html#SEC50">6.6 Modifying Translations</A>. - -</P> -<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. - -</P> - - -<H2><A NAME="SEC49" HREF="gettext_toc.html#TOC49">6.5 Obsolete Entries</A></H2> -<P> -<A NAME="IDX318"></A> - -</P> -<P> -By <EM>obsolete</EM> 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> -<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 -<KBD>#</KBD>, even those lines containing <CODE>msgid</CODE> or <CODE>msgstr</CODE>. - -</P> -<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> -<P> -<A NAME="IDX319"></A> -Moreover, some commands are more specifically related to obsolete -entry processing. - -</P> -<DL COMPACT> - -<DT><KBD>o</KBD> -<DD> -<A NAME="IDX320"></A> -Find the next obsolete entry (<CODE>po-next-obsolete-entry</CODE>). - -<DT><KBD>O</KBD> -<DD> -<A NAME="IDX321"></A> -Find the previous obsolete entry (<CODE>po-previous-obsolete-entry</CODE>). - -<DT><KBD><KBD>DEL</KBD></KBD> -<DD> -<A NAME="IDX322"></A> -Make an active entry obsolete, or zap out an obsolete entry -(<CODE>po-fade-out-entry</CODE>). - -</DL> - -<P> -<A NAME="IDX323"></A> -<A NAME="IDX324"></A> -<A NAME="IDX325"></A> -<A NAME="IDX326"></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> -<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> -<P> -<A NAME="IDX327"></A> -<A NAME="IDX328"></A> -<A NAME="IDX329"></A> -<A NAME="IDX330"></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><KBD>DEL</KBD></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 section <A HREF="gettext_6.html#SEC50">6.6 Modifying Translations</A>. - -</P> -<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. - -</P> - - -<H2><A NAME="SEC50" HREF="gettext_toc.html#TOC50">6.6 Modifying Translations</A></H2> -<P> -<A NAME="IDX331"></A> -<A NAME="IDX332"></A> - -</P> -<P> -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> -<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. - -</P> -<DL COMPACT> - -<DT><KBD><KBD>RET</KBD></KBD> -<DD> -<A NAME="IDX333"></A> -Interactively edit the translation (<CODE>po-edit-msgstr</CODE>). - -<DT><KBD><KBD>LFD</KBD></KBD> -<DD> -<DT><KBD>C-j</KBD> -<DD> -<A NAME="IDX334"></A> -<A NAME="IDX335"></A> -Reinitialize the translation with the original, untranslated string -(<CODE>po-msgid-to-msgstr</CODE>). - -<DT><KBD>k</KBD> -<DD> -<A NAME="IDX336"></A> -Save the translation on the kill ring, and delete it (<CODE>po-kill-msgstr</CODE>). - -<DT><KBD>w</KBD> -<DD> -<A NAME="IDX337"></A> -Save the translation on the kill ring, without deleting it -(<CODE>po-kill-ring-save-msgstr</CODE>). - -<DT><KBD>y</KBD> -<DD> -<A NAME="IDX338"></A> -Replace the translation, taking the new from the kill ring -(<CODE>po-yank-msgstr</CODE>). - -</DL> - -<P> -<A NAME="IDX339"></A> -<A NAME="IDX340"></A> -The command <KBD><KBD>RET</KBD></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 C-c</KBD> to close the subedit window with the automatically requoted -results, or <KBD>C-c C-k</KBD> to abort her modifications. See section <A HREF="gettext_6.html#SEC52">6.8 Details of Sub Edition</A>, -for more information. - -</P> -<P> -<A NAME="IDX341"></A> -<A NAME="IDX342"></A> -<A NAME="IDX343"></A> -The command <KBD><KBD>LFD</KBD></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> -<P> -<A NAME="IDX344"></A> -It is possible to arrange so, whenever editing an untranslated -entry, the <KBD><KBD>LFD</KBD></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> -<P> -<A NAME="IDX345"></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> -<P> -<A NAME="IDX346"></A> -<A NAME="IDX347"></A> -<A NAME="IDX348"></A> -<A NAME="IDX349"></A> -<A NAME="IDX350"></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> -<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> -<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> -<P> -<A NAME="IDX351"></A> -<A NAME="IDX352"></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 <EM>yanked</EM> into the PO file buffer. -See section `Yanking' in <CITE>The Emacs Editor</CITE>. -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> -<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> -<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> -<P> -<A NAME="IDX353"></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> -<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><KBD>DEL</KBD></KBD> command -for deleting the obsolete entry, knowing that <KBD><KBD>DEL</KBD></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><KBD>RET</KBD></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> -<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 section `Keyboard Macros' in <CITE>The Emacs Editor</CITE>. - -</P> - - -<H2><A NAME="SEC51" HREF="gettext_toc.html#TOC51">6.7 Modifying Comments</A></H2> -<P> -<A NAME="IDX354"></A> -<A NAME="IDX355"></A> - -</P> -<P> -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> -<P> -Comments not having whitespace after the initial <SAMP>`#´</SAMP>, for example, -those beginning with <SAMP>`#.´</SAMP> or <SAMP>`#:´</SAMP>, 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 section <A HREF="gettext_2.html#SEC9">2.2 The Format of PO Files</A>. - -</P> -<P> -The following commands are somewhat similar to those modifying translations, -so the general indications given for those apply here. See section <A HREF="gettext_6.html#SEC50">6.6 Modifying Translations</A>. - -</P> -<DL COMPACT> - -<DT><KBD>#</KBD> -<DD> -<A NAME="IDX356"></A> -Interactively edit the translator comments (<CODE>po-edit-comment</CODE>). - -<DT><KBD>K</KBD> -<DD> -<A NAME="IDX357"></A> -Save the translator comments on the kill ring, and delete it -(<CODE>po-kill-comment</CODE>). - -<DT><KBD>W</KBD> -<DD> -<A NAME="IDX358"></A> -Save the translator comments on the kill ring, without deleting it -(<CODE>po-kill-ring-save-comment</CODE>). - -<DT><KBD>Y</KBD> -<DD> -<A NAME="IDX359"></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 section <A HREF="gettext_6.html#SEC50">6.6 Modifying Translations</A>. - -</P> -<P> -<A NAME="IDX360"></A> -<A NAME="IDX361"></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 (<KBD>#</KBD>) 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 C-c</KBD> -allow the translator to tell she is finished with editing the comment. -See section <A HREF="gettext_6.html#SEC52">6.8 Details of Sub Edition</A>, for further details. - -</P> -<P> -<A NAME="IDX362"></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> -<P> -<A NAME="IDX363"></A> -<A NAME="IDX364"></A> -<A NAME="IDX365"></A> -<A NAME="IDX366"></A> -<A NAME="IDX367"></A> -<A NAME="IDX368"></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> -<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> -<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. - -</P> - - -<H2><A NAME="SEC52" HREF="gettext_toc.html#TOC52">6.8 Details of Sub Edition</A></H2> -<P> -<A NAME="IDX369"></A> - -</P> -<P> -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. - -</P> -<DL COMPACT> - -<DT><KBD>C-c C-c</KBD> -<DD> -<A NAME="IDX370"></A> -Complete edition (<CODE>po-subedit-exit</CODE>). - -<DT><KBD>C-c C-k</KBD> -<DD> -<A NAME="IDX371"></A> -Abort edition (<CODE>po-subedit-abort</CODE>). - -<DT><KBD>C-c C-a</KBD> -<DD> -<A NAME="IDX372"></A> -Consult auxiliary PO files (<CODE>po-subedit-cycle-auxiliary</CODE>). - -</DL> - -<P> -<A NAME="IDX373"></A> -<A NAME="IDX374"></A> -<A NAME="IDX375"></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 C-c</KBD> -(<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> -<P> -<A NAME="IDX376"></A> -<A NAME="IDX377"></A> -If the translator becomes unsatisfied with her translation or comment, -to the extent she prefers keeping what was existent prior to the -<KBD><KBD>RET</KBD></KBD> or <KBD>#</KBD> command, she may use the command <KBD>C-c C-k</KBD> -(<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 C-c</KBD>, then type <CODE>U</CODE> once for undoing the -whole effect of last edition. - -</P> -<P> -<A NAME="IDX378"></A> -<A NAME="IDX379"></A> -The command <KBD>C-c C-a</KBD> (<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 section <A HREF="gettext_6.html#SEC54">6.10 Consulting Auxiliary PO Files</A>). - -</P> -<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> -<P> -While editing her translation, the translator should pay attention to not -inserting unwanted <KBD><KBD>RET</KBD></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><KBD>RET</KBD></KBD> automatically puts the character <KBD><</KBD> -at the end of the string being edited, but this <KBD><</KBD> is not really -part of the string. On exiting the editing window with <KBD>C-c C-c</KBD>, -PO mode automatically removes such <KBD><</KBD> and all whitespace added after -it. If the translator adds characters after the terminating <KBD><</KBD>, it -looses its delimiting property and integrally becomes part of the string. -If she removes the delimiting <KBD><</KBD>, 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 <KBD><</KBD>, then -the delimiting <KBD><</KBD> may not be removed; so the string should appear, -in the editing window, as ending with two <KBD><</KBD> in a row. - -</P> -<P> -<A NAME="IDX380"></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><KBD>RET</KBD></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> -<P> -<A NAME="IDX381"></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. - -</P> - - -<H2><A NAME="SEC53" HREF="gettext_toc.html#TOC53">6.9 C Sources Context</A></H2> -<P> -<A NAME="IDX382"></A> -<A NAME="IDX383"></A> -<A NAME="IDX384"></A> - -</P> -<P> -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> -<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> -<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> -<P> -<A NAME="IDX385"></A> -The following commands are meant to help the translator at getting -program source context for a PO file entry. - -</P> -<DL COMPACT> - -<DT><KBD>s</KBD> -<DD> -<A NAME="IDX386"></A> -Resume the display of a program source context, or cycle through them -(<CODE>po-cycle-source-reference</CODE>). - -<DT><KBD>M-s</KBD> -<DD> -<A NAME="IDX387"></A> -Display of a program source context selected by menu -(<CODE>po-select-source-reference</CODE>). - -<DT><KBD>S</KBD> -<DD> -<A NAME="IDX388"></A> -Add a directory to the search path for source files -(<CODE>po-consider-source-path</CODE>). - -<DT><KBD>M-S</KBD> -<DD> -<A NAME="IDX389"></A> -Delete a directory from the search path for source files -(<CODE>po-ignore-source-path</CODE>). - -</DL> - -<P> -<A NAME="IDX390"></A> -<A NAME="IDX391"></A> -<A NAME="IDX392"></A> -<A NAME="IDX393"></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> -<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> -<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> -<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><KBD>TAB</KBD></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> -<P> -<A NAME="IDX394"></A> -<A NAME="IDX395"></A> -<A NAME="IDX396"></A> -<A NAME="IDX397"></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 <EM>search path</EM> 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. - -</P> - - -<H2><A NAME="SEC54" HREF="gettext_toc.html#TOC54">6.10 Consulting Auxiliary PO Files</A></H2> -<P> -<A NAME="IDX398"></A> - -</P> -<P> -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> -<P> -<A NAME="IDX399"></A> -<A NAME="IDX400"></A> -An <EM>auxiliary</EM> 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> -<P> -Here are the auxiliary file commands available in PO mode. - -</P> -<DL COMPACT> - -<DT><KBD>a</KBD> -<DD> -<A NAME="IDX401"></A> -Seek auxiliary files for another translation for the same entry -(<CODE>po-cycle-auxiliary</CODE>). - -<DT><KBD>C-c C-a</KBD> -<DD> -<A NAME="IDX402"></A> -Switch to a particular auxiliary file (<CODE>po-select-auxiliary</CODE>). - -<DT><KBD>A</KBD> -<DD> -<A NAME="IDX403"></A> -Declare this PO file as an auxiliary file (<CODE>po-consider-as-auxiliary</CODE>). - -<DT><KBD>M-A</KBD> -<DD> -<A NAME="IDX404"></A> -Remove this PO file from the list of auxiliary files -(<CODE>po-ignore-as-auxiliary</CODE>). - -</DL> - -<P> -<A NAME="IDX405"></A> -<A NAME="IDX406"></A> -<A NAME="IDX407"></A> -<A NAME="IDX408"></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> -<P> -<A NAME="IDX409"></A> -<A NAME="IDX410"></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> -<P> -<A NAME="IDX411"></A> -<A NAME="IDX412"></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> -<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> -<P> -<A NAME="IDX413"></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 the <SAMP>`M-x normalize´</SAMP> 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. - -</P> - - -<H2><A NAME="SEC55" HREF="gettext_toc.html#TOC55">6.11 Using Translation Compendia</A></H2> -<P> -<A NAME="IDX414"></A> - -</P> -<P> -<A NAME="IDX415"></A> -A <EM>compendium</EM> 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. - -</P> - - - -<H3><A NAME="SEC56" HREF="gettext_toc.html#TOC56">6.11.1 Creating Compendia</A></H3> -<P> -<A NAME="IDX416"></A> -<A NAME="IDX417"></A> - -</P> -<P> -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>. - -</P> - - -<H4><A NAME="SEC57" HREF="gettext_toc.html#TOC57">6.11.1.1 Concatenate PO Files</A></H4> - -<P> -<A NAME="IDX418"></A> -<A NAME="IDX419"></A> -To concatenate several valid PO files into one compendium file you can -use <SAMP>`msgcomm´</SAMP> or <SAMP>`msgcat´</SAMP> (the latter preferred): - -</P> - -<PRE> -msgcat -o compendium.po file1.po file2.po -</PRE> - -<P> -By default, <CODE>msgcat</CODE> will accumulate divergent translations -for the same string. Those occurences will be marked as <CODE>fuzzy</CODE> -and highly visible decorated; calling <CODE>msgcat</CODE> on -<TT>`file1.po´</TT>: - -</P> - -<PRE> -#: src/hello.c:200 -#, c-format -msgid "Report bugs to <%s>.\n" -msgstr "Comunicar `bugs' a <%s>.\n" -</PRE> - -<P> -and <TT>`file2.po´</TT>: - -</P> - -<PRE> -#: src/bye.c:100 -#, c-format -msgid "Report bugs to <%s>.\n" -msgstr "Comunicar \"bugs\" a <%s>.\n" -</PRE> - -<P> -will result in: - -</P> - -<PRE> -#: src/hello.c:200 src/bye.c:100 -#, fuzzy, c-format -msgid "Report bugs to <%s>.\n" -msgstr "" -"#-#-#-#-# file1.po #-#-#-#-#\n" -"Comunicar `bugs' a <%s>.\n" -"#-#-#-#-# file2.po #-#-#-#-#\n" -"Comunicar \"bugs\" a <%s>.\n" -</PRE> - -<P> -The translator will have to resolve this "conflict" manually; she -has to decide whether the first or the second version is appropriate -(or provide a new translation), to delete the "marker lines", and -finally to remove the <CODE>fuzzy</CODE> mark. - -</P> -<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 -<SAMP>`--use-first´</SAMP> switch: - -</P> - -<PRE> -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 "dirty" you must preprocess the input -files or postprocess the result using <SAMP>`msgattrib --translated --no-fuzzy´</SAMP>. - -</P> - - -<H4><A NAME="SEC58" HREF="gettext_toc.html#TOC58">6.11.1.2 Extract a Message Subset from a PO File</A></H4> -<P> -<A NAME="IDX420"></A> - -</P> -<P> -Nobody wants to translate the same messages again and again; thus you -may wish to have a compendium file containing <TT>`getopt.c´</TT> messages. - -</P> -<P> -To extract a message subset (e.g., all <TT>`getopt.c´</TT> messages) from an -existing PO file into one compendium file you can use <SAMP>`msggrep´</SAMP>: - -</P> - -<PRE> -msggrep --location src/getopt.c -o compendium.po file.po -</PRE> - - - -<H3><A NAME="SEC59" HREF="gettext_toc.html#TOC59">6.11.2 Using Compendia</A></H3> - -<P> -You can use a compendium file to initialize a translation from scratch -or to update an already existing translation. - -</P> - - -<H4><A NAME="SEC60" HREF="gettext_toc.html#TOC60">6.11.2.1 Initialize a New Translation File</A></H4> -<P> -<A NAME="IDX421"></A> - -</P> -<P> -Since a PO file with translations does not exist the translator can -merely use <TT>`/dev/null´</TT> to fake the "old" translation file. - -</P> - -<PRE> -msgmerge --compendium compendium.po -o file.po /dev/null file.pot -</PRE> - - - -<H4><A NAME="SEC61" HREF="gettext_toc.html#TOC61">6.11.2.2 Update an Existing Translation File</A></H4> -<P> -<A NAME="IDX422"></A> - -</P> -<P> -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 <SAMP>`sed´</SAMP>): - -</P> - -<PRE> -msgcat --use-first -o update.po compendium1.po compendium2.po file.po -msgmerge update.po file.pot | sed -e '/^#~/d' > file.po -</PRE> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_5.html">previous</A>, <A HREF="gettext_7.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_7.html b/doc/gettext_7.html deleted file mode 100644 index 3add0be..0000000 --- a/doc/gettext_7.html +++ /dev/null @@ -1,2076 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 7 Manipulating PO Files</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_6.html">previous</A>, <A HREF="gettext_8.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC62" HREF="gettext_toc.html#TOC62">7 Manipulating PO Files</A></H1> -<P> -<A NAME="IDX423"></A> - -</P> -<P> -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> -<P> -<A NAME="IDX424"></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 <SAMP>`msgcat´</SAMP>. It is then the translators' duty to deal with any -possible conflicts that arose during the merge. - -</P> -<P> -<A NAME="IDX425"></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 <SAMP>`msgconv´</SAMP> program. - -</P> -<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 <SAMP>`msggrep´</SAMP>, another is to create a POT file for -that source file and use <SAMP>`msgmerge´</SAMP>. - -</P> -<P> -<A NAME="IDX426"></A> -<A NAME="IDX427"></A> -When a translator wants to adjust some translation catalog for a special -dialect or orthography -- for example, German as written in Switzerland -versus German as written in Germany -- she needs to apply some text -processing to every message in the catalog. The tool for doing this is -<SAMP>`msgfilter´</SAMP>. - -</P> -<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 <SAMP>`msgfilter sed -e d | sed -e '/^# /d'´</SAMP>. 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> -<P> -<A NAME="IDX428"></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 <SAMP>`msgexec´</SAMP> program. - -</P> -<P> -<A NAME="IDX429"></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 <SAMP>`msguniq´</SAMP> program can be used. - -</P> -<P> -<SAMP>`msgcomm´</SAMP> is a more general tool for keeping or throwing away -duplicates, occurring in different files. - -</P> -<P> -<SAMP>`msgcmp´</SAMP> can be used to check whether a translation catalog is -completely translated. - -</P> -<P> -<A NAME="IDX430"></A> -<SAMP>`msgattrib´</SAMP> can be used to select and extract only the fuzzy -or untranslated messages of a translation catalog. - -</P> -<P> -<SAMP>`msgen´</SAMP> is useful as a first step for preparing English translation -catalogs. It copies each message's msgid to its msgstr. - -</P> - - - -<H2><A NAME="SEC63" HREF="gettext_toc.html#TOC63">7.1 Invoking the <CODE>msgcat</CODE> Program</A></H2> - -<P> -<A NAME="IDX431"></A> -<A NAME="IDX432"></A> - -<PRE> -msgcat [<VAR>option</VAR>] [<VAR>inputfile</VAR>]... -</PRE> - -<P> -<A NAME="IDX433"></A> -<A NAME="IDX434"></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. -<SAMP>`--less-than=2´</SAMP> 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. - -</P> - - -<H3><A NAME="SEC64" HREF="gettext_toc.html#TOC64">7.1.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR> ...´</SAMP> -<DD> -Input files. - -<DT><SAMP>`-f <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--files-from=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX435"></A> -<A NAME="IDX436"></A> -Read the names of the input files from <VAR>file</VAR> instead of getting -them from the command line. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX437"></A> -<A NAME="IDX438"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If <VAR>inputfile</VAR> is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC65" HREF="gettext_toc.html#TOC65">7.1.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX439"></A> -<A NAME="IDX440"></A> -Write output to specified file. - -</DL> - -<P> -<A NAME="IDX441"></A> -The results are written to standard output if no output file is specified -or if it is <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC66" HREF="gettext_toc.html#TOC66">7.1.3 Message selection</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-< <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--less-than=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX442"></A> -<A NAME="IDX443"></A> -Print messages with less than <VAR>number</VAR> definitions, defaults to infinite -if not set. - -<DT><SAMP>`-> <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--more-than=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX444"></A> -<A NAME="IDX445"></A> -Print messages with more than <VAR>number</VAR> definitions, defaults to 0 if not -set. - -<DT><SAMP>`-u´</SAMP> -<DD> -<DT><SAMP>`--unique´</SAMP> -<DD> -<A NAME="IDX446"></A> -<A NAME="IDX447"></A> -Shorthand for <SAMP>`--less-than=2´</SAMP>. Requests that only unique messages be -printed. - -</DL> - - - -<H3><A NAME="SEC67" HREF="gettext_toc.html#TOC67">7.1.4 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-t´</SAMP> -<DD> -<DT><SAMP>`--to-code=<VAR>name</VAR>´</SAMP> -<DD> -<A NAME="IDX448"></A> -<A NAME="IDX449"></A> -Specify encoding for output. - -<DT><SAMP>`--use-first´</SAMP> -<DD> -<A NAME="IDX450"></A> -Use first available translation for each message. Don't merge several -translations into one. - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX451"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX452"></A> -<A NAME="IDX453"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX454"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX455"></A> -<A NAME="IDX456"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX457"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX458"></A> -<A NAME="IDX459"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX460"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX461"></A> -<A NAME="IDX462"></A> -<A NAME="IDX463"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX464"></A> -<A NAME="IDX465"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC68" HREF="gettext_toc.html#TOC68">7.1.5 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX466"></A> -<A NAME="IDX467"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX468"></A> -<A NAME="IDX469"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC69" HREF="gettext_toc.html#TOC69">7.2 Invoking the <CODE>msgconv</CODE> Program</A></H2> - -<P> -<A NAME="IDX470"></A> -<A NAME="IDX471"></A> - -<PRE> -msgconv [<VAR>option</VAR>] [<VAR>inputfile</VAR>] -</PRE> - -<P> -<A NAME="IDX472"></A> -The <CODE>msgconv</CODE> program converts a translation catalog to a different -character encoding. - -</P> - - -<H3><A NAME="SEC70" HREF="gettext_toc.html#TOC70">7.2.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR>´</SAMP> -<DD> -Input PO file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX473"></A> -<A NAME="IDX474"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If no <VAR>inputfile</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC71" HREF="gettext_toc.html#TOC71">7.2.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX475"></A> -<A NAME="IDX476"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC72" HREF="gettext_toc.html#TOC72">7.2.3 Conversion target</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-t´</SAMP> -<DD> -<DT><SAMP>`--to-code=<VAR>name</VAR>´</SAMP> -<DD> -<A NAME="IDX477"></A> -<A NAME="IDX478"></A> -Specify encoding for output. - -</DL> - -<P> -The default encoding is the current locale's encoding. - -</P> - - -<H3><A NAME="SEC73" HREF="gettext_toc.html#TOC73">7.2.4 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX479"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX480"></A> -<A NAME="IDX481"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX482"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX483"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX484"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX485"></A> -<A NAME="IDX486"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX487"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX488"></A> -<A NAME="IDX489"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX490"></A> -<A NAME="IDX491"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC74" HREF="gettext_toc.html#TOC74">7.2.5 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX492"></A> -<A NAME="IDX493"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX494"></A> -<A NAME="IDX495"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC75" HREF="gettext_toc.html#TOC75">7.3 Invoking the <CODE>msggrep</CODE> Program</A></H2> - -<P> -<A NAME="IDX496"></A> -<A NAME="IDX497"></A> - -<PRE> -msggrep [<VAR>option</VAR>] [<VAR>inputfile</VAR>] -</PRE> - -<P> -<A NAME="IDX498"></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. - -</P> - - -<H3><A NAME="SEC76" HREF="gettext_toc.html#TOC76">7.3.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR>´</SAMP> -<DD> -Input PO file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX499"></A> -<A NAME="IDX500"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If no <VAR>inputfile</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC77" HREF="gettext_toc.html#TOC77">7.3.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX501"></A> -<A NAME="IDX502"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC78" HREF="gettext_toc.html#TOC78">7.3.3 Message selection</A></H3> - - -<PRE> - [-N <VAR>sourcefile</VAR>]... [-M <VAR>domainname</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 <SAMP>`-K´</SAMP> is given and its key (msgid or msgid_plural) matches - - <VAR>msgid-pattern</VAR>, -<LI>or if <SAMP>`-T´</SAMP> is given and its translation (msgstr) matches - - <VAR>msgstr-pattern</VAR>, -<LI>or if <SAMP>`-C´</SAMP> 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> -<P> -<VAR>msgid-pattern</VAR> or <VAR>msgstr-pattern</VAR> syntax: - -<PRE> - [-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. - -</P> -<DL COMPACT> - -<DT><SAMP>`-N <VAR>sourcefile</VAR>´</SAMP> -<DD> -<DT><SAMP>`--location=<VAR>sourcefile</VAR>´</SAMP> -<DD> -<A NAME="IDX503"></A> -<A NAME="IDX504"></A> -Select messages extracted from <VAR>sourcefile</VAR>. <VAR>sourcefile</VAR> can be -either a literal file name or a wildcard pattern. - -<DT><SAMP>`-M <VAR>domainname</VAR>´</SAMP> -<DD> -<DT><SAMP>`--domain=<VAR>domainname</VAR>´</SAMP> -<DD> -<A NAME="IDX505"></A> -<A NAME="IDX506"></A> -Select messages belonging to domain <VAR>domainname</VAR>. - -<DT><SAMP>`-K´</SAMP> -<DD> -<DT><SAMP>`--msgid´</SAMP> -<DD> -<A NAME="IDX507"></A> -<A NAME="IDX508"></A> -Start of patterns for the msgid. - -<DT><SAMP>`-T´</SAMP> -<DD> -<DT><SAMP>`--msgstr´</SAMP> -<DD> -<A NAME="IDX509"></A> -<A NAME="IDX510"></A> -Start of patterns for the msgstr. - -<DT><SAMP>`-E´</SAMP> -<DD> -<DT><SAMP>`--extended-regexp´</SAMP> -<DD> -<A NAME="IDX511"></A> -<A NAME="IDX512"></A> -Specify that <VAR>pattern</VAR> is an extended regular expression. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--fixed-strings´</SAMP> -<DD> -<A NAME="IDX513"></A> -<A NAME="IDX514"></A> -Specify that <VAR>pattern</VAR> is a set of newline-separated strings. - -<DT><SAMP>`-e <VAR>pattern</VAR>´</SAMP> -<DD> -<DT><SAMP>`--regexp=<VAR>pattern</VAR>´</SAMP> -<DD> -<A NAME="IDX515"></A> -<A NAME="IDX516"></A> -Use <VAR>pattern</VAR> as a regular expression. - -<DT><SAMP>`-f <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX517"></A> -<A NAME="IDX518"></A> -Obtain <VAR>pattern</VAR> from <VAR>file</VAR>. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--ignore-case´</SAMP> -<DD> -<A NAME="IDX519"></A> -<A NAME="IDX520"></A> -Ignore case distinctions. - -</DL> - - - -<H3><A NAME="SEC79" HREF="gettext_toc.html#TOC79">7.3.4 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX521"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX522"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX523"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX524"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX525"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX526"></A> -<A NAME="IDX527"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX528"></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. - -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX529"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX530"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC80" HREF="gettext_toc.html#TOC80">7.3.5 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX531"></A> -<A NAME="IDX532"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX533"></A> -<A NAME="IDX534"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC81" HREF="gettext_toc.html#TOC81">7.4 Invoking the <CODE>msgfilter</CODE> Program</A></H2> - -<P> -<A NAME="IDX535"></A> -<A NAME="IDX536"></A> - -<PRE> -msgfilter [<VAR>option</VAR>] <VAR>filter</VAR> [<VAR>filter-option</VAR>] -</PRE> - -<P> -<A NAME="IDX537"></A> -The <CODE>msgfilter</CODE> program applies a filter to all translations of a -translation catalog. - -</P> - - -<H3><A NAME="SEC82" HREF="gettext_toc.html#TOC82">7.4.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-i <VAR>inputfile</VAR>´</SAMP> -<DD> -<DT><SAMP>`--input=<VAR>inputfile</VAR>´</SAMP> -<DD> -<A NAME="IDX538"></A> -<A NAME="IDX539"></A> -Input PO file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX540"></A> -<A NAME="IDX541"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If no <VAR>inputfile</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC83" HREF="gettext_toc.html#TOC83">7.4.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX542"></A> -<A NAME="IDX543"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC84" HREF="gettext_toc.html#TOC84">7.4.3 The filter</A></H3> - -<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 <SAMP>`sed´</SAMP>. - -</P> -<P> -<A NAME="IDX544"></A> -Note: 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 <SAMP>`msgconv´</SAMP> -program, before invoking <SAMP>`msgfilter´</SAMP>. 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 -<SAMP>`msgconv´</SAMP> program and then make <SAMP>`msgfilter´</SAMP> work in an UTF-8 -locale, by using the <CODE>LC_ALL</CODE> environment variable. - -</P> -<P> -<A NAME="IDX545"></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 <SAMP>`sed´</SAMP> -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. - -</P> - - -<H3><A NAME="SEC85" HREF="gettext_toc.html#TOC85">7.4.4 Useful <VAR>filter-option</VAR>s when the <VAR>filter</VAR> is <SAMP>`sed´</SAMP></A></H3> - -<DL COMPACT> - -<DT><SAMP>`-e <VAR>script</VAR>´</SAMP> -<DD> -<DT><SAMP>`--expression=<VAR>script</VAR>´</SAMP> -<DD> -<A NAME="IDX546"></A> -<A NAME="IDX547"></A> -Add <VAR>script</VAR> to the commands to be executed. - -<DT><SAMP>`-f <VAR>scriptfile</VAR>´</SAMP> -<DD> -<DT><SAMP>`--file=<VAR>scriptfile</VAR>´</SAMP> -<DD> -<A NAME="IDX548"></A> -<A NAME="IDX549"></A> -Add the contents of <VAR>scriptfile</VAR> to the commands to be executed. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--quiet´</SAMP> -<DD> -<DT><SAMP>`--silent´</SAMP> -<DD> -<A NAME="IDX550"></A> -<A NAME="IDX551"></A> -<A NAME="IDX552"></A> -Suppress automatic printing of pattern space. - -</DL> - - - -<H3><A NAME="SEC86" HREF="gettext_toc.html#TOC86">7.4.5 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX553"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX554"></A> -Write the .po file using indented style. - -<DT><SAMP>`--keep-header´</SAMP> -<DD> -<A NAME="IDX555"></A> -Keep the header entry, i.e. the message with <SAMP>`msgid ""´</SAMP>, unmodified, -instead of filtering it. By default, the header entry is subject to -filtering like any other message. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX556"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX557"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX558"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX559"></A> -<A NAME="IDX560"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX561"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX562"></A> -<A NAME="IDX563"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX564"></A> -<A NAME="IDX565"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC87" HREF="gettext_toc.html#TOC87">7.4.6 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX566"></A> -<A NAME="IDX567"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX568"></A> -<A NAME="IDX569"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC88" HREF="gettext_toc.html#TOC88">7.5 Invoking the <CODE>msguniq</CODE> Program</A></H2> - -<P> -<A NAME="IDX570"></A> -<A NAME="IDX571"></A> - -<PRE> -msguniq [<VAR>option</VAR>] [<VAR>inputfile</VAR>] -</PRE> - -<P> -<A NAME="IDX572"></A> -<A NAME="IDX573"></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 <SAMP>`--repeated´</SAMP> option, only duplicates are -output, and all other messages are discarded. Comments and extracted -comments will be cumulated, except that if <SAMP>`--use-first´</SAMP> is -specified, they will be taken from the first translation. File positions -will be cumulated. When using the <SAMP>`--unique´</SAMP> option, duplicates are -discarded. - -</P> - - -<H3><A NAME="SEC89" HREF="gettext_toc.html#TOC89">7.5.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR>´</SAMP> -<DD> -Input PO file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX574"></A> -<A NAME="IDX575"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If no <VAR>inputfile</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC90" HREF="gettext_toc.html#TOC90">7.5.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX576"></A> -<A NAME="IDX577"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC91" HREF="gettext_toc.html#TOC91">7.5.3 Message selection</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-d´</SAMP> -<DD> -<DT><SAMP>`--repeated´</SAMP> -<DD> -<A NAME="IDX578"></A> -<A NAME="IDX579"></A> -Print only duplicates. - -<DT><SAMP>`-u´</SAMP> -<DD> -<DT><SAMP>`--unique´</SAMP> -<DD> -<A NAME="IDX580"></A> -<A NAME="IDX581"></A> -Print only unique messages, discard duplicates. - -</DL> - - - -<H3><A NAME="SEC92" HREF="gettext_toc.html#TOC92">7.5.4 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-t´</SAMP> -<DD> -<DT><SAMP>`--to-code=<VAR>name</VAR>´</SAMP> -<DD> -<A NAME="IDX582"></A> -<A NAME="IDX583"></A> -Specify encoding for output. - -<DT><SAMP>`--use-first´</SAMP> -<DD> -<A NAME="IDX584"></A> -Use first available translation for each message. Don't merge several -translations into one. - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX585"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX586"></A> -<A NAME="IDX587"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX588"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX589"></A> -<A NAME="IDX590"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX591"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX592"></A> -<A NAME="IDX593"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX594"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX595"></A> -<A NAME="IDX596"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX597"></A> -<A NAME="IDX598"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC93" HREF="gettext_toc.html#TOC93">7.5.5 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX599"></A> -<A NAME="IDX600"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX601"></A> -<A NAME="IDX602"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC94" HREF="gettext_toc.html#TOC94">7.6 Invoking the <CODE>msgcomm</CODE> Program</A></H2> - -<P> -<A NAME="IDX603"></A> -<A NAME="IDX604"></A> - -<PRE> -msgcomm [<VAR>option</VAR>] [<VAR>inputfile</VAR>]... -</PRE> - -<P> -<A NAME="IDX605"></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. -<SAMP>`--less-than=2´</SAMP> 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. - -</P> - - -<H3><A NAME="SEC95" HREF="gettext_toc.html#TOC95">7.6.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR> ...´</SAMP> -<DD> -Input files. - -<DT><SAMP>`-f <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--files-from=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX606"></A> -<A NAME="IDX607"></A> -Read the names of the input files from <VAR>file</VAR> instead of getting -them from the command line. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX608"></A> -<A NAME="IDX609"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If <VAR>inputfile</VAR> is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC96" HREF="gettext_toc.html#TOC96">7.6.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX610"></A> -<A NAME="IDX611"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC97" HREF="gettext_toc.html#TOC97">7.6.3 Message selection</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-< <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--less-than=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX612"></A> -<A NAME="IDX613"></A> -Print messages with less than <VAR>number</VAR> definitions, defaults to infinite -if not set. - -<DT><SAMP>`-> <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--more-than=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX614"></A> -<A NAME="IDX615"></A> -Print messages with more than <VAR>number</VAR> definitions, defaults to 1 if not -set. - -<DT><SAMP>`-u´</SAMP> -<DD> -<DT><SAMP>`--unique´</SAMP> -<DD> -<A NAME="IDX616"></A> -<A NAME="IDX617"></A> -Shorthand for <SAMP>`--less-than=2´</SAMP>. Requests that only unique messages be -printed. - -</DL> - - - -<H3><A NAME="SEC98" HREF="gettext_toc.html#TOC98">7.6.4 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX618"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX619"></A> -<A NAME="IDX620"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX621"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX622"></A> -<A NAME="IDX623"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX624"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX625"></A> -<A NAME="IDX626"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX627"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX628"></A> -<A NAME="IDX629"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX630"></A> -<A NAME="IDX631"></A> -Sort output by file location. - -<DT><SAMP>`--omit-header´</SAMP> -<DD> -<A NAME="IDX632"></A> -Don't write header with <SAMP>`msgid ""´</SAMP> entry. - -</DL> - - - -<H3><A NAME="SEC99" HREF="gettext_toc.html#TOC99">7.6.5 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX633"></A> -<A NAME="IDX634"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX635"></A> -<A NAME="IDX636"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC100" HREF="gettext_toc.html#TOC100">7.7 Invoking the <CODE>msgcmp</CODE> Program</A></H2> - -<P> -<A NAME="IDX637"></A> -<A NAME="IDX638"></A> - -<PRE> -msgcmp [<VAR>option</VAR>] <VAR>def</VAR>.po <VAR>ref</VAR>.pot -</PRE> - -<P> -<A NAME="IDX639"></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. - -</P> - - -<H3><A NAME="SEC101" HREF="gettext_toc.html#TOC101">7.7.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>def</VAR>.po´</SAMP> -<DD> -Translations. - -<DT><SAMP>`<VAR>ref</VAR>.pot´</SAMP> -<DD> -References to the sources. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX640"></A> -<A NAME="IDX641"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. - -</DL> - - - -<H3><A NAME="SEC102" HREF="gettext_toc.html#TOC102">7.7.2 Operation modifiers</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-m´</SAMP> -<DD> -<DT><SAMP>`--multi-domain´</SAMP> -<DD> -<A NAME="IDX642"></A> -<A NAME="IDX643"></A> -Apply <VAR>ref</VAR>.pot to each of the domains in <VAR>def</VAR>.po. - -</DL> - - - -<H3><A NAME="SEC103" HREF="gettext_toc.html#TOC103">7.7.3 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX644"></A> -<A NAME="IDX645"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX646"></A> -<A NAME="IDX647"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC104" HREF="gettext_toc.html#TOC104">7.8 Invoking the <CODE>msgattrib</CODE> Program</A></H2> - -<P> -<A NAME="IDX648"></A> -<A NAME="IDX649"></A> - -<PRE> -msgattrib [<VAR>option</VAR>] [<VAR>inputfile</VAR>] -</PRE> - -<P> -<A NAME="IDX650"></A> -<A NAME="IDX651"></A> -The <CODE>msgattrib</CODE> program filters the messages of a translation catalog -according to their attributes, and manipulates the attributes. - -</P> - - -<H3><A NAME="SEC105" HREF="gettext_toc.html#TOC105">7.8.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR>´</SAMP> -<DD> -Input PO file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX652"></A> -<A NAME="IDX653"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If no <VAR>inputfile</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC106" HREF="gettext_toc.html#TOC106">7.8.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX654"></A> -<A NAME="IDX655"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC107" HREF="gettext_toc.html#TOC107">7.8.3 Message selection</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--translated´</SAMP> -<DD> -<A NAME="IDX656"></A> -Keep translated messages, remove untranslated messages. - -<DT><SAMP>`--untranslated´</SAMP> -<DD> -<A NAME="IDX657"></A> -Keep untranslated messages, remove translated messages. - -<DT><SAMP>`--no-fuzzy´</SAMP> -<DD> -<A NAME="IDX658"></A> -Remove `fuzzy' marked messages. - -<DT><SAMP>`--only-fuzzy´</SAMP> -<DD> -<A NAME="IDX659"></A> -Keep `fuzzy' marked messages, remove all other messsages. - -<DT><SAMP>`--no-obsolete´</SAMP> -<DD> -<A NAME="IDX660"></A> -Remove obsolete #~ messages. - -<DT><SAMP>`--only-obsolete´</SAMP> -<DD> -<A NAME="IDX661"></A> -Keep obsolete #~ messages, remove all other messages. - -</DL> - - - -<H3><A NAME="SEC108" HREF="gettext_toc.html#TOC108">7.8.4 Attribute manipulation</A></H3> - -<P> -<A NAME="IDX662"></A> -Attributes are modified after the message selection/removal has been -performed. - -</P> -<DL COMPACT> - -<DT><SAMP>`--set-fuzzy´</SAMP> -<DD> -<A NAME="IDX663"></A> -Set all messages `fuzzy'. - -<DT><SAMP>`--clear-fuzzy´</SAMP> -<DD> -<A NAME="IDX664"></A> -Set all messages non-`fuzzy'. - -<DT><SAMP>`--set-obsolete´</SAMP> -<DD> -<A NAME="IDX665"></A> -Set all messages obsolete. - -<DT><SAMP>`--clear-obsolete´</SAMP> -<DD> -<A NAME="IDX666"></A> -Set all messages non-obsolete. - -<DT><SAMP>`--fuzzy´</SAMP> -<DD> -<A NAME="IDX667"></A> -Synonym for <SAMP>`--only-fuzzy --clear-fuzzy´</SAMP>: It keeps only the fuzzy -messages and removes their `fuzzy' mark. - -<DT><SAMP>`--obsolete´</SAMP> -<DD> -<A NAME="IDX668"></A> -Synonym for <SAMP>`--only-obsolete --clear-obsolete´</SAMP>: It keeps only the -obsolete messages and makes them non-obsolete. - -</DL> - - - -<H3><A NAME="SEC109" HREF="gettext_toc.html#TOC109">7.8.5 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX669"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX670"></A> -<A NAME="IDX671"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX672"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`-n´</SAMP> -<DD> -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX673"></A> -<A NAME="IDX674"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX675"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX676"></A> -<A NAME="IDX677"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX678"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX679"></A> -<A NAME="IDX680"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX681"></A> -<A NAME="IDX682"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC110" HREF="gettext_toc.html#TOC110">7.8.6 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX683"></A> -<A NAME="IDX684"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX685"></A> -<A NAME="IDX686"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC111" HREF="gettext_toc.html#TOC111">7.9 Invoking the <CODE>msgen</CODE> Program</A></H2> - -<P> -<A NAME="IDX687"></A> -<A NAME="IDX688"></A> - -<PRE> -msgen [<VAR>option</VAR>] <VAR>inputfile</VAR> -</PRE> - -<P> -<A NAME="IDX689"></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, and are marked fuzzy. - -</P> -<P> -Note: <SAMP>`msginit --no-translator --locale=en´</SAMP> 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. - -</P> - - -<H3><A NAME="SEC112" HREF="gettext_toc.html#TOC112">7.9.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>inputfile</VAR>´</SAMP> -<DD> -Input PO or POT file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX690"></A> -<A NAME="IDX691"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If <VAR>inputfile</VAR> is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC113" HREF="gettext_toc.html#TOC113">7.9.2 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX692"></A> -<A NAME="IDX693"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC114" HREF="gettext_toc.html#TOC114">7.9.3 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX694"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX695"></A> -<A NAME="IDX696"></A> -Write the .po file using indented style. - -<DT><SAMP>`--no-location´</SAMP> -<DD> -<A NAME="IDX697"></A> -Do not write <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines. - -<DT><SAMP>`--add-location´</SAMP> -<DD> -<A NAME="IDX698"></A> -Generate <SAMP>`#: <VAR>filename</VAR>:<VAR>line</VAR>´</SAMP> lines (default). - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX699"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX700"></A> -<A NAME="IDX701"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX702"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX703"></A> -<A NAME="IDX704"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -<DT><SAMP>`-F´</SAMP> -<DD> -<DT><SAMP>`--sort-by-file´</SAMP> -<DD> -<A NAME="IDX705"></A> -<A NAME="IDX706"></A> -Sort output by file location. - -</DL> - - - -<H3><A NAME="SEC115" HREF="gettext_toc.html#TOC115">7.9.4 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX707"></A> -<A NAME="IDX708"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX709"></A> -<A NAME="IDX710"></A> -Output version information and exit. - -</DL> - - - -<H2><A NAME="SEC116" HREF="gettext_toc.html#TOC116">7.10 Invoking the <CODE>msgexec</CODE> Program</A></H2> - -<P> -<A NAME="IDX711"></A> -<A NAME="IDX712"></A> - -<PRE> -msgexec [<VAR>option</VAR>] <VAR>command</VAR> [<VAR>command-option</VAR>] -</PRE> - -<P> -<A NAME="IDX713"></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> -<P> -<A NAME="IDX714"></A> -A special builtin command called <SAMP>`0´</SAMP> outputs the translation, followed -by a null byte. The output of <SAMP>`msgexec 0´</SAMP> is suitable as input for -<SAMP>`xargs -0´</SAMP>. - -</P> -<P> -<A NAME="IDX715"></A> -<A NAME="IDX716"></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. - -</P> -<P> -<A NAME="IDX717"></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 <SAMP>`msgconv´</SAMP> -program, before invoking <SAMP>`msgexec´</SAMP>. 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 -<SAMP>`msgconv´</SAMP> program and then make <SAMP>`msgexec´</SAMP> work in an UTF-8 -locale, by using the <CODE>LC_ALL</CODE> environment variable. - -</P> - - -<H3><A NAME="SEC117" HREF="gettext_toc.html#TOC117">7.10.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-i <VAR>inputfile</VAR>´</SAMP> -<DD> -<DT><SAMP>`--input=<VAR>inputfile</VAR>´</SAMP> -<DD> -<A NAME="IDX718"></A> -<A NAME="IDX719"></A> -Input PO file. - -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX720"></A> -<A NAME="IDX721"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If no <VAR>inputfile</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC118" HREF="gettext_toc.html#TOC118">7.10.2 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX722"></A> -<A NAME="IDX723"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX724"></A> -<A NAME="IDX725"></A> -Output version information and exit. - -</DL> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_6.html">previous</A>, <A HREF="gettext_8.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_8.html b/doc/gettext_8.html deleted file mode 100644 index 14458b2..0000000 --- a/doc/gettext_8.html +++ /dev/null @@ -1,725 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 8 Producing Binary MO Files</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_7.html">previous</A>, <A HREF="gettext_9.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC119" HREF="gettext_toc.html#TOC119">8 Producing Binary MO Files</A></H1> - - - -<H2><A NAME="SEC120" HREF="gettext_toc.html#TOC120">8.1 Invoking the <CODE>msgfmt</CODE> Program</A></H2> - -<P> -<A NAME="IDX726"></A> -<A NAME="IDX727"></A> - -<PRE> -msgfmt [<VAR>option</VAR>] <VAR>filename</VAR>.po ... -</PRE> - -<P> -<A NAME="IDX728"></A> -The <CODE>msgfmt</CODE> programs generates a binary message catalog from a textual -translation description. - -</P> - - -<H3><A NAME="SEC121" HREF="gettext_toc.html#TOC121">8.1.1 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>filename</VAR>.po ...´</SAMP> -<DD> -<DT><SAMP>`-D <VAR>directory</VAR>´</SAMP> -<DD> -<DT><SAMP>`--directory=<VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX729"></A> -<A NAME="IDX730"></A> -Add <VAR>directory</VAR> to the list of directories. Source files are -searched relative to this list of directories. The resulting <TT>`.po´</TT> -file will be written relative to the current directory, though. - -</DL> - -<P> -If an input file is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC122" HREF="gettext_toc.html#TOC122">8.1.2 Operation mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-j´</SAMP> -<DD> -<DT><SAMP>`--java´</SAMP> -<DD> -<A NAME="IDX731"></A> -<A NAME="IDX732"></A> -<A NAME="IDX733"></A> -Java mode: generate a Java <CODE>ResourceBundle</CODE> class. - -<DT><SAMP>`--java2´</SAMP> -<DD> -<A NAME="IDX734"></A> -Like --java, and assume Java2 (JDK 1.2 or higher). - -<DT><SAMP>`--tcl´</SAMP> -<DD> -<A NAME="IDX735"></A> -<A NAME="IDX736"></A> -Tcl mode: generate a tcl/msgcat <TT>`.msg´</TT> file. - -</DL> - - - -<H3><A NAME="SEC123" HREF="gettext_toc.html#TOC123">8.1.3 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX737"></A> -<A NAME="IDX738"></A> -Write output to specified file. - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX739"></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 <TT>`.mo´</TT> is added to the file name if it is not already -present. - -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 <SAMP>`-´</SAMP>, output is written to standard output. - -</P> - - -<H3><A NAME="SEC124" HREF="gettext_toc.html#TOC124">8.1.4 Output file location in Java mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-r <VAR>resource</VAR>´</SAMP> -<DD> -<DT><SAMP>`--resource=<VAR>resource</VAR>´</SAMP> -<DD> -<A NAME="IDX740"></A> -<A NAME="IDX741"></A> -Specify the resource name. - -<DT><SAMP>`-l <VAR>locale</VAR>´</SAMP> -<DD> -<DT><SAMP>`--locale=<VAR>locale</VAR>´</SAMP> -<DD> -<A NAME="IDX742"></A> -<A NAME="IDX743"></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>. - -<DT><SAMP>`-d <VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX744"></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 <SAMP>`-d´</SAMP> option is mandatory. The class -is written under the specified directory. - -</P> - - -<H3><A NAME="SEC125" HREF="gettext_toc.html#TOC125">8.1.5 Output file location in Tcl mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-l <VAR>locale</VAR>´</SAMP> -<DD> -<DT><SAMP>`--locale=<VAR>locale</VAR>´</SAMP> -<DD> -<A NAME="IDX745"></A> -<A NAME="IDX746"></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>. - -<DT><SAMP>`-d <VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX747"></A> -Specify the base directory of <TT>`.msg´</TT> message catalogs. - -</DL> - -<P> -The <SAMP>`-l´</SAMP> and <SAMP>`-d´</SAMP> options are mandatory. The <TT>`.msg´</TT> file is -written in the specified directory. - -</P> - - -<H3><A NAME="SEC126" HREF="gettext_toc.html#TOC126">8.1.6 Input file interpretation</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-c´</SAMP> -<DD> -<DT><SAMP>`--check´</SAMP> -<DD> -<A NAME="IDX748"></A> -<A NAME="IDX749"></A> -Perform all the checks implied by <CODE>--check-format</CODE>, <CODE>--check-header</CODE>, -<CODE>--check-domain</CODE>. - -<DT><SAMP>`--check-format´</SAMP> -<DD> -<A NAME="IDX750"></A> -<A NAME="IDX751"></A> -Check language dependent format strings. - -If the string represents a format string used in a -<CODE>printf</CODE>-like function both strings should have the same number of -<SAMP>`%´</SAMP> format specifiers, with matching types. If the flag -<CODE>c-format</CODE> or <CODE>possible-c-format</CODE> appears in the special -comment <KBD>#,</KBD> for this entry a check is performed. For example, the -check will diagnose using <SAMP>`%.*s´</SAMP> against <SAMP>`%s´</SAMP>, or <SAMP>`%d´</SAMP> -against <SAMP>`%s´</SAMP>, or <SAMP>`%d´</SAMP> against <SAMP>`%x´</SAMP>. It can even handle -positional parameters. - -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. - -To solve this problem the programmer can dictate the decision to the -<CODE>xgettext</CODE> program (see section <A HREF="gettext_13.html#SEC204">13.3.1 C Format Strings</A>). The translator should not -consider removing the flag from the <KBD>#,</KBD> line. This "fix" would be -reversed again as soon as <CODE>msgmerge</CODE> is called the next time. - -<DT><SAMP>`--check-header´</SAMP> -<DD> -<A NAME="IDX752"></A> -Verify presence and contents of the header entry. See section <A HREF="gettext_5.html#SEC36">5.2 Filling in the Header Entry</A>, -for a description of the various fields in the header entry. - -<DT><SAMP>`--check-domain´</SAMP> -<DD> -<A NAME="IDX753"></A> -Check for conflicts between domain directives and the <CODE>--output-file</CODE> -option - -<DT><SAMP>`-C´</SAMP> -<DD> -<DT><SAMP>`--check-compatibility´</SAMP> -<DD> -<A NAME="IDX754"></A> -<A NAME="IDX755"></A> -<A NAME="IDX756"></A> -Check that GNU msgfmt behaves like X/Open msgfmt. This will give an error -when attempting to use the GNU extensions. - -<DT><SAMP>`--check-accelerators[=<VAR>char</VAR>]´</SAMP> -<DD> -<A NAME="IDX757"></A> -<A NAME="IDX758"></A> -<A NAME="IDX759"></A> -<A NAME="IDX760"></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 <SAMP>`&´</SAMP> character. -Sometimes a keyboard accelerator is also called "keyboard mnemonic". -This check verifies that if the untranslated string has exactly one -<SAMP>`&´</SAMP> character, the translated string has exactly one <SAMP>`&´</SAMP> 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 acceleator mark -instead of <SAMP>`&´</SAMP>. - -<DT><SAMP>`-f´</SAMP> -<DD> -<DT><SAMP>`--use-fuzzy´</SAMP> -<DD> -<A NAME="IDX761"></A> -<A NAME="IDX762"></A> -<A NAME="IDX763"></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> - - - -<H3><A NAME="SEC127" HREF="gettext_toc.html#TOC127">8.1.7 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-a <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--alignment=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX764"></A> -<A NAME="IDX765"></A> -Align strings to <VAR>number</VAR> bytes (default: 1). - -<DT><SAMP>`--no-hash´</SAMP> -<DD> -<A NAME="IDX766"></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> - - - -<H3><A NAME="SEC128" HREF="gettext_toc.html#TOC128">8.1.8 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX767"></A> -<A NAME="IDX768"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX769"></A> -<A NAME="IDX770"></A> -Output version information and exit. - -<DT><SAMP>`--statistics´</SAMP> -<DD> -<A NAME="IDX771"></A> -Print statistics about translations. - -<DT><SAMP>`-v´</SAMP> -<DD> -<DT><SAMP>`--verbose´</SAMP> -<DD> -<A NAME="IDX772"></A> -<A NAME="IDX773"></A> -Increase verbosity level. - -</DL> - - - -<H2><A NAME="SEC129" HREF="gettext_toc.html#TOC129">8.2 Invoking the <CODE>msgunfmt</CODE> Program</A></H2> - -<P> -<A NAME="IDX774"></A> -<A NAME="IDX775"></A> - -<PRE> -msgunfmt [<VAR>option</VAR>] [<VAR>file</VAR>]... -</PRE> - -<P> -<A NAME="IDX776"></A> -The <CODE>msgunfmt</CODE> program converts a binary message catalog to a -Uniforum style .po file. - -</P> - - -<H3><A NAME="SEC130" HREF="gettext_toc.html#TOC130">8.2.1 Operation mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-j´</SAMP> -<DD> -<DT><SAMP>`--java´</SAMP> -<DD> -<A NAME="IDX777"></A> -<A NAME="IDX778"></A> -<A NAME="IDX779"></A> -Java mode: input is a Java <CODE>ResourceBundle</CODE> class. - -<DT><SAMP>`--tcl´</SAMP> -<DD> -<A NAME="IDX780"></A> -<A NAME="IDX781"></A> -Tcl mode: input is a tcl/msgcat <TT>`.msg´</TT> file. - -</DL> - - - -<H3><A NAME="SEC131" HREF="gettext_toc.html#TOC131">8.2.2 Input file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`<VAR>file</VAR> ...´</SAMP> -<DD> -Input .mo files. - -</DL> - -<P> -If no input <VAR>file</VAR> is given or if it is <SAMP>`-´</SAMP>, standard input is read. - -</P> - - -<H3><A NAME="SEC132" HREF="gettext_toc.html#TOC132">8.2.3 Input file location in Java mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-r <VAR>resource</VAR>´</SAMP> -<DD> -<DT><SAMP>`--resource=<VAR>resource</VAR>´</SAMP> -<DD> -<A NAME="IDX782"></A> -<A NAME="IDX783"></A> -Specify the resource name. - -<DT><SAMP>`-l <VAR>locale</VAR>´</SAMP> -<DD> -<DT><SAMP>`--locale=<VAR>locale</VAR>´</SAMP> -<DD> -<A NAME="IDX784"></A> -<A NAME="IDX785"></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>. - -</P> - - -<H3><A NAME="SEC133" HREF="gettext_toc.html#TOC133">8.2.4 Input file location in Tcl mode</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-l <VAR>locale</VAR>´</SAMP> -<DD> -<DT><SAMP>`--locale=<VAR>locale</VAR>´</SAMP> -<DD> -<A NAME="IDX786"></A> -<A NAME="IDX787"></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>. - -<DT><SAMP>`-d <VAR>directory</VAR>´</SAMP> -<DD> -<A NAME="IDX788"></A> -Specify the base directory of <TT>`.msg´</TT> message catalogs. - -</DL> - -<P> -The <SAMP>`-l´</SAMP> and <SAMP>`-d´</SAMP> options are mandatory. The <TT>`.msg´</TT> file is -located in the specified directory. - -</P> - - -<H3><A NAME="SEC134" HREF="gettext_toc.html#TOC134">8.2.5 Output file location</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-o <VAR>file</VAR>´</SAMP> -<DD> -<DT><SAMP>`--output-file=<VAR>file</VAR>´</SAMP> -<DD> -<A NAME="IDX789"></A> -<A NAME="IDX790"></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 <SAMP>`-´</SAMP>. - -</P> - - -<H3><A NAME="SEC135" HREF="gettext_toc.html#TOC135">8.2.6 Output details</A></H3> - -<DL COMPACT> - -<DT><SAMP>`--force-po´</SAMP> -<DD> -<A NAME="IDX791"></A> -Always write an output file even if it contains no message. - -<DT><SAMP>`-i´</SAMP> -<DD> -<DT><SAMP>`--indent´</SAMP> -<DD> -<A NAME="IDX792"></A> -<A NAME="IDX793"></A> -Write the .po file using indented style. - -<DT><SAMP>`--strict´</SAMP> -<DD> -<A NAME="IDX794"></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. - -<DT><SAMP>`-w <VAR>number</VAR>´</SAMP> -<DD> -<DT><SAMP>`--width=<VAR>number</VAR>´</SAMP> -<DD> -<A NAME="IDX795"></A> -<A NAME="IDX796"></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>. - -<DT><SAMP>`--no-wrap´</SAMP> -<DD> -<A NAME="IDX797"></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. - -<DT><SAMP>`-s´</SAMP> -<DD> -<DT><SAMP>`--sort-output´</SAMP> -<DD> -<A NAME="IDX798"></A> -<A NAME="IDX799"></A> -<A NAME="IDX800"></A> -Generate sorted output. Note that using this option makes it much harder -for the translator to understand each message's context. - -</DL> - - - -<H3><A NAME="SEC136" HREF="gettext_toc.html#TOC136">8.2.7 Informative output</A></H3> - -<DL COMPACT> - -<DT><SAMP>`-h´</SAMP> -<DD> -<DT><SAMP>`--help´</SAMP> -<DD> -<A NAME="IDX801"></A> -<A NAME="IDX802"></A> -Display this help and exit. - -<DT><SAMP>`-V´</SAMP> -<DD> -<DT><SAMP>`--version´</SAMP> -<DD> -<A NAME="IDX803"></A> -<A NAME="IDX804"></A> -Output version information and exit. - -<DT><SAMP>`-v´</SAMP> -<DD> -<DT><SAMP>`--verbose´</SAMP> -<DD> -<A NAME="IDX805"></A> -<A NAME="IDX806"></A> -Increase verbosity level. - -</DL> - - - -<H2><A NAME="SEC137" HREF="gettext_toc.html#TOC137">8.3 The Format of GNU MO Files</A></H2> -<P> -<A NAME="IDX807"></A> -<A NAME="IDX808"></A> - -</P> -<P> -The format of the generated MO files is best described by a picture, -which appears below. - -</P> -<P> -<A NAME="IDX809"></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>. The second -word describes the current revision of the file format. For now the -revision is 0. This might change in future versions, and ensures -that the readers of MO files can distinguish new formats from old -ones, so that both can be handled correctly. The version is kept -separate from the magic number, instead of using different magic -numbers for different formats, mainly because <TT>`/etc/magic´</TT> is -not updated often. It might be better to have magic separated from -internal format version identification. - -</P> -<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> -<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> -<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> -<P> -<A NAME="IDX810"></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> -<P> -As for the strings themselves, they follow the hash file, and each -is terminated with a <KBD>NUL</KBD>, and this <KBD>NUL</KBD> 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> -<P> -<A NAME="IDX811"></A> -Plural forms are stored by letting the plural of the original string -follow the singular of the original string, separated through a -<KBD>NUL</KBD> 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 -<KBD>NUL</KBD> byte. Here also, the length in the string descriptor -includes all of them. - -</P> -<P> -Nothing prevents a MO file from having embedded <KBD>NUL</KBD>s in strings. -However, the program interface currently used already presumes -that strings are <KBD>NUL</KBD> terminated, so embedded <KBD>NUL</KBD>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 <KBD>NUL</KBD> bytes may -accidently appear. (No, we don't want to have wide characters in MO -files. They would make the file unnecessarily large, and the -<SAMP>`wchar_t´</SAMP> type being platform dependent, MO files would be -platform dependent as well.) - -</P> -<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. - -</P> - -<PRE> - 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 & offset 0th string ----------------. - O + 8 | length & offset 1st string ------------------. - ... ... | | -O + ((N-1)*8)| length & offset (N-1)th string | | | - | | | | - T | length & offset 0th translation ---------------. - T + 8 | length & offset 1st translation -----------------. - ... ... | | | | -T + ((N-1)*8)| length & offset (N-1)th translation | | | | | - | | | | | | - H | start hash table | | | | | - ... ... | | | | - H + S * 4 | end hash table | | | | | - | | | | | | - | NUL terminated 0th string <----------------' | | | - | | | | | - | NUL terminated 1st string <------------------' | | - | | | | - ... ... | | - | | | | - | NUL terminated 0th translation <---------------' | - | | | - | NUL terminated 1st translation <-----------------' - | | - ... ... - | | - +------------------------------------------+ -</PRE> - -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_7.html">previous</A>, <A HREF="gettext_9.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_9.html b/doc/gettext_9.html deleted file mode 100644 index 5305cb1..0000000 --- a/doc/gettext_9.html +++ /dev/null @@ -1,135 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - 9 The User's View</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_8.html">previous</A>, <A HREF="gettext_10.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC138" HREF="gettext_toc.html#TOC138">9 The User's View</A></H1> - -<P> -When GNU <CODE>gettext</CODE> will truly have reached its goal, average users -should feel some kind of astonished pleasure, seeing the effect of -that strange kind of magic that just makes their own native language -appear everywhere on their screens. As for naive users, they would -ideally have no special pleasure about it, merely taking their own -language for <EM>granted</EM>, and becoming rather unhappy otherwise. - -</P> -<P> -So, let's try to describe here how we would like the magic to operate, -as we want the users' view to be the simplest, among all ways one -could look at GNU <CODE>gettext</CODE>. All other software engineers: -programmers, translators, maintainers, should work together in such a -way that the magic becomes possible. This is a long and progressive -undertaking, and information is available about the progress of the -Translation Project. - -</P> -<P> -When a package is distributed, there are two kinds of users: -<EM>installers</EM> who fetch the distribution, unpack it, configure -it, compile it and install it for themselves or others to use; and -<EM>end users</EM> that call programs of the package, once these have -been installed at their site. GNU <CODE>gettext</CODE> is offering magic -for both installers and end users. - -</P> - - - -<H2><A NAME="SEC139" HREF="gettext_toc.html#TOC139">9.1 The Current <TT>`ABOUT-NLS´</TT> Matrix</A></H2> -<P> -<A NAME="IDX812"></A> -<A NAME="IDX813"></A> -<A NAME="IDX814"></A> - -</P> -<P> -Languages are not equally supported in all packages using GNU -<CODE>gettext</CODE>. To know if some package uses GNU <CODE>gettext</CODE>, one -may check the distribution for the <TT>`ABOUT-NLS´</TT> information file, for -some <TT>`<VAR>ll</VAR>.po´</TT> files, often kept together into some <TT>`po/´</TT> -directory, or for an <TT>`intl/´</TT> directory. Internationalized packages -have usually many <TT>`<VAR>ll</VAR>.po´</TT> files, where <VAR>ll</VAR> represents -the language. section <A HREF="gettext_9.html#SEC141">9.3 Magic for End Users</A> for a complete description of the format -for <VAR>ll</VAR>. - -</P> -<P> -More generally, a matrix is available for showing the current state -of the Translation Project, listing which packages are prepared for -multi-lingual messages, and which languages are supported by each. -Because this information changes often, this matrix is not kept within -this GNU <CODE>gettext</CODE> manual. This information is often found in -file <TT>`ABOUT-NLS´</TT> from various distributions, but is also as old as -the distribution itself. A recent copy of this <TT>`ABOUT-NLS´</TT> file, -containing up-to-date information, should generally be found on the -Translation Project sites, and also on most GNU archive sites. - -</P> - - -<H2><A NAME="SEC140" HREF="gettext_toc.html#TOC140">9.2 Magic for Installers</A></H2> -<P> -<A NAME="IDX815"></A> -<A NAME="IDX816"></A> - -</P> -<P> -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 <SAMP>`./configure ---with-included-gettext´</SAMP> bypasses system <CODE>gettext</CODE> to -use the included GNU <CODE>gettext</CODE> instead, -while <SAMP>`./configure --disable-nls´</SAMP> -produces programs totally unable to translate messages. - -</P> -<P> -<A NAME="IDX817"></A> -Internationalized packages have usually many <TT>`<VAR>ll</VAR>.po´</TT> -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. - -</P> - - -<H2><A NAME="SEC141" HREF="gettext_toc.html#TOC141">9.3 Magic for End Users</A></H2> -<P> -<A NAME="IDX818"></A> -<A NAME="IDX819"></A> -<A NAME="IDX820"></A> - -</P> -<P> -<A NAME="IDX821"></A> -We consider here those packages using GNU <CODE>gettext</CODE> internally, -and for which the installers did not disable translation at -<EM>configure</EM> time. Then, users only have to set the <CODE>LANG</CODE> -environment variable to the appropriate <SAMP>`<VAR>ll</VAR>_<VAR>CC</VAR>´</SAMP> -combination prior to using the programs in the package. See section <A HREF="gettext_9.html#SEC139">9.1 The Current <TT>`ABOUT-NLS´</TT> Matrix</A>. -For example, let's presume a German site. At the shell prompt, users -merely have to execute <SAMP>`setenv LANG de_DE´</SAMP> (in <CODE>csh</CODE>) or -<SAMP>`export LANG; LANG=de_DE´</SAMP> (in <CODE>sh</CODE>). They could even do -this from their <TT>`.login´</TT> or <TT>`.profile´</TT> file. - -</P> -<P><HR><P> -Go to the <A HREF="gettext_1.html">first</A>, <A HREF="gettext_8.html">previous</A>, <A HREF="gettext_10.html">next</A>, <A HREF="gettext_22.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gettext_foot.html b/doc/gettext_foot.html deleted file mode 100644 index 9a197ae..0000000 --- a/doc/gettext_foot.html +++ /dev/null @@ -1,43 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - Footnotes</TITLE> -</HEAD> -<BODY> -<H1>GNU gettext tools, version 0.11.6-pre2</H1> -<H2>Native Language Support Library and Tools</H2> -<H2>Edition 0.11.6-pre2, 30 October 2002</H2> -<ADDRESS>Ulrich Drepper</ADDRESS> -<ADDRESS>Jim Meyering</ADDRESS> -<ADDRESS>François Pinard</ADDRESS> -<ADDRESS>Bruno Haible</ADDRESS> -<P> -<P><HR><P> -<H3><A NAME="FOOT1" HREF="gettext_1.html#DOCF1">(1)</A></H3> -<P>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. -<H3><A NAME="FOOT2" HREF="gettext_2.html#DOCF2">(2)</A></H3> -<P>This -limitation is not imposed by GNU <CODE>gettext</CODE>, but is for compatibility -with the <CODE>msgfmt</CODE> implementation on Solaris. -<H3><A NAME="FOOT3" HREF="gettext_10.html#DOCF3">(3)</A></H3> -<P>Some -system, eg Ultrix, 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. -<H3><A NAME="FOOT4" HREF="gettext_10.html#DOCF4">(4)</A></H3> -<P>When the system does not support <CODE>setlocale</CODE> its behavior -in setting the locale values is simulated by looking at the environment -variables. -<H3><A NAME="FOOT5" HREF="gettext_10.html#DOCF5">(5)</A></H3> -<P>Additions are welcome. Send appropriate information to -<A HREF="mailto:bug-glibc-manual@gnu.org">bug-glibc-manual@gnu.org</A>. -<P><HR><P> -This document was generated on 5 November 2002 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52a.</P> -</BODY> -</HTML> diff --git a/doc/gettext_toc.html b/doc/gettext_toc.html deleted file mode 100644 index 7d63374..0000000 --- a/doc/gettext_toc.html +++ /dev/null @@ -1,363 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52a - from gettext.texi on 5 November 2002 --> - -<TITLE>GNU gettext utilities - Table of Contents</TITLE> -</HEAD> -<BODY> -<H1>GNU gettext tools, version 0.11.6-pre2</H1> -<H2>Native Language Support Library and Tools</H2> -<H2>Edition 0.11.6-pre2, 30 October 2002</H2> -<ADDRESS>Ulrich Drepper</ADDRESS> -<ADDRESS>Jim Meyering</ADDRESS> -<ADDRESS>François Pinard</ADDRESS> -<ADDRESS>Bruno Haible</ADDRESS> -<P> -<P><HR><P> -<UL> -<LI><A NAME="TOC1" HREF="gettext_1.html#SEC1">1 Introduction</A> -<UL> -<LI><A NAME="TOC2" HREF="gettext_1.html#SEC2">1.1 The Purpose of GNU <CODE>gettext</CODE></A> -<LI><A NAME="TOC3" HREF="gettext_1.html#SEC3">1.2 I18n, L10n, and Such</A> -<LI><A NAME="TOC4" HREF="gettext_1.html#SEC4">1.3 Aspects in Native Language Support</A> -<LI><A NAME="TOC5" HREF="gettext_1.html#SEC5">1.4 Files Conveying Translations</A> -<LI><A NAME="TOC6" HREF="gettext_1.html#SEC6">1.5 Overview of GNU <CODE>gettext</CODE></A> -</UL> -<LI><A NAME="TOC7" HREF="gettext_2.html#SEC7">2 PO Files and PO Mode Basics</A> -<UL> -<LI><A NAME="TOC8" HREF="gettext_2.html#SEC8">2.1 Completing GNU <CODE>gettext</CODE> Installation</A> -<LI><A NAME="TOC9" HREF="gettext_2.html#SEC9">2.2 The Format of PO Files</A> -<LI><A NAME="TOC10" HREF="gettext_2.html#SEC10">2.3 Main PO mode Commands</A> -<LI><A NAME="TOC11" HREF="gettext_2.html#SEC11">2.4 Entry Positioning</A> -<LI><A NAME="TOC12" HREF="gettext_2.html#SEC12">2.5 Normalizing Strings in Entries</A> -</UL> -<LI><A NAME="TOC13" HREF="gettext_3.html#SEC13">3 Preparing Program Sources</A> -<UL> -<LI><A NAME="TOC14" HREF="gettext_3.html#SEC14">3.1 Triggering <CODE>gettext</CODE> Operations</A> -<LI><A NAME="TOC15" HREF="gettext_3.html#SEC15">3.2 Preparing Translatable Strings</A> -<LI><A NAME="TOC16" HREF="gettext_3.html#SEC16">3.3 How Marks Appear in Sources</A> -<LI><A NAME="TOC17" HREF="gettext_3.html#SEC17">3.4 Marking Translatable Strings</A> -<LI><A NAME="TOC18" HREF="gettext_3.html#SEC18">3.5 Special Comments preceding Keywords</A> -<LI><A NAME="TOC19" HREF="gettext_3.html#SEC19">3.6 Special Cases of Translatable Strings</A> -</UL> -<LI><A NAME="TOC20" HREF="gettext_4.html#SEC20">4 Making the PO Template File</A> -<UL> -<LI><A NAME="TOC21" HREF="gettext_4.html#SEC21">4.1 Invoking the <CODE>xgettext</CODE> Program</A> -<UL> -<LI><A NAME="TOC22" HREF="gettext_4.html#SEC22">4.1.1 Input file location</A> -<LI><A NAME="TOC23" HREF="gettext_4.html#SEC23">4.1.2 Output file location</A> -<LI><A NAME="TOC24" HREF="gettext_4.html#SEC24">4.1.3 Choice of input file language</A> -<LI><A NAME="TOC25" HREF="gettext_4.html#SEC25">4.1.4 Input file interpretation</A> -<LI><A NAME="TOC26" HREF="gettext_4.html#SEC26">4.1.5 Operation mode</A> -<LI><A NAME="TOC27" HREF="gettext_4.html#SEC27">4.1.6 Language=C/C++ specific options</A> -<LI><A NAME="TOC28" HREF="gettext_4.html#SEC28">4.1.7 Output details</A> -<LI><A NAME="TOC29" HREF="gettext_4.html#SEC29">4.1.8 Informative output</A> -</UL> -</UL> -<LI><A NAME="TOC30" HREF="gettext_5.html#SEC30">5 Creating a New PO File</A> -<UL> -<LI><A NAME="TOC31" HREF="gettext_5.html#SEC31">5.1 Invoking the <CODE>msginit</CODE> Program</A> -<UL> -<LI><A NAME="TOC32" HREF="gettext_5.html#SEC32">5.1.1 Input file location</A> -<LI><A NAME="TOC33" HREF="gettext_5.html#SEC33">5.1.2 Output file location</A> -<LI><A NAME="TOC34" HREF="gettext_5.html#SEC34">5.1.3 Output details</A> -<LI><A NAME="TOC35" HREF="gettext_5.html#SEC35">5.1.4 Informative output</A> -</UL> -<LI><A NAME="TOC36" HREF="gettext_5.html#SEC36">5.2 Filling in the Header Entry</A> -</UL> -<LI><A NAME="TOC37" HREF="gettext_6.html#SEC37">6 Updating Existing PO Files</A> -<UL> -<LI><A NAME="TOC38" HREF="gettext_6.html#SEC38">6.1 Invoking the <CODE>msgmerge</CODE> Program</A> -<UL> -<LI><A NAME="TOC39" HREF="gettext_6.html#SEC39">6.1.1 Input file location</A> -<LI><A NAME="TOC40" HREF="gettext_6.html#SEC40">6.1.2 Operation mode</A> -<LI><A NAME="TOC41" HREF="gettext_6.html#SEC41">6.1.3 Output file location</A> -<LI><A NAME="TOC42" HREF="gettext_6.html#SEC42">6.1.4 Output file location in update mode</A> -<LI><A NAME="TOC43" HREF="gettext_6.html#SEC43">6.1.5 Operation modifiers</A> -<LI><A NAME="TOC44" HREF="gettext_6.html#SEC44">6.1.6 Output details</A> -<LI><A NAME="TOC45" HREF="gettext_6.html#SEC45">6.1.7 Informative output</A> -</UL> -<LI><A NAME="TOC46" HREF="gettext_6.html#SEC46">6.2 Translated Entries</A> -<LI><A NAME="TOC47" HREF="gettext_6.html#SEC47">6.3 Fuzzy Entries</A> -<LI><A NAME="TOC48" HREF="gettext_6.html#SEC48">6.4 Untranslated Entries</A> -<LI><A NAME="TOC49" HREF="gettext_6.html#SEC49">6.5 Obsolete Entries</A> -<LI><A NAME="TOC50" HREF="gettext_6.html#SEC50">6.6 Modifying Translations</A> -<LI><A NAME="TOC51" HREF="gettext_6.html#SEC51">6.7 Modifying Comments</A> -<LI><A NAME="TOC52" HREF="gettext_6.html#SEC52">6.8 Details of Sub Edition</A> -<LI><A NAME="TOC53" HREF="gettext_6.html#SEC53">6.9 C Sources Context</A> -<LI><A NAME="TOC54" HREF="gettext_6.html#SEC54">6.10 Consulting Auxiliary PO Files</A> -<LI><A NAME="TOC55" HREF="gettext_6.html#SEC55">6.11 Using Translation Compendia</A> -<UL> -<LI><A NAME="TOC56" HREF="gettext_6.html#SEC56">6.11.1 Creating Compendia</A> -<UL> -<LI><A NAME="TOC57" HREF="gettext_6.html#SEC57">6.11.1.1 Concatenate PO Files</A> -<LI><A NAME="TOC58" HREF="gettext_6.html#SEC58">6.11.1.2 Extract a Message Subset from a PO File</A> -</UL> -<LI><A NAME="TOC59" HREF="gettext_6.html#SEC59">6.11.2 Using Compendia</A> -<UL> -<LI><A NAME="TOC60" HREF="gettext_6.html#SEC60">6.11.2.1 Initialize a New Translation File</A> -<LI><A NAME="TOC61" HREF="gettext_6.html#SEC61">6.11.2.2 Update an Existing Translation File</A> -</UL> -</UL> -</UL> -<LI><A NAME="TOC62" HREF="gettext_7.html#SEC62">7 Manipulating PO Files</A> -<UL> -<LI><A NAME="TOC63" HREF="gettext_7.html#SEC63">7.1 Invoking the <CODE>msgcat</CODE> Program</A> -<UL> -<LI><A NAME="TOC64" HREF="gettext_7.html#SEC64">7.1.1 Input file location</A> -<LI><A NAME="TOC65" HREF="gettext_7.html#SEC65">7.1.2 Output file location</A> -<LI><A NAME="TOC66" HREF="gettext_7.html#SEC66">7.1.3 Message selection</A> -<LI><A NAME="TOC67" HREF="gettext_7.html#SEC67">7.1.4 Output details</A> -<LI><A NAME="TOC68" HREF="gettext_7.html#SEC68">7.1.5 Informative output</A> -</UL> -<LI><A NAME="TOC69" HREF="gettext_7.html#SEC69">7.2 Invoking the <CODE>msgconv</CODE> Program</A> -<UL> -<LI><A NAME="TOC70" HREF="gettext_7.html#SEC70">7.2.1 Input file location</A> -<LI><A NAME="TOC71" HREF="gettext_7.html#SEC71">7.2.2 Output file location</A> -<LI><A NAME="TOC72" HREF="gettext_7.html#SEC72">7.2.3 Conversion target</A> -<LI><A NAME="TOC73" HREF="gettext_7.html#SEC73">7.2.4 Output details</A> -<LI><A NAME="TOC74" HREF="gettext_7.html#SEC74">7.2.5 Informative output</A> -</UL> -<LI><A NAME="TOC75" HREF="gettext_7.html#SEC75">7.3 Invoking the <CODE>msggrep</CODE> Program</A> -<UL> -<LI><A NAME="TOC76" HREF="gettext_7.html#SEC76">7.3.1 Input file location</A> -<LI><A NAME="TOC77" HREF="gettext_7.html#SEC77">7.3.2 Output file location</A> -<LI><A NAME="TOC78" HREF="gettext_7.html#SEC78">7.3.3 Message selection</A> -<LI><A NAME="TOC79" HREF="gettext_7.html#SEC79">7.3.4 Output details</A> -<LI><A NAME="TOC80" HREF="gettext_7.html#SEC80">7.3.5 Informative output</A> -</UL> -<LI><A NAME="TOC81" HREF="gettext_7.html#SEC81">7.4 Invoking the <CODE>msgfilter</CODE> Program</A> -<UL> -<LI><A NAME="TOC82" HREF="gettext_7.html#SEC82">7.4.1 Input file location</A> -<LI><A NAME="TOC83" HREF="gettext_7.html#SEC83">7.4.2 Output file location</A> -<LI><A NAME="TOC84" HREF="gettext_7.html#SEC84">7.4.3 The filter</A> -<LI><A NAME="TOC85" HREF="gettext_7.html#SEC85">7.4.4 Useful <VAR>filter-option</VAR>s when the <VAR>filter</VAR> is <SAMP>`sed´</SAMP></A> -<LI><A NAME="TOC86" HREF="gettext_7.html#SEC86">7.4.5 Output details</A> -<LI><A NAME="TOC87" HREF="gettext_7.html#SEC87">7.4.6 Informative output</A> -</UL> -<LI><A NAME="TOC88" HREF="gettext_7.html#SEC88">7.5 Invoking the <CODE>msguniq</CODE> Program</A> -<UL> -<LI><A NAME="TOC89" HREF="gettext_7.html#SEC89">7.5.1 Input file location</A> -<LI><A NAME="TOC90" HREF="gettext_7.html#SEC90">7.5.2 Output file location</A> -<LI><A NAME="TOC91" HREF="gettext_7.html#SEC91">7.5.3 Message selection</A> -<LI><A NAME="TOC92" HREF="gettext_7.html#SEC92">7.5.4 Output details</A> -<LI><A NAME="TOC93" HREF="gettext_7.html#SEC93">7.5.5 Informative output</A> -</UL> -<LI><A NAME="TOC94" HREF="gettext_7.html#SEC94">7.6 Invoking the <CODE>msgcomm</CODE> Program</A> -<UL> -<LI><A NAME="TOC95" HREF="gettext_7.html#SEC95">7.6.1 Input file location</A> -<LI><A NAME="TOC96" HREF="gettext_7.html#SEC96">7.6.2 Output file location</A> -<LI><A NAME="TOC97" HREF="gettext_7.html#SEC97">7.6.3 Message selection</A> -<LI><A NAME="TOC98" HREF="gettext_7.html#SEC98">7.6.4 Output details</A> -<LI><A NAME="TOC99" HREF="gettext_7.html#SEC99">7.6.5 Informative output</A> -</UL> -<LI><A NAME="TOC100" HREF="gettext_7.html#SEC100">7.7 Invoking the <CODE>msgcmp</CODE> Program</A> -<UL> -<LI><A NAME="TOC101" HREF="gettext_7.html#SEC101">7.7.1 Input file location</A> -<LI><A NAME="TOC102" HREF="gettext_7.html#SEC102">7.7.2 Operation modifiers</A> -<LI><A NAME="TOC103" HREF="gettext_7.html#SEC103">7.7.3 Informative output</A> -</UL> -<LI><A NAME="TOC104" HREF="gettext_7.html#SEC104">7.8 Invoking the <CODE>msgattrib</CODE> Program</A> -<UL> -<LI><A NAME="TOC105" HREF="gettext_7.html#SEC105">7.8.1 Input file location</A> -<LI><A NAME="TOC106" HREF="gettext_7.html#SEC106">7.8.2 Output file location</A> -<LI><A NAME="TOC107" HREF="gettext_7.html#SEC107">7.8.3 Message selection</A> -<LI><A NAME="TOC108" HREF="gettext_7.html#SEC108">7.8.4 Attribute manipulation</A> -<LI><A NAME="TOC109" HREF="gettext_7.html#SEC109">7.8.5 Output details</A> -<LI><A NAME="TOC110" HREF="gettext_7.html#SEC110">7.8.6 Informative output</A> -</UL> -<LI><A NAME="TOC111" HREF="gettext_7.html#SEC111">7.9 Invoking the <CODE>msgen</CODE> Program</A> -<UL> -<LI><A NAME="TOC112" HREF="gettext_7.html#SEC112">7.9.1 Input file location</A> -<LI><A NAME="TOC113" HREF="gettext_7.html#SEC113">7.9.2 Output file location</A> -<LI><A NAME="TOC114" HREF="gettext_7.html#SEC114">7.9.3 Output details</A> -<LI><A NAME="TOC115" HREF="gettext_7.html#SEC115">7.9.4 Informative output</A> -</UL> -<LI><A NAME="TOC116" HREF="gettext_7.html#SEC116">7.10 Invoking the <CODE>msgexec</CODE> Program</A> -<UL> -<LI><A NAME="TOC117" HREF="gettext_7.html#SEC117">7.10.1 Input file location</A> -<LI><A NAME="TOC118" HREF="gettext_7.html#SEC118">7.10.2 Informative output</A> -</UL> -</UL> -<LI><A NAME="TOC119" HREF="gettext_8.html#SEC119">8 Producing Binary MO Files</A> -<UL> -<LI><A NAME="TOC120" HREF="gettext_8.html#SEC120">8.1 Invoking the <CODE>msgfmt</CODE> Program</A> -<UL> -<LI><A NAME="TOC121" HREF="gettext_8.html#SEC121">8.1.1 Input file location</A> -<LI><A NAME="TOC122" HREF="gettext_8.html#SEC122">8.1.2 Operation mode</A> -<LI><A NAME="TOC123" HREF="gettext_8.html#SEC123">8.1.3 Output file location</A> -<LI><A NAME="TOC124" HREF="gettext_8.html#SEC124">8.1.4 Output file location in Java mode</A> -<LI><A NAME="TOC125" HREF="gettext_8.html#SEC125">8.1.5 Output file location in Tcl mode</A> -<LI><A NAME="TOC126" HREF="gettext_8.html#SEC126">8.1.6 Input file interpretation</A> -<LI><A NAME="TOC127" HREF="gettext_8.html#SEC127">8.1.7 Output details</A> -<LI><A NAME="TOC128" HREF="gettext_8.html#SEC128">8.1.8 Informative output</A> -</UL> -<LI><A NAME="TOC129" HREF="gettext_8.html#SEC129">8.2 Invoking the <CODE>msgunfmt</CODE> Program</A> -<UL> -<LI><A NAME="TOC130" HREF="gettext_8.html#SEC130">8.2.1 Operation mode</A> -<LI><A NAME="TOC131" HREF="gettext_8.html#SEC131">8.2.2 Input file location</A> -<LI><A NAME="TOC132" HREF="gettext_8.html#SEC132">8.2.3 Input file location in Java mode</A> -<LI><A NAME="TOC133" HREF="gettext_8.html#SEC133">8.2.4 Input file location in Tcl mode</A> -<LI><A NAME="TOC134" HREF="gettext_8.html#SEC134">8.2.5 Output file location</A> -<LI><A NAME="TOC135" HREF="gettext_8.html#SEC135">8.2.6 Output details</A> -<LI><A NAME="TOC136" HREF="gettext_8.html#SEC136">8.2.7 Informative output</A> -</UL> -<LI><A NAME="TOC137" HREF="gettext_8.html#SEC137">8.3 The Format of GNU MO Files</A> -</UL> -<LI><A NAME="TOC138" HREF="gettext_9.html#SEC138">9 The User's View</A> -<UL> -<LI><A NAME="TOC139" HREF="gettext_9.html#SEC139">9.1 The Current <TT>`ABOUT-NLS´</TT> Matrix</A> -<LI><A NAME="TOC140" HREF="gettext_9.html#SEC140">9.2 Magic for Installers</A> -<LI><A NAME="TOC141" HREF="gettext_9.html#SEC141">9.3 Magic for End Users</A> -</UL> -<LI><A NAME="TOC142" HREF="gettext_10.html#SEC142">10 The Programmer's View</A> -<UL> -<LI><A NAME="TOC143" HREF="gettext_10.html#SEC143">10.1 About <CODE>catgets</CODE></A> -<UL> -<LI><A NAME="TOC144" HREF="gettext_10.html#SEC144">10.1.1 The Interface</A> -<LI><A NAME="TOC145" HREF="gettext_10.html#SEC145">10.1.2 Problems with the <CODE>catgets</CODE> Interface?!</A> -</UL> -<LI><A NAME="TOC146" HREF="gettext_10.html#SEC146">10.2 About <CODE>gettext</CODE></A> -<UL> -<LI><A NAME="TOC147" HREF="gettext_10.html#SEC147">10.2.1 The Interface</A> -<LI><A NAME="TOC148" HREF="gettext_10.html#SEC148">10.2.2 Solving Ambiguities</A> -<LI><A NAME="TOC149" HREF="gettext_10.html#SEC149">10.2.3 Locating Message Catalog Files</A> -<LI><A NAME="TOC150" HREF="gettext_10.html#SEC150">10.2.4 How to specify the output character set <CODE>gettext</CODE> uses</A> -<LI><A NAME="TOC151" HREF="gettext_10.html#SEC151">10.2.5 Additional functions for plural forms</A> -<LI><A NAME="TOC152" HREF="gettext_10.html#SEC152">10.2.6 How to use <CODE>gettext</CODE> in GUI programs</A> -<LI><A NAME="TOC153" HREF="gettext_10.html#SEC153">10.2.7 Optimization of the *gettext functions</A> -</UL> -<LI><A NAME="TOC154" HREF="gettext_10.html#SEC154">10.3 Comparing the Two Interfaces</A> -<LI><A NAME="TOC155" HREF="gettext_10.html#SEC155">10.4 Using libintl.a in own programs</A> -<LI><A NAME="TOC156" HREF="gettext_10.html#SEC156">10.5 Being a <CODE>gettext</CODE> grok</A> -<LI><A NAME="TOC157" HREF="gettext_10.html#SEC157">10.6 Temporary Notes for the Programmers Chapter</A> -<UL> -<LI><A NAME="TOC158" HREF="gettext_10.html#SEC158">10.6.1 Temporary - Two Possible Implementations</A> -<LI><A NAME="TOC159" HREF="gettext_10.html#SEC159">10.6.2 Temporary - About <CODE>catgets</CODE></A> -<LI><A NAME="TOC160" HREF="gettext_10.html#SEC160">10.6.3 Temporary - Why a single implementation</A> -<LI><A NAME="TOC161" HREF="gettext_10.html#SEC161">10.6.4 Temporary - Notes</A> -</UL> -</UL> -<LI><A NAME="TOC162" HREF="gettext_11.html#SEC162">11 The Translator's View</A> -<UL> -<LI><A NAME="TOC163" HREF="gettext_11.html#SEC163">11.1 Introduction 0</A> -<LI><A NAME="TOC164" HREF="gettext_11.html#SEC164">11.2 Introduction 1</A> -<LI><A NAME="TOC165" HREF="gettext_11.html#SEC165">11.3 Discussions</A> -<LI><A NAME="TOC166" HREF="gettext_11.html#SEC166">11.4 Organization</A> -<UL> -<LI><A NAME="TOC167" HREF="gettext_11.html#SEC167">11.4.1 Central Coordination</A> -<LI><A NAME="TOC168" HREF="gettext_11.html#SEC168">11.4.2 National Teams</A> -<UL> -<LI><A NAME="TOC169" HREF="gettext_11.html#SEC169">11.4.2.1 Sub-Cultures</A> -<LI><A NAME="TOC170" HREF="gettext_11.html#SEC170">11.4.2.2 Organizational Ideas</A> -</UL> -<LI><A NAME="TOC171" HREF="gettext_11.html#SEC171">11.4.3 Mailing Lists</A> -</UL> -<LI><A NAME="TOC172" HREF="gettext_11.html#SEC172">11.5 Information Flow</A> -</UL> -<LI><A NAME="TOC173" HREF="gettext_12.html#SEC173">12 The Maintainer's View</A> -<UL> -<LI><A NAME="TOC174" HREF="gettext_12.html#SEC174">12.1 Flat or Non-Flat Directory Structures</A> -<LI><A NAME="TOC175" HREF="gettext_12.html#SEC175">12.2 Prerequisite Works</A> -<LI><A NAME="TOC176" HREF="gettext_12.html#SEC176">12.3 Invoking the <CODE>gettextize</CODE> Program</A> -<LI><A NAME="TOC177" HREF="gettext_12.html#SEC177">12.4 Files You Must Create or Alter</A> -<UL> -<LI><A NAME="TOC178" HREF="gettext_12.html#SEC178">12.4.1 <TT>`POTFILES.in´</TT> in <TT>`po/´</TT></A> -<LI><A NAME="TOC179" HREF="gettext_12.html#SEC179">12.4.2 <TT>`LINGUAS´</TT> in <TT>`po/´</TT></A> -<LI><A NAME="TOC180" HREF="gettext_12.html#SEC180">12.4.3 <TT>`Makefile´</TT> pieces in <TT>`po/´</TT></A> -<LI><A NAME="TOC181" HREF="gettext_12.html#SEC181">12.4.4 <TT>`configure.in´</TT> at top level</A> -<LI><A NAME="TOC182" HREF="gettext_12.html#SEC182">12.4.5 <TT>`config.guess´</TT>, <TT>`config.sub´</TT> at top level</A> -<LI><A NAME="TOC183" HREF="gettext_12.html#SEC183">12.4.6 <TT>`mkinstalldirs´</TT> at top level</A> -<LI><A NAME="TOC184" HREF="gettext_12.html#SEC184">12.4.7 <TT>`aclocal.m4´</TT> at top level</A> -<LI><A NAME="TOC185" HREF="gettext_12.html#SEC185">12.4.8 <TT>`acconfig.h´</TT> at top level</A> -<LI><A NAME="TOC186" HREF="gettext_12.html#SEC186">12.4.9 <TT>`config.h.in´</TT> at top level</A> -<LI><A NAME="TOC187" HREF="gettext_12.html#SEC187">12.4.10 <TT>`Makefile.in´</TT> at top level</A> -<LI><A NAME="TOC188" HREF="gettext_12.html#SEC188">12.4.11 <TT>`Makefile.in´</TT> in <TT>`src/´</TT></A> -<LI><A NAME="TOC189" HREF="gettext_12.html#SEC189">12.4.12 <TT>`gettext.h´</TT> in <TT>`lib/´</TT></A> -</UL> -<LI><A NAME="TOC190" HREF="gettext_12.html#SEC190">12.5 Autoconf macros for use in <TT>`configure.in´</TT></A> -<UL> -<LI><A NAME="TOC191" HREF="gettext_12.html#SEC191">12.5.1 AM_GNU_GETTEXT in <TT>`gettext.m4´</TT></A> -<LI><A NAME="TOC192" HREF="gettext_12.html#SEC192">12.5.2 AM_GNU_GETTEXT_VERSION in <TT>`gettext.m4´</TT></A> -<LI><A NAME="TOC193" HREF="gettext_12.html#SEC193">12.5.3 AM_ICONV in <TT>`iconv.m4´</TT></A> -</UL> -<LI><A NAME="TOC194" HREF="gettext_12.html#SEC194">12.6 Integrating with CVS</A> -<UL> -<LI><A NAME="TOC195" HREF="gettext_12.html#SEC195">12.6.1 Avoiding version mismatch in distributed development</A> -<LI><A NAME="TOC196" HREF="gettext_12.html#SEC196">12.6.2 Files to put under CVS version control</A> -<LI><A NAME="TOC197" HREF="gettext_12.html#SEC197">12.6.3 Invoking the <CODE>autopoint</CODE> Program</A> -<UL> -<LI><A NAME="TOC198" HREF="gettext_12.html#SEC198">12.6.3.1 Options</A> -<LI><A NAME="TOC199" HREF="gettext_12.html#SEC199">12.6.3.2 Informative output</A> -</UL> -</UL> -</UL> -<LI><A NAME="TOC200" HREF="gettext_13.html#SEC200">13 Other Programming Languages</A> -<UL> -<LI><A NAME="TOC201" HREF="gettext_13.html#SEC201">13.1 The Language Implementor's View</A> -<LI><A NAME="TOC202" HREF="gettext_13.html#SEC202">13.2 The Programmer's View</A> -<LI><A NAME="TOC203" HREF="gettext_13.html#SEC203">13.3 The Translator's View</A> -<UL> -<LI><A NAME="TOC204" HREF="gettext_13.html#SEC204">13.3.1 C Format Strings</A> -<LI><A NAME="TOC205" HREF="gettext_13.html#SEC205">13.3.2 Python Format Strings</A> -<LI><A NAME="TOC206" HREF="gettext_13.html#SEC206">13.3.3 Lisp Format Strings</A> -<LI><A NAME="TOC207" HREF="gettext_13.html#SEC207">13.3.4 Emacs Lisp Format Strings</A> -<LI><A NAME="TOC208" HREF="gettext_13.html#SEC208">13.3.5 librep Format Strings</A> -<LI><A NAME="TOC209" HREF="gettext_13.html#SEC209">13.3.6 Smalltalk Format Strings</A> -<LI><A NAME="TOC210" HREF="gettext_13.html#SEC210">13.3.7 Java Format Strings</A> -<LI><A NAME="TOC211" HREF="gettext_13.html#SEC211">13.3.8 awk Format Strings</A> -<LI><A NAME="TOC212" HREF="gettext_13.html#SEC212">13.3.9 Object Pascal Format Strings</A> -<LI><A NAME="TOC213" HREF="gettext_13.html#SEC213">13.3.10 YCP Format Strings</A> -<LI><A NAME="TOC214" HREF="gettext_13.html#SEC214">13.3.11 Tcl Format Strings</A> -<LI><A NAME="TOC215" HREF="gettext_13.html#SEC215">13.3.12 PHP Format Strings</A> -</UL> -<LI><A NAME="TOC216" HREF="gettext_13.html#SEC216">13.4 The Maintainer's View</A> -<LI><A NAME="TOC217" HREF="gettext_13.html#SEC217">13.5 Individual Programming Languages</A> -<UL> -<LI><A NAME="TOC218" HREF="gettext_13.html#SEC218">13.5.1 C, C++, Objective C</A> -<LI><A NAME="TOC219" HREF="gettext_13.html#SEC219">13.5.2 sh - Shell Script</A> -<LI><A NAME="TOC220" HREF="gettext_13.html#SEC220">13.5.3 bash - Bourne-Again Shell Script</A> -<LI><A NAME="TOC221" HREF="gettext_13.html#SEC221">13.5.4 Python</A> -<LI><A NAME="TOC222" HREF="gettext_13.html#SEC222">13.5.5 GNU clisp - Common Lisp</A> -<LI><A NAME="TOC223" HREF="gettext_13.html#SEC223">13.5.6 GNU clisp C sources</A> -<LI><A NAME="TOC224" HREF="gettext_13.html#SEC224">13.5.7 Emacs Lisp</A> -<LI><A NAME="TOC225" HREF="gettext_13.html#SEC225">13.5.8 librep</A> -<LI><A NAME="TOC226" HREF="gettext_13.html#SEC226">13.5.9 GNU Smalltalk</A> -<LI><A NAME="TOC227" HREF="gettext_13.html#SEC227">13.5.10 Java</A> -<LI><A NAME="TOC228" HREF="gettext_13.html#SEC228">13.5.11 GNU awk</A> -<LI><A NAME="TOC229" HREF="gettext_13.html#SEC229">13.5.12 Pascal - Free Pascal Compiler</A> -<LI><A NAME="TOC230" HREF="gettext_13.html#SEC230">13.5.13 wxWindows library</A> -<LI><A NAME="TOC231" HREF="gettext_13.html#SEC231">13.5.14 YCP - YaST2 scripting language</A> -<LI><A NAME="TOC232" HREF="gettext_13.html#SEC232">13.5.15 Tcl - Tk's scripting language</A> -<LI><A NAME="TOC233" HREF="gettext_13.html#SEC233">13.5.16 Perl</A> -<LI><A NAME="TOC234" HREF="gettext_13.html#SEC234">13.5.17 PHP Hypertext Preprocessor</A> -<LI><A NAME="TOC235" HREF="gettext_13.html#SEC235">13.5.18 Pike</A> -</UL> -<LI><A NAME="TOC236" HREF="gettext_13.html#SEC236">13.6 Internationalizable Data</A> -<UL> -<LI><A NAME="TOC237" HREF="gettext_13.html#SEC237">13.6.1 POT - Portable Object Template</A> -<LI><A NAME="TOC238" HREF="gettext_13.html#SEC238">13.6.2 Resource String Table</A> -<LI><A NAME="TOC239" HREF="gettext_13.html#SEC239">13.6.3 Glade - GNOME user interface description</A> -</UL> -</UL> -<LI><A NAME="TOC240" HREF="gettext_14.html#SEC240">14 Concluding Remarks</A> -<UL> -<LI><A NAME="TOC241" HREF="gettext_14.html#SEC241">14.1 History of GNU <CODE>gettext</CODE></A> -<LI><A NAME="TOC242" HREF="gettext_14.html#SEC242">14.2 Related Readings</A> -</UL> -<LI><A NAME="TOC243" HREF="gettext_15.html#SEC243">A Language Codes</A> -<LI><A NAME="TOC244" HREF="gettext_16.html#SEC244">B Country Codes</A> -<LI><A NAME="TOC245" HREF="gettext_17.html#SEC245">Program Index</A> -<LI><A NAME="TOC246" HREF="gettext_18.html#SEC246">Option Index</A> -<LI><A NAME="TOC247" HREF="gettext_19.html#SEC247">Variable Index</A> -<LI><A NAME="TOC248" HREF="gettext_20.html#SEC248">PO Mode Index</A> -<LI><A NAME="TOC249" HREF="gettext_21.html#SEC249">Autoconf Macro Index</A> -<LI><A NAME="TOC250" HREF="gettext_22.html#SEC250">General Index</A> -</UL> -<P><HR><P> -This document was generated on 5 November 2002 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52a.</P> -</BODY> -</HTML> |