开发者控制台

国际区域设置资源

国际区域设置资源

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