Localizable.strings - 无法读取数据,因为它的格式不正确
Localizable.strings - The data couldn’t be read because it isn’t in the correct format
如果我从 textedit 或 web 复制一些东西并将其粘贴到可本地化的文件中,它会显示此编译错误。如果我在可本地化文件中键入这些内容,它不会显示任何错误。我向你保证我使用了正确的格式和 ';'在文件中。
"New" = "New";
"In Progress" = "In Progress";
"Waiting" = "Waiting";
"Closed" = "Closed";
你的语法似乎没问题,我唯一能看到 "break" 你的文件并导致这个错误的是引号字符。确保使用 reqular "
而不是任何其他形式,例如 ″
。
- 从终端使用 plutil:
对于每个版本的可本地化文件,您都必须 运行 它。例如
cd
进入你的项目根目录
cd eb.lproj
- 你可以用
您正在使用的任何本地化。
plutil -lint Localizable.strings
当您 运行 步骤 3 时,您将看到一个错误,告诉您文件有什么问题。或者你会被告知文件没问题
Note that plutil output is bad, it seems it always says "Unexpected character at line 1" but above that output, it prints other stuff like missing semicolon on line 121, and that is the real error
似乎 SVN 对该文件有一些问题。因为它认为它是一个二进制文件。它在每个字符之间插入了很多不可打印的字符。我仍然找不到合适的解决方案。只需更改生产 PC 中的 Localizable.string 文件即可避免出现任何问题。
更新: 将 SVN 客户端 (smartSVN) 更新到最新版本解决了这个问题。似乎我的一位同事使用的是旧版本。当他提交对可本地化文件的更改时,它导致了错误。
对我来说,它缺少分号。如果您使用工具生成 .strings
文件,请确保没有未转义的引号 'eat' 分隔分号。
我有同样的问题,我通过评论或删除 Localizable.String 文件中未使用的字符串来解决它:)
您的 info.plist 格式似乎不正确。检查它正确。我也有同样的问题。我通过修改我的 info.plist 解决了它。
我遇到了类似的问题,我没有用反斜杠 \
转义字符串值作为我的字符串值之一。
之前:
"INVALID_NUMBER" = "It seems you're entering invalid number. Number should starts with "0" or "7"";
更新:
"INVALID_NUMBER" = "It seems you're entering invalid number. Number should starts with \"0\" or \"7\"";
要显示引号时需要反斜杠"
How to include Quotation mark in strings
请快速浏览这里
我刚刚有过这样的经历:
- 外部翻译人员在 Visual Code 或其他文本编辑器中进行工作
文件无法正常工作并出现类似这样的错误:(使用 plutil -lint 进行测试)
Localizable.strings: Unexpected character " at line 1
CardRatingView.strings: Unexpected character / at line 2
我刚刚在 XCode 中创建了一个新文件并复制粘贴了所有文件内容,突然一切正常。
我想在使用其他文本编辑器时可能会出错/损坏文件本身。
就我而言,我在一对字符串之间缺少“=”。甚至 plutil 也没有帮助我发现错误行。我手动检查了每个字符串对。 :/
如果显示类似 Unexpected character " at line 1, and it is the first string like "app_name"="Any Name"
检查文件是否为UTF16
还要确保字符串文件名始终是 Localizable.strings
我曾经有过类似的错误,结果发现文件中间有一个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 行字符串文件的中间。我只能通过浏览提交历史并始终查看更改来找到它。
我运行进入这个问题,我的所有格式都是正确的。使用 plutil -lint Localizable.strings
和 ruby 库(如 "utf8_utils"
)检查非法字符也无法找到非法字符。但是当我在 运行 irb
时将 Localizable.strings 内容粘贴到终端应用程序中时,它确实向我显示了奇怪的字符。
"PercentComplete" = "%d procent gennemført";
粘贴到 irb:
"PercentComplete"\U+FFC2\U+FFA0= "%d procent gennemf\U+FFC3\U+FFB8rt";
然后我所要做的就是用正则表达式替换来修复那些奇怪的白色 space 字符:\U+FFC2\U+FFA0
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 "Unexpected character / at line 1" UserInfo={NSDebugDescription=Unexpected字符/在第 1 行,kCFPropertyListOldStyleParsingError=Error Domain=NSCocoaErrorDomain Code=3840 "Missing ';' on line 427" UserInfo={NSDebugDescription=Missing ';'第 427 行}}
如果缺少“;”在 Localizable.string 文件中所有行的末尾,可能会发生此错误。
例如:-
"header_text" = "Current Language";
"change_language" = "Change Language";
"header_text" = "当前语言";
"change_language" = "更改语言";
多亏了 plutil 的建议,我了解到要使其正常工作,您还必须删除任何 \ 或 *,因为它们不会被视为注释,重要的是,添加一个 ;到文件末尾。 Xcode11.5.
这可能有多种原因:
- 最后缺少分号。
- 末尾有多个分号。
- " 应由 \".
转义的消息中
- 文件中的白色无效 space。
- 文件中的其他无效字符。
- 合并文件中的冲突字符!
<<<<<<< HEAD
、=======
和 >>>>>>>
.
请注意,plutil -lint Localizable.strings
为第 2 点和第 6 点返回了 OK
!
我知道很久以前就有人问过这个问题,但我的场景和解决方案有点不同。
今天我遇到了同样的问题,但是当我尝试使用
检查问题时
plutil -lint Localizable.strings
我得到 OK 状态,这意味着一切正常,然后我尝试使用
查找问题
pl < Localizable.strings
但是我再次打印了文件文本,没有提到任何错误,然后我尝试了一个技巧,它对我有用。
- 右键单击 Localizable.strings 文件
- 然后select选项打开为选项
- 然后select选项ASCII 属性列表
就是这样,XCode 向我显示了行号的问题,问题是我将此 DéjàVerified 文本作为指定行的键,这有助于我识别并解决这个问题,我希望它能节省一些人的时间。
干杯!
如果 pl 和 plutil 没有问题,请检查文件的编码。我有两次类似的问题,在我的情况下,这是由于编码不正确,虽然我不知道它是如何改变的(我确实在 X-Code 文件的中间添加了一行)。在某些编辑器(我使用 Android Studio)中从 UTF-16LE 转换为 UTF-16BE 解决了这个问题。
这可能是因为翻译文件格式不对。
您可以下载一个名为 Localizable 的 mac 软件。
您只需要将Localizable.strings拖到软件中,它会告诉您文件中的哪一行可能有问题,这很有用。它为我节省了很多时间。现在分享给大家
希望对你有所帮助
对我来说,我的代码中有一个 NSLocalizedString,其中包含一个字符串插值,例如NSLocalizedString("\(product.price ?? "")per_month")
。当我导出本地化时,它被添加到我的字符串文件中,然后格式错误。它让我失望了,因为我在 Xcode 中的字符串文件看起来不错,但实际上该文件作为导出本地化过程的一部分得到了更新,并且错误在其中蔓延。
如果有人遇到同样的问题,请尝试单独调用 genstrings 并查看新生成的文件格式是否正确。确保先保存字符串,因为这会覆盖字符串文件:find ./ -name "*.swift" -print0 | xargs -0 genstrings -SwiftUI -o en.lproj
检测带有发出的字符串的行的最快方法是:
- 右键单击字符串文件,然后
- 然后打开 as/ASCII 属性 列表。
Xcode 会立即告诉你哪一行有错误。
如果我从 textedit 或 web 复制一些东西并将其粘贴到可本地化的文件中,它会显示此编译错误。如果我在可本地化文件中键入这些内容,它不会显示任何错误。我向你保证我使用了正确的格式和 ';'在文件中。
"New" = "New";
"In Progress" = "In Progress";
"Waiting" = "Waiting";
"Closed" = "Closed";
你的语法似乎没问题,我唯一能看到 "break" 你的文件并导致这个错误的是引号字符。确保使用 reqular "
而不是任何其他形式,例如 ″
。
- 从终端使用 plutil:
对于每个版本的可本地化文件,您都必须 运行 它。例如
cd
进入你的项目根目录cd eb.lproj
- 你可以用 您正在使用的任何本地化。plutil -lint Localizable.strings
当您 运行 步骤 3 时,您将看到一个错误,告诉您文件有什么问题。或者你会被告知文件没问题
Note that plutil output is bad, it seems it always says "Unexpected character at line 1" but above that output, it prints other stuff like missing semicolon on line 121, and that is the real error
似乎 SVN 对该文件有一些问题。因为它认为它是一个二进制文件。它在每个字符之间插入了很多不可打印的字符。我仍然找不到合适的解决方案。只需更改生产 PC 中的 Localizable.string 文件即可避免出现任何问题。
更新: 将 SVN 客户端 (smartSVN) 更新到最新版本解决了这个问题。似乎我的一位同事使用的是旧版本。当他提交对可本地化文件的更改时,它导致了错误。
对我来说,它缺少分号。如果您使用工具生成 .strings
文件,请确保没有未转义的引号 'eat' 分隔分号。
我有同样的问题,我通过评论或删除 Localizable.String 文件中未使用的字符串来解决它:)
您的 info.plist 格式似乎不正确。检查它正确。我也有同样的问题。我通过修改我的 info.plist 解决了它。
我遇到了类似的问题,我没有用反斜杠 \
转义字符串值作为我的字符串值之一。
之前:
"INVALID_NUMBER" = "It seems you're entering invalid number. Number should starts with "0" or "7"";
更新:
"INVALID_NUMBER" = "It seems you're entering invalid number. Number should starts with \"0\" or \"7\"";
要显示引号时需要反斜杠"
How to include Quotation mark in strings
请快速浏览这里我刚刚有过这样的经历:
- 外部翻译人员在 Visual Code 或其他文本编辑器中进行工作
文件无法正常工作并出现类似这样的错误:(使用 plutil -lint 进行测试)
Localizable.strings: Unexpected character " at line 1 CardRatingView.strings: Unexpected character / at line 2
我刚刚在 XCode 中创建了一个新文件并复制粘贴了所有文件内容,突然一切正常。
我想在使用其他文本编辑器时可能会出错/损坏文件本身。
就我而言,我在一对字符串之间缺少“=”。甚至 plutil 也没有帮助我发现错误行。我手动检查了每个字符串对。 :/
如果显示类似 Unexpected character " at line 1, and it is the first string like "app_name"="Any Name"
检查文件是否为UTF16
还要确保字符串文件名始终是 Localizable.strings
我曾经有过类似的错误,结果发现文件中间有一个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 行字符串文件的中间。我只能通过浏览提交历史并始终查看更改来找到它。
我运行进入这个问题,我的所有格式都是正确的。使用 plutil -lint Localizable.strings
和 ruby 库(如 "utf8_utils"
)检查非法字符也无法找到非法字符。但是当我在 运行 irb
时将 Localizable.strings 内容粘贴到终端应用程序中时,它确实向我显示了奇怪的字符。
"PercentComplete" = "%d procent gennemført";
粘贴到 irb:
"PercentComplete"\U+FFC2\U+FFA0= "%d procent gennemf\U+FFC3\U+FFB8rt";
然后我所要做的就是用正则表达式替换来修复那些奇怪的白色 space 字符:\U+FFC2\U+FFA0
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 "Unexpected character / at line 1" UserInfo={NSDebugDescription=Unexpected字符/在第 1 行,kCFPropertyListOldStyleParsingError=Error Domain=NSCocoaErrorDomain Code=3840 "Missing ';' on line 427" UserInfo={NSDebugDescription=Missing ';'第 427 行}}
如果缺少“;”在 Localizable.string 文件中所有行的末尾,可能会发生此错误。
例如:- "header_text" = "Current Language"; "change_language" = "Change Language";
"header_text" = "当前语言"; "change_language" = "更改语言";
多亏了 plutil 的建议,我了解到要使其正常工作,您还必须删除任何 \ 或 *,因为它们不会被视为注释,重要的是,添加一个 ;到文件末尾。 Xcode11.5.
这可能有多种原因:
- 最后缺少分号。
- 末尾有多个分号。
- " 应由 \". 转义的消息中
- 文件中的白色无效 space。
- 文件中的其他无效字符。
- 合并文件中的冲突字符!
<<<<<<< HEAD
、=======
和 >>>>>>>
.
请注意,plutil -lint Localizable.strings
为第 2 点和第 6 点返回了 OK
!
我知道很久以前就有人问过这个问题,但我的场景和解决方案有点不同。 今天我遇到了同样的问题,但是当我尝试使用
检查问题时plutil -lint Localizable.strings
我得到 OK 状态,这意味着一切正常,然后我尝试使用
查找问题pl < Localizable.strings
但是我再次打印了文件文本,没有提到任何错误,然后我尝试了一个技巧,它对我有用。
- 右键单击 Localizable.strings 文件
- 然后select选项打开为选项
- 然后select选项ASCII 属性列表
就是这样,XCode 向我显示了行号的问题,问题是我将此 DéjàVerified 文本作为指定行的键,这有助于我识别并解决这个问题,我希望它能节省一些人的时间。
干杯!
如果 pl 和 plutil 没有问题,请检查文件的编码。我有两次类似的问题,在我的情况下,这是由于编码不正确,虽然我不知道它是如何改变的(我确实在 X-Code 文件的中间添加了一行)。在某些编辑器(我使用 Android Studio)中从 UTF-16LE 转换为 UTF-16BE 解决了这个问题。
这可能是因为翻译文件格式不对。
您可以下载一个名为 Localizable 的 mac 软件。
您只需要将Localizable.strings拖到软件中,它会告诉您文件中的哪一行可能有问题,这很有用。它为我节省了很多时间。现在分享给大家
希望对你有所帮助
对我来说,我的代码中有一个 NSLocalizedString,其中包含一个字符串插值,例如NSLocalizedString("\(product.price ?? "")per_month")
。当我导出本地化时,它被添加到我的字符串文件中,然后格式错误。它让我失望了,因为我在 Xcode 中的字符串文件看起来不错,但实际上该文件作为导出本地化过程的一部分得到了更新,并且错误在其中蔓延。
如果有人遇到同样的问题,请尝试单独调用 genstrings 并查看新生成的文件格式是否正确。确保先保存字符串,因为这会覆盖字符串文件:find ./ -name "*.swift" -print0 | xargs -0 genstrings -SwiftUI -o en.lproj
检测带有发出的字符串的行的最快方法是:
- 右键单击字符串文件,然后
- 然后打开 as/ASCII 属性 列表。
Xcode 会立即告诉你哪一行有错误。