Windows環境でのMoodle文字化け

大学向けのLMSであるMoodleをテストしています。
Moodle自体はUTF-8ベースですが、Windowsサーバーで動かすと、カレンダーなどの年月日が文字化けします。テスト環境なので、数ヶ月の間、放置していましたが、何とか解決したので備忘録です。
Windows Vista Bussiness
Moodle 1.8.2 (2007021520)
mysql バージョン 5.0.41
php バージョン 5.2.2
apache 
(XAMPP Version 1.6.2でインストール)

次のファイルを、UTFからShift-JISに変換して保存しなおす
<インストール>\moodledata\lang\ja_utf8\langconfig.php

たったこれだけです。カレンダーの表記や、フォーラムの投稿日時などの文字化けも解決しました。
具体的には、秀丸などのエディタで開き、エンコード形式をShift-JISにして保存するだけ。
なお、フォーラムの日時表記は、下記のエントリで変更することもできます。

 $string[‘strftimedaydatetime’] = ‘%%Y年 %%m月 %%d日(%%A) %%H時%%M分’;

Moodle.orgの全般的日本語フォーラムでは、解決策として lib/moodlelib..php のfunction userdata()のコードを変更する方法が紹介されています。が、ファイルの文字コードを変更するだけでよいようです。
原因は、WindowsがUTF対応としながらも、内部コードは日本語(shift-jis)で行っているためらしいですが、よくわかりません。langconfig.php で指定されている文字コードは、以下のようになっています。
 $string[‘localewin’] = ‘Japanese_Japan.932’;
 $string[‘localewincharset’] = ‘CP932’;
常識的には、これを変更すればよいように思うのですが・・・・。
こんな修正方法は、邪道かな。


2件のコメント


  1. 白井さん
    コメントありがとうございます。
    実のところ、Windows版Moodleは、ノートPC(WindowsXP)の中での実験環境だけです。サーバーに上げていないので、この改造が正しいのか、本当のところはわかりません。
    fs_moodleも興味を持って拝見させていただいています。携帯対応など、ユニークな試みを精力的にされているので、大変に参考になります。
    PHPやMysqlの勉強も兼ねて、少しずつ・・・。
    よろしくお願いします。


  2. Japanese Moodleのfacilitatorをさせて頂いています鈴鹿高専の白井と申します.
    こちらの情報に関係のあるお話ですね.
    http://moodle.org/mod/forum/discuss.php?d=68531#p308036
    Ryouさんの考えた対策方法は邪道ではありません.なるほど,そういう手もあったか,と納得しました.
    我々がMoodle本体のコードに手を入れているのには理由があります.
    Ryouさんの取られた対策は言語パックに対する修正です.言語パックは同じくfacilitatorである吉田氏により毎週,いやほぼ毎日といって良いペースで更新されています.新しい翻訳語が追加されたり,以前に翻訳した用語を修正したり.Moodleサイトの管理者の方にはできるだけ短い周期での言語パックの更新をお勧めしています.
    言語パックの更新を行うと,現在存在するmoodledata/lang/ja_utfフォルダ以下は削除され,新しくダウンロードされた言語パックに置き換えられます.そのたびにlangconfig.phpの文字コードを変換する必要が生じます.
    それに対してMoodle本体のコードを修正し,そしてその修正が本家に採用されれば我々日本を含むマルチバイト言語圏のサイト管理者は日付の文字化けに悩む必要がなくなります.
    上記フォーラムにもありますように,マルチバイト言語圏からの指摘により本家Moodleでも対策を試みたようですが,少々,的外れな対策であり,効果はありませんでした.いま,日本だけでなく,中国語圏からも指摘が報告されていますので,いつかはこの問題から開放される日が来るのかも知れません.
    langconfig.phpの文字コードを変えるというのは最もローレベルでの対策であり,とても興味深い技術です.たとえば標準のUTF-8のlangconfig.phpに加えてローカルな言語に対応したlangconfig.phpも言語パックに含めて配布する(langconfig.php内でサーバの種別を判断して読み込むlangconfig.phpを切り替えるなど)のも手ですね.あるいはlangconfig.phpを読み込む際にUTF-8からサーバの種別に合わせた文字コードに変換するという手もあるでしょう.後者はオーバーヘッドが気になるところですが,前者ならばPHPアクセラレータの効果でオーバーヘッドは少ないかな?
    貴重な意見,ありがとうございます.お手数かも知れませんが,今後も何かgood ideaを思い付きましたら,Japanese Moodleにも情報提供をお願いします!

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください