【问题标题】:Locale changed programmatically, but app show in System default locale on Android 2.3.3语言环境以编程方式更改,但应用程序显示在 Android 2.3.3 上的系统默认语言环境中
【发布时间】:2013-02-26 13:22:14
【问题描述】:

我的设备系统是英文

在我的 AndroidManifest.xml 中,我定义了我的活动来检查配置更改:

<activity
   ...
   android:configChanges="locale" >

在我的Activity中,我添加了函数:

@Override
public void onConfigurationChanged(Configuration newConfig) {

      super.onConfigurationChanged(newConfig);



       Locale.setDefault(newConfig.locale);

       Log.v("*Locale is*", newConfig.locale.toString());

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

}

在我的ActivityonResume()中,我调用了上面的函数:

@Override
public void onResume() {
    super.onResume();

     // I explicitely force my app to display in Finnish
     Configuration newConfig = new Configuration();
     newConfig.locale = new Locale("fi");
     onConfigurationChanged(newConfig);
}

(My Activity 托管 Fragment,每个屏幕视图都是一个 Fragment。)

使用上面的代码,我想我的应用在启动时会以芬兰语显示。它在 Android 4.1.1 上运行良好。

但是当我在 Android 2.3.3 设备上运行我的应用时,会发生以下情况:

场景 1: 从桌面启动应用 ==> 应用以芬兰语显示,没问题

场景 2: 登录我的应用程序,==> 然后关闭应用程序 ==> 然后从桌面再次启动应用程序 ==> 应用程序显示 英文!!为什么???

(日志消息Log.v("*Locale is*", newConfig.locale.toString()); 总是显示“fi”!)

我验证了在场景 2 中,应用从桌面再次启动时始终显示系统默认区域设置。为什么?

我不知道为什么在我的场景 2 中,我的应用程序在系统语言环境中显示为英语....任何人都可以帮忙?

【问题讨论】:

    标签: android android-layout android-intent android-emulator android-fragments


    【解决方案1】:

    这看起来像是 Android 2.x 中的一些错误

    因为如果你不是在onCreate() 而是在createMenu() 或在一些spinner.setOnItemSelectedListener() 中更改语言环境,它会起作用。

    这是一种解决方法,但尝试在启动您的应用并更改其中的区域设置后调用一些事件。

    【讨论】:

      【解决方案2】:

      您可以像

      一样务实地更改语言环境
      public void setDefaultLocale(Context context, Locale locale) {
              Locale.setDefault(locale);
              Configuration appConfig = new Configuration();
              appConfig.locale = locale;
              context.getResources().updateConfiguration(appConfig,
                      context.getResources().getDisplayMetrics());
              System.out.println("trad" + locale.getLanguage());
          } 
      

      并像

      一样调用此方法
      setDefaultLocale(getBaseContext(), Locale.FRENCH);
      
      setDefaultLocale(getBaseContext(), Locale.TRADITIONAL_CHINESE);
      
      setDefaultLocale(getBaseContext(), Locale.ITALIAN);
      

      您可以选择要更改的语言并启动当前活动以反映更改。

      Intent 意图 = new Intent(this, YourActivity.class); 开始活动(意图);

      嗨,约翰,我从自己的角度进行了测试以克服您的场景 2 在务实地更改语言环境并转到主屏幕并再次启动我的应用程序后,它仍然是我更改后的语言,即意大利。

      我在这个link发布了代码

      请仔细阅读并告诉我它对你有用。

      【讨论】:

      • 谢谢,那我应该在哪里调用 setDefaultLocale() 和 startActivity(intent,2)?
      • 如果您通过使用微调器或带有单选的 AlertDialog 来选择语言,那么在项目选择上您可以调用 setDefaultLocal() 以及 startActivity(intent);
      • 但是,我在选择期间更改应用程序语言没有问题。我的帖子的场景 2 中描述了我的问题。那是在启动应用程序并从配置中加载语言环境时,即使我明确将语言环境设置为芬兰语,应用程序也会以系统默认语言环境启动。
      • @John 我在下面的答案中编辑并添加了一个链接,从那里您将获得完整的源代码。对我来说,您的场景 2 似乎已修复且工作正常。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多