android 国际化

来源:互联网 发布:rar mac 编辑:程序博客网 时间:2024/05/18 02:47

http://bbs.51cto.com/thread-1075165-1-1.html

看到微信可以切换语言,切换语言也就是app国际化问题。我们也都会想到通过改变系统的语言,让app是自己跟随系统走,但是每一台手机系统设置中支持选择的语言,就比较少,比如小米2a:就只有 简体中文,繁体中文,English三种语言,肯定满足不了需求,api中提供了locale 类,实现本地化。下面我们来做个例子:对一个简单的setting界面进行语言切换,切换的语言选择有跟随系统走,中文,英文,阿拉伯文。如下图

  
        

      1.先去查看下
       各国语言缩写-各国语言简称,世界各国域名缩写
       
       2.在工程res文件下添加对应语种的values文件,ar:阿拉伯语, en:英语    zh_rCN: 简体中文
       截图如下:

              
       在strings.xml和arrays.xml需要国际化的字符串进行相应得翻译
      
       3.在功能清单文件中对要进行切换acitivity 进行配置
          添加
1android: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一个呗
1config.locale =new         Locale("ar");
测试了下,也行! 
      切换成阿拉伯语效果截图:
        
        
       5.贴出语言选择对话框 单选选中,保存事件处理代码 和切换语言的代码:
      
        ( 1)  单选选中,保存事件处理代码:
01String[] languages=context.getResources().getStringArray(R.array.languages);
02                AlertDialog.Builder builder=newAlertDialog.Builder(context);
03                builder.setTitle(R.string.language_choice);
04                finalSharedPreferences languagePre=context.getSharedPreferences("language_choice", context.MODE_PRIVATE);
05            finalint id=languagePre.getInt("id",0);
06             
07           
08            builder.setSingleChoiceItems(languages, id,  newDialogInterface.OnClickListener(){
09 
10                        <a href="http://home.51cto.com/index.php?s=/space/5017954"target="_blank">@Override</a>
11                        publicvoid onClick(DialogInterface arg0, intindex) {
12                                 
13                                switch(index) {
14                                case0:
15                                        //系统默认语言                  
16                                        languageId=0;
17                                        break;
18                                case1:
19                                     //简体中文
20                                        languageId=1;
21                                        break;
22                                case2:
23                                        //英语
24                                        languageId=2;
25                                         
26                                        break;
27                                case3:
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                        <a href="http://home.51cto.com/index.php?s=/space/5017954"target="_blank">@Override</a>
46                        publicvoid onClick(DialogInterface dialog, intwhich) {
47                                 
48                                 
49                                ((Activity) context).finish();
50                                Intent intent=newIntent();
51                                intent.setClass(context, MainActivity.class);
52                                context.startActivity(intent);
53                                 
54                                 
55                        }
56                });
(2)在MainActivity中的语言切换代码:
01SharedPreferences languagePre=getSharedPreferences("language_choice", Context.MODE_PRIVATE);
02            intid=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                case0:
10                        config.locale=Locale.getDefault();         //系统默认语言
11                        break;
12                case1:
13                        config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文
14                         
15                        break;
16                case2:
17                        config.locale = Locale.ENGLISH;            //英文
18                        break;
19                case3:
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        }
0 0