我正在开发本地化应用,一切正常。问题是我想让用户在app settings文件夹中专门为特定应用程序选择语言。用户应将其手机设置为一种语言(例如法语),以便将应用程序设置为英语。
我目前正在使用NSLocalizedString来获取本地化字符串,但是查看宏的所有变体我找不到可以指定语言的字符串。
关于如何做的任何想法?
答案 0 :(得分:15)
这里有三个问题:
最后几乎肯定是不可修复的,所以我们会留下它。他们将以设备语言出现。
另外两个是可以解决的,但你需要手工完成更多的事情。对于字符串,而不是创建单个Localizable.strings然后本地化它,创建完全独立的表(English.strings,French.strings等)然后,使用NSLocalizedStringFromTable()
,将语言作为表传递。
对于NIB,有两种方法。您可以将每组本地化NIB放入其自己的Bundle中,然后将该Bundle而不是nil
传递给-initWithNibName:bundle:
。或者,您可以在使用[NSBundle -pathForResource:ofType:inDirectory:forLocalization:]
找到NIB后手动加载NIB。
答案 1 :(得分:12)
有一种更好的方法可以做到这一点。您可以像这样强制语言:
[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
通过以下方式撤消此设置:
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"];
NB。您通常必须重新启动应用程序才能生效。
考虑是否需要致电[[NSUserDefaults standardUserDefaults] synchronize];
我同意不需要允许用户指定语言。但是,一个例外是能够覆盖语言并将其设置为开发人员的母语。如果用户可以说出开发人员的语言(例如英语),那么如果翻译不正确,他们可能希望使用该语言的应用程序。
我引用了这个答案:How to force NSLocalizedString to use a specific language(答案实际上并不适用于我,但遵循评论中的想法。我解决了这些问题。
答案 2 :(得分:3)
通过从应用程序中选择使用特定语言的技巧是强制NSLocalizedString根据所选语言使用特定的包,
这是我为此http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
撰写的帖子以下是一个示例应用https://github.com/object2dot0/Advance-Localization-in-ios-apps
的代码答案 3 :(得分:1)
正确的“用户体验”是用户通过系统偏好设置面板选择他们的语言;不是你的应用程序(或你的应用程序的设置面板等)。没有办法覆盖这个每个应用程序,我们不希望任何应用程序更改系统范围设置。