使用gettext结果使用逗号更改句点

时间:2012-07-31 16:05:05

标签: php codeigniter internationalization gettext

我正在使用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');

有人对此有解释吗?

1 个答案:

答案 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);