如何正确应用语言?

时间:2012-11-20 04:11:44

标签: android

我在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”添加到manifest之前放了这些代码。但是当第一次显示启动器活动时,有些单词会正确地更改为我想要的语言,但有些单词会保留英语。其他活动(不是启动器活动)改变语言是可以的。当我从其他活动切换回启动器活动时,它现在正确地将所有单词更改为我想要的语言。我不知道为什么第一次启动器启动器活动中的某些单词没有正确地改为我想要的语言。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

为什么不让它变得更简单?

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

因此,一旦创建了目录“values-en”,右键单击它,添加一个Android xml Values File,将其命名为language.xml,然后单击next,然后在左侧面板中选择配置“Language”。显示屏幕“然后点击完成。

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

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

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

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

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

然后在你的活动中获取这些字符串值,juste调用

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

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

答案 1 :(得分:0)

最后我找到了一个完全解决了我的问题的解决方案。我发现系统自动重置了语言环境(或者任何能够改变语言环境的东西),这就是我设置默认语言环境但工作不正确的原因。这是我的解决方案,您应该创建一个扩展Application的类,然后覆盖以下方法:

@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());
}

因此,每次在应用程序的一侧重置默认语言环境时,都会调用此方法,它将使用您所需的语言重新设置默认语言环境。现在它运作得很好。