3

おはようございます、

言語をサポートする必要がある多言語バックエンド アプリケーションがありますn。言語はデータベースに保存され、いつでも追加できます。バックエンド機能のため<input>に、データベースに保存されている言語に基づいてフィールドを動的に生成する必要があります。次に例を示します。

  1. ドイツ人:<input type="text" id="title_de">
  2. 英語<input type="text" id="title_en">
  3. イタリアの<input type="text" id="title_it">
  4. ...

私は現在、次のようにそれらを追加しますZend_Form:

  foreach($languages as $language){
    $title = new Zend_Form_Element_Text("title_" . $language->getPrefix());
    $title->setLabel("Title " . $language->getPrefix())
      ->setRequired(true)
    $this->addElements(array($title));
  }

Doctrine を使用してフィールドを DB に保存する方法は次のとおりです。

//get language-dependent title and write to DB
  foreach($languages as $language){
    $title->setLanguage($language);
    $title->setContent($form->getValue("title_" . $language->getPrefix()));
    $touristArea->addTitle($title);

    //persist and flush
    $em->persist($touristArea);
    $em->flush();            
  } 

とにかく、多くの言語依存フィールド (タイトル、キャプションなど) があるため、フォームを処理するコードは非常に厄介なものになる可能性があり、どの入力が生成されたかを知るために、DB の言語テーブルを常にクエリする必要があります。これを行うより良い方法はありますか?入力の配列などのように?入力していただきありがとうございます:)

4

1 に答える 1

0

コンポーネントを使用することをお勧めします。Zend_Translateまず、翻訳を含むソース ファイルを作成します -> 配列ソース ファイルの作成

配列ソース ファイルはプレーンな配列です。ただし、これを支援するツールがないため、手動で定義する必要があります。しかし、それらは非常に単純であるため、コードが期待どおりに機能する場合、メッセージを検索する最も速い方法です。一般的に、翻訳ビジネスを始めるのに最適なアダプターです。

$english = array(
    'message1' => 'message1',
    'message2' => 'message2',
    'message3' => 'message3');

$german = array(
    'message1' => 'Nachricht1',
    'message2' => 'Nachricht2',
    'message3' => 'Nachricht3');

$translate = new Zend_Translate(
    array(
        'adapter' => 'array',
        'content' => $english,
        'locale'  => 'en'
    )
);

$translate->addTranslation(array('content' => $german, 'locale' => 'de'));

リリース 1.5 以降、配列を外部ファイルに含めることもサポートされています。ファイル名を指定するだけで、Zend_Translate が自動的にファイルを含めて配列を探します。ソースファイルの詳細については、次のページを参照してください

次に、Zend_Form の国際化を見てください。

フォームで I18n を初期化するには、Zend_Translate のドキュメントで詳しく説明されているように、Zend_Translate オブジェクトまたは Zend_Translate_Adapter オブジェクトが必要です。翻訳オブジェクトを取得したら、setTranslator() メソッドを使用して特定のフォーム インスタンスまたは特定の要素に翻訳者をアタッチできます。

// Tell *this* form instance to use a specific translate adapter; it
// will also be used to translate validation error messages for all
// elements:
$form->setTranslator($translate);

// Tell *this* element to use a specific translate adapter; it will
// also be used to translate validation error messages for this
// particular element:
$element->setTranslator($translate);

詳細なガイドはこちら

于 2012-09-21T08:28:46.830 に答える