各種ロケール用のリソース


各種ロケール用のリソース

Amazon Fireデバイスには、地域と言語に関するデフォルトのロケールが用意されており、プログラムで問い合わせることができます。特定のデバイス向けに設計されたリソースだけでなく、ロケールに対応したリソースも提供することで、アプリの普及を促し、さまざまなロケールのユーザーエクスペリエンスを向上することも可能です。たとえば、アプリのなかには既に、実行するデバイスのピクセル密度に応じて、異なるビットマップを提供しているものがあります。

このモデルを拡張して、ロケールごとに異なるビットマップを提供することができます。各ロケールのリソースを適切なフォルダに配置すると、ランタイム時に適切なリソースが検出されます。アプリをローカライズする場合は、この方法でリソースファイルを作成することをお勧めします。

ストリングリソース

strings.xmlファイルには、アプリのユーザーに表示される文字列が記述されています。以下はstrings.xmlの定義のサンプルです。

<?xml version="1.0" encoding="utf-8"?>
	<resources>
  		<string name="hello">Hello!</string>
	</resources>

ソースコードに次のように記述すると、「hello」という名称のストリングリソースを参照できます。

String helloText = getString(R.id.hello);

layout.xmlやAndroidManifest.xmlなどのXMLファイルでは、次のように記述することでリソースを参照できます。

<application android:label="@string/hello" >

ロケールごとにストリングを変更するには、そのロケール用に非デフォルトのリソースを含むstrings.xmlファイルを作成し、そのファイルをvalues-xx-rYYxxはISO-639の言語コード、YYはISO-3166-1の地域コード)という名前のディレクトリに置きます。以下にディレクトリ例をいくつか挙げます。

	/res
	/values         (default directory, make sure all references are present)
	/values-fr      (contains French language strings, region not used)
	/values-de      (contains German language strings, region not used)
	/values-en-rGB  (contains English language strings for Great Britain)

ストリングリファレンスが検索される際には、まず特定の地域・言語のリソースが検索され、その後、言語が合致するリソースの検索が試行されます。ロケールを特定したファイルで指定されていないリソースの場合は、デフォルトのstrings.xmlが使用されます。たとえば、「hello」ストリングをvalues-en-rGBに置いていない場合、デフォルトの「hello」ストリングが使用されます。

ドローワブルリソース

多くのアプリでは、メニュー、価格表、使用説明書などがビットマップなどのグラフィックデータとして記述されています。以下に、ドローワブルリソースに対して動的なリソース処理を行うためのディレクトリ構造の例を示します。

/res
  /drawable
  /drawable-fr      (contains French language strings, region not used)
  /drawable-de      (contains German language strings, region not used)

ドローワブルリソースをピクセル密度別に複数のディレクトリに置いている場合、そのディレクトリ構造を言語構成で拡張することができます。次の例は、言語とピクセル密度のつなげ方を示したものです。ディレクトリ名に複数の修飾子を指定する場合は、Androidドキュメントの設定修飾子の名前の表に記載された順序で指定する必要があります。

  /drawable-fr-ldpi
  /drawable-fr-mdpi

同じビットマップ画像のコピーを複数のディレクトリに置くなど、ドローワブルアセットを再利用するには、XMLファイルを作成してそのアセットに紐付けます。たとえば、英国ロケールに「background」という名前のリソースを置き、それをデフォルトのdrawableディレクトリにあるリソースに紐づけたい場合は、次の内容の/drawable-en-rGB/background.xmlファイルを作成します。これで、「background」への参照がdrawable-en-GBディレクトリに解決される場合は、常に/drawable/background_commonリソースが自動的に使用されます。

<?xml version="1.0" encoding="utf-8"?>
  <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/background_common" />

通貨リソース

通貨データは、ロケールごとの形式に変換できます。以下の例に示すように、通貨記号および整数部分と小数部分とを区切る記号は、重要な要素です。

  19,95   // 一部のヨーロッパのロケール
  $19.95   // 北米

次の例は、アプリ内課金アイテムの価格をその地域の形式で表示する方法を示しています。各地域のストアにおけるアイテムの価格をアプリに表示するには、次のように記述します。これは価格の表示形式を指定するだけで、通貨は変換されません。

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.getDefault());
  String formattedPrice = nf.format(19.99f);

デフォルト以外のロケールを使用する場合は、言語と地域の両方を使用して定義してください(例:en_USfr_FR)。言語と地域の両方を使用しないと、正しい形式で表示されません。たとえば、フランス語を第一言語として使用している国でも、すべての国が同じ通貨を使用しているわけではないからです。