【问题标题】:My Toast message is not translated; it's displayed in the default language only我的 Toast 消息未翻译;它仅以默认语言显示
【发布时间】:2016-11-25 14:59:06
【问题描述】:

我创建了一条 Toast 消息来通知用户有关设备方向变化的信息:

if (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, R.string.orientation_change, Toast.LENGTH_SHORT).show();
        recreate();
    }

消息会在需要时显示,但在我的应用程序的其他语言版本中,R.string.orientation_change 文本以默认语言显示,即英语。这在模拟器和真实设备中进行了检查,每个结果都相同。

有没有办法让 Toast 消息本地化?

【问题讨论】:

  • 这应该没有帮助...但是您是否尝试使用 getResources().getString(R.string.orientation_change) 代替?只有在 Toast 中显示的文本失败?
  • 同样的结果,不幸的是...... Toast 会显示,但应该是德语时显示的是英文。
  • 结构正确:构建项目时出错,Lint 没有发现在默认字符串文件中设置了 translatable="false" 标志 - 请参阅作为答案发布的摘要.
  • 很好......很高兴知道!!!

标签: android android-toast


【解决方案1】:

可能感觉像是一个 hack,但获取资源来为您进行翻译,而不是内部 Toast 代码。

Toast.makeText(this, getResources().getString(R.string.orientation_change), Toast.LENGTH_SHORT).show();

【讨论】:

  • 翻译文本位于values 目录中。该方法应该在那里寻找文本,但它只接受英文值。
  • 值目录不代表默认语言是英语吗?您是否试图让它显示 values-es(或其他语言)目录中的字符串?也许包括您的 strings.xml 文件可能会有所帮助。
  • Lint 检查有问题,但我已经解决了 - 请查看我作为答案发布的摘要。
【解决方案2】:

您必须按照以下结构为每种要支持的语言提供一个字符串:

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

更多信息,请参考:https://developer.android.com/training/basics/supporting-devices/languages.html

【讨论】:

  • 检查了结构,在我的情况下看起来一样。
  • 当然,您输入的是所有这些 XML 的翻译文本,是吗?如果您的默认语言是 PL,您必须创建一个 value-XX 文件夹,其中 XX 是您正在测试的语言的符号,是吗?以及如何测试所有这些,更改手机的语言并重新启动应用程序?谢谢。
  • 您指出的所有检查都已完成,问题出在 Lint - 我已将摘要作为答案发布,请检查。
【解决方案3】:

解决了:

  1. 清理项目;
  2. 再次构建项目。

在构建时,我收到一个错误,即translatable="false" 参数设置在用英语定义的值旁边,尽管也为其他语言准备了值。

由于某种原因,Lint 之前没有发现它,但无论如何,现在问题已经解决了。

感谢你们的努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2015-03-29
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多