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

Localization 本地化字符串Xcode 4。。。复制.strings文件错误验证失败,localization,xcode4,Localization,Xcode4,如何在Xcode 4中定义本地化字符串 我假设我可以使用“本地化”属性(文件检查器,右面板)将语言添加到InfoPlist.strings中 …然后在每个本地化版本中键入“key”=“value” 但是我不能建造这个项目。我得到这个错误: Copy.strings文件错误验证失败:无法读取数据,因为它已损坏 将文本编码转换为UTF16并不能解决这个问题。退出Xcode并重新启动它也是如此 问题1:如何纠正这些构建错误 出于某种侥幸,我曾经设法让一个测试应用程序运行,添加了InfoPlist.st

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

我假设我可以使用“本地化”属性(文件检查器,右面板)将语言添加到InfoPlist.strings中

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

但是我不能建造这个项目。我得到这个错误:

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

将文本编码转换为UTF16并不能解决这个问题。退出Xcode并重新启动它也是如此

问题1:如何纠正这些构建错误

出于某种侥幸,我曾经设法让一个测试应用程序运行,添加了InfoPlist.strings(法语)和(英语)。我没有在法语字符串文件中得到错误,但在英语字符串文件中得到了错误。所以我把英文的放在一边,把一个参数放在法文的里面。然而,在模拟器中,设置为法语-参数没有被拾取。它恢复为NSLocalizedString()中指定的默认值


问题2:即使修复了生成错误,我如何使其工作?

可能很简单,就像行末尾缺少分号一样。

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

很遗憾XCode的语法检查器无法解决这个问题


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

在我的例子中,这是从网站粘贴的“引用”符号副本的问题,不被接受


我应该从语法突出显示中检测到它不起作用,但我只是读取了源代码“引号符号、键、引号符号、等号、引号符号、值、引号符号……是的,好的”

是的,刚刚翻了500遍

请注意,第二个字符串中的吻在另一个双引号内的双引号中 错误

这没关系

"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.";
原样(替换为双引号内的单引号)

小费 使用二进制搜索查找有问题的行

  • 从转换器获取本地化文件
  • 将所有Loclaizable.strings复制到项目本地化文件夹中
  • 开放XCODE
  • 清除所有-内置iOS设备/所有模拟器
  • 建造
  • Copy.strings文件错误验证失败:无法读取数据,因为它已损坏
  • 打开日志导航器
  • 查看哪些翻译已损坏
  • 我在TextWrangler中打开了Localizable.strings 在工具栏底部,翻译器已返回 UTF-16文件格式
  • UTF-16小端 将其改回“UTF-16” 10已清理的构建/构建 同样的错误

    文件中的某个地方是

    缺少分号? “双引号内的额外“双引号” 错

    也对

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

      • 我也有同样的问题。我有一个大约60页长的本地化文件,只有一个“太多了-花了一段时间才发现这一点”

        我想从一个小时开始为一个大的本地化文件解决同样的问题,应用所有上述步骤都不会解决我的问题,最后我要做的是,将文件本地化到一些范围(部分),比如说a、b、c部分…然后从文件中剪切这些字符串,并将它们保存在文本文件中,重新构建项目,直到我到达只剩下k部分的点,我发现我错误地在键盘上按了f。.fewww!问题解决了。我知道这不是一个解决方案,但可能对像我这样的人有所帮助:)

        在本地化文件中查找错误时遇到相同问题

        只需使用终端中的plutil工具转换文件,您将得到一条带有行号的正确错误消息

        plutil-lint Localizable.strings

        回应

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


        我的朋友在Windows上为我翻译。我发现,改变编码没有帮助,
        所以我所做的是:我注释了所有的字符串,然后取消注释了一些字符串,并按下cmd-B,以找出哪些字符串有问题。然后我手动重写了问题字符串,然后它就开始工作了

        在我的例子中,
        plutil-lint Localizable.strings
        没有帮助,因为它产生的错误消息是第1行的“
        意外字符”,而实际错误是第2340行的
        ,而不是

        如果在本地化中使用双引号“,别忘了用反斜杠将它们转义。

        应该检查如下语法

        "Recharge_Data" = "Data";
        
        1) ”“应该在适当的地方

        2) =应进行检查


        3) );应该在声明的末尾

        谢谢。这很有帮助。然而,尽管它构建并运行,但仍然不起作用。NSLocalizedString(@“default”,@“greeting”)始终为我提供默认值。是否有多个.strings文件?如果是,请使用NSLocalizedStringFromTable。它现在可以工作了。不知道为什么。可能会再次保存和加载?您的问题是NSLocalizedString(x,y)将所需的键作为第一个参数(x),并将注释作为第二个参数(y),因此您在注释中编写的内容应该是:
        NSLocalizedString(@“greeting”,@“default”)
        当缺少分号时,Xcode不知何故直到y才显示该警告
        /* 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"
        
        "Recharge_Data" = "Data";