国际区域设置资源


国际区域设置资源

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-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_USfr_FR)。否则,您可能无法获得正确的格式。例如,并非所有使用法语作为主要语言的国家/地区都采用相同的货币。