Hatena::ブログ(Diary)

古事連書帖 このページをアンテナに追加 RSSフィード

2011-11-23

日本語フォントが中華フォントにならないために その2

先日の記事では、

using System.Windows.Markup;
using System.Globalization;
//省略…
public MainPage()
{
	InitializeComponent();
	this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.Name);
}

を各Pageのコンストラクターにこういう感じで書くと、言語によってフォントを適切に出来るとご紹介しました。


今回はまた新しいやり方。今度はもっと楽にできます。

先ほどの記事のコメント欄にて、

Shintaroさん

私も日本語フォントの切り替えについて調べていたのですが、PhoneAppicationPage クラスではなく、PhoneApplicationFrame のLanguage プロパティを変更することで、アプリケーション全体でフォントを切り替えられることを確認しました。

というコメントを頂きました。ご紹介します。

App.xaml.csの該当する場所(Application_Launchingメソッド)に以下のように記述します。

using System.Windows.Markup;
using System.Globalization;
//省略…
private void Application_Launching(object sender, LaunchingEventArgs e)
{
	this.RootFrame.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.Name);
}

こちらでも試したところ、確かにPageのLanguageを設定しなくともフォントが適切に切り替わりました。


PageおよびFrameの言語はどうなっているのか確認してみます。

適当にブレークポイントを置いた上で、イミディエイトウィンドウで確認してみます。

まずはFrameから。

?(Application.Current as App).RootFrame.Language

{System.Windows.Markup.XmlLanguage}

_languageTag: "ja-jp"

IetfLanguageTag: "ja-jp"

設定したとおり、きちんと「ja-jp」になっています。

ではPageを見てみると、

?this.Language

{System.Windows.Markup.XmlLanguage}

_languageTag: "en-us"

IetfLanguageTag: "en-us"

こちらは「en-us」と、今まで設定しなかった時と同じ設定です。


はて、これは一体?と思ってしまいますが、Frameの方の言語設定が優先されるということのようです。

(ページとフレームについては高橋さんの「プログラミング Windows Phone」の184ページをご参照ください ;-)


これでもっと簡単に言語設定ができるようになりました。

Shintaroさんありがとうございます。 id:shintarowakayama

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証