Drupal 8初心者講座

第12回 Drupal 8の多言語機能と他のCMSやサービスとの比較
この記事の目次

多言語化サイトに必要な機能

Web サイト上には、さまざまな文字列が表示されます。多言語対応のサイトを作るには、サポートする言語ごとに、この表示文字列の対訳を用意しておき、適切なタイミングで表示に反映させる必要があります。一般に、次のような機能が必要になります。

使用言語を識別する機能

サイトを多言語化するには、まず使用する言語をシステムが識別できるようにする必要があります。具体的には、サイトで使用する言語を登録する機能と、特定のタイミングでサイトをどの登録言語で表示するのかを判定する機能です。

システムの出力文字列の翻訳を登録管理する機能

次に、メッセージや表示要素のラベルなど、システムから出力される文字列を多言語化する必要があります。これらは大きく(1)ソースファイル中に保存されている静的な文字列(メッセージや UI 文字列など)と、(2) 構成情報の一部として保存される文字列(サイト名、スローガン、各ブロックのタイトル、フィールドのラベルなど)に分けて考えることができ、それぞれに対応した翻訳の仕組みを提供する必要があります。

コンテンツの翻訳を登録管理する機能

サイトに蓄積されるコンテンツの多言語化です。Drupal であれば、記事や基本ページといったノードのほか、ブロックとして保存したマークアップや、タクソノミーのタームといったものが挙げられます。これらを使用言語ごとに登録・管理するための仕組みが必要です。

上記の各機能をサポートするため、Drupal のコアシステムには次の4つのモジュールが用意されています。

モジュール名 機能
(1) Language 使用言語を識別する
(2) Interface Translation システムの出力文字列の登録管理(ファイル等に静的に保存された文字列)
(3) Configuration Translation システムの出力文字列の登録管理(構成情報の一部として設定される文字列)
(4) Content Translation コンテンツの翻訳を管理する

Language は、上の使用言語を識別する機能を提供するモジュールです。Interface Translation モジュールは、ソースファイル中に保存される静的な文字列の翻訳を受け持ちます。他方、構成情報として設定される文字列の翻訳を受け持つのが Configuration Translation モジュールです。このモジュールを有効にすると、Drupal の構成情報に含まれる文字列の翻訳を登録管理する UI が使用できるようになります。コンテンツの翻訳は、Content Translation モジュールが受け持ちます。 一般に、英語以外の言語で Drupal を使用するには (1) と (2) が必須で、メニューその他の表示 UI を多言語化するには (3)、コンテンツも含めて多言語化するには (4) も有効にします。

使用例

前回も使用した自動車コンテンツを日本語と英語に対応させる例を見てみましょう。

静的文字列の多言語化

日本語を使用している場合は、Language と Interface Translation の各モジュールが有効で、UI(インターフェース)の日本語文字列が登録されているはずです。これが上で示した静的文字列の翻訳機能にあたります。

Interface Translation モジュールの UI 文字列翻訳の管理画面

日・英の2か国語でサイトを表示できるようにするには、言語設定に英語を追加します。

[環境設定] の [地域と言語] にある [言語] 設定に英語を追加

これが使用言語の登録機能です。言語にはデフォルト設定があり、特に指定がない場合(後述)デフォルト言語でサイトが表示されます。試しにデフォルト設定を英語にすると、管理画面が英語で表示されるのがわかります。

[言語] のデフォルトを切り替えると英語表示に

なお、UI(インターフェース)文字列は通常、英語がソース(翻訳元)言語なので、英語にはインターフェースの翻訳は必要ありません。

表示言語を判定する機能

特定のタイミングにおけるサイトの表示言語は [判定と選択] という設定に基づいて判定されます。これが使用言語の判定機能です。Drupal 8 では判定基準として6つの選択肢が用意されており、使用する基準と優先順位を指定することができます。サイトの表示が行われるたびに、優先順位の順に基準がチェックされ、最初に該当した条件に基づいて表示言語が判定されます。いずれの条件にも該当しない場合はデフォルト言語が使用されます。

