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

Posted

技术标签:

【中文标题】Android 仅在应用程序中更改语言:某些字符串未正确翻译【英文标题】:Android change language in app only: Some strings not translated properly 【发布时间】:2018-04-15 17:18:38 【问题描述】:

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

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

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

我还有另一个活动,活动中的一些单词被翻译,但片段和 recyclerview 中的所有单词根本没有被翻译。

我仍然找不到翻译不正确的原因。有人可以帮帮我吗?

这里有一些sn-p:

应用类

@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 以获取 recyclerview 和片段中的任何视图时,我都必须再次 setLocale。这完全不方便,我担心性能。我很想听听更改语言的更好建议。

【问题讨论】:

您真的不应该像那样直接更改语言环境。它主要工作,但系统的工作方式是让您遵循系统区域设置,并且永远不要自己更改它。如果您想自己更改它,最好编写自己的字符串系统。 您好!对不起,也许我写错了标题。我的意思是我的应用程序上有这个“更改语言”设置,我只需要在应用程序上更改语言。您能否就如何编写我们的“自己的字符串系统”进行更多解释或参考?谢谢! 您找到解决方案了吗?我有同样的问题。 【参考方案1】:

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

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

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

res/values/strings.xml 包含所有字符串的英文文本 应用程序使用,包括名为标题的字符串的文本。 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 文件。

我希望它会起作用。

【讨论】:

【参考方案2】:

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

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

希望对您有所帮助。

【讨论】:

【参考方案3】:

即使文本是静态的,从后端设置文本也对我有用。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Android 仅在应用程序中更改语言:某些字符串未正确翻译的主要内容,如果未能解决你的问题,请参考以下文章

Paypal android 集成:不支持某些语言环境货币

Yii 2:更改语言仅在刷新后工作

仅在某些活动中的操作栏?

仅在某些设备中收到“无法播放此视频”消息

PHONEGAP ANDROID:仅在应用程序主屏幕 (SplashScreen) 上隐藏状态栏

仅在 getElementsByName 中更改 CSS 属性