多语言安卓应用?

5

我需要在我的安卓应用程序中使用三种语言,即德语、英语和荷兰语。我在res目录下创建了三个文件夹values-devalues-nl。当用户选择特定的语言时,我执行以下代码:

Resources res = getResources();
Configuration newConfig = new Configuration(res.getConfiguration());
newConfig.locale = Locale.ENGLISH;
res.updateConfiguration(newConfig, null);

在不同的values文件夹中,所有字符串都有相同的名称,即在values文件夹中具有名称add_site的字符串在values-de文件夹中具有相同的名称但具有不同的值。 当我将语言环境设置为德语时,我的应用程序没有加载德语值?可能是什么问题? 谢谢您的帮助。

据我了解,Android会根据系统偏好自动处理区域设置。您的应用程序需要让用户在应用内设置区域设置吗? - knpwrs
是的。这是因为用户只需更改系统配置才能查看我的应用程序,这将导致所有应用程序都设置为该语言...我认为这是不必要的。尽管现在当我更改系统配置时,代码可以正常工作,也就是说,当我将系统区域设置为德语时,会显示德语文本...我希望从应用程序内部实现相同的功能。 - user590849
在某种程度上,作为一项功能,这是个不错的想法,但请记住,它违反了 Android 上所有其他应用程序(包括股票应用程序)的工作方式。它们都会自动检测您的语言环境,并在不需要用户干预的情况下动态加载正确的资源。除非有一个真正充分的理由,否则我不会打破这个默认行为。 - Manfred Moser
2个回答

6
在调用super.onCreate之后的onCreate()中尝试添加以下内容:
Locale locale = new Locale("de");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
      getBaseContext().getResources().getDisplayMetrics());

编辑: 这里有另一种方法。它似乎非常灵活,但是评论中存在一些关于它是否适用于所有Android版本的争议。


我想只有在用户需要时才更改语言环境。即,有一个languages.java文件,通过复选框使用户选择语言,还有另一个activity sitelisting.java,在那里我想看到更改... - user590849

0

如果您还支持具有不同布局方向 LTR 或 RTL 的语言,则仅设置配置区域设置是不够的。

        Resources res = getResources();
        Configuration newConfig = new Configuration( res.getConfiguration() );
        Locale locale = new Locale( appLanguage );
        newConfig.locale = locale;
        newConfig.setLayoutDirection( locale );
        res.updateConfiguration( newConfig, null );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接