android 应用内切换语言

 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             }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值