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

时间:2017-10-25 04:49:07

标签: ios xcode ios11 localizable.strings

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

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

21 个答案:

答案 0 :(得分:93)

  • 从终端使用 plutil

您必须为每个版本的可本地化文件运行它。 E.g

  1. cd到您的项目根目录
  2. cd eb.lproj - 您可以将其替换为     您正在使用的任何本地化。
  3. plutil -lint Localizable.strings
  4. 当您运行第3步时,您将看到错误,告诉您文件有什么问题。或者你会被告知文件没问题

答案 1 :(得分:23)

对我而言,它缺少半冒号。如果您使用工具生成.strings文件,请确保没有可以“吃”的未转义引号。划界的冒号。

答案 2 :(得分:9)

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行第1行,kCFPropertyListOldStyleParsingError =错误域= NSCocoaErrorDomain代码= 3840“缺少';'在第427行上” UserInfo = {NSDebugDescription = Missing';'在线427}}

答案 3 :(得分:4)

可能有多种原因:

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

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

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

答案 4 :(得分:3)

我有同样的问题,我通过在 Localizable.String 文件中评论或删除未使用的字符串来解决它。

答案 5 :(得分:2)

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

检查该问题时

plutil -lint Localizable.strings

我的状态为 OK ,这表示一切正常,然后我尝试使用查找问题

pl

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

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

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

干杯!

答案 6 :(得分:2)

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

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

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

“ header_text” =“වත්මන්භාෂාව”; “ change_language” =“භාෂාවවෙනස්”;

答案 9 :(得分:1)

我曾经有一个类似的错误,结果是文件中间有一个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行字符串文件中间。我只能通过浏览提交历史记录并始终查看更改来找到它。

答案 10 :(得分:1)

你的语法似乎很好,我唯一能看到的就是&#34;打破&#34;您的文件并导致此错误是引号字符。请确保使用reqular one ",而不是像这样的任何其他形式。

答案 11 :(得分:0)

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

的内容

检查文件是否为UTF16

答案 12 :(得分:0)

我遇到了这个问题,所有格式都正确。使用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

答案 13 :(得分:0)

我只是有这种经历:

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

    df <- data.frame(df, stringsAsFactors = FALSE)

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

我猜想在与其他文本编辑器一起工作时可能出问题/损坏了文件本身。

答案 14 :(得分:0)

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

<强>之前:

  

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

<强>更新

  

“INVALID_NUMBER”=“您似乎输入的号码无效。号码应以\”0 \“或\”7 \“”开头;

如果要显示引号"

,则需要使用反斜杠

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

答案 15 :(得分:0)

感谢plutil的建议,我知道要使其生效,您还必须删除任何\或*,而不是将其视为注释,并且,重要的是,添加;。到文件末尾。 Xcode 11.5。

答案 16 :(得分:0)

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

您可以下载一个名为 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拖到软件中,它就会告诉你文件中哪一行可能有问题,这很有用。它为我节省了很多时间。现在分享给大家。

希望对你有帮助。

答案 19 :(得分:0)

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

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

答案 20 :(得分:-2)

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

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