使用gettext会导致句点用逗号更改


Using gettext results in periods changed with commas

我正在使用Codeigniter,并通过制作一个助手和相应的.po/.mo文件来实现gettext/.po国际化。

每个要替换的字符串如下所示:_('some text here');

但当成功实现这一点后,我注意到PHP计算结果如100.98等,被更改为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');

有人对此有解释吗?

这是因为您在调用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);