创建本地化的iPhone应用程序,但允许用户更改应用程序的语言

时间:2009-08-07 17:21:35

标签: iphone localization

我正在开发本地化应用,一切正常。问题是我想让用户在app settings文件夹中专门为特定应用程序选择语言。用户应将其手机设置为一种语言(例如法语),以便将应用程序设置为英语。

我目前正在使用NSLocalizedString来获取本地化字符串,但是查看宏的所有变体我找不到可以指定语言的字符串。

关于如何做的任何想法?

4 个答案:

答案 0 :(得分:15)

这里有三个问题:

  • 字符串
  • 其他资源(包括NIB)
  • 系统消息

最后几乎肯定是不可修复的,所以我们会留下它。他们将以设备语言出现。

另外两个是可以解决的,但你需要手工完成更多的事情。对于字符串,而不是创建单个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)

正确的“用户体验”是用户通过系统偏好设置面板选择他们的语言;不是你的应用程序(或你的应用程序的设置面板等)。没有办法覆盖这个每个应用程序,我们不希望任何应用程序更改系统范围设置。