如何强制一个iOS应用程序使用特定的本地化?

4

我有一个应用程序,有两种本地化版本(希伯来语和英语),现在被要求取消英语本地化版本,这样无论你的设备语言是什么,应用程序都将保持相同(但将本地化版本保存供以后使用)。

本地化是通过Localizable.strings和Xib本地化实现的(有很多)。

有没有一种方法告诉应用程序始终使用某种本地化并忽略设备语言?

谢谢!

2个回答

4
我将这个代码改成了Swift,并使用它来轻松测试本地化。当放置在AppDelegate->didFinishLaunchingWithOptions时,模拟器需要运行两次才能获得正确的设置,但也许有更好的方法。
在这个例子中使用了丹麦本地化,更多本地化信息可以在这里找到:iPhone lproj文件夹的语言环境代码
let langCultureCode: String = "da"
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([langCultureCode], forKey: "AppleLanguages")
defaults.synchronize()

要再次删除默认值:

let defaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("AppleLanguages")
defaults.synchronize()

1
你不知道你救了我多少次了。在我的应用程序中,我一直在努力强制MapView结果(城市名,国家名)以英语而不是本地结果(阿拉伯语)显示。这个方法解决了我的问题。祝福你的灵魂! - Khaledonia

3
在这种情况下,只需在启动时将defaults键AppleLanguages EARLY设置为覆盖IOS设置即可。(EARLY = 在使用xib/storyboard或NSLocalizedString之前)
NSString *langCultureCode = @"he";
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@[langCultureCode] forKey:@"AppleLanguages"];
[defaults synchronize];

谢谢!它可以工作了(我使用了“he”而不是“he_IL”)。非常感谢! - dowi
但我认为此后需要重新加载根视图以立即查看更改。 - user2526811
1
有没有办法在应用程序第一次加载时就让它工作?似乎强制本地化只能在应用程序第二次加载时才起作用,即使代码片段在didFinishLaunchingWithOptions的第一行中被调用。 - royherma
你必须在main.m中完成这个操作,才能保证它100%的正常工作。但不建议在需要提交的应用程序中采用这种方法。 - Boon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接