古事連記帖

趣味のこと、技術的なこと、適当につらつら書きます。

日本語フォントが中華フォントにならないために その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