Drupal 7 の
多言語機能について
第11回 Drupal さっぽろ Meetup in Sapporo
白根健司
更新:2015年03月15日(初版:2015年03月14日)
2015年3月14日(土)第11回DrupalさっぽろMeetup
参考資料
• Multilingual Guide
https://www.drupal.org/documentation/multilingual
• Drupal 7's new multilingual systems compilation
http://hojtsy.hu/multilingual-drupal7
• Translating site interfaces
https://www.drupal.org/documentation/modules/locale
• Resource Guide: Configuring a Multilingual Site
https://www.drupal.org/resource-guides/configuring-multilingual-site
• gettext(wikipedia)
http://ja.wikipedia.org/wiki/Gettext
2015年3月14日(土)第11回DrupalさっぽろMeetup
内容
1. 全体概要と前提知識
2. UI (ユーザー インターフェイス) のローカライズ
3. コンテンツの多言語対応
4. 多言語化機能の拡張
• internationalization (i18n) モジュール
5. コンテンツ翻訳の管理/支援ツール
• Translation Managment Tools
2015年3月14日(土)第11回DrupalさっぽろMeetup
全体概要と前提知識
2015年3月14日(土)第11回DrupalさっぽろMeetup
多言語化に必要なもの
1. UI(ユーザーインターフェイス)の多言語対応
• システムが出力する固定文字列を異なる言語ごとに管理する仕組み
• 固定文字列の例: メニュー、メッセージ、管理画面のUI など
2. コンテンツの多言語対応
• 言語ごとに作成したコンテンツを統合的に管理する仕組み
• 同じ内容の異なる言語版を関連付けて統合的に管理する
3. 表示言語の検出と判定
• どんな条件でどの言語表示にするのかを指定できる仕組み
• UI の表示言語
• コンテンツの表示言語
2015年3月14日(土)第11回DrupalさっぽろMeetup
Drupal ではどうなってるの?
1. UI(ユーザーインターフェイス)の多言語対応には?
 英語の UI 文字列と対応する各言語の翻訳をデータベース管理
• API 関数の t() を呼び出すことで翻訳対象 UI 文字列を登録できる
2. コンテンツの多言語対応
 ノードに言語属性を持たせる (Locale コアモジュール)
 原語版と翻訳版のコンテンツを関連付け&管理する拡張モジュール
• Content Translation、Entity Translation、Internationalization (i18n)
3. 表示言語の検出と判定
 UI 表示言語の判定メカニズム: Locale コアモジュール
 コンテンツ言語の判定メカニズム: i18n モジュール
2015年3月14日(土)第11回DrupalさっぽろMeetup
UI の翻訳と入手先
• Drupal の UI 翻訳はどのようにして行うのか?
1. Drupal の翻訳用ユーザーインタフェイスを使う方法
• データベース管理している翻訳エントリを管理 UI から参照/編集する
2. 原語と対訳の文字列を列挙した翻訳ファイルを作成する方法
• 作成した翻訳ファイル(Gettext の .po 形式)をサイトにインポートする
• 翻訳ファイルの作成/配布は誰がどのようにして行うのか?
• 各国コミュニティの翻訳チームが行う
• 活動と成果は drupal.org の翻訳サーバーで公開されている
• https://localize.drupal.org/
• https://localize.drupal.org/translate/languages/ja (日本)
• メンバー連絡用の掲示板、翻訳提案の送信、レビュー&承認(管理者)・・・など
• 日本語版の .po ファイルをダウンロードできる
2015年3月14日(土)第11回DrupalさっぽろMeetup
https://localize.drupal.org/
2015年3月14日(土)第11回DrupalさっぽろMeetup
Drupal コアの多言語機能
Regional and language settings = 地域と言語の設定(コア)
提供機能と設定ページのパス:
• system コアモジュール
• (1) Regional settings (地域の設定)
• admin/config/regional
• (2) Date and time (日付と時刻)
• admin/config/regional/date-time
• Locale コアモジュール
• (3) Languages (言語)
• admin/config/regional/language
• (4) Translate interface (UI の翻訳)
• admin/config/regional/translate
2015年3月14日(土)第11回DrupalさっぽろMeetup
コア:(1) Regional settings
地域の設定 (system モジュール)
• Locale
• Default country
• First day of week
• Time zones
• Default time zones
• Time zone for new users
2015年3月14日(土)第11回DrupalさっぽろMeetup
コア:(2) Date and time
日付と時間の表記の設定 (system モジュール)
• Types タブ
• 日時の表記スタイルに名前を付けて定義できる
• Formats タブ
• カスタム定義の日時表記を定義できる
• PHP の date 関数と同等のフォーマット文字列を使用
• Localize タブ
• 言語ごとの Types 設定
(編集と初期化)
2015年3月14日(土)第11回DrupalさっぽろMeetup
コア:(3) Language
サイトで使用する言語を設定する(Localeモジュール)
• List タブ
• サイトでサポートする言語の追加/削除と優先順位/既定の指定
• Detection and selection タブ
• ページ要素(フィールドのラベルやヘルプ等)を表示するときに
適用する言語の判定ルールと優先順位を指定する:
• URL
• パス
• Session
• クエリパラメータ
• User
• ログインユーザの設定
• Browser
• ブラウザの言語設定
• Default
• デフォルト言語
List
Detection and selection
2015年3月14日(土)第11回DrupalさっぽろMeetup
コア:(4) Translate interface
• UI 文字列の翻訳の検索や登録をする(Localeモジュール)
• Overview
• 利用可能な言語の一覧
• Translate
• UI 翻訳の検索と追加/編集機能
• Import
• 翻訳ファイルのインポート機能
• Export
• 翻訳ファイルのエクスポート機能
(参考)翻訳ファイルの種類
 .pot ファイル(Gettext Portable Object Template)
原語のテキストと翻訳の両方を含む形式
 .po ファイル(Gettext Portable Object)
翻訳のみを含む形式
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習1
▼コアの言語設定で日本語を追加してデフォルト言語にしてみよう
1. Regional and language settings の Language 設定ページに
移動。
• パス: admin/config/regional/language
2. [Add language] をクリックして言語に日本語を追加:
• Language name で Japanese を選択して [Add language] をクリック
• 一覧に Japanese のエントリが追加される
3. "Default" 列で Japanese のチェックをオンにする。
4. [Save configurationn] をクリックして保存する。
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習2 (1/2)
▼ t() API 関数を呼び出して翻訳対象文字列を登録してみよう:
1. Devel モジュールを有効にする。
• パス: admin/modules
2. Execute PHP ブロックを "コンテンツ" リージョンに設定する
• パス: admin/structure/block
3. 表示される [Execute PHP Code] を展開し、
次のコードを入力&実行する。
echo t('hogege');
hogege と表示されることを確認する。
• これで翻訳対象UIとして登録される
• 翻訳はまだないので原語ママ表示
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習2 (2/2)
4. インターフェースの翻訳 UI に移動し、hogege を検索する。
• admin/config/regional/translate/translate
• オリジナル(原語)が hogege のエントリが見つかる。
5. [編集] をクリックし、
日本語に "ほげげ" と入力して
[翻訳文字列の保存] をクリック。
• これで、UI 文字列 "hogege" の日本語対訳が "ほげげ" になった。
6. 再度 [Execute PHP Code] を展開し、
先と同じコードを入力して実行する。
echo t('hogege');
今度は "ほげげ" と表示される。
• t() 関数で引数の翻訳結果を取得できる。
2015年3月14日(土)第11回DrupalさっぽろMeetup
2. UI のローカライズ
2015年3月14日(土)第11回DrupalさっぽろMeetup
UI 翻訳の関連モジュールなど
• Localization update モジュール
• https://www.drupal.org/project/l10n_update
• localize.drupal.org の更新をチェックしてサイトの DB に適用する
• Localization client モジュール
• https://www.drupal.org/project/l10n_client
• サイトの UI 翻訳を行うとともに localize.drupal.org に翻訳を送信できる
• Translation template extractor
• https://www.drupal.org/project/potx
• サイト内の UI 翻訳を翻訳ファイルにエクスポートする
• (参考) Localized Drupal Distribution
• https://www.drupal.org/project/l10n_install
• localize.drupal.org から取得した翻訳を自動適用してローカライズ済みのサイ
トをインストールする Distribution (配布インストールパッケージ)
2015年3月14日(土)第11回DrupalさっぽろMeetup
Localization update モジュール
https://www.drupal.org/project/l10n_update
翻訳サーバーから自動的に翻訳の更新を取得して適用する。
• 翻訳サーバ=次のいずれか:
• https://localize.drupal.org/
• Localization server モジュールを使って立てた独自の翻訳サーバ
• https://www.drupal.org/project/l10n_server
• 翻訳データベースと翻訳コラボレーション用のツールが利用できる
• 翻訳の更新を自動化できる
• モジュールやテーマのインストール時
• CRON による更新の定期チェック
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習3 (1/2)
▼ Localization update モジュールを有効にして、
localize.drupal.org から日本語翻訳を自動適用してみよう:
1. Localizatin update モジュールをインストール&有効にする
パス: admin/modules
2. Regional and language の言語 (Language) 設定ページで
[翻訳の更新] タブを開いて各設定項目を確認/更新する:
• アップデートのソース
• 更新モード
• 最新版の確認
• 無効なモジュールやテーマのアップデートをチェック
• ダウンロードした翻訳ファイルを取込保存する
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習3 (2/2)
3. Regional and language の Translate interface ページで
[更新] タブをクリックし、未適用の翻訳を確認する。
• ある場合は、モジュールごとに黄色い背景色で示され、
"Uninstalled translation available" というメッセージが表示される。
4. [翻訳を更新] で自動的に取得&適用される。
2015年3月14日(土)第11回DrupalさっぽろMeetup
Localization client モジュール
https://www.drupal.org/project/l10n_client
• サイト上で使用されている翻訳対象文字列をその場で編集するイ
ンターフェイスを提供する。変更内容を翻訳サーバーに修正提案と
して送信する翻訳者向けの機能もある。
• そのための権限と API key の設定が必要
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習4 (1/3)
▼ Localization client モジュールを有効にして、
サイト上のページから直接 UI 文字列の翻訳を編集してみよう:
1. Localizatin client モジュールをインストール&有効にする
パス: admin/modules
2. Regional and language の Translate interface ページで
[client] タブをクリックし、設定を確認する:
• Disable on-page translation on the following system paths
• [TRANSLATE TEXT] ボタンの表示を抑制するページのパスを指定する
• サーバで翻訳の共有を有効にする
• ローカルの翻訳を翻訳サーバーに送信するかどうかを指定する
• Address of localization server to use
• 使用する翻訳サーバーのURL を指定する
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習4 (2/3)
3. 任意のページを表示して、右下に [TRANSLATE TEXT] リンク
が表示されることを確認する。
4. [TRANSLATE TEXT] をクリックすると、表示中のページの翻訳
対象文字列と対訳の一覧を表示し、確認&編集する:
• 翻訳済みの UI は緑色、未翻訳の UI は白の背景にそれぞれ表示される
• 左下の入力ボックスで UI を絞り込むことができる
• [日本語への翻訳] の列に表示される対訳を編集して保存できる
• パス locale のページに移動すれば一覧の UI 文字列を翻訳できる
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習4 (3/3)
5. Regional and language の Translate interface ページで
[client] タブをクリックし、[サーバで翻訳の共有を有効にする]
チェックボックスをオンにする。
6. ユーザアカウントのページに移動し、[編集] タブを表示する
• [ローカライズ クライアント] の設定を確認:
• [Your API key for http://localize.drupal.org]
• 翻訳文字列をリモートサーバに送信するための API キーを指定する
• 取得先の URL が直下のヘルプテキストに表示される
• [Hide on-page translation from you]
• このチェックボックスをオンにしておくと、このユーザーについては
[TRANSLATE TEXT] リンクの表示を抑制できる
2015年3月14日(土)第11回DrupalさっぽろMeetup
Translation template extractor
モジュール
https://www.drupal.org/project/potx
特定のモジュールやテーマを指定して翻訳ファイルを抽出する機能
• 抽出対象を指定する Web UI:
• モジュールを有効にした後、言語設定のページから
対象となるモジュールやテーマを指定してファイルを抽出する。
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習5
▼ Translation template extractor モジュールを有効にして、
翻訳テンプレートファイルを抽出する例:
1. Localizatin template extractor モジュールをインストールする
パス: admin/modules
2. Regional and language の Translate interface ページで
[抽出] タブをクリックし、設定を確認する:
• ディレクトリの一覧
• 翻訳テンプレートを抽出する対象モジュール/テーマのディレクトリを指定
• テンプレートの言語
• テンプレートの言語を指定する
• 翻訳を含める
• 翻訳が含まれないファイル(.pot)か含まれるファイル(.po)かを指定する
3. [抽出] ボタンで抽出を実行する
2015年3月14日(土)第11回DrupalさっぽろMeetup
Localized Drupal Distribution
(参考) インストール時に特定言語を指定して、
翻訳済みの環境を構築できる配布インストールパッケージ:
• https://www.drupal.org/project/l10n_install
2015年3月14日(土)第11回DrupalさっぽろMeetup
3. コンテンツの多言語対応
2015年3月14日(土)第11回DrupalさっぽろMeetup
コアのコンテンツ翻訳サポート
• Locale コアモジュールの多言語コンテンツサポート:
• コンテンツの言語をノードの属性として指定できる
• コンテンツタイプの「掲載オプション」に多言語サポートの設定がある
2015年3月14日(土)第11回DrupalさっぽろMeetup
コンテンツ翻訳のモジュール
• Content Translation モジュール(コア)
• 古い方法
• Drupal 7 のコアに含まれる
• Drupal 6 と Drupal 7 で利用できる
• 言語ごとに別個のノードが作られる
• コンテンツタイプ単位で翻訳をサポートするかどうかを定義する
• Entity Translation モジュール
• 新しい方法
• Drupal 8 のコアに含まれる
• Drupal 7 と 8 で利用でき、アップグレードパスも用意されている
• 各言語のコンテンツを単一のノードとして保存する
• フィールドごとに翻訳をサポートするかどうかを定義する
• フィールドではないタイトルの翻訳には Title モジュールが必要
• https://www.drupal.org/project/title
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習6 (1/3)
▼ Content Translation モジュールによるコンテンツ翻訳の例
1. コンテンツタイプ Page を作成する:
• パス: admin/structure/types/add
• [掲載オプション] で多言語サポートを [有効] に設定する
• この設定を有効にすることでノードに言語属性を指定できるようになる
2. Page コンテンツを作成する:
• パス: node/add/page
• [言語] オプションが利用できることを確認、日本語を指定して保存。
3. Content Translation モジュールを有効にする
• パス: admin/modules
4. Page コンテンツタイプの [掲載オプション] 設定を変更:
• [有効 (翻訳対応)] が追加されていることを確認、有効にする。
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習6 (2/3)
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習6 (3/3)
5. 先に作成した Page コンテンツを表示&英語版を作成:
• [翻訳] タブが追加されていることを確認のうえクリック
• [English] 版が未翻訳、[翻訳の追加] で English 版を追加:
• [言語] オプションが "英語" になっていることを確認
• ノード作成フォームで適宜英語の翻訳を作成して保存する。
• ノード表示の右下に翻訳版へのリンクが表示される
6. 地域と言語の [言語] - [判定と選択] の設定を確認:
• [URL] をオンにする
• 表示している言語に対応してパス or ドメインが自動で切替わる設定
7. 再度、先に作成した Page コンテンツを表示してみる:
• パスに言語識別名(ja/en) が追加されていることを確認
• 日本語版を表示すると、パスと UI が日本語になる
• 英語版を表示すると、パスと UI が英語になる
2015年3月14日(土)第11回DrupalさっぽろMeetup
UI 表示言語の判定規則
• admin/config/regional/language/configure
• 表示言語を判定するルールが5種類用意されている
• 有効/無効の設定
• 複数有効にした場合の優先順位の指定
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習7 (1/4)
▼ Entity Translation モジュールによるコンテンツ翻訳の例
1. 作成済みの Page コンテンツを(日本語/英語)削除する
2. Content Translation モジュールを無効にする
3. Entity Translation モジュールを有効にする
4. Page コンテンツタイプの [掲載オプション] 設定を確認:
• [Enabled, with field translation] をオンにして保存する。
5. 先程と同様に Page コンテンツを追加する:
• 保存すると [翻訳] タブが表示されていることを確認&クリック
• "操作" 列に "No translatable fields" と表示される
• そのままの状態では翻訳を追加することができない
• Entity Translation ではフィールドごとに翻訳対象かどうかを指定する
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習7 (2/4)
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習7 (3/4)
6. Field UI モジュールを有効にする
7. Page コンテンツタイプの [掲載オプション] 設定を確認:
• パス: ja/admin/structure/types/manage/page
• [フィールドの管理] タブでBody の設定を編集
• 設定ページの一番下部にある [Enable translation] リンクをクリック
• 確認ページで [確認] をクリックして確定する。
8. 再度、先程作成した Page コンテンツの [翻訳] タブを確認:
• 今度は English 版の "操作" 列に "add" と表示される
• Body フィールドが翻訳対象にしたので翻訳を追加できるようになった。
• "add" をクリックして適宜翻訳を入力、[Save] をクリックして保存する。
9. 作成されたノードを確認する:
• パス: ja/admin/content
• Content Translation とは異なり、単一ノードで日本語/英語を作成している
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習7 (4/4)
10. Title モジュールを有効にする。
11. Page コンテンツタイプの [フィールドの管理] 設定を表示する。
• Title モジュールを有効にすることで、
タイトルの "操作" 列に [replace] リンクが表示される
• この機能を利用すると、タイトルをフィールドに置換できる
• フィールドにすることで Entity Translation の翻訳対象にすることが可能
• [replace] をクリックして確定する。
• デフォルトで翻訳対象になる
12. 先程作成した Page コンテンツを編集する:
• タイトルが英語と日本語で別個に指定可能になる
• それぞれ翻訳を入力して保存する
• タイトルを含めて、日本語版、英語版を表示できる
2015年3月14日(土)第11回DrupalさっぽろMeetup
コンテンツ表示言語の判定規則
• Entity Translation モジュールでは、
UI とは別にコンテンツ表示言語の判定も指定できる。
2015年3月14日(土)第11回DrupalさっぽろMeetup
4. 多言語機能の拡張
2015年3月14日(土)第11回DrupalさっぽろMeetup
Internationalization (i18n)
モジュール
• https://www.drupal.org/project/i18n
• コアの機能では翻訳対象にならない部分についても
翻訳を可能にすることを目的に開発された拡張モジュール
• Entity Translation とは別の、より高機能な多言語拡張
• 主な提供機能:
• 多言語対応のメニューシステム
• 多言語対応のブロック
• 多言語対応のタクソノミー
• 複数のサブモジュールによって各機能が提供される
• https://www.drupal.org/node/1279136
2015年3月14日(土)第11回DrupalさっぽろMeetup
i18n のサブモジュール
• Block languages
• Contact translation
• Field translation
• Menu translation
• Multilingual content
• Multilingual forum
• Multilingual select
• Path translation
• String translation
• Synchronize translations
• Taxonomy translation
• Translation redirect
• Variable translation
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習8
▼翻訳対象フィールドを追加する例:
1. Page コンテンツタイプに note フィールドを追加する:
• ラベル: note
• フィールドタイプ: テキスト
• ウィジェット: テキストフィールド
• ヘルプテキスト: "メモを入力してください。"
• デフォルト値: "(メモの既定値)"
• フィールドを翻訳対象に設定
• [Users may translate all occurrences of this field] をオンにする
2. Page コンテンツを作成する
3. note フィールドを確認:
• ポイント: ラベル、ヘルプ、既定値は翻訳対象になっていないこと
2015年3月14日(土)第11回DrupalさっぽろMeetup
Field Translation モジュール
• Internationalization (i18n) のサブモジュールのひとつ
• https://www.drupal.org/node/1279346
• フィールドの設定に関する文字列を翻訳可能にする
• フィールドのラベル
• ヘルプテキスト
• 既定値
• リストの選択肢
• 注)
フィールドの値そのものを個別に翻訳対象にする機能ではない
• この機能は Entity Translation モジュールによって提供される
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ/実習9
▼note フィールドのラベル、ヘルプ、既定値を翻訳する例:
1. Field Translation モジュールを有効にする
2. Page コンテンツタイプの note フィールドの設定を表示:
• [翻訳] タブが追加されていることを確認&クリック
• 英語と日本語の一覧が表示され別個に設定できる
• Japanese (source) の [編集] をクリック:
• ラベルを "メモ" に変更して、[設定の保存] で保存する。
• 元の一覧に戻って今度は English の [翻訳] をクリック:
• ラベルに "note" を、
• 説明に "Please input your note." を、
• デフォルト値を "(default note)" をそれぞれ入力して [翻訳を保存] する。
3. Page コンテンツの表示、編集の画面を確認
• note フィールドがラべル、ヘルプ、既定値が翻訳されている
2015年3月14日(土)第11回DrupalさっぽろMeetup
5. 翻訳プロジェクトの管理/支援
2015年3月14日(土)第11回DrupalさっぽろMeetup
Translation Management Tool
(TMGMT) モジュール
• https://www.drupal.org/project/tmgmt
• 翻訳ワークフローの管理を支援する
• Entity Translation、Internationalization のように
システムの多言語対応そのものをサポートするものではなく、
その上で行われる翻訳ワークフローを支援するためのツール集
2015年3月14日(土)第11回DrupalさっぽろMeetup
デモ
• 翻訳ジョブの作成
• ローカル翻訳者による翻訳&レビュー
• Microsoft Translator サービスによるノードの自動翻訳
• https://www.drupal.org/project/tmgmt_microsoft
2015年3月14日(土)第11回DrupalさっぽろMeetup

