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