网上一个辅助类,找不到原博主文章链接,这里就直接贴出辅助类代码(自己再优化了一下)。公司项目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()都要调一次。
这样就可以啦
我不是个呆若木鸡的小小英