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