当前位置: 代码迷 >> Android >> Android API Guides-Localizing with Resources
  详细解决方案

Android API Guides-Localizing with Resources

热度:311   发布时间:2016-04-24 11:06:10.0
Android API Guides---Localizing with Resources
与资源本地化
快速浏览
使用资源设置来创建一个本地化的应用程序。
Android的加载正确的资源为用户的语言和区域设置。
如果本地化的资源不可用,Android的加载默认的资源。
在该文献
概述:资源切换Android中
使用资源本地化
本地化提示
测试本地化的应用软件
也可以看看
本地化清单
提供资源
布局
活动的生命周期
Android将在许多地区的许多设备上运行。为了达到最多的用户,您的应用程序应该处理文本,音频文件,数字,货币和图形以适合您的应用程序将要使用的语言环境的方式。


本文档描述了本地化Android应用程序的最佳实践。该原则适用无论您是使用ADT与Eclipse,基于Ant的工具,或任何其他IDE开发应用程序。


你应该已经有一个Java的工作知识,熟悉与Android资源加载,用户界面??元素的XML声明,发展的考虑,例如活动的生命周期,以及国际化和本地化的一般原则。


这是使用Android资源框架到应用程序的本地化方面,从核心Java功能,尽可能分开好的做法:


你可以把大部分或全部应用程序的用户界面的内容转换成资源文件,如本文档中,并在提供了资源描述。
用户界面的行为,在另一方面,由Java代码来驱动。例如,如果不同,具体取决于语言环境需要格式化或排序用户输入数据,那么你会使用Java编程处理数据。本文不包括如何定位你的Java代码。
对于短指南在你的应用本地化的字符串,看到训练课,支持不同的语言。


概述:资源切换Android中


资源是文本字符串,布局,声音,图形和其他任何静态数据,你的Andr??oid应用程序的需求。一个应用程序可以包括多组资源,每个定制用于不同设备配置。当用户运行该应用程序,Android的自动选择,并加载最佳匹配设备的资源。


(本文侧重于本地化和区域设置的资源交换的完整描述和所有类型的配置,你可以指定 - 屏幕方向,触摸屏类型,等等 - 请参阅提供替代资源。)


当你写你的应用程序:


创建一组默认资源,加上在不同的语言环境中使用的替代品。
右箭头
当用户运行应用程序:


Android系统选择基于设备的语言环境资源加载的。
当你写你的应用程序,您可以创建默认和替代资源,为您的应用程序使用。要创建资源,您将项目的RES /目录特别命名的子目录中的文件。


为什么默认资源是重要的


每当应用程序在你没有提供具体的语言环境的文本语言环境中运行,Android将加载从RES /价值/ strings.xml中的默认字符串。如果这个默认的文件不存在,或者如果它丢失了自己的应用需要一个字符串,那么你的应用程序将无法运行,并会显示一个错误。下面的例子说明,当默认文本文件不完整会发生什么。


例:


一个应用程序的Java代码指的只是两个字符串,text_a和text_b。此应用程序包括定义的英文text_a和text_b本地化的资源文件(RES /值-EN / strings.xml中)。本申请还包括包括用于text_a一个定义一个默认的资源文件(RES /值/ strings.xml中),但不为text_b:


这个应用程序可能编译没有问题。如果资源缺失,比如Eclipse的IDE将无法突出任何错误。
当该应用程序在设备上启动与区域设置为英语,应用程序可能没有问题运行,因为RES /值-EN / strings.xml中包含所需的文本字符串。
然而,用户会看到一个错误信息,当该应用程序设置为英语以外的语言的设备上推出了强制关闭按钮。该应用程序将不会加载。
为了防止这种情况发生,确保一个RES /价值/ strings.xml中文件存在,并且它定义了每一个所需的字符串。这种情况适用于所有类型的资源,不只是字符串:您需要创建一套包含所有你的应用程序吁请资源默认的资源文件 - 版式,图形,动画等有关测试的信息,请参阅测试为默认资源。


使用资源本地化


如何创建默认资源


把应用程序的默认文本具有以下位置和名称的文件:


    RES /价值/ strings.xml中(必需的目录)


在res /价值/ strings.xml中的文本字符串应该使用默认的语言,这是你最期待您的应用程序的用户讲的语言。


默认资源集还必须包括任何默认可绘制和布局,并且可以包括其他类型的资源,例如动画。
    RES /绘制/(必需的目录保持至少一个图形文件,为应用程序的谷歌上播放图标)
    RES /布局/(必需的目录拿着定义默认布局的XML文件)
    RES /动画/(所需如果您有任何RES / anim- <预选赛>文件夹)
    RES / XML /(如果您有任何RES / XML的<预选赛>文件夹必须)
    RES /生/(如果您有任何需要RES / raw- <预选赛>文件夹)


