1

我正在使用 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 语言初始化函数时才会发生这种情况。

这里是帮手:

<?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');

有人对此有解释吗?

4

1 回答 1

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);
于 2012-08-09T21:32:19.297 回答