言語の [判定と選択] の設定

サイト構成に含まれる文字列の多言語化

次に、構成情報として設定する文字列の翻訳機能を見てみましょう。例として、自動車コンテンツタイプとそのフィールドの設定を取り上げます。

Configuration Translation モジュールを有効にすると、フィールド管理の画面に [コンテンツタイプを翻訳] というタブが追加され、ここからコンテンツタイプの構成の翻訳を登録できるようになります。画面は「自動車」コンテンツタイプに翻訳を追加する UI です。

「自動車」コンテンツタイプ(の構成情報)の英語訳を追加する

English の追加ボタンで、コンテンツタイプの構成情報に含まれる文字列(コンテンツタイプの表示名、説明、説明や投稿のガイドライン、ラベル、ヘルプテキストなど)の英語訳を登録できるようになります。 フィールドについても同様です。たとえば、自動車の「定員」フィールドの設定画面を見ると、[コンテンツフィールドを翻訳]というタブがあります。

コンテンツ フィールドを翻訳

 

ここから、この「定員」フィールド固有の設定文字列の翻訳設定を使用言語ごとに追加できます。追加すると、次のような画面からフィールドの構成情報として設定する文字列の対訳を登録できます。

定員フィールドの構成情報を英訳する

この例では、ラベル「定員」の英訳として "Capacity”、単位を表示するための接尾文字「人」の英訳として "seat(s)" をそれぞれ指定しています。英語表示に切り替わると、ここで設定した訳が該当する表示要素に反映されます。 ここでは、コンテンツタイプとフィールドの例を示しましたが、他のすべての構成設定について同様に翻訳を設定できます。

コンテンツの多言語化

残るはコンテンツの多言語化です。Content Translation モジュールを有効にすると、ノード、ユーザー定義のブロック、タクソノミーのタームなど、コンテンツとして保存される情報の翻訳を登録できるようになります。なお、翻訳対象にするコンテンツの種類は事前に設定しておくことができます。

翻訳対象となるコンテンツの種類を指定する

画面は、コンテンツタイプ「自動車」のプロパティや属性を翻訳対象にした設定例です。翻訳対象に指定したコンテンツは、構成設定と同様に、サイトの使用言語ごとに翻訳を追加する UI が用意され、ここから、コンテンツの翻訳を登録できるようになります。

英語のコンテンツ登録画面

より具体的な多言語設定の例については、ThinkIT の連載記事で詳しく紹介しています。ぜひ実際に手を動かして、Drupal の多言語機能の完成度の高さを体験してみてください。

翻訳作業の管理

多言語対応のサイトの構築・運営では、多言語コンテンツの管理もさることながら、翻訳作業そのものも大きな課題です。中でも、追加更新が継続的に行われるコンテンツは、その翻訳作業をサポートする機能も重要な要素です。Drupal では、この部分をサポートする機能として、Translation Management Tool(以下、TMGMT)というモジュールがあります。これは Drupal のコアに含まれるものではありませんが、Drupal の構成設定やコンテンツの翻訳タスクをジョブとして作成し、実行することができます。以下、使用例を簡単に紹介します。

翻訳ジョブの作成

TMGMT で翻訳を行うには、まず、サイト上の種々の翻訳対象要素をソースに指定した翻訳ジョブを作成します。ソースには、コンテンツだけでなく、サイトの構成情報(Config Entity)も指定することができます。ジョブを作成する画面では、次のような一覧からソース分類を指定し、特定のソースを選択します。

翻訳ソースとして自動車ノードを1つ選択

翻訳ソースの分類の選択肢

Content Entity の下の「コンテンツ」を選ぶと、ノードの一覧が表示されます。この中から自動車コンテンツを1つ選択して翻訳ジョブを作成してみます。チェックをオンにして [Request translation] をクリックすると、翻訳ジョブが作成されます。

翻訳ソースとして自動車ノードを1つ選択

