本地化:如何获取当前用户的语言?

9

我即将本地化一款iPhone应用程序。当用户的语言(iOS系统语言)为德语时,我想使用不同的URL。

我想知道这样做是否正确:

NSURL *url = [NSURL URLWithString:@"http://..."]; // english URL
NSString* languageCode = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([languageCode isEqualToString:@"de"]) {
    url = [NSURL URLWithString:@"http://..."]; // german URL
}

我知道[NSLocale currentLocale]返回的语言基于当前地区,但并非系统语言,[NSLocale systemLocale]也无法使用。 (我不想在这里使用NSLocalizedString!)
3个回答

13
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];

您的代码是正确的。但我会像这样做:

    NSString *urlString = nil;
    NSString *languageCode = [[NSLocale preferredLanguages] objectAtIndex:0];
    if ([languageCode isEqualToString:@"de"]) {
        urlString = @"http://...";
    }else{
        urlString = @"http://...";
    }
    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

9
我会使用 NSLocalizedString 查找本地化的 URL,代码如下:

我只需像这样查找本地化的 URL:

NSString* urlString = NSLocalizedString(@"myUrlKey", nil);

然后在您的Localizable.strings文件中,您只需要执行以下操作:

// German
"myUrlKey" = "http://www.example.com/de/myapp";

并且
// English
"myUrlKey" = "http://www.example.com/en/myapp";

分别。

3
不确定您是否希望将URL的责任留给翻译团队。 - Alex Terente
我认为这个方案是最好的。 - jimwan

1
更好的做法是使用。
[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode];

如果您想使用Xcode 6的新功能在不更改系统偏好设置的情况下测试其他语言,请按照以下步骤操作。


注意:当前区域设置与首选语言不同!区域设置定义了文本比较方式以及数字和日期的格式。首选语言是实际使用的语言。因此,用户(比如我)可能正在使用德语区域设置(以获取德语日期和24小时制时钟),但仍然喜欢使用英语的OS X。如果您想确定要显示哪些翻译,请使用首选语言,而不是区域设置!(许多应用程序在这方面做得不好,当我收到一个德语应用程序时,尽管我更喜欢英语,这非常令人恼火)。 - Thomas Tempelmann

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