首页 > 解决方案 > Android根据设备语言设置应用语言

问题描述

我有一个应用程序,如果用户的设备语言设置为斯洛伐克语,则应用程序语言为斯洛伐克语,否则为 EN。所以语言没有在应用程序中改变,而是来自安装 SK 或 EN。

 String languageToLoad  = Resources.getSystem().getConfiguration().locale.getLanguage();
 String lng = "sk".equals(languageToLoad) ? "sk" : "en";

 Locale locale = new Locale(lng);Locale.setDefault(locale);
 Configuration config = new Configuration();config.locale = locale;
 getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

我注意到,Configuration 中的语言环境已被弃用,并且 Resources 中的 updateConfiguration(Configuration, DisplayMetrics) 已被 android N 弃用(我认为)。

然而由于某种原因,它仍然适用于更高的 Android 版本,但 Android Studio 表示它已被弃用。

所以我尝试将代码分开:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        String languageToLoad  = Resources.getSystem().getConfiguration().getLocales().get(0).getLanguage();
        String lng = "sk".equals(languageToLoad) ? "sk" : "en";
        Locale locale = new Locale(lng);Locale.setDefault(locale);
        Configuration config = new Configuration();config.setLocale(locale);
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

    } else {
  String languageToLoad  = Resources.getSystem().getConfiguration().locale.getLanguage();
  String lng = "sk".equals(languageToLoad) ? "sk" : "en";

  Locale locale = new Locale(lng);Locale.setDefault(locale);
  Configuration config = new Configuration();config.locale = locale;
  getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}

但是第一个条件(对于> = N)不行,我不确定如何替换当前代码。它仍然说 updateConfiguration 已被弃用。

即使我尝试getBaseContext().createConfigurationContext(config);它也不会改变语言

标签: androidlocale

解决方案


当 API >= N 时,替换为:

getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

这样:

context.createConfigurationContext(config);

但是,您必须创建自定义上下文包装器,并确保重新启动活动。请参阅下一个接受的答案:

Android N 以编程方式更改语言


推荐阅读