Comments
Description
Transcript
Moodle/Maharaで 貫した 語を 使 する翻訳 法
⼤学ICT推進協議会2015@名古屋 2015年12⽉2⽇(⽔) Moodle/Maharaで⼀貫した⽤語を 使⽤する翻訳⼿法 - Mahara, Moodle, Sakai CLE による共通翻訳メモリ- 畿央⼤学 教育学習基盤センター 熊本⼤学 宮崎 誠 喜多敏博 あらまし Moodle と Mahara は、開発コミュニティは違っているもの の MVC アーキテクチャが似通っており、⽇本語化の仕組み についてもほとんど同じ⽅法がとられています。両者の開発 ⾔語である PHP では、 多⾔語対応の仕組みとして標準拡張 モジュールである Gettext が利⽤可能ですが、Moodle と Mahara では、⽂字列型変数の連想配列に直接翻訳⽂字列を 記述する独⾃の翻訳⼿法により、多⾔語対応を実現 していま す。しかし、このような独⾃の翻訳⼿法を開発コミュニティ でサホートし、メンテナンスする には、Moodle や Mahara に特化した独⾃の翻訳ツールや仕組みが必要となってしまい ます。そこで、 ここでは Moodle と Mahara での翻訳作業 にPHPの標準国際化ライブラリの Gettext を利⽤可能にする ⼿法を解説し、Web ベース の翻訳⽀援ツールである Transifex を例に、Gettext を使った効率的な翻訳⼿法につい て紹介します。 はじめに • システムを開発する会社や OSS コミュニティにてそれぞ れ固有の国際化(以下,i18n)および⽇本語への翻訳を含む 地域化(l10n)が⾏われている • 使われている訳語の⽤語や表現については,⼀貫性が保証 されていない → 複数のシステムが共存し,ユーザがシステム間を⾏き来 して利⽤するような場合には,ユーザが⽤語や表現に違和感 を覚えることが懸念される これらの訳語による⽤語や表現の違いによってユーザが 感 じる違和感の解消を⽬指し,複数システムで⼀貫した⽤語を 使⽤する⼿法 共通翻訳メモリの開発 Moodle/Maharaの多⾔語対応 • Moodle/Maharaは翻訳したメッセージを表 ⽰するのにget_string関数を利⽤ • get_string関数は,⾔語ファイルもしくはカ スタム⾔語ファイルがインストールされてい れば,デフォルトの⾔語を置き換えて表⽰ • 英単語の単数形,複数形の表⽰の切替にも対 応 get_string と⾔語ファイルの例 get_string() ⾔語ファイル Moodleにおける国際化 AMOS: Automated Manipulation Of Strings https://docs.moodle.org/dev/AMOS_manual?redirect=no AMOS Translator tool https://docs.moodle.org/dev/AMOS_manual?redirect=no AMOS AMOS AMOSにインポートするファイル(⾔語 パックの翻訳ファイル)の例 String連想配列形式 <?php $string[ʻhelloworldʼ] = ʻこんにちは世界'; $string[ʻhogeʼ] = ʻほげほげ'; $string[ʻcourseʼ] = ʻコース'; $string[ʻsubmitʼ] = ʻ提出'; ?> Maharaにおける国際化 Wiki: Developer Area コアチーム • Contributors • Debian/Ubuntu Packaging • Release Managers and Maintainers • Reviewers • Security • Translation i18n, l10n launchpad i18n/l10n Aaron Wells ⽒の解説が詳しい. User:Aaronw/Language strings https://wiki.mahara.org/index.php/User:Aaronw/Language_strings ⾔語ファイル保存ディレクトリ • コア⾔語ファイル: $cfg->dirroot/lang/en.utf8/{section}.php • プラグイン⾔語ファイル: $cfg>dirroot/{plugintype}/{pluginname}/lang/en.utf8/{plugintype}.{p luginname}.php • プラグインでは,getstring の"section"は "{plugintype}.{pluginname}" と書く. 例: "artefact.blog", "import.leap2a", "blocktype.contactinfo” • サブプラグインでは,{$cfg>dirroot}/artefact/{pluginname}/blocktype/{blockname}/lang/e n.utf8/blocktype.{blockname}.php, セクションとして “blocktype.{blockname}” を記述. • 外国語⾔語ファイル: dataroot ディレクトリ: $cfg>dataroot/langpacks/{langcode} langcode の例: ja.utf8, es.utf8, en_US.utf8 等 • ローカル⾔語ファイル: $cfg>dirroot/local/lang/{langcode}/{section}.php その他 • langconfig.php 年⽉⽇や⽇付,時刻等の表⽰フォーマットは,⾔語 ファイルのlangconfig.phpで定義されている.⾔ 語ファイルのトップディレクトリに配置. • カスタム⾔語 翻訳ファイルの中で変更したい単語やメッセージは, ローカル⾔語ファイルを作成することで,カスタム ⾔語ファイルとしてオーバーライドできる. • 翻訳ルール ⾔語ファイル中の翻訳単語(メッセージ)を記述す る順番は,翻訳には関係ないが,可読性を確保する ためにアルファベット順に並べること. ヘルプファイル Maharaのヘルプは,HTMLで記述されておりポップアップ表⽰される. フォームのアイテム毎に作成される Pieforms ヘルプ,ページとそのセ クション毎に作成されるヘルプは,全てHTMLファイルであり,これらも 翻訳の対象となる. カスタムヘルプ • ⾔語ファイルと同様,local ディレクトリ以下にファイ ルを置くことで,個別にオーバーライドできる. • コアヘルプファイル: local/lang/en.utf8/help/{forms|pages|sections}/{file name}.html • 例: local/lang/en.utf8/help/forms/adduser.friendscontro l.html • プラグインヘルプファイル: /local/lang/en.utf8/help/{forms|pages|sections}/{pl ugintype}.{pluginname}.{filename}.html • 例: local/lang/en.utf8/help/forms/artefact.blog.addentr y.draft.html 翻訳箇所の確認⽅法 1. LanguagePackの翻訳ファイルを対象翻訳 ⽂字列で検索 2. 配置ディレクトリを確認 3. $MAHARA_HOMEディレクトリ以下で翻訳した キー⽂字列で検索 4. 4. VIEWとしてHTMLを⽣成している*.tplファ イルを確認 2の配置ディレクトリで⼤体どのプラグインや機能かは想像がつく 4で実際の表⽰画⾯の元ファイルが判明 ※ただし,該当ページをブラウザで実際に表⽰するには⾃分で操作して 探し出す必要あり 共通翻訳メモリを⽤いた翻訳⼿法 共通翻訳メモリを⽤いた翻訳概要 開発範囲 前版 PO 翻訳前 ソース ① 翻訳後 ソース ⑧ .pro p. ② .po .ph p src2po .po .ph p .pro p. .ph p .ph p 成果物 29 translator 前版 PO ③ po update r 前版 PO ④ Transife x Client (put) .po ⑦ .po po2src .po translator .po 前版 TMX ⑤ 翻訳 ⑥ Transife x Client (get) 共通 TMX 成 果 物 ⾔語パックとGetText形式の⽐較 String連想配列形式(Moodle/Mahara⾔語パック) <?php $string[ʻhelloworldʼ] = ʻこんにちは世界'; $string[ʻhogeʼ] = ʻほげほげ'; ?> POファイル(GetText形式) msgid "Hello World!" msgstr "こんにちは世界” msgid ”hogehoge" msgstr “ほげほげ” Transifex 翻訳済⽇本語 ソース出現場所 翻訳メモリにある 翻訳候補と適合率 英語ソース 31 共通翻訳メモリを⽤いた翻訳概要 ①POファイルを⽣成する.(既翻訳が ある場合は⽇本語も含める.) Original Source 共通 Gloss TMX③ ary ④ .pro p. ① .po ② .ph p src2po .po po updat er translator .ph p Translated Source 前版 PO .po .pro p. ⑧ .ph p po2src .ph p translator .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 32 ⑥ To Be Developed in 2014 Moodleにおける機能別POファイル⽣成 (翻訳ワークフロー①) ※Maharaについても同様 DP「教育⽤オープンソースのローカライゼーションと共通翻訳メモリの開発」より 共通翻訳メモリを⽤いた翻訳概要 ② 共通化済POファイルおよび共通翻 訳メモリーによりPOファイルの翻 訳単位を修正する. Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src translator 共通 Gloss TMX③ ary ④ .po ② .po po updat er .po .pro p. .ph p 前版 PO .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 34 ⑥ To Be Developed in 2014 共通翻訳メモリを⽤いた翻訳概要 ③ 共通翻訳メモリーを翻訳⽀援システ ム(Transifex)にUploadする. Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src translator 共通 TMX .po ② .po po updat er .po .pro p. .ph p 前版 PO .po .po .po ④ ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) ⑥ Translators Developed in 2013 35 ③ Gloss ary To Be Developed in 2014 共通翻訳メモリを⽤いた翻訳概要 ④ ⽤語集(glossary)を翻訳⽀援システ ムにUploadする. Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src translator 共通 Gloss TMX③ ary ④ .po ② .po po updat er .po .pro p. .ph p 前版 PO .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 36 ⑥ To Be Developed in 2014 共通翻訳メモリを⽤いた翻訳概要 ⑤ POファイル(英語+②でマッチした ⽇本語)をUploadする. Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src translator 共通 Gloss TMX③ ary ④ .po ② .po po updat er .po .pro p. .ph p 前版 PO .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 37 ⑥ To Be Developed in 2014 共通翻訳メモリを⽤いた翻訳概要 ⑥ 未翻訳の翻訳単位を翻訳する. 前版 PO Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src .ph p .po ② .po po updat er .po .pro p. translator 共通 Gloss TMX③ ary ④ .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 38 ⑥ To Be Developed in 2014 共通翻訳メモリを⽤いた翻訳概要 ⑦ POファイルをダウンロードする. 前版 PO Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src .ph p .po ② .po po updat er .po .pro p. translator 共通 Gloss TMX③ ary ④ .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 39 ⑥ To Be Developed in 2014 Moodle/Maharaのi18n (翻訳ワークフロー⑦) ¤ どちらもPHPで実装されたソフトウェア ¤ i18n対応としてgettext関数を利⽤可能 ¤ Moodle/Maharaでは⽂字列型変数の連想配列による⽅法 →Transifexで翻訳するにはPOファイルに変換する必 要あり ¤ 翻訳後,POファイルを連想配列に書き戻す際には, ⾔語パックの展開ディレクトを直接上書きせずに ローカルの翻訳として展開する⽅がよい ¤ ローカル⾔語の翻訳は,⾔語パックより優先して 採⽤される ¤ Moodle: [データディレクトリ]/lang/ja_local/ ¤ Mahara: [ホームディレクトリ]/local/lang/ja.utf8/ 共通翻訳メモリを⽤いた翻訳概要 ⑧ ソース形式に変換し,Originalの ソースを翻訳後のソースと⼊れ替え 前版 る. PO Original Source .pro p. ① .ph p src2po translator .ph p Translated Source ⑧ .ph p po2src .ph p .po ② .po po updat er .po .pro p. translator 共通 Gloss TMX③ ary ④ .po .po .po ⑤ Transif ex Client (put) ⑦ Transif ex Client (get) Translators Developed in 2013 41 ⑥ To Be Developed in 2014 Moodle/Maharaの翻訳ワークフロー 1. Maharaのlanguagepackをダウンロード 2. 各モジュールのlangディレクトリ以下の ⾔語ファイル(*.php)を抽出 3. ⾔語ファイル(*.php)を集約し て.po(gettext形式)に変換 4. Transifexへアップロード/翻訳/ ダウンロード 5. ⾔語ファイル(*.php)へ反映 設定⽅法(tmx.py) # Transifex project name project_name = ‘mahara-181’ # Mahara source or languagepack en path srcroot = '../langpacks/mahara/htdocs' langroot_en = None ignorefile = None # Mahara languagepack <Lang> path langroot = '../langpacks/mahara/ja.utf8' 設定⽅法(l10n.py) # Mahara source or languagepack en path srcroot = '../langpacks/mahara/htdocs' langroot_en = None ignorefile = None # Mahara languagepack <Lang> path langroot = '../langpacks/mahara/ja.utf8' まとめ 教育で活⽤される OSS である Moodle, Mahara, Sakai のそれ ぞれの翻訳メモリを結合することで教育の⽂脈に特化した共通翻 訳メモリを作成 共通翻訳メモリを使って翻訳する翻訳プラットフォームとして Transifex を利⽤ Moodle, Mahara, Sakaiのそれぞれの翻訳ファイルとの橋渡し をするプログラム src2po translator と po2src translator を開発 Moodle, Mahara, Sakai以外の教育を⽀援するシステムでも共 通翻訳メモリを⽤いることで⼀貫した翻訳が可能 未翻訳のシステムや独⾃プラグイン等を国際化する際には,翻訳 メモリを使うことで⽤語や表現 を保ったままで翻訳が省⼒化で きることが期待できる 本研究は JSPS 科研費 25280127 の助成を受けたものです.