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.
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:
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.
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
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).
Depending on the graphics library you use, GNUstep handles font display slightly differently. You can choose the graphics library when configuring the backend:
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:
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.
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:
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.
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.
GNUstep supports internationalization and localization. In a few steps, you should be able to use it with your language.
GNUSTEP_STRING_ENCODING
to read/write
locally encoded files, including Localizable.strings.LC_CTYPE
. If your XIM-Server
doesn't support UTF8 or Big5 encoding, try to add your encoding
into XIMInputServer.m