Windows Phone アプリの中華フォント対策

#wpdev_jp

8/16 改訂

今更記事でスイマセン。そもそもWindows Phone 8.xでは、日本語の標準表示フォントとして、YuGothicが使われていますが、英語アプリに対してはそこで使われる文字が日本語か中国語か韓国語か特定できないため、日本語環境であっても日中韓対応フォントであるYaheiが使われます。これがいわゆる中華フォントです。

wp81cfont

アプリケーションの標準言語を日本語にしてくれればいいのですがさすがにそれは無理。ただ、アプリケーションの中で「起動環境の言語をアプリの標準言語にする」という実装を入れることで回避することができます。

Windows phone 8.1 の2つのプラットフォーム

Windows Phone 8.1 の世代になってアプリケーションプラットフォームが大きく2つになりました。

  • Windows Phone アプリケーション (WinRTベース、Universal Application対応)
  • Silverlight 8.0/8.1(これまでのWindows Phone アプリケーション)

Silverlight アプリについては、プロジェクトテンプレートに言語処理が入っていますが、今の処理では日本語以外のアプリは中華フォントになってしまいます。日本語以外のアプリでも日本語環境では日本語フォントを使うようにするには、こちらの方法で対処します。

  → 各国のUIフォントに対するためのより簡単な対応方法

 

Windows Phone 8.1 アプリケーションでの対処方法

ということで、前半の WinRTベースのアプリケーションの中華フォント対策方法。すでに記事にしていただいている方もいらっしゃると思いますが(感謝!)これまでと同じような対策を実装します。まったくもー。

protected override void OnLaunched(LaunchActivatedEventArgs e)
{

    Frame rootFrame = Window.Current.Content as Frame;

    // ウィンドウに既にコンテンツが表示されている場合は、アプリケーションの初期化を繰り返さずに、
// ウィンドウがアクティブであることだけを確認してください
    if (rootFrame == null)
{
        // ナビゲーション コンテキストとして動作するフレームを作成し、最初のページに移動します
       rootFrame = new Frame(); 

       // 既定の言語を設定します
       rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0]; 8/16 改訂

        // TODO: この値をアプリケーションに適切なキャッシュ サイズに変更します
        rootFrame.CacheSize = 1; 

       Window.Current.Content = rootFrame;
}

  :

   // 現在のウィンドウがアクティブであることを確認します
    Window.Current.Activate();
}

wp81font

さて、対応してもらわないと。Silverlight 側も実は問題なんだよなー・。