酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Phone アプリケーションのプロジェクトテンプレートによって生成される瞬間に既に美しい日本語フォントが使用されるようにする

MSエバンジェリストの大西さんのブログで、表示言語が日本語になっている場合に中華フォントで表示される場合がある問題の対応として対応策がドキュメント化されたという報告がありました。

http://msdn.microsoft.com/en-us/library/hh202920(v=vs.92).aspx
Windows Phone で既定のアプリケーションテンプレートを使った場合に、日本語のフォントが正しく選択されない問題がありますが、対処方法が公式情報としてMSDNライブラリに公開されています。

Font Support for Windows Phone のドキュメントアップデート - Akira Onishi's weblog - Site Home - MSDN Blogs

過去に「言語設定に適切なフォントを使用させる – CH3COOH(酢酸)の実験室」でも書いた通り、以下のようにApp.xaml.csにてRootFrameを生成した時点でLanguageプロパティを指定する方法が推奨されています。

// このメソッドに新たなコードを追加しないでください
private void InitializePhoneApplication() {
    if (phoneApplicationInitialized)
        return;

    // フレームを作成しますが、まだ RootVisual に設定しないでください。
    // これによって、アプリケーションがレンダリングできる状態になるまで、
    // スプラッシュ スクリーンをアクティブなままにすることができます。
    RootFrame = new PhoneApplicationFrame();
    RootFrame.Language = System.Windows.Markup.XmlLanguage.GetLanguage(
        System.Globalization.CultureInfo.CurrentUICulture.Name);
    RootFrame.Navigated += CompleteInitializePhoneApplication;

例えば米国人が表示言語を日本語に変更してわざわざデザインのチェックをしないだろう等、諸々の事情があるのも判るのですが、何故プロジェクトテンプレートで対応してくれなかったんだろうとちょっと怒っています。

……ってことで、前置きが長くなってしまいましたが今日はデフォルトのプロジェクトテンプレートを弄る方法を紹介します。

プロジェクトテンプレートはどこに格納されているのか?

Silverlight for Windows PhoneのプロジェクトテンプレートはWindows Phone SDK 7.1をインストールしている場合、下記のディレクトリに格納されています。

  • 64bit Windowsの場合
  • 32bit Windowsの場合

このように各テンプレートごとにzipで固められており、それぞれをカスタマイズしたい場合はzipを解凍し、変更し、zipで圧縮する作業が必要になります。

実際にプロジェクトファイルを変更する

一番シンプルなプロジェクトテンプレートである「Windows Phone アプリケーション」の内容は、以下のzipファイルに格納されています。

  • WindowsPhoneApplicationTemplate.zip

このzipファイルを解凍します。

App.xaml.csを開いて、表題のRootFrame.Languageプロパティへの設定処理を追加してみましょう。変更後、zipで圧縮して元あったProjectTemplatesディレクトリに上書きをします。

プロジェクトテンプレートの変更を反映させる

プロジェクトテンプレートは結構キャッシュされているようで、devenvコマンドでプロジェクトテンプレートを明確にアップデートしてあげる必要があります。

[スタート]→[すべてのプログラム]→[Microsoft Visual Studio 2010]→[Visual Studio Tools]→[Visual Studio コマンド プロンプト (2010)]を管理者権限で起動し、以下のコマンドを入力します。

devenv /installvstemplates

実行すると約5分くらい時間がかかってしまうようです。以上です。