为什么ICU的Locale :: getDefault()返回“root”?

时间:2010-06-19 23:01:56

标签: c++ locale icu

使用带有C ++的ICU库我正在做:

char const *lang = Locale::getDefault().getLanguage();

如果我编写一个小型测试程序并在我的Mac系统上运行,我会en获得lang。但是,在我正在开展的一个更大的小组项目中,我得到root。有谁知道为什么?我确实找到了这个:

http://userguide.icu-project.org/locale/resources

所以我的猜测是,当在较大的系统下运行时,找不到一些ICU资源,但我不知道有什么资源,为什么找不到它们,或者如何解决它。

其他信息

/usr/bin/locale返回:

LANG="en_US.ISO8859-1"
LC_COLLATE="C" 
LC_CTYPE="C" 
LC_MESSAGES="C" 
LC_MONETARY="C" 
LC_NUMERIC="C" 
LC_TIME="C" 
LC_ALL="C" 

如果我写一个小C程序:

char const *lang = setlocale( LC_ALL, "" ):

我得到en_US.ISO8859-1

操作系统:Mac OS X 10.6.4(雪豹)
ICU版本:4.3.4(最新版本可通过MacPorts获取)。

一点帮助?感谢。

1 个答案:

答案 0 :(得分:1)

root肯定是一个奇怪的默认语言环境 - 这些天你没有看到很多本地的root用户。

但严重的是,在更大的系统上假设有人没有调用setDefault("root")的某个变体是否安全?

/usr/bin/locale之类的内容会在此系统上返回什么(如果可以运行的话)?

ICU 4.4现在有一个名为“icuinfo”的测试程序,它是否还将root作为默认语言环境返回?

这是什么操作系统/平台,以及哪个版本的ICU?