0

Kohana3.3のI18n機能に問題があります

私のI18nフォルダの構造は次のとおりです

i18n /

  • en /
    • us.php
  • zh /
    • hk.php
    • cn.php

私が得ている問題はi18n::lang('en-us');、APIが「-」文字の文字列を分解すると述べているため、どこを読んでもそのような言語をロードできるはずであり、デフォルトのターゲット言語「en-us」は結果として次のファイルを検索します。

/application/i18n/en.php
/application/i18n/en/us.php

i18n::lang('en/us');代わりに使用した場合にのみ、正しい言語ファイルが読み込まれるようですi18n::lang('en-us');

4

1 に答える 1

1

私のために働きます。これらの呼び出しは、Kohana に対して同等です。

I18n::lang('en-us'); 
I18n::lang('en us');
I18n::lang('en_us');

「en/us」値を使用すると、I18n はi18n/en.phpファイルをロードせず、 i18n/en/us.php.

問題の原因を 1 つだけ提案できます。

__()デフォルト言語の翻訳を無視する関数を使用しています (「en-us」はハードコーディングされています)。したがって、I18n::lang('en/us') を呼び出すと、デフォルトの言語は英語のままですが、'en-us' とは異なります。少しハック:)

I18n クラスをAPPPATH/classes/I18n.phpファイル (標準的な Kohana の方法) で拡張し、その関数に独自のバージョンを追加できます。

// translate always!
function __($string, array $values = NULL, $lang = 'en-us')
{
    $string = I18n::get($string);

    return empty($values) ? $string : strtr($string, $values);
}
于 2012-11-02T07:53:15.797 に答える