Localizable.strings - 无法读取数据,因为它的格式不正确

Ras*_*had 44 xcode localizable.strings ios ios11

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

"New" = "New";
"In Progress" = "In Progress";
"Waiting" = "Waiting";
"Closed" = "Closed";
Run Code Online (Sandbox Code Playgroud)

Bha*_*mar 121

  • 使用终端的plutil:

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

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

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

  • 它在第1行显示了"意外字符",它是第一个字符串,如"app_name"="任意名称" (11认同)
  • 请注意,plutil的输出是错误的,似乎总是说“第1行出现意外字符”,但在该输出的上方,它在第121行打印了其他内容,例如缺少分号,这才是真正的错误... (3认同)
  • 对我来说,plutil 在第 1 行显示了相同的错误,尽管没有任何错误。但 `pl < Localized.strings` 对我有用。 (3认同)

小智 62

检测包含所发出字符串的行的最快方法是:

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

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

  • 精湛的解决方案 (3认同)
  • 非常容易识别问题 (3认同)
  • 哇哇哇哇!! (2认同)

Ahm*_*laf 33

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


Chi*_*hah 11

造成这种情况的原因可能有多种:

  1. 末尾缺少分号。
  2. 末尾有多个分号。
  3. 消息中的“应该用\”转义。
  4. 分号后的额外字符。
  5. 文件中的空白无效。
  6. 文件中的其他无效字符。
  7. 合并文件中的冲突字符!

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

请注意,plutil -lint Localizable.strings返回OK第 2 点和第 7 点!

  • 这是我第二次遇到这个问题,因为缺少分号。我有一个很长的错误日志,但他们懒得提及缺少的分号 (2认同)

AQE*_*MED 10

我知道这个问题很久以前就有人问过了,但我的场景和解决方案有点不同。今天我遇到了同样的问题,但是当我尝试使用

plutil -lint Localizable.strings

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

pl < Localizable.strings

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

  • 右键单击 Localizable.strings 文件
  • 然后选择选项打开为选项
  • 然后选择选项ASCII 属性列表

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

干杯!


Jer*_*ome 8

pl <Localizable.strings 优于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 =意外字符/ at第1行,kCFPropertyListOldStyleParsingError =错误域= NSCocoaErrorDomain代码= 3840“缺少';' 在427行“ UserInfo = {NSDebugDescription =缺少';' 在线427}}

  • 这是最好的解决方案,它解决了我的问题。“ plutil”在第一个符号上显示错误,但是“ pl &lt;Localizable.strings”确实更好,并且在* .plist有问题的地方显示正确的行数 (3认同)
  • 绝对是更好的解决方案。它为您提供更多信息和问题的行号,而不是通用输出。 (2认同)

Esm*_*aGo 6

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


Ras*_*had -2

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

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