我试图在我的应用程序中设置pt_BR语言环境。
但是,出于某种原因,我的数字格式配置仍然是错误的格式。
我尝试在很多方面设置正确的语言环境:
setlocale(LC_ALL, 'pt_BR');
setlocale(LC_ALL, 'pt_BR.utf-8', 'pt_BR', 'portuguese', 'pt-br');
setlocale(LC_ALL, 'pt_BR.utf-8');
setlocale(LC_ALL, 'portuguese');
但是,对于所有这些,我有一个带点的decimal_point。葡萄牙语中的正确值是逗号。它的结果完全相同:
array (size=18)
'decimal_point' => string '.' (length=1)
'thousands_sep' => string '' (length=0)
'int_curr_symbol' => string '' (length=0)
'currency_symbol' => string '' (length=0)
'mon_decimal_point' => string '' (length=0)
'mon_thousands_sep' => string '' (length=0)
'positive_sign' => string '' (length=0)
'negative_sign' => string '' (length=0)
'int_frac_digits' => int 127
'frac_digits' => int 127
'p_cs_precedes' => int 127
'p_sep_by_space' => int 127
'n_cs_precedes' => int 127
'n_sep_by_space' => int 127
'p_sign_posn' => int 127
'n_sign_posn' => int 127
'grouping' =>
array (size=0)
empty
'mon_grouping' =>
array (size=0)
empty
这发生在我测试的本地环境和其他一些Windows计算机上。但在另一个Windows中它可以工作。所有运行Windows 7的计算机。 我还在UNIX环境中进行了测试并且运行良好。问题仅适用于某些Windows安装。
语言环境存在但出于某种原因是错误的。
有人有想法帮助我吗? 我想了解为什么会这样。
由于
答案 0 :(得分:1)
Windows和unix使用不同的区域设置代码。某些区域设置也可能未安装在系统上。这使得setlocale
功能不易移植。
setlocale手册警告可能的失败原因:
返回新的当前语言环境,如果是语言环境功能,则返回FALSE 未在您的平台上实现,指定的区域设置不会 存在或类别名称无效。
您应检查返回值并尝试解决方法,以防该语言环境不可用。
<强>更新强>
关于您的问题,当setlocale
调用成功但对区域设置没有影响时,我发现此bug report状态为won't-fix
。在bug评论中,函数通常被描述为不可预测的。失败的可能原因之一是它不是线程安全的。还有另一个类似的bug report标记为重复。有趣的是,两位记者都将Windows 7
列为他们的平台。