jpayne@68
|
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
jpayne@68
|
2 <html>
|
jpayne@68
|
3 <!-- Created on February, 21 2024 by texi2html 1.78a -->
|
jpayne@68
|
4 <!--
|
jpayne@68
|
5 Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
|
jpayne@68
|
6 Karl Berry <karl@freefriends.org>
|
jpayne@68
|
7 Olaf Bachmann <obachman@mathematik.uni-kl.de>
|
jpayne@68
|
8 and many others.
|
jpayne@68
|
9 Maintained by: Many creative people.
|
jpayne@68
|
10 Send bugs and suggestions to <texi2html-bug@nongnu.org>
|
jpayne@68
|
11
|
jpayne@68
|
12 -->
|
jpayne@68
|
13 <head>
|
jpayne@68
|
14 <title>GNU gettext utilities: 12. The Translator's View</title>
|
jpayne@68
|
15
|
jpayne@68
|
16 <meta name="description" content="GNU gettext utilities: 12. The Translator's View">
|
jpayne@68
|
17 <meta name="keywords" content="GNU gettext utilities: 12. The Translator's View">
|
jpayne@68
|
18 <meta name="resource-type" content="document">
|
jpayne@68
|
19 <meta name="distribution" content="global">
|
jpayne@68
|
20 <meta name="Generator" content="texi2html 1.78a">
|
jpayne@68
|
21 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
jpayne@68
|
22 <style type="text/css">
|
jpayne@68
|
23 <!--
|
jpayne@68
|
24 a.summary-letter {text-decoration: none}
|
jpayne@68
|
25 pre.display {font-family: serif}
|
jpayne@68
|
26 pre.format {font-family: serif}
|
jpayne@68
|
27 pre.menu-comment {font-family: serif}
|
jpayne@68
|
28 pre.menu-preformatted {font-family: serif}
|
jpayne@68
|
29 pre.smalldisplay {font-family: serif; font-size: smaller}
|
jpayne@68
|
30 pre.smallexample {font-size: smaller}
|
jpayne@68
|
31 pre.smallformat {font-family: serif; font-size: smaller}
|
jpayne@68
|
32 pre.smalllisp {font-size: smaller}
|
jpayne@68
|
33 span.roman {font-family:serif; font-weight:normal;}
|
jpayne@68
|
34 span.sansserif {font-family:sans-serif; font-weight:normal;}
|
jpayne@68
|
35 ul.toc {list-style: none}
|
jpayne@68
|
36 -->
|
jpayne@68
|
37 </style>
|
jpayne@68
|
38
|
jpayne@68
|
39
|
jpayne@68
|
40 </head>
|
jpayne@68
|
41
|
jpayne@68
|
42 <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
|
jpayne@68
|
43
|
jpayne@68
|
44 <table cellpadding="1" cellspacing="1" border="0">
|
jpayne@68
|
45 <tr><td valign="middle" align="left">[<a href="gettext_11.html#SEC197" title="Beginning of this chapter or previous chapter"> << </a>]</td>
|
jpayne@68
|
46 <td valign="middle" align="left">[<a href="gettext_13.html#SEC230" title="Next chapter"> >> </a>]</td>
|
jpayne@68
|
47 <td valign="middle" align="left"> </td>
|
jpayne@68
|
48 <td valign="middle" align="left"> </td>
|
jpayne@68
|
49 <td valign="middle" align="left"> </td>
|
jpayne@68
|
50 <td valign="middle" align="left"> </td>
|
jpayne@68
|
51 <td valign="middle" align="left"> </td>
|
jpayne@68
|
52 <td valign="middle" align="left">[<a href="gettext_toc.html#SEC_Top" title="Cover (top) of document">Top</a>]</td>
|
jpayne@68
|
53 <td valign="middle" align="left">[<a href="gettext_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
|
jpayne@68
|
54 <td valign="middle" align="left">[<a href="gettext_21.html#SEC389" title="Index">Index</a>]</td>
|
jpayne@68
|
55 <td valign="middle" align="left">[<a href="gettext_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
|
jpayne@68
|
56 </tr></table>
|
jpayne@68
|
57
|
jpayne@68
|
58 <hr size="2">
|
jpayne@68
|
59 <a name="Translators"></a>
|
jpayne@68
|
60 <a name="SEC217"></a>
|
jpayne@68
|
61 <h1 class="chapter"> <a href="gettext_toc.html#TOC210">12. The Translator's View</a> </h1>
|
jpayne@68
|
62
|
jpayne@68
|
63
|
jpayne@68
|
64
|
jpayne@68
|
65
|
jpayne@68
|
66 <a name="Trans-Intro-0"></a>
|
jpayne@68
|
67 <a name="SEC218"></a>
|
jpayne@68
|
68 <h2 class="section"> <a href="gettext_toc.html#TOC211">12.1 Introduction 0</a> </h2>
|
jpayne@68
|
69
|
jpayne@68
|
70 <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
|
jpayne@68
|
71 revised.
|
jpayne@68
|
72 </p>
|
jpayne@68
|
73 <p>Free software is going international! The Translation Project is a way
|
jpayne@68
|
74 to get maintainers, translators and users all together, so free software
|
jpayne@68
|
75 will gradually become able to speak many native languages.
|
jpayne@68
|
76 </p>
|
jpayne@68
|
77 <p>The GNU <code>gettext</code> tool set contains <em>everything</em> maintainers
|
jpayne@68
|
78 need for internationalizing their packages for messages. It also
|
jpayne@68
|
79 contains quite useful tools for helping translators at localizing
|
jpayne@68
|
80 messages to their native language, once a package has already been
|
jpayne@68
|
81 internationalized.
|
jpayne@68
|
82 </p>
|
jpayne@68
|
83 <p>To achieve the Translation Project, we need many interested
|
jpayne@68
|
84 people who like their own language and write it well, and who are also
|
jpayne@68
|
85 able to synergize with other translators speaking the same language.
|
jpayne@68
|
86 If you'd like to volunteer to <em>work</em> at translating messages,
|
jpayne@68
|
87 please send mail to your translating team.
|
jpayne@68
|
88 </p>
|
jpayne@68
|
89 <p>Each team has its own mailing list, courtesy of Linux
|
jpayne@68
|
90 International. You may reach your translating team at the address
|
jpayne@68
|
91 ‘<tt><var>ll</var>@li.org</tt>’, replacing <var>ll</var> by the two-letter ISO 639
|
jpayne@68
|
92 code for your language. Language codes are <em>not</em> the same as
|
jpayne@68
|
93 country codes given in ISO 3166. The following translating teams
|
jpayne@68
|
94 exist:
|
jpayne@68
|
95 </p>
|
jpayne@68
|
96 <blockquote><p>Chinese <code>zh</code>, Czech <code>cs</code>, Danish <code>da</code>, Dutch <code>nl</code>,
|
jpayne@68
|
97 Esperanto <code>eo</code>, Finnish <code>fi</code>, French <code>fr</code>, Irish
|
jpayne@68
|
98 <code>ga</code>, German <code>de</code>, Greek <code>el</code>, Italian <code>it</code>,
|
jpayne@68
|
99 Japanese <code>ja</code>, Indonesian <code>in</code>, Norwegian <code>no</code>, Polish
|
jpayne@68
|
100 <code>pl</code>, Portuguese <code>pt</code>, Russian <code>ru</code>, Spanish <code>es</code>,
|
jpayne@68
|
101 Swedish <code>sv</code> and Turkish <code>tr</code>.
|
jpayne@68
|
102 </p></blockquote>
|
jpayne@68
|
103
|
jpayne@68
|
104 <p>For example, you may reach the Chinese translating team by writing to
|
jpayne@68
|
105 ‘<tt>zh@li.org</tt>’. When you become a member of the translating team
|
jpayne@68
|
106 for your own language, you may subscribe to its list. For example,
|
jpayne@68
|
107 Swedish people can send a message to ‘<tt>sv-request@li.org</tt>’,
|
jpayne@68
|
108 having this message body:
|
jpayne@68
|
109 </p>
|
jpayne@68
|
110 <table><tr><td> </td><td><pre class="example">subscribe
|
jpayne@68
|
111 </pre></td></tr></table>
|
jpayne@68
|
112
|
jpayne@68
|
113 <p>Keep in mind that team members should be interested in <em>working</em>
|
jpayne@68
|
114 at translations, or at solving translational difficulties, rather than
|
jpayne@68
|
115 merely lurking around. If your team does not exist yet and you want to
|
jpayne@68
|
116 start one, please write to ‘<tt>coordinator@translationproject.org</tt>’;
|
jpayne@68
|
117 you will then reach the coordinator for all translator teams.
|
jpayne@68
|
118 </p>
|
jpayne@68
|
119 <p>A handful of GNU packages have already been adapted and provided
|
jpayne@68
|
120 with message translations for several languages. Translation
|
jpayne@68
|
121 teams have begun to organize, using these packages as a starting
|
jpayne@68
|
122 point. But there are many more packages and many languages for
|
jpayne@68
|
123 which we have no volunteer translators. If you would like to
|
jpayne@68
|
124 volunteer to work at translating messages, please send mail to
|
jpayne@68
|
125 ‘<tt>coordinator@translationproject.org</tt>’ indicating what language(s)
|
jpayne@68
|
126 you can work on.
|
jpayne@68
|
127 </p>
|
jpayne@68
|
128
|
jpayne@68
|
129 <a name="Trans-Intro-1"></a>
|
jpayne@68
|
130 <a name="SEC219"></a>
|
jpayne@68
|
131 <h2 class="section"> <a href="gettext_toc.html#TOC212">12.2 Introduction 1</a> </h2>
|
jpayne@68
|
132
|
jpayne@68
|
133 <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
|
jpayne@68
|
134 revised.
|
jpayne@68
|
135 </p>
|
jpayne@68
|
136 <p>This is now official, GNU is going international! Here is the
|
jpayne@68
|
137 announcement submitted for the January 1995 GNU Bulletin:
|
jpayne@68
|
138 </p>
|
jpayne@68
|
139 <blockquote><p>A handful of GNU packages have already been adapted and provided
|
jpayne@68
|
140 with message translations for several languages. Translation
|
jpayne@68
|
141 teams have begun to organize, using these packages as a starting
|
jpayne@68
|
142 point. But there are many more packages and many languages
|
jpayne@68
|
143 for which we have no volunteer translators. If you'd like to
|
jpayne@68
|
144 volunteer to work at translating messages, please send mail to
|
jpayne@68
|
145 ‘<samp>coordinator@translationproject.org</samp>’ indicating what language(s)
|
jpayne@68
|
146 you can work on.
|
jpayne@68
|
147 </p></blockquote>
|
jpayne@68
|
148
|
jpayne@68
|
149 <p>This document should answer many questions for those who are curious about
|
jpayne@68
|
150 the process or would like to contribute. Please at least skim over it,
|
jpayne@68
|
151 hoping to cut down a little of the high volume of e-mail generated by this
|
jpayne@68
|
152 collective effort towards internationalization of free software.
|
jpayne@68
|
153 </p>
|
jpayne@68
|
154 <p>Most free programming which is widely shared is done in English, and
|
jpayne@68
|
155 currently, English is used as the main communicating language between
|
jpayne@68
|
156 national communities collaborating to free software. This very document
|
jpayne@68
|
157 is written in English. This will not change in the foreseeable future.
|
jpayne@68
|
158 </p>
|
jpayne@68
|
159 <p>However, there is a strong appetite from national communities for
|
jpayne@68
|
160 having more software able to write using national language and habits,
|
jpayne@68
|
161 and there is an on-going effort to modify free software in such a way
|
jpayne@68
|
162 that it becomes able to do so. The experiments driven so far raised
|
jpayne@68
|
163 an enthusiastic response from pretesters, so we believe that
|
jpayne@68
|
164 internationalization of free software is dedicated to succeed.
|
jpayne@68
|
165 </p>
|
jpayne@68
|
166 <p>For suggestion clarifications, additions or corrections to this
|
jpayne@68
|
167 document, please e-mail to ‘<tt>coordinator@translationproject.org</tt>’.
|
jpayne@68
|
168 </p>
|
jpayne@68
|
169
|
jpayne@68
|
170 <a name="Discussions"></a>
|
jpayne@68
|
171 <a name="SEC220"></a>
|
jpayne@68
|
172 <h2 class="section"> <a href="gettext_toc.html#TOC213">12.3 Discussions</a> </h2>
|
jpayne@68
|
173
|
jpayne@68
|
174 <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
|
jpayne@68
|
175 revised.
|
jpayne@68
|
176 </p>
|
jpayne@68
|
177 <p>Facing this internationalization effort, a few users expressed their
|
jpayne@68
|
178 concerns. Some of these doubts are presented and discussed, here.
|
jpayne@68
|
179 </p>
|
jpayne@68
|
180 <ul>
|
jpayne@68
|
181 <li> Smaller groups
|
jpayne@68
|
182
|
jpayne@68
|
183 <p>Some languages are not spoken by a very large number of people, so people
|
jpayne@68
|
184 speaking them sometimes consider that there may not be all that much
|
jpayne@68
|
185 demand such versions of free software packages. Moreover, many people
|
jpayne@68
|
186 being <em>into computers</em>, in some countries, generally seem to prefer
|
jpayne@68
|
187 English versions of their software.
|
jpayne@68
|
188 </p>
|
jpayne@68
|
189 <p>On the other end, people might enjoy their own language a lot, and be
|
jpayne@68
|
190 very motivated at providing to themselves the pleasure of having their
|
jpayne@68
|
191 beloved free software speaking their mother tongue. They do themselves
|
jpayne@68
|
192 a personal favor, and do not pay that much attention to the number of
|
jpayne@68
|
193 people benefiting of their work.
|
jpayne@68
|
194 </p>
|
jpayne@68
|
195 </li><li> Misinterpretation
|
jpayne@68
|
196
|
jpayne@68
|
197 <p>Other users are shy to push forward their own language, seeing in this
|
jpayne@68
|
198 some kind of misplaced propaganda. Someone thought there must be some
|
jpayne@68
|
199 users of the language over the networks pestering other people with it.
|
jpayne@68
|
200 </p>
|
jpayne@68
|
201 <p>But any spoken language is worth localization, because there are
|
jpayne@68
|
202 people behind the language for whom the language is important and
|
jpayne@68
|
203 dear to their hearts.
|
jpayne@68
|
204 </p>
|
jpayne@68
|
205 </li><li> Odd translations
|
jpayne@68
|
206
|
jpayne@68
|
207 <p>The biggest problem is to find the right translations so that
|
jpayne@68
|
208 everybody can understand the messages. Translations are usually a
|
jpayne@68
|
209 little odd. Some people get used to English, to the extent they may
|
jpayne@68
|
210 find translations into their own language “rather pushy, obnoxious
|
jpayne@68
|
211 and sometimes even hilarious.” As a French speaking man, I have
|
jpayne@68
|
212 the experience of those instruction manuals for goods, so poorly
|
jpayne@68
|
213 translated in French in Korea or Taiwan…
|
jpayne@68
|
214 </p>
|
jpayne@68
|
215 <p>The fact is that we sometimes have to create a kind of national
|
jpayne@68
|
216 computer culture, and this is not easy without the collaboration of
|
jpayne@68
|
217 many people liking their mother tongue. This is why translations are
|
jpayne@68
|
218 better achieved by people knowing and loving their own language, and
|
jpayne@68
|
219 ready to work together at improving the results they obtain.
|
jpayne@68
|
220 </p>
|
jpayne@68
|
221 </li><li> Dependencies over the GPL or LGPL
|
jpayne@68
|
222
|
jpayne@68
|
223 <p>Some people wonder if using GNU <code>gettext</code> necessarily brings their
|
jpayne@68
|
224 package under the protective wing of the GNU General Public License or
|
jpayne@68
|
225 the GNU Lesser General Public License, when they do not want to make
|
jpayne@68
|
226 their program free, or want other kinds of freedom. The simplest
|
jpayne@68
|
227 answer is “normally not”.
|
jpayne@68
|
228 </p>
|
jpayne@68
|
229 <p>The <code>gettext-runtime</code> part of GNU <code>gettext</code>, i.e. the
|
jpayne@68
|
230 contents of <code>libintl</code>, is covered by the GNU Lesser General Public
|
jpayne@68
|
231 License. The <code>gettext-tools</code> part of GNU <code>gettext</code>, i.e. the
|
jpayne@68
|
232 rest of the GNU <code>gettext</code> package, is covered by the GNU General
|
jpayne@68
|
233 Public License.
|
jpayne@68
|
234 </p>
|
jpayne@68
|
235 <p>The mere marking of localizable strings in a package, or conditional
|
jpayne@68
|
236 inclusion of a few lines for initialization, is not really including
|
jpayne@68
|
237 GPL'ed or LGPL'ed code. However, since the localization routines in
|
jpayne@68
|
238 <code>libintl</code> are under the LGPL, the LGPL needs to be considered.
|
jpayne@68
|
239 It gives the right to distribute the complete unmodified source of
|
jpayne@68
|
240 <code>libintl</code> even with non-free programs. It also gives the right
|
jpayne@68
|
241 to use <code>libintl</code> as a shared library, even for non-free programs.
|
jpayne@68
|
242 But it gives the right to use <code>libintl</code> as a static library or
|
jpayne@68
|
243 to incorporate <code>libintl</code> into another library only to free
|
jpayne@68
|
244 software.
|
jpayne@68
|
245 </p>
|
jpayne@68
|
246 </li></ul>
|
jpayne@68
|
247
|
jpayne@68
|
248
|
jpayne@68
|
249 <a name="Organization"></a>
|
jpayne@68
|
250 <a name="SEC221"></a>
|
jpayne@68
|
251 <h2 class="section"> <a href="gettext_toc.html#TOC214">12.4 Organization</a> </h2>
|
jpayne@68
|
252
|
jpayne@68
|
253 <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
|
jpayne@68
|
254 revised.
|
jpayne@68
|
255 </p>
|
jpayne@68
|
256 <p>On a larger scale, the true solution would be to organize some kind of
|
jpayne@68
|
257 fairly precise set up in which volunteers could participate. I gave
|
jpayne@68
|
258 some thought to this idea lately, and realize there will be some
|
jpayne@68
|
259 touchy points. I thought of writing to Richard Stallman to launch
|
jpayne@68
|
260 such a project, but feel it might be good to shake out the ideas
|
jpayne@68
|
261 between ourselves first. Most probably that Linux International has
|
jpayne@68
|
262 some experience in the field already, or would like to orchestrate
|
jpayne@68
|
263 the volunteer work, maybe. Food for thought, in any case!
|
jpayne@68
|
264 </p>
|
jpayne@68
|
265 <p>I guess we have to setup something early, somehow, that will help
|
jpayne@68
|
266 many possible contributors of the same language to interlock and avoid
|
jpayne@68
|
267 work duplication, and further be put in contact for solving together
|
jpayne@68
|
268 problems particular to their tongue (in most languages, there are many
|
jpayne@68
|
269 difficulties peculiar to translating technical English). My Swedish
|
jpayne@68
|
270 contributor acknowledged these difficulties, and I'm well aware of
|
jpayne@68
|
271 them for French.
|
jpayne@68
|
272 </p>
|
jpayne@68
|
273 <p>This is surely not a technical issue, but we should manage so the
|
jpayne@68
|
274 effort of locale contributors be maximally useful, despite the national
|
jpayne@68
|
275 team layer interface between contributors and maintainers.
|
jpayne@68
|
276 </p>
|
jpayne@68
|
277 <p>The Translation Project needs some setup for coordinating language
|
jpayne@68
|
278 coordinators. Localizing evolving programs will surely
|
jpayne@68
|
279 become a permanent and continuous activity in the free software community,
|
jpayne@68
|
280 once well started.
|
jpayne@68
|
281 The setup should be minimally completed and tested before GNU
|
jpayne@68
|
282 <code>gettext</code> becomes an official reality. The e-mail address
|
jpayne@68
|
283 ‘<tt>coordinator@translationproject.org</tt>’ has been set up for receiving
|
jpayne@68
|
284 offers from volunteers and general e-mail on these topics. This address
|
jpayne@68
|
285 reaches the Translation Project coordinator.
|
jpayne@68
|
286 </p>
|
jpayne@68
|
287
|
jpayne@68
|
288
|
jpayne@68
|
289 <a name="Central-Coordination"></a>
|
jpayne@68
|
290 <a name="SEC222"></a>
|
jpayne@68
|
291 <h3 class="subsection"> <a href="gettext_toc.html#TOC215">12.4.1 Central Coordination</a> </h3>
|
jpayne@68
|
292
|
jpayne@68
|
293 <p>I also think GNU will need sooner than it thinks, that someone set up
|
jpayne@68
|
294 a way to organize and coordinate these groups. Some kind of group
|
jpayne@68
|
295 of groups. My opinion is that it would be good that GNU delegates
|
jpayne@68
|
296 this task to a small group of collaborating volunteers, shortly.
|
jpayne@68
|
297 Perhaps in ‘<tt>gnu.announce</tt>’ a list of this national committee's
|
jpayne@68
|
298 can be published.
|
jpayne@68
|
299 </p>
|
jpayne@68
|
300 <p>My role as coordinator would simply be to refer to Ulrich any German
|
jpayne@68
|
301 speaking volunteer interested to localization of free software packages, and
|
jpayne@68
|
302 maybe helping national groups to initially organize, while maintaining
|
jpayne@68
|
303 national registries for until national groups are ready to take over.
|
jpayne@68
|
304 In fact, the coordinator should ease volunteers to get in contact with
|
jpayne@68
|
305 one another for creating national teams, which should then select
|
jpayne@68
|
306 one coordinator per language, or country (regionalized language).
|
jpayne@68
|
307 If well done, the coordination should be useful without being an
|
jpayne@68
|
308 overwhelming task, the time to put delegations in place.
|
jpayne@68
|
309 </p>
|
jpayne@68
|
310
|
jpayne@68
|
311 <a name="National-Teams"></a>
|
jpayne@68
|
312 <a name="SEC223"></a>
|
jpayne@68
|
313 <h3 class="subsection"> <a href="gettext_toc.html#TOC216">12.4.2 National Teams</a> </h3>
|
jpayne@68
|
314
|
jpayne@68
|
315 <p>I suggest we look for volunteer coordinators/editors for individual
|
jpayne@68
|
316 languages. These people will scan contributions of translation files
|
jpayne@68
|
317 for various programs, for their own languages, and will ensure high
|
jpayne@68
|
318 and uniform standards of diction.
|
jpayne@68
|
319 </p>
|
jpayne@68
|
320 <p>From my current experience with other people in these days, those who
|
jpayne@68
|
321 provide localizations are very enthusiastic about the process, and are
|
jpayne@68
|
322 more interested in the localization process than in the program they
|
jpayne@68
|
323 localize, and want to do many programs, not just one. This seems
|
jpayne@68
|
324 to confirm that having a coordinator/editor for each language is a
|
jpayne@68
|
325 good idea.
|
jpayne@68
|
326 </p>
|
jpayne@68
|
327 <p>We need to choose someone who is good at writing clear and concise
|
jpayne@68
|
328 prose in the language in question. That is hard—we can't check
|
jpayne@68
|
329 it ourselves. So we need to ask a few people to judge each others'
|
jpayne@68
|
330 writing and select the one who is best.
|
jpayne@68
|
331 </p>
|
jpayne@68
|
332 <p>I announce my prerelease to a few dozen people, and you would not
|
jpayne@68
|
333 believe all the discussions it generated already. I shudder to think
|
jpayne@68
|
334 what will happen when this will be launched, for true, officially,
|
jpayne@68
|
335 world wide. Who am I to arbitrate between two Czekolsovak users
|
jpayne@68
|
336 contradicting each other, for example?
|
jpayne@68
|
337 </p>
|
jpayne@68
|
338 <p>I assume that your German is not much better than my French so that
|
jpayne@68
|
339 I would not be able to judge about these formulations. What I would
|
jpayne@68
|
340 suggest is that for each language there is a group for people who
|
jpayne@68
|
341 maintain the PO files and judge about changes. I suspect there will
|
jpayne@68
|
342 be cultural differences between how such groups of people will behave.
|
jpayne@68
|
343 Some will have relaxed ways, reach consensus easily, and have anyone
|
jpayne@68
|
344 of the group relate to the maintainers, while others will fight to
|
jpayne@68
|
345 death, organize heavy administrations up to national standards, and
|
jpayne@68
|
346 use strict channels.
|
jpayne@68
|
347 </p>
|
jpayne@68
|
348 <p>The German team is putting out a good example. Right now, they are
|
jpayne@68
|
349 maybe half a dozen people revising translations of each other and
|
jpayne@68
|
350 discussing the linguistic issues. I do not even have all the names.
|
jpayne@68
|
351 Ulrich Drepper is taking care of coordinating the German team.
|
jpayne@68
|
352 He subscribed to all my pretest lists, so I do not even have to warn
|
jpayne@68
|
353 him specifically of incoming releases.
|
jpayne@68
|
354 </p>
|
jpayne@68
|
355 <p>I'm sure, that is a good idea to get teams for each language working
|
jpayne@68
|
356 on translations. That will make the translations better and more
|
jpayne@68
|
357 consistent.
|
jpayne@68
|
358 </p>
|
jpayne@68
|
359
|
jpayne@68
|
360
|
jpayne@68
|
361 <a name="Sub_002dCultures"></a>
|
jpayne@68
|
362 <a name="SEC224"></a>
|
jpayne@68
|
363 <h4 class="subsubsection"> <a href="gettext_toc.html#TOC217">12.4.2.1 Sub-Cultures</a> </h4>
|
jpayne@68
|
364
|
jpayne@68
|
365 <p>Taking French for example, there are a few sub-cultures around computers
|
jpayne@68
|
366 which developed diverging vocabularies. Picking volunteers here and
|
jpayne@68
|
367 there without addressing this problem in an organized way, soon in the
|
jpayne@68
|
368 project, might produce a distasteful mix of internationalized programs,
|
jpayne@68
|
369 and possibly trigger endless quarrels among those who really care.
|
jpayne@68
|
370 </p>
|
jpayne@68
|
371 <p>Keeping some kind of unity in the way French localization of
|
jpayne@68
|
372 internationalized programs is achieved is a difficult (and delicate) job.
|
jpayne@68
|
373 Knowing the latin character of French people (:-), if we take this
|
jpayne@68
|
374 the wrong way, we could end up nowhere, or spoil a lot of energies.
|
jpayne@68
|
375 Maybe we should begin to address this problem seriously <em>before</em>
|
jpayne@68
|
376 GNU <code>gettext</code> become officially published. And I suspect that this
|
jpayne@68
|
377 means soon!
|
jpayne@68
|
378 </p>
|
jpayne@68
|
379
|
jpayne@68
|
380 <a name="Organizational-Ideas"></a>
|
jpayne@68
|
381 <a name="SEC225"></a>
|
jpayne@68
|
382 <h4 class="subsubsection"> <a href="gettext_toc.html#TOC218">12.4.2.2 Organizational Ideas</a> </h4>
|
jpayne@68
|
383
|
jpayne@68
|
384 <p>I expect the next big changes after the official release. Please note
|
jpayne@68
|
385 that I use the German translation of the short GPL message. We need
|
jpayne@68
|
386 to set a few good examples before the localization goes out for true
|
jpayne@68
|
387 in the free software community. Here are a few points to discuss:
|
jpayne@68
|
388 </p>
|
jpayne@68
|
389 <ul>
|
jpayne@68
|
390 <li>
|
jpayne@68
|
391 Each group should have one FTP server (at least one master).
|
jpayne@68
|
392
|
jpayne@68
|
393 </li><li>
|
jpayne@68
|
394 The files on the server should reflect the latest version (of
|
jpayne@68
|
395 course!) and it should also contain a RCS directory with the
|
jpayne@68
|
396 corresponding archives (I don't have this now).
|
jpayne@68
|
397
|
jpayne@68
|
398 </li><li>
|
jpayne@68
|
399 There should also be a ChangeLog file (this is more useful than the
|
jpayne@68
|
400 RCS archive but can be generated automatically from the later by
|
jpayne@68
|
401 Emacs).
|
jpayne@68
|
402
|
jpayne@68
|
403 </li><li>
|
jpayne@68
|
404 A <em>core group</em> should judge about questionable changes (for now
|
jpayne@68
|
405 this group consists solely by me but I ask some others occasionally;
|
jpayne@68
|
406 this also seems to work).
|
jpayne@68
|
407
|
jpayne@68
|
408 </li></ul>
|
jpayne@68
|
409
|
jpayne@68
|
410
|
jpayne@68
|
411 <a name="Mailing-Lists"></a>
|
jpayne@68
|
412 <a name="SEC226"></a>
|
jpayne@68
|
413 <h3 class="subsection"> <a href="gettext_toc.html#TOC219">12.4.3 Mailing Lists</a> </h3>
|
jpayne@68
|
414
|
jpayne@68
|
415 <p>If we get any inquiries about GNU <code>gettext</code>, send them on to:
|
jpayne@68
|
416 </p>
|
jpayne@68
|
417 <table><tr><td> </td><td><pre class="example">‘<tt>coordinator@translationproject.org</tt>’
|
jpayne@68
|
418 </pre></td></tr></table>
|
jpayne@68
|
419
|
jpayne@68
|
420 <p>The ‘<tt>*-pretest</tt>’ lists are quite useful to me, maybe the idea could
|
jpayne@68
|
421 be generalized to many GNU, and non-GNU packages. But each maintainer
|
jpayne@68
|
422 his/her way!
|
jpayne@68
|
423 </p>
|
jpayne@68
|
424 <p>François, we have a mechanism in place here at
|
jpayne@68
|
425 ‘<tt>gnu.ai.mit.edu</tt>’ to track teams, support mailing lists for
|
jpayne@68
|
426 them and log members. We have a slight preference that you use it.
|
jpayne@68
|
427 If this is OK with you, I can get you clued in.
|
jpayne@68
|
428 </p>
|
jpayne@68
|
429 <p>Things are changing! A few years ago, when Daniel Fekete and I
|
jpayne@68
|
430 asked for a mailing list for GNU localization, nested at the FSF, we
|
jpayne@68
|
431 were politely invited to organize it anywhere else, and so did we.
|
jpayne@68
|
432 For communicating with my pretesters, I later made a handful of
|
jpayne@68
|
433 mailing lists located at iro.umontreal.ca and administrated by
|
jpayne@68
|
434 <code>majordomo</code>. These lists have been <em>very</em> dependable
|
jpayne@68
|
435 so far…
|
jpayne@68
|
436 </p>
|
jpayne@68
|
437 <p>I suspect that the German team will organize itself a mailing list
|
jpayne@68
|
438 located in Germany, and so forth for other countries. But before they
|
jpayne@68
|
439 organize for true, it could surely be useful to offer mailing lists
|
jpayne@68
|
440 located at the FSF to each national team. So yes, please explain me
|
jpayne@68
|
441 how I should proceed to create and handle them.
|
jpayne@68
|
442 </p>
|
jpayne@68
|
443 <p>We should create temporary mailing lists, one per country, to help
|
jpayne@68
|
444 people organize. Temporary, because once regrouped and structured, it
|
jpayne@68
|
445 would be fair the volunteers from country bring back <em>their</em> list
|
jpayne@68
|
446 in there and manage it as they want. My feeling is that, in the long
|
jpayne@68
|
447 run, each team should run its own list, from within their country.
|
jpayne@68
|
448 There also should be some central list to which all teams could
|
jpayne@68
|
449 subscribe as they see fit, as long as each team is represented in it.
|
jpayne@68
|
450 </p>
|
jpayne@68
|
451
|
jpayne@68
|
452 <a name="Information-Flow"></a>
|
jpayne@68
|
453 <a name="SEC227"></a>
|
jpayne@68
|
454 <h2 class="section"> <a href="gettext_toc.html#TOC220">12.5 Information Flow</a> </h2>
|
jpayne@68
|
455
|
jpayne@68
|
456 <p><strong> NOTE: </strong> This documentation section is outdated and needs to be
|
jpayne@68
|
457 revised.
|
jpayne@68
|
458 </p>
|
jpayne@68
|
459 <p>There will surely be some discussion about this messages after the
|
jpayne@68
|
460 packages are finally released. If people now send you some proposals
|
jpayne@68
|
461 for better messages, how do you proceed? Jim, please note that
|
jpayne@68
|
462 right now, as I put forward nearly a dozen of localizable programs, I
|
jpayne@68
|
463 receive both the translations and the coordination concerns about them.
|
jpayne@68
|
464 </p>
|
jpayne@68
|
465 <p>If I put one of my things to pretest, Ulrich receives the announcement
|
jpayne@68
|
466 and passes it on to the German team, who make last minute revisions.
|
jpayne@68
|
467 Then he submits the translation files to me <em>as the maintainer</em>.
|
jpayne@68
|
468 For free packages I do not maintain, I would not even hear about it.
|
jpayne@68
|
469 This scheme could be made to work for the whole Translation Project,
|
jpayne@68
|
470 I think. For security reasons, maybe Ulrich (national coordinators,
|
jpayne@68
|
471 in fact) should update central registry kept at the Translation Project
|
jpayne@68
|
472 (Jim, me, or Len's recruits) once in a while.
|
jpayne@68
|
473 </p>
|
jpayne@68
|
474 <p>In December/January, I was aggressively ready to internationalize
|
jpayne@68
|
475 all of GNU, giving myself the duty of one small GNU package per week
|
jpayne@68
|
476 or so, taking many weeks or months for bigger packages. But it does
|
jpayne@68
|
477 not work this way. I first did all the things I'm responsible for.
|
jpayne@68
|
478 I've nothing against some missionary work on other maintainers, but
|
jpayne@68
|
479 I'm also losing a lot of energy over it—same debates over again.
|
jpayne@68
|
480 </p>
|
jpayne@68
|
481 <p>And when the first localized packages are released we'll get a lot of
|
jpayne@68
|
482 responses about ugly translations :-). Surely, and we need to have
|
jpayne@68
|
483 beforehand a fairly good idea about how to handle the information
|
jpayne@68
|
484 flow between the national teams and the package maintainers.
|
jpayne@68
|
485 </p>
|
jpayne@68
|
486 <p>Please start saving somewhere a quick history of each PO file. I know
|
jpayne@68
|
487 for sure that the file format will change, allowing for comments.
|
jpayne@68
|
488 It would be nice that each file has a kind of log, and references for
|
jpayne@68
|
489 those who want to submit comments or gripes, or otherwise contribute.
|
jpayne@68
|
490 I sent a proposal for a fast and flexible format, but it is not
|
jpayne@68
|
491 receiving acceptance yet by the GNU deciders. I'll tell you when I
|
jpayne@68
|
492 have more information about this.
|
jpayne@68
|
493 </p>
|
jpayne@68
|
494
|
jpayne@68
|
495 <a name="Translating-plural-forms"></a>
|
jpayne@68
|
496 <a name="SEC228"></a>
|
jpayne@68
|
497 <h2 class="section"> <a href="gettext_toc.html#TOC221">12.6 Translating plural forms</a> </h2>
|
jpayne@68
|
498
|
jpayne@68
|
499 <p>Suppose you are translating a PO file, and it contains an entry like this:
|
jpayne@68
|
500 </p>
|
jpayne@68
|
501 <table><tr><td> </td><td><pre class="smallexample">#, c-format
|
jpayne@68
|
502 msgid "One file removed"
|
jpayne@68
|
503 msgid_plural "%d files removed"
|
jpayne@68
|
504 msgstr[0] ""
|
jpayne@68
|
505 msgstr[1] ""
|
jpayne@68
|
506 </pre></td></tr></table>
|
jpayne@68
|
507
|
jpayne@68
|
508 <p>What does this mean? How do you fill it in?
|
jpayne@68
|
509 </p>
|
jpayne@68
|
510 <p>Such an entry denotes a message with plural forms, that is, a message where
|
jpayne@68
|
511 the text depends on a cardinal number. The general form of the message,
|
jpayne@68
|
512 in English, is the <code>msgid_plural</code> line. The <code>msgid</code> line is the
|
jpayne@68
|
513 English singular form, that is, the form for when the number is equal to 1.
|
jpayne@68
|
514 More details about plural forms are explained in <a href="gettext_11.html#SEC207">Additional functions for plural forms</a>.
|
jpayne@68
|
515 </p>
|
jpayne@68
|
516 <p>The first thing you need to look at is the <code>Plural-Forms</code> line in the
|
jpayne@68
|
517 header entry of the PO file. It contains the number of plural forms and a
|
jpayne@68
|
518 formula. If the PO file does not yet have such a line, you have to add it.
|
jpayne@68
|
519 It only depends on the language into which you are translating. You can
|
jpayne@68
|
520 get this info by using the <code>msginit</code> command (see <a href="gettext_6.html#SEC45">Creating a New PO File</a>) –
|
jpayne@68
|
521 it contains a database of known plural formulas – or by asking other
|
jpayne@68
|
522 members of your translation team.
|
jpayne@68
|
523 </p>
|
jpayne@68
|
524 <p>Suppose the line looks as follows:
|
jpayne@68
|
525 </p>
|
jpayne@68
|
526 <table><tr><td> </td><td><pre class="smallexample">"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
jpayne@68
|
527 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
jpayne@68
|
528 </pre></td></tr></table>
|
jpayne@68
|
529
|
jpayne@68
|
530 <p>It's logically one line; recall that the PO file formatting is allowed to
|
jpayne@68
|
531 break long lines so that each physical line fits in 80 monospaced columns.
|
jpayne@68
|
532 </p>
|
jpayne@68
|
533 <p>The value of <code>nplurals</code> here tells you that there are three plural
|
jpayne@68
|
534 forms. The first thing you need to do is to ensure that the entry contains
|
jpayne@68
|
535 an <code>msgstr</code> line for each of the forms:
|
jpayne@68
|
536 </p>
|
jpayne@68
|
537 <table><tr><td> </td><td><pre class="smallexample">#, c-format
|
jpayne@68
|
538 msgid "One file removed"
|
jpayne@68
|
539 msgid_plural "%d files removed"
|
jpayne@68
|
540 msgstr[0] ""
|
jpayne@68
|
541 msgstr[1] ""
|
jpayne@68
|
542 msgstr[2] ""
|
jpayne@68
|
543 </pre></td></tr></table>
|
jpayne@68
|
544
|
jpayne@68
|
545 <p>Then translate the <code>msgid_plural</code> line and fill it in into each
|
jpayne@68
|
546 <code>msgstr</code> line:
|
jpayne@68
|
547 </p>
|
jpayne@68
|
548 <table><tr><td> </td><td><pre class="smallexample">#, c-format
|
jpayne@68
|
549 msgid "One file removed"
|
jpayne@68
|
550 msgid_plural "%d files removed"
|
jpayne@68
|
551 msgstr[0] "%d slika uklonjenih"
|
jpayne@68
|
552 msgstr[1] "%d slika uklonjenih"
|
jpayne@68
|
553 msgstr[2] "%d slika uklonjenih"
|
jpayne@68
|
554 </pre></td></tr></table>
|
jpayne@68
|
555
|
jpayne@68
|
556 <p>Now you can refine the translation so that it matches the plural form.
|
jpayne@68
|
557 According to the formula above, <code>msgstr[0]</code> is used when the number
|
jpayne@68
|
558 ends in 1 but does not end in 11; <code>msgstr[1]</code> is used when the number
|
jpayne@68
|
559 ends in 2, 3, 4, but not in 12, 13, 14; and <code>msgstr[2]</code> is used in
|
jpayne@68
|
560 all other cases. With this knowledge, you can refine the translations:
|
jpayne@68
|
561 </p>
|
jpayne@68
|
562 <table><tr><td> </td><td><pre class="smallexample">#, c-format
|
jpayne@68
|
563 msgid "One file removed"
|
jpayne@68
|
564 msgid_plural "%d files removed"
|
jpayne@68
|
565 msgstr[0] "%d slika je uklonjena"
|
jpayne@68
|
566 msgstr[1] "%d datoteke uklonjenih"
|
jpayne@68
|
567 msgstr[2] "%d slika uklonjenih"
|
jpayne@68
|
568 </pre></td></tr></table>
|
jpayne@68
|
569
|
jpayne@68
|
570 <p>You noticed that in the English singular form (<code>msgid</code>) the number
|
jpayne@68
|
571 placeholder could be omitted and replaced by the numeral word “one”.
|
jpayne@68
|
572 Can you do this in your translation as well?
|
jpayne@68
|
573 </p>
|
jpayne@68
|
574 <table><tr><td> </td><td><pre class="smallexample">msgstr[0] "jednom datotekom je uklonjen"
|
jpayne@68
|
575 </pre></td></tr></table>
|
jpayne@68
|
576
|
jpayne@68
|
577 <p>Well, it depends on whether <code>msgstr[0]</code> applies only to the number 1,
|
jpayne@68
|
578 or to other numbers as well. If, according to the plural formula,
|
jpayne@68
|
579 <code>msgstr[0]</code> applies only to <code>n == 1</code>, then you can use the
|
jpayne@68
|
580 specialized translation without the number placeholder. In our case,
|
jpayne@68
|
581 however, <code>msgstr[0]</code> also applies to the numbers 21, 31, 41, etc.,
|
jpayne@68
|
582 and therefore you cannot omit the placeholder.
|
jpayne@68
|
583 </p>
|
jpayne@68
|
584
|
jpayne@68
|
585 <a name="Prioritizing-messages"></a>
|
jpayne@68
|
586 <a name="SEC229"></a>
|
jpayne@68
|
587 <h2 class="section"> <a href="gettext_toc.html#TOC222">12.7 Prioritizing messages: How to determine which messages to translate first</a> </h2>
|
jpayne@68
|
588
|
jpayne@68
|
589 <p>A translator sometimes has only a limited amount of time per week to
|
jpayne@68
|
590 spend on a package, and some packages have quite large message catalogs
|
jpayne@68
|
591 (over 1000 messages). Therefore she wishes to translate the messages
|
jpayne@68
|
592 first that are the most visible to the user, or that occur most frequently.
|
jpayne@68
|
593 This section describes how to determine these "most urgent" messages.
|
jpayne@68
|
594 It also applies to determine the "next most urgent" messages after the
|
jpayne@68
|
595 message catalog has already been partially translated.
|
jpayne@68
|
596 </p>
|
jpayne@68
|
597 <p>In a first step, she uses the programs like a user would do. While she
|
jpayne@68
|
598 does this, the GNU <code>gettext</code> library logs into a file the not yet
|
jpayne@68
|
599 translated messages for which a translation was requested from the program.
|
jpayne@68
|
600 </p>
|
jpayne@68
|
601 <p>In a second step, she uses the PO mode to translate precisely this set
|
jpayne@68
|
602 of messages.
|
jpayne@68
|
603 </p>
|
jpayne@68
|
604 <a name="IDX1089"></a>
|
jpayne@68
|
605 <p>Here are more details. The GNU <code>libintl</code> library (but not the
|
jpayne@68
|
606 corresponding functions in GNU <code>libc</code>) supports an environment variable
|
jpayne@68
|
607 <code>GETTEXT_LOG_UNTRANSLATED</code>. The GNU <code>libintl</code> library will
|
jpayne@68
|
608 log into this file the messages for which <code>gettext()</code> and related
|
jpayne@68
|
609 functions couldn't find the translation. If the file doesn't exist, it
|
jpayne@68
|
610 will be created as needed. On systems with GNU <code>libc</code> a shared library
|
jpayne@68
|
611 ‘<samp>preloadable_libintl.so</samp>’ is provided that can be used with the ELF
|
jpayne@68
|
612 ‘<samp>LD_PRELOAD</samp>’ mechanism.
|
jpayne@68
|
613 </p>
|
jpayne@68
|
614 <p>So, in the first step, the translator uses these commands on systems with
|
jpayne@68
|
615 GNU <code>libc</code>:
|
jpayne@68
|
616 </p>
|
jpayne@68
|
617 <table><tr><td> </td><td><pre class="smallexample">$ LD_PRELOAD=/usr/local/lib/preloadable_libintl.so
|
jpayne@68
|
618 $ export LD_PRELOAD
|
jpayne@68
|
619 $ GETTEXT_LOG_UNTRANSLATED=$HOME/gettextlogused
|
jpayne@68
|
620 $ export GETTEXT_LOG_UNTRANSLATED
|
jpayne@68
|
621 </pre></td></tr></table>
|
jpayne@68
|
622
|
jpayne@68
|
623 <p>and these commands on other systems:
|
jpayne@68
|
624 </p>
|
jpayne@68
|
625 <table><tr><td> </td><td><pre class="smallexample">$ GETTEXT_LOG_UNTRANSLATED=$HOME/gettextlogused
|
jpayne@68
|
626 $ export GETTEXT_LOG_UNTRANSLATED
|
jpayne@68
|
627 </pre></td></tr></table>
|
jpayne@68
|
628
|
jpayne@68
|
629 <p>Then she uses and peruses the programs. (It is a good and recommended
|
jpayne@68
|
630 practice to use the programs for which you provide translations: it
|
jpayne@68
|
631 gives you the needed context.) When done, she removes the environment
|
jpayne@68
|
632 variables:
|
jpayne@68
|
633 </p>
|
jpayne@68
|
634 <table><tr><td> </td><td><pre class="smallexample">$ unset LD_PRELOAD
|
jpayne@68
|
635 $ unset GETTEXT_LOG_UNTRANSLATED
|
jpayne@68
|
636 </pre></td></tr></table>
|
jpayne@68
|
637
|
jpayne@68
|
638 <p>The second step starts with removing duplicates:
|
jpayne@68
|
639 </p>
|
jpayne@68
|
640 <table><tr><td> </td><td><pre class="smallexample">$ msguniq $HOME/gettextlogused > missing.po
|
jpayne@68
|
641 </pre></td></tr></table>
|
jpayne@68
|
642
|
jpayne@68
|
643 <p>The result is a PO file, but needs some preprocessing before a PO file editor
|
jpayne@68
|
644 can be used with it. First, it is a multi-domain PO file, containing
|
jpayne@68
|
645 messages from many translation domains. Second, it lacks all translator
|
jpayne@68
|
646 comments and source references. Here is how to get a list of the affected
|
jpayne@68
|
647 translation domains:
|
jpayne@68
|
648 </p>
|
jpayne@68
|
649 <table><tr><td> </td><td><pre class="smallexample">$ sed -n -e 's,^domain "\(.*\)"$,\1,p' < missing.po | sort | uniq
|
jpayne@68
|
650 </pre></td></tr></table>
|
jpayne@68
|
651
|
jpayne@68
|
652 <p>Then the translator can handle the domains one by one. For simplicity,
|
jpayne@68
|
653 let's use environment variables to denote the language, domain and source
|
jpayne@68
|
654 package.
|
jpayne@68
|
655 </p>
|
jpayne@68
|
656 <table><tr><td> </td><td><pre class="smallexample">$ lang=nl # your language
|
jpayne@68
|
657 $ domain=coreutils # the name of the domain to be handled
|
jpayne@68
|
658 $ package=/usr/src/gnu/coreutils-4.5.4 # the package where it comes from
|
jpayne@68
|
659 </pre></td></tr></table>
|
jpayne@68
|
660
|
jpayne@68
|
661 <p>She takes the latest copy of ‘<tt>$lang.po</tt>’ from the Translation Project,
|
jpayne@68
|
662 or from the package (in most cases, ‘<tt>$package/po/$lang.po</tt>’), or
|
jpayne@68
|
663 creates a fresh one if she's the first translator (see <a href="gettext_6.html#SEC45">Creating a New PO File</a>).
|
jpayne@68
|
664 She then uses the following commands to mark the not urgent messages as
|
jpayne@68
|
665 "obsolete". (This doesn't mean that these messages - translated and
|
jpayne@68
|
666 untranslated ones - will go away. It simply means that the PO file editor
|
jpayne@68
|
667 will ignore them in the following editing session.)
|
jpayne@68
|
668 </p>
|
jpayne@68
|
669 <table><tr><td> </td><td><pre class="smallexample">$ msggrep --domain=$domain missing.po | grep -v '^domain' \
|
jpayne@68
|
670 > $domain-missing.po
|
jpayne@68
|
671 $ msgattrib --set-obsolete --ignore-file $domain-missing.po $domain.$lang.po \
|
jpayne@68
|
672 > $domain.$lang-urgent.po
|
jpayne@68
|
673 </pre></td></tr></table>
|
jpayne@68
|
674
|
jpayne@68
|
675 <p>The she translates ‘<tt>$domain.$lang-urgent.po</tt>’ by use of a PO file editor
|
jpayne@68
|
676 (see section <a href="gettext_8.html#SEC63">Editing PO Files</a>).
|
jpayne@68
|
677 (FIXME: I don't know whether <code>KBabel</code> and <code>gtranslator</code> also
|
jpayne@68
|
678 preserve obsolete messages, as they should.)
|
jpayne@68
|
679 Finally she restores the not urgent messages (with their earlier
|
jpayne@68
|
680 translations, for those which were already translated) through this command:
|
jpayne@68
|
681 </p>
|
jpayne@68
|
682 <table><tr><td> </td><td><pre class="smallexample">$ msgmerge --no-fuzzy-matching $domain.$lang-urgent.po $package/po/$domain.pot \
|
jpayne@68
|
683 > $domain.$lang.po
|
jpayne@68
|
684 </pre></td></tr></table>
|
jpayne@68
|
685
|
jpayne@68
|
686 <p>Then she can submit ‘<tt>$domain.$lang.po</tt>’ and proceed to the next domain.
|
jpayne@68
|
687 </p>
|
jpayne@68
|
688
|
jpayne@68
|
689 <table cellpadding="1" cellspacing="1" border="0">
|
jpayne@68
|
690 <tr><td valign="middle" align="left">[<a href="#SEC217" title="Beginning of this chapter or previous chapter"> << </a>]</td>
|
jpayne@68
|
691 <td valign="middle" align="left">[<a href="gettext_13.html#SEC230" title="Next chapter"> >> </a>]</td>
|
jpayne@68
|
692 <td valign="middle" align="left"> </td>
|
jpayne@68
|
693 <td valign="middle" align="left"> </td>
|
jpayne@68
|
694 <td valign="middle" align="left"> </td>
|
jpayne@68
|
695 <td valign="middle" align="left"> </td>
|
jpayne@68
|
696 <td valign="middle" align="left"> </td>
|
jpayne@68
|
697 <td valign="middle" align="left">[<a href="gettext_toc.html#SEC_Top" title="Cover (top) of document">Top</a>]</td>
|
jpayne@68
|
698 <td valign="middle" align="left">[<a href="gettext_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
|
jpayne@68
|
699 <td valign="middle" align="left">[<a href="gettext_21.html#SEC389" title="Index">Index</a>]</td>
|
jpayne@68
|
700 <td valign="middle" align="left">[<a href="gettext_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
|
jpayne@68
|
701 </tr></table>
|
jpayne@68
|
702 <p>
|
jpayne@68
|
703 <font size="-1">
|
jpayne@68
|
704 This document was generated by <em>Bruno Haible</em> on <em>February, 21 2024</em> using <a href="https://www.nongnu.org/texi2html/"><em>texi2html 1.78a</em></a>.
|
jpayne@68
|
705 </font>
|
jpayne@68
|
706 <br>
|
jpayne@68
|
707
|
jpayne@68
|
708 </p>
|
jpayne@68
|
709 </body>
|
jpayne@68
|
710 </html>
|