2011-01-10 9 views
1

私はgoogle'dを使って、ローカライゼーションのDBアダプタ(素晴らしいbtwを使用しています)でアプリケーションを動作させる方法を見つけました。このシナリオは次のとおりです。dbとfallbackを使ってZend_Localeを行う方法は?

  • 英語、ドイツ語、フランス語、韓国語の翻訳があります。
  • 英語は100%ですが、それ以外はありません。
  • 文字列が英語
  • アダプタを使用しています
  • とIDませんローカライズされた文字列にフォールバックするために、ドイツ語、フランス語、韓国語のニーズに局在されていない場合

例:

<?php 

    // This is init'd in the bootstrap 
    try { 
     $locale = new Zend_Locale(Zend_Locale::BROWSER); /* Q1!!! */ 
    } catch (Zend_Locale_Exception $e) { 
     $locale = new Zend_Locale('en_US'); 
    } 

    $translate = new Zend_Translate(
     'XYZ_Translate_Adapter_Db', // My adapter 
     $data,      // Populated variable 
     $locale->getLanguage(),  // Returns en, de, fr or ko 
     array()      // Options to pass to the adapter, none. 
    ); 

    // This is called from the view 
    echo $translate->_(123); /* Q2!!! */ 

?> 

エコー出力はID 123の対応するテキストになります。今すぐQ1!コメント、en/de/fr/koロケールを検証するにはどうすればよいですか?そして、Q2 !!!コメントID 123の場合、どのように英語にフォールバックできますか?他の言語では見つかりませんでした。

また、私は日付と通貨を処理するので、fr_FR、de_DE、ko_KOのバリデーションを行い、fr_CAやde_ATのようなバリエーションは検証しません。だから最初の部分では、ロケールが私が必要とする国/ラングから来たものであるかどうか、あるいは彼らが少なくとも有効な言語である(そして彼らを適切な国に強制する)かどうかを検証する必要がある。最後の部分については、翻訳がdbにない場合は、それを検証して英語に戻ってください。

答えて

1

Zend_Translateはフォールバック機能をサポートしています。ここではデからのフォールバックルールを設定することができますアン

$translate = new Zend_Translate(
array(
    'adapter' => Zend_Translate::AN_XLIFF, 
    'content' => APPLICATION_PATH . '/../data/locales/', 
    'locale' => $locale->getLanguage(), 
    'scan' => Zend_Translate::LOCALE_FILENAME, 
    'useId' => true, 
    'route' => array('de' => 'en') 
    ) 
); 

注「ルート」パラメータにフォールバックの例で 。 地域コードは自動的に処理されるので気にする必要はありません。 Zend_Translateルーティングセクションの詳細を読む http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional.rerouting

関連する問題