作成したジョブの編集画面では、識別用のラベルのほか、翻訳対象となる項目(JOB ITEMS)や翻訳作業を依頼するサービスプロバイダを設定することができます。ノードにタクソノミーのターム参照が含まれている場合、そのタームを翻訳作業の項目に含めることもできます。

翻訳のサービスプロバイダの選択肢は、TMGMT 本体とは別に追加インストールするプラグインモジュールによって提供されます。さまざまなサービスに対応したプラグインが存在し、コストや品質に応じて適切なサービスを選択することができます。サイト上のログインユーザーに翻訳を依頼するプラグインもあります。

  • Microsoft Translator (機械翻訳)
  • Google Translate (機械翻訳)
  • Nativy(人間による翻訳)
  • Gengo (人間による翻訳、機械翻訳)
  • Supertext (人間による翻訳)
  • One Hour Translation (人間による翻訳)
  • Translations.com GlobalLink Connect (人間による翻訳、機械翻訳)
  • SDL BeGlobal (人間による翻訳)
  • GlobalSight (人間による翻訳)
  • REST Translator (人間による翻訳)
  • Euroscript Global Content Management X-Connect (人間による翻訳)
  • Smartling Global Fluency (人間による翻訳、機械翻訳)
  • LiveWords (人間による翻訳、機械翻訳)
  • thebigword (人間による翻訳、機械翻訳)
  • Acclaro (人間による翻訳)
  • Memsource (人間による翻訳、機械翻訳)

外部翻訳サービスとの連携(Gengo)

ここでは、クラウドソーシングの翻訳サービスとして有名な Gengo のプラグイン TMGMT Translator Gengo を使用してみます。

まず、Gengo でアカウントを取得し、サービス API を呼び出すために必要な Public key と Private key を Gengo サイト上で取得しておきます。TMGMT Translation Gengo モジュールをインストールし、取得したキーをプロバイダの設定画面に登録しておきます。これで、翻訳ジョブのプロバイダとして "Gengo translator" が選べるようになります。

Gengo translator: Qualityの選択

Gengo translator の場合、料金に応じた品質(Quality)を選択できます。ここでは無料で利用できる機械翻訳の "Machine" を指定することにします。これで準備ができたので、最後に [Submit to provider] をクリックして依頼を実行します。送信したジョブは管理用の一覧に追加され、作業状況を監視・管理することができます。

Submit to provider

 

このサンプルの構成では、ジョブ管理画面で明示的に [Pull translation] ボタンをクリックすることで機械翻訳の API を呼び出すことで翻訳処理を実行できます。

Pull translation

翻訳を実行すると、レビュー待ち状態となります。確認画面で翻訳をチェックし、承認することでジョブを完了します。

翻訳を終えたジョブをレビューする

 

ジョブが完了すると、元のノードの翻訳バージョンとして英語版のノードが保存されます。

翻訳が完了すると英語版のノードが保存される

このように、TMGMT を使用することでサイト自体を翻訳ジョブ管理システムとして、構成情報からコンテンツまで、翻訳作業を運用することが可能です。

Drupal コアの完成度の高い多言語対応機能と連携し、極めて強力な多言語サイト構築ソリューションを提供することができるでしょう。

Drupal以外の他の CMS やソリューション

他の CMS の多言語化対応はどうなっているのでしょう。ここでは、Wordpress、MT、および Web サイト多言語化サービスの wovn.io を取り上げ、これまで見てきた多言語化の機能がどのような形でサポートされているのかを調べてみましょう。

WordPress

Wordpress にはサイトで使用する言語の設定があります。英語以外の言語を指定すると対応する翻訳が適用され、管理画面がその言語で表示されるようになります。ただし、Drupal のサンプルで見てきたような、コンテンツや構成情報の文字列の翻訳を登録・管理する機能は、標準では用意されていません。多言語化に必要な機能は、コミュニティによって開発されたプラグインに依存する形になります。WordPress の主要な多言語化プラグインを示します。

