1

我在 android 2.2 上使用多种语言。我在每个活动的 onCreate 中更改语言,如下所示:

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

当然,我在调用 setContentView 并将 android:configChanges="locale" 添加到清单之前放置​​了这些代码。但是,当第一次显示启动器活动时,有些单词会正确更改为我想要的语言,但有些单词会保持英语。其他活动(不是启动器活动)更改的语言是可以的。当我从其他活动切换回启动器活动时,它现在将所有单词正确更改为我想要的语言。我不知道为什么启动器第一次启动器活动中有一些单词没有正确更改为我想要的语言。

谢谢你的帮助。

4

2 回答 2

1

你为什么不让它更简单呢?

您可以在您的应用程序中创建不同的语言值目录(res/values-en、res/values-fr、res/values-nl 等),您将在其中存储与字符串键关联的语言值。

因此,一旦您的目录“values-en”创建完成,右键单击它,添加一个 Android xml 值文件,将其命名为 language.xml,然后单击下一步,然后在显示屏幕的左侧面板中选择配置“语言””然后点击完成。

然后在这个最近创建的文件中,为要翻译的每个字符串创建所有键值对。完成后,将您的 language.xml 文件复制到另一个其他 values-xx 目录中,并更改所有字符串的值。

因此,您在 values-en 中的 language.xml 文件将包含:

<string name="hello">Hello</string>

values-fr 中的 language.xml 文件将是:

<string name="hello">Bonjour</string>

然后要在您的活动中获取这些字符串值,只需调用

String helloString = getResources().getString(R.String.hello);

应用程序将根据设备语言配置自动加载正确的字符串资源

于 2012-11-21T09:38:08.453 回答
0

最后我找到了一个完全解决我的问题的解决方案。我发现语言环境是由系统自动重置的(或任何有能力改变语言环境的东西),这就是为什么我设置了默认语言环境但它不能正常工作。这是我的解决方案,您应该创建一个扩展应用程序的类,然后重写该方法,如下所示:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    Locale locale = new Locale(YourDesired_langCode);
    newConfig.locale = locale;
    super.onConfigurationChanged(newConfig);

    Locale.setDefault(locale);
    getBaseContext().getResources().updateConfiguration(newConfig,getBaseContext().getResources().getDisplayMetrics());
}

因此,每次在您的应用程序之外重置默认区域设置时,都会调用此方法,并且它将使用您所需的语言再次重置默认区域设置。现在它工作得很好。

于 2012-11-21T07:57:49.157 回答