【问题标题】:Localization: How to get the current user language?本地化:如何获取当前用户语言?
【发布时间】:2014-10-31 13:56:24
【问题描述】:

我即将本地化一个 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!)

【问题讨论】:

    标签: iphone localization nslocale


    【解决方案1】:
    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]];
    

    【讨论】:

      【解决方案2】:

      我会像这样使用 NSLocalizedString 来查找本地化的 url:

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

      然后在你的 Localizable.strings 文件中你可以这样做:

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

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

      分别。

      【讨论】:

      • 不知道要不要把url的责任留给翻译组。
      • 我认为这个解决方案是最好的
      【解决方案3】:

      更好用

      [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode];
      

      如果你想在不改变系统偏好的情况下使用 Xcode 6 测试其他语言的新功能来测试它。

      【讨论】:

      • 警告:当前语言环境与首选语言不同!语言环境定义了如何比较文本以及如何格式化数字和日期。首选语言是实际语言。所以,一个用户(像我一样)可能正在使用德语语言环境(获取德语日期和 24 小时时钟),但仍然更喜欢用英语使用 OS X。如果您想确定要显示哪些翻译,请使用首选语言,而不是语言环境! (许多应用程序都会出错,即使我更喜欢英语,当我得到一个德语应用程序时也很烦人)。
      猜你喜欢
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多