APP,实现多国语言动态切换


网上一个辅助类,找不到原博主文章链接,这里就直接贴出辅助类代码(自己再优化了一下)。公司项目APP要支持13种语言,如下:


1.工具类

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.util.DisplayMetrics;

import java.util.Locale;

public class LanguageManager {


   public static final int LANGUAHE_DEFAULT = 0;
   public static final int LANGUAHE_ENGLISH = 1;
   public static final int LANGUAHE_ZH_RCN = 2;
   public static final int LANGUAHE_ZH_RTW = 3;//繁体
   public static final int LANGUAHE_DE_RDE = 4;//德语
   public static final int LANGUAHE_ES_RES = 5;//西班牙语
   public static final int LANGUAHE_FR_RFR = 6;//法语
   public static final int LANGUAHE_IT_RIT = 7;//意大利语
   public static final int LANGUAHE_JA_RJP = 8;//日语
   public static final int LANGUAHE_KO_RKR = 9;//韩语
   public static final int LANGUAHE_PL_RPL = 10;//波兰
   public static final int LANGUAHE_PT_RPT = 11;//葡萄牙语
   public static final int LANGUAHE_RU_RRU = 12;//俄语
   public static final int LANGUAHE_VI_RVN = 13;//越南语

   
   public static final String LANGUAGE_KEY = "language";
   
   private Context mContext;
   private static LanguageManager instance = null;
   
   private LanguageManager(Context context)
   {
      mContext = context;
   }
   
   public static LanguageManager getInstance(Context context)
   {
      if(instance == null)
      {
         instance = new LanguageManager(context); 
      }
      return instance;
   }

   private void setLang(int lang)
   {
      Locale locale = Locale.SIMPLIFIED_CHINESE;
      switch (lang) {

         case LANGUAHE_DEFAULT:
            locale = Locale.getDefault();
            break;
         case LANGUAHE_ENGLISH:
            locale = Locale.ENGLISH;
            break;
         case LANGUAHE_ZH_RCN:
            locale = Locale.SIMPLIFIED_CHINESE;
            break;
         case LANGUAHE_ZH_RTW:
            locale = new Locale("zh","TW");
            break;
         case LANGUAHE_DE_RDE:
            locale = new Locale("de","DE");
            break;
         case LANGUAHE_ES_RES:
            locale = new Locale("es","ES");
            break;
         case LANGUAHE_FR_RFR:
            locale = new Locale("fr","FR");
            break;
         case LANGUAHE_IT_RIT:
            locale = new Locale("it","IT");
            break;
         case LANGUAHE_JA_RJP:
            locale = new Locale("ja","JP");
            break;
         case LANGUAHE_KO_RKR:
            locale = new Locale("ko","KR");
            break;
         case LANGUAHE_PL_RPL:
            locale = new Locale("pl","PL");
            break;
         case LANGUAHE_PT_RPT:
            locale = new Locale("pt","PT");
            break;
         case LANGUAHE_RU_RRU:
            locale = new Locale("ru","RU");
            break;
         case LANGUAHE_VI_RVN:
            locale = new Locale("vi","VN");
            break;

         default:
            return;
      }
      // 获得res资源对象
      Resources resources = mContext.getResources();
      // 获得设置对象
      Configuration config = resources.getConfiguration();
      // 获得屏幕参数:主要是分辨率,像素等。
      DisplayMetrics dm = resources.getDisplayMetrics();
      // 语言
      config.locale = locale;
      resources.updateConfiguration(config, dm);
   }
   
   public void setLangandSave(int lang)
   {
      setLang(lang);
      saveCurrentMode(lang);
   }
   
   private void saveCurrentMode(int lang)
    {
        SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(mContext);
        SharedPreferences.Editor editor = preference.edit();
        editor.putInt(LANGUAGE_KEY, lang);
        editor.commit();
    }
   
   public int getCurrentLanguage() {
      SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(mContext);
        return preference.getInt(LANGUAGE_KEY, LANGUAHE_ZH_RCN);
   }
   
   public void syncCurrentLanguage() {
      setLang(getCurrentLanguage());
   }
}

2.动态切换

//nLangSelectIdx为当前选中语言的索引

LanguageManager.getInstance(SettingSystemActivity.this).setLangandSave(nLangSelectIdx);
restartApp();

//restartApp()重启APP

***

private void restartApp() {
    DeviceManageActivity.mDeviceActivity.finish();
    MainActivity.mSingleton.finish();
    removeALLActivity();//执行移除所以Activity方法

    Intent i = getBaseContext().getPackageManager()
            .getLaunchIntentForPackage(getBaseContext().getPackageName());
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
}


3.每次启动APP都要设置当前语言模式,否则会跟随安卓系统显示

//切换当前语言的设置模式
LanguageManager.getInstance(this).syncCurrentLanguage();

这个调用需写在通用的地方,如自定义状态栏的ActionBarActivity.java,否则你得在每个Activity的oncreate()和onresume()都要调一次。


这样就可以啦






我不是个呆若木鸡的小小英






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值