1

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

[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 中加载本地化

4

2 回答 2

0

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

于 2012-12-03T09:13:02.863 回答
0

看起来您正试图在运行时更改语言,而 Apple 并未正式支持这一点。更改“AppleLanguages”的密钥只有在您关闭并重新启动应用程序后才会生效。

但是,可以在运行时更改应用程序的本地化,请参阅此问题的答案

激进的平庸解决方案中,您保留自己的语言代码变量,并创建自定义 LocalizedString 函数(在示例源“AMLocalizedString”中)而不是使用 NSLocalizableString。这是一个很好的解决方案,我在我的一个项目中使用了它,并且该应用程序得到了 Apple 的批准,没有任何问题。

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

于 2012-12-04T07:32:16.307 回答