您的位置:首页 > 移动开发 > Android开发

Android 国际化 语言适配

2015-09-10 17:16 856 查看

为啥要写这个?

本来今天是要学习内存优化的,和一些内存泄漏的排查方法的,结果,意外的遇到了语言适配的这个东西,然后就把它记录下来和大家分享一下。所以,写这个是个意外。。。

1.Android资源的自动选择

在Android的资源文件夹中,我们经常会看到这些文件夹名:drawale-hdpi,drawale-mdpi, drawale-xhdpi,drawale-xxhdpi等等,相信大家对他们都不陌生,但是,还是要说一下,毕竟还有些同学像我一样是菜鸟,可能还不知道。Android在调用资源文件的时候会根据不同的屏幕分辨率,自动地在这些文件中去寻找最适应的图片资源并显示。注意,这里说的是自动,不是我们需要有任何操作,这个过程对程序员是完全透明的。

2. Android实现国际化

字符串国际化:只要在 res 文件夹下新建对应语言的 values 文件夹就好了, 如,英语环境下的,文件夹命名为:values-en

美国英文环境:values-en-rUS

大陆地区中文环境: values-zh-rCN

在 eclipse 和 Android studio下新建 Android 项目时,会在 res 目录下自动创建一个默认语言环境的文件夹 : values

当某一个资源没有在语言环境的对应的资源集合中找到时,就会使用 values 下的资源。

若某一个语言环境没有在项目中定义语言环境,那么也会使用 values 下的资源。

下面看效果,我的环境是Android Studio 1.3.2。



看看效果不错吧,我用了中国和英国,而且每个资源文件前还都有个小国旗~一目了然!

3. 图片国际化

同理,图片资源也是可以国际化的,命名规则如下:

drawable-zh-hdpi

drawable-en-ldpi

drawable-en-rUS-mdpi

在XML中,需要使用到图片的地方:@drawable/*

在代码中使用:R.drawable.*

这里有个地方要说一下,当然不说也可以,但是为了彰显一下N13,我还是要说一下,哈哈。。。

虽然,在国际化的过程中,我们可能存在多个具有相同name不同资源,在资源文件R.java中,却只有一份,这是为什么呢 ?之前说过,因为这里的适配,对程序员是完全透明的,所以,在代码中,即使是中间生成的代码也不会显示出来,只有系统在运行时才会动态决定。例如上面的app_name,在R.java中只有一份,虽然我定义了中文和英文两份字符串资源:

public static final class string {
public static final int abc_action_bar_home_description=0x7f060000;
public static final int abc_action_bar_home_description_format=0x7f06000f;
public static final int abc_action_bar_home_subtitle_description_format=0x7f060010;
public static final int abc_action_bar_up_description=0x7f060001;
public static final int abc_action_menu_overflow_description=0x7f060002;
public static final int abc_action_mode_done=0x7f060003;
public static final int abc_activity_chooser_view_see_all=0x7f060004;
public static final int abc_activitychooserview_choose_application=0x7f060005;
public static final int abc_search_hint=0x7f060011;
public static final int abc_searchview_description_clear=0x7f060006;
public static final int abc_searchview_description_query=0x7f060007;
public static final int abc_searchview_description_search=0x7f060008;
public static final int abc_searchview_description_submit=0x7f060009;
public static final int abc_searchview_description_voice=0x7f06000a;
public static final int abc_shareactionprovider_share_with=0x7f06000b;
public static final int abc_shareactionprovider_share_with_application=0x7f06000c;
public static final int abc_toolbar_collapse_description=0x7f060012;
public static final int action_settings=0x7f060013;
public static final int app_name=0x7f06000d;
public static final int hello_world=0x7f06000e;
public static final int status_bar_notification_info_overflow=0x7f060014;
}


android多国语言文件夹文件汇总

android多国语言文件夹文件汇总如下:

中文(中国):values-zh-rCN

中文(台湾):values-zh-rTW

中文(香港):values-zh-rHK

英语(美国):values-en-rUS

英语(英国):values-en-rGB

英文(澳大利亚):values-en-rAU

英文(加拿大):values-en-rCA

英文(爱尔兰):values-en-rIE

英文(印度):values-en-rIN

英文(新西兰):values-en-rNZ

英文(新加坡):values-en-rSG

英文(南非):values-en-rZA

阿拉伯文(埃及):values-ar-rEG

阿拉伯文(以色列):values-ar-rIL

保加利亚文: values-bg-rBG

加泰罗尼亚文:values-ca-rES

捷克文:values-cs-rCZ

丹麦文:values-da-rDK

德文(奥地利):values-de-rAT

德文(瑞士):values-de-rCH

德文(德国):values-de-rDE

德文(列支敦士登):values-de-rLI

希腊文:values-el-rGR

西班牙文(西班牙):values-es-rES

西班牙文(美国):values-es-rUS

芬兰文(芬兰):values-fi-rFI

法文(比利时):values-fr-rBE

法文(加拿大):values-fr-rCA

法文(瑞士):values-fr-rCH

法文(法国):values-fr-rFR

希伯来文:values-iw-rIL

印地文:values-hi-rIN

克罗里亚文:values-hr-rHR

匈牙利文:values-hu-rHU

印度尼西亚文:values-in-rID

意大利文(瑞士):values-it-rCH

意大利文(意大利):values-it-rIT

日文:values-ja-rJP

韩文:values-ko-rKR

立陶宛文:valueslt-rLT

拉脱维亚文:values-lv-rLV

挪威博克马尔文:values-nb-rNO

荷兰文(比利时):values-nl-BE

荷兰文(荷兰):values-nl-rNL

波兰文:values-pl-rPL

葡萄牙文(巴西):values-pt-rBR

葡萄牙文(葡萄牙):values-pt-rPT

罗马尼亚文:values-ro-rRO

俄文:values-ru-rRU

斯洛伐克文:values-sk-rSK

斯洛文尼亚文:values-sl-rSI

塞尔维亚文:values-sr-rRS

瑞典文:values-sv-rSE

泰文:values-th-rTH

塔加洛语:values-tl-rPH

土耳其文:values–r-rTR

乌克兰文:values-uk-rUA

越南文:values-vi-rVN

效果展示:

以启动App的快捷方式为例子,系统分别在不同的语言下,名字的显示。上面的图我们可以看到,app_name在中文中和英文中分别是”内存测试”,和”memoryTest”。

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ndk.sminger.memorytest" >

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MemoryActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


当系统语言设置为英文时:



当系统语言设置为中文时:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: