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模拟器>重置内容和设置…

一定不要把“@”放在你的keyvalue前面,像这样:

 @"key" = @"value"; 

应该只是:

 "key" = "value"; 

访问它时,“@”只出现在密钥的前面:

 NSWebLocalizedString(@"key", @"label for coder"); 

突然本地化停止翻译string时,我有一切工作。 这意味着这个文件对Xcode来说是不可读的。

这发生在我身上,因为我在Localized.strings文件中粘贴了一个坏字符。 当我用违规字符删除了几行(一个非Unicode字符?坏引号?不能告诉),一切恢复正常。

为了查找有问题的行,我做了一个断点,并在debugging器中手动翻译了我的文件中的string,直到find第一个不会翻译的string。

你有没有尝试清理和重build项目?