by WebSurfer
2010年5月23日 21:56
ウィジェットのカレンダーは、デフォルトでは左の写真のように、(1) 月曜日から始まる、(2) 曜日が二文字になる、(3) タイトルが "5月 2010" のようになります。
日本人にはあまりなじみのない表示で、イマイチ気に入らないので、修正してみました。
修正した結果がウィジェット(左サイドのパネル)の中に表示されているカレンダーです。
上記 (1) および (2) の原因は、\widgets\Calendar\widget.ascx で PostCalendar(Calendar コントロールを継承したカスタムコントロール)の
FirstDayOfWeek, DayNameFormat プロパティがそれぞれ Monday, FirstTwoLetters となっているからです。
それを直接書き換えて、Sunday, FirstLetter とすれば (1), (2) の問題は解決します。
でも、国際化対応を考えて(笑)、ブラウザの言語設定が ja-JP または ja の時のみ対応するようにしました。
具体的には、\widgets\Calendar\widget.ascx.cs の LoadWidget メソッドに以下のコードを追加しました。
System.Globalization.CultureInfo ci =
System.Threading.Thread.CurrentThread.CurrentUICulture;
if (ci.Name == "ja-JP" || ci.Name == "ja")
{
this.PostCalendar1.DayNameFormat = DayNameFormat.FirstLetter;
this.PostCalendar1.FirstDayOfWeek = FirstDayOfWeek.Sunday;
}
そうすると、カレンダーの表示幅が狭くなってしまうので、\widgets\Calendar\widget.ascx で PostCalendar.Width プロパティを設定して調整しました。
上記 (3) の原因は、\App_Code\Controls\PostCalendar.cs でタイトル行をレンダリングする時 VisibleDate.ToString("MMMM yyyy") としているからです。
その部分を以下のように変更しました。
//writer.Write("</td><td style=\"text-align:center;width:100px\">" +
// VisibleDate.ToString("MMMM yyyy") +
// "</td><td align=\"right\">");
// 上記のコードを以下のように変更
System.Globalization.CultureInfo ci =
System.Threading.Thread.CurrentThread.CurrentUICulture;
if (ci.Name == "ja-JP" || ci.Name == "ja")
{
writer.Write("</td><td style=\"text-align:center;width:100px\">" +
VisibleDate.ToString("yyyy年M月") +
"</td><td align=\"right\">");
}
else
{
writer.Write("</td><td style=\"text-align:center;width:100px\">" +
VisibleDate.ToString("MMMM yyyy") +
"</td><td align=\"right\">");
}
ウィジェットのカレンダーの中にある "View posts in large calendar" というリンクをクリックすると大きなカレンダーが表示されるのですが、
それには上記 (1), (2), (3) の問題はありません。
何故なら、FirstDayOfWeek, DayNameFormat プロパティはデフォルトになっており、
タイトル行は Calendar コントロール自体ものを表示(ShowTitle プロパティを true に設定)しているからです。
ウィジェットのカレンダーの方で、わざわざデフォルトを変更しているのは何か理由があって、それをいじると予期せぬ副作用があるかもしれませんので、しばらく注意して様子を見たいと思っています。