Android语言切换异常:从印地语无法切回英文
问题排查与修复方案
1. 修正Locale语言代码
你的代码中切换英文时使用的"eng"是非标准Locale代码,英文的标准Locale代码为"en",多数设备无法识别"eng",导致切换失败。将所有"eng"替换为"en",同时优化Activity重启逻辑:
SharedPreferences sharedPreferences = getSharedPreferences("Language", MODE_PRIVATE); SharedPreferences.Editor editor1 = sharedPreferences.edit(); language.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String currentLang = sharedPreferences.getString("lang", "en"); if (currentLang.equals("en")){ Toast.makeText(Settings.this, "Changing Language to Hindi", Toast.LENGTH_SHORT).show(); context = LocaleHelper.setLocale(Settings.this, "hi"); editor1.putString("lang", "hi"); } else { Toast.makeText(Settings.this, "Changing Language to English", Toast.LENGTH_SHORT).show(); context = LocaleHelper.setLocale(Settings.this, "en"); editor1.putString("lang", "en"); } editor1.apply(); // 添加标记确保旧Activity实例被清除,新实例用更新后的Locale启动 startActivity(new Intent(Settings.this, Settings.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)); finish(); } });
2. 确保LocaleHelper正确处理Locale切换
检查LocaleHelper.setLocale方法,确保它能正确解析标准Locale代码并更新配置。以下是标准实现示例:
public class LocaleHelper { public static Context setLocale(Context context, String language) { Locale locale = new Locale(language); Locale.setDefault(locale); Configuration config = context.getResources().getConfiguration(); config.setLocale(locale); config.setLayoutDirection(locale); return context.createConfigurationContext(config); } }
3. 在Activity启动时恢复语言设置
每次SettingsActivity启动时,先应用保存的语言配置,再执行初始化:
@Override protected void onCreate(Bundle savedInstanceState) { // 先恢复语言设置 SharedPreferences sharedPreferences = getSharedPreferences("Language", MODE_PRIVATE); String lang = sharedPreferences.getString("lang", "en"); LocaleHelper.setLocale(this, lang); super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); // 后续视图初始化、事件绑定代码 }
4. 额外检查项
- 确认项目中存在对应语言的资源文件:英文用
values/strings.xml,印地语用values-hi/strings.xml。 - 测试时彻底关闭应用再重启,避免旧Context缓存影响结果。
内容的提问来源于stack exchange,提问作者Dhananjay Singh
相关产品推荐
相关产品推荐

