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

时间:2017-11-03 03:10:20

标签: java android string android-fragments localization

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

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

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

我还有另一项活动,其中一些活动中的单词已被翻译,但片段内的所有单词和Recyclerview根本没有被翻译。

我仍然无法找到为什么它没有正确翻译。有人能帮助我吗?

这里有一些片段:

申请类

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

请帮帮我!谢谢!

(的更新

我发现每当我想要访问 Strings.xml 以获取recyclerview和片段中的任何视图时,我都必须再次设置。这非常不方便,我担心性能。我很想听到更好的改变语言的建议。

2 个答案:

答案 0 :(得分:2)

检查一下。也许某些字符串不包括在内。 来自文档。

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

  

假设您的应用程序的默认语言是英语。假设   您还想要将应用程序中的所有文本本地化   法语和您应用程序中的大部分文本(除了以外的所有内容)   该应用程序的标题)日语。在这种情况下,您可以创建   三个替代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文件。

我希望它能奏效。

答案 1 :(得分:0)

我和你有同样的问题。语言在“活动”中更改,但在“片段”中不变。我在多台设备上进行了尝试,所有结果均相同。后来,我想出了一个解决方案,它确实对我有用。

解决方案: 在Android Studio中,转到“构建”标签,然后选择“清理项目”。等待直到完成。 (加载栏位于右下角,指示进度) 接下来,再次转到“构建”选项卡,选择“重建项目”。完成重建后,该问题应得到解决。

希望获得帮助。