android 应用内切换语言
2015-01-09 17:16
363 查看
android 应用内切换语言 [复制链接]
看到微信可以切换语言,切换语言也就是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.Builder builder=newAlertDialog.Builder(context);
03 builder.setTitle(R.string.language_choice);
04 final SharedPreferenceslanguagePre=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 voidonClick(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, newDialogInterface.OnClickListener() {
44
45 <ahref="http://home.51cto.com/index.php?s=/space/5017954"target="_blank">@Override</a>
46 public voidonClick(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 Resources resources=getResources();//获得res资源对象
06 Configuration config =resources.getConfiguration();//获得设置对象
07 DisplayMetrics dm =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 }
看到微信可以切换语言,切换语言也就是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.Builder builder=newAlertDialog.Builder(context);
03 builder.setTitle(R.string.language_choice);
04 final SharedPreferenceslanguagePre=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 voidonClick(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, newDialogInterface.OnClickListener() {
44
45 <ahref="http://home.51cto.com/index.php?s=/space/5017954"target="_blank">@Override</a>
46 public voidonClick(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 Resources resources=getResources();//获得res资源对象
06 Configuration config =resources.getConfiguration();//获得设置对象
07 DisplayMetrics dm =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 }
相关文章推荐
- [Android]应用语言切换的三种方法
- Android 应用语言切换的三种方法
- Android 应用内切换语言
- android 实现应用内语言切换
- android应用内切换语言(无需退出应用)
- android 应用内切换语言
- Android切换系统语言,自动更新应用界面显示语言
- android 2种切换语言方式:应用内切换和随系统而切换 代码实现重启应用
- Android系统切换语言更新应用界面方法
- Android应用内语言切换实现
- Android开发应用内多国语言切换
- [Android]应用语言切换的三种方法
- [Android]应用语言切换的三种方法
- Android 应用内切换语言
- [Android]应用语言切换的三种方法
- [Android]应用语言切换的三种方法
- Android应用实现多语言切换
- [Android]应用语言切换的三种方法
- [Android]应用语言切换的三种方法
- Android应用内即时切换语言