【问题标题】:Is NSLocalizedString() based on the user's language or their region setting?NSLocalizedString() 是基于用户的语言还是他们的区域设置?
【发布时间】:2010-12-04 20:32:26
【问题描述】:

我正在为丹麦本地化我的应用程序。我已将 Localizable.Strings 和 XIB 翻译成丹麦语。

在 iPhone 上,用户可以

  1. 将“区域格式”设置为“丹麦” 但保持语言“英语”
  2. 将“区域格式”设置为任何英语国家,但保留 语言“丹麦”
  3. 将“区域格式”设置为“丹麦”和语言“丹麦”

我的问题是:对于上述任何设置,应用程序是否应该显示“丹麦语”版本(对于我的应用程序来说,这意味着 UI 中的所有文本和数据库中的所有文本都是丹麦语。)还是应该只显示“丹麦语”版本当用户将语言设置为“Dansk”时出现?

【问题讨论】:

    标签: iphone localization


    【解决方案1】:

    这是一个很好的问题。

    真正的问题在于,在 Apple 看来,正如他们所做的那样,NSLocalizedString 是倾向于“区域格式”还是“语言”设置?

    我一直无法找到明确的答案,我只是让 NSLocalizedString 决定。

    (纯 FWIW,我认为遵循“语言”设置。)

    以下代码 sn-ps 可能对您有所帮助。

    // to ("usually") get the preferred language FROM THE SET WHICH we supplied in bundle
    // [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]
    
    // to ("often") get the preferred language REGARDLESS OF what we supplied
    // [ [NSBundle preferredLocalizationsFromArray:[NSLocale ISOCountryCodes]] objectAtIndex:0]
    
    // to ("fairly reliably") get the user's chosen language setting...
    // [ [NSLocale preferredLanguages] objectAtIndex:0]
    

    这可能没有帮助,但我希望它有帮助。

    【讨论】:

    • (似乎无法编辑我之前的评论)感谢您的回复。我希望只要遵循 Apple 关于国际化的指导方针,我就能轻松地将应用程序本地化。但似乎更多的问题来了,NSLocalizedString 和本地化的 XIB 在“语言”上工作,但 NSNumberFormatter 正在“区域格式”上工作,即我得到十进制“。”当区域设置为丹麦时,替换为 ','。
    • 认为我必须这样做。但是用户肯定会看到不一致的地方,因为我有一个带有“十进制”的自定义数字键盘。当语言设置为“Dansk”时,它只会在 XIB 中被“,”替换。无论如何,将不得不离开它。感谢您的帮助。
    • 这不是 Apple 的错误,而是一个谨慎的设计决定。正如我在回答中解释的那样,语言和语言环境是独立的概念。数字、日期和时间的格式取决于区域设置,因为它们是特定于国家/地区的。一个国家可以使用多种语言(尤其是移民)。
    【解决方案2】:

    Cocoa 对语言和语言环境的处理方式不同,因为它们是独立的概念。 NSLocalizedString() 将遵循操作系统的当前语言设置,其中日期、时间和数字等内容会受到区域设置的影响。

    为什么语言环境与语言分开处理可以在Locales Programming Guide中找到:

    当您向用户显示数据时 应该按照格式 用户母语的约定 国家、地区或文化。 相反,当用户输入数据时, 他们可以根据自己的情况这样做 习俗或偏好。语言环境对象 用于提供信息 需要本地化演示文稿 或数据解释。这 信息可以包括小数 分隔符、日期格式和单位 测量,以及语言和 地区信息。

    例如,按照惯例 美国“7/4/76”代表 宣言二百周年 独立。然而,在大 英国,它代表了“第 7 1976 年 4 月”;在泰国使用 泰国传统日历它可能 代表“2519 年 4 月 7 日”;并且在 法国它代表“7 avril 1976”。 举一个更微妙的例子,在 美国“12.125”代表 十进制数字十二和八分之一, 而在德国它代表 一万二千一百零 二十五。

    在此处给出的示例中,您可能有一个用户更喜欢使用英语作为他们的主要语言,但他住在德国并且习惯使用逗号作为小数分隔符,而不是句点。

    Internationalization Programming Topics 指南对所涉及的所有问题以及如何处理这些问题进行了冗长的讨论。

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多