iOS Localizable.strings未从BASE文件中检索

我在iOS上进行本地化工作时遇到的问题就像我认为的那样,但这是我第一次尝试本地化,所以也许我误解了。

我有三个Localizable.strings文件:

基础

"TAB_TITLE_Camera" = "CAMERA"; 

英语

 "TAB_TITLE_Camera" = "Camera"; 

西class牙语

 "TAB_TITLE_Camera" = "Cámara"; 

 NSLocalizedString(@"TAB_TITLE_Camera", nil) 

iOS 6.1

在运行iOS 6.1第4代iPod Touch的 Xcode 5上, 英语西class牙语似乎有效,但是如果我改为德语 (或没有本地化文件的任何其他语言),它不会从Base Localizable.strings中提取,而是从英文文件。

为什么它BASE文件中提取?

为什么它会从英文文件中提取出来?


iOS 7.1

此外,对于运行iOS 7.1第5代iPod Touch ,当我更改为德语时,它似乎从最后选择的具有本地化文件( 英语西class牙语)的语言中提取。 咦?

找到一种方法来确定我是否有当前所选语言的本地化文件,如果没有,我可以从Base本地化文件中获取。

 NSString *path = [[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"]; if (path == nil) { path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"]; } NSLocalizedStringFromTableInBundle(@"TAB_TITLE_Camera", @"Localizable", [NSBundle bundleWithPath:path], @""); 

如果当前语言是:

英文它返回相机

西class牙语它返回Cámara

任何没有本地化文件的东西都会返回CAMERA

简单的解决方案,完成我需要的一切

适用于iOS 6.1iOS 7.1