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言語の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');

誰かがこれについて説明がありますか?

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 に答える