其中;prog.gmo 。就是我们要的讯息档,等到我们把它安装到;
/usr/share/locale/..../LC_MESSAGES/
之後,就名改为;prog.mo; 。在此,;.pot,;pox,;gmo;等附档名是;info;gettext;中建议的,分别代表未翻译前的讯息原始档、翻译後的讯息原始档、;经;GNU;gettext;套件编译後的讯息档 。;
七、撰写;Xi18n;程式:;
Xi18n;意指在;X;Window;中加入;I18N;的支援 。除了上述的部分外,;Xi18n;还需要考虑字形设定、图形字串输出、以及输入的问题 。由於目前我只有看过;Xlib,;对於其他;Widget;还没有深入研究,因此我只能对;Xlib;的部分稍作说明 。而这类的参考资料,有兴趣的朋友可以找;
The;Definitive;Guides;to;the;X;Window;System;
这一系列的书来看,出版商是;O"Reilly;&;Associates;Inc.;,其中有两本;
;
Volume;One,;Xlib;Programming;Manual;(for;Version;11);
Author:;Adrian;Nye
R6;Update;for;the;R5;Editions;of;vols.;1,;2,;4,;&;5;Programmer"s;Supplement;for;Release;6;of;the;X;Window;System.;
Author:;Adrian;Nye
在;I18N;方面有详尽的资料,很值得参考 。或者是可以看看;XFree86;内附的;.ps;文件;(如果您有安装的话,应该在;/usr/X11R6/lib/X11/doc;头) 。;
;
第一步;(详见;man;XSupportsLocale):;
除了;setlocale();之外,您还要呼叫;XSupportsLocale();来确定;X;Window;对您;目前的;locale;是否有支援 。另外,您还要呼叫;XSetLocaleModifiers();来设定;一些;X-modifier;的值,例如下:;
--------------------------------------------------------------------------------
#include;
#include;
#include;
main()
{
setlocale(LC_CTYPE,;"");
if;(XSupportsLocale();!=;True);{
printf("error;X;locale;settingn");
exit(0);
}
XSetLocaleModifiers("");
}
--------------------------------------------------------------------------------
在此我们用;X11/Xlocale.h;来取代原来的;locale.h,;这是;"Xlib;programming;manual";书中建议的,在其备完整;locale;支援的;libc;环境下,它其实是等价;於;include;,;但若在其他环境,;Xlocale.h;会用;XLOCALE;机制来;取代原有的机制 。;
上头的;XSetLocaleModifiers;会存环境变数;XMODIFIERS;中取得;X-modifier;的值并加以设定之 。;XMODIFIERS;的格式为:;
export;XMODIFIERS="@category=value"
目前;category;只有;"im";有用,如;"@im=xcin-cxims",;意指设定;xcin-cxims;作为此;X;Window;程式的;XIM;server 。;
设定;fontset;(详见;man;XCreateFontSet):;
以往;X;Window;程式都是呼叫;XLoadQueryFont();之类的函式来载入并使用字型 。;但在;Xi18n;的架构下,一个;locale;的;encoding;通常不能光用一种字型来表示 。;例如我们的;zh_TW.Big5,;半形字需用英文字型;(如;-*-iso8859-1),而全形字需;用中文字型;(如;-twmoe-*-big5-0),;因此,我们不能用;XLoadQueryFont();将这;些字型分别载入,而要用;XCreateFontSet();来载入所需的;fontset 。;
;
--------------------------------------------------------------------------------
Display;*display;
XFontSet;fontset;
char;*fontset_name,;**missing_charset,;*def_string;
int;missing_charset_count;
fontset_name;=;"-*-iso8859-1,-twmoe-*-big5-0";
fontset;=;XCreateFontSet(display,;fontset_name,
&missing_charset_list,;
&missing_charset_count,
&def_string);
--------------------------------------------------------------------------------
在这我们可以将;fontset;看成一个「字型物件」,而不要把它看成;"-*-iso8859-1";与;"-twmoe-*-big5-0";这两种字型的组合 。当我们要画任何字;串时,我们不用担心要画的到底是全型字或半型字,使用;fontset;便能帮我们;处理一切 。;
画出字串;(详见;man;XwcDrawImageString,;man;XmbDrawImageString,;manXOpenOM);
平常我们要在视窗画字串时,都会用;XDrawImageString();等函式,或者用;XDrawImageString16();来画双位元的字串;(即全型字) 。现在可以我们用;XwcDrawImageString;(用来画;wide-char;(wchar_t;*);字串);或;XmbDrawImageString;(用来画;multi-byte;(char;*);字串); 。不管您输入的字;串是全型或半型,或二者的混合,使用者两个函式都能正确处理,同时会根据;您的;fontset;的设定来画字 。;
推荐阅读
- 造成母牛流产的原因
- 邯郸学步的比喻义和本意 邯郸学步用来比喻什么
- 话说老款手机的标准铃声
- 一升是多少斤食用油
- 什么时候的雪可称为瑞雪
- 手机顶部的HD是什么意思?有什么用?
- Linux命令Man解释:whatis:搜寻特定指令
- 联邦快递是哪个国家的
- 螺丝一般几分钟煮熟
- 名声大振的意思 名声大振是什么意思
