• [回避]XREAでロケールに基づく日付の表示が変なのですが..?#

  • MEGU Reply #1, 4 years, 4 months ago

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

    新しく、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とかも必要でしょうか。。?

    どうぞよろしくお願い致します。また、「ここ読めリンク」などありましたら、
    教えて頂けると嬉しいです。。よろしくお願いします。。


  • yassi Reply #2, 4 years, 4 months ago

    Reply
    言語はJapanese-utf8ですよね?
    おそらく、EUC-JPで吐き出されたものが、日本語を考慮しないUTF-8への変換を行っているせいだと思います。
    assets/snippets/ditto/classes/ditto.class.inc.phpの926行目あたりを
    //$dt = utf8_encode($dt);

    とコメントアウトして表示させると、違う文字化け表示になると思いますので、ブラウザで無理矢理EUC-JPで表示させてやると、そこだけきちんと表示されると思います。
    で、上のコメントアウトをそのままにしてassets/snippets/ditto/lang/japanese-utf8.inc.phpの16行目あたりを
    setlocale (LC_ALL, 'ja_JP.UTF-8');

    に変更してやれば、文字化けせずに表示されると思います。
    と手元のLAMPな環境ではそうなりました。
    XREAでもおそらく同じような感じではないかと。


  • MEGU Reply #3, 4 years, 4 months ago

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

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

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

    これからDittoに挑戦してみます。ありがとうございます。


  • MEGU Reply #4, 4 years, 4 months ago

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

    assets/snippets/ditto/classes/ditto.class.inc.phpの926行目あたりを
    //$dt = utf8_encode($dt);

    とコメントアウトして表示させると、違う文字化け表示になると思いますので、ブラウザで無理矢理EUC-JPで表示させてやると、そこだけきちんと表示されると思います。
    確認できました。

    で、上のコメントアウトをそのままにしてassets/snippets/ditto/lang/japanese-utf8.inc.phpの16行目あたりを
    setlocale (LC_ALL, 'ja_JP.UTF-8');

    に変更してやれば、文字化けせずに表示されると思います。

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


  • MEGU Reply #5, 4 years, 4 months ago

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

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

    jotも同じ様なのですが、jotは、言語ファイルがないんですよね。。


  • yassi Reply #6, 4 years, 4 months ago

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

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


    case "date":
        setlocale (LC_ALL, 'ja_JP.UTF-8');
        $output = strftime($modifier_value[$i],0+$output);
        break;

    なんて変更で行けないですかね。
    場当たり的ですが。


  • MEGU Reply #7, 4 years, 4 months ago

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

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

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

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

    他のXREAユーザの方はどうなのでしょうか。。うちの環境だけ...?
    また、他のサーバではどうなのでしょうか。。


  • MEGU Reply #8, 4 years, 4 months ago

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

    DateTimeJPで確認しました。
    http://modxcms.com/forums/index.php/topic,12973.0.html
    (※他のスニペット同様、マネージャにログインしていない状態とログインしている状態で
    表示が異なります)。


  • yassi Reply #9, 4 years, 4 months ago

    Reply
    Jotの方、直してやってみたのですが、変化がありませんでした。
    ログイン前は「Sat September 29, 2007」こんな感じで、
    ログイン後は、「�� 9�� 30, 2007」こんな感じです。
    うまくいかなかったようですね、すいません。違う場所なのかな?
    ログインの有無で表示が違うのは、ログインすると何処かで言語ファイルを読み込んで、その中で
    setlocale (LC_ALL, 'ja_JP');

    をやっちゃっているせいではないかと。
    ja_JPという指定は環境によってはEUC-JPを指すと思うんですよね。特にUnix系は。
    ですから、
    setlocale (LC_ALL, 'ja_JP');

    となっている所を全て
    setlocale (LC_ALL, 'ja_JP.UTF-8');

    に変更してやれば文字化けせずに行けるのかなぁ、と想像しています。
    もうこの辺はシステムの中身に関わってくることだと思うので、どなたか詳しい方にご説明いただきたいです。


  • MEGU Reply #10, 4 years, 4 months ago

    Reply
    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での結果ですが。。

    あ、それと。。
    ja_JPという指定は環境によってはEUC-JPを指すと思うんですよね。特にUnix系は。
    上記からすると、utf8用の言語ファイルのロケール設定は「ja_JP」ではなく、「ja_JP.UTF-8」が
    適切と言う理解で、良いのでしょうか。。