【问题标题】:Localizable.strings - The data couldn’t be read because it isn’t in the correct formatLocalizable.strings - 无法读取数据,因为它的格式不正确
【发布时间】:2018-04-06 01:23:27
【问题描述】:

如果我从 textedit 或 web 复制某些内容并将其粘贴到可本地化的文件中,则会显示此编译错误。如果我在可本地化的文件中键入它们,它不会显示任何错误。我向您保证,我使用了正确的格式和 ';'在文件中。

"New" = "New";
"In Progress" = "In Progress";
"Waiting" = "Waiting";
"Closed" = "Closed";

【问题讨论】:

    标签: ios xcode ios11 localizable.strings


    【解决方案1】:
    • 从终端使用 plutil

    您必须为每个版本的可本地化文件运行它。例如

    1. cd 进入你的项目根目录
    2. cd eb.lproj - 您可以将其替换为 您正在使用的任何本地化。
    3. plutil -lint Localizable.strings

    当您运行第 3 步时,您会看到一个错误,告诉您文件有什么问题。否则你会被告知文件没问题

    请注意,plutil 输出很糟糕,它似乎总是说“第 1 行出现意外字符”,但在该输出之上,它会打印其他内容,例如第 121 行缺少分号,这是真正的错误

    【讨论】:

    • 它显示Unexpected character " at line 1,它是第一个字符串,如"app_name"="Any Name"
    • 请注意,plutil 输出很糟糕,它似乎总是说“第 1 行出现意外字符”,但在该输出之上,它会打印其他内容,例如第 121 行缺少分号,这是真正的错误。 ..
    • 对我来说,plutil 在第 1 行显示了相同的错误,尽管没有任何错误。但是pl < Localizable.strings 为我工作。
    【解决方案2】:

    对我来说,它缺少分号。如果您使用工具生成 .strings 文件,请确保没有可能“吃掉”分隔分号的未转义引号。

    【讨论】:

    • 分号是我的问题,因为我切换到 swift
    • 这里有同样的问题。谢谢!
    • 这个答案是真正的 GOAT,永远不会想到这一点,因为 XCode 给出了一个非常无用的错误......
    • 这个答案是救命稻草。谢谢你:)
    【解决方案3】:

    pl 优于 plutil -lint Localizable.strings

    日志会显示类似这样的内容

    2019-08-14 16:39:34.066 pl[21007:428513] CFPropertyListCreateFromXMLData():旧式 plist 解析器:第 427 行的字典中缺少分号。解析将被放弃。中断 _CFPropertyListMissingSemicolon 进行调试。 2019-08-14 16:39:34.068 pl[21007:428513] CFPropertyListCreateFromXMLData():旧式 plist 解析器:第 427 行的字典中缺少分号。解析将被放弃。中断 _CFPropertyListMissingSemicolon 进行调试。 2019-08-14 16:39:34.071 pl[21007:428513] *** 异常解析 ASCII 属性列表:NSParseErrorException 错误域 = NSCocoaErrorDomain 代码 = 3840“意外字符/在第 1 行”UserInfo={NSDebugDescription=意外字符/在第 1 行,kCFPropertyListOldStyleParsingError=错误域=NSCocoaErrorDomain 代码=3840“缺少';'在第 427 行" UserInfo={NSDebugDescription=Missing ';'在第 427 行}}

    【讨论】:

    • 这是最好的解决方案,它解决了我的问题。 “plutil”在第一个符号上显示错误,但“pl
    • 绝对是更好的解决方案。它为您提供更多信息和问题的行号,而不是通用输出。
    • 这帮助我轻松找到了根本原因
    【解决方案4】:

    我知道这个问题是很久以前提出的,但我的方案和解决方案有点不同。 今天我遇到了同样的问题,但是当我尝试使用检查问题时

    plutil -lint Localizable.strings

    我得到了 OK 状态,这意味着一切都很好,然后我尝试使用

    来查找问题

    pl

    但我再次打印了没有提到错误的文件文本,然后我尝试了一个技巧,它对我有用。

    • 右键单击 Localizable.strings 文件
    • 然后选择选项Open As选项
    • 然后选择选项ASCII Property List

    就是这样,XCode 向我显示了行号的问题,问题是我将这个 DéjàVerified 文本作为指定行的键,这有助于我识别和解决问题,我希望它会节省别人的时间。

    干杯!

    【讨论】:

    • 我们在哪里可以阅读这个 pl 命令的文档?在任何地方都找不到
    【解决方案5】:

    就我而言,我在字符串对之间缺少“=”。甚至 plutil 也没有帮助我发现错误行。我手动检查了每个字符串对。 :/

    【讨论】:

      【解决方案6】:

      这可能有多种原因:

      1. 缺少分号。
      2. 文件中的空格无效。
      3. 文件中的其他无效字符。
      4. 我有合并冲突字符!

      <<<<<<< HEAD=======>>>>>>>

      请注意,plutil -lint Localizable.strings 为第 4 点返回了 OK

      【讨论】:

      • 这是我第二次遇到这个问题,因为缺少分号。我有一个很长的错误日志,但他们懒得提及缺少的分号
      【解决方案7】:

      您的语法似乎很好,我能看到的唯一可以“破坏”您的文件并导致此错误的是引号字符。确保使用常规的",而不是其他任何形式,例如

      【讨论】:

      • 不,事实并非如此。字符串中有一些不可打印的字符!可能与 xocde 更新有关!
      • 您可以将其发布在您的答案中,我们可以对其进行分析。很难说到目前为止您提供的少量信息有什么问题。
      【解决方案8】:

      我遇到了同样的问题,我通过在我的 Localizable.String 文件中注释或删除未使用的字符串来解决它:)

      【讨论】:

      • 我的 SVN 将 .string 文件视为二进制文件。你确定你遇到过这样的事情吗?
      【解决方案9】:

      还要确保字符串文件名始终为Localizable.strings

      【讨论】:

        【解决方案10】:

        用发出的字符串检测行的最快方法是:

        • 右键单击字符串文件并
        • 然后打开为/ASCII 属性列表。

        Xcode 会立即告诉你哪一行有错误。

        【讨论】:

          【解决方案11】:

          我曾经遇到过类似的错误,原来是文件中间有一个URL,像这样:

          // Some Comment 1
          "Some key 1" = "Some value 1";
          http://...whatever...
          // Some Comment 2
          "Some key 2" = "Some value 2";
          

          在该文件上调用 plutil -lint 时,输出为:

          Unexpected character / at line 1
          

          嗯,第一个字符确实是/,因为文件以注释开头,但删除 URL 后问题解决了;或将其变成实际上应该是的评论。请注意,URL 离字符串文件的开头很远,它大约在 6000 行字符串文件的中间。我只能通过浏览提交历史并始终查看更改来找到它。

          【讨论】:

            【解决方案12】:

            如果缺少“;”在 Localizable.string 文件的所有行的末尾,可能会发生此错误。

            例如:- "header_text" = "当前语言"; "change_language" = "更改语言";

            "header_text" = "වත්මන් භාෂාව"; "change_language" = "භාෂාව වෙනස් කරන්න";

            【讨论】:

            • 太好了,谢谢兄弟,拯救了我的一天(Y)
            【解决方案13】:

            这可能是因为翻译文件格式错误。

            你可以下载一个名为Localizable的mac软件。

            这是下载链接:https://apps.apple.com/cn/app/localizable-%E7%BF%BB%E8%AF%91%E6%96%87%E4%BB%B6%E5%B7%A5%E5%85%B7/id1268616588?mt=12,

            您只需将 Localizable.strings 拖到软件中,它会告诉您文件中的哪一行可能有问题,这很有用。它为我节省了很多时间。现在分享给大家。

            希望对你有帮助。

            【讨论】:

              【解决方案14】:

              看来您的 info.plist 格式不正确。正确检查。我也有同样的问题。我通过修改我的 info.plist 解决了这个问题。

              【讨论】:

                【解决方案15】:

                我遇到了类似的问题,我没有使用反斜杠 \ 转义字符串值,以获得我的字符串值之一。

                之前:

                "INVALID_NUMBER" = "您输入的数字似乎无效。数字应以“0”或“7”开头;

                更新:

                "INVALID_NUMBER" = "您输入的数字似乎无效。数字应以\"0\"或\"7\""开头;

                要显示引号"时需要反斜杠

                请在此处快速查看How to include Quotation mark in strings

                【讨论】:

                  【解决方案16】:

                  我刚刚有过这样的经历:

                  • 外部翻译器在 Visual Code 或其他文本编辑器中完成工作
                  • 文件无法正常工作并出现类似这样的错误:(使用 plutil -lint 进行测试)

                    Localizable.strings: Unexpected character " at line 1 CardRatingView.strings: Unexpected character / at line 2

                  我刚刚在 XCode 中创建了一个新文件并复制粘贴了所有文件内容,突然一切都正常了。

                  我猜在使用其他文本编辑器时可能会出现问题/损坏文件本身。

                  【讨论】:

                    【解决方案17】:

                    如果显示类似Unexpected character " at line 1, and it is the first string like "app_name"="Any Name"

                    检查文件是否为 UTF16

                    【讨论】:

                    • 为什么?字符串文件也可以是 UTF-8。我所有的字符串文件总是 UTF-8,这从来都不是问题。实际上,有一个 Xcode 设置允许您选择 Xcode 在复制字符串文件时应在输出上写入哪些文件,甚至该设置允许您选择 UTF-8、UTF-16 或二进制。
                    • 嘿,是的,我后来才意识到你在描述什么。我认为错误是由于 Xcode 认为文件是一种编码,而实际上它是另一种编码。
                    • UTF-16 文件需要 BOM。如果没有 BOM,macOS 通常采用 UTF-8。但是,如果您想在需要 UTF-16 的地方使用 UTF-8,那么如果您放置 UTF-8 BOM(BOM 对于 UTF-8 是可选的,但 macOS 通常会识别它们),这通常也可以。 de.wikipedia.org/wiki/Byte_Order_Mark
                    【解决方案18】:

                    我遇到了这个问题,我的所有格式都是正确的。使用plutil -lint Localizable.strings 和使用像"utf8_utils" 这样的ruby 库检查非法字符也无法找到非法字符。但是当我在运行irb 时将 Localizable.strings 内容粘贴到终端应用程序时,它确实向我展示了奇怪的字符。

                    "PercentComplete" = "%d procent gennemført";
                    

                    粘贴到 irb:

                    "PercentComplete"\U+FFC2\U+FFA0= "%d procent gennemf\U+FFC3\U+FFB8rt";
                    

                    然后我要做的就是用正则表达式替换来修复那些奇怪的空白字符:\U+FFC2\U+FFA0

                    【讨论】:

                      【解决方案19】:

                      感谢 plutil 的建议,我了解到要使其正常工作,您还必须删除任何不被读取为 cmets 的 \ 或 * ,重要的是,添加一个 ;到文件的末尾。 Xcode 11.5。

                      【讨论】:

                        【解决方案20】:

                        如果 plplutil 显示没有问题,请检查文件的编码。我有两次类似的问题,就我而言,这是由于编码不正确,尽管我不知道它是如何更改的(我实际上在 X-Code 的文件中间添加了一行)。在某些编辑器(我使用 Android Studio)中从 UTF-16LE 转换为 UTF-16BE 解决了这个问题。

                        【讨论】:

                          【解决方案21】:

                          对我来说,我的代码中有一个 NSLocalizedString,其中包含一个字符串插值,例如NSLocalizedString("\(product.price ?? "")per_month")。当我导出本地化时,它被添加到我的字符串文件中,然后格式错误。它让我失望了,因为我在 Xcode 中的字符串文件看起来不错,但实际上该文件是作为导出本地化过程的一部分而更新的,并且错误在那里蔓延。

                          如果有人遇到同样的问题,请尝试分别调用 genstrings 并查看新生成的文件格式是否正确。确保你先保存你的字符串,因为这会覆盖你的字符串文件:find ./ -name "*.swift" -print0 | xargs -0 genstrings -SwiftUI -o en.lproj

                          【讨论】:

                            【解决方案22】:

                            似乎 SVN 对这个文件有一些问题。因为它认为它是一个二进制文件。它在每个字符之间插入了许多不可打印的字符。我仍然找不到合适的解决方案。只需从生产 PC 更改 Localizable.string 文件即可避免任何问题。

                            更新:将 SVN 客户端 (smartSVN) 更新到最新版本解决了该问题。我的一位同事似乎使用的是旧版本。当他提交对可本地化文件的更改时,它导致了错误。

                            【讨论】:

                              猜你喜欢
                              • 2016-10-15
                              • 1970-01-01
                              • 2019-07-28
                              • 2020-07-26
                              • 2021-10-05
                              • 2021-11-11
                              • 2021-12-04
                              • 1970-01-01
                              相关资源
                              最近更新 更多