ページ 1 / 1
DittoCalの文字化けがまたしても治らない
Posted: 2010年4月29日(木) 22:18
by umeda
MODx Evolution 1.0.3において、DittoCalの文字化けがまたしても治らなくて往生しています。某氏が公開されていた「DittoCalで日本語が上手く表示されないので改造してみた」など試すも曜日の部分が化けてしまってます。以前トライした時も結局うまく動かせず別のCGIを使ってやりすごした事があります。うまく表示されている方もおられるようなのですが・・・アドバイス・解決策をご存知の方おられましたらよろしくお願いいたします

。
Re: DittoCalの文字化けがまたしても治らない
Posted: 2010年4月30日(金) 09:29
by yama
曜日が化けるのはロケールの設定が合ってないのが原因であることが多いです。MODx日本語版ではロケールは日本語仕様で指定してありますが、これがきかない場合はあれこれ試す必要があって面倒かかるので・・
コード: 全て選択
$day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
dittocalの上記箇所を
コード: 全て選択
$weeknames = array('日','月','火','水','木','金','土');
$current_weekname = gmstrftime('%w',$t);
$day_names[$n] = $weeknames[$current_weekname];
こうするとよいかも。(実際動くかどうかは試してないです)
Re: DittoCalの文字化けがまたしても治らない
Posted: 2010年4月30日(金) 12:10
by umeda
いつもお世話になっております。
教えていただいたコードを試させていただきましたが、解決にはいたっておりません。
http://www.speed-fish.com/columns/dev/280
上記URLでいただいたコード中で、
コード: 全て選択
$title = htmlentities(ucfirst($month_name)).' '.$year; #note that some locales don't capitalize month and day names
Dittocalスニペットの上記部分を、下記に
コード: 全て選択
$title = htmlentities(ucfirst($month_name),ENT_QUOTES,$modx->config['modx_charset']).' '.$year; #note that some locales don't capitalize month and day names
また、
コード: 全て選択
$calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
の部分を下記にしておられます。
コード: 全て選択
$calendar .= '<th abbr="'.htmlentities($d,ENT_QUOTES,$modx->config['modx_charset']).'">'.htmlentities($day_name_length < 4 ? mb_substr($d,0,$day_name_length) : $d,ENT_QUOTES,$modx->config['modx_charset']).'</th>';
作成中MODXサイトで設定できる部分はUTF-8になっているはずです。が、どうもDittocalが生成するカレンダー中で文字化けする「月(英語)」「曜日(英語)」の部分が文字化けした文字が更に文字化けしているような印象です(昔のMODXでよくあった感じです)。機能的には日付から記事にしっかりリンクしますし申し分ないのですが・・・。ロケールとなってくると画面表示の手前で差し替える、という感じでは難しいのでしょうか・・・。2バイト文字が難しくても「April」や「Monday」が文字化けるのが私には分かりません。勉強します。参考にさせていただきます、ありがとうございます。
Re: DittoCalの文字化けがまたしても治らない 【解決済み】
Posted: 2010年5月03日(月) 23:01
by umeda
http://hogebar.seesaa.net/article/49062775.html
上記の記事を参考にさせていただきました。
gmstrftimeの戻り値が日本語なのがよくないらしいです。
今回特に曜日が日本語でなくても良かったので以下のようにしました。
コード: 全て選択
- $title = htmlentities(ucfirst($month_name),ENT_QUOTES,$modx->config['modx_charset']).' '.$year.%w;
+ $title = htmlentities($month).'月 '.$year;
コード: 全て選択
- $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
+ $day_names[$n] = ucfirst(date('l',$t));
根本的な解決ではありませんが・・・
yama様にはお忙しい時に情報をありがとうございました。本当にいつもお世話になっております。