我在 iOS 上进行本地化工作的问题与我认为的方式有关,但这是我第一次尝试本地化,所以也许我误解了。
我有三个 Localizable.strings 文件:
基
"TAB_TITLE_Camera" = "CAMERA";
英语
"TAB_TITLE_Camera" = "Camera";
西班牙语
"TAB_TITLE_Camera" = "Cámara";
NSLocalizedString(@"TAB_TITLE_Camera", nil)
iOS 6.1
在 Xcode 5 上使用第4代iPod Touch iOS 6.1 ,英语和西班牙语似乎有效,但如果我改为德语(或没有本地化文件的任何其他语言),它就不会拉 来自 Base Localizable.strings ,而不是来自英语文件。
为什么不从 BASE 文件中提取?
为什么 DOES 来自英文文件?
iOS 7.1
此外,当第5代iPod Touch 运行 iOS 7.1 时,当我更改为德语时,它似乎从最后选择的语言中提取具有本地化文件,英语或西班牙语。咦?!
答案 0 :(得分:2)
找到一种方法来确定我是否有当前所选语言的本地化文件,如果没有,我可以从 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], @"");
如果当前语言是:
英文,它会返回相机
西班牙语它会返回Cámara
其他没有本地化文件的内容会返回 CAMERA
简单的解决方案,可以完成我需要的一切。
适用于 iOS 6.1 和 iOS 7.1 。