提示:在你的代码,检查每个引用一个Android资源。确保一个默认资源为每个一项所定义。另外,还要确保该默认字符串文件是完整的:一个本地化的字符串文件可以包含字符串的一个子集,但默认字符串文件必须包含所有。


如何创建替代资源


本地化应用程序的很大一部分是提供不同的语言替代文本。在某些情况下,你也将提供替代的图形,声音,布局,以及其他特定的语言环境资源。


应用程序可以指定多个RES / <预选赛> /目录中,各有不同的预选赛。要创建一个不同的区域设置的替代资源,您可以使用限定符指定语言或语言区域的组合。 (资源目录的名称必须符合在提供替代资源,否则将无法编译所描述的命名方案。)


例:


假设您的应用程序的默认语言是英语。还假设您要本地化应用程序中的法国所有的文字,而大部分的文本在您的应用程序(除了应用程序的标题一切)日本。在这种情况下,你可以创建三个替代的strings.xml文件,每个文件存储在一个特定地区的资源目录:


RES /价值/ strings.xml中
包含应用程序使用的所有字符串,包括文本字符串命名的标题英文文本。
RES /值-FR / strings.xml中
包含所有字符串,包括标题法文本。
RES /值-JA / strings.xml中
包含标题以外的所有字符串日语文本。
如果你的Java代码是指R.string.title,这里是在运行时会发生什么:


如果设备被设置为法文以外的任何语言??,Android将在RES /价值/ strings.xml中文件加载的标题。
如果设备设置为法语,Android将会从RES /值-FR /的strings.xml文件中加载标题。
请注意,如果设备设置为日语,Android将查找标题在res /值-JA / strings.xml档案。但因为没有这样的字符串包含在该文件中,Android将回落到默认值,并将从RES /价值/ strings.xml中文件中加载英文标题。


它的资源优先?


如果有多个资源文件相匹配的设备的配置,Android的遵循一套规则,决定使用哪种文件。其中,可以在资源目录名中指定的预选赛,区域几乎总是优先。


例:


假设一个应用程序包含图形的默认设置和其他两组图形,分别用于不同设备的设置进行了优化:


RES /绘制/
包含默认的图形。
RES /绘制小土地手写笔/
包含图形与从触笔输入期望并具有横向QVGA一个低密度屏幕的设备进行了优化。
RES /绘制-JA /
包含图形与日本进行了优化。
如果该应用程序被配置为使用日语的设备上运行,机器人将加载从水库/抽拉-JA /图形,即使设备恰好是一个从触笔期望的输入和具有风景的QVGA低密度屏方向。


例外:优先区域在选择过程中唯一的限定词是MCC和MNC(移动国家代码和移动网络代码)。


例:


假设你有以下情况:


应用程序代码呼吁R.string.text_a
两个相关资源文件可用:
水库/值-mcc404 / strings.xml中,其包括在应用程序的默认语言text_a,在这种情况下,英语。
RES /值喜/ strings.xml中,其中包括印地文text_a。
应用程序,具有以下结构的设备上运行的:
SIM卡被连接到在印度一个移动网络(MCC 404)。
该语言设置为印地文(HI)。
Android将加载从RES /价值观mcc404 / strings.xml中(英文)text_a,即使设备配置为印地文。这是因为在资源选择过程中,Android将会更喜欢MCC比赛过的语言匹配。


选择过程并不总是那么简单,因为这些事例表明。请参阅Android如何寻找最匹配的资源的过程的更细致入微的描写。所有的预选赛在提供替代资源的表2中上市的优先顺序。


谈到资源的Java


在应用程序的Java代码,你参考,使用语法R.resource_type.resource_name或android.R.resource_type.resource_name资源。欲了解更多有关此,请访问资源。


本地化清单


本地化和分发Android应用程序的过程的完整概述,请参阅本地化清单文件。


本地化提示


在设计应用程序中的任何区域工作


你不能假设有关其用户将运行应用程序设备什么。该设备可能有你没有期待的硬件,也可能被设置为你没有的,或者你无法测试计划区域设置。设计应用程序,使其正常运行或不能正常不管它运行在什么设备。


重要提示:请确保您的应用程序包括一套完整的默认资源。


确保包括RES /绘制/和RES /价值/文件夹(无文件夹名称的任何附加修饰),包含所有的图片和您的应用程序将需要的文本。


如果应用程序丢失甚至一个默认的资源,它不会被设置为不支持的语言环境的设备上运行。例如,RES /价值/ strings.xml中默认的文件可能缺乏应用程序需要一根弦:当应用程序在不支持的语言环境中运行,并尝试加载RES /价值/ strings.xml中,用户会看到一个错误信息,并一个强制关闭按钮。如Eclipse的IDE将不突出这样那样的错误,你不会看到这个问题,当你测试设置为支持的语言环境的设备或仿真器上的应用程序。


有关详细信息,请参阅测试的默认资源。


