我正在使用Codeigniter,并通过制作帮助器和相应的.po / .mo文件来实现gettext / .po国际化。
要替换的每个字符串如下所示:_('some text here');
但是在成功实现之后,我注意到导致数字如100.98等的PHP计算被改为100,98。此外,句号也会以逗号更改。
例如,此计算通常会产生类似1037.67的数字:
<?php
// Space total
$space_total = $space_info[0]->space_total;
// Prepare space used
$space_used = $space[0]->media_size / 1000000;
$space_used = round($space_used, 1);
// Prepare progressbar
$percent = $space_used / $space_total * 100;
?>
但是在实现gettext之后,它会产生1037,67。如果有其他因素导致这种情况,我已经排除故障,但只有当我在帮助程序中运行gettext语言init函数时才会发生。
这是帮手:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
function set_translation_language($language){
$lang_path = FCPATH.APPPATH.'language/locales';
putenv('LANG='.$language.'.UTF-8');
setlocale(LC_ALL, $language.'.UTF-8');
bindtextdomain('lang', $lang_path);
textdomain('lang');
}
以此为例进行调用:
set_translation_language('en_US');
有人对此有解释吗?
答案 0 :(得分:0)
这是因为你在调用setlocale()时使用的是LC_ALL。 LC_ALL不仅包括文本,还包括字符串排序,数字格式,日期格式等。
您应该使用LC_MESSAGES翻译文本。只有在输出希望以本地格式格式化的数字数据时,才应使用LC_NUMERIC。
set_translation_language($ language)应该使用setlocale(LC_MESSAGES,$ language。'。UTF-8');
当您想要输出数字时,您应该
$percent = $space_used / $space_total * 100;
$current_locale = setlocale(LC_NUMERIC, 0); // Get the current locale
setlocale(LC_NUMERIC, $language.'.UTF-8);
print $percent;
setlocale(LC_NUMERIC, $current_locale);