Topic: [プラグイン] locale setting (MODxのデフォルトのロケールを設定する)  (Read 8172 times)

Pages: [1]   Go Down

#1: 28-Mar-2008, 09:32 AM


MEGU
Posts: 890

WWW
概要
MODxは、現在デフォルトのロケール設定が英語になっています。そのため
言語ファイルを持たない、Jot などのスニペットで、ロケールに基づく日付を利用しても
日本語の表示になりません。このプラグインは、その問題を解決します。
多国語に対応しています。

(説明、変だったらつっこんでぇ~)

参照トピ:
http://modxcms.com/forums/index.php/topic,18623.0.html

ダウンロード(Repository登録済み)



インストールとアンインストール

インストール
1.リソース管理>プラグイン>プラグインの作成 とすすみ以下の要綱でプラグインを作成します
2. プラグイン名 locale setting (任意)
   システムイベント OnWebPageInit
   プラグインコード ダウンロードしたファイルの中身をそのまま貼り付けます

アンインストール
1.リソース管理>プラグイン で locale setting を開き 削除します



注意事項

●manager/includes/document.parser.class.inc.php 19行目付近に
 以下を加えている場合は、削除します(オリジナルに戻す)

Code:
setlocale(LC_ALL,"ja_JP.UTF-8");



リソースの情報

作者ZeRo
リソース名locale setting
バージョン1.0
ライセンスGPL
動作環境MODx 0.9.6+
リソースの種別プラグイン
タグlocale plugin
« Last Edit: 2-Apr-2008, 04:18 AM by MEGU »

#2: 2-Apr-2008, 10:22 PM


MEGU
Posts: 890

WWW
こんにちは。

リポジトリに登録させて頂きました。
http://modxcms.com/Locale-Setting-1956.html

また、このプラグインを(あるいはこの方法を)次期MODxに取り入れてもらえるよう、
コアチームに申請してみました。

#3: 8-Apr-2008, 03:02 AM


ZeRo
Posts: 428

WWW
あら、、今日みたときに評価が・・・アレだったんで・・・ちょっと方法を変更したバージョン(setting2?)を以下に。

やることは一緒ですが、Langファイルを読み込んでの方式からプラグインの設定でロケールコードを指定する方法です。
余分な言語ファイルを読み出さない分ちょっとサーバに優しいんですが、ロケールコードを自身で指定する分ちょっと面倒かも。

コードは短いので、以下に。
Code:
/*
 * LOCALE SETTING Plugin2
 *
 * 2008/04/08 ZeRo ver1.0a
 *
 * Event:OnWebPageInit
 * paramter:&locale=locale;text;ja_JP.utf-8
 * or
 * $locale="ja_JP.utf-8";
 *
 */
$e = & $modx->Event;
// $locale="ja_JP.utf-8"; 

if  ($e->name == "OnWebPageInit" && !empty($locale) )  {
 setlocale(LC_TIME,$locale);
}

設定タブのプラグインの設定(※添付の画像を参考)に、&locale=locale;text;ja_JP.utf-8 を入れてもらうとOKですが、よくわからないという方は以下のコメント行の部分を外してください。

Code:
// $locale="ja_JP.utf-8";

Code:
$locale="ja_JP.utf-8";
にします。

なお、ロケールの設定はそれぞれの環境に合わせてください。
Windowsだと、JapaneseもしくはJapanese_japan.utf-8とかに



* pluginview.jpg (10.61 KB, 400x239 - viewed 321 times.)

#4: 8-Apr-2008, 07:22 AM


MEGU
Posts: 890

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

うんとー。Ver2 ?というスタンスで良いのでしょうか。
バージョンアップ板として登録しちゃって良いですか?

言語ファイルで、設定している
setlocale (LC_ALL, "ja_JP.UTF-8");
緑の太字の部分を書けばいいって事ですよね。

#5: 8-Apr-2008, 08:38 AM


ZeRo
Posts: 428

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

うんとー。Ver2 ?というスタンスで良いのでしょうか。
バージョンアップ板として登録しちゃって良いですか?
v2でいいですかねぇ、まったくやり方が違うけど・・・・まあ、お任せしちゃいます。
別にしてもいいですし・・・。

