日本語化・日本語パッチ用スレッド

日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿
返信数: 18

あちこちに、日本語対策のスレッドが点在してしまいましたので、専用のスレッドを立てました。

http://www.supertak.com/down/sample.htm

に現在まで対応している日本語対策をまとめてあります。

  • GD2の日本語表示への対応。
  • メールの文字コードをiso-2202-jpに統一。
  • 日付表示の日本語表示への対応。
  • EXCELワークシートの日本語表示への対応。
  • LESSON/QUIZのファイル取り込み時日本語変換の対応。

が、現在の主な対応内容となっています。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

今現在、分かっている不具合として・・・。

1.パッチで対策しても、メール本文の最後の1バイトが文字化けるときがある。化けないときもある。同様の文章を送っても再現しないときもある(これが不思議)。
2.EXCELだけでなく、TEXTファイルで出力するときも日本語化けが発生するので対策が必要。
3.EXCEL及びTEXT出力時のファイル名の問題。ファイル名が文字化ける。
4.GDの日本語表示のアライメントの問題。日本語化はだけでは不十分で、アライメントが日本語に合っていない。

です。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Timothy Takemoto の投稿

それにしても、すばらしい!

ありがとうございます。

私は今から1週間休みますが、ご要望がありましたら、それまでに

何を報告すればよいか

何を要求すればよいか

を教えていただっければ、英訳いたします。

皆様は英訳ができるでしょうが、私に役に立つことがあるとしたら役に立ちたいです。

武本Timothy

Takahito Kashiwagi への返信

小テストで全角半角を無視する。

- Tatsuya Aoyagi の投稿

過去の記事を見ていたら、

小テストで全角半角を無視したいという話を見つけました。

http://moodle.org/mod/forum/discuss.php?d=7791

ということで、添付のようなパッチを作ってみました。

1.5devが対象です。

記述式の質問で、

「解答の精度」(この訳、おかしくない?)

を「重要ではありません」(この訳もおかしいな)

にすると、大文字小文字を無視するだけでなく、

全角半角も無視するようになります。

数字方式の質問では、

無条件に全角半角変換をしています。

report.phpの部分はきちんとテストしていません。

Tatsuya Aoyagi への返信

Re: 小テストで全角半角を無視する。

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

「解答の精度」(この訳、おかしくない?)

を「重要ではありません」(この訳もおかしいな)


青柳さん

ご指摘誠にありがとうございます。明らかに誤訳です。
下記のように訂正させて頂きましたが、いかがでしょうか。

Case sensitivity = 大文字小文字の区別
No, case is unimportant = いいえ、区別しません
Yes, case must match =  はい、合致する必要があります

上記翻訳箇所以外でも誤訳と思われる翻訳箇所がありましたらご指摘ください。 笑顔
Mitsuhiro Yoshida への返信

Re: 小テストで全角半角を無視する。

- Tatsuya Aoyagi の投稿

> 上記翻訳箇所以外でも誤訳と思われる翻訳箇所がありましたらご指摘ください。

とりあえず1つ。

lang/ja/lesson.php

$string['minimumnumberofquestions'] = '質問の最大数';

最小では?

Tatsuya Aoyagi への返信

Re: 小テストで全角半角を無視する。

- Takahito Kashiwagi の投稿

これはすばらしいですね。青柳さんは、職人ですね。これもぜひ、langlibに取り入れさせてください。よろしいでしょうか?

Takahito Kashiwagi への返信

Re: 小テストで全角半角を無視する。

- Tatsuya Aoyagi の投稿

> これもぜひ、langlibに取り入れさせてください。よろしいでしょうか?

はい。OKです。

current_languageの判断の仕方と、mbライブラリを無条件に使っている部分は適当に直してください。

大文字小文字無視のオプションなのに、日本語の場合には、大文字小文字以外の処理が追加されてしまうという点が少し気になります。