プラグイン名 多言語対応の手法
Bogo 1投稿1言語。追加テーブルがないので、他のプラグインと競合しない。
Polylang 1投稿1言語。カスタム分類で投稿を紐づける。追加テーブルなし。
WPML(有料) 1投稿1言語。高機能。追加テーブルに多言語関連のデータを格納する。
qTranslate X 1投稿複数言語。特殊なコメントとして各言語の翻訳を保持する。
Multilingual Press マルチサイト間で投稿を紐づけする。
Multi Language Switcher マルチサイト間で投稿を紐づけする。

多言語プラグラインの中核となる機能は、1つのコンテンツを複数言語で作成し、それらを相互に関連付けて、表示言語の切り替えで相互に行き来できるようにすることで、いくつかの手法があります。「1投稿1言語」は、言語ごとに別の投稿を作成して関連づける方法、「1投稿複数言語」は、1つの投稿に各言語の翻訳を持たせる方法です。また、WordPress のマルチサイト機能を利用して各言語の専用サイトを作り、各サイト上の対応する投稿を関連づける方法もあります。 例として、Polylang を導入してサンプルの「自動車」コンテンツを日英2か国語に対応させてみます。このプラグインを導入して有効化すると「言語」という管理画面のグループが追加され、Drupal のように複数の使用言語を設定して、言語ごとのコンテンツを作成できるようになります。

Polylang: 言語一覧

投稿の編集画面には「言語」ウィジェットが表示され、現在編集中の投稿の言語と、紐づけされる別言語の投稿を設定/追加できるようになります。

Polylang: 日本語版の投稿の編集Polylang: 英語版の投稿の編集

また、このプラグインには言語スイッチャーというウィジェットが含まれており、表示中の投稿の言語を切り替える(別言語の投稿に移動する)ことができます。

Polylang: 日本語版の投稿を表示

 

Polylang: 英語版の投稿を表示

Drupal と似た形でコンテンツの翻訳機能が利用できることがわかります。また、Drupal の TMGMT のような翻訳タスクのサポート機能もあり、サイトの自動翻訳、翻訳管理システム、外部への翻訳依頼などができるようです。(実際に試したわけではないので画面からの情報のみ)

Polylang: 翻訳管理

優れたプラグインですが、表示言語の判定機能や構成情報の翻訳機能はありません。たとえば、言語スイッチャーのウィジェットは任意のタイトルを設定できますが、言語別の翻訳を登録する手段が見当たりません。

Polylang:「言語スイッチャー」ウィジェットの設定

多言語プラグインの中には、カスタム投稿タイプやカスタムフィールドでは正常に機能しないものもあるようです。このように、プラグインは数多くありますが、特定のプラグインが実際にどこまで使えるのかは、試してみないとわからないというのが現実でしょう。

また、多言語対応に必要な種々のデータをどこに保存するかという問題もあります。qTranslate X のように独自テーブルを追加するタイプのプラグインでサイトを構築した場合、コンテンツデータがこのプラグインに依存することになります。もしプラグインのサポートが終了した場合、他のプラグインに乗り換えるのは容易ではありません。

コミュニティでの議論と努力を重ねて改善してきた Drupal コア標準の多言語機能との違いは、こういうところにも現れているように思います。

Movable Type(MT)

MT では、ウェブサイトやブログの設定としてタイムゾーンと使用言語を指定できます。言語は、日本語、英語、スペイン語、オランダ語、フランス語、ドイツ語の中から選択できます。

Movable Type: 使用言語の選択

再構築の際にこの設定が参照され、テーマのテンプレートに埋め込まれたローカライズ用のタグにより、使用言語に対応したファイルが生成されます。Drupal のような管理画面上で翻訳を管理する仕組みはなく、Perl モジュールや YAML ファイルとして作成した辞書に基づいてローカライズが行われます。

また、管理画面の UI も6か国語に対応しています。こちらはログインユーザーのプロパティとして指定できます。たとえば、英語を設定すると管理画面の UI が英語になります。

