お恥ずかしい話ですが,Moodle2.0とそれ以前とでは言語パックが異なることを知りました…
手動インストールするためにダウンロードするアドレスも,Moodle1.xはこちらで,Moodle2.0用はこちらです(さすが! 日本語言語パックの翻訳は100%完了していますね > 吉田さん).
具体的に言語パックの仕組みがどのような理由(メリット)からどのように変わったのか,については,きっと詳しい方が報告して頂けるでしょう.いえ,それでは無責任ですので少しだけ調べました.間違っている箇所や足りない情報を補って下さい.まず,フォルダ名が変わりましたね.以前はUTF-8版とそれ以外を区別するために,moodledata/lang/ja_utf8のようなフォルダ名だったのがシンプルに,moodledata/lang/jaに変わりました.中身は…形式は変わっていないですね.あとはMoodle2.0とそれ以前とでは見出し語が大きく変わったので整理した,ということでしょうか?
それはさておき,Moodle1.9からMoodle2.0へのサイトのアップグレードを成功させた方々に伺いたいことがあります.
アップグレードが終わった際に,Moodle1.9で導入していた言語パックは moodledata/lang から moodledata/oldlangフォルダにリネームされます.そして新しい言語パックは(以前と同じ名前の)moodledata/langフォルダに保存されるようです.私の環境ですと,アップグレード完了直後はこのmoodledata/langフォルダが存在しません.当初はネットワークの設定のせいでダウンロードが自動的に行われなかったのかと思っていました.いまアップグレード完了後にサイト管理ブロックの言語パックで”日本語”を選択してインストールを実行したら,きちんとmoodledata/lang/jaというフォルダが作成され,画面上の文字が全て日本語に正常に変わりました.
つまり疑問は,Moodle1.9当時にインストールされていた言語パックのMoodle2.0版を自動的にインストールする機能は無いのか?ということです.デフォルトの英語+日本語くらいならば良いのですが,他にもいくつもの言語をインストールしていたサイトですと,事前に自分のサイトにインストールされていた言語パックの種類をメモしておいて,アップグレード完了後に改めて同じ言語パックをインストールし直す必要があるのか,です.
ちなみに,Moodle1.9当時の言語パックのコピーを作成する(単にフォルダ名をリネーム)コードは,moodle/lib/upgrade.phpの125行目あたり,
if ($oldversion < 2008030602) {
@unlink($CFG->dataroot.'/cache/languages');
if (file_exists("$CFG->dataroot/lang")) {
// rename old lang directory so that the new and old langs do not mix
if (rename("$CFG->dataroot/lang", "$CFG->dataroot/oldlang")) {
$oldlang = "$CFG->dataroot/oldlang";
} else {
$oldlang = "$CFG->dataroot/lang";
}
} else {
$oldlang = '';
}
// TODO: fetch previously installed languages ("*_utf8") found in $oldlang from moodle.org
upgrade_set_timeout(60*20); // this may take a while
// TODO: add some info file to $oldlang describing what to do with "$oldlang/*_utf8_local" dirs
// Main savepoint reached
upgrade_main_savepoint(true, 2008030602);
}
ここで行っています.この後にインストールされていた言語パックの種類を調べてMoodle2.0用をダウンロードするコードは私が探した範囲では見当たりませんでした.
多分,なんとか手を打ってあるとは思うのですが,同時に気になるのは,ja_utf8_local フォルダに保存されていた,各サイトで独自に翻訳語を変更したデータの取り扱いです.moodledata/langフォルダにMoodle2.0用の言語パックがある場合に,moodledata/oldlang/**_utf8_local以下のファイルを参照してくれるコードが,もしかしたらあるのかも知れません.また,それをMoodle2.0用にコピーする機能が,たとえば手動操作で,あるのかも知れません.どちらも未確認です.どうなのでしょう,この辺りの仕組みと気配りは?
---
話が右左に蛇行して申し訳ありません.上記のmoodledata/langをmoodledata/oldlangに変更してしまう処理は比較的早い段階で行われます.つまりその後のMigrationの処理では言語パックが存在しない状態である恐れがあります.だとしますと,こちらに報告しましたような,LC_ALLの設定異常による文字列置換の異常動作がWindowsをサーバOSとしているサイトでは確実に発生するということを意味します.私は自分のサイトの通信設定(Proxy)のせいで言語パックが更新されなかったのだと思っていましたが,そうではないならばマルチバイト言語圏のWindowsサーバの管理者をかなり悩ませる問題に発展する恐れがあります.