NSLocalizedString只检索关键字,而不是Localizable.strings(IOS)中的值
我做了一个名为“Localizable.strings”的string文件,并添加了两种语言,如下所示:
"CONNECTIONERROR" = "Check that you have a working internet connection."; "CONNECTIONERRORTITLE" = "Network error";
我也将文件转换为Unicode UTF-8但是,当我创build一个像这样的UIAlertView:
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"CONNECTIONERRORITLE",nil) message:NSLocalizedString(@"CONNECTIONERROR",nil) delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
警报视图仅显示关键文本,而不显示值。 例如,如果我将UITextviews文本设置为NSLocalizedString(@“CONNECTIONERROR”,nil),但警报视图只显示密钥,则它可以工作。 任何人都知道什么是错的?
在我的情况,这是因为我错误地命名文件“Localization.strings”,并没有注意到(它必须命名为Localizable.strings)。 如前所述,症状是因为编译器无法findstring。 否则,原因可能是许多事情,但通常是缺less的分号或引号。 当您一次执行大量本地化时,很难find这些内容。 学到的教训是在开发过程的早期就开始构build本地化文件,并且随时随地构build,以便更容易发现。
同样的问题,解决使用文件名:Localizable.strings
testing应用程序在一个实际的设备,它的工作
我在iOS模拟器上遇到了这个问题。 我最终删除了模拟器目录中的Localization.strings文件
(/ Users /(me)/ Library / Application Support / iPhone Simulator / 5.0 / Applications /(etc)/(project)/(application.app)
cd到那里,并删除在那里find的Localization.strings的所有副本。
出于某种原因,通常的橡皮鸡构build干净的Voodoo,退出iOS模拟器,退出XCode等没有工作,但这样做。 至less对我来说,今天。
当运行时出于某种原因无法find指定的密钥时,就会发生这种情况。 在你的情况,这很可能是由于一个错字: CONNECTIONERRORITLE
缺less一个T
TITLE
。 在关于Localizable.strings
文件编译时还要注意任何警告/错误:如果有不平衡的"
或者丢失;
文件不能正确编译/读取。
将InfoPlist.strings文件重命名为Localizable.strings(double clic),然后您将得到该键的正确string。
仔细检查Localizable.strings文件是否被添加到
目标 – > BuildPhases – >复制束资源
它没有被自动添加给我。
我一直在寻找解决scheme5个小时,我尽我所能,使我的应用程序本地化的工作。
问题是我的项目的一个豆荚有一个Localizable.strings文件(实际上是Parse豆荚,没有重新命名)。 因此,我的Localizable.strings文件没有被我的应用程序识别。
我通过将文件的名称更改为“MyappnameLocalizable.strings”并使用NSLocalizedString这种方式解决了问题:
NSLocalizedString("key", tableName: "MyappnameLocalizable", comment: "comment")
NSLocalizedString的使用意味着你需要EXACT的情况下和密钥的拼写,以获得它的内容。 你会注意到这个说
NSLocalizedString(@"CONNECTIONERRORITLE",nil)
当它应该是
NSLocalizedString(@"CONNECTIONERRORTITLE",nil)
如果你看第一个的最后一部分,它说'ITLE',而不是'TITLE'
更改您的.strings
文件名称Localizable.strings
,它为我工作。
将文件的名称更改为Localizable.strings,确保文件检查器中的目标已设置。 为了避免语法错误,右键单击Localizable.strings文件 – >打开as-> ASCII属性列表此外,清理项目和build设再次帮助我的情况。
要找出Localizable.strings文件是否被find,检查你的.app版本的内容,你也可以在代码中做到这一点:
// en是英文的例子,所以在这里指定你的NSString * path = [[NSBundle mainBundle] pathForResource:@“en”ofType:@“lproj”];
如果path为NULL,则表示找不到文件。
如果在行尾写了双分号,NSLocalization不起作用。 如果有';;'则应该检查Localizable.strings文件
放一个; 在Localizable.strings文件的行尾。
在我的情况下,我试图干净的项目,删除派生的数据仍然无法正常工作。 我删除了string文件中的几个换行符,然后Xcode再次findstring。
没有build议的解决scheme为我工作,但我通过删除产品中的.app文件解决了这个问题
如果你的string文件中有多余的分号,它不会本地化。
我遇到了类似的问题,突然我的本地化的string根本不工作。 然后,我用旧的.strings副本文件比较,最后我发现我不小心删除了它的一个关键。
所以当然,如果格式不对,Xcode将不会为你读取string。
这是它期望的格式“Key”=“Value”;
本地化文件的第一行必须包含一个映射,否则SDK将不会读取该文件。
重置模拟器设置为我工作。
iOS模拟器>重置内容和设置…
一定不要把“@”放在你的key
或value
前面,像这样:
@"key" = @"value";
应该只是:
"key" = "value";
访问它时,“@”只出现在密钥的前面:
NSWebLocalizedString(@"key", @"label for coder");
突然本地化停止翻译string时,我有一切工作。 这意味着这个文件对Xcode来说是不可读的。
这发生在我身上,因为我在Localized.strings
文件中粘贴了一个坏字符。 当我用违规字符删除了几行(一个非Unicode字符?坏引号?不能告诉),一切恢复正常。
为了查找有问题的行,我做了一个断点,并在debugging器中手动翻译了我的文件中的string,直到find第一个不会翻译的string。
你有没有尝试清理和重build项目?