Movable Type: 管理画面の使用言語を英語を選択した場合の管理UI

 

MT で多言語サイトを構築するには、こうしたローカライズの仕組みを利用してテーマやプラグインで対象言語に対応していく形になると思われます。言語別にウェブサイトを作り、言語別のページや記事を紐づけしたり、外部サービスを利用してコンテンツやテンプレートの翻訳を自動化する、サードパーティのソリューションも存在するようです。

wovn.io

CMS 側でソースを翻訳するのではなく、ページの内容を外部サービスで翻訳してユーザーに提供するソリューションもあります。たとえば、wovn.io のサービスを利用すると、表示前のコンテンツを wovn.io のサービスでインターセプトして翻訳した結果を表示することができます。クライアント側で行うスクリプト方式と、サーバー側で行うライブラリ方式の2通りの利用方法があります。

方式 説明 長所 短所
スクリプト方式 JavaScriptのコードスニペットを head タグの中に埋め込むことで、ブラウザ側で表示前のコンテンツをインターセプトして wovn.io のサービスに送信し、翻訳結果を表示する。 導入が簡単 訳文や翻訳言語でのSEOが困難
ライブラリ方式 wovn.io が提供する PHP や Ruby のライブラリをサーバー上に導入し、サーバー側で応答前の出力をインターセプトして wovn.io のサービスに送信し、翻訳した結果を返す。 海外SEO対応 導入の手間 PHPかRuby前提

スクリプト方式には、翻訳後の URL や lang 属性や meta タグ等の制御ができず、訳文や翻訳言語に基づいて検索エンジンにインデックスさせることが難しいという欠点がありましたが、その後ライブラリ方式が追加され、現在では海外 SEO の対策も可能になっています。また、この機能を WordPress から利用するためのプラグインも提供されています。

環境がセットアップできれば、あとは各ページを自動的に取り込んで翻訳させることができます。翻訳対象ページの選択や、原文と訳文の対応確認、レビュー、修正など、翻訳タスクの管理は wovn.io のサイト上で行うことができます。こうした翻訳プラットフォームとしての機能は、先に紹介した Gengo のサービスと似ています。

wovn.io

機械翻訳は月間の上限数量に達するまで無償で利用でき、より上位の有償プランも用意されています。Drupal のような多言語化の仕組みがない環境では有力な選択肢になると思われます。

以上、WordPress、MT、wovn.io による多言語対応を紹介しました。Drupal がコア標準の機能として提供する多言語サポートは、これらいずれにも劣ることのない強力なソリューションであることが改めてわかると思います。

まとめ

今回は、Drupal 8 の多言語機能を紹介しました。実際に操作してみるとわかりますが、構成情報の表示文字列も含めて完全にサイトを多言語化するには、ち密で膨大なシステム側の対応が必要です。Drupal は長い時間をかけて改善を重ね、Drupal 8 で完成形に至りました。Drupal 8 を使用すれば、トリッキーなテクニックを使用することなく、サイトに表示される文字列をすべて多言語化できます。多言語対応が重要要件のプロジェクトにおいて、Drupal は非常に魅力的な候補となるはずです。 次回は、Drupal の権限設定について見ていきたいと思います。

この記事を書いた人 : ANNAI株式会社

ANNAIは、2009年からDrupal専門のWebシステム開発会社として、世界規模で展開するグローバル企業や大学・自治体を中心に数多くのWebソリューションを提供。
CoreやModuleのコントリビューターなど、Drupalエキスパートが多数在籍。国内ユーザーコミュニティへも積極的にコミットし、定期的なセミナーの等の開催を通じて、オープンソース技術の普及や海外コミュニティとの緊密な連携を図っている。
Webシステムの企画・開発〜デザイン、クラウド運用までをワンストップで提供する他、Drupalのコーディングを評価する"Audit業務"や最適なモジュールの調査・選定等、幅広いコンサルティングを行っている。Drupalアソシエーション公式パートナー。

関連コンテンツ