设计一个灵活的布局


如果您需要重新安排布局,以适应某种语言(例如德国以其悠久的话),你可以创建该语言(例如RES /布局-DE / main.xml中)的替代布局。但是,这样做可以使你的应用程序难以维护。这是更好地建立一个单一的布局更为灵活。


另一种典型的情况是,需要东西它的布局不同的语言。例如,你可能有一个接触的形式,应该包括两个名称字段,当应用程序在日本运行,但三个名称字段,当应用程序在其他一些语言运行。可以在以下两种方式之一处理这个问题:


创建一个字段中的一个的布局,您可以通过编程启用或禁用,基于语言,或
有主要布局包括另一个布局,包括多变的领域。第二布局可以有不同的语言不同的配置。
避免创造更多的资源文件和文本字符串比你需要


你也许并不需要为应用程序中每个资源的特定语言环境的替代品。例如,在res /布局/ main.xml中文件中定义的布局可能在任何区域工作,在这种情况下,就没有必要创建任何替代布局文件。


此外,您可能不需要创建为每个字符串替代文本。例如,假定:


您的应用程序的默认语言是美国英语。该应用程序使用的每个字符串的定义,使用美国英语拼写,在res /价值/ strings.xml中。
对于一些重要的短语,你要提供英式英语拼写。您希望在应用程序在英国的设备上运行,使用这些替代字符串。
要做到这一点,你可以创建一个名为res /值-EN-RGB / strings.xml中,包括只有当应用程序在英国运行对于字符串的所有其余的应该是不同的琴弦的小文件时,程序会下降回默认值,并使用被在res /价值/ strings.xml中定义。


使用Android Context对象手动查找区域


您可以使用上下文对象,Android可以提供查询的语言环境:


。string地区= context.getResources()getConfiguration()locale.getDisplayName()。
测试本地化的应用软件


测试在设备上


请记住,您正在测试的设备可以是提供给消费者在其他地区的设备显著不同。您的设备上可用的语言环境可能与在其他设备上可用的不同。此外,该设备屏幕的分辨率和密度可能会有所不同,这可能会影响你的UI字符串和绘图的显示。


要更改区域设置或语言的设备上,使用设置应用程序。


测试在一个仿真器


有关使用模拟器的详细信息,请参阅见Android模拟器。


创建和使用自定义的语言环境


“自定义”区域是一门语言/区域组合了Android系统映像没有明确支持。 (对于Android的平台所支持的语言环境的列表,请参阅SDK选项卡中的版本注释)。你可以测试一下你的申请将在自定义区域创建在模拟器中的自定义语言环境中运行。有两种方法可以做到这一点:


使用自定义区域设置的应用程序,这是从应用程序选项卡访问。 (您创建一个自定义区域后,按住设置名称切换到它。)
更改为从亚行外壳定制的语言环境,如下所述。
当在模拟器设置为一个区域,是不是在Android系统中可用的图像,系统本身会在其默认语言显示。您的应用程序,但是,要正确定位。


从亚行Shell改变模拟器的区域设置


要使用亚行外壳更改仿真器的语言环境。


选择您要测试并确定其BCP-47语言标记,例如语言环境,加拿大法语是FR-CA。
启动仿真器。
从主机计算机上的命令行shell,运行以下命令:
亚行的shell
或者如果你有连接的设备,指定通过添加-e选项想要的模拟器:
亚行-e壳
在亚行的shell提示符(#),运行以下命令:
setprop persist.sys.locale [BCP-47语言标记];停止;睡眠5;启动
从第1步替换相应的代码括号内的部分。
例如,在加拿大法语测试:


setprop persist.sys.locale FR-CA;停止;睡眠5;启动


这将导致仿真器重新启动。 (它看起来像一个完整的重新启动,但事实并非如此。)一旦在主屏幕上再次出现,重新启动您的应用程序(例如,单击Eclipse中的运行图标),应用程序会用新的语言环境推出。


测试的默认资源


以下是如何测试应用程序是否包括它需要每一个字符串资源:


设置仿真器或设备,你的应用程序不支持的语言。例如,如果应用程序在res /值-FR法国有弦/但没有在任何资源字符串西班牙语/值-ES /,然后设置模拟器的区域设置为西班牙语。 (您可以使用自定义区域设置应用到模拟器设置为不受支持的语言环境。)
运行该应用程序。
如果应用程序显示错误消息和强制关闭按钮,它可能会寻找一个字符串,它是不可用。请确保您的RES /价值/ strings.xml档案中包括该应用程序使用的每个字符串的定义。
如果测试成功,重复它对于其他类型的配置。例如,如果应用程序有一个布局文件名为res /布局土地/ main.xml中,但不包含一个文件名为res /布局端口/ main.xml中,然后设置仿真器或设备为纵向,看看应用程序将运行。
  相关解决方案