Using Traditional Chinese and Other Languages $Revision$ $Date$ Using Traditional Chinese and Other Languages

This is an introduction to using Traditional Chinese and other languages in GNUstep. Note, however, that I have only tested these instructions with Traditional Chinese of either BIG5 or Unicode (iso10646-1) encoding. But since GNUstep is generally internationalized, this introduction could be applied to other languages with limited modification.

Default Encoding

GNUstep uses Unicode internally. Everything it reads will be converted into Unicode. It will assume that everything it reads is in NSISOLatin1StringEncoding (iso8859-1) as the default encoding except scripts with escape (\u) ahead. User can change the default encoding by setting the environment variable GNUSTEP_STRING_ENCODING.

For example, in bash:

GNUSTEP_STRING_ENCODING = NSBIG5StringEncoding export GNUSTEP_STRING_ENCODING

Now, it will assume that everything it reads without an escape is NSBIG5StringEncoding (BIG5). GNUstep will also write anything into this default encoding.

There is a handy tool to convert between encodings: cvtenc. Programmers should use this tool to convert property lists to Unicode before releasing them.

Input

In XWindows, GNUstep use the XIM input method. Any XIM-server should be able to input script into GNUstep. The way GNUstep knows the encoding of the input is from the environment variable LC_CTYPE. In order to input Traditional Chinese, LC_CTYPE must be set for example, in .xinitrc

LC_CTYPE=zh_TW.Big5 export LC_CTYPE

Right now, GNUstep supports UTF8 and Big5 encoding in input. If it doesn't work for your language, try to add more encoding support in -initWithDelegate:display:name: (back/Source/x11/XIMInputServer.m).

Display

Depending on the graphics library you use, GNUstep handles font display slightly differently. You can choose the graphics library when configuring the backend:

./configure --enable-server=x11 --enable-graphics=xlib

the argument --enable-graphics could be either xlib or art for now. Personally I would suggest using art, which offer better font management.

You can specify the font and size you want to use with the GNUstep defaults system. For exmample:

defaults write NSGlobalDomain NSFont "Ar Pl Kaitim Big5" defaults write NSGlobalDomain NSFontSize 16

The font name should be the same as the font name of `xlsfonts` output, but each word has to be capitalized. If you don't know what font names GNUstep supports, use the font panel in Ink.app to find out the font name.

Xlib

GNUstep will use a font cache in ~/GNUstep/Library/Font/Cache/ to store the fonts of XWindows. Everytime you add more fonts to XWindows, you have to delete this cache and let the program build a new one. When you specify the default font, GNUstep will look it up in the font cache, and pick up the matched font in XWindows, then use this font to display text. GNUstep also support Xft for anti-aliased font display. Add GSFontAntiAlias=YES to your defaults to activate it. In order to use Traditional Chinese properly, always set it. In order to use Xft, you also need to set freetype or xtt in your XF86Config (most of the time this is done for you.)

Here is the problem you might meet when using Chinese fonts (arphic) in GNUstep:

Each font will be assigned as big-0 or iso8859-1 in fonts.dir by default, but actually arphic font is iso10646-1 encoding. XWindows usually does the encoding conversion internally. So when you use "Ar Pl Kaitim Big5", you have a chance of picking up either big5-0 or iso8859-1 encoding, and neither works for GNUstep for unknown reason. The solution is:

Add iso10646-1 in fonts.dir, and it has to be in front of big5-0. Order is important to pick the right one. Set the default GSFontMask = *-iso* so that font cache won't pick up the big5-0 encoding.

That's it. GNUstep should pick up the right font (iso10646-1). Since the mapping between NSFont in GNUstep (without encoding information) and font in XWindows (with encoding information) may not be unique ("Ar Pl Kaitim Big5" could be "-arphic-ar pl kaitim big5-*-*..-big5-0" or "-arphic-ar pl kaitim big5-*-*..-iso8859-1" or "-arphic-ar pl kaitim big5-*-*..-iso10646-1"), you have to put the iso10646-1 font in front of other encodings and use GSFontMask to filter out other possible choices so that GNUstep can pick up the correct one. And for now, I can only use the iso10646-1 font for Chinese display. Font with other encoding (including big5) does not work and is not well-tested.

If you still have problems, look at the back/Source/xlib/XftFont.m and dump the font name of NSFont and encoding of the corresponding XWindows font. Sometimes the font cache can't find the matched XWindows font, and sometimes the encoding of the XWindows font is different from what Xft got. An example of the latter is that Xft will think the encoding of "-arphic-ar pl kaitim big5-*-*..-big5-0" is "apple-roman". Only "-arphic-ar pl kaitim big5-*-*..-iso10646-1" can be recognized as "iso10646-1" correctly. Therefore, make sure GNUstep picks the right XWindows font.

Art

The art backend use freetype for font management, and minimizes encoding problems. Simply add a Chinese font into your font collection as with other fonts, and enjoy the beautiful Chinese characters.

Summary

GNUstep supports internationalization and localization. In a few steps, you should be able to use it with your language.

Set GNUSTEP_STRING_ENCODING to read/write locally encoded files, including Localizable.strings. Set the correct LC_CTYPE. If your XIM-Server doesn't support UTF8 or Big5 encoding, try to add your encoding into XIMInputServer.m Assign the font using the GNUstep defaults tool, and use the art backend.