#wpdev_jp

いろいろ考えなおして 8/16 修正

Windows Phone はもともと、すべての言語の表記ができるようになっているため、特別フォントに関することは気にしなくていい仕様になっています。

Windows Phone のフォントの仕組みと中華フォント問題

全言語の表記を実現するために、複数の言語に対応したフォントがいくつか標準で入っており、そのフォントを使って文字の表記をしています。

代表的なのが1バイト文字を表現する Segoe フォントと、2バイト文字(≒ 日本語、中国語、韓国語)を表現するための Yahei フォントです。

これできちんと各言語の文字を表記できていればよかったのですが、残念ながら一部問題が出てしまいました。それが日本語です。基本的には日本語も正しく表記されますが、一部の漢字が「中国語と同じ文字である」と判定され同じ文字コードが割り振られてしまっています。そして、その漢字の形はYahei フォントの中では中国語の漢字の形が使われているため、結果的に日本語の中に中国語の文字が現れることになります。

これがいわゆる 「中華フォント問題」の状況です。下図右参照

  fontproblem

 

現在のアプリの表示言語の考え方

日本語の問題を解決するには、日本語アプリはアプリの表示言語を日本語にするという設定です。拡張するならばある国の設定のアプリはアプリの設定言語を祖の言語に合わせるという設定をするだけです。これが現在のWindows ストアアプリケーションの基本的な考え方になっているようです。

実際に、この対処方法は既にテンプレートに実装せています。

  • Windows Phone Silverlight アプリケーション  実装済み
  • Windows 8.1 アプリケーション  実装済み
  • Windows Phone 8.1 アプリケーション 非実装

そうなんです、なぜか 8.1のアプリは非実装(ここはいま Visual Stuido 2013 のバグとして登録中)

* ちなみに、Windows Phone 7.x の頃のテンプレートにはこの処理が入っていなかったため、日本語対応しているアプリもこの問題が発生しているものがあります。そういったアプリに対しては、都度お願いしてこの処理を入れていただくようにお願いしています。

 

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

そんなわけで抜け落ちている Windows Phone 8.1 にその処理を追加するとこんな感じ。

App.xams.cs にこの太字の処理を入れる

        // ナビゲーション コンテキストとして動作するフレームを作成し、最初のページに移動します
       rootFrame = new Frame(); 

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

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

 

海外のアプリを日本語環境で表示した場合

海外のアプリが多言語対応をしていて日本語対応もしていれば、アプリの言語は日本語になるので上記の処理で表示言語が日本語になり中華フォント問題は発生しません。

ただ、純粋な(例えば)英語アプリだとその中で日本語を表示した場合は中華フォントになってしまいます。そんな場合は

「日本語対応してください」と依頼する

のが正しいプロセスになりますね。上記の問題をバグとして直してもらうことを想定しつつ、アプリによっては日本語対応をお願いしていきます。