かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Windows ストア アプリを多言語対応してみた #win8dev_jp

先日ドキュメント等は見たので、単純にアプリケーション中の文字列を多言語対応してみました。スナップ表示への対応とか中断への対応とかはいらないので、一番プレーンな[新しいアプリケーション]ではじめてみました。

リソースを格納するフォルダを作成する

無くても動くみたいですが、気分的に分けておきたいのでStringsというフォルダをプロジェクトに作ります。その中にja-JPフォルダを作って、そこにResources.reswファイルを作成します。

Resources.reswという名前のリソースは、どうも特別扱いみたいで、こいつに文字列登録しとけば楽に使えるみたいです。

文字列を設定する

これは悩む人はいないと思うので説明は省略っと。

プログラムから使う

ボタンクリックのイベントハンドラに以下のようなコードを書くとResources.reswファイルの文字列を取得できます。

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
    // リソースローダーを作成するとデフォルトでResources.reswを読んでくれる
    // Errors.reswみたいな名前を付けた場合はErrorsという文字列を渡すとそれを読んでくれる
    var r = new ResourceLoader();
    // あとは文字列が取得できる
    var dlg = new MessageDialog(r.GetString("GreetMessage"));
    await dlg.ShowAsync();
}

実行して動かしてボタンを押すといい感じにメッセージが表示されます。

コントロールの文字列とかも設定してみよう

文字列のとり方がわかったのであとはわかるな?というところですね。

button1.Content = r.GetString("hogehoge");

みたいに田植え作業をしていくというのもありですが、静的なテキストだったらもっとイケテル方法が用意されています。リソースの文字列を設定したいコントロールにx:Uidという属性をつけます。

<Button 
  x:Uid="MainPage_button1" 
  Content="Button" 
  HorizontalAlignment="Left" 
  Margin="96,84,0,0" 
  VerticalAlignment="Top" 
  Click="Button_Click_1"/>

そして、Resources.reswファイルにx:Uidの値.プロパティ名という名前で文字列を設定してやると…

なんということでしょう。勝手に設定してくれます。

これはイイネ!!!

ということで本題の多言語化

リソースを使って文字列を使うように気を付けていれば、後はen-USとかリソースファイルを作っていって地道にやっていくだけですね。ただ、これをサポートしてくれるツールがあります。先日のBlogでも紹介した「多言語アプリツールキット」がそれです。このページから、日本語版を落としてインストールしてVisual Studioを再起動すると便利機能が増えています。まずは、メニューの「ツール」の「多言語アプリツールキットの有効化」。

これを実行すると、プロジェクトにMultilingualResourcesというフォルダが作られて、その下に疑似言語(疑似).xlfというファイルが作られます。

一度プロジェクトをビルドして疑似言語(疑似).xlfを開くと以下のような、いかにもWPFで作りました!!というようなツールが起動します。

このツールを使って翻訳を行っていきます。

疑似言語って何?

その前に疑似言語を翻訳してもしょうがないので、ツールはそっと閉じます。疑似言語は、とりあえず翻訳してみて、アプリバグったりなんかしないよねってのを確認するための手段に使えます。右クリックメニューから「疑似翻訳の生成」を行うことでこれが実行されます。

実行したあとに疑似言語(疑似).xlfを開くと見るも無残な翻訳?が行われています。

この状態でコントロールパネルの言語から言語の追加で「qps-ploc」で検索して出てくる「English(qps-ploc)」を追加して、日本語より上に持ってきます。

この状態で実行すると、とりあえず翻訳?された状態のアプリの状態が確認できます。

今回の例だと、ボタンの横幅が伸びてるので、真横に位置固定で何か置いてたら悲しいことになってしまうということが判明してたかもしれないですね。

翻訳

疑似言語はいいので英語にしましょう。プロジェクトの右クリックメニューで「翻訳言語の追加」を押します。

言語の選択が出来るのでen-usを追加します。

英語(米国).xlfというファイルができます。

一度プロジェクトをビルドすると、このファイルにも翻訳が必要な文字列の一覧ができます。翻訳が必要なやつには赤い丸がついてるところも好感度アップですね。

さらに、英語が苦手な方のために機械翻訳もしてくれる。

機械翻訳すると、こんな感じになりました。機械翻訳しただけではレビューが必要な状態というステータスになってるのもいいですね!!

とりあえず今回は全部レビューOKということにしておいて、保存して閉じます。そして、コントロールパネルの言語の設定で「English(United States)」を一番上に持ってきてアプリケーションを実行します。

ちゃんと英語になってるのが確認できます。

まとめ

ローカライズが、ここまで手軽に出来るツールが用意されてる点はWindows ストア アプリ素晴らしいです!!機械翻訳もしてくれるので、英語圏の人が日本語圏に進出してきたり、または逆に日本から英語圏へアプリを出すのもハードルが低くなると思います。
いけそうだったら、まず小さなアプリでローカライズして多言語対応のアプリケーションを作ってみてもいいかもしれません。

因みに、詳しい情報はこっちを見るのがいいと思います。

↑の記事は英語の画面だったり、参照先のドキュメントの記述がいまいちわかりにくかったので、自分の備忘録がわりに書いてます。ドキュメントが整備されてきたら、きっとこの記事よりも本家を見た方がいいでしょうね!

サンプルのダウンロード

一応SkyDriveにあげておきます。
ResourceSample.zip