DrupalでView内のタームを多言語化

Views モジュールを使って、当サイトのリンク集を構築している際、グループ化に使用したタクサノミのタームが翻訳されない問題に遭遇した。言語ごとにタームを作るのも大変だし、どうしたものかと悩んでいたのだが、ネットで調べてみたところ、手頃な回避策が見つかったので、ここにまとめておくことにする。

問題が見つかった環境は以下のとおり。

  • Drupal version 6.15
  • Views translation 6.x-1.2
  • Views 6.x-2.8

設定は、ボキャブラリの Multilingual options をインターフェース翻訳にし、Arguments を使用して View を Term ID でグループ化している。

ボキャブラリの方は、「タクサノミー」->「ボキャブラリの編集」から、「Multilingual options」で「Localize terms. Terms are ・・・」を選択肢すれば良い。

ボキャブラリの編集画面

Viewの方は、Arguments に Term ID を追加して、タイトルに%1を設定し、「Action to take if argument is not present」で「Summary, sorted ascending」を選択すれば、グループ化表示が可能となる。

Viewの設定画面

左サイドバーに、サマリー表示のブロックを配置して、Viewを表示すると下図のように結果となる。サマリー表示のタームと、リスト表示のタイトルが翻訳されていないことがわかる。

翻訳失敗の画面

まずは、サマリー表示のタームが翻訳されない問題だが、views-view-summary.tpl ファイルを、以下の手順でオーバーライドすれば解決できる。

  1. Views モジュールの theme ディレクトリ内にある views-view-summary.tpl を、サイトが使用しているテーマのディレクトリの直下にコピーする。
  2. コピーした views-view-summary.tpl の13行目を、次のように書き換える。
    <li><a href="<?php print $row->url; ?>"><?php print tt('taxonomy:term:'.$row->term_node_tid.':name', $row->link); ?></a>

次に、タイトルが翻訳されない問題の方だが、こちらは少し厄介で、Viewsモジュールのいくつかのハンドラクラスをオーバーライドしなければならない。この問題については、Drupal.org のこちらのスレッドでも議論され、最終的には Views translation にパッチを当てることに落ち着いたようだが、当サイトでは、できるだけ正規のモジュールに手を加えたくないという理由から、新しいモジュールを追加する方法を採用した。追加するモジュールは、前述のスレッドで公開されているから、対策自体は簡単だ。コメント#90の i18ntaxonomyviews_for_2_7.zipを、ダウンロードしてインストールするれば、タイトルが翻訳されるようになる。

さて、ふたつの対策を行ったところで、結果を見てみよう。

翻訳成功の画面

サマリー表示のターム、リスト表示のタイトルのタームともに翻訳されるようになり、View内のタームを多言語化することに成功した。

Trackback URL for this post:

http://www.hirojp.net/ja/trackback/69

コメント

I came accross your blog!