...

Moodle/Maharaで 貫した 語を 使 する翻訳 法

by user

on
Category: Documents
28

views

Report

Comments

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 の助成を受けたものです.
Fly UP