在应用程序中仅更改语言:某些字符串未正确翻译

6
我已经在本文底部添加了更新内容。
我当前正在开发一个支持多语言的项目,我已经为所有语言编写了所有字符串内容。
我使用BaseActivity、Application类和LocaleHelper来管理应用程序的本地化。然后我发现我的应用程序出现了这种行为。在我将语言设置为另一种语言后,某些活动中的字符串发生了更改并变得正确,但在MainActivity中没有变化,尽管其中有一些相同的字符串。我试图重新启动应用程序,但仍然没有起作用。
我还有另一个活动,在其中一些单词已被翻译,但在一个片段和一个RecyclerView中的所有单词都没有被翻译。
我仍然无法找到原因,为什么它没有正确地翻译。有人能帮帮我吗?
以下是一些代码片段:
Application类
@Override
public void onCreate() {
    super.onCreate();
    LocaleUtil.setLocale(new Locale(LocaleUtil.with(this).getPreference()));
    LocaleUtil.updateConfig(this,getBaseContext().getResources().getConfiguration());
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    LocaleUtil.setLocale(new Locale(LocaleUtil.with(this).getPreference()));
    LocaleUtil.updateConfig(this, newConfig);
}

BaseActivity

public BaseActivity() {
    LocaleUtil.updateConfig(this);
}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    initLocale();
    super.onCreate(savedInstanceState);
}

public void initLocale(){
    localeUtil = new LocaleUtil(this);
    localeUtil.setListener(this);
    localeUtil.setLanguageByCode(localeUtil.getPreference());
}

请帮我!谢谢!!
(更新)
我发现每当我想要访问一个包含在recyclerview和fragment中的视图的strings.xml时,我都必须再次设置语言环境。这非常不方便,我担心会影响性能。我很想听听更好的建议来更改语言。

你真的不应该直接这样改变语言环境。虽然它大部分时间可以工作,但系统的设计是让你遵循系统语言环境并且不要自己更改。如果你想要自己更改,那么最好编写自己的字符串系统。 - Gabe Sechan
你好!抱歉,也许我写错了标题。我的意思是,我的应用程序有这个“更改语言”设置,我只需要在应用程序中更改语言。你能否详细解释一下或提供关于如何编写我们自己的“字符串系统”的参考资料?谢谢! - A. N
你找到任何解决方案了吗?我也遇到了同样的问题。 - Aqsa Shahid
3个回答

2

看这个。可能有些字符串没有包含在内。来自文档。

https://developer.android.com/guide/topics/resources/localization.html#using-framework

假设你的应用程序默认语言是英语。同时,你想将应用程序中的所有文本本地化为法语,并将应用程序中的大部分文本(除了应用程序的标题)本地化为日语。在这种情况下,您可以创建三个替代的strings.xml文件,每个文件存储在特定于区域设置的资源目录中:

res/values/strings.xml 包含应用程序使用的所有字符串的英文文本,包括名为title的字符串的文本。 res/values-fr/strings.xml 包含所有字符串的法语文本,包括title。 res/values-ja/strings.xml 包含所有字符串的日语文本,但不包括title。如果您的Java代码引用R.string.title,则在运行时会发生以下情况:

如果设备设置为除法语以外的任何语言,则Android将从res/values/strings.xml文件中加载title。如果设备设置为法语,则Android将从res/values-fr/strings.xml文件中加载title。请注意,如果设备设置为日语,则Android将在res/values-ja/strings.xml文件中查找title。但由于该文件中没有包含此类字符串,因此Android将回退到默认设置,并从res/values/strings.xml文件中以英语加载title。

我希望它能起作用。


1
我和你遇到了同样的问题。在活动中更改语言,但在片段中没有更改。我在多个设备上尝试过,结果都一样。后来,我找到了一个解决方案,并且对我有效。
解决方案: 在Android Studio中,转到“Build”选项卡,选择“Clean Project”。等待直到完成。(进度条位于右下角,表示进度率) 接下来,再次转到“Build”选项卡,选择“Rebuild Project”。当重新构建完成时,该问题应该已经解决。
希望这可以帮助您。

0

我也遇到了这个问题,我的解决方法是使用Java/Kotlin设置文本而不是XML。 对于标题,我也采用了同样的方法,尽管在我的情况下标题并没有发生变化。


3
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

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