
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
                          <peak@kerberos.troja.mff.cuni.cz>
  Dutch  (nl) translator: Gertjan de Back <gertjan.de.back@pi.net>
  French (fr) translator: David Turner <david.turner@freetype.org>
  German (de) translator: Erwin Dieterich
                          <erwin.dieterich.ed@bayer-ag.de>
  Spain  (es) translator: Miguel A. Perez Valdenebro
                          <map@fujitsu.es>

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=<language  id>'  in   your  Bourne  shell  or  `setenv
LANG=<language id>' if you are  using csh.  That's all.  In order to
switch back to English, just use `export LANG=' or `setenv LANG='.

<language  id> is  a two  character code  describing  your language:
de=German,  fr=French etc.   Every  supported language  has its  own
<language id>.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=<language id>' 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 <libintl.h>
  #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 ---
