web-dev-qa-db-ja.com

カスタムフィールドを分類法の用語で翻訳するにはどうすればよいですか?

カスタムフィールド翻訳可能コンテンツを分類法条件で使用したいと思います。これは既存のモジュールで可能ですか?

これは、分類用語の代わりにnodesを使用した場合に可能であることを知っています。エンティティ変換モジュールを使用してフィールドを翻訳可能にして、ノード編集ページで言語を切り替えてフィールドを作成します。

また、分類法翻訳モジュールでは、語彙が言語ごとに異なる名前と説明を持つことができるという意味で、語彙を「ローカライズ」できることも認識しています。名前と説明をローカライズ可能にするだけでなく、ボキャブラリにアタッチしたカスタムフィールド、特にテキストフィールドと画像フィールドも必要です。これは既存のモジュールで可能ですか?

1
user1460043

エンティティの翻訳では、カスタム用語フィールドの翻訳も可能です。エンティティの翻訳設定ページ(admin/config/regional/entity_translation)で、分類可能な用語を翻訳可能なエンティティタイプとして有効にする必要があります。

ただし、分類用語のエンティティ翻訳を有効にすると、Titleモジュールをインストールして有効にしない限り、用語の名前と説明はローカライズできなくなります。コアの名前と説明フィールドをフィールドインスタンスに置き換えるオプションを提供します。これは、エンティティの変換を通じて翻訳可能になります。

0
Konstantin

アンドレイジャンの回答に関しては、これは「ローカライズ」モードを使用してテキストフィールドフィールドを翻訳できるようにする、もう少し一般的なコードです。

function mymodule_i18n_string_list_taxonomy_alter(&$strings, $type, $object) {

  if ($type == 'taxonomy_term' && $object) {
    // Retrieve vocabulary and potential field instances 
    // for this vocabulary.
    $vid = $object->vid;
    $vocabulary = taxonomy_vocabulary_load($vid);
    $field_instances = field_info_instances($type, $vocabulary->machine_name);

    // Iterate over each fields to check if textfield(s) exists.
    foreach ($field_instances as $field_name => $field_instance) {
      if ($field_instance['widget']['type'] == 'text_textfield') {

        // Retrieve data for the field.
        $term_data = field_get_items($type, $object, $field_name);

        // Add new entry into strings array to reflect
        // values from current processed field.
        $strings['taxonomy']['term'][$object->tid][$field_name] = array(
          'string' => $term_data[0]['value'],
          'title' => $field_instance['label'],
          'format' => NULL,
          'name' => array('taxonomy', 'term', $object->tid, $field_name),
        );
      }
    }
  }
}

他の種類のフィールドを翻訳プロセスに追加できるように、ウィジェットタイプに他のテストを簡単に追加できます。

2
titouille

分類変換モードで「ローカライズ」オプションを使用する場合、分類カスタムフィールドを文字列変換に追加できます。

/** 
 * implements hook_i18n_string_list_TEXTGROUP_alter()。
 */
 function YOUR_MODULE_i18n_string_list_taxonomy_alter(&$ strings、$ type、$ object){
 if($ type == 'taxonomy_term' && $ object){
 if(isset($ object-> FIELD_NAME)){
 $ term_FIELD_NAME = field_get_items( 'taxonomy_term'、$ object、 'FIELD_NAME '); 
 $ strings [' taxonomy '] [' term '] [$ object-> tid] [' FIELD_NAME '] [' string '] = $ term_FIELD_NAME [0] [' value ']; 
} 
} 
} 

キャッシュをクリアした後、フィールドは翻訳形式で利用可能になります。

1
andreyjan