tmytのらくがき

個人の日記レベルです

XamlのLanguage

id:ChiiAyano

日本語フォントは美しいYu Gothicなのに、WP7の仕様のために例え日本語ロケールでも中華フォントになってて悲しい思いをします。

その修正をするために、各PageのxamlのPage要素に「Language="ja-jp"」の属性をぶち込む作業は地道で仕方がないです。けど、多言語対応でもし中国語も対応したいというときに、中国人にとっても悲しい思いをすることになるでしょう。

日本語フォントが中華フォントにならないために - 古事連記帖

というエントリをしていたのにid:ch3cooh393


こういうコメントしてたので、まぁ出来なくはないけど…という苦し紛れエントリ。

CultureInfoクラスは引数無しコンストラクタを持っていないのでXAMLからインスタンス化できない。なので、ResourcesにCultureInfoクラスを入れることが出来ない。仕方ないのでラッパークラスを書く…

    public class CultureWrapper
    {
        // 本当はこうしたいけどStringからXmlLanguageへのコンバータを提供しないといけない
        //public CultureInfo CurrentCulture
        //{
        //    get { return CultureInfo.CurrentCulture; }
        //}
        // それはそれで面倒なのでこっちにしてみる
        public XmlLanguage CurrentLanguage
        {
            get { return XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name); }
        }
    }

これをApp.xaml.csの最後あたりに突っ込んでおいて、App.xamlに適当に…

    <Application.Resources>
        <PhoneApp9:CultureWrapper x:Key="culture" />
    </Application.Resources>

こんな感じで書いておけばあとはLanguageを設定したいPhoneApplicationPageのXaml

<phone:PhoneApplicationPage 
    Language="{Binding Source={StaticResource culture},Path=CurrentLanguage}"
    x:Class="PhoneApp9.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" (省略) />

とかするといいんじゃないでしょうか