zoukankan      html  css  js  c++  java
  • bindtextdomain()/textdomain() 设置文本域目录及文本域文件

    转载自:http://www.groad.net/bbs/read.php?tid-4077.html

    bindtextdomain() 和 textdomain() 函数声明如下:

    #include <libintl.h>
    char * bindtextdomain (const char * domainname, const char * dirname);
    char * textdomain (const char * domainname);
    

    bindtextdomain() 用来设置文本域目录。所谓的文本域文件就是 mo 文件,mo 文件在开发多语言软件中会用到,比如正常打印 "hello world" 的英文,为了在中文环境中得到相应显示,我们将这句话翻译为“你好,世界”,然后将这句中文放在一个 mo 文件中,一般会将该文件放在 /usr/share/locale/zh_CN/LC_MESSAGES 中。基于性能方面的考虑,mo 文件一般会做为二进制文件。

    一般这么使用该函数:

    #define LOCALEDIR "/usr/share/locale/"      /* 设置 mo 文件所在基目录(该目录下会有 zh_CN, zh_TW 等等这些目录) */
    #define PACKAGE "foonly"    /* 函数的第 1 个参数 domainname */
    bindtextdomain (PACKAGE, LOCALEDIR);
    

    接着,一般会再使用 textdomain() 函数设置需要使用的文本域 ( text domain )。这些文本域之前都是经过 bindtextdomain() 指定的,再经过  textdomain() 函数设置后,那么此后 gettext 库(及其中的相关函数)便能找到相应的 mo 文件并操作它们。

    如果程序需要用到多个 mo 文件,那么需要使用 bindtextdomain() 函数多次,然后使用 textdomain() 来指定当前需要使用哪一个。

    比如上面,我们用:

    #define LOCALEDIR "/usr/share/locale/"      //设置 mo 文件所在基目录(该目录下会有 zh_CN, zh_TW 等等这些目录)
    #define PACKAGE "foonly"    //函数的第 1 个参数 domainname
    bindtextdomain (PACKAGE, LOCALEDIR);
    textdomain (PACKAGE);
    
  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/zechen11/p/2243342.html
Copyright © 2011-2022 走看看