Windowsサーバにおける曜日の表示不具合 (j)

Windowsサーバにおける曜日の表示不具合 (j)

- Tatsuya Shirai の投稿
返信数: 5

鈴鹿高専の白井です.

WindowsXP SP2上で,apache2をWebサーバとして,moodle1.8+を運用しています.
moodle1.7の頃から発生していた現象だったのですが,あまり実用上は問題が無かったため放置していた日本語表示の不具合の報告です.この問題はWindows環境に依存しているかも知れません.

添付した画像は一例です.このように,曜日が正しく表示されません.主に (j)と表示されます.添付した画像の箇所のソースは,moodle/admin/mnet/index.php (moodle1.8より前には存在しないかも知れません),以下のように,

<?php echo userdate($MNET->public_key_expires); ?>

userdate()関数を用いています.

function userdate($date, $format='', $timezone=99, $fixday = true)
はmoodle/lib/moodlelib.php内で宣言されており,
strftime($format, $date); あるいは gmstrftime($format, $date); によって$datestringを生成し,リターンしています.いずれもPHPの関数ですのでこれ以上,深く辿ることはできません.

$formatは,
if (empty($format)) {
$format = get_string('strftimedaydatetime');
}
にて,strftimedaydatetimeを参照しており,これはja_utf8/langconfig.phpの中で,
$string['strftimedaydatetime'] = '%%Y年 %%m月 %%d日(%%A) %%H:%%M';
と設定されています.単純に考えると,%%A (現在のロケールに基づく完全な曜日の名前)が正しく変換されていないのではないのか.
(ちなみに%%Aをテキストエディタで'月'に変更すれば(月)と表示されます)

カレンダーは順調です.曜日もきちんと「月曜日」から「日曜日」までしっかりと表示されています.しかし添付した画像のように一部では(j)のような表示になりますし,他にもmoodleからメール送信してくるフォーラムダイジェストなどでも,

Apache2(win32)側の原因についての対策 2007年 04月 26日(j) 19:08 - 白井 達也の投稿

のように曜日のみ正しく出力されません.

カレンダーの年月日の文字化けのようなコード変換上の問題なのか,PHPのインプリメント(あるいは設定)の問題なのか.まず情報提供をお願いしたいのは,この現象が当方の環境だけで発生しているのか,です.如何でしょう?

添付 strfdate.jpg
Tatsuya Shirai への返信

Re: Windowsサーバにおける曜日の表示不具合 (j)

- Tatsuya Shirai の投稿
サイト管理の[レポート]-[ログ]の日付のプルダウンメニューリストでも現象は確認できます.
添付 logPullDownList.jpg
Tatsuya Shirai への返信

Re: Windowsサーバにおける曜日の表示不具合 (j)

- Tatsuya Shirai の投稿

以下はあまり本件とは関係ない話で申し訳ありませんが...

いま気付いたのですが,データフォルダ内の一覧表示の更新日時ですが,12時間表示なのですね...もしかして後ろに付いている○の記号がAM/PMを表す? 何となく気持ち悪いので24時間表示に変更したいのですが,どうしたものでしょう悲しい
添付 datafolder_time.jpg
Tatsuya Shirai への返信

Re: Windowsサーバにおける曜日の表示不具合 (j)

- Tatsuya Shirai の投稿
カレンダーのポップアップに関する過去のディスカッション,
http://moodle.org/mod/forum/discuss.php?d=8285
を参考にして,
'%%Y年 %%m月 %%d日(%%a) %%H:%%M';
の日の後にスペースを入れたり,半角-を入れたり試みたのですが,状況は変りません.

setlocale(LC_ALL,$CFG->locale)
をmoodle/lib/moodlelib.phpに強制的に入れたりもしたのですが,変化はなし.
(ただし,これに関しては状況に変化が見えないので,本当に有効に作用しているかどうかの自信なし)
Tatsuya Shirai への返信

Re: Windowsサーバにおける曜日の表示不具合 (j)

- Tatsuya Shirai の投稿
どうやら,やはり moodle/lib/moodlelib.phpのuserdate()関数の問題のようです.
以前にmoodle1.8にアップグレードした際に
http://moodle.org/mod/forum/discuss.php?d=68531
とした辺りに問題がありそうです.

いじっているうちに,年月日は化けるが曜日は正しく表示される,というパターン(これはオリジナルのmoodle1.8用moodlelib.phpの場合)があることに気付きました.

$formatをS-JISに変換した(年月日をUTF-8からS-JISへ)する処理を上記の私の変更では省いていました(それでもうまく動いていた).その代わり,曜日(S-JIS)が化ける,という現象だったようです.

もう少し冷静にmoodlelib.phpのuserdate()関数を見直す必要がありそうです...まだまだ修行が足りないようです.

時間があるときに考え直してみます.

もし,Windows環境でmoodle1.8を使用していてuserdate()関数を正しく修正できている方がいらっしゃいましたら報告よろしくお願いします.

Tatsuya Shirai への返信

Re: Windowsサーバにおける曜日の表示不具合 (j)

- Tatsuya Shirai の投稿

解決しました.
moodle1.7でも発生していたというのは勘違いのようです.
Windows環境で,moodle1.8を使用している場合に,私が以前に全般的日本語フォーラムで示した修正に間違いがありました.
正しい変更を
http://moodle.org/mod/forum/discuss.php?d=68531#p316914
に書き込みました.