(我已在帖子底部添加了更新)
我目前正在做一个支持多种语言的项目。我已经为所有语言编写了所有的字符串。
我使用BaseActivity、Application类和LocaleHelper来管理我的应用程序的本地化。然后我在我的应用程序上发现了此行为。在我将Locale设置为另一种语言后,一些Activity中的字符串被更改并正确,但在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());
}
请帮帮我!谢谢!!
(更新)
我发现每当我想访问Strings.xml中的任何视图和片段时,我都必须再次使用setLocale。这非常不方便,而且我担心性能。我希望听到更好的建议来改变语言。
3条答案
按热度按时间hi3rlvi21#
看看这个。也许有些字符串没有包含。来自文档。
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文件加载英语标题。
我希望它能起作用。
bis0qfac2#
我也遇到过和你一样的问题。Activity中的语言会发生变化,但Fragments中的语言不会发生变化。我在多个设备上尝试过,结果都是一样的。后来,我找到了一个解决方案,它确实对我有效。
解决方案:在Android Studio中,进入“Build”选项卡,选择“Clean Project”。等待它完成。(右下角放置了一个加载条,指示进度)接下来,再次进入“Build”选项卡,选择“Rebuild Project”。当它完成重建时,问题应该解决了。
希望这能有所帮助。
bhmjp9jg3#
我也遇到过这种情况,我所做的是从Java/Kotlin而不是XML中设置文本。我也对标题做了这样的设置,尽管在我的例子中标题没有改变。