文字列を多言語化対応するには?[Win 8]WinRT/Metro TIPS

Windowsストア・アプリを「多言語化」 するには、アプリに複数の文字列リソースを持たせ、言語によって文字列リソースを切り替えればよい。その方法を説明する。

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

powered by Insider.NET

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

連載目次はこちら

 前回のTIPSで文字列リソースの使い方を説明した。では、アプリに複数の文字列リソースを持たせ、言語によって文字列リソースを切り替える(=多言語化)には、どうしたらいいだろうか?

 本稿では、Windowsストア・アプリ(旧称: Metroスタイル・アプリ)を多言語化対応させる方法を説明する。

事前準備

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

既定の言語とは?

 多言語化の方法を解説する前に、「既定の言語」について説明しておく。

 Windowsストア・アプリの「既定の言語」とは、OSから要求された言語をアプリが持っていないときに使われる言語である。「既定の言語」は、次の画像のようにVS 2012のアプリケーション・マニフェスト・エディタで設定する(設定の保存先は、.csproj/.vbprojファイル)。

アプリケーション・マニフェスト・エディタの[アプリケーション UI]タブ
上から3番目に[既定の言語]が見える。

 Win 8では、使用する言語とその優先順位を次の画像のようにコントロール・パネルから設定する。

[言語の設定の変更]ダイアログ
コントロール・パネルの[時計、言語、および地域]−「言語」で開く。

 この画像の例では、OSはアプリに対してまず日本語で表示するよう要求する。アプリ側が「それは表示できない」と応答すると、次は英語(ダイアログ2段目の「English (United States)」)を、と順番に要求していく。どの要求にも応えられなかった場合、つまり、上の画像のダイアログで設定した言語の中にアプリが持っている言語が1つもなかった場合に、アプリは既定の言語で表示するのだ。

 さて、例えば日本語と英語の2カ国語対応アプリを作るとして、どちらを既定の言語にするべきだろうか? もうお分かりだと思うが、OSが日本語でも英語でもないときに表示されるものなのだから、「英語(en-US)」にしておくのが一般的だろう。

複数の文字列リソースを定義するには?

 前回のTIPSでは、文字列リソースのファイル(ファイル名は「Resources.resw」)を1つだけ適当な場所に置いた。多言語化対応するには、言語との結び付きを明示して複数のファイルを配置する。

 一般的には、言語名のフォルダを作ってそれぞれにResources.reswファイルを置く。まず「ja-JP」フォルダを作って、そこに既存のResources.reswファイルを移動させる。次に、ほかの言語用のフォルダを作って、Resources.reswファイルをコピーするとよいだろう。次の画像は、「日本語(ja-JP)」「英語(en-US)」「フランス語(fr-FR)」を用意した状態である。

3カ国語用の文字列リソースを用意した(ソリューション・エクスプローラ)

 そうしたら、ほかの言語用のResources.reswファイルを翻訳する。文字列リソースを追加/変更したときは、全てのResources.reswファイルの修正を忘れないように気を付けてほしい。

言語別のフォルダを作らずに多言語化対応するには?

 フォルダを分けずにファイル名で分けることも可能だ。次の画像のように「Resources.lang-ja-JP.resw」などと言語の識別子をファイル名に含めればよい。

ファイル名で文字列リソースを区別することもできる(ソリューション・エクスプローラ)

アプリ名を多言語化対応するには?

 タイルに表示されるアプリ名やストアで表示されるパッケージ名は、どうしたらいいだろうか? それには、前回のTIPSで説明した「ms-resource:」プロトコルを使う。冒頭に載せたアプリケーション・マニフェスト・エディタの画像の中の[表示名]欄を見てほしい。

 アプリケーション・マニフェストの[アプリケーション UI]の[表示名]と、[パッケージ化]の[パッケージ表示名]は必須である。

テストするには?

 以上のようにして複数言語の文字列リソースを用意するだけで対応は完了だ。コードの修正は必要ない。

 前述したコントロール・パネルの[言語の設定の変更]で、言語の優先順位を変更してからデバッグ実行する。シミュレータなら、いったん終了させることでタイルにもすぐに反映させられる。

 前回のTIPSで作ったアプリで、コードは変更することなく文字列リソースだけを修正して試してみよう。次の画像は、最優先言語が「日本語」の場合である。

最優先言語を「日本語」にして実行した画面

 アプリをいったん終了させ、「英語」を1番上にしてから実行すると、次のように英語のリソースで表示される。

最優先言語を「英語」に変えて実行した画面

 また、作成したアプリが実際に対応している言語を確認するには、VS 2012に付属するWACK(Windows App Cert Kit)を使うとよい。[検証するアプリの選択]画面で、アプリに定義されている言語が表示される(次の画像)。

WACKの[検証するアプリの選択]画面
アプリに定義されている言語が表示されている。

 なお、ここに表示されているのは、アプリが対応していると宣言している言語である。その言語のリソースが実際に実装されているかどうかではない。実装した覚えのない言語がここに出現したときは、言語を明示することを試してほしい。

言語を明示的に設定するには?

 例えば、アプリに3カ国語の文字列リソースを用意したが、次のリリースでは2カ国語にとどめておきたいとしよう。不要なResources.reswファイルを削除してもよいが、アプリケーション・マニフェスト・ファイルを編集して設定することも可能だ。

 この編集には、VS 2012のアプリケーション・マニフェスト・エディタが対応していないので、「メモ帳」などのテキスト・エディタを使ってPackage.appxmanifestファイルを開く。すると次のような記述が見つかるはずだ。

<Resources>
  <Resource Language="x-generate"/>
</Resources>


修正前のPackage.appxmanifestファイル内の言語指定(テキスト・エディタ)
デフォルトは「x-generate」(=生成された文字列リソース全部)となっている。


 ここを、例えば英語と日本語だけとするには、次のように書き換える。

<Resources>
  <Resource Language="ja-JP"/>
  <Resource Language="en-US"/>
</Resources>


修正後のPackage.appxmanifestファイル内の言語指定(テキスト・エディタ)
対応言語を、日本語と英語であると明示した。


 Resources.reswファイルは3カ国語とも残したままでビルドして、WACKで確認してみよう。次の画像のように、上で設定した2カ国語だけとなっているはずだ。

WACKの[検証するアプリの選択]画面
マニフェストに指定した2カ国語だけになっている。

まとめ

 多言語化するには、言語ごとにResources.reswファイルを用意すればよい。日本語版のWin 8でも、ほかの言語での表示をチェックすることは可能だ。ストアに提出する前には、アプリの対応言語をWACKでチェックしておこう。次のドキュメントが参考になる。

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

WinRT/Metro TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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