本地化字符串Xcode 4 ...复制.strings文件错误验证失败

问题描述 投票:65回答:12

如何在Xcode 4中定义本地化字符串?

我假设我可以使用“Localization”属性(文件检查器,右侧面板)向InfoPlist.strings添加语言。

...然后在每个本地化版本中键入“key”=“value”。

但我无法建立这个项目。我收到此错误:

复制.strings文件错误验证失败:无法读取数据,因为它已损坏。

将文本编码转换为UTF 16不能解决问题。也没有退出Xcode并再次启动它。

问题1:如何解决这些构建错误?

通过一些侥幸,我曾经设法让一个测试应用程序运行添加InfoPlist.strings(法语)和(英语)。我没有在法语字符串文件中得到错误,但我使用了英语。所以我单独留下了英文版,只是在法文版中加了一个参数。但是,在模拟器中,设置为法语 - 未选取参数。它恢复为NSLocalizedString()中指定的默认值

Q2:即使修复了构建错误,我如何使其工作?

localization xcode4
12个回答
237
投票

可能就像在行尾的缺少的分号一样简单。


0
投票

我曾经也有过一样的问题。我有一个大约60页长的本地化文件,只有一个“太多 - 花了一段时间来发现它


0
投票

我对一个小时内的大型本地化文件也有同样的问题并且应用上述所有步骤都无法解决我的问题,最后我所做的是,将本地化文件分配到某些范围(部分),比如part-a,b ,c ...并从文件中删除这些字符串,并将它们保存在文本文件中,再次构建项目,除非直到我到达只留下部分k的点,我发现错误地我按了f在我的键盘上......它解决了。我知道这不是解决方案但可能对像我这样的人有所帮助:)


0
投票

我的朋友在Windows中为我做了翻译。我发现,改变编码没有帮助,所以我做了什么:我评论了所有字符串,然后我取消注释了一些并按下cmd-B,找出哪些字符串有问题。然后我手动重写了问题字符串,之后就运行了。


98
投票

我有同样的问题找到本地化文件中的错误...

只需使用终端中的工具plutil转换文件,您将收到包含行号的正确错误消息。

plutil -lint Localizable.strings

响应

plutil [74058:707] CFPropertyListCreateFromXMLData():旧式plist解析器:在422行的字典中缺少分号。解析将被放弃。打破_CFPropertyListMissingSemicolon进行调试。 Localizable.strings:第1行的“意外字符”


14
投票

是的只是翻译了500翻译

请注意第二个字符串中的KISS是双引号,这是另一个双引号错误

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers "KISS" müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

还行吧

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers KISS müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

就是这样(用单引号替换INSIDE THE DOUBLE)

"Before using KISS Remixer, you must agree to the terms and conditions of use." = "Vor der Nutzung des Remixers 'KISS' müssen Sie die Allgemeinen Geschäftsbedingungen akzeptieren.";

提示使用二进制搜索来查找违规行。

  1. 从翻译器获取本地化文件。
  2. 将所有Localizable.strings复制到项目本地化文件夹中。
  3. 打开XCODE
  4. 全部清除 - 在iOS设备/所有模拟器中
  5. 建立
  6. 复制.strings文件错误验证失败:无法读取数据,因为它已损坏。
  7. 打开日志导航器
  8. 查看哪些翻译已损坏。
  9. 我在TextWrangler中打开了Localizable.strings。在工具栏的底部,Translator发回了UTF-16文件

UTF-16 Little Endian将其更改为'UTF-16'10。清理构建/构建相同错误

文件中的某个地方是

分号丢失?

/* popup message */
"Save mix" = "Enregistrer le mixage";

/* popup message */
"Save mix" = "Enregistrer le mixage"

“额外”双引号“双引号内”

错误

/* popup message */
"Save mix" = "Enregistrer le "mix" age"

/* popup message */
"Save mix" = "Enregistrer le mixage"

还有权利

/* popup message */
"Save mix" = "Enregistrer le 'mix'age"
  • 记住,我在两个地方用双引号找到“KISS”的文件中可能有多个错误

8
投票

检查文件编码。这通常是由扩展字符(如重音字符)和非UTF编码引起的。特别是在XCode 4中有一个错误,如果你将重音字符复制到Safari的字符串文件中,它将保存为Western Mac OS Roman。


7
投票

令人遗憾的是,XCode的语法检查程序无法解决这个问题。

您还可以将文本复制到Text Wrangler(我从翻译器接收文件后执行的操作)以检查正确引用的字符串或运行正则表达式检查分号。 Text Wrangler中的语法着色将显示错误引用(或错误转义)的字符串,其中XCode的字符串编辑器当前不会。


4
投票

在我的情况下,plutil -lint Localizable.strings没有帮助,因为它产生的错误信息是“Unexpected character " at line 1”当真正的错误是而不是2340行的"


2
投票

在我的情况下,这是一个从网站上复制粘贴的“引用”标志的问题,这是不被接受的。

我应该已经检测到语法突出显示不起作用,但我只是阅读源“引号,键,引号,等号,引号,值,引号......好吧”。


2
投票

如果在本地化中使用双引号“”,请不要忘记使用反斜杠转义它们。


1
投票

应该检查这样的语法

"Recharge_Data" = "Data";

1)“”应该在适当的地方。

2)=应该检查。

3);应该在声明结尾处。

© www.soinside.com 2019 - 2024. All rights reserved.