iOS - LocalizedStringForKey:value:table:返回错误的本地化

时间:2012-12-03 08:38:46

标签: iphone ios xcode localization localizable.strings

我使用以下代码返回本地化字符串:

[self.languageBundle localizedStringForKey:key value:key table:nil];

如果是英语,没有问题。但是,对于荷兰语,它默认为英语。为了使一切清晰,self.languageBundle是一个空包,在第一次启动时被复制。然后创建两个本地化目录(en.lproj和nl.lproj),并在两个目录中创建Localizable.strings文件并填充正确的本地化字符串(我检查了它们)。

我使用以下方式更改语言:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"nl"]
                                                  forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];

但是,它仍然在en.lproj中加载本地化而不是nl.lproj

2 个答案:

答案 0 :(得分:0)

如果您在项目中添加了localized.string文件,则删除在项目中自动创建的所有其他本地化文件。试试这个link

答案 1 :(得分:0)

看起来您正在尝试在运行时更改语言,Apple并未正式支持此功能。更改“AppleLanguages”的键只有在关闭并重新启动应用程序后才会生效。

但是,可以在运行时更改应用的本地化,请参阅answer of this question

the aggressive-mediocrity solution中,您保留自己的语言代码变量,并创建自定义LocalizedString函数(在示例源“AMLocalizedString”中),而不是使用NSLocalizableString。这是一个很好的解决方案,我在我的一个项目中使用它,该应用程序被Apple批准没有问题。

此外,通过这种方式,您可以像平常一样使用默认的Localizable.strings文件,因此无需在第一次应用启动时创建目录并复制Localizable.strings。