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";
注意:不要忘记引号(“),等号(=)和分号(;)结束 。