日本語の場合だけ別のオプションを用意した方がよいかもしれませんが、そうすると、データベースにもそのフィールドを用意しないといけないので、とりあえずは今のままにしておきます。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

langlib ver 1.2.0 公開です。

http://www.supertak.com/down/sample.htm

に現在まで対応している日本語対策をまとめてあります。

  • GD2の日本語表示への対応。
  • メールの文字コードをiso-2202-jpに統一。
  • 日付表示の日本語表示への対応。
  • EXCELワークシートの日本語表示への対応。
  • LESSON/QUIZのファイル取り込み時日本語変換の対応。
  • 小テストでの半角・全角無視設定追加。

が、現在の主な対応内容となっています。半角・全角無視のON/OFFの設定は、langlib内のスイッチで設定できます。

現在、多忙なため詳しい動作確認をしていません。mbモジュールを使用しない半角・全角変換には改善の余地がありそうです。バグ報告大歓迎です。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Tatsuya Aoyagi の投稿

http://www.supertak.com/down/sample.htm

を見てみたのですが、current_language関数の内容をいろいろな個所で次のようにインライン展開しているのはなぜですか?

      global $CFG, $USER, $SESSION;

            if (!empty($CFG->courselang)) {
                $currlang = $CFG->courselang;
            } else if (!empty($SESSION->lang)) {
                $currlang = $SESSION->lang;
            } else if (!empty($USER->lang)) {
                $currlang = $USER->lang;
            } else {
                $currlang = $CFG->lang;
            }

Tatsuya Aoyagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

> current_language関数の内容を
> いろいろな個所で次のようにインライン展開しているのはなぜですか?

ご指摘感謝です。これに対する回答は非常に単純明快です。理由はまだ私がPHPのfunctionを理解していないからです^^;ようするに、私の技術不足なのです。

この位置からは、current_language()だけで呼び出せるのか?とか、それとも、includeしないといけないのかとか?、とか、そんなことで悩むレベルです。なにしろ、PHPの勉強はまだ三日目です。

今現在の私のスキルでは、理解していないものを入れておくと、エラーが起きたときに何がエラーを起しているのか分からなくなってしまうのです^^;ひとつひとつトライアンドエラーで勉強しつつ、記載してるので、current_language()を呼び出さずに、毎回展開してます。おそらく、私の勉強が進むにしたがって、面倒な記述はなくなっていくはずです><)

そんなものを、公開するなとか言わず、長い目で見てやってください。

幸いな事に、perlやCに似ているので元のソースがあれば、それが一体何を行っているのか?とか、目的の処理の場所探しなどはできます。こんな機会がないと勉強もしなかったと思うので、自分にとってはよい動機付けになってます。他の方々にとっては、じれったいだけかもしれませんが^^;;;

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Tatsuya Aoyagi の投稿

私もMoodleのソースを見始めて数日なのであまり自信はないのですが、Moodleでは、必ず
 config.php
を読み込む流儀にしているようです。

config.phpでは最後に(178行目)、
 lib/setup.php
を読み込みます。lib/setup.phpでは、データベースへの接続を行った後で、71行目から標準ライブラリとして、
 lib/weblib.php  // HTML生成用関数
 lib/datalib.php // データベースアクセス用関数
 lib/moodlelib.php // その他の汎用関数
の3つをロードします。

ということで、この3つのファイル中の関数は標準ライブラリとしてどこでも使用可能になっていると思われます。

current_languageはlib/moodlelib.phpの中にあるので、流儀に従ってconfig.phpを読み込んでいれば、どこでも使用可能だと思います。

間違っていたらごめんなさい。

Tatsuya Aoyagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

青柳さんの情報を元に、各ソースを見てみると確かにその流れですね!ということは、setup.phpの /// Load up standard libraries にlanglig.phpを入れれば、どこからでも、langlib内のfunctionが呼び出せますね。

思っていた改造が一気に進みそうです。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

青柳さんからのアドバイスを元に改定しました。langlib ver 1.2.1 公開です。

