【问题标题】:XCode reports localized plist is corruptXCode 报告本地化 plist 已损坏
【发布时间】:2011-10-29 03:13:31
【问题描述】:

我有一个在我的应用程序中使用的 plist 文件,我可以对其进行本地化,因此我在我的项目中获得了两个条目,一个用于英语,一个用于西班牙语,当我编译运行应用程序时它可以工作,但当然在这个阶段内容完全相同。

然后我在 Finder 中将西班牙语 plist 替换为已为我翻译成西班牙语的 plist,我可以在 XCode 编辑器中毫无问题地查看内容。

但是,当我尝试编译时,我收到一条错误消息:

.../en.lproj/myData.plist:0: error: reading plist: The data could not be read because it has been corrupted.

但是英文的没动过?

你确定可以通过这种方式将本地化文件复制到项目中吗?

【问题讨论】:

  • 可能文件已损坏。你看过吗?
  • "我可以在 XCode 编辑器中查看内容没有问题。"

标签: iphone localization


【解决方案1】:
  1. 打开磁盘实用程序修复权限。

  2. 打开终端并运行以下命令:

    plutil -s /somewhere/yourfile1.plist

它会通过向您显示确切的错误和线路,让您专注于问题的所有细节。所以你必须去报告的行并用文本编辑器自己修复它。

【讨论】:

    【解决方案2】:

    可能发生的一件事是有人弄乱了您的标签。

    在 Xcode 中右键单击您的西班牙语 plist,选择 Open AS 然后选择 Source Code

    然后检查您的 plist 以确保您的所有开始和结束标签仍然存在,没有拼写错误,那里是否有任何垃圾字符,并且您没有尝试使用整数中的字符串等:

    例子:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>1</key>
        <dict>
            <key>a</key>
            <string>a1</string>
            <key>b</key>
            <string>b1</string>
        </dict>
        <key>2</key>
        <dict>
            <key>a</key>
            <string>a2</string>
            <key>b</key>
            <string>b2</string>
        </dict>
        <key>3</key>
        <dict>
            <key>a</key>
            <string>a3</string>
            <key>b</key>
            <string>b3</string>
        </dict>
    </dict>
    </plist>
    

    当我从 PDF 复制并粘贴到 Xcode 中时,我曾经遇到过一些问题(可能是某种不正确的符号?),当我重新输入它时它工作正常。此外,通常很难从文字处理器生成有效的 plist。

    【讨论】:

    • 这很有帮助!谢谢,我会这样做并让您知道...除此之外,我是否正确假设我有两个 plist 文件 en 和 es 并且它们包含包含字符串的字典我可以使用本地化来以正确的语言读取字符串?谢谢
    • 是的,请参阅 Apple 的:iOS Internationalization and Localization
    【解决方案3】:

    如果您忘记了行尾的分号,字符串文件也会发生这种情况。傻我。

    【讨论】:

      【解决方案4】:

      如果字符串中有 &,也会发生这种情况。

      替换:

      <string>SomeText & SomeMoreText</string>
      

      与:

      <string>SomeText &amp; SomeMoreText </string>
      

      【讨论】:

        【解决方案5】:

        为了任何遇到我确切问题的人的利益:

        我也遇到了损坏的 plist 问题。

        我的 plist 是通过将 OpenOffice 中的电子表格导出为 CSV(UTF-8 格式)生成的。然后我会使用我编写的简单 Python 脚本将 CSV 文件转换为 plist。我相信我的问题是我保存的电子表格中存在一些单元格引用错误(即单元格显示“Err:511”)。错误的存在导致 UTF-8 导出以某种方式失败,从而导致 plist 损坏。

        我还没有完全验证上述情况,但我很确定这是问题所在:在我修复了 OpenOffice 中某些单元格中的错误后,我的 plist 再次工作。

        This answer 演示了使用iconv 命令来验证文件是否正确编码——在这种情况下可能很有用。

        【讨论】:

          【解决方案6】:

          这发生在我身上,因为我设法在我的 plist 中删除了一个随机引号 (")。删除它并让它工作。

          我在 TextWrangler 中打开了文件,所有文件都使用 Cmd-F 来搜索任何可能导致违规的字符。

          【讨论】:

            【解决方案7】:

            对我来说,它是本地化字符串名称中的一个空格:

            而不是this_is_the_string_we_will_translate

            我有this_is_the string_we_will_translate

            很难发现。

            【讨论】:

              【解决方案8】:

              开始调试 plist 的一个好地方是使用 XML 验证器,例如:http://www.w3schools.com/xml/xml_validator.asp

              此功能也内置于大多数 Web 开发环境中。

              【讨论】:

                【解决方案9】:

                发生在我身上,错过了0: 2012-12-9T06:00:00Z 应该 2012-12-09T06:00:00Z

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-05-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多