各種ロケール用のリソース
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-rYY
という名称のディレクトリに置きます。ここで、xx
は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ファイルを作成してそのアセットに紐付けます。たとえば、デフォルトのdrawable
ディレクトリのリソースを指す「background」という名前のリソースが、英国のロケールに必要な場合、以下の内容で/drawable-en-rGB/background.xml
ファイルを作成できます。drawable-en-GB
ディレクトリに解決される「background」への参照では、必ず/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_US
、fr_FR
)。言語と地域の両方を使用しないと、正しい形式で表示されません。たとえば、フランス語を第一言語として使用するすべての国が、同じ通貨を使用しているわけではないからです。