多言語化対応を楽に行うには?[Win 8]WinRT/Metro TIPS

メンテナンスが面倒なWindowsストア・アプリの多言語対応。「多言語アプリ・ツールキット」を使って、複数の文字列リソース・ファイルの作成や保守を簡単にしよう。

» 2012年11月08日 09時19分 公開
[山本康彦BluewaterSoft]
WinRT/Metro TIPS
業務アプリInsider

powered by Insider.NET

「WinRT/Metro TIPS」のインデックス

連載目次はこちら

 前々回前回のTIPSで、Windowsストア・アプリ(旧称: Metroスタイル・アプリ)を多言語化する方法を説明した。しかし実際にやってみると、複数の文字列リソース・ファイル(Resources.reswファイル)のメンテナンスが面倒なことに気付くだろう。何か良い方法はないだろうか?

 「多言語アプリ・ツールキット」を使うと、複数の文字列リソース・ファイルの作成や保守が簡単になる。本稿では、このツールの使い方を紹介する。本稿のサンプルは「Windows Store app samples:MetroTips #12 多言語化対応を楽に行うには?」からダウンロードできる。

事前準備

 Windows 8(以降、Win 8)向けのWindowsストア・アプリを開発するには、Win 8とVisual Studio 2012(以降、VS 2012)が必要である。これらを準備するには、第1回のTIPSを参考にしてほしい。本稿ではWin 8製品版とVS 2012 Expressを使用している。

アプリの作成

 前々回前回のおさらいも兼ねて、要点のまとめと補足をしておく。

 まず、多言語化する予定があるときは、[既定の言語]を「英語(en-US)」にした方がよい。

アプリケーション・マニフェスト・エディタの[アプリケーション UI]タブ
上から3番目の[既定の言語]を、開発初期から「英語(=en-US)」にしておく。

 次にResources.reswファイルを追加する。XAMLコード内の文字列は、Uid属性で文字列リソースと結び付ける(次の画像)。C#/VBコード中の文字列は、Windows.ApplicationModel.Resources名前空間のResourceLoaderクラスを使って取得する。アプリケーション・マニフェストに埋め込む文字列は、「ms-resource:」プロトコルを使って文字列リソースと結び付ける(前の画像の[表示名]欄)。

VS 2012のXAMLエディタ
TextBlockコントロールにUid属性を使って文字列リソースを結び付けているところ。
左端に配置した水色の画像については、後述。

 作成した文字列リソースは次の画像のようになった。

VS 2012の文字列リソース・エディタ
既定の言語に合わせて、英語で記述したところ。

 ここで画像リソースの多言語対応について、補足しておく。先のXAMLエディタの画像では、次のようにして水色の画像を表示している。

<Image Source="/Assets/Sample.png" (後略)


画像を表示するXAMLコード


 実際にプロジェクトに含めた画像は、次の2つだ。

 TIPS第9回で、「scale-○○○」という解像度の識別子をファイル名(あるいはフォルダ名)に含めておくと適切な解像度の画像が使われることを説明したが、「lang-○○○」という言語の識別子も同様に機能するのだ。

 これでビルドし、コントロール・パネルの[言語の設定の変更]で言語の優先順位の先頭を「英語」に変えてから、実行してみよう(次の画像)。

最優先言語が「英語」のときの実行結果(部分)
画像は「lang-en-us」識別子の付いたものが表示されている。

 次に、最優先言語を「日本語」に戻して実行してみると、次の画像のようになる。

最優先言語が「日本語」のときの実行結果(部分)
画像は「lang-ja-jp」識別子の付いたものに変わっている。
文字列は、日本語の文字列リソースをまだ実装していないので、既定の言語である英語が表示されている

多言語アプリ・ツールキットをインストールするには?

 「Multilingual App Toolkit for Visual Studio 2012」のページから日本語版をダウンロードしてインストールする。

