C语言“局部环境(locale)”是什么
局部环境是对特定环境下程序要遵循的特定规则的一种描述,它对程序的国际化很有帮助。
如果你要打印一笔钱的数目,你总是使用美元符号吗?不,如果你的程序要在英国运行,你就要使用英镑符号。在有些国家,货币符号要写在钱数的前面,而在有些国家,货币符号要写在钱数的后面。一个负数的负号要放在哪里呢?在美国写成1,234.56的一个数字,在另外一些国家中可能要写成1.234,56。同样的值在不同的国家中会有不同的表示规则。时间和日期又是如何表示的呢?简而言之,也是因国而异。如果一个程序员要编写一个必须在全世界运行的程序,那么这些情况就是使他头疼的部分技术原因。
幸运的是:部分差异已经被标准化了。C编译程序支持不同的“局部环境”,即程序在不同地方的不同表示规则。例如,函数strcoll()(string collate,字符串的依序整理)和strcmp()函数相似,但它能反映出不同国家和语言对字符串值进行排序和整理(collate)的方式。函数setlocale()和localeconv()提供了这方面的支持。
不幸的是:并没有一种标准化了的关于这些有趣的局部环境的清单。你的编译程序唯一能保证提供的只有“C”局部环境。这是一种通用的美式英语规则,对于码值在32和127之间的ASCII字符,这种规则工作得最好。尽管如此,如果你想正确地编写一个能在全世界运行的程序,那么从局部规则这个角度来考虑问题就是一个好的开端(接下来,如果你能再找到几种你的编译程序能支持的局部环境,或者让你的编译程序接受你定义的几种局部环境,那就更好了)。
如果你要打印一笔钱的数目,你总是使用美元符号吗?不,如果你的程序要在英国运行,你就要使用英镑符号。在有些国家,货币符号要写在钱数的前面,而在有些国家,货币符号要写在钱数的后面。一个负数的负号要放在哪里呢?在美国写成1,234.56的一个数字,在另外一些国家中可能要写成1.234,56。同样的值在不同的国家中会有不同的表示规则。时间和日期又是如何表示的呢?简而言之,也是因国而异。如果一个程序员要编写一个必须在全世界运行的程序,那么这些情况就是使他头疼的部分技术原因。
幸运的是:部分差异已经被标准化了。C编译程序支持不同的“局部环境”,即程序在不同地方的不同表示规则。例如,函数strcoll()(string collate,字符串的依序整理)和strcmp()函数相似,但它能反映出不同国家和语言对字符串值进行排序和整理(collate)的方式。函数setlocale()和localeconv()提供了这方面的支持。
不幸的是:并没有一种标准化了的关于这些有趣的局部环境的清单。你的编译程序唯一能保证提供的只有“C”局部环境。这是一种通用的美式英语规则,对于码值在32和127之间的ASCII字符,这种规则工作得最好。尽管如此,如果你想正确地编写一个能在全世界运行的程序,那么从局部规则这个角度来考虑问题就是一个好的开端(接下来,如果你能再找到几种你的编译程序能支持的局部环境,或者让你的编译程序接受你定义的几种局部环境,那就更好了)。