信息的国际化

  1. 信息的国际化
     

     

    信息(Message)国际化是软件国际化中比较重要的一环, 如果使软件可以 支持多种语言,在设计时就应当考虑到信息的国际化问题.现在的绝大多数 软件使用GNU的gettext作为基本工具.信息国际化的基本步骤是:

    • 在软件初始化时设置使用setlocale()设置Locale
    • 使用gettext宏定义, 使程序看上去比较方便:
    • 指定信息的位置:
    • 指定翻译信息: _("Some Strings");
    • 在软件完成后,使用 xgettext 提取信息并翻译
    • 使用msgfmt把信息文件转换为.mo文件, 安装到locale目录下
            /* file this_app.c */
            #include <locale.h>
            #include <libintl.h>
            #define _(String)  gettext(String)
            #define N_(String)  gettext(String)
            #define __(String) (String)
    
            int main(){
                    //由环境变量决定locale
                    setlocale(LC_ALL, "");               
    
                    //设置message的位置和文件名
                    bindtextdomain("this_app", "/usr/share/locale");
                    textdomain("this_app");
                    
                    printf(_("Some String"));
            }
            
    
                至此, 本程序的国际化过程已完成.编译并联接成可执行文件this_app.
    gcc -o this_app this_app.c
     

     

     下面是本地化的过程.
     
     

    • 提取要翻译的信息: xgettext -a -o this_app.po this_app.c
    • 翻译信息
       

       

       在文件this_app.po 中含有"Some String":
       
       

      msgid "Some String"
      msgstr ""
       

       

       翻译成:
       
       

      msgid "Some String"
      msgstr "一些字符串"
       

       
       
       

    • 格式化信息文件: msgfmt -o this_app.mo this_app.po
    • 拷贝信息文件到locale的目录下, 比如对于中文zh_CN, cp this_app.mo /usr/share/locale/zh_CN/LC_MESSAGES
    • 执行文件: LC_ALL=zh_CN ./this_app

你可能感兴趣的:(String,File,语言,工具)