我的 Toast 消息没有被翻译;它只显示默认语言。

3

我创建了一个 Toast 消息来通知用户设备方向发生变化:

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

每当需要时,消息会显示出来,但在我的应用的其他语言版本中,默认语言英语下会显示R.string.orientation_change文本。这已在模拟器和实际设备中进行了检查,结果相同。

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


1
这个应该没什么帮助……但你试过使用getResources().getString(R.string.orientation_change)吗?只有Toast显示的文本出了问题吗? - guipivoto
同样的结果,不幸的是......弹出提示框被显示出来,但它应该是德语却是英语。 - AbreQueVoy
结构是正确的:在构建项目时出现了一个错误,Lint 没有发现默认字符串文件中设置了 translatable="false" 标志 - 请参见作为答案发布的摘要。 - AbreQueVoy
不错... 很好知道!!! - guipivoto
3个回答

2

问题已解决:

  1. 清理了项目;
  2. 重新构建了项目。

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

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

感谢你们的努力。


2
可能感觉像是一种“hack”的做法,但要获取资源来为您进行翻译,而不是在 Toast 代码内部进行翻译。
Toast.makeText(this, getResources().getString(R.string.orientation_change), Toast.LENGTH_SHORT).show();

翻译后的文本位于“values”目录中。该方法应在其中查找文本,但它只接受英文值。 - AbreQueVoy
值目录是否未表示默认语言为英语?您是否尝试从values-es(或其他语言)目录中显示字符串?包括您的strings.xml文件可能会有所帮助。 - FishStix
Lint 检查出了一些问题,但我已经解决了 - 请看下我发布的总结作为答案。 - AbreQueVoy

2

检查了结构,看起来在我的情况下一样。 - AbreQueVoy
当然,你在所有这些XML中输入了翻译文本,是吗?如果你的默认语言是PL,你必须创建一个value-XX文件夹,其中XX是你正在测试的语言的标志,对吗?你是如何测试所有这些的,改变你手机的语言并重新启动应用程序吗?谢谢。 - statosdotcom
你指出的所有检查都已经完成,问题出在Lint上 - 我将总结发布为答案,请检查一下。 - AbreQueVoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接