很多应用开发中,我们需要做多语言版本,安卓在这方面做的很好,下面就写一个简单的例子:


一、项目目录结构

安卓国际化,应用内切换语言_android

这里对几个关键点进行说明下:

drawable-hdpi 为我们默认的图片存放目录

drawable-en-hdpi 为英文版本对应的图片存放目录,当然ldpi\mdpi\xhdpi 也一样,如果需要,分别按这样的规则创建目录即可。

values 为默认的配置文件目录

values-en 为英文版本的配置文件目录


values 目录下的strings.xml 内容为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">语言切换</string>
<string name="content">大家好,我叫单红宇。</string>
<string name="content2">AAAAA</string>
</resources>


values-en 目录下的strings.xml 内容为:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">Language Switch</string>
<string name="content">Hello everyone, My name is SHANHY.</string>

</resources>

我故意在第一个strings.xml中放了content2,在第二个英文的里面没有放,是为了要说明不同语言的配置文件内容是不需要一一对应的,我们只需要在需要多语言的配置放到按规则命名的文件夹下即可。

drawable-en-hdpi 和 drawable-hdpi 下面放了2个名称相同,内容不同的图片,也是为了要说明,图片也只一样支持多语言的。


下面为MainActivity 代码:

package com.shanhy.example.spinner;

import java.util.Locale;

import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

/**
* 英语
*
* @param v
* @author SHANHY
* @date 2015年8月28日
*/
public void switchEnglish(View v) {
switchLanguage(Locale.ENGLISH);
}

/**
* 中文
*
* @param v
* @author SHANHY
* @date 2015年8月28日
*/
public void switchChinese(View v) {
switchLanguage(Locale.CHINESE);
}

/**
* 切换语言
*
* @param locale
* @author SHANHY
* @date 2015年8月28日
*/
private void switchLanguage(Locale locale) {
Resources res = getResources();
Configuration config = res.getConfiguration();
DisplayMetrics dm = res.getDisplayMetrics();
Locale currentLocal = config.locale;
config.locale = locale;
res.updateConfiguration(config, dm);

// 如果切换了语言
if (!currentLocal.equals(config.locale)) {
// 这里需要重新刷新当前页面中使用到的资源
onCreate(null);
}
}
}



main.xml 和 AndroidManifest.xml 和我们平常开发是一样的,没有任何特殊的地方。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white"
android:orientation="vertical" >

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="English" android:onClick="switchEnglish"/>

<Button
android:layout_width="wrap_content"
android:textColor="@android:color/black"
android:layout_height="wrap_content"
android:text="中文" android:onClick="switchChinese"/>

<TextView
android:id="@+id/SpinnerResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:lineSpacingExtra="10dp"
android:text="@string/content"
android:textColor="@android:color/black"
android:textSize="10pt"
android:textStyle="bold" >
</TextView>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:lineSpacingExtra="10dp"
android:text="@string/content2"
android:textColor="@android:color/black"
android:textSize="10pt"
android:textStyle="bold" >
</TextView>

<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/testimg" />

</LinearLayout>