More Related Content Similar to Drupal 7 の多言語機能について (20) 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
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
9. 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
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 and time
日付と時間の表記の設定 (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 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
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
18. 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
20. デモ/実習3 (1/2)
▼ Localization update モジュールを有効にして、
localize.drupal.org から日本語翻訳を自動適用してみよう:
1. Localizatin update モジュールをインストール&有効にする
パス: admin/modules
2. Regional and language の言語 (Language) 設定ページで
[翻訳の更新] タブを開いて各設定項目を確認/更新する:
• アップデートのソース
• 更新モード
• 最新版の確認
• 無効なモジュールやテーマのアップデートをチェック
• ダウンロードした翻訳ファイルを取込保存する
2015年3月14日(土)第11回DrupalさっぽろMeetup
21. デモ/実習3 (2/2)
3. Regional and language の Translate interface ページで
[更新] タブをクリックし、未適用の翻訳を確認する。
• ある場合は、モジュールごとに黄色い背景色で示され、
"Uninstalled translation available" というメッセージが表示される。
4. [翻訳を更新] で自動的に取得&適用される。
2015年3月14日(土)第11回DrupalさっぽろMeetup
23. デモ/実習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
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. 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
27. デモ/実習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
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)
▼ 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
34. デモ/実習6 (3/3)
5. 先に作成した Page コンテンツを表示&英語版を作成:
• [翻訳] タブが追加されていることを確認のうえクリック
• [English] 版が未翻訳、[翻訳の追加] で English 版を追加:
• [言語] オプションが "英語" になっていることを確認
• ノード作成フォームで適宜英語の翻訳を作成して保存する。
• ノード表示の右下に翻訳版へのリンクが表示される
6. 地域と言語の [言語] - [判定と選択] の設定を確認:
• [URL] をオンにする
• 表示している言語に対応してパス or ドメインが自動で切替わる設定
7. 再度、先に作成した Page コンテンツを表示してみる:
• パスに言語識別名(ja/en) が追加されていることを確認
• 日本語版を表示すると、パスと UI が日本語になる
• 英語版を表示すると、パスと UI が英語になる
2015年3月14日(土)第11回DrupalさっぽろMeetup
36. デモ/実習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
38. デモ/実習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
39. デモ/実習7 (4/4)
10. Title モジュールを有効にする。
11. Page コンテンツタイプの [フィールドの管理] 設定を表示する。
• Title モジュールを有効にすることで、
タイトルの "操作" 列に [replace] リンクが表示される
• この機能を利用すると、タイトルをフィールドに置換できる
• フィールドにすることで Entity Translation の翻訳対象にすることが可能
• [replace] をクリックして確定する。
• デフォルトで翻訳対象になる
12. 先程作成した Page コンテンツを編集する:
• タイトルが英語と日本語で別個に指定可能になる
• それぞれ翻訳を入力して保存する
• タイトルを含めて、日本語版、英語版を表示できる
2015年3月14日(土)第11回DrupalさっぽろMeetup
43. 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
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. Field Translation モジュールを有効にする
2. Page コンテンツタイプの note フィールドの設定を表示:
• [翻訳] タブが追加されていることを確認&クリック
• 英語と日本語の一覧が表示され別個に設定できる
• Japanese (source) の [編集] をクリック:
• ラベルを "メモ" に変更して、[設定の保存] で保存する。
• 元の一覧に戻って今度は English の [翻訳] をクリック:
• ラベルに "note" を、
• 説明に "Please input your note." を、
• デフォルト値を "(default note)" をそれぞれ入力して [翻訳を保存] する。
3. Page コンテンツの表示、編集の画面を確認
• note フィールドがラべル、ヘルプ、既定値が翻訳されている
2015年3月14日(土)第11回DrupalさっぽろMeetup
48. Translation Management Tool
(TMGMT) モジュール
• https://www.drupal.org/project/tmgmt
• 翻訳ワークフローの管理を支援する
• Entity Translation、Internationalization のように
システムの多言語対応そのものをサポートするものではなく、
その上で行われる翻訳ワークフローを支援するためのツール集
2015年3月14日(土)第11回DrupalさっぽろMeetup