linux setlocale用法

头文件与声明如下:

1 #include

2 char* setlocale(int category, const char* locale);

说明:

category:为locale分类,表达一种locale的领域方面,

通常有下面这些预定义常量:LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_MONETARY、LC_NUMERIC、LC_TIME,

其中 LC_ALL 表示所有其它locale分类的并集。

locale:为期望设定的locale名称字符串,在Linux/Unix环境下,通常以下面格式表示locale名称:

language[_territory][.codeset][@modifier],

language 为 ISO 639 中规定的语言代码,territory 为 ISO 3166 中规定的国家/地区代码,codeset 为字符集名称。

在Linux下,可以使用 locale -a 命令查看系统中所有已配置的 locale。用不带选项的 locale 命令查看当前 Shell 中活动的 locale。

用 locale -m 命令查看locale系统支持的所有可用的字符集编码。

和locale相关的包叫做:locales,locale系统支持的所有可用locale在文件:/usr/share/i18n/SUPPORTED 中列出。

在Debian下,可用 dpkg-reconfigure locales 命令重新配置 locale,也可以手工修改 /etc/locale.gen 文件,然后运行 locale-gen 命令。

在Ubuntu下,修改 /var/lib/locales/supported.d/local 文件,配置新的 locale,然后运行 locale-gen 命令。

当 locale 为 NULL 时,函数只做取回当前 locale 操作,通过返回值传出,并不改变当前 locale。

当 locale 为 "" 时,根据环境的设置来设定 locale,检测顺序是:环境变量 LC_ALL,每个单独的locale分类LC_*,最后是 LANG 变量。

当C语言程序初始化时(刚进入到 main() 时),locale 被初始化为默认的 C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,

是用来书写C语言源程序的最小字符集(所以才起locale名叫:C)。

当用 setlocale() 设置活动 locale 时,如果成功,会返回当前活动 locale 的全名称;如果失败,会返回 NULL。

为了使程序可以根据环境来改变活动 locale,一般都在程序的初始化阶段加入下面代码:setlocale(LC_ALL, ""),这样就可以根据环境变量来进行本地化操作.

bindtextdomain()

参考:man 3 bindtextdomain,功能是:设置包含 LC_MESSAGES 分类 (catalog) 的 locale 目录,

程序的 .mo 文件就保存到其下的目录中。LC_MESSAGES 是 locale 的一个分类 (catalog),和其它的分类,如:LC_TIME、LC_CTYPE,是平级的概念。

bindtextdomain() 有两个参数,

第一个叫 domainname,所谓 domain 即领域范围,它的含义是 .mo 文件将应用在哪个、哪些程序中,可以将 domain 对应为工程的概念,

上面的示例工程叫 GetTextTest,所以将 domainname 也定义为 "GetTextTest"。第二个参数是定义保存 .mo 文件的 locale 相关目录的路径,

可以为相对或绝对路径,示例中设置为 "locale/",表示检查当前目录下的 locale 目录.

domainname、locale 目录、程序当前活动 locale,这三者会决定你需要将 .mo 放到 locale 目录的具体位置,形式为:

[locale 目录]/[活动 locale]/LC_MESSAGES/[domainname].mo

比如,示例的 .mo 必需命名并保存为:

[GetTextTest 程序当前目录]/locale/zh_CN.GBK/LC_MESSAGES/GetTextTest.mo

textdomain()

参考:man 3 bindtextdomain,功能是:设置后来使用 gettext() 时的 domain。示例中设置:textdomain("GetTextTest")。

gettext()

参考:man 3 gettext, 功能是:替换程序中的 msgid 为 .mo 中的 msgstr,并返回 msgstr。示例中活动 locale 为 zh_CN.GBK 时,

gettext("Hello World!") 将返回文件 locale/zh_CN.GBK/LC_MESSAGES/GetTextTest.mo 中对应的 GBK 编码的 msgstr,即 "你好,世界!"

如果不存在 locale/zh_CN.GBK,则会到 locale/zh_CN 中查找 .mo。

