xcode4中的Localizable.strings文件..

问题描述 投票:39回答:12

在xcode4中,(我使用v4.0.1直到现在并且昨天下载了v4.0.2。)我制作了Localizable.string文件并编译了我的项目。 (如您所知,我的源代码使用NSLocalizedString宏函数。)

但我的项目不使用Localizable.string文件进行编译。如果我将此文件中的所有代码更改为注释(如此 - > //),我的项目将完全编译。

结果,问题是Localizable.string文件。我在Google上搜索过它,我发现UTF-8文件(Localizable.string)更改为UTF-16。虽然我试过这个......这种方式也没有用。

在这一刻,许多人都在尝试使用Localizable.string文件。但他们可能会解决我不能做的这个问题。因为没有关于这个问题的问题那么多。

===============================================================

在Localizable.string文件中,

“LOCAL_APP_GRADE”=“基本”

“LOCAL_APP_LAST_UPDATED_DATE”=“2011/04/20”

“LOCAL_MAIN_MENU_TITLE”=“主菜单”

在我的源代码中,

NSLocalizedString( @"LOCAL_MAIN_MENU_TITLE", @"" );

错误信息,

复制.strings文件错误验证失败:无法读取数据,因为它已损坏。

iphone localization xcode4
12个回答
94
投票

我在这里假设Xcode 4。仔细检查文件检查器中每个Localization.string文件的编码显示内容。当我遇到这个错误时,由于其中一个文件被读作Mac Roman而不是UTF-16。一旦我改变了编码,警告便消失了。一开始让我疯狂的是,警告只发生在Xcode 4中.Xcode 3没有给出它。

您的.string文件格式也存在问题。所有行都应以分号结尾。

"LOCAL_APP_GRADE" = "Basic";
"LOCAL_APP_LAST_UPDATED_DATE" = "2011/04/20";
"LOCAL_MAIN_MENU_TITLE" = "Main Menu"; 

我不认为这是警告的原因。至少我从没见过它的警告。当LOCAL_MAIN_MENU_TITLE显示在应用程序而不是主菜单中时,它通常仅在运行时显示。如果构建过程确实检查了分号,那将是很好的。在编辑文件时很容易错过添加一个。


0
投票

看起来这是读取字符串文件时出错的标准消息。

在我的情况下,这是一个(习惯的json力量)冒号而不是等号:

"key1" = "String1";
"key2" : "String2";
"key3" = "String3";

改为=,一切正常。


0
投票

我的问题是,我在其中一条线上忘记了;


0
投票

确保您已按以下格式声明了字符串:

"YOUR_STRING_LABEL" = "Your message";

注意:最后不要忘记引号(“),等号(=)和分号(;)。


64
投票

每个Apple:

如果在测试期间遇到问题并发现用于检索字符串的函数和宏总是返回相同的键(而不是翻译的值),请在字符串文件上运行/ usr / bin / plutil工具。字符串文件本质上是以特殊方式格式化的属性列表文件。使用-lint选项运行plutil可以发现隐藏的字符或其他错误,这些错误会阻止正确检索字符串。

启动控制台窗口,进入项目文件夹,然后执行以下操作:

/usr/bin/plutil -lint ja.lproj/Localizable.strings

(显然替换正确的语言文件夹名称)。这将告诉您问题的确切位置!


18
投票

.strings文件中的所有行都应以分号结尾。它对我有用。


7
投票

从Apple Notes导入本地化后,今天我遇到了同样的问题,原因非常微妙。标准双引号与斜双引号交换。

斜双引号:“

标准双引号:“


3
投票

我一直在努力解决这个错误,并最终遇到了几个类似的问题,但有不同的细节。首先,即使看起来Xcode的内部“builtin-copyStrings”工具应该能够处理小端或大端UTF-16文件,它实际上只处理大端。我的理论是它正在运行一些额外的验证步骤(可能使用plutil命令行实用程序),这在Xcode 3中并不常见,而且工具barfs除了big-endian UTF-16之外的任何东西。虽然不完全确定。

第二个技巧是你需要确保你的字符串文件没有BOM(字节顺序标记)。我在BBEdit中对我的.strings文件进行了一些编辑,最终将BOM保存到文件中,这似乎也使Xcode 4具有适应性。 Xcode本身似乎没有任何方法可以从文件中删除BOM,因此必须在文本编辑器中完成,例如BBEdit或TextWrangler,它们可以为您完成。


2
投票

使用Xcode 10.1,一个丢失的分号会停止编译并显示以下错误:

Localizable.strings:读取失败:无法解析属性列表,因为输入数据格式无效

顺便说一句,你可以通过暂时删除大部分文件内容来查明错误是否属于您的文件(编码问题)或特定于一行或多行。然后,您可以通过逐步添加内容来找到问题,直到错误返回为止。


0
投票

也许你有类似的东西:“Bla”=“bla”;;

注意重复;符号。如果你有,它将正确编译但在运行时会失败。


0
投票

与此相关 - 手动将字符串合并到Localizable.strings时要小心 - 我设法从NSLocalizedString()宏复制/粘贴BOTH字符串,以便Localizable.strings条目采用以下形式:

"KEY" = "STRING", @"COMMENT STRING COPIED ACROSS ALSO, IN ERROR";

建筑物上的位,@"xxx"导致我得到错误:

读取失败:无法读取数据,因为格式不正确。

在这种情况下,快速搜索@"有助于确定我做过这些的地方。


0
投票

我有这个问题。我的修复?在文件顶部添加换行符。奇怪,但它让它为我工作。

所以不要在我的文件的顶部有这个:

/* comment */
"LOCAL_APP_GRADE" = "Basic"

我必须做:

[newline]
/* comment */
"LOCAL_APP_GRADE" = "Basic"

(无法正确格式化 - 不要输入'换行符',只需点击返回!)

© www.soinside.com 2019 - 2024. All rights reserved.