本地化stringXCode 4 …复制.strings文件错误validation失败

如何在XCode 4中定义本地化的string?

我以为我可以使用“本地化”属性(文件检查器,右侧面板)添加语言InfoPlist.strings。

…然后在每个本地化版本中input“key”=“value”。

但是我不能build立这个项目。 我得到这个错误:

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

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

问题1:如何弥补这些构build错误?

有些侥幸,我曾经设法得到一个testing应用程序来运行添加InfoPlist.strings(法文)和(英文)。 我没有得到法文string文件的错误,但我用英文做了。 所以我把英文单独留下,只给法文一个参数。 但是,在模拟器中,设置为法语 – 参数未被拾取。 它恢复到在NSLocalizedString()中指定的默认值

问题2:即使构build错误得到纠正,我如何才能正常工作?

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

我有同样的问题在本地化文件中find错误…

只要使用terminal中的工具plutil转换文件,你将得到一个适当的错误信息的行号。

plutil -lint Localizable.strings

响应

plutil [74058:707] CFPropertyListCreateFromXMLData():旧样式的plistparsing器:在第422行的字典中缺less分号。parsing将被废弃。 打破_CFPropertyListMissingSemicolon进行debugging。 Localizable.strings:意想不到的字符“在第1行

是的,只是通过500翻译拖网

请注意第二个string中的KISS是双引号,它们是INSIDE另一个双引号错误

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

就像这样(用单引号代替内部双引号)

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

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

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

UTF-16 Little Endian将其更改回“UTF-16”10.清除构build/构buildSAME ERROR

文件中的某处是

缺less分号?

 /* 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" 
  • 记住在一个文件中可能有多个错误,我在两个双引号中find了“KISS”

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

XCode的语法检查器无法弄清楚这一点真是太遗憾了。

您也可以将文本复制到文本Wrangler(我从转换器接收文件后做的事情)来检查引用正确的string或运行正则expression式检查分号。 Text Wrangler中的语法着色将显示错误引用(或错误转义)的string,其中XCode的string编辑器当前没有。

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

在我的情况下,这是一个从网站复制粘贴“引号”的问题,没有被接受。

我应该检测到,从语法高亮不起作用,但我只是读源“引号,键,引号,平等标志,报价标志,价值,报价标志… y好吗”。

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

你应该像这样检查语法

 "Recharge_Data" = "Data"; 

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

2)=应该被检查。

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

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

我从一个小时的大本地化文件相同的问题,并应用以上所有步骤将不会解决我的问题,最后我做的是,将本地化文件放入一些范围(部分),说part-a,b ,c …,并从文件中剪下这些string,并将它们保存在一个文本文件中,再次构build项目,除非和直到我只剩下部分-k的地方,我发现错误地按了f在我的键盘上..fewww! 它解决了。 我知道这不是一个解决scheme,但可能会帮助像我这样的人:)

我的朋友在Windows中为我做了翻译。 我发现,改变编码没有帮助,所以我做了:我评论了所有的string,然后我取消了一些注释,按下cmd-B,找出哪些string有问题。 然后,我手动重写了问题string,然后工作。