ちょっとばかり過ごしやすく
ここ2,3日、気温も湿度も少々低めで過ごしやすいですね。
(あくまでも個人的局所的感想)
このまま冬並に気温が下がらないかなぁ、とか思ってしまいます。
あいかわらず長くなってしまいました
実は書きたいことはAppBar内のボタンのローカライズ。
忘備録的に。
なのに、Metroアプリ全体のことになってしまったりして。
あいかわらずまとめられないんです。
Metroアプリの国際化
国際化、というか、ローカライズ。
基本的にMetroアプリのローカライズっていうのは、リソースのディレクトリを作ってそこに文字列リソースファイルなり画像なり入れることでローカライズできたりするんです。
実は結構楽ちん。
こんな感じで、ロケールのディレクトリ作って、そこにファイルを放り込んでおく。
ファイルの内容はこうなってたり。
日本語と英語。
相変わらずおバカ系の設定。
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>
んでおもむろに実行。
日本語で出てます。
使用言語を英語に変えると……。
出ました!
英語になっています。
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;
}
}
}
そうして実行してみると。
このように表示される文字列が変わっています。
ResourceLoader.GetStringによって取得した文字列に置き換えられているんです。
アプリケーション名の国際化
アプリケーション名は簡単です。
appmanifestファイルで指定するので、ここをローカライズが効くように設定すればいいのです。
具体的には上記のようなリソースにしてあるのであれば、表示名の欄を「ms-resource:AppName」とします。
これで、スタートに並ぶアプリケーション名をローカライズ表示させることができます。
AppBarのボタンの国際化
AppBarのボタンは一筋縄ではいきません。
先のリソース名の設定方法に従い、「AB_Help.AutomationProperties.Name」とかキーを設定しても、「そんなプロパティ知らんよ」とかいわれるんです。
なんだかねぇ。ふぅ。
x:Uid=”AB_Help””の場合、AppBarのボタン名は「AB_Help.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name」でキーを作る必要があります。
長っ。
見にくいかもしれませんが、ボタンの文字が変わってると思います。
あとは画像
あとは画像なんでしょうけど……。
これはもういいでしょう。
resxファイルの代わりに画像ファイルを置いて、サブパスで見るようにすればいいんです。
楽勝です。
結局暑いんですけどー
これ書くのに2時間位かかってますし……。
暑いです。
某スレイヤーズみたくマント羽織ってその中で氷の呪文とかかけたいくらい。
あーうー。
0 件のコメント:
コメントを投稿