Quote
言語ファイルで、設定している
setlocale (LC_ALL, "ja_JP.UTF-8");
緑の太字の部分を書けばいいって事ですよね。

そ、その通りです。緑の部分をプラグインの設定で登録するか、$localeのコメントを外してもらうか、どちらかで・・。

#6: 18-Apr-2008, 05:31 AM


ZeRo
Posts: 428

WWW
私信になっちゃいますが・・・。
すいませんが、
Quote
あら、、今日みたときに評価が・・・アレだったんで・

このアレなんですけど、ResourceからA-Zで辿っていくと1つ前?のものが表示されてしまってるようです。
ココでリンクされているところとURLがちょっと違うのに今頃気がつきました。

できれば、ここのリンクのURLがResourceで辿ったときにも表示されると嬉しいんですが・・・。

v2はココに放置でも構いません(^^;;

#7: 18-Apr-2008, 08:45 AM


MEGU
Posts: 890

WWW
ZeRoさん。そぉなんですよぉ。。ごめんなさい。しくしくしく。。
これ、最初に登録してしまって、名前間違えてしまったので、
削除しようと思ったら、削除するメニューがないのです。
で、新しく、正しい名前で登録したんですけど。。

登録したリポジトリの削除って、どうすればいいんでしょう。。
どこで聞いて良いかもわからないので、とりあえず、どっかで聞いてこようかな。。
« Last Edit: 18-Apr-2008, 08:55 AM by MEGU »

#8: 18-Apr-2008, 09:33 AM


ZeRo
Posts: 428

WWW
あ、そうなんですかぁ
うーむ、困りましたねぇ

#9: 18-Apr-2008, 11:46 PM


MEGU
Posts: 890

WWW
いま、どうしたらいいか聞いてるんですけど。。
管理者じゃないと削除できないみたい。

で、lacale...の方は、最初に登録してしまった方で、名前間違えたんで、
非推奨のマークを入れてあるんです。それで、あたらしく、local...で
登録してあって、それも、ResourceからA-Zで辿っていくと、下の方に
出てきてはいるのです。。でも、a と o なので、local...の方が、下に
出ているという。。ぅぅぅぅぅ。。。

#10: 20-Apr-2008, 12:36 AM


MEGU
Posts: 890

WWW
間違えた方、削除してもらえるみたいですぅ~。
気をつけます。。

あと、V2の方は、バージョンアップというより、同じ事をするべつの
リソースという感じですよね。エンドユーザからすると、最初の方が、
たんに、入れるだけなので、使いやすいと思いますが、中級者以上の
方は、V2の方を好むかも知れないですね。

同じLocal Setting の中に、別バージョン(パターン)として、
入れておく...?

#11: 20-Apr-2008, 10:13 PM


ZeRo
Posts: 428

WWW
ありがとうございますだ。
v2どうしましょーかねぇ、ココでこのままでも・・。
v1の方がお手軽さはありますね。

#12: 29-Jun-2008, 01:52 AM


MEGU
Posts: 890

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

locale settingを導入していると、ある環境下で、一部の文字が文字化けすることを見つけました。
検証したのは、さくらインターネットとXREA+です。

さくらインターネットの方は、サーバーのロケール設定が有効ではありません。
いっぽう、XREA+は、サーバーのロケール設定が有効です。

文字化けするのは、PHxの「strip」を使ったときだけに出る模様です。
従って、PHxファンクションを利用している、Ditto及び、Jotなどのなかで、
「strip」を利用していると文字化けします。

簡単な例を作ってみました。
・さくらインターネット
 http://www.liolion.info/modx/dittotest.html
・XREA+
 http://www.liolion.net/dittotest.html
(外見違いますが、さくらで文字化けしている文章を使っています。)

Ditto call
Code:
[[Ditto? &language=`japanese-utf8` &parents=`61` &tpl=`ditto_phx_test` &display=`all`]]
チャンク
Code:
<h2>[+longtitle+]</h2>
<p>[+introtext:notags:strip+]</p>

上記の「strip」を取れば、さくらでも、文字化けしません。どう対処したらよいでしょうか。。

1.ロケール設定が有効でない、サーバーには、local setting は導入しない。
2.「strip」をあきらめる
3.......

なお、Dittoは、最新バージョン(2.1)じゃないんで、後でまた試してみますが、
Jotでも同じ現象は出ているんで、stripを使う限り、同じかも。。

なにか、手がかりがありましたら、よろしくお願いいたします。。

#13: 29-Jun-2008, 02:03 AM


MEGU
Posts: 890

WWW
別にDittoにしなくても良かったんでした...。

[*introtext:notags:strip*]

で、さくらの方は、文字化けし、XREA+は、文字化けしません。
一応、直前のポストの例の、水平線の下の部分は、[*introtext:notags:strip*]で
出したものです。水平線の上は、直前のポストの通り、Ditto とチャンクで出したものです。

#14: 29-Jun-2008, 08:47 AM


ZeRo
Posts: 428

WWW
さっぱり、わからんっすね
PHxのstripの処理は改行コード(CR/LF)と空白文字、タブコードを半角空白にしている処理みたいなんですよね。
これとlocaleの設定が絡むっていうことがまったくわからん感じです。

試しに、Ver2.0って書いた言語ファイルを呼び出すものじゃないバージョンで、LC_ALLではなくてLC_TIMEで行っても同じ事象になりますでしょうか?
LC_TIMEで指定すれば、strftimeのときのみに影響するだけだと思うので、これでもなるとすると・・・PHPそのものが疑わしいような・・・。
もちろん、まあPHP本体の不具合もありえなくはないので、環境の違いがPHPのバージョンも含まれているとしたらその可能性はあるかもです。
ロケールの設定で影響されるのは下記のマニュアルの記載の通りという前提ですが・・・。
http://manual.atseason.com/function.setlocale.html

#15: 29-Jun-2008, 09:37 AM


MEGU
Posts: 890

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

まず、整理しますと。
私がさきほど試していたのは、ZeRoさんが、
一番最初に作って下さったもので、リポジトリに登録してあるものです。
(プラグイン設定を書かないヤツ)。これだと化けていました。

今、以下のコードでやってみたら、文字化け直りました!ありがとうございます。
Code:
/*
 * LOCALE SETTING Plugin2
 *
 * 2008/04/08 ZeRo ver1.0a
 *
 * Event:OnWebPageInit
 * paramter:&locale=locale;text;ja_JP.utf-8
 * or
 * $locale="ja_JP.utf-8";
 *
 */
$e = & $modx->Event;
// $locale="ja_JP.utf-8"; 

if  ($e->name == "OnWebPageInit" && !empty($locale) )  {
 setlocale(LC_TIME,$locale);
}
↑プラグイン設定に「&locale=locale;text;ja_JP.utf-8」と書く。

これは、以下でZeRoさんが書いて下さったコード(そのまま)です。
http://modxcms.com/forums/index.php/topic,24251.msg151025.html#msg151025

ということは、登録してあるのを非推奨にして、上記のコードを登録し直した方がよいですよね。
« Last Edit: 29-Jun-2008, 09:54 AM by MEGU »

#16: 29-Jun-2008, 10:51 AM


ZeRo
Posts: 428

WWW
ということは、LC_TIMEをLC_ALLにすると 文字化け起こります???
LC_ALLで影響が出るとすると、strftime以外の関数がPHxで使われているstr系でなんかあるってことに・・・こうなるとPHPそのものが疑わしくなってくるような・・・。
strtoupperとか日本語で関係ないですしねぇ・・・マニュアルと実際のPHPの動きが違う可能性もあるかも。

とりあえず、日時だけであればLC_TIMEの指定の方が無難ですねぇ。 
後は通貨ぐらいしか必要ないかなぁ と。

#17: 29-Jun-2008, 11:01 AM


MEGU
Posts: 890

WWW
こんにちは。

Quote
ということは、LC_TIMEをLC_ALLにすると 文字化け起こります???
いえ。以下にしてやってみましたが、文字化けしません。
Code:
if  ($e->name == "OnWebPageInit" && !empty($locale) )  {
 setlocale(LC_ALL,$locale);

...ということで、LC_TIME と LC_ALL とどちらにしておいた方がいいのでしょうか。。
Pages: [1]   Go Up
0 Members and 1 Guest are viewing this topic.