http://www.supertak.com/down/sample.htm

だいぶスッキリしてきました。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Tatsuya Aoyagi の投稿

1.2.1を実際に動かしてみたわけではないので、間違っているかもしれませんが、webを見たところ、ちょっと気になる点があります。

いろいろな場所で
 if (use_lang_lib()) {
で判断していますが、use_lang_lib関数はja/lib/langlib.phpの中で定義されているので、ja/lib/langlib.phpがロードされない場合には未定義ですよね。ja/lib/langlib.phpは言語がjaの時だけロードされるので、言語ja以外の時には上記のif文は関数未定義のエラーになりませんか?言語がja以外のテストはやりましたか?

次のいずれかが必要ではないでしょうか?
(方法1) 何らかの方法でuse_lang_libを言語に関わらずロードされるようにする。
(方法2) if (function_exists('use_lang_lib') && use_lang_lib()) {のようにする。

Tatsuya Aoyagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

青柳さんこんにちわ。さらなるご指摘感謝です。

実は、私もはじめは、function_exists('use_lang_lib')を入れてました。しかし、テストをしてみると、どういうわけか、以下のような結果になったので外しました。

1.langlib.phpがja以下に設置されており、詳細設定のlang設定がjaになっていれば、閲覧者が別の言語に切り替えても、エラーもワーニングもに出ず正常に動く。

2.if (use_lang_lib()) { を書き加えている人は、同時に、必ずlanglib.phpを置いているはずである。※これを前提に作ってますので。

ということから、if (use_lang_lib()) のみにしました。が次のことをするとエラーになります。

if (use_lang_lib()) { を書き加えているのに、lang設定配下にlanglibを設置していない場合です。しかし、このパターンは想定しても仕方がないので、無視しています。

ただ、これは自分でも想定外であり、同時に「新たな不具合」を意味していました。つまり、デフォルトの言語をjaにしていると、閲覧者が他の言語にしても、パッチが動いてしまっているという事です。事実、enにしても、excelはしっかり、sjisで吐き出されます。

原因を想像するに、setup.phpでのlanglib.phpの取り込みを、デフォルトの設定を見に行った直後においているので、常にデフォルトになってしまうのだろうと考えました。

何も考えずに、最後に置けば良いのですが、それでは、自分のスキルアップがないので、ずっとプログラムの処理を追って、ひとつひとつ何をしている処理なのか考えながら、どの位置にlanglib.phpの取り込みを持ってくるのが、正解か?と考えているうちに、眠気に負けて挫折です。

Tatsuya Aoyagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

結局、挿入位置は、setup.phpの最後になりました^^;; これにより閲覧者のLang設定が効く様になったと同時に、if (use_lang_lib()) では「エラーが正常に出る」(表現が変)ようになったので、このエラーを回避するために、青柳さんのコメントを参考に変更しました。

徐々にまともになってますかね?^^; 今後も引き続き指摘がありましたら、よろしくお願いします。

これで少し落ち着いたのではないかと思います。残る課題がありますので、そちらにも手をつけようと思います。

Takahito Kashiwagi への返信

Re: 日本語化・日本語パッチ用スレッド

- Takahito Kashiwagi の投稿

EXCELワークシート出力の日本語対応に加えて、TEXT出力の日本語対応を行いました。また、日本語ファイル名にも対応しました。

TEXTの出力は、出力先の環境に合わせ変化するようにしました。Windowsへ出力する際には、文字コード:sjis、改行コード\r\n。Macintoshへ出力する際には、文字コード:sjis、改行コード\r。その他は、文字コード変換せず(EUCのまま)に、改行は\nです。
※当方にMAC環境がないため確認していません^^;

langlib.phpも大幅に改定し大半の機能をこのファイルに取り込みました。オリジンに入れる変更はできる限り少なくしてあります。

http://www.supertak.com/down/sample.htm
ver. 1.3.1