locale.h
C语言要用在哪里,都应该包含什么内容,包括什么功能。随着历史中各种需求的沉淀,和各种实现的积累,C标准也日趋于完善。历经了5年的成长,看来一切都基本完成,可以画上一个句号了。剩下的工作只是一些修修补补的小改动。正当X3J11委员会的成员们一致认为他们过去的工作“将已经有的实践制定为标准”很好的成就了C标准的构建,并且C标准已经基本完成。这时候,也正是C用在世界各地比较高峰的时期,一个一直以来未被留意的问题日渐明显了。C语言中处理数字、货币、时间日期格式、字符这些只是美国人的标准,或者说是美国人的习惯。欧洲人怎么办?也遵守美国人的习惯?反对ANSI C标准做为世界标准的声音在欧洲地区响起,他们与其接受美国人的习惯,不如等候真正国际化的实现的到来。在这样的局势下,AT&T Bell实验室专门召开会议来讨论这个问题,就是现在我们称为的 国际化(I18N)。在会议中提出在C中实现区域设置的功能。编写适应性强的程序,比如程序运行在美国的电脑,操作习惯是美国人的,运行在欧洲电脑上,就是欧洲人的,这种问题,其实在更早,大约当时的15年前就已经有有效果的解决方法。就是环境变量。在C语言中要读取到一个环境变量的值,可以用中定义的函数getenv。其实,区域设置本质上也就是这个问题,将货币处理设置相应的环境变量,数字,字符等,都设置上相应的环境变量,按照需要,总共应该有将近二十个环境变量,一一设置好了,问题就得以解决。区域设置是一个比环境变量方法更改进的方案。你只要设置到一个区域,里面整套的几十个环境变量就相应的改变了。不用一一设置,不容易出错。在这个环境下locale诞生了,那么到底什么是locale呢?locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类
- 符号及其分类(LC_CTYPE)
- 数字 (LC_NUMERIC)
- 比较和排序习惯(LC_COLLATE)
- 时间显示格式(LC_TIME)
- 货币单位(LC_MONETARY)
- 信息,主要是 提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)
- 姓名书写方式(LC_NAME)
- 地址书写方式 (LC_ADDRESS),电话号码书写方式 (LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT)