带有translatable =“ false”的strings.xml中的“在此处翻译但未在默认语言环境中找到”错误


98

这是我的values \ strings.xml(默认文件),所有内容都可以自我解释: 在此处输入图片说明

我的问题:

  1. 如果我正在编辑默认语言环境(values \ strings.xml),如何在“默认语言环境中找不到”?
  2. 如果设置,translatable="false"怎么会出现皮棉翻译错误?在values-pl \ strings.xml(以及values-ru,values-iw文件夹中)中,字符串甚至不存在?无论如何都不应该。
  3. 我似乎无法理解为什么我没有收到俄文字符串的错误。

(我将在此处显示values-ru \ string.xml或values-pl \ string.xml,但是没有什么值得关注的,因为无论如何都缺少字符串...)


2
如果这种情况时有发生,请执行通常的清理操作(清理/重建或使缓存无效/在ASTUDIO上重新启动,等等。)当然,除非错误是“真实的”。;)我的意思是,对于Android Studio 3.2(beta atm),它是随机发生的,带有下划线的好字符串,您触摸某些东西后错误就会消失。越野车。_(ツ)_ /¯
马丁Marconcini


目前正在运行Android Studio 3.3.2。如果我在strings.xml文件中重复一个字符串名称(例如在复制粘贴时),这偶尔会发生在我身上。这有点令人沮丧,但清理并重新启动似乎可以解决问题。
约翰·里格斯

如果将资源从一个文件移动到另一个模块中的另一个文件,则会经常发生这种情况。我每次都要使缓存无效,清理/构建没有任何效果。似乎与索引编制有关。
3c71

运行该应用程序对我
有用

Answers:


82

这件事也发生在我身上

我做两件事:

  • 验证整个文件以查看未完成的其他翻译(我在文件en中有,但在pt-br中)
  • 清理,更新gradle并退出并重新启动Android Studio

8
只需清理项目并重新启动Android Studio。它奏效了;)
Ektos974

19
如果清理项目并无法重新启动Android Studio,请尝试运行“使缓存无效/重新启动”。
makuno

2
清理并使缓存无效/重新启动。也为我工作!:)
Reeshabh Ranjan

2
❗在执行此操作之前,请尝试删除该行并重新添加它。生命短暂。
诺兰·艾米

我认为您应该为答案添加补充,即命令:Invalidate Caches / Restart。为了不搜索注释,例如我所做的。
Morozov

68

重建可能需要很长时间。YMMV,但是...

只需删除违规行并重新添加即可。

为我工作。非常快。


3
我不得不做的更少。我重命名了字符串,然后将其改回了。
马特

1
哇!这是超级快。
userAbhi

3
选择有问题的线ctrl-X,ctrl-V。做完了 为我工作!
ONE

1
选择有问题的行,删除,撤消(命令/控件z)。做完了 为我工作!
HendraWD

1
更快的解决方案
mochadwi

22

就我而言,这对我有帮助:

  1. 选择导致错误的字符串。
  2. 剪下来
  3. 再次粘贴

如果对您不起作用,请尝试将相同的字符串添加到strings.xml(v21)文件中。


10

Invalidate Caches / Restart ...重新启动android studio。它为我工作。实际上,这是在我从其他计算机复​​制文件并通过文件资源管理器粘贴时发生的。


5

我有同样的错误消息,只是有一个奇怪的问题,那就是它会被默认区域设置本身和所有翻译所引发。事实证明,您不应在名称中使用点(例如name =“ bla.blub”),因为它会在内部转换为“ bla_blub”,然后就无法与“ bla.blub”匹配,因此会出现错误。我只需要在默认语言环境中将点更改为下划线,然后其他翻译中的所有其他错误(包括名称中的点)也将消失。

但是请注意,其他构建工具仍然会产生问题,因此请用下划线替换所有点!


4

退出Android Studio并重新启动它为我修复了它。


它也对我有用,它比使缓存无效并重新启动要容易得多。
3c71

3

我通过以下步骤解决了这个问题:

  1. 清理我的项目

  2. 重建它

  3. 最后按无效的缓存/在文件菜单中重新启动


2

我创建了一个工具来管理android应用的翻译状态。它不仅告诉您其他语言缺少哪些字符串,还可以报告并清除在默认翻译文件中可能删除的剩余字符串。

https://github.com/gubatron/android-missing-strings

要清除其他语言中的所有残留物,请像这样调用

./ams --cleanleftovers -o all.txt

这将清除剩余的字符串,并将所有语言的缺少字符串报告输出到all.txt文件中



1

只要确保您在所有字符串文件(包括相同的大小写)上具有相同的命名约定即可。假设您在strings.xml中具有“ sign_in”,在fr / string.xml中具有“ sign_In”,那么它将在fr / strings.xml中给您带来错误,例如“在此处翻译但在默认语言环境中找不到”。因此,当您编辑为“ sign_in”时。错误将消除。


0

复制和粘贴对我不起作用。

我还尝试了清理并重新启动,以前的错误消失了,但是新输入的字符串仍然出现新的错误。

我尝试关闭打开的strings.xml文件和Translations Editor,然后重新启动。

strings.xml文件和翻译编辑器

这对我行得通。


0

我的xml文件中的所有字符串都有这个问题。

事情是,您的默认值 strings.xml不应该具有tools:locale其他翻译文件具有的属性。如果是这样,则每当我在发布模式下编译应用程序时,它将其视为另一个翻译文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.