Localization.strings文件..在xcode4

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

但是我的项目不能用Localizable.string文件编译。 如果我把这个文件中的所有代码改成注释(像这样 – > //),我的项目就完全编译了。

结果,问题是Localizable.string文件。 我在Google上search了一下,发现UTF-8文件(Localizable.string)更改为UTF-16。 尽pipe我尝试过这种方式,但这种方式也行不通。

在这一刻,许多人正在尝试使用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文件错误validation失败:数据无法读取,因为它已损坏。

我假设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"; 

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

每苹果:

如果在testing过程中遇到问题,并且发现检索string的函数和macros总是返回相同的键(而不是翻译的值),请在string文件上运行/ usr / bin / plutil工具。 一个string文件本质上是一个以特殊方式格式化的属性列表文件。 使用-lint选项运行plutil可以发现隐藏的字符或其他错误,以防止正确检索string。

启动一个控制台窗口,进入你的项目文件夹,然后执行:

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

(显然replace正确的语言文件夹名称)。 这会告诉你到底是哪里出了问题!

.strings文件中的所有行应以分号结尾。 它为我工作。

从苹果笔记导入本地化后,我今天也遇到同样的问题,其原因非常微妙。 标准的双引号已经被双斜引号交换了。

倾斜的双引号:“

标准双引号:“

我一直在为这个同样的错误而苦苦挣扎,最后出现了一些类似的问题,但是有不同的细节。 首先,尽pipe看起来Xcode内部的“builtin-copyStrings”工具应该能够处理小端或者大端UTF-16文件,但它确实只能处理大端。 我的理论是运行一些额外的validation步骤(也许使用plutil命令行实用程序),这在Xcode 3中不会发生,而且工具barfs除了big-endian UTF-16之外都是。 不完全确定。

第二个诀窍是你需要确保你的string文件没有 BOM(Byte Order Marker)。 我在BBEdit中做了一些我的.strings文件的编辑,最后把文件保存到一个文件中,这也让Xcode 4有了一个合适的configuration。 Xcode本身似乎没有任何方法从文件中删除BOM,因此必须在文本编辑器(如BBEdit或TextWrangler)中完成,这可以为您做到这一点。

也许你有这样的事情:“Bla”=“bla”;;

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

与此相关 – 小心手动合并string到Localizable.strings – 我设法从NSLocalizedString()macros复制/粘贴两个string,以便Localizable.strings条目是在这种forms:

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

build筑物上的,@"xxx"位使我得到错误:

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

在这种情况下,快速search@"帮助确定我做过的地方。

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

所以,而不是在我的文件的顶部有这样的:

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

我必须做:

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

(无法获得格式化权限 – 不要input'换行',只需按回车!)

看起来这是一个读取string文件错误的标准消息。

在我的情况下,这是一个(习惯)的结肠而不是等号:

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

改变它=和一切工作正常。

我的问题是,我忘记了; 在其中之一

确保你已经声明了以下格式的string:

 "YOUR_STRING_LABEL" = "Your message"; 

注意:不要忘记引号(“),等号(=)分号(;)结束