1

CakePHP の本に従って、サイトの i18n と l10n を設定しています。英語、スペイン語、ドイツ語があるとします。

ブラウザーには通常、優先度順に並べられた言語のリストがあります。リストの最初の位置に、サイトで構成されている言語が表示されている場合は、すべて正常に動作します。ただし、たとえば、リストが次の場合: フランス語、ドイツ語、スペイン語、英語。ローカリゼーションが失敗し、コードで使用した i18n 識別子が表示されます。

この場合、ページがドイツ語に翻訳されて表示されることを希望します。これは、サイトが提供できる最初の言語がリストにあるためです。これは完璧な解決策ですが、少なくとも、ブラウザー リストの最初の言語が私のページで不明な場合は、既定の言語 (英語など) を構成できるようにしたいと考えています。

これを達成するために私ができることと、コードをどこに置くべきですか?

前もって感謝します。

4

2 に答える 2

3

さて、私は次のことをしましたapp/Config/bootstrap.php

$browserLangs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$find = 'eng';
foreach($browserLangs as $browserLang) {
    $lang = substr($browserLang,0,2);
    var_dump($lang);
    if ($lang == 'en') {
        $find = 'eng';
        break;
    } else if ($lang == 'es') {
        $find = 'spa';
        break;
    } else if ($lang == 'ca') {
        $find = 'cat';
        break;
    }
}
Configure::write('Config.language', $find);

Accept Language ヘッダーには、ブラウザーの言語のすべてのリストを含む文字列があります。次に、英語をデフォルトとして定義し、リストで他の言語を見つけようとします。

機能するのでこれを答えにしましたが、次の理由で汚いです:

  1. これが最良の方法であり、最良の場所であるかどうかはわかりませんが、
  2. これは非常に静的です。言語を 1 つずつ配置する必要があり、別の言語を追加するときはアルゴリズムを更新する必要があります。最善の解決策は、cake アプリケーションで定義されたロケールを自動的にチェックすることですが、これをどのように求めればよいかわかりません。
  3. おそらく、このコードはプラグイン、コンポーネントなどとして定義する必要があります。

おそらく、誰かがこれを改善するか、別のより良い解決策を新しい回答として投稿できます。

于 2012-06-07T12:15:33.900 に答える
0

作成した.poファイルを開く必要があります。エディター(例:http://poedit.net)を使用して、複数の言語バージョンを作成できます。

すべての言語の複数形を変更することを忘れないでください。ドイツ語の場合はnplurals=2; plural=(n != 1)、ここにリストがあります:http: //translate.sourceforge.net/wiki/l10n/pluralforms

その後、言語ファイルをに保存する必要がありますapp/Locale/deu/LC_MESSAGES/...

最後に、そのフォルダーにdefault.moファイルとdefault.poファイルが必要です。

于 2012-06-07T13:33:43.733 に答える