Oct 07, 2008, 02:52 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
modxcms.com web
  MODxCMS.com   Forums   Help Login Register  
Pages: [1]   Go Down
  Print  
Author Topic: [回避]XREAでロケールに基づく日付の表示が変なのですが..?  (Read 3085 times)
0 Members and 1 Guest are viewing this topic.
MEGU
Committed to MODx
*****
Posts: 817



WWW
« on: Sep 29, 2007, 06:54 AM »

こんにちは。よろしくお願い致します。

新しく、XREAを借りMODxを導入しました。
タイトルのような問題がありまして、ポストしました。

例えば、Jotが出力する日付のフォーマットは、デフォルトで、以下のようになっています。
「%a %B %d, %Y, %H:%M:%S」。

この部分、マネージャでログインしていないと、以下のようになるのですが、
「Sat September 29, 2007, 18:39:30 」
マネージャでログインした状態で同じドキュメントをみると、以下のようになるのです。
「�� 9�� 29, 2007, 18:39:30」

上記の変な表示は、(マネージャ画面)のイベントログの日付にも見られます。

またDitto(Reflect)の日付出力も、デフォルトで、月のところが「%B」なんですが、
ログインしていないと「April」のように表示され、ログインしていると「4·î 」のようになります。

これ、なんなんでしょうか。。?

環境は、以下です。
MODx 096 rev 2767
PHP 5.2.3
MYSQL 5.1.20

phpinfoとかも必要でしょうか。。?

どうぞよろしくお願い致します。また、「ここ読めリンク」などありましたら、
教えて頂けると嬉しいです。。よろしくお願いします。。
« Last Edit: Oct 01, 2007, 10:07 AM by MEGU » Logged
yassi
Jr. Member
*
Posts: 24


« Reply #1 on: Sep 29, 2007, 09:11 AM »

言語はJapanese-utf8ですよね?
おそらく、EUC-JPで吐き出されたものが、日本語を考慮しないUTF-8への変換を行っているせいだと思います。
assets/snippets/ditto/classes/ditto.class.inc.phpの926行目あたりを
Code:
//$dt = utf8_encode($dt);
とコメントアウトして表示させると、違う文字化け表示になると思いますので、ブラウザで無理矢理EUC-JPで表示させてやると、そこだけきちんと表示されると思います。
で、上のコメントアウトをそのままにしてassets/snippets/ditto/lang/japanese-utf8.inc.phpの16行目あたりを
Code:
setlocale (LC_ALL, 'ja_JP.UTF-8');
に変更してやれば、文字化けせずに表示されると思います。
と手元のLAMPな環境ではそうなりました。
XREAでもおそらく同じような感じではないかと。 Grin
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #2 on: Sep 29, 2007, 09:16 AM »

yassiさん。ありがとうございます。

はい。言語はutf-8です。

とりあえず、管理画面のイベントログは、includes/lang/japanese-utf8.inc.php の
「setlocale (LC_ALL, 'ja_JP');」を「setlocale( LC_ALL, "ja_JP.UTF-8");」にしたら、
妙な表示は直って、日本語で表示されました。

これからDittoに挑戦してみます。ありがとうございます。
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #3 on: Sep 29, 2007, 09:37 AM »

こんにちは。よろしくお願いします。

Quote
assets/snippets/ditto/classes/ditto.class.inc.phpの926行目あたりを
Code:
//$dt = utf8_encode($dt);
とコメントアウトして表示させると、違う文字化け表示になると思いますので、ブラウザで無理矢理EUC-JPで表示させてやると、そこだけきちんと表示されると思います。
確認できました。

Quote
で、上のコメントアウトをそのままにしてassets/snippets/ditto/lang/japanese-utf8.inc.phpの16行目あたりを
Code:
setlocale (LC_ALL, 'ja_JP.UTF-8');
に変更してやれば、文字化けせずに表示されると思います。

してみたのですが、こんな感じ「9�� 」のままでした。。
マネージャからログアウトすると、「September」になるのですが...。
なんか変ですよね??
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #4 on: Sep 29, 2007, 09:47 AM »

すみません。Ditto 解決しました。

yassiさんの修正 +Ditto コールの中で、「&language=`japanese-utf8`」を指定してOKでした。

jotも同じ様なのですが、jotは、言語ファイルがないんですよね。。
Logged
yassi
Jr. Member
*
Posts: 24


