merged 2.2 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
636
docs/html/gettext/gettext_1.html
Normal file
636
docs/html/gettext/gettext_1.html
Normal file
@@ -0,0 +1,636 @@
|
||||
<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>
|
Reference in New Issue
Block a user