We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19033
    • 892 Posts
    こんにちは。よろしくお願い致します。

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

    どうぞよろしくお願い致します。また、「ここ読めリンク」などありましたら、
    教えて頂けると嬉しいです。。よろしくお願いします。。
      • 33072
      • 25 Posts
      言語は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でもおそらく同じような感じではないかと。 grin
        • 19033
        • 892 Posts
        yassiさん。ありがとうございます。

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

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

        これからDittoに挑戦してみます。ありがとうございます。
          • 19033
          • 892 Posts
          こんにちは。よろしくお願いします。

          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」になるのですが...。
          なんか変ですよね??
            • 19033
            • 892 Posts
            すみません。Ditto 解決しました。

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

            jotも同じ様なのですが、jotは、言語ファイルがないんですよね。。
              • 33072
              • 25 Posts
              あ、すいません、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;

              なんて変更で行けないですかね。
              場当たり的ですが。 grin
                • 19033
                • 892 Posts
                yassiさん。どうもありがとうございます。

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

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

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

                他のXREAユーザの方はどうなのでしょうか。。うちの環境だけ...?
                また、他のサーバではどうなのでしょうか。。
                  • 19033
                  • 892 Posts
                  他のスニペットの出力でも、ロケールに基づく日付の表示が上手く表示できないことを確認しました。

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

                    に変更してやれば文字化けせずに行けるのかなぁ、と想像しています。
                    もうこの辺はシステムの中身に関わってくることだと思うので、どなたか詳しい方にご説明いただきたいです。
                      • 19033
                      • 892 Posts
                      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」が
                      適切と言う理解で、良いのでしょうか。。