• [Gammu]setlocale和bindtextdomain函数的用法


    这两个函数都是linux实现i18n需要用到的。
    其中setlocale用来设定locale,比如LC_ALL,LC_CTYPE等,一般用法是:setlocale(LC_ALL, "")
    这用来设置LC_ALL,第二个参数是一个空字符串表示使用环境变量中定义的LC_ALL的值。

    然后就是用bindtextdomain,比如:bindtextdomain("libgammu", LOCALE_PATH);
    Linux i18n中,每个资源文件是.mo文件,这个文件是二进制的,用工具针对一个文本生成(作成二进制应该是考虑了性能)。所以,上面的代码 中,LOCALE_PATH指定的就是寻找mo文件的一个路径,一般的,如果调用了上面的代码,那么gettext library就会在这个地方寻找mo文件:
    /usr/share/locale-langpack/<locale>/LC_MESSAGES/libgammu.mo

    此 外,还有textdomain函数,比如:textdomain("gammu"); 这个函数的作用是设置当前需要使用的text domain(这些text domain之前都要使用bindtextdomain来设定好以便能让gettext library找到那个mo文件)。如果我们的程序用到了多个mo文件,那就需要bindtextdomain多次,然后用textdomain来指定当 前需要使用哪个。比如gammu中,gammu命令行程序使用的就是gammu这个text domain,libgammu这个库使用的就是libgammu.mo

    附上gammu中使用这两个函数的代码:
    Code: Select all
    #ifdef GETTEXTLIBS_FOUND
    void GSM_InitLocales(const char *path) {
       /* setlocale, locale is "" means all locale settings are
          depend on the environment setting. */
       setlocale(LC_ALL, "");
       if (path == NULL || strlen(path) == 0) {
    #if defined(LOCALE_PATH)
          bindtextdomain("libgammu", LOCALE_PATH);
    #else
          bindtextdomain("libgammu", ".");
    #endif
       } else {
          /* bindtextdomain, libgammu is the catalog, path is the
             message file root path. E.g: if path is /usr/share/locale-langpack,
             then all messages represented by gettext will by found in:
             /usr/share/locale-langpack/<locale>/LC_MESSAGES/libgammu.mo
             Refer to manual of bindtextdomain for more details. */
          bindtextdomain("libgammu", path);
       }
    }
    #else
    void GSM_InitLocales(const char UNUSED *path) {
       setlocale(LC_ALL, "");
    }
    #endif
  • 相关阅读:
    变量系列教材 (一)- Java中 什么是变量
    HelloWorld系列(七)- 各种软件、工具版本兼容说明
    HelloWorld系列(六)- eclipse常见的使用技巧
    HelloWorld系列(四)- 使用ecipse创建第一个 java project
    HelloWorld系列(二)- 用命令行中编写第一个 java 程序
    HelloWorld系列(一)- 手把手教你做JDK环境变量配置
    面向对象(三)- Java类的方法
    [LeetCode] 69. Sqrt(x)
    [LeetCode] 258. Add Digits
    [LeetCode] 187. Repeated DNA Sequences
  • 原文地址:https://www.cnblogs.com/super119/p/1996111.html
Copyright © 2020-2023  润新知