« Reply #5 on: Sep 29, 2007, 10:10 AM »

あ、すいません、Dittoのことしか書いてませんね。
しかも&language=`japanese-utfのことを飛ばしてますね。
分かりにくくてすいません。

Jotは使ってないので分からないのですが、ソース落としてざっと見てみましたが、includes/phx.parser.class.inc.phpの269行目あたりの
Code:
case "date": $output = strftime($modifier_value[$i],0+$output); break;

Code:
case "date":
    setlocale (LC_ALL, 'ja_JP.UTF-8');
    $output = strftime($modifier_value[$i],0+$output);
    break;
なんて変更で行けないですかね。
場当たり的ですが。 Grin
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #6 on: Sep 29, 2007, 09:36 PM »

yassiさん。どうもありがとうございます。

Jotの方、直してやってみたのですが、変化がありませんでした。
ログイン前は「Sat September 29, 2007」こんな感じで、
ログイン後は、「�� 9�� 30, 2007」こんな感じです。

これって、なんか根本的な問題なのでしょうか。
他のスニペットでも、ロケールに基づく日付は、こんな風になるってことですよね?
(まだ試してないのですが、あとでちょっとやってみます...)。

今まで、さくらインターネットでしか利用していなくて、さくらは、ロケールの設定が
されてなかった?ので、逆にこういう問題には出くわさなかったのですが。。

他のXREAユーザの方はどうなのでしょうか。。うちの環境だけ...?
また、他のサーバではどうなのでしょうか。。
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #7 on: Sep 29, 2007, 09:42 PM »

他のスニペットの出力でも、ロケールに基づく日付の表示が上手く表示できないことを確認しました。

DateTimeJPで確認しました。
http://modxcms.com/forums/index.php/topic,12973.0.html
(※他のスニペット同様、マネージャにログインしていない状態とログインしている状態で
表示が異なります)。
« Last Edit: Sep 29, 2007, 10:09 PM by MEGU » Logged
yassi
Jr. Member
*
Posts: 24


« Reply #8 on: Sep 30, 2007, 02:54 AM »

Quote
Jotの方、直してやってみたのですが、変化がありませんでした。
ログイン前は「Sat September 29, 2007」こんな感じで、
ログイン後は、「�� 9�� 30, 2007」こんな感じです。
うまくいかなかったようですね、すいません。違う場所なのかな?
ログインの有無で表示が違うのは、ログインすると何処かで言語ファイルを読み込んで、その中で
Code:
setlocale (LC_ALL, 'ja_JP');
をやっちゃっているせいではないかと。
ja_JPという指定は環境によってはEUC-JPを指すと思うんですよね。特にUnix系は。
ですから、
Code:
setlocale (LC_ALL, 'ja_JP');
となっている所を全て
Code:
setlocale (LC_ALL, 'ja_JP.UTF-8');
に変更してやれば文字化けせずに行けるのかなぁ、と想像しています。
もうこの辺はシステムの中身に関わってくることだと思うので、どなたか詳しい方にご説明いただきたいです。
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #9 on: Sep 30, 2007, 07:51 AM »

yassiさん。どうもありがとうございます。

以下を試してみました。ご報告致します。

・modules/docmanager/lang/japanese-utf8.inc.php
・modules/quick_edit/lang/japanese-utf8.inc.php

上記ファイル内の、「setlocale (LC_ALL, 'ja_JP');」を「setlocale (LC_ALL, 'ja_JP.UTF-8');」に
書き替えてアップロード。

Jotで今まで、ログイン時に文字化けしていた現象が解消され、ロケールに基づく日付の
表示が正常になりました。ただし、ログアウトすると、ロケール設定は無視?されて、
たとえば、ログイン時は「9月」であるところが「September」となります。

また、現在MODxには、japanese-utf8.inc.phpが以下のように存在します。
・manager/includes/lang/japanese-utf8.inc.php
・modules/docmanager/lang/japanese-utf8.inc.php
・modules/quick_edit/lang/japanese-utf8.inc.php
・assets/snippets/AjaxSearch/lang/japanese-utf8.inc.php
・assets/snippets/Ditto/lang/japanese-utf8.inc.php

上記のうち、「・manager/includes/lang/japanese-utf8.inc.php」を修正しますと、
イベントログの日付の表示が正常になります。

くわえて、
・modules/docmanager/lang/japanese-utf8.inc.php
・modules/quick_edit/lang/japanese-utf8.inc.php
を修正しますと、言語ファイルを持たないスニペットが出力する
ロケールに基づいた日付が正常になるようです(しかし、ログイン時のみ)。

AjaxSearchに関しては、試していないのですが、Dittoの結果からすると、
言語ファイルを持っているスニペットは、ログインしている、していないに関係なく、
きちんと、ロケールに基づく日付の表示が可能なのではないかと思います。

問題は、言語ファイルを持たないスニペットですが。。ログイン時のみ、
正常に表示される状態なので、実質、ロケールに基づく日付の表示は
不可と言うことになるのでは..と思います。

以上、XREAでの結果ですが。。

あ、それと。。
Quote
ja_JPという指定は環境によってはEUC-JPを指すと思うんですよね。特にUnix系は。
上記からすると、utf8用の言語ファイルのロケール設定は「ja_JP」ではなく、「ja_JP.UTF-8」が
適切と言う理解で、良いのでしょうか。。
« Last Edit: Sep 30, 2007, 07:58 AM by MEGU » Logged
yassi
Jr. Member
*
Posts: 24


« Reply #10 on: Sep 30, 2007, 09:16 AM »

Quote
Jotで今まで、ログイン時に文字化けしていた現象が解消され、ロケールに基づく日付の
表示が正常になりました。ただし、ログアウトすると、ロケール設定は無視?されて、
たとえば、ログイン時は「9月」であるところが「September」となります。
ログインしている状態だとQuick Editなどの変更を加えた言語ファイルを読み込むので文字化けが解消されますが、ログアウトするとそれらのファイルを読み込まなくなるのでシステムのデフォルトが利用されるからだと思います。

言語ファイルを持たないスニペット等でもja_JP.UTF-8を設定したいのであれば、manager/includes/document.parser.class.inc.phpの18行目あたりで
Code:
    function DocumentParser() {
        setlocale(LC_ALL,"ja_JP.UTF-8");
などと強引に設定してやれば良いのかと思います。決め打ちになっちゃいますけど。
ただし、このような変更を加えてもスニペットの言語ファイルなどで
Code:
setlocale(LC_ALL,"ja_JP");
が実行されると元に戻りますので、相変わらず言語ファイルの変更も必要になるかと思います。
Quote
上記からすると、utf8用の言語ファイルのロケール設定は「ja_JP」ではなく、「ja_JP.UTF-8」が
適切と言う理解で、良いのでしょうか。。
うーん、少なくともUnix系のシステムではそうだと私は理解しているんですが、どうなんでしょう>識者の方々。 Grin
Logged
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #11 on: Sep 30, 2007, 10:52 AM »

yassiさん。ありがとうございます。

Quote
言語ファイルを持たないスニペット等でもja_JP.UTF-8を設定したいのであれば、manager/includes/document.parser.class.inc.phpの18行目あたりで
Code:
    function DocumentParser() {
        setlocale(LC_ALL,"ja_JP.UTF-8");

なるほど~っ。すごいです。
ログインしていない状態でも、ロケールに基づく日付が表示されました。 Cheesy

整理しますと、
・utf8の日本語言語ファイルの場合、「setlocale(LC_ALL,"ja_JP.UTF-8")」を指定すること。
・言語ファイルがないスニペットなどのロケールに基づく日付を正常に表示させるには「document.parser.class.inc.php」に
 手を加える必要があること。

ということですよね。。言語ファイルは、日本で独自に用意するモノなので、良いとしても、
「document.parser.class.inc.php」に手を加えるのは、開発チームの方で対応して頂けると
うれしいですよね。たとえば、マネージャ画面で、言語選択をしたら、その言語のロケール設定が、
挿入されるとか。あるいは、ロケールの設定を有効にするかどうかという選択肢もあれば便利かも。。
そうしたら、各国の言語に対応できるわけですよね?
(私はプログラムわからないのでアレなのですが...)。

いずれにしても、疑問が解けてすっきりできました。どうもありがとうございます。
Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP

Copyright © 2005-2008 MODxCMS, All rights reserved. Contact Us
Styles by ziworks.com

Powered by SMF 1.1.4 | SMF © 2005, Simple Machines LLC

Valid XHTML 1.0! Valid CSS!