| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • Alumin远程访问控制软件 让你…

  • 浏览器操作记录工具Internet…

  • 让Google Deskbar实现简体中…

  • 网页打不开 Windows的Hosts表…

  • windows IE浏览器精典技巧两…

  • 实现了!中文WinXP安装IE7 B…

  • 腾讯TT浏览器V2.03简体中文版

  • 解决微软IE 6.0的三个典型问…

  • QQ2005Beta3超级视频问题解答

  • 解决珊瑚虫QQ不能在Win2003运…

  • Q
    您现在的位置: 我是IT人 >> 应用学院 >> 操作系统 >> Linux >> 教程正文
    Linux 的中文化问题简介           
    Linux 的中文化问题简介
    作者:网络 文章来源:转载 点击数: 更新时间:2005-8-15
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:

    须透过 locale 的 LC_MESSAGES 来处理讯息输出。其原理很简单,就是将程式中的所
    有讯息抽离出来,为每一个 locale 分别做好一个讯息档,当程式要输出讯息时,则透
    过 libc 的函式依目前的 locale 去正确的讯息档中抓取讯息。

    在此我用 GNU gettext 为例,简单说明其原理。在 /usr/share/locale 中,□头有各
    种 locale 的资料目录。而每个目录下,都会有一个 LC_MESSAGES 的目录,而这些目
    录就是用来放各别程式的讯息档。例如:


    /usr/share/locale/ja/LC_MESSAGES/prog.mo (日文)
    /usr/share/locale/zh_TW.Big5/LC_MESSAGES/prog.mo (Big5)

    其中在 ja/ 目录下的 prog.mo 就是 prog 这个程式的日文讯息,而 zh_TW.Big5/ 下
    的 prog.mo 就是 prog 这个程式的中文讯息。假设在还没加入 LC_MESSAGES 支援之
    前, prog.c 长得像这样:


    ----------------------------------------------------------------------------
    ----

    #include
    main()
    {
    printf("This is a test string.\n");
    }


    ----------------------------------------------------------------------------
    ----
    现在我们要用 gettext 来加入支援,则程式只要改成:
    ----------------------------------------------------------------------------
    ----

    #include
    #include
    #define _(STRING) gettext(STRING)
    #define PACKAGE "prog"

    main()
    {
    setlocale(LC_MESSAGES, "");
    textdomain(PACKAGE);
    /* 这□就是指定用
    /usr/share/locale/$LOC/LC_MESSAGES/prog.mo
    作为讯息档。其中 $LOC 是在 setlocale 中设定的 */
    printf(_("This is a test string.\n"));
    /* 使用 gettext 来抓出讯息,再交给 printf 来印 */
    }


    ----------------------------------------------------------------------------
    ----

    如果在指定的 locale 下找不到 prog.mo 档,则程式就直接以原英文讯息印出。因
    此,加入 LC_MESSAGES 的支援,原 source code 修改并不多,其实相当方便。

    比较麻烦的是各 locale 下的讯息档制作,而这些步骤可以经由 GNU gettext 套件很
    容易地达成,其步骤简述如下 (详见 info gettext):

    xgettext editor msgfmt (install)
    source code --> .pot --> .pox --> .gmo --> .mo -->
    (节录自 Platin.bbs@csie.nctu.edu.tw 的文章:
    [REF] 关於 gettext (一、简介))

    使用 xgettext 产生 .pot 档:
    xgettext -a -o prog.pot prog.c

    而 prog.pot 档的内容如下:
    ----------------------------------------------------------------------------
    ----

    # SOME DESCRIPTIVE TITLE.
    # Copyright (C) YEAR Free Software Foundation, Inc.
    # FIRST AUTHOR , YEAR.
    #
    #: prog.c:8
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "POT-Creation-Date: 1999-02-28 19:18+0800\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    "Last-Translator: FULL NAME \n"
    "Language-Team: LANGUAGE \n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=CHARSET\n"
    "Content-Transfer-Encoding: ENCODING\n"

    #: prog.c:10
    msgid "This is a test string.\n"
    msgstr ""


    ----------------------------------------------------------------------------
    ----
    各位可以注意到倒数两行, msgid 就是原来 source □头的英文讯息,而我 们可以直
    接在 msgstr 中将原讯息翻译成中文。所以,接下来的工作其实就 是翻译,我们可以
    用任意的编辑器编辑这个档案,并将翻译好的档案存成 prog.pox 档。

    将 prog.pox 编译成 prog.gmo:
    msgfmt -o prog.gmo prog.pox

    其中 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

    这一系列的书来看,出版商是 OReilly & 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 Programmers 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 setting\n");
    exit(0);
    }
    XSetLocaleModifiers("");
    }


    ----------------------------------------------------------------------------
    ----
    在此我们用 X11/Xlocale.h 来取代原来的 locale.h, 这是 "Xlib programming

    上一页  [1] [2] [3] [4] [5] 下一页  

    教程录入:小秦    责任编辑:小秦 
  • 上一篇教程:

  • 下一篇教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |