国际区域设置资源
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);
在XML文件(如layout.xml或AndroidManifest.xml)中,您可以通过执行以下命令来引用资源:
<application android:label="@string/hello" >
要使字符串因区域设置而异,请创建包含区域设置的非默认资源的strings.xml
文件。将文件放在一个名为values-xx-rYY
的目录中,其中xx
是ISO-639语言代码,YY
是ISO-3166-1区域代码。下面显示了几个示例目录。
/res
/values (默认目录,确保所有引用都存在)
/values-fr (包含 法语 字符串, 未 使用 区域)
/values-de (包含 德语 字符串, 未 使用 区域)
/values-en-rGB (包含 英国 英语 字符 串)
当系统查找字符串引用时,它首先查找特定于区域和语言的资源。然后,它尝试按语言进行匹配。对于您未在区域设置特定文件中指定的资源,系统会回退到默认strings.xml
。例如,如果您没有在values-en-rGB
中放置“hello”字符串,系统会回退为使用默认的“hello”字符串。
可绘制资源
许多应用都将菜单、价目表或说明编写成位图或其他图形数据。以下示例显示了为可绘制资源提供动态资源处理的文件夹结构。
/res
/drawable
/drawable-fr (包含 法语 字符串, 未 使用 区域)
/drawable-de (包含 德语 字符串, 未 使用 区域)
如果您有几个drawable目录,其中包含的资源基于像素密度,则可以扩展目录结构以考虑语言。以下示例显示如何将语言和像素密度关联起来。在目录名称中指定多个限定符时,必须按照此表的Android文档中列出的顺序执行此操作。
/drawable-fr-ldpi
/drawable-fr-mdpi
要重用可绘制资源,例如将同一位图的副本放在多个文件夹中,您可以创建一个XML文件以链接到该资产。假设您希望英国区域设置中名为“background”的资源指向默认drawable
目录中的资源。您可以使用以下内容创建文件/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
)。否则,您可能无法获得正确的格式。例如,并非所有使用法语作为主要语言的国家/地区都采用相同的货币。