std::runtime_error: locale::facet::_S_create_c_locale name not valid

在一台配置为

SUSE 11 X86_64 GCC 4.5.0的机器上 静态编译各种库文件 能正常运行

后将其拷贝到另一台配置为:

SUSE 10.1 GCC4.1.0的机器上无法运行,报标题中的这个错误。

google后发现还比较常见,boost maillist中给出了1.52的相关的补丁,地址如下:

https://svn.boost.org/trac/boost/ticket/4688#no1

 

借此学习一下国际化和本地化的知识,这个链接里有比较详细的介绍:

http://www.ibm.com/developerworks/cn/linux/l-cn-linuxglb/

获取系统当前locale变量

                
 $ locale 
 LANG=en_US.UTF-8                    # 未设置任何 LC_xxx 变量时所使用的默认值
 LC_CTYPE=zh_CN.UTF-8                # 指定使用某区域的字符分类及处理方式
 LC_NUMERIC="en_US.UTF-8"            # 指定使用某区域的非货币的数字格式
 LC_TIME="en_US.UTF-8"               # 指定使用某区域的日期和时间格式
 LC_COLLATE="en_US.UTF-8"            # 指定使用某区域的排序规则
 LC_MONETARY="en_US.UTF-8"           # 指定使用某区域的货币格式
 LC_MESSAGES="en_US.UTF-8"           # 指定使用某区域的响应与信息的格式
 LC_PAPER="en_US.UTF-8"              # 指定使用某区域的纸张大小
 LC_NAME="en_US.UTF-8"               # 指定使用某区域的姓名书写方式
 LC_ADDRESS="en_US.UTF-8"            # 指定使用某区域的地址格式和位置信息
 LC_TELEPHONE="en_US.UTF-8"          # 指定使用某区域的电话号码格式
 LC_MEASUREMENT="en_US.UTF-8"        # 指定使用某区域的度量衡规则
 LC_IDENTIFICATION="en_US.UTF-8"     # 对 locale 自身信息的概述
 LC_ALL=                             # 用来覆盖掉所有其他 LC_xxx 变量的值

locale相关变量使用时的先后顺序,优先级高的可以覆盖优先级低的

 [1] LANGUAGE 
 [2] LC_ALL 
 [3] LC_xxx 
 [4] LANG 

 locale 的名称存在一个命名的格式。

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

例如:zh_CN.utf-8

 

 

posted @ 2013-03-05 17:21  Angus.Wang  阅读(1957)  评论(0编辑  收藏  举报