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

android 应用内切换语言

2014-02-28 10:50 363 查看
看到微信可以切换语言,切换语言也就是app国际化问题。我们也都会想到通过改变系统的语言,让app是自己跟随系统走,但是每一台手机系统设置中支持选择的语言,就比较少,比如小米2a:就只有 简体中文,繁体中文,English三种语言,肯定满足不了需求,api中提供了locale 类,实现本地化。下面我们来做个例子:对一个简单的setting界面进行语言切换,切换的语言选择有跟随系统走,中文,英文,阿拉伯文。如下图1.先去查看下各国语言缩写-各国语言简称,世界各国域名缩写2.在工程res文件下添加对应语种的values文件,ar:阿拉伯语,en:英语 zh_rCN: 简体中文截图如下:在strings.xml和arrays.xml需要国际化的字符串进行相应得翻译3.在功能清单文件中对要进行切换acitivity进行配置添加
1
android:configChanges="locale"
4.对语言选择的处理语言选择对话框如下图:切换语言的关键代码:复制内容到剪贴板代码:
//应用内配置语言

Resources resources =getResources();//获得res资源对象

Configuration config = resources.getConfiguration();//获得设置对象

DisplayMetrics dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。

config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文

resources.updateConfiguration(config, dm);
刚开始的时候,我在在保存后,就进行语言切换,没有效果,原因是界面资源没有重新加载,参考了微信的方法,就是干掉MainActivity,在重启MainActivity,那就这样干吧! 测试下,还真有效果!上述代码有一定缺陷,没法对阿拉伯语(相对不常用的语种)就 行不通,Local没有提供相应的常量,问了度娘,也没答案,在网络上看到android2.3以上都支持了阿拉伯语,那就怪啦,最后竟然没有Locale.ar常量,那就new一个呗
1
config.locale
=
new
Locale(
"ar"
);
测试了下,也行!切换成阿拉伯语效果截图:5.贴出语言选择对话框单选选中,保存事件处理代码 和切换语言的代码:( 1) 单选选中,保存事件处理代码:
01
String[]
languages=context.getResources().getStringArray(R.array.languages);
02
AlertDialog.Builderbuilder=
new
AlertDialog.Builder(context);
03
builder.setTitle(R.string.language_choice);
04
final
SharedPreferences languagePre=context.getSharedPreferences(
"language_choice"
,context.MODE_PRIVATE);
05
final
int
id=languagePre.getInt(
"id"
,
0
);
06
 
07
 
08
builder.setSingleChoiceItems(languages,id,  
new
DialogInterface.OnClickListener(){
09
10
<ahref=
"http://home.51cto.com/index.php?s=/space/5017954"
target=
"_blank"
>
@Override
</a>
11
public
void
onClick(DialogInterface arg0, 
int
index) {
12
 
13
switch
(index) {
14
case
0
:
15
//系统默认语言
16
languageId=
0
;
17
break
;
18
case
1
:
19
//简体中文
20
languageId=
1
;
21
break
;
22
case
2
:
23
//英语
24
languageId=
2
;
25
 
26
break
;
27
case
3
:
28
//阿拉伯语
29
languageId=
3
;
30
 
31
break
;
32
default
:
33
 
34
languageId=
0
;
35
break
;
36
}
37
 
38
languagePre.edit().putInt(
"id"
,languageId).commit();
39
 
40
}});
41
 
42
//保存
43
builder.setPositiveButton(R.string.save,
new
DialogInterface.OnClickListener() {
44
 
45
<ahref=
"http://home.51cto.com/index.php?s=/space/5017954"
target=
"_blank"
>
@Override
</a>
46
public
void
onClick(DialogInterface dialog, 
int
which) {
47
 
48
 
49
((Activity)context).finish();
50
Intentintent=
new
Intent();
51
intent.setClass(context,MainActivity.
class
);
52
context.startActivity(intent);
53
 
54
 
55
}
56
});
(2)在MainActivity中的语言切换代码:
预览源代码打印
01
SharedPreferenceslanguagePre=getSharedPreferences(
"language_choice"
,Context.MODE_PRIVATE);
02
int
id=languagePre.getInt(
"id"
,
0
);
03
Log.d(
"MainActivity"
,
"langauge_id="
+id);
04
//应用内配置语言
05
Resourcesresources =getResources();
//获得res资源对象
06
Configurationconfig = resources.getConfiguration();
//获得设置对象
07
DisplayMetricsdm = resources.getDisplayMetrics();
//获得屏幕参数:主要是分辨率,像素等。
08
switch
(id) {
09
case
0
:
10
config.locale=Locale.getDefault();
//系统默认语言
11
break
;
12
case
1
:
13
config.locale
= Locale.SIMPLIFIED_CHINESE; 
//简体中文
14
 
15
break
;
16
case
2
:
17
config.locale
= Locale.ENGLISH;            
//英文
18
break
;
19
case
3
:
20
//config.locale
= Locale.;//阿拉伯语
21
 
22
config.locale
=
new
Locale(
"ar"
);
23
break
;
24
default
:
25
config.locale=Locale.getDefault();
26
 
27
break
;
28
}
29
resources.updateConfiguration(config,dm);
30
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: