(我已在帖子底部添加了更新)
我目前正在开发一个支持多种语言的项目。我已经为所有语言编写了所有字符串。
我使用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和片段中的任何视图时,我都必须再次设置。这非常不方便,我担心性能。我很想听到更好的改变语言的建议。
答案 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中,转到“构建”标签,然后选择“清理项目”。等待直到完成。 (加载栏位于右下角,指示进度) 接下来,再次转到“构建”选项卡,选择“重建项目”。完成重建后,该问题应得到解决。
希望获得帮助。