Hatena::ブログ(Diary)

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

2011-11-18

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

日本語フォントは美しい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の方がいいかもしれないという指摘をいただきました。

blog:2011:11:languageはコードビハインドで指定するべきかも [mecab Personal Wiki]

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

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

ShintaroShintaro 2011/11/23 16:41 はじめまして。Shintaro と申します。
私も日本語フォントの切り替えについて調べていたのですが、PhoneAppicationPage クラスではなく、PhoneApplicationFrame のLanguage プロパティを変更することで、アプリケーション全体でフォントを切り替えられることを確認しました。
具体的には App.xaml.cs の Application_Launching に以下のコードを追記します。

private void Application_Launching(object sender, LaunchingEventArgs e)
{
this.RootFrame.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentUICulture.Name);
}

ChiiAyanoChiiAyano 2011/11/23 22:58 コメントありがとうございます。
確認しました。こっちの方が確かに簡単です!ありがとうございました。
新しく記事を作り紹介させて頂きました。

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


画像認証

トラックバック - http://d.hatena.ne.jp/ChiiAyano/20111118/p1