git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			637 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			637 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <HTML>
 | |
| <HEAD>
 | |
| <!-- This HTML file has been created by texi2html 1.54
 | |
|      from gettext.texi on 25 January 1999 -->
 | |
| 
 | |
| <TITLE>GNU gettext utilities - Introduction</TITLE>
 | |
| <link href="gettext_2.html" rel=Next>
 | |
| <link href="gettext_toc.html" rel=ToC>
 | |
| 
 | |
| </HEAD>
 | |
| <BODY>
 | |
| <p>Go to the first, previous, <A HREF="gettext_2.html">next</A>, <A HREF="gettext_12.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">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>
 | |
| 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>
 | |
| Please send suggestions and corrections to:
 | |
| 
 | |
| </P>
 | |
| 
 | |
| <PRE>
 | |
| Internet address:
 | |
|     bug-gnu-utils@prep.ai.mit.edu
 | |
| </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">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>
 | |
| 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 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, and a few stand-alone programs to massage in various
 | |
| ways the sets of translatable strings, or already translated strings.
 | |
| A special mode for GNU Emacs also helps ease interested parties into
 | |
| preparing these sets, or bringing them up to date.
 | |
| 
 | |
| </P>
 | |
| <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">I18n, L10n, and Such</A></H2>
 | |
| 
 | |
| <P>
 | |
| 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 <STRONG>i18n</STRONG> and <STRONG>l10n</STRONG> 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>
 | |
| By <STRONG>internationalization</STRONG>, 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_8.html#SEC39">The Programmer's View</A>.
 | |
| 
 | |
| </P>
 | |
| <P>
 | |
| By <STRONG>localization</STRONG>, 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 <STRONG>locale</STRONG> 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>
 | |
| One uses the expression <STRONG>Native Language Support</STRONG>, 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">Aspects in Native Language Support</A></H2>
 | |
| 
 | |
| <P>
 | |
| 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 GNU <CODE>recode</CODE> 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 not currently handled by GNU
 | |
| <CODE>gettext</CODE>, but perhaps may be handled in future versions.  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 <STRONG>rules</STRONG> are
 | |
| termed the country's locale.  The locale represents the knowledge
 | |
| needed to support the country's native attributes.
 | |
| 
 | |
| </P>
 | |
| <P>
 | |
| 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, and also presents some other areas which GNU
 | |
| <CODE>gettext</CODE> might eventually tackle, maybe, one of these days.
 | |
| 
 | |
| </P>
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><EM>Characters and Codesets</EM>
 | |
| <DD>
 | |
| 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.  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>
 | |
| 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>
 | |
| 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>
 | |
| 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       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>
 | |
| 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>
 | |
| In the near future we see no chance that components of locale outside of
 | |
| message handling will be made available for use in other
 | |
| packages.  The reason for this is that most modern systems provide
 | |
| a more or less reasonable support for at least some of the missing
 | |
| components.  Another point is that the GNU <CODE>libc</CODE> and Linux will get
 | |
| a new and complete implementation of the whole locale functionality
 | |
| which could be adopted by system lacking a reasonable locale support.
 | |
| 
 | |
| </P>
 | |
| 
 | |
| 
 | |
| <H2><A NAME="SEC5" HREF="gettext_toc.html#TOC5">Files Conveying Translations</A></H2>
 | |
| 
 | |
| <P>
 | |
| 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 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, and
 | |
| <TT>`.pox'</TT> files are often temporary PO files.
 | |
| 
 | |
| </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.  They do not necessary use <TT>`.mo'</TT> for file
 | |
| extensions, but since system libraries are also used for accessing
 | |
| these files, it works as long as the system is self-consistent about
 | |
| it.  If GNU <CODE>gettext</CODE> is able to interface with the tools already
 | |
| provided with systems, it will consequently let these provided tools
 | |
| take care of generating the MO files.  Or else, if such tools are not
 | |
| found or do not seem usable, GNU <CODE>gettext</CODE> will use its own ways
 | |
| and 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">Overview of GNU <CODE>gettext</CODE></A></H2>
 | |
| 
 | |
| <P>
 | |
| 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 a somewhat detailed explanations, which you should
 | |
| read while keeping an eye on the diagram.  Having a clear understanding
 | |
| of these interrelations would 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.pox --->--------'                |
 | |
| |   .---'                                                             |
 | |
| |   |                                                                 |
 | |
| |   `-------------<---------------.                                   |
 | |
| |                                 +--- LANG.po <--- New LANG.pox <----'
 | |
| |   .--- 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 GNU 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 validatation of PO files
 | |
| with easy repositioning to PO file lines showing errors.
 | |
| 
 | |
| </P>
 | |
| <P>
 | |
| 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">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 the 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 remove these definitions, include <TT>`libintl.h'</TT> and link
 | |
| against <TT>`libintl.a'</TT>.  That is all you have to change.
 | |
| 
 | |
| </P>
 | |
| <P>
 | |
| Once the C sources have been modified, the <CODE>xgettext</CODE> program
 | |
| is used to find and extract all translatable strings, and create an
 | |
| initial PO 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#SEC20">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_10.html#SEC67">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>.pox'</TT>, where <VAR>lang</VAR>
 | |
| represents the target language.
 | |
| 
 | |
| </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_9.html#SEC56">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>.pox'</TT>
 | |
| PO file, if you do not have GNU 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">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 GNU 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">Main PO mode Commands</A>), you should know how to move between entries
 | |
| (see section <A HREF="gettext_2.html#SEC11">Entry Positioning</A>), and how to handle untranslated entries
 | |
| (see section <A HREF="gettext_5.html#SEC27">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_4.html#SEC22">Using Translation Compendiums</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 programmatic 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>
 | |
| 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>.pox'</TT>, those already translated entries
 | |
| which are no longer used in the program sources (see section <A HREF="gettext_5.html#SEC28">Obsolete Entries</A>).  It finally discovers new strings and inserts them in
 | |
| the resulting PO file as untranslated entries (see section <A HREF="gettext_5.html#SEC27">Untranslated Entries</A>).  See section <A HREF="gettext_5.html#SEC24">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>.pox'</TT> file offering translations for all strings.
 | |
| When this is properly achieved, this file <TT>`<VAR>lang</VAR>.pox'</TT> may
 | |
| take the place of the previous official <TT>`<VAR>lang</VAR>.po'</TT> file.
 | |
| 
 | |
| </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 banging or otherwise trying to exert 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_6.html#SEC34">The Format of GNU MO Files</A>).  See section <A HREF="gettext_6.html#SEC33">Invoking the <CODE>msgfmt</CODE> Program</A>, for more information about all modalities 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_7.html#SEC38">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>
 | |
| <p>Go to the first, previous, <A HREF="gettext_2.html">next</A>, <A HREF="gettext_12.html">last</A> section, <A HREF="gettext_toc.html">table of contents</A>.
 | |
| </BODY>
 | |
| </HTML>
 |