1

ユーザーの役割に応じて、Zend プロジェクトで異なるテキストを表示する必要があります。

  • 通常のユーザーには、「en」言語を使用しています。
  • 新しいユーザーには、「en_new」のようなものが必要です。

ただし、言語「en_new」は常に「en」に戻ります。

言語を自動的に検出するために locale_directory スキャン システムを使用しています。

4

2 に答える 2

1

変換アダプターは、 (少なくとも ZF 1.1x では)Zend_Locale::findLocale()内部的に呼び出します。addTranslation()これにより、ロケールがホワイトリストに登録されているかどうかがチェックされます。あなたのものは明らかにそうではありません。私はコードを深く掘り下げることはしませんでしたが、次のステップは から に戻すことである可能性が非常に高いen_xxxですen

ソースを参照してください:

  • library/Zend/Translate/Adapter.php-addTranslationメソッド
  • library/Zend/Locale.php-findLocaleメソッド
于 2012-01-27T15:10:40.633 に答える
0

私は現在、同様のものを評価しています。一部のユーザーのために、一部のテキストを別の方法で翻訳したいと考えています。また、カスタムロケール値を作成できないという問題にも遭遇しました。テストで見つけたタフなことは、問題を解決/回避するようです。

ここも参照してください:複数の翻訳ソースを組み合わせる

私がやっていることは、デフォルトの翻訳にカスタム翻訳を追加することです。

$translateDef = new Zend_Translate(
   array(
       'adapter'    => 'gettext',
       'content'    => 'locale/default/',
       'locale' => 'auto',
       'scan'       => Zend_Translate::LOCALE_DIRECTORY
   )
);

$translateCust = new Zend_Translate(
   array(
       'adapter'    => 'gettext',
       'content'    => 'locale/custom/',
       'locale' => 'auto',
       'scan'       => Zend_Translate::LOCALE_DIRECTORY
   )
);

$translateDef->addTranslation(array(
       'content'    => $translateCust
    )
);

そして、フォルダ構造は次のようになります。

locale/
       default/
               de
               en
       custom/
               de
               en

そのaddTranslationため、既存のものを上書きするように見えるため、新しいユーザーの場合は、適切な翻訳でカスタムフォルダーを追加できます. 私のテストでは、これはこれまでのところうまくいきましたが、まだ詳細に評価していません。

于 2012-02-15T13:05:38.707 に答える