我在 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 上与运行 iOS 6.1、英语 和西类牙语的第 4 代 iPod Touch 似乎有效,但如果我更改为 German (或任何其他没有本地化文件的语言)它不会拉 来自 Base Localizable.strings,而是从 English 文件中提取。
为什么它不从BASE文件中提取?
为什么 DOES 它从 English 文件中提取?
iOS 7.1
此外,对于运行 iOS 7.1 的第 5 代 iPod Touch,当我更改为德语时,它似乎从上次选择的语言中提取出来具有本地化文件,英语 或西类牙语。啊?!
最佳答案
找到了一种方法来确定我是否有当前所选语言的本地化文件,如果没有,我可以从 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], @"");
如果当前语言是:
English 它返回Camera
西类牙语 它返回Cámara
任何没有本地化文件的东西都会返回CAMERA
满足我所有需要的简单解决方案。
适用于 iOS 6.1 和 iOS 7.1。
关于iOS Localizable.strings 未从 BASE 文件中检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25680874/