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

Java Android仅在应用程序中更改语言:某些字符串未正确翻译,java,android,string,android-fragments,localization,Java,Android,String,Android Fragments,Localization,(我在帖子底部添加了一个更新) 我目前正在从事一个支持多种语言的项目。我已经为所有语言编写了所有字符串 我使用BaseActivity、应用程序类和LocaleHelper来管理我的应用程序上的本地化。 然后我在我的应用程序中发现了这种行为。在我将Locale设置为另一种语言后,某些活动中的字符串会被更改和更正,但在MainActivity中不会更改,即使它们有一些相同的字符串。我尝试重新启动应用程序,但它仍然无法工作 我还有一个活动,活动中的一些单词被翻译了,但是片段和回收视图中的所有单词都没

(我在帖子底部添加了一个更新)

我目前正在从事一个支持多种语言的项目。我已经为所有语言编写了所有字符串

我使用BaseActivity、应用程序类和LocaleHelper来管理我的应用程序上的本地化。 然后我在我的应用程序中发现了这种行为。在我将Locale设置为另一种语言后,某些活动中的字符串会被更改和更正,但在MainActivity中不会更改,即使它们有一些相同的字符串。我尝试重新启动应用程序,但它仍然无法工作

我还有一个活动,活动中的一些单词被翻译了,但是片段和回收视图中的所有单词都没有被翻译

我还是不明白为什么翻译得不好。有人能帮我吗

以下是一些片段:

应用程序类

@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);
}
基本活动

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和片段中的任何视图时,都必须再次设置Locale。这太不方便了,我很担心它的性能。我很想听到一个更好的改变语言的建议。

看看这个。也许有些字符串不包括在内。 来自文件

假设应用程序的默认语言是英语。假设 另外,您希望将应用程序中的所有文本本地化为 法语,以及应用程序中的大部分文本(除 应用程序的名称)转换为日语。在这种情况下,您可以创建 三个可选的strings.xml文件,每个文件存储在特定的语言环境中 资源目录:

res/values/strings.xml包含所有 应用程序使用,包括名为title的字符串的文本。 res/values fr/strings.xml包含所有字符串的法语文本, 包括标题。res/values ja/strings.xml包含 除标题外的所有字符串。如果您的Java代码引用 R.string.title,以下是运行时将发生的情况:

如果设备设置为法语以外的任何语言,Android将 从res/values/strings.xml文件加载标题。如果设备已设置 对于法语,Android将从res/values fr/strings.xml加载标题 文件请注意,如果设备设置为日语,Android将显示 用于res/values ja/strings.xml文件中的标题。但是因为没有这样的 字符串包含在该文件中,Android将返回到 默认值,并将从 res/values/strings.xml文件


我希望它能起作用。

我和你有同样的问题。语言在活动中变化,但在片段中没有变化。我在不止一台设备上试过,结果都一样。后来,我想出了一个解决办法,它确实对我有用

解决方案: 在Android Studio中,进入“构建”选项卡,选择“清理项目”。等到它完成。(右下角放置一个加载条,指示进度) 接下来,再次转到“构建”选项卡,选择“重建项目”。当它完成重建后,问题应该得到解决


希望这对您有所帮助。

您真的不想这样直接更改区域设置。它基本上是可以工作的,但系统的工作方式是您遵循系统区域设置,并且永远不要自己更改它。如果你想自己改变它,你最好还是写自己的字符串系统。你好!对不起,也许我写错标题了。我的意思是,我的应用程序上有这个“更改语言”设置,我只需要在应用程序上更改语言。关于如何编写我们的“自己的字符串系统”,你能解释更多或提供参考吗?谢谢你找到解决办法了吗?我也有同样的问题。