小テスト、レッスンにgift形式等で質問をインポートする際、
euc-jpのファイル以外は文字化けしますよね。
そこで、mod/quiz/format.phpとmod/lesson/format.phpを
添付ファイルのように修正して、
shift-jisでもutf-8でもjisでも大丈夫なようにしてみました。
mbstringの関数を呼んでいるので
php.iniで
extension=php_mbstring.dll
を有効にする必要があります。
日本語のサイトであるかどうかを
default-charsetがeuc-jpかどうかで判断していますが、
もっと適切な方法があるのでしょうか?
青柳さんこんにちわ。柏木です。
ちょうど、
http://moodle.org/mod/forum/discuss.php?d=11711
こちらのスレッドで日本語化の話題を扱っています。
青柳さんの提供していただいたコードを、
global $CFG;
$currlang = current_language();
if (file_exists("$CFG->dirroot/lang/$currlang/lib/langlib.php")) {
include_once("$CFG->dirroot/lang/$currlang/lib/langlib.php");
$lang_code = rtn_lang_code();
if (extension_loaded('mbstring')) {
$lang_conv = 'mb_convert_encoding';
} else {
$lang_conv = 'lang_convert_encoding';
}
$i = 0;
while ($filearray[$i]) {
$filearray[$i] = $lang_conv($filearray[$i], '$lang_code');
$i++;
}
}
のように、すると、もう一つのスレッドとの統一性が取れ、日本語ライブラリに取り込めると思うのですがいかがでしょうか?
※今、急いで上記を書いたので実行検証してませんが^^;
上記を実行するには、
http://www.supertak.com/down/sample5.htm
にあるlanglib112.lzhが必要です。
global $CFG;
$currlang = 'ja';
if (file_exists("$CFG->dirroot/lang/$currlang/lib/langlib.php")) {
include_once("$CFG->dirroot/lang/$currlang/lib/langlib.php");
$lang_code = rtn_lang_code();
if (extension_loaded('mbstring')) {
$lang_conv = 'mb_convert_encoding';
} else {
$lang_conv = 'lang_convert_encoding';
}
$i = 0;
while ($filearray[$i]) {
$filearray[$i] = $lang_conv($filearray[$i], $lang_code, "auto");
$i++;
}
}
で、動作しました。
※この位置からでは、current_language()が呼び出せないので、暫定的に、'ja'にしてあります。もしよろしければ、上記パッチも、
http://www.supertak.com/down/sample5.htm
で公開させていただけますか?
> もしよろしければ、上記パッチも、
> http://www.supertak.com/down/sample5.htm
> で公開させていただけますか?
はい。OKです。
上記のパッチは、
giftファイルを書く先生に
euc-jpという言葉を説明しなくてもよいようにしたいと思い、
「とりあえず動けばいいや」という程度で修正したのですが、
きちんとしたパッチにしようと思うと
current_languageとサイトのcharsetの関係が
よくわからなくなりました。
例えば、サイトがutf-8で構成されていて、
ユーザがjaを選択している場合には、
euc-jpに変換するわけにはいかないですよね。
きちんとしたパッチにしようと思うと、
langがjaだからといって、
変換すべきcharsetが一意に決まるわけではない気がします。
langlib112.lzhは
langからcharsetが一意に決まるという前提で
書いてあるような気がしますが、
これでよいのでしょうか?
$CFGにsite_charsetという設定が必要ではないでしょうか?
あるいはdefault-charsetで代用でしょうか?
***
ところで、もう修正されているかもしれませんが、
langlib112.lzhのlanglib.phpの3行目に
typoを見つけたのでお知らせします。
// Define Janguage Code
Janguage→Language
ありがとうございます。指摘箇所を修正した後、公開させていただきます。別スレにあるカレンダーのポップアップの件は日付表示の問題なのですが、前回までの修正で回避できています。これでさらに日本語対応が進みそうです。現在までに対応できた内容は・・・。
GD2の日本語表示への対応。 メールの文字コードをiso-2202-jpに統一。 日付表示の日本語表示への対応。 EXCELワークシートの日本語表示への対応。 インポートファイルの日本語表示への対応。となりました。
charsetの問題ですが、様々な使用環境やPHP.iniの設定が考えられるため、site_charsetがいつも予想しているものを返してくれないような気がしてます。現在は仕方がないので、langlib.phpの中でeuc-jpを返すような仕組みを取ろうと思ってます。サイトがutf-8で公開されているような場合には、これをutf-8に書き換える必要があります。
何か良い案があれば、是非教えてください。
また、別スレでも書きましたが、PHPを実は良く知りません。勉強しようとは思いながらも、今までに触れた事がありませんでした。現在、勉強しつつ作成しているので、ソースにも見苦しい点があると思います。なぜlanglib.phpというファイルを持ちながらソースを一つにまとめてないのか?ソースが回りくどいのか?未だfunctionやclassの勉強中だからです^^;;PHP特有の変数の受け渡しがまだよく理解できてません。勉強が済み次第、まとめる予定です(気が長すぎますかね?)。ですので、PHPに詳しい方からの指摘は大歓迎です。
どうするのがよいのか、よくわかりませんが、
エンドユーザがエンコーディングまで
選択するのは変な気がするので、
エンドユーザが選択する言語としては、
jaもしくはja_JPでしょうね。
それとは別に、サイトの設定として、
サイト内のエンコーディングを
euc-jpにするか
utf-8にするかの選択が
あるのでしょうか。
langの下のフォルダーは、
どうするのかなぁ。
Linuxの標準的なロケール名
http://www.linux.or.jp/JF/JFdocs/Japanese-Locale-Policy/
に合わせて
ja_JP.eucJP
と
ja_JP.UTF-8
にするのかなぁ?
Moodleでは管理者がどの言語を使用可能にし表示するか決めることができるので、例えば、構築環境がEUCなのであれば、ja-eucだけONでその他はOFFにできます。さすれば、エンドユーザはおのずと、JPならEUCしか選択できません。
むろん、管理者がUTF-8フォーマットも用意しているのであれば、今度は、jp-utf8もONにすれば、エンドユーザは、EUCかUTF8の選択ができます(できたからなんだという事になりますが^^;)。各日本語化DOCを現在はEUCで構築されてますが、今後はUFT8なども加わるかもしれません。その際に、/lang/ja/ しかないとなると、このフォーマットで記載されたDOCファイルを置く場所がありません。これが、/lang/ja-euc/ /lang/ja-uft8/ となっていれば、UTFに限らず、sjisもjisも別途に保管しておけると思います。
さらに、利点として、languageの選択を見るだけで、複雑な事を考えなくても、容易にして、現在表示に用いている日本語コードを知ることができます。
と、考えたりしてみたのですが、少々考えが浅いですかね?^^;
ただ、ja-eucという、この記載方法が一般的なのか、異なるのか、一般的に定義された記載方法が他にあるのかなどに関しての専門的な事は私には分かりません^^;