古事連記帖

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

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

日本語フォントは美しいYu Gothicなのに、WP7の仕様のために例え日本語ロケールでも中華フォントになってて悲しい思いをします。
その修正をするために、各PageのxamlのPage要素に「Language="ja-jp"」の属性をぶち込む作業は地道で仕方がないです。けど、多言語対応でもし中国語も対応したいというときに、中国人にとっても悲しい思いをすることになるでしょう。


そこで僕はこうしました。
コードで各Pageのコンストラクター

// (2011/11/20修正)↓だと、地域設定が日本以外だと中華フォントになってしまう
//this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name);
//こっちで安定
this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.Name);

を入れることにしました。これで自動的にシステムのロケール設定に応じて適切に変わることでしょう。


Tangoではぜひこの面倒な作業を解消させて下さい ;-)

追記 (2011/11/20)

コンストラクターに渡したデータのうち、CultureInfo.CurrentCulture.Nameではなく、CultureInfo.CurrentUICulture.Nameの方がいいかもしれないという指摘をいただきました。



この指摘を受けて、試しにエミュ上で実験してみました。「表示言語」を日本語に、「地域設定」を英語(米国)にして、

Debug.WriteLine(CultureInfo.CurrentCulture.Name);
Debug.WriteLine(CultureInfo.CurrentUICulture.Name);

を呼び出して実行させてみると、

en-US
ja-JP

という結果が出ました。確かに違います。
なので、UICultureの方を使う方が良い感じがします。


また、このコードのビヘイビアを作った方もいます。


Page.Language を設定する Behavior « WP7 私的 Dev ノート


さらに、id:tmytもやっていました。
XamlのLanguage - tmytのらくがき


そして、コンストラクターに既に上記のコードが書かれているようになるテンプレートパッチが用意されました。


各国のUIフォントに対するための対応方法 - 高橋 忍のブログ - Site Home - MSDN Blogs