linux setlocale函数,linux setlocale用法相关推荐

  1. linux setlocale函数,linux中的多语言环境(LC_ALL, LANG, locale)

    为了在Linux下实现多语言支持,必须在定制安装程序时,引入与glibc和图形环境两者对应的多语言环境支持.对于glibc环境而言,它是整个Linux中文化的基础,我们需要在/usr/share/lo ...

  2. linux 编程函数原型与用法

    函数原型以及部分实例应用 --------------------------------------------------------------------------------------- ...

  3. linux expect函数,Linux expect 用法(示例代码)

    用法 1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和Linux下的bash.windows下的cmd是一类东西. 注意 ...

  4. linux getopt函数,Linux中getopt函数用法

    最近做cache lab 用到了getopt函数, 用man 3 getopt查看了下用法, 做个总结. 描述:getopt函数是用来解析命令行参数的, 以'-'或'--'开头的参数为选项元素,除去' ...

  5. linux receive函数,Linux网络 - 数据包的接收过程

    的方式写入到指定的内存地址,该地址由网卡驱动分配并初始化.注: 老的网卡可能不支持DMA,不过新的网卡一般都支持. 3: 网卡通过硬件中断(IRQ)通知CPU,告诉它有数据来了 4: CPU根据中断表 ...

  6. linux backtrack函数,Linux调用backtrack函数打印程序崩溃时的调用堆栈

    可以给自己的程序都加上这个东西,便于快速的找到错误吧,看到别人都是这么用的 #include #include #include #include //signal 函数用法参考http://www. ...

  7. linux usleep 函数,Linux 高精確的時序(sleep, usleep,nanosleep)

    首先, 我会说不保证你在使用者模式 (user-mode) 中执行的行程 (process) 能够精确地控制时序因为 Linux 是个多工的作业环境. 你在执行中的行程 (process) 随时会因为 ...

  8. linux popen 函数,Linux下使用popen()执行shell命令

    函数原型: #include "stdio.h" FILE popen( const char command, const char* mode ) 参数说明: command: ...

  9. linux fork 函数,Linux的fork()系统调用

    Linux的fork()系统调用,就是以父进程为模版创建子进程,是Linux系统的进程管理机制的核心API之一,另一个是调度器函数schedule(),它的用户态API就是之前说自旋锁时提到的sche ...

  10. linux线程调度函数,Linux调度策略及线程优先级设置

    Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务.一旦占用cpu则一直运行.一直运行直到有更高优先级任务到达或自己放弃 3, ...

最新文章

  1. LeetCode Sudoku Solver
  2. ABAP:向自建表写入数据时,需要注意的问题
  3. RxSwift之UI控件UIPickerView扩展的使用
  4. 前端工程与性能优化:静态资源版本更新与缓存
  5. kolla-ansible解析
  6. 代码中目录是否以分隔符结尾的再讨论
  7. 谷歌app使用的是什么字体_如何使用Google字体
  8. 魅族魅蓝note6救砖及高通救砖工具分享
  9. 计算机考研英语复试如何准备,如何准备考研英语复试听力?
  10. Scratch的广播与消息
  11. 10.2 项目干系人管理
  12. meanshift聚类算法跟踪原理
  13. 在unbuntu16.04上安装网易云音乐
  14. linux命令删除raid,甲秀之音-Linux环境下删除硬盘中残留的raid信息
  15. 快来,看看spring有多烂-来自jfinaL的嘲笑
  16. 概率论基础 —— 1. 基本事件类型、运算规则,及古典概型与几何型概型
  17. 数据库范式(normalization)
  18. 从陌陌到挚文集团,名字变化背后还有什么故事?
  19. 七年级信息技术计算机的启动,七年级信息技术复习资料
  20. Surfer图件转MapGis图件总结

热门文章

  1. Can‘t update has no tracked branch
  2. 万用表使用心得-测量不准点的地方
  3. Git 如何撤回某一次提交
  4. 读书笔记,《反脆弱》,第四章,杀死我的东西却让其他人更强壮
  5. [转] 香港流行乐坛三十年
  6. 支付宝第三方应用,用户登录授权获取信息
  7. 谷歌浏览器实现按下按键的脚本_谷歌浏览器快捷键设置方法详解
  8. 编译原理 --- 正规式和有限自动机
  9. 程序测试包含哪些内容?
  10. 5G促进VR产业规模化运用,2000亿市场等着被瓜分 | 附报告下载