
1: Notes on the Free Translation Project 2: ************************************* 3: 4: Free software is going international! The Free Translation Project 5: is a way to get maintainers of free software, translators, and users all 6: together, so that will gradually become able to speak many languages. 7: A few packages already provide translations for their messages. 8: 9: If you found this `ABOUT-NLS' file inside a distribution, you may 10: assume that the distributed package does use GNU `gettext' internally, 11: itself available at your nearest GNU archive site. But you do _not_ 12: need to install GNU `gettext' prior to configuring, installing or using 13: this package with messages translated. 14: 15: Installers will find here some useful hints. These notes also 16: explain how users should proceed for getting the programs to use the 17: available translations. They tell how people wanting to contribute and 18: work at translations should contact the appropriate team. 19: 20: When reporting bugs in the `intl/' directory or bugs which may be 21: related to internationalization, you should tell about the version of 22: `gettext' which is used. The information can be found in the 23: `intl/VERSION' file, in internationalized packages. 24: 25: Quick configuration advice 26: ========================== 27: 28: If you want to exploit the full power of internationalization, you 29: should configure it using 30: 31: ./configure --with-included-gettext 32: 33: to force usage of internationalizing routines provided within this 34: package, despite the existence of internationalizing capabilities in the 35: operating system where this package is being installed. So far, only 36: the `gettext' implementation in the GNU C library version 2 provides as 37: many features (such as locale alias, message inheritance, automatic 38: charset conversion or plural form handling) as the implementation here. 39: It is also not possible to offer this additional functionality on top 40: of a `catgets' implementation. Future versions of GNU `gettext' will 41: very likely convey even more functionality. So it might be a good idea 42: to change to GNU `gettext' as soon as possible. 43: 44: So you need _not_ provide this option if you are using GNU libc 2 or 45: you have installed a recent copy of the GNU gettext package with the 46: included `libintl'. 47: 48: INSTALL Matters 49: =============== 50: 51: Some packages are "localizable" when properly installed; the 52: programs they contain can be made to speak your own native language. 53: Most such packages use GNU `gettext'. Other packages have their own 54: ways to internationalization, predating GNU `gettext'. 55: 56: By default, this package will be installed to allow translation of 57: messages. It will automatically detect whether the system already 58: provides the GNU `gettext' functions. If not, the GNU `gettext' own 59: library will be used. This library is wholly contained within this 60: package, usually in the `intl/' subdirectory, so prior installation of 61: the GNU `gettext' package is _not_ required. Installers may use 62: special options at configuration time for changing the default 63: behaviour. The commands: 64: 65: ./configure --with-included-gettext 66: ./configure --disable-nls 67: 68: will respectively bypass any pre-existing `gettext' to use the 69: internationalizing routines provided within this package, or else, 70: _totally_ disable translation of messages. 71: 72: When you already have GNU `gettext' installed on your system and run 73: configure without an option for your new package, `configure' will 74: probably detect the previously built and installed `libintl.a' file and 75: will decide to use this. This might be not what is desirable. You 76: should use the more recent version of the GNU `gettext' library. I.e. 77: if the file `intl/VERSION' shows that the library which comes with this 78: package is more recent, you should use 79: 80: ./configure --with-included-gettext 81: 82: to prevent auto-detection. 83: 84: The configuration process will not test for the `catgets' function 85: and therefore it will not be used. The reason is that even an 86: emulation of `gettext' on top of `catgets' could not provide all the 87: extensions of the GNU `gettext' library. 88: 89: Internationalized packages have usually many `po/LL.po' files, where 90: LL gives an ISO 639 two-letter code identifying the language. Unless 91: translations have been forbidden at `configure' time by using the 92: `--disable-nls' switch, all available translations are installed 93: together with the package. However, the environment variable `LINGUAS' 94: may be set, prior to configuration, to limit the installed set. 95: `LINGUAS' should then contain a space separated list of two-letter 96: codes, stating which languages are allowed. 97: 98: Using This Package 99: ================== 100: 101: As a user, if your language has been installed for this package, you 102: only have to set the `LANG' environment variable to the appropriate 103: `LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, 104: and `CC' is an ISO 3166 two-letter country code. For example, let's 105: suppose that you speak German and live in Germany. At the shell 106: prompt, merely execute `setenv LANG de_DE' (in `csh'), 107: `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). 108: This can be done from your `.login' or `.profile' file, once and for 109: all. 110: 111: You might think that the country code specification is redundant. 112: But in fact, some languages have dialects in different countries. For 113: example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The 114: country code serves to distinguish the dialects. 115: 116: The locale naming convention of `LL_CC', with `LL' denoting the 117: language and `CC' denoting the country, is the one use on systems based 118: on GNU libc. On other systems, some variations of this scheme are 119: used, such as `LL' or `LL_CC.ENCODING'. You can get the list of 120: locales supported by your system for your country by running the command 121: `locale -a | grep '^LL''. 122: 123: Not all programs have translations for all languages. By default, an 124: English message is shown in place of a nonexistent translation. If you 125: understand other languages, you can set up a priority list of languages. 126: This is done through a different environment variable, called 127: `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' 128: for the purpose of message handling, but you still need to have `LANG' 129: set to the primary language; this is required by other parts of the 130: system libraries. For example, some Swedish users who would rather 131: read translations in German than English for when Swedish is not 132: available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. 133: 134: In the `LANGUAGE' environment variable, but not in the `LANG' 135: environment variable, `LL_CC' combinations can be abbreviated as `LL' 136: to denote the language's main dialect. For example, `de' is equivalent 137: to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' 138: (Portuguese as spoken in Portugal) in this context. 139: 140: Translating Teams 141: ================= 142: 143: For the Free Translation Project to be a success, we need interested 144: people who like their own language and write it well, and who are also 145: able to synergize with other translators speaking the same language. 146: Each translation team has its own mailing list. The up-to-date list of 147: teams can be found at the Free Translation Project's homepage, 148: `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" 149: area. 150: 151: If you'd like to volunteer to _work_ at translating messages, you 152: should become a member of the translating team for your own language. 153: The subscribing address is _not_ the same as the list itself, it has 154: `-request' appended. For example, speakers of Swedish can send a 155: message to `sv-request@li.org', having this message body: 156: 157: subscribe 158: 159: Keep in mind that team members are expected to participate 160: _actively_ in translations, or at solving translational difficulties, 161: rather than merely lurking around. If your team does not exist yet and 162: you want to start one, or if you are unsure about what to do or how to 163: get started, please write to `translation@iro.umontreal.ca' to reach the 164: coordinator for all translator teams. 165: 166: The English team is special. It works at improving and uniformizing 167: the terminology in use. Proven linguistic skill are praised more than 168: programming skill, here. 169: 170: Available Packages 171: ================== 172: 173: Languages are not equally supported in all packages. The following 174: matrix shows the current state of internationalization, as of May 2003. 175: The matrix shows, in regard of each package, for which languages PO 176: files have been submitted to translation coordination, with a 177: translation percentage of at least 50%. 178: 179: Ready PO files am az be bg ca cs da de el en en_GB eo es 180: +-------------------------------------------+ 181: a2ps | [] [] [] [] | 182: aegis | () | 183: anubis | | 184: ap-utils | | 185: bash | [] [] [] | 186: batchelor | | 187: bfd | [] [] | 188: binutils | [] [] | 189: bison | [] [] [] | 190: bluez-pin | [] [] | 191: clisp | | 192: clisp | [] [] [] | 193: coreutils | [] [] [] [] | 194: cpio | [] [] [] | 195: darkstat | () [] | 196: diffutils | [] [] [] [] [] [] [] | 197: e2fsprogs | [] [] | 198: enscript | [] [] [] [] | 199: error | [] [] [] [] [] | 200: fetchmail | [] () [] [] [] [] | 201: fileutils | [] [] [] | 202: findutils | [] [] [] [] [] [] | 203: flex | [] [] [] [] | 204: gas | [] | 205: gawk | [] [] [] [] | 206: gcal | [] | 207: gcc | [] [] | 208: gettext | [] [] [] [] [] | 209: gettext-runtime | [] [] [] [] [] | 210: gettext-tools | [] [] | 211: gimp-print | [] [] [] [] [] | 212: gliv | | 213: glunarclock | [] [] [] | 214: gnucash | () [] | 215: gnucash-glossary | [] () [] | 216: gnupg | [] () [] [] [] [] | 217: gpe-calendar | [] | 218: gpe-conf | [] | 219: gpe-contacts | [] | 220: gpe-edit | | 221: gpe-login | [] | 222: gpe-ownerinfo | [] | 223: gpe-sketchbook | [] | 224: gpe-timesheet | | 225: gpe-today | [] | 226: gpe-todo | [] | 227: gphoto2 | [] [] [] [] | 228: gprof | [] [] | 229: gpsdrive | () () () | 230: grep | [] [] [] [] [] | 231: gretl | [] | 232: hello | [] [] [] [] [] [] | 233: id-utils | [] [] | 234: indent | [] [] [] [] | 235: jpilot | [] [] [] [] | 236: jwhois | [] | 237: kbd | [] [] [] [] [] | 238: ld | [] [] | 239: libc | [] [] [] [] [] [] | 240: libgpewidget | [] | 241: libiconv | [] [] [] [] [] | 242: lifelines | [] () | 243: lilypond | [] | 244: lingoteach | | 245: lingoteach_lessons | () () | 246: lynx | [] [] [] [] | 247: m4 | [] [] [] [] | 248: mailutils | [] [] | 249: make | [] [] [] | 250: man-db | [] () [] [] () | 251: mysecretdiary | [] [] [] | 252: nano | [] () [] [] [] | 253: nano_1_0 | [] () [] [] [] | 254: opcodes | [] [] | 255: parted | [] [] [] [] [] | 256: ptx | [] [] [] [] [] | 257: python | | 258: radius | | 259: recode | [] [] [] [] [] [] | 260: screem | | 261: sed | [] [] [] [] [] | 262: sh-utils | [] [] [] | 263: sharutils | [] [] [] [] [] [] | 264: sketch | [] () [] | 265: soundtracker | [] [] [] | 266: sp | [] | 267: tar | [] [] [] [] | 268: texinfo | [] [] [] [] | 269: textutils | [] [] [] [] | 270: tin | () () | 271: util-linux | [] [] [] [] [] | 272: vorbis-tools | [] [] [] | 273: wastesedge | () | 274: wdiff | [] [] [] [] | 275: wget | [] [] [] [] [] [] [] | 276: xchat | [] [] [] | 277: xpad | | 278: +-------------------------------------------+ 279: am az be bg ca cs da de el en en_GB eo es 280: 0 1 4 2 31 17 54 60 14 1 4 12 56 281: 282: et fa fi fr ga gl he hr hu id it ja ko 283: +----------------------------------------+ 284: a2ps | [] [] [] () () | 285: aegis | | 286: anubis | [] | 287: ap-utils | [] | 288: bash | [] [] | 289: batchelor | [] | 290: bfd | [] [] | 291: binutils | [] [] | 292: bison | [] [] [] [] | 293: bluez-pin | [] [] [] [] | 294: clisp | | 295: clisp | [] | 296: coreutils | [] [] [] [] | 297: cpio | [] [] [] [] | 298: darkstat | () [] [] [] | 299: diffutils | [] [] [] [] [] [] [] | 300: e2fsprogs | | 301: enscript | [] [] | 302: error | [] [] [] [] | 303: fetchmail | [] | 304: fileutils | [] [] [] [] [] | 305: findutils | [] [] [] [] [] [] [] [] [] [] [] | 306: flex | [] [] | 307: gas | [] | 308: gawk | [] [] | 309: gcal | [] | 310: gcc | [] | 311: gettext | [] [] [] | 312: gettext-runtime | [] [] [] [] | 313: gettext-tools | [] | 314: gimp-print | [] [] | 315: gliv | () | 316: glunarclock | [] [] [] [] | 317: gnucash | [] | 318: gnucash-glossary | [] | 319: gnupg | [] [] [] [] [] [] [] | 320: gpe-calendar | [] | 321: gpe-conf | | 322: gpe-contacts | [] | 323: gpe-edit | [] [] | 324: gpe-login | [] | 325: gpe-ownerinfo | [] [] [] | 326: gpe-sketchbook | [] | 327: gpe-timesheet | [] [] [] | 328: gpe-today | [] [] | 329: gpe-todo | [] [] | 330: gphoto2 | [] [] [] | 331: gprof | [] [] | 332: gpsdrive | () [] () () | 333: grep | [] [] [] [] [] [] [] [] [] [] [] | 334: gretl | [] | 335: hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | 336: id-utils | [] [] [] | 337: indent | [] [] [] [] [] [] [] [] | 338: jpilot | [] () | 339: jwhois | [] [] [] [] | 340: kbd | [] | 341: ld | [] | 342: libc | [] [] [] [] [] [] | 343: libgpewidget | [] [] [] | 344: libiconv | [] [] [] [] [] [] [] [] | 345: lifelines | () | 346: lilypond | [] | 347: lingoteach | [] [] | 348: lingoteach_lessons | | 349: lynx | [] [] [] [] | 350: m4 | [] [] [] [] | 351: mailutils | | 352: make | [] [] [] [] [] [] | 353: man-db | [] () () | 354: mysecretdiary | [] [] | 355: nano | [] [] [] [] | 356: nano_1_0 | [] [] [] [] | 357: opcodes | [] [] | 358: parted | [] [] [] | 359: ptx | [] [] [] [] [] [] [] | 360: python | | 361: radius | | 362: recode | [] [] [] [] [] [] | 363: screem | | 364: sed | [] [] [] [] [] [] [] [] | 365: sh-utils | [] [] [] [] [] [] | 366: sharutils | [] [] [] [] [] | 367: sketch | [] | 368: soundtracker | [] [] [] | 369: sp | [] () | 370: tar | [] [] [] [] [] [] [] [] [] | 371: texinfo | [] [] [] [] | 372: textutils | [] [] [] [] [] | 373: tin | [] () | 374: util-linux | [] [] [] [] () [] | 375: vorbis-tools | [] | 376: wastesedge | () | 377: wdiff | [] [] [] [] [] | 378: wget | [] [] [] [] [] [] [] [] | 379: xchat | [] [] [] | 380: xpad | | 381: +----------------------------------------+ 382: et fa fi fr ga gl he hr hu id it ja ko 383: 20 1 15 73 14 24 8 10 30 31 19 31 9 384: 385: lg lt lv ms nb nl nn no pl pt pt_BR ro 386: +----------------------------------------+ 387: a2ps | [] [] () () () [] [] | 388: aegis | () | 389: anubis | [] [] | 390: ap-utils | () | 391: bash | [] | 392: batchelor | | 393: bfd | | 394: binutils | | 395: bison | [] [] [] [] | 396: bluez-pin | [] | 397: clisp | | 398: clisp | [] | 399: coreutils | [] | 400: cpio | [] [] [] | 401: darkstat | [] [] [] [] | 402: diffutils | [] [] [] | 403: e2fsprogs | | 404: enscript | [] [] | 405: error | [] [] | 406: fetchmail | () () | 407: fileutils | [] | 408: findutils | [] [] [] [] | 409: flex | [] | 410: gas | | 411: gawk | [] | 412: gcal | | 413: gcc | | 414: gettext | [] | 415: gettext-runtime | [] | 416: gettext-tools | | 417: gimp-print | [] | 418: gliv | [] | 419: glunarclock | [] | 420: gnucash | | 421: gnucash-glossary | [] [] | 422: gnupg | | 423: gpe-calendar | [] [] | 424: gpe-conf | [] [] | 425: gpe-contacts | [] | 426: gpe-edit | [] [] | 427: gpe-login | [] [] | 428: gpe-ownerinfo | [] [] | 429: gpe-sketchbook | [] [] | 430: gpe-timesheet | [] [] | 431: gpe-today | [] [] | 432: gpe-todo | [] [] | 433: gphoto2 | | 434: gprof | [] | 435: gpsdrive | () () () | 436: grep | [] [] [] [] | 437: gretl | | 438: hello | [] [] [] [] [] [] [] [] [] | 439: id-utils | [] [] [] | 440: indent | [] [] [] | 441: jpilot | () () | 442: jwhois | [] [] [] | 443: kbd | | 444: ld | | 445: libc | [] [] [] [] | 446: libgpewidget | [] [] | 447: libiconv | [] [] | 448: lifelines | | 449: lilypond | [] | 450: lingoteach | | 451: lingoteach_lessons | | 452: lynx | [] [] | 453: m4 | [] [] [] [] | 454: mailutils | | 455: make | [] [] | 456: man-db | [] | 457: mysecretdiary | [] | 458: nano | [] [] [] [] | 459: nano_1_0 | [] [] [] [] | 460: opcodes | [] [] [] | 461: parted | [] [] [] | 462: ptx | [] [] [] [] [] [] [] | 463: python | | 464: radius | | 465: recode | [] [] [] | 466: screem | | 467: sed | [] [] | 468: sh-utils | [] | 469: sharutils | [] | 470: sketch | [] | 471: soundtracker | | 472: sp | | 473: tar | [] [] [] [] [] [] | 474: texinfo | [] | 475: textutils | [] | 476: tin | | 477: util-linux | [] [] | 478: vorbis-tools | [] [] | 479: wastesedge | | 480: wdiff | [] [] [] [] | 481: wget | [] [] [] | 482: xchat | [] [] | 483: xpad | [] | 484: +----------------------------------------+ 485: lg lt lv ms nb nl nn no pl pt pt_BR ro 486: 0 0 2 11 7 26 3 4 18 15 34 34 487: 488: ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW 489: +-------------------------------------------+ 490: a2ps | [] [] [] [] [] | 16 491: aegis | () | 0 492: anubis | [] [] | 5 493: ap-utils | () | 1 494: bash | [] | 7 495: batchelor | | 1 496: bfd | [] [] [] | 7 497: binutils | [] [] [] | 7 498: bison | [] [] | 13 499: bluez-pin | | 7 500: clisp | | 0 501: clisp | | 5 502: coreutils | [] [] [] [] [] | 14 503: cpio | [] [] [] | 13 504: darkstat | [] () () | 9 505: diffutils | [] [] [] [] | 21 506: e2fsprogs | [] | 3 507: enscript | [] [] [] | 11 508: error | [] [] [] | 14 509: fetchmail | [] | 7 510: fileutils | [] [] [] [] [] [] | 15 511: findutils | [] [] [] [] [] [] | 27 512: flex | [] [] [] | 10 513: gas | [] | 3 514: gawk | [] [] | 9 515: gcal | [] [] | 4 516: gcc | [] | 4 517: gettext | [] [] [] [] [] [] | 15 518: gettext-runtime | [] [] [] [] [] [] | 16 519: gettext-tools | [] [] | 5 520: gimp-print | [] [] | 10 521: gliv | | 1 522: glunarclock | [] [] [] | 11 523: gnucash | [] [] | 4 524: gnucash-glossary | [] [] [] | 8 525: gnupg | [] [] [] [] | 16 526: gpe-calendar | [] | 5 527: gpe-conf | | 3 528: gpe-contacts | [] | 4 529: gpe-edit | [] | 5 530: gpe-login | [] | 5 531: gpe-ownerinfo | [] | 7 532: gpe-sketchbook | [] | 5 533: gpe-timesheet | [] | 6 534: gpe-today | [] | 6 535: gpe-todo | [] | 6 536: gphoto2 | [] [] | 9 537: gprof | [] [] | 7 538: gpsdrive | [] [] | 3 539: grep | [] [] [] [] | 24 540: gretl | | 2 541: hello | [] [] [] [] [] | 33 542: id-utils | [] [] [] | 11 543: indent | [] [] [] [] | 19 544: jpilot | [] [] [] [] [] | 10 545: jwhois | () () [] [] | 10 546: kbd | [] [] | 8 547: ld | [] [] | 5 548: libc | [] [] [] [] | 20 549: libgpewidget | | 6 550: libiconv | [] [] [] [] [] [] | 21 551: lifelines | [] | 2 552: lilypond | [] | 4 553: lingoteach | | 2 554: lingoteach_lessons | () | 0 555: lynx | [] [] [] [] | 14 556: m4 | [] [] [] | 15 557: mailutils | | 2 558: make | [] [] [] [] | 15 559: man-db | [] | 6 560: mysecretdiary | [] [] | 8 561: nano | [] [] [] | 15 562: nano_1_0 | [] [] [] | 15 563: opcodes | [] [] | 9 564: parted | [] [] | 13 565: ptx | [] [] [] | 22 566: python | | 0 567: radius | | 0 568: recode | [] [] [] [] | 19 569: screem | [] | 1 570: sed | [] [] [] [] [] | 20 571: sh-utils | [] [] [] | 13 572: sharutils | [] [] [] [] | 16 573: sketch | [] | 5 574: soundtracker | [] | 7 575: sp | [] | 3 576: tar | [] [] [] [] [] | 24 577: texinfo | [] [] [] [] | 13 578: textutils | [] [] [] [] [] | 15 579: tin | | 1 580: util-linux | [] [] | 14 581: vorbis-tools | [] | 7 582: wastesedge | | 0 583: wdiff | [] [] [] [] | 17 584: wget | [] [] [] [] [] [] [] | 25 585: xchat | [] [] [] | 11 586: xpad | | 1 587: +-------------------------------------------+ 588: 50 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW 589: 97 domains 32 19 16 0 56 0 48 10 1 1 12 23 913 590: 591: Some counters in the preceding matrix are higher than the number of 592: visible blocks let us expect. This is because a few extra PO files are 593: used for implementing regional variants of languages, or language 594: dialects. 595: 596: For a PO file in the matrix above to be effective, the package to 597: which it applies should also have been internationalized and 598: distributed as such by its maintainer. There might be an observable 599: lag between the mere existence a PO file and its wide availability in a 600: distribution. 601: 602: If May 2003 seems to be old, you may fetch a more recent copy of 603: this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date 604: matrix with full percentage details can be found at 605: `http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. 606: 607: Using `gettext' in new packages 608: =============================== 609: 610: If you are writing a freely available program and want to 611: internationalize it you are welcome to use GNU `gettext' in your 612: package. Of course you have to respect the GNU Library General Public 613: License which covers the use of the GNU `gettext' library. This means 614: in particular that even non-free programs can use `libintl' as a shared 615: library, whereas only free software can use `libintl' as a static 616: library or use modified versions of `libintl'. 617: 618: Once the sources are changed appropriately and the setup can handle 619: the use of `gettext' the only thing missing are the translations. The 620: Free Translation Project is also available for packages which are not 621: developed inside the GNU project. Therefore the information given above 622: applies also for every other Free Software Project. Contact 623: `translation@iro.umontreal.ca' to make the `.pot' files available to 624: the translation teams. 625: