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

问题描述 投票:0回答:4

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

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

我使用 BaseActivity、Application 类和 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());
}

请帮助我!谢谢!!

更新

我发现每当我想访问回收器视图和片段中的任何视图的Strings.xml时,我都必须再次设置Locale。这完全不方便,而且我担心性能。我很想听到更好的更改语言的建议。

java android string android-fragments localization
4个回答
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
投票

我和你有同样的问题。语言在 Activity 中发生变化,但在 Fragments 中不变。我在不止一台设备上尝试过,所有设备都有相同的结果。后来我想出了一个解决方案,它确实对我有用。

解决方案: 在 Android Studio 中,转到“Build”选项卡,选择“Clean Project”。等到完成。 (右下角有一个加载条,指示进度) 接下来,再次转到“Build”选项卡,选择“Rebuild Project”。重建完成后,问题应该就解决了。

希望这有帮助。


1
投票

这也发生在我身上,我所做的是从 Java/Kotlin 设置文本而不是 XML。 我也对标题这样做了,尽管在我的例子中标题没有改变。


0
投票

就我而言,我必须在 MainActivity 中附加 BaseContext

class MainActivity : AppCompatActivity() {

override fun attachBaseContext(newBase: Context) {
    val languageCode = (newBase.applicationContext as? MyApp)?.getSavedLanguage(newBase) ?: "en"
    val contextWithLanguage = (newBase.applicationContext as? MyApp)?.applyLanguage(newBase, languageCode) ?: newBase
    super.attachBaseContext(contextWithLanguage)
}
© www.soinside.com 2019 - 2024. All rights reserved.