web-dev-qa-db-ja.com

翻訳された分類用語をビューに表示するにはどうすればよいですか?

Views モジュールを使用して、分類用語のビューを作成しました。

分類法の用語は、ギリシャ語にも(英語は別として)典型的な i18n モジュールを使用して翻訳されます。

しかし、(サイトにアクセスしているときに)言語をギリシャ語に切り替えると、英語の分類用語が表示されます(ギリシャ語の用語は表示されません)。

どうすればこれを解決できますか?

5
sokratis

必ず Internationalizations Views モジュールを使用してください。このモジュールは i18n モジュールを拡張し、 Views を多言語でサポートしています。

ビューの結果を言語切り替えに対応させるには、Content Translation:User's Current Languageのフィルターを追加します。これは、認証されたユーザーが設定した言語ですユーザー設定(現在のブラウザの言語やサイトの言語とは異なります)。

ユーザーの現在の言語のオプションがフィルター基準フォームで使用できない場合は、構成->言語で構成を確認してください->検出と選択:順序はURL、デフォルト、ユーザーであり、デフォルト、URL、ユーザーhttps://www.drupal.org/node/1701854#comment-6279474 でも説明されています)。

ブロックの表示設定を使用しており、ページにそのブロックのみを表示するように指定されている場合<front>の場合、質問に対する私の回答 フロントページでコンテンツの翻訳を利用できるようにする方法 に示されているように、別の翻訳の問題に対処する必要がある場合があることに注意してください。 Variable モジュールを使用してデフォルトのフロントページ値を正しく変換することです。これがないと、Drupalは、デフォルト値の表紙にそのブロックのみを表示します。

メモ

  1. 確かに、 Internationalizations Views モジュールには、D7の[〜#〜] dev [〜#〜]バージョンしかありませんが、現在 このバージョンを使用している31K以上のユーザー がいます。そのため、+ 31Kのユーザーが間違っていることはないため、「DEV」はそのバージョンの有効なリリース修飾子ではなくなったと思います。

  2. https://groups.drupal.org/node/47478 などのディスカッションにも示されているように、多言語サイトでビューの結果をフィルタリングするのは難しい場合があります。

4
Pierre.Vriens

Term:nameを追加する代わりに、term:name(ローカライズ済み)をビューに追加します。

4

分類法の各用語に多言語コンテンツを追加する必要があり、Viewsブロック内で「コンテンツ:タグ(field_tag)(翻訳)」という用語を公開フィルターとして使用します。同様に、Node Titleを表示する場合は、「Entity translation:Node Title:translationed」フィールドを使用する必要があります。

2
Kapil Ropalekar

i18n モジュールをインストールし、分類変換を有効にしてから、たとえばi18n_taxonomy_localize_terms()を呼び出すカスタムモジュールによって実装されたブロックでプログラム的に行う必要があります。

1
rémy

Drupal 7とTaxonomy Translationモジュール(i18n_taxonomy、 Internationalization( i18n) ...

私は私のクライアントの1人のために以下を書きました。意図したサイトで機能しますが、Drupal構成はサイトごとに大きく異なる可能性があるため、YMMV :)

  • translation modeLocalizeに設定された語彙で機能します。用語はすべての言語に共通ですが、その名前と説明はローカライズされる場合があります
  • ビューがコンテンツ(base tableisnode)を表示して表示するときに機能しますContentを介した分類用語:すべての分類用語
  • ビューが分類法を表示しているときにも機能します(base tableistaxonomy_term_data) 。

パフォーマンスを向上させるために taxonomy_term_load_multiple を使用していることに注意してください。用語を1つずつ読み込み、それらを1つずつ翻訳する他のソリューションがいくつか提供されています。

/*
 * Implement hook_views_pre_render(&$view)
 * Here we handle translation of taxonomy terms.
 * Note: i18n_taxonomy_views module has its own _views_pre_render hook 
 * but that does not currently (7.x-1.18) do what we need here.
 * This could probably be done using HOOK_views_post_execute instead.
 */
function mymodule_views_pre_render(&$view) {
  // If the i18n_taxonomy module is not installed then we have nothing to do.
  if (!function_exists('i18n_taxonomy_localize_terms')) {
    return;
  }

  // ----- Processing for content-based (nodes) View -----
  if ($view->base_table == 'node') {
    //dpm($view->field['term_node_tid']->items, 'pre render: field[term_node_tid]->items');

    // If there is no term data then exit now. 
    if (empty($view->field['term_node_tid']->items)) {
      return;
    }

    // Array to track tids used and placeholders for term name translations.
    $term_translations = array();
    // Loop through nodes in the result set, track the term ids used and set a reference to the translation...
    foreach ($view->field['term_node_tid']->items as $nid => &$vterms) {
      // Loop through all terms for this node.
      foreach ($vterms as $tid => &$vterm) {
        // Track this term id.
        $term_translations[$tid] = '';
        // Store a *reference* to the translated term name which will be loaded later (below).  
        $vterm['name'] =& $term_translations[$tid];
      }
    }

    // Load the terms that we need.
    $terms = taxonomy_term_load_multiple(array_keys($term_translations));
    // Fetch the translations of the terms.
    $terms= i18n_taxonomy_localize_terms($terms);
    // Update our $term_translations array with the translated term names. 
    foreach ($terms as $tid => $term) {
      $term_translations[$tid] = $term->name;
    }
  }

  // ----- Processing for taxonomy-based View -----
  elseif ($view->base_table == 'taxonomy_term_data') {
    // Reference the terms array from $view->result.
    $vterms =& $view->result;

    // Build an array of tids...
    $tids = array();
    foreach ($vterms as $vterm) {
      $tids[] = $vterm->tid;
    }

    // Load all terms.
    $terms = taxonomy_term_load_multiple($tids);
    // Translate the terms.
    $terms = i18n_taxonomy_localize_terms($terms);

    // Copy translations for term names and descriptions back into the $view->result.
    foreach($vterms as &$vterm) {
      $vterm->taxonomy_term_data_name = $terms[$vterm->tid]->name;
      $vterm->taxonomy_term_data_description = $terms[$vterm->tid]->description;
    }
  }
}
0
netgenius.co.uk