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进行配置添加
4.对语言选择的处理语言选择对话框如下图:切换语言的关键代码:复制内容到剪贴板代码:
测试了下,也行!切换成阿拉伯语效果截图:5.贴出语言选择对话框单选选中,保存事件处理代码 和切换语言的代码:( 1) 单选选中,保存事件处理代码:
(2)在MainActivity中的语言切换代码:预览源代码打印
1 | android:configChanges="locale" |
//应用内配置语言 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" ); |
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 | }); |
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 | } |
相关文章推荐
- android 应用内切换语言
- Android app应用多语言切换功能实现
- android 应用内切换语言
- Android应用内语言切换实现
- [Android]应用语言切换的三种方法
- Android应用实现多语言切换
- Android app应用多语言切换功能实现
- android 应用内语言切换
- Android app应用多语言切换功能实现
- Android 7.0以上版本,如何实现应用内语言切换
- Android应用内切换应用语言
- [Android]应用语言切换的三种方法
- Android多语言,应用内切换语言
- Android 应用内多语言切换
- android 应用内切换语言
- Android app应用多语言切换功能实现
- android 实现应用内语言切换
- Android应用内语言切换实现
- Android 7.0以上版本实现应用内语言切换的方法
- Android实现app应用多语言切换功能