【问题标题】:NSLocale always returns en_USNSLocale 总是返回 en_US
【发布时间】:2011-03-24 03:42:03
【问题描述】:

我想获取当前选择的 iphone 语言。如果使用“NSLocale”,它总是返回相同的语言。看来这不是你在iphone设置里面选择的那个。

NSLocale * locale = [NSLocale currentLocale];
NSString * localLanguage = [locale objectForKey:NSLocaleLanguageCode];
NSLog (@"Language : %@", localLanguage); // Returns always : "en_US"

如何获取当前语言?

【问题讨论】:

  • 这将返回“区域格式”而不是语言。
  • 我也遇到了和你一样的问题。尝试了各种方法,甚至删除Xcode和模拟器并重新安装,但都不起作用。这发生在我使用 Xcode 6.1 之后。在此之前,一切正常。你修好了吗?背后的原因是什么?
  • s1u,请参阅下面的答案。 Xcode 6.1 中有一个错误

标签: iphone localization


【解决方案1】:

答案是检查首选语言:

NSString *preferredLang = [[NSLocale preferredLanguages] objectAtIndex:0];

【讨论】:

    【解决方案2】:

    这个问题很老了,但是升级到Xcode 6.1后的原因是新的
    由于一个错误,iOS8 模拟器的[NSLocale currentLocale] 总是返回“en_US”。不过在设备上没问题。 因此,我建议您在沮丧地用头撞墙之前先在真实设备上进行测试。


    来源:https://stackoverflow.com/a/26510914/3099609
    https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html#//apple_ref/doc/uid/TP40001051-CH4-DontLinkElementID_23

    【讨论】:

    • 谢谢!我的头只是部分受损。
    【解决方案3】:

    语言环境封装了有关语言、文化和技术惯例和标准的信息。 您的代码返回“区域格式”信息,如果设置“中国”,它将返回“zh”。 设置 |一般 |国际 |区域格式

    有关详细信息,请参阅“NSLocale Class Reference”。

    【讨论】:

      【解决方案4】:

      【讨论】:

        【解决方案5】:

        试试[[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleLanguageCode]

        【讨论】:

        • 这也不起作用 - 它返回“en_US”。 Apple 似乎总是返回 iphone 的初始语言,而不是用户选择的语言。
        • 问题是,NSLocaleLanguageCode 甚至不应该返回 en_US 而只返回 en。 - [NSLocale localeIdentifier] 将是返回 en_US 的那个。这有点奇怪。也许试试 CFLocale API?可悲的是,我手头没有 iDevice 来自己测试它。也许其他人可以看到它是否适用于他们的?
        猜你喜欢
        • 2010-12-04
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        相关资源
        最近更新 更多