当前位置:   article > 正文

Android 修改app的语言(主要讲繁体与简体的转换)_android app内部 简体 繁体 切换

android app内部 简体 繁体 切换


参考网址:

(1)、http://blog.csdn.net/liyuchong2537631/article/details/48292385

(2)、http://www.jb51.net/article/90326.htm


1、多语言的实现:是指同一个应用界面能支持多种语言的显示,供不同语言的人使用。也就是我们应用内显示的字符串都要有不同语言的多个备份。

首先最重要一点是不能把要显示的字符串写死在代码里,而是应该写到对应的配置文件中,也就是res目录下的strings.xml中。


2、根据需求为每种要支持的语言创建一份对应的strings.xml。

(1)新建文件夹



(2)选择locale,并选择要支持的语言和地区。(我选择的是繁体字,所以选择台湾)



(3)形成一份新的values-zh-rTW       strings.xml







这样,应用中显示的每一个字符串在上述方法得到的各个strings.xml文件中都需要有一个备份(当然,语言的内容要更改为对应语言)。


3、代码的实现:

(1)设置语言界面:(Setting.class)



先判断手机系统用的是什么语言

  1. if (sharedPreferencesUtil.getLanguage().equals("CN")) {
  2. tv_simple_language.setTextColor(getResources().getColor(R.color.e50011));//简体选中
  3. tv_tw_language.setTextColor(getResources().getColor(R.color.A333333));//繁体未选中
  4. } else if (sharedPreferencesUtil.getLanguage().equals("TW")) {
  5. tv_simple_language.setTextColor(getResources().getColor(R.color.A333333));//简体未选中
  6. tv_tw_language.setTextColor(getResources().getColor(R.color.e50011));//繁体选中
  7. } else if (sharedPreferencesUtil.getLanguage().equals("0")) {//sharedPreferencesUtil.getLanguage()初始化为 0 (获取系统的语言)
  8. if (getResources().getConfiguration().locale.getCountry().equals("CN")) {//判断当前手机系统的语言
  9. tv_simple_language.setTextColor(getResources().getColor(R.color.e50011));//简体选中
  10. tv_tw_language.setTextColor(getResources().getColor(R.color.A333333));//繁体未选中
  11. sharedPreferencesUtil.setLanguage("CN");//简体
  12. } else if (getResources().getConfiguration().locale.getCountry().equals("TW")) {
  13. tv_simple_language.setTextColor(getResources().getColor(R.color.A333333));//简体未选中
  14. tv_tw_language.setTextColor(getResources().getColor(R.color.e50011));//繁体选中
  15. sharedPreferencesUtil.setLanguage("TW");//繁体
  16. }
  17. }
  18. Resources resources = getResources();
  19. Configuration configuration = resources.getConfiguration(); // 获取资源配置
  20. DisplayMetrics metrics = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
  21. tv_simple_language.setTextColor(getResources().getColor(R.color.e50011));
  22. tv_tw_language.setTextColor(getResources().getColor(R.color.A333333));
  23. sharedPreferencesUtil.setLanguage("CN");//简体
  24. configuration.locale = Locale.CHINA; // 设置当前语言配置为简体
  25. resources.updateConfiguration(configuration, metrics); // 更新配置文件
  26. sendBroadcast(new Intent("language")); // 发送广播,广播接受后重新开启此Activtiy以重新初始化界面语言.
  27. finish(); Resources resources = getResources();
  28. Configuration configuration = resources.getConfiguration(); // 获取资源配置
  29. DisplayMetrics metrics = resources.getDisplayMetrics();
  30. tv_simple_language.setTextColor(getResources().getColor(R.color.A333333));
  31. tv_tw_language.setTextColor(getResources().getColor(R.color.e50011));
  32. sharedPreferencesUtil.setLanguage("TW");//繁体
  33. configuration.locale = Locale.TAIWAN; // 设置当前语言配置为繁体
  34. resources.updateConfiguration(configuration, metrics); // 更新配置文件
  35. sendBroadcast(new Intent("language")); // 发送广播,广播接受后重新开启此Activtiy以重新初始化界面语言.

(2)ChangeReceiver广播类(为了实现点击按钮后整个app的语言都相应的变化)
  1. /**
  2. * Created by hong on 2016/10/26.
  3. *
  4. * 自定义广播类 语言改变后重启Activity
  5. *
  6. */
  7. public class ChangeReceiver extends BroadcastReceiver {
  8. private Intent mIntent;
  9. @Override
  10. public void onReceive(Context context, Intent intent) {
  11. mIntent = new Intent(context, MainActivity.class);
  12. mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//关闭所有的activity,返回首页
  13. mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  14. context.startActivity(mIntent);
  15. }
  16. }

(3)在AndroidManifest.xml 里注册广播
 
   
       
       
        
        
        
             
         
         
        
        
        
    
       
       

(4)启动页界面(SplashActivity)
在启动页要判断之前是否有设置过语言
  1. Configuration config = getResources().getConfiguration();
  2. DisplayMetrics dm = getResources().getDisplayMetrics();
  3. if (sharedPreferencesUtil.getLanguage().equals("CN")) {
  4. config.locale = Locale.CHINA; // 设置当前语言配置为简体
  5. getResources().updateConfiguration(config, dm); // 更新配置文件
  6. } else if (sharedPreferencesUtil.getLanguage().equals("TW")) {
  7. config.locale = Locale.TAIWAN; // 设置当前语言配置为繁体
  8. getResources().updateConfiguration(config, dm); // 更新配置文件
  9. }

注:因为在MainActivity中有从服务端获取图片放在viewpager上,作为广告栏,存放图片是用
com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(bannerInfo.getThumb(), bannerImageView, displayImageOptions);存放的。bannerInfo.getThumb():图片.jpg     bannerImageView:ImageView  
设置语言的时候,用 DisplayMetrics metrics = new DisplayMetrics();广告栏的图片加载不出来,后面改成 DisplayMetrics dm =getResources().getDisplayMetrics();图片就可以加载出来了。(这只是我遇到的问题)













有问题请多指教,谢谢~






声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/817278
推荐阅读
相关标签
  

闽ICP备14008679号