Android的国际化与本地化

来源:互联网 发布:倩碧眼部精华滚珠知乎 编辑:程序博客网 时间:2024/04/29 17:46

 internationalization(国际化(简称i18n,因为在i和n之间还有18个字符, 
localization(本地化),简称L10n.一般说明一个地区的语言时,用语言_地区的形式,如  zh_CN,zh_TW. 
各国语言缩写: 
http://www.loc.gov/standards/iso639-2/php/code_list.php 
国家和地区简写: 
http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html 
    Android对i18n和L10n提供了非常好的支持.Android没有专门的API来提供国际化,而是通过对不同resource的命名来达到国际化,同时这种命名方法还可用于对硬件的区分,如不同的新视屏用不同的图片. 
    在Eclipse的工程中,res目录有默认几项resource,如drawable,layout,menu,values其余还有 
res/anim/   用来放置动画 
res/xml/    用来放置style theme等xml定义. 
res/raw/    用来放置data数据 
    我们引用这些resource时候,在java代码中是通过R.resource_type.resource_name的方式来使用,如setTitle(R.string.main_title); 
还有一种是在xml中直接引用,如 

Java代码  收藏代码
  1. <TextView    
  2.     android:id ="@+id/hello_view"  
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="wrap_content"   
  5.     android:text="@string/hello"  
  6.     />  

    引用了名字为hello的字符串.当程序运行时,通过Resource类会装载strings.xml中名字为hello的字符串.但Resource类装载strings.xml时会根据当前手机的设置来选择装载哪一个xml文件.这些手机设置有MCC and MNC,Language and region,Screen dimensions,Wider/taller screens,Screen orientation,Screen pixel density,Touchscreen type,SDK version,也就是说通过手机当前语言区域,屏幕的大小,屏幕像素以及当前android sdk的版本号来选择.通过把strings.xml放置在以这些选项命名的文件夹下,Resource类就能正确的装载所需的字符串. 
     我们以不同的local和region来做一次国际化,首先values表示默认的字符串,也即当Resource找不到匹配的资源时,默认使用values文件夹下的资源,其余 drawable等资源也是同样的. 
     当命名这些文件夹的名字时,不同的选项用-分开,而且次序必须和andorid文档中table http://developer.android.com/guide/topics/resources/resources-i18n.html#AlternateResources文件夹的命名必须都是小写字符,否则在一些大小敏感的文件系统中可能会出错,如果你用大写,eclipse的adt都会自动报错.小写字母r表示region的意思.在strings.xml中除了字符串本身不一样,xml中定义该字符串的名字,id都是一样的.所以在代码或者xml中引用该资源时,只要引用名字即可或者id即可,程序启动时候Resource类回到相应的目录下去寻找正确的字符串(资源) 
     通过在Settings中设置locale& Text 我们可以让Resource类来选择相应文件夹下的内容,选择英语时候结果如下,也即选择了values下的strings.xml 
选择chinese(china)时,也即选了values-zh-rcn目录下的strings.xml 
选择chinese(taiwan)时,也即选了values-zh-rtw目录下的strings.xml其余手机的选项,像屏幕的像素等都可以建立相应得目录.

原创粉丝点击