2012年8月9日

Windows8のMetroアプリの国際化

ちょっとばかり過ごしやすく

ここ2,3日、気温も湿度も少々低めで過ごしやすいですね。
(あくまでも個人的局所的感想)
このまま冬並に気温が下がらないかなぁ、とか思ってしまいます。

あいかわらず長くなってしまいました

実は書きたいことはAppBar内のボタンのローカライズ。
忘備録的に。
なのに、Metroアプリ全体のことになってしまったりして。
あいかわらずまとめられないんです。

Metroアプリの国際化

国際化、というか、ローカライズ。
基本的にMetroアプリのローカライズっていうのは、リソースのディレクトリを作ってそこに文字列リソースファイルなり画像なり入れることでローカライズできたりするんです。
実は結構楽ちん。

ml01

こんな感じで、ロケールのディレクトリ作って、そこにファイルを放り込んでおく。
ファイルの内容はこうなってたり。

ml02

ml03

日本語と英語。
相変わらずおバカ系の設定。

xamlファイルで指定する

で、MainPage.xamlにこんな風に書いたりするわけです。

<Page
x:Class="LocalizeTest.MainPage"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LocalizeTest"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
<TextBlock x:Uid="MainTitle" x:Name="mainTitle" FontSize="50" TextAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Page>

んでおもむろに実行。


ml04


日本語で出てます。
使用言語を英語に変えると……。


ml05


ml06


出ました!
英語になっています。
xamlファイル内のElementで、x:Uidで指定した文字列と、プロパティ名を . でつなげたものを使用する文字列として扱う、という決まりがあります。
なので、xUid=”MainTitle”を指定し、MainTitle.Textが宣言されてた場合、x:Uidが指定してあるElementのTextプロパティがresxファイルで指定してある文字列と置き換えられます。


コード内で読み込む


コード内でリソース内の文字列を読む場合、ResourceLoaderを使用します。
MainPage.xaml.csを以下のように書き換えます。

namespace LocalizeTest
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
ResourceLoader resources = new ResourceLoader();
string txt = resources.GetString("AppName");
mainTitle.Text = txt;
}
}
}

そうして実行してみると。


ml07


このように表示される文字列が変わっています。
ResourceLoader.GetStringによって取得した文字列に置き換えられているんです。


アプリケーション名の国際化


アプリケーション名は簡単です。
appmanifestファイルで指定するので、ここをローカライズが効くように設定すればいいのです。
具体的には上記のようなリソースにしてあるのであれば、表示名の欄を「ms-resource:AppName」とします。


ml08


これで、スタートに並ぶアプリケーション名をローカライズ表示させることができます。


AppBarのボタンの国際化


AppBarのボタンは一筋縄ではいきません。
先のリソース名の設定方法に従い、「AB_Help.AutomationProperties.Name」とかキーを設定しても、「そんなプロパティ知らんよ」とかいわれるんです。
なんだかねぇ。ふぅ。


x:Uid=”AB_Help””の場合、AppBarのボタン名は「AB_Help.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name」でキーを作る必要があります。
長っ。


ml11


ml09


ml10.ng


見にくいかもしれませんが、ボタンの文字が変わってると思います。


あとは画像


あとは画像なんでしょうけど……。
これはもういいでしょう。
resxファイルの代わりに画像ファイルを置いて、サブパスで見るようにすればいいんです。
楽勝です。


結局暑いんですけどー


これ書くのに2時間位かかってますし……。
暑いです。
某スレイヤーズみたくマント羽織ってその中で氷の呪文とかかけたいくらい。
あーうー。

0 件のコメント:

コメントを投稿