Drupal 7 の多言語機能について

  • 1.
    Drupal 7 の 多言語機能について 第11回Drupal さっぽろ Meetup in Sapporo 白根健司 更新:2015年03月15日(初版:2015年03月14日) 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 2.
    参考資料 • Multilingual Guide https://www.drupal.org/documentation/multilingual •Drupal 7's new multilingual systems compilation http://hojtsy.hu/multilingual-drupal7 • Translating site interfaces https://www.drupal.org/documentation/modules/locale • Resource Guide: Configuring a Multilingual Site https://www.drupal.org/resource-guides/configuring-multilingual-site • gettext(wikipedia) http://ja.wikipedia.org/wiki/Gettext 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 3.
    内容 1. 全体概要と前提知識 2. UI(ユーザー インターフェイス) のローカライズ 3. コンテンツの多言語対応 4. 多言語化機能の拡張 • internationalization (i18n) モジュール 5. コンテンツ翻訳の管理/支援ツール • Translation Managment Tools 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 4.
  • 5.
    多言語化に必要なもの 1. UI(ユーザーインターフェイス)の多言語対応 • システムが出力する固定文字列を異なる言語ごとに管理する仕組み •固定文字列の例: メニュー、メッセージ、管理画面のUI など 2. コンテンツの多言語対応 • 言語ごとに作成したコンテンツを統合的に管理する仕組み • 同じ内容の異なる言語版を関連付けて統合的に管理する 3. 表示言語の検出と判定 • どんな条件でどの言語表示にするのかを指定できる仕組み • UI の表示言語 • コンテンツの表示言語 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 6.
    Drupal ではどうなってるの? 1. UI(ユーザーインターフェイス)の多言語対応には? 英語の UI 文字列と対応する各言語の翻訳をデータベース管理 • API 関数の t() を呼び出すことで翻訳対象 UI 文字列を登録できる 2. コンテンツの多言語対応  ノードに言語属性を持たせる (Locale コアモジュール)  原語版と翻訳版のコンテンツを関連付け&管理する拡張モジュール • Content Translation、Entity Translation、Internationalization (i18n) 3. 表示言語の検出と判定  UI 表示言語の判定メカニズム: Locale コアモジュール  コンテンツ言語の判定メカニズム: i18n モジュール 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 7.
    UI の翻訳と入手先 • Drupalの UI 翻訳はどのようにして行うのか? 1. Drupal の翻訳用ユーザーインタフェイスを使う方法 • データベース管理している翻訳エントリを管理 UI から参照/編集する 2. 原語と対訳の文字列を列挙した翻訳ファイルを作成する方法 • 作成した翻訳ファイル(Gettext の .po 形式)をサイトにインポートする • 翻訳ファイルの作成/配布は誰がどのようにして行うのか? • 各国コミュニティの翻訳チームが行う • 活動と成果は drupal.org の翻訳サーバーで公開されている • https://localize.drupal.org/ • https://localize.drupal.org/translate/languages/ja (日本) • メンバー連絡用の掲示板、翻訳提案の送信、レビュー&承認(管理者)・・・など • 日本語版の .po ファイルをダウンロードできる 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 8.
  • 9.
    Drupal コアの多言語機能 Regional andlanguage settings = 地域と言語の設定(コア) 提供機能と設定ページのパス: • system コアモジュール • (1) Regional settings (地域の設定) • admin/config/regional • (2) Date and time (日付と時刻) • admin/config/regional/date-time • Locale コアモジュール • (3) Languages (言語) • admin/config/regional/language • (4) Translate interface (UI の翻訳) • admin/config/regional/translate 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 10.
    コア:(1) Regional settings 地域の設定(system モジュール) • Locale • Default country • First day of week • Time zones • Default time zones • Time zone for new users 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 11.
    コア:(2) Date andtime 日付と時間の表記の設定 (system モジュール) • Types タブ • 日時の表記スタイルに名前を付けて定義できる • Formats タブ • カスタム定義の日時表記を定義できる • PHP の date 関数と同等のフォーマット文字列を使用 • Localize タブ • 言語ごとの Types 設定 (編集と初期化) 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 12.
    コア:(3) Language サイトで使用する言語を設定する(Localeモジュール) • Listタブ • サイトでサポートする言語の追加/削除と優先順位/既定の指定 • Detection and selection タブ • ページ要素(フィールドのラベルやヘルプ等)を表示するときに 適用する言語の判定ルールと優先順位を指定する: • URL • パス • Session • クエリパラメータ • User • ログインユーザの設定 • Browser • ブラウザの言語設定 • Default • デフォルト言語 List Detection and selection 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 13.
    コア:(4) Translate interface •UI 文字列の翻訳の検索や登録をする(Localeモジュール) • Overview • 利用可能な言語の一覧 • Translate • UI 翻訳の検索と追加/編集機能 • Import • 翻訳ファイルのインポート機能 • Export • 翻訳ファイルのエクスポート機能 (参考)翻訳ファイルの種類  .pot ファイル(Gettext Portable Object Template) 原語のテキストと翻訳の両方を含む形式  .po ファイル(Gettext Portable Object) 翻訳のみを含む形式 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 14.
    デモ/実習1 ▼コアの言語設定で日本語を追加してデフォルト言語にしてみよう 1. Regional andlanguage settings の Language 設定ページに 移動。 • パス: admin/config/regional/language 2. [Add language] をクリックして言語に日本語を追加: • Language name で Japanese を選択して [Add language] をクリック • 一覧に Japanese のエントリが追加される 3. "Default" 列で Japanese のチェックをオンにする。 4. [Save configurationn] をクリックして保存する。 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 15.
    デモ/実習2 (1/2) ▼ t()API 関数を呼び出して翻訳対象文字列を登録してみよう: 1. Devel モジュールを有効にする。 • パス: admin/modules 2. Execute PHP ブロックを "コンテンツ" リージョンに設定する • パス: admin/structure/block 3. 表示される [Execute PHP Code] を展開し、 次のコードを入力&実行する。 echo t('hogege'); hogege と表示されることを確認する。 • これで翻訳対象UIとして登録される • 翻訳はまだないので原語ママ表示 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 16.
    デモ/実習2 (2/2) 4. インターフェースの翻訳UI に移動し、hogege を検索する。 • admin/config/regional/translate/translate • オリジナル(原語)が hogege のエントリが見つかる。 5. [編集] をクリックし、 日本語に "ほげげ" と入力して [翻訳文字列の保存] をクリック。 • これで、UI 文字列 "hogege" の日本語対訳が "ほげげ" になった。 6. 再度 [Execute PHP Code] を展開し、 先と同じコードを入力して実行する。 echo t('hogege'); 今度は "ほげげ" と表示される。 • t() 関数で引数の翻訳結果を取得できる。 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 17.
  • 18.
    UI 翻訳の関連モジュールなど • Localizationupdate モジュール • https://www.drupal.org/project/l10n_update • localize.drupal.org の更新をチェックしてサイトの DB に適用する • Localization client モジュール • https://www.drupal.org/project/l10n_client • サイトの UI 翻訳を行うとともに localize.drupal.org に翻訳を送信できる • Translation template extractor • https://www.drupal.org/project/potx • サイト内の UI 翻訳を翻訳ファイルにエクスポートする • (参考) Localized Drupal Distribution • https://www.drupal.org/project/l10n_install • localize.drupal.org から取得した翻訳を自動適用してローカライズ済みのサイ トをインストールする Distribution (配布インストールパッケージ) 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 19.
    Localization update モジュール https://www.drupal.org/project/l10n_update 翻訳サーバーから自動的に翻訳の更新を取得して適用する。 •翻訳サーバ=次のいずれか: • https://localize.drupal.org/ • Localization server モジュールを使って立てた独自の翻訳サーバ • https://www.drupal.org/project/l10n_server • 翻訳データベースと翻訳コラボレーション用のツールが利用できる • 翻訳の更新を自動化できる • モジュールやテーマのインストール時 • CRON による更新の定期チェック 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 20.
    デモ/実習3 (1/2) ▼ Localizationupdate モジュールを有効にして、 localize.drupal.org から日本語翻訳を自動適用してみよう: 1. Localizatin update モジュールをインストール&有効にする パス: admin/modules 2. Regional and language の言語 (Language) 設定ページで [翻訳の更新] タブを開いて各設定項目を確認/更新する: • アップデートのソース • 更新モード • 最新版の確認 • 無効なモジュールやテーマのアップデートをチェック • ダウンロードした翻訳ファイルを取込保存する 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 21.
    デモ/実習3 (2/2) 3. Regionaland language の Translate interface ページで [更新] タブをクリックし、未適用の翻訳を確認する。 • ある場合は、モジュールごとに黄色い背景色で示され、 "Uninstalled translation available" というメッセージが表示される。 4. [翻訳を更新] で自動的に取得&適用される。 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 22.
    Localization client モジュール https://www.drupal.org/project/l10n_client •サイト上で使用されている翻訳対象文字列をその場で編集するイ ンターフェイスを提供する。変更内容を翻訳サーバーに修正提案と して送信する翻訳者向けの機能もある。 • そのための権限と API key の設定が必要 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 23.
    デモ/実習4 (1/3) ▼ Localizationclient モジュールを有効にして、 サイト上のページから直接 UI 文字列の翻訳を編集してみよう: 1. Localizatin client モジュールをインストール&有効にする パス: admin/modules 2. Regional and language の Translate interface ページで [client] タブをクリックし、設定を確認する: • Disable on-page translation on the following system paths • [TRANSLATE TEXT] ボタンの表示を抑制するページのパスを指定する • サーバで翻訳の共有を有効にする • ローカルの翻訳を翻訳サーバーに送信するかどうかを指定する • Address of localization server to use • 使用する翻訳サーバーのURL を指定する 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 24.
    デモ/実習4 (2/3) 3. 任意のページを表示して、右下に[TRANSLATE TEXT] リンク が表示されることを確認する。 4. [TRANSLATE TEXT] をクリックすると、表示中のページの翻訳 対象文字列と対訳の一覧を表示し、確認&編集する: • 翻訳済みの UI は緑色、未翻訳の UI は白の背景にそれぞれ表示される • 左下の入力ボックスで UI を絞り込むことができる • [日本語への翻訳] の列に表示される対訳を編集して保存できる • パス locale のページに移動すれば一覧の UI 文字列を翻訳できる 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 25.
    デモ/実習4 (3/3) 5. Regionaland language の Translate interface ページで [client] タブをクリックし、[サーバで翻訳の共有を有効にする] チェックボックスをオンにする。 6. ユーザアカウントのページに移動し、[編集] タブを表示する • [ローカライズ クライアント] の設定を確認: • [Your API key for http://localize.drupal.org] • 翻訳文字列をリモートサーバに送信するための API キーを指定する • 取得先の URL が直下のヘルプテキストに表示される • [Hide on-page translation from you] • このチェックボックスをオンにしておくと、このユーザーについては [TRANSLATE TEXT] リンクの表示を抑制できる 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 26.
    Translation template extractor モジュール https://www.drupal.org/project/potx 特定のモジュールやテーマを指定して翻訳ファイルを抽出する機能 •抽出対象を指定する Web UI: • モジュールを有効にした後、言語設定のページから 対象となるモジュールやテーマを指定してファイルを抽出する。 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 27.
    デモ/実習5 ▼ Translation templateextractor モジュールを有効にして、 翻訳テンプレートファイルを抽出する例: 1. Localizatin template extractor モジュールをインストールする パス: admin/modules 2. Regional and language の Translate interface ページで [抽出] タブをクリックし、設定を確認する: • ディレクトリの一覧 • 翻訳テンプレートを抽出する対象モジュール/テーマのディレクトリを指定 • テンプレートの言語 • テンプレートの言語を指定する • 翻訳を含める • 翻訳が含まれないファイル(.pot)か含まれるファイル(.po)かを指定する 3. [抽出] ボタンで抽出を実行する 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 28.
    Localized Drupal Distribution (参考)インストール時に特定言語を指定して、 翻訳済みの環境を構築できる配布インストールパッケージ: • https://www.drupal.org/project/l10n_install 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 29.
  • 30.
    コアのコンテンツ翻訳サポート • Locale コアモジュールの多言語コンテンツサポート: •コンテンツの言語をノードの属性として指定できる • コンテンツタイプの「掲載オプション」に多言語サポートの設定がある 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 31.
    コンテンツ翻訳のモジュール • Content Translationモジュール(コア) • 古い方法 • Drupal 7 のコアに含まれる • Drupal 6 と Drupal 7 で利用できる • 言語ごとに別個のノードが作られる • コンテンツタイプ単位で翻訳をサポートするかどうかを定義する • Entity Translation モジュール • 新しい方法 • Drupal 8 のコアに含まれる • Drupal 7 と 8 で利用でき、アップグレードパスも用意されている • 各言語のコンテンツを単一のノードとして保存する • フィールドごとに翻訳をサポートするかどうかを定義する • フィールドではないタイトルの翻訳には Title モジュールが必要 • https://www.drupal.org/project/title 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 32.
    デモ/実習6 (1/3) ▼ ContentTranslation モジュールによるコンテンツ翻訳の例 1. コンテンツタイプ Page を作成する: • パス: admin/structure/types/add • [掲載オプション] で多言語サポートを [有効] に設定する • この設定を有効にすることでノードに言語属性を指定できるようになる 2. Page コンテンツを作成する: • パス: node/add/page • [言語] オプションが利用できることを確認、日本語を指定して保存。 3. Content Translation モジュールを有効にする • パス: admin/modules 4. Page コンテンツタイプの [掲載オプション] 設定を変更: • [有効 (翻訳対応)] が追加されていることを確認、有効にする。 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 33.
  • 34.
    デモ/実習6 (3/3) 5. 先に作成したPage コンテンツを表示&英語版を作成: • [翻訳] タブが追加されていることを確認のうえクリック • [English] 版が未翻訳、[翻訳の追加] で English 版を追加: • [言語] オプションが "英語" になっていることを確認 • ノード作成フォームで適宜英語の翻訳を作成して保存する。 • ノード表示の右下に翻訳版へのリンクが表示される 6. 地域と言語の [言語] - [判定と選択] の設定を確認: • [URL] をオンにする • 表示している言語に対応してパス or ドメインが自動で切替わる設定 7. 再度、先に作成した Page コンテンツを表示してみる: • パスに言語識別名(ja/en) が追加されていることを確認 • 日本語版を表示すると、パスと UI が日本語になる • 英語版を表示すると、パスと UI が英語になる 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 35.
    UI 表示言語の判定規則 • admin/config/regional/language/configure •表示言語を判定するルールが5種類用意されている • 有効/無効の設定 • 複数有効にした場合の優先順位の指定 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 36.
    デモ/実習7 (1/4) ▼ EntityTranslation モジュールによるコンテンツ翻訳の例 1. 作成済みの Page コンテンツを(日本語/英語)削除する 2. Content Translation モジュールを無効にする 3. Entity Translation モジュールを有効にする 4. Page コンテンツタイプの [掲載オプション] 設定を確認: • [Enabled, with field translation] をオンにして保存する。 5. 先程と同様に Page コンテンツを追加する: • 保存すると [翻訳] タブが表示されていることを確認&クリック • "操作" 列に "No translatable fields" と表示される • そのままの状態では翻訳を追加することができない • Entity Translation ではフィールドごとに翻訳対象かどうかを指定する 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 37.
  • 38.
    デモ/実習7 (3/4) 6. FieldUI モジュールを有効にする 7. Page コンテンツタイプの [掲載オプション] 設定を確認: • パス: ja/admin/structure/types/manage/page • [フィールドの管理] タブでBody の設定を編集 • 設定ページの一番下部にある [Enable translation] リンクをクリック • 確認ページで [確認] をクリックして確定する。 8. 再度、先程作成した Page コンテンツの [翻訳] タブを確認: • 今度は English 版の "操作" 列に "add" と表示される • Body フィールドが翻訳対象にしたので翻訳を追加できるようになった。 • "add" をクリックして適宜翻訳を入力、[Save] をクリックして保存する。 9. 作成されたノードを確認する: • パス: ja/admin/content • Content Translation とは異なり、単一ノードで日本語/英語を作成している 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 39.
    デモ/実習7 (4/4) 10. Titleモジュールを有効にする。 11. Page コンテンツタイプの [フィールドの管理] 設定を表示する。 • Title モジュールを有効にすることで、 タイトルの "操作" 列に [replace] リンクが表示される • この機能を利用すると、タイトルをフィールドに置換できる • フィールドにすることで Entity Translation の翻訳対象にすることが可能 • [replace] をクリックして確定する。 • デフォルトで翻訳対象になる 12. 先程作成した Page コンテンツを編集する: • タイトルが英語と日本語で別個に指定可能になる • それぞれ翻訳を入力して保存する • タイトルを含めて、日本語版、英語版を表示できる 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 40.
    コンテンツ表示言語の判定規則 • Entity Translationモジュールでは、 UI とは別にコンテンツ表示言語の判定も指定できる。 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 41.
  • 42.
    Internationalization (i18n) モジュール • https://www.drupal.org/project/i18n •コアの機能では翻訳対象にならない部分についても 翻訳を可能にすることを目的に開発された拡張モジュール • Entity Translation とは別の、より高機能な多言語拡張 • 主な提供機能: • 多言語対応のメニューシステム • 多言語対応のブロック • 多言語対応のタクソノミー • 複数のサブモジュールによって各機能が提供される • https://www.drupal.org/node/1279136 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 43.
    i18n のサブモジュール • Blocklanguages • Contact translation • Field translation • Menu translation • Multilingual content • Multilingual forum • Multilingual select • Path translation • String translation • Synchronize translations • Taxonomy translation • Translation redirect • Variable translation 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 44.
    デモ/実習8 ▼翻訳対象フィールドを追加する例: 1. Page コンテンツタイプにnote フィールドを追加する: • ラベル: note • フィールドタイプ: テキスト • ウィジェット: テキストフィールド • ヘルプテキスト: "メモを入力してください。" • デフォルト値: "(メモの既定値)" • フィールドを翻訳対象に設定 • [Users may translate all occurrences of this field] をオンにする 2. Page コンテンツを作成する 3. note フィールドを確認: • ポイント: ラベル、ヘルプ、既定値は翻訳対象になっていないこと 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 45.
    Field Translation モジュール •Internationalization (i18n) のサブモジュールのひとつ • https://www.drupal.org/node/1279346 • フィールドの設定に関する文字列を翻訳可能にする • フィールドのラベル • ヘルプテキスト • 既定値 • リストの選択肢 • 注) フィールドの値そのものを個別に翻訳対象にする機能ではない • この機能は Entity Translation モジュールによって提供される 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 46.
    デモ/実習9 ▼note フィールドのラベル、ヘルプ、既定値を翻訳する例: 1. FieldTranslation モジュールを有効にする 2. Page コンテンツタイプの note フィールドの設定を表示: • [翻訳] タブが追加されていることを確認&クリック • 英語と日本語の一覧が表示され別個に設定できる • Japanese (source) の [編集] をクリック: • ラベルを "メモ" に変更して、[設定の保存] で保存する。 • 元の一覧に戻って今度は English の [翻訳] をクリック: • ラベルに "note" を、 • 説明に "Please input your note." を、 • デフォルト値を "(default note)" をそれぞれ入力して [翻訳を保存] する。 3. Page コンテンツの表示、編集の画面を確認 • note フィールドがラべル、ヘルプ、既定値が翻訳されている 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 47.
  • 48.
    Translation Management Tool (TMGMT)モジュール • https://www.drupal.org/project/tmgmt • 翻訳ワークフローの管理を支援する • Entity Translation、Internationalization のように システムの多言語対応そのものをサポートするものではなく、 その上で行われる翻訳ワークフローを支援するためのツール集 2015年3月14日(土)第11回DrupalさっぽろMeetup
  • 49.
    デモ • 翻訳ジョブの作成 • ローカル翻訳者による翻訳&レビュー •Microsoft Translator サービスによるノードの自動翻訳 • https://www.drupal.org/project/tmgmt_microsoft 2015年3月14日(土)第11回DrupalさっぽろMeetup