Using national language support (NLS) in FreeType ================================================= 21. 1. 1998 Erwin Dieterich 1) Introduction 2) Using gettext (user's view) 3) Using gettext (programmer's view) 4) Using gettext (maintainer's view) 5) How can I switch off NLS? I don't need/want it. Only Unix NLS using gettext() is covered here. If you are able to help with internationalization (i18n) for different operating systems, please e-mail me at Erwin.Dieterich.ED@Bayer-AG.de. 1) Introduction If a program is to be used by people who are not fluent speakers of English, the first thing they will ask for is communication in their native language. If someone tries to implement NLS in a program using only #ifdefs and other such programming strategies, it's likely that this someone will get nowhere. Gettext() is a possible way to help. Only minimal extra programming effort is needed; the translations are implemented separately from the program, and it is not necessary to recompile a program if you want to switch the messages to a different language. If you wouldd like to know more about gettext(), I recommend reading the GNU gettext tools manual, written by Ulrich Drepper, Jim Meyering, and Francois Pinard. Currently supported languages are: Czech (cz) translator: Pavel Kankovsky Dutch (nl) translator: Gertjan de Back French (fr) translator: David Turner German (de) translator: Erwin Dieterich Spain (es) translator: Miguel A. Perez Valdenebro Currently supported programs in the `test' directory are: ftlint ftdump fterror ftmetric ftsbit 2) Using gettext (user's view) Using gettext as an end user is very simple. If FreeType is correctly installed on your computer, you can simply issue an `export LANG=' in your Bourne shell or `setenv LANG=' if you are using csh. That's all. In order to switch back to English, just use `export LANG=' or `setenv LANG='. is a two character code describing your language: de=German, fr=French etc. Every supported language has its own .po file in the `po' directory of FreeType. If your language is not there you should consider contributing a translation. Just e-mail me. Here is a transcript of what `export LANG=' does: test> ftlint 24 furiosot.ttf Could not find or open furiosot.ttf. FreeType error message: OS/2 table missing. test> export LANG=de test> ftlint 24 furiosot.ttf Datei `furiosot.ttf' konnte nicht gefunden oder geöffnet werden. FreeType Fehlermeldung: `OS/2'-Tabelle fehlt. test> export LANG= test> ftlint 24 furiosot.ttf Could not find or open file furioso.ttf. FreeType error message: OS/2 table missing. Doesn't this look good? But what if nothing happens if you set LANG? Here are some hints: First: Is your language really supported? If it is, you need to be sure that you have gettext() installed (if you are sitting at a Linux box, chances are very good that you have). If you compiled FreeType yourself and nothing strange happened, then your version of FreeType has NLS compiled in, as this is the default, unless you forgot to install the translation files in the right places (`make install' in the po/ directory should be enough, but you need root permissions as these files are installed somewhere in /usr/local) -- good luck :-) 3) Using gettext (programmer's view) If you intend to use NLS in your program, you just need to make a few simple changes. Here I only describe how NLS is enabled in the programs that come with FreeType in test/. If you would like to add NLS to other programs using FreeType as well, take a look at FreeType's installation files; you can probably use these files as a model. Every string that should be translated needs gettext() around it. So Message( "Usage: %s fontname[.ttf|.ttc]\n\n", execname ); becomes Message( gettext( "Usage: %s fontname[.ttf|.ttc]\n\n" ), execname ); Yes, it's that simple. Next you need to initialize gettext. Put the following in the header section of your file: #include "ft_conf.h" #ifdef HAVE_LIBINTL_H #include #endif #ifndef HAVE_LIBINTL_H #define gettext( x ) ( x ) #endif and this at the very beginning of your main program: #ifdef HAVE_LIBINTL_H setlocale(LC_ALL, ""); bindtextdomain( "freetype", LOCALEDIR ); textdomain( "freetype" ); #endif That's all. Just have a look at fterror.c in test/. 4) Using gettext (maintainer's view) I am too lazy today :-) If something isn't clear, just ask me. 5) How can I switch off NLS? I don't need/want it. Just say `configure --disable-nls' and recompile FreeType. If you have any questions or comments regarding this short introduction to NLS & FreeType, feel free to email me at Erwin.Dieterich.ED@Bayer-AG.de. --- end of i18n.txt ---