-1

Zend Framework には、Zend_Locale という優れたコンポーネントがあります。HTTP Accept-Language ヘッダーにハッキングされていることもあり、言語とロケールを適切に解析するには、あらゆる種類の核心的な詳細があります。

Zend Framework のlocale docsには、次のように書かれています。

注: ほとんどの人が考えているように、2 文字のロケールだけが存在するわけではないことに注意してください。また、省略形が2文字だけでない言語や地域もあります。そのため、地域や言語を自分で取り除くべきではありません。ロケール文字列から言語や地域を取り除きたい場合は Zend_Locale を使用してください。そうしないと、自分でこれを行うと、コード内で予期しない動作が発生する可能性があります。

完全。ただし、さまざまな言語の翻訳をテストしてきました。Firefox でブラウズすると仮定して、設定を変更し、いくつかの language_region プロファイルを追加します...デフォルトの順序を変更します。Zend はデフォルトのみをプルすることがわかります。ドキュメントでもそう言っています:

ユーザーがブラウザ内で複数のロケールを指定した場合、Zend_Locale は最初に見つかったロケールを使用します。ユーザーがロケールを指定しない場合、またはスクリプトがコマンド ラインから呼び出されている場合、自動ロケール「環境」が自動的に使用され、返されます。

これは残念です。5 つの言語が定義されている場合、ユーザーがブラウザーで定義したすべてのロケールを調べて、一致する言語を使用する必要があります...

だから私の質問は、完全なリストを解析して一致するものを引き出すためにどのようなアプローチをとりますか?

UPDATE 完全なリストを返す Zend_Locale::getBrowser() メソッドがあります。すごい!Zend_Translate が最初のものだけをプルするように見える理由がわかりません。それがどのように機能するかを確認してから戻ってきます...おそらく、翻訳した言語の配列を構築し、それを getBrowser() の結果と比較して、最初の一致を取得する必要があります。

UPDATE2 解決策を実装しましたが、Zend_Translate と Zend_Locale は小さな小さなクラスではないため、まだハッキーです。国際化は明らかに大きなトピックです。研究することはかなりあります。

しかし、本質的には、各言語がブラウザーの設定リストと一致するかどうかをチェックすることになります。

4

1 に答える 1

0

アプローチフォームhttp://www.zf-beginners-guide.com/bookを入手しました

protected function _initLocale()
{
// try to auto-detect locale
// if fail, set locale manually
try {
$locale = new Zend_Locale('browser');
} catch (Zend_Locale_Exception $e) {
$locale = new Zend_Locale('en_GB');
}
// register locale
$registry = Zend_Registry::getInstance();
$registry->set('Zend_Locale', $locale);
}

しかし、私が恐れていることと彼はロケールのアップグレードについて言及しています:

注意検出されたロケール識別子に地域コードではなく言語コードのみが含まれている場合、Zend_Localeは例外をスローしないことに注意することが重要です。たとえば、一部のクライアントおよび/またはサーバー環境は、単にロケールenまたはfrを返す場合があります。この状況は、Zend_Localeが、Zend_Currencyなどの完全なロケール識別子を期待する他のロケール対応クラスで使用される場合に問題を引き起こすことがあります。利用可能な事実と「最良の推測」の見積もりに基づいてロケールを手動で設定することを除けば、この問題に対する実際の解決策はありません。提案された新機能Zend_Localeでは、将来、「ロケールのアップグレード」が可能になります。この場合、部分的に修飾されたロケール識別子(たとえば、en)は、完全に修飾されたロケール識別子(たとえば、en_US)に自動的に変換されます。

たとえば、Firefoxで言語コード[en]のみを選択した場合、上記のコードはそれをロケールとして受け入れますが、他のロケール対応クラスは例外をスローします

いくつかのテストの後、私は非常に高い割合の人々があなたを幸せにするブラウザのデフォルト言語を変更しないことを発見しました:)

于 2010-11-05T21:37:21.803 に答える