APP,实现多国语言动态切换
2017-11-29 20:44
701 查看
网上一个辅助类,找不到原博主文章链接,这里就直接贴出辅助类代码(自己再优化了一下)。公司项目APP要支持13种语言,如下:
1.工具类
2.动态切换
//nLangSelectIdx为当前选中语言的索引
//restartApp()重启APP
***
3.每次启动APP都要设置当前语言模式,否则会跟随安卓系统显示
这个调用需写在通用的地方,如自定义状态栏的ActionBarActivity.java,否则你得在每个Activity的oncreate()和onresume()都要调一次。
这样就可以啦
我不是个呆若木鸡的小小英
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()都要调一次。
这样就可以啦
我不是个呆若木鸡的小小英
相关文章推荐
- android app 动态实现多语言切换
- QT实现动态翻译和语言切换
- 程序实现多国语言的动态切换解决方案(转)
- Android app应用多语言切换功能实现
- app实现动态切换测试环境和生产环境
- Android app应用多语言切换功能实现
- Android app应用多语言切换功能实现
- QT实现多国语言的动态切换
- QT国际化动态语言切换的实现(原创) (2012-02-20 11:23:20)
- Qt的国际化示例程序以及步骤--实现Qt程序的动态切换语言功能
- 实现QT的动态语言切换
- Android基础--Android app应用多语言切换功能实现
- IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)
- UWP 实现App多语言为所欲为切换
- QT实现动态翻译和语言切换
- IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)
- 在Android App里实现语言切换
- 程序实现多国语言的动态切换解决方案
- ios 实现app语言切换,不跟随系统
- WPF实现无刷新动态切换多语言(国际化)