我正在尝试在应用程序中设置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');
但是,对于所有这些,我都有一个带点的小数点。在葡萄牙语中,正确的值是逗号。结果都一样:
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安装。
区域设置存在,但由于某些原因出现错误。
有人想帮我吗?我想知道为什么会发生这种事。
感谢
Windows和unix使用不同的区域设置代码。此外,某些区域设置可能未安装在系统上。这使得setlocale
功能不容易移植。
setlocale手册警告可能的失败原因:
返回新的当前区域设置,如果区域设置功能为FALSE没有在您的平台上实现,指定的区域设置没有存在或类别名称无效。
您应该检查返回值,并尝试一种变通方法,以防区域设置不可用。
更新
关于您的问题,当setlocale
调用成功但对区域设置没有影响时,我发现此错误报告的状态为won't-fix
。在bug注释中,函数通常被描述为不可预测的。失败的一个可能原因是它不是线程安全的。还有另一个类似的错误报告标记为重复。有趣的是,两位记者都将Windows 7
列为他们的平台。