多言語アプリ・ツールキットを使えるようにするには?

 ツールは、既定の言語に厳密に一致する文字列リソース・ファイルを要求するので、デフォルトのファイル名「Resources.resw」を変えておく(あるいは言語別のフォルダに入れる)。今回は既定の言語を英語にしているので、「Resources.lang-en-US.resw」とする(先の文字列リソース・エディタの画像は変更後)。

 次に、多言語アプリ・ツールキットを有効化する。ソリューション・エクスプローラでプロジェクトを選び、メニューバーから[ツール]−[多言語アプリ ツールキットの有効化]を選ぶ。次の画像のように、「疑似言語 (疑似).xlf がプロジェクトに追加されました。」と出力され、プロジェクトには「MultilingualResources」というフォルダとその中に「疑似言語 (疑似).xlf」というファイルが生成されれば、準備完了だ。

多言語アプリ・ツールキットを有効化したVS 2012

多言語アプリ・ツールキットの「疑似言語」とは?

 まず一度、リビルドする。次に、生成された「疑似言語 (疑似).xlf」ファイルをソリューション・エクスプローラで右クリックして、[疑似翻訳の生成]メニューを選んでほしい。これで、「疑似言語 (疑似).xlf」ファイルの内容が自動生成される。ソリューション・エクスプローラでダブルクリックすると、「多言語エディター」が立ち上がる(次の画像)。

自動生成された「疑似言語 (疑似).xlf」ファイルの内容(多言語エディタ)
[翻訳]列には、読めない文字が並んでいる。

 「疑似言語」とは、上の画像中の「読めない文字」のことだ。テスト実行してみて読める文字が表示されたら、その部分は文字列リソースに分離されていないことになる。「読めない文字」のままではエラーになる箇所(上の例ではソースが「Green」の所)を修正してから、ビルドする。

 実際に疑似言語での表示をテストするには、コントロール・パネルの[言語の設定の変更]に疑似言語を追加する必要がある。[言語の追加]をクリックし、「qps-ploc」と入力して検索し、[英語 (pseudo-qps)]を選んで追加する。

 [英語 (pseudo-qps)]を最優先言語にして実行してみると、次の画像のようになる。

疑似言語を適用して実行した画面(部分)
3行とも疑似言語で表示されていることから、文字列リソースとして分離されていることが確認できる。

 ところで、追加された疑似言語用のResources.reswファイルは、プロジェクト内に存在していないことに注意してほしい。多言語アプリ・ツールキットで追加した言語の文字列リソースは、.xlfファイルだけに保存されているのだ。そして、ビルド時に多言語アプリ・ツールキットが起動され、.xlf内の文字列リソースを直接、コンパイルしてバイナリに出力するのである(出力先は「resources.pri」ファイル)。

多言語アプリ・ツールキットで言語を追加するには?

 ソリューション・エクスプローラでプロジェクトを右クリックし、[翻訳言語の追加]を選ぶ。出てきた[翻訳言語]ダイアログで追加したい言語(今回は「日本語(日本)[ja-JP]」)にチェックを入れれば完了だ。「MultilingualResources」フォルダに「日本語 (日本).xlf」ファイルが追加されるので、一度ビルドしてから、多言語エディタで編集する。

編集が終わった「日本語 (日本).xlf」ファイルの内容(多言語エディタ)

 Win 8の最優先言語を日本語にしてから、実行してみると次の画像のように多言語化できていることが分かる。

最優先言語が日本語のときの実行結果(部分)
日本語で表示されるようになった。

 なお、既定の言語のResources.reswファイルを修正すると、.xlfファイルの内容は全て初期化されてしまうようだ。十分に注意してほしい。

 また、ストアに提出する前に、忘れずに疑似言語を外しておこう。「疑似言語 (疑似).xlf」ファイルを削除してしまうか、前回のTIPSで説明したように言語を明示的に設定する。

まとめ

 多言語アプリ・ツールキットはちょっと癖があるものの、多言語化の作業を大いに楽にしてくれる。TIPS第7回で紹介した筆者のアプリも、ツールキットを使って多言語化した。

 なお、ツールキットには機械翻訳機能や翻訳状態管理機能もある。詳しい操作方法などは、次のドキュメントを参考にしてほしい。

「WinRT/Metro TIPS」のインデックス

WinRT/Metro TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。