DittoCalの文字化けがまたしても治らない  【解決済み】

質問全般・改善要望
返信する
umeda
メンバー
メンバー
記事: 12
登録日時: 2009年10月29日(木) 18:28

DittoCalの文字化けがまたしても治らない

投稿記事 by umeda »

MODx Evolution 1.0.3において、DittoCalの文字化けがまたしても治らなくて往生しています。某氏が公開されていた「DittoCalで日本語が上手く表示されないので改造してみた」など試すも曜日の部分が化けてしまってます。以前トライした時も結局うまく動かせず別のCGIを使ってやりすごした事があります。うまく表示されている方もおられるようなのですが・・・アドバイス・解決策をご存知の方おられましたらよろしくお願いいたします :oops:
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: DittoCalの文字化けがまたしても治らない

投稿記事 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];
こうするとよいかも。(実際動くかどうかは試してないです)
umeda
メンバー
メンバー
記事: 12
登録日時: 2009年10月29日(木) 18:28

Re: DittoCalの文字化けがまたしても治らない

投稿記事 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」が文字化けるのが私には分かりません。勉強します。参考にさせていただきます、ありがとうございます。
umeda
メンバー
メンバー
記事: 12
登録日時: 2009年10月29日(木) 18:28

Re: DittoCalの文字化けがまたしても治らない  【解決済み】

投稿記事 by umeda »

http://hogebar.seesaa.net/article/49062775.html
上記の記事を参考にさせていただきました。

gmstrftimeの戻り値が日本語なのがよくないらしいです。
今回特に曜日が日本語でなくても良かったので以下のようにしました。

コード: 全て選択

-  $title = htmlentities(ucfirst($month_name),ENT_QUOTES,$modx->config['modx_charset']).'&nbsp;'.$year.%w;
+  $title = htmlentities($month).'月&nbsp;'.$year; 

コード: 全て選択

-  $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
+  $day_names[$n] = ucfirst(date('l',$t));
根本的な解決ではありませんが・・・
yama様にはお忙しい時に情報をありがとうございました。本当にいつもお世話になっております。
返信する