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

时间:2011-04-12 12:29:19

标签: localization xcode4

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

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

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

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

  

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

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

Q1:如何解决这些构建错误?

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

中指定的默认值

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

12 个答案:

答案 0 :(得分:237)

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

答案 1 :(得分:98)

我遇到了在本地化文件中发现错误的问题......

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

  

plutil -lint Localizable.strings

响应

  

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

答案 2 :(得分:14)

是的,只是翻阅了500个翻译

请注意第二个字符串中的KISS是双引号,它是另一个双引号 ERROR

"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.";

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

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

    文件中的某处是

    缺少分号?

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

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

    WRONG

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

    RIGHT

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

    ALSO RIGHT

    /* popup message */
    "Save mix" = "Enregistrer le 'mix'age"
    
    • 请记住文件中可能存在多个错误 我在两个地方用双引号发现了“KISS”

答案 3 :(得分:8)

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

答案 4 :(得分:7)

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

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

答案 5 :(得分:4)

就我而言,plutil -lint Localizable.strings没有帮助,因为当真正的错误为Unexpected character " at line 1而不是时,它产生的错误消息为“"”第2340行。

答案 6 :(得分:2)

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

我应该已经检测到语法突出显示无法正常工作,但我只是阅读了源代码“引号,键,引号,等号,引号,值,引号......好吗”。

答案 7 :(得分:2)

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

答案 8 :(得分:1)

应该检查这样的语法

"Recharge_Data" = "Data";

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

2)=应该检查。

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

答案 9 :(得分:0)

我遇到了同样的问题。我有一个大约60页的本地化文件,只有一个“太多 - 花了一段时间来发现

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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