NSLocalizedString()是基于用户的语言还是他们的区域设置?

时间:2010-12-04 20:32:26

标签: iphone localization

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

在iPhone上,用户可以

  1. 将“地区格式”设为“丹麦” 但保持语言'英语'
  2. 将“地区格式”设置为任何说英语的国家/地区,但请保留 语言'Dansk'
  3. 将“地区格式”设置为“丹麦”,将语言设置为“Dansk”
  4. 我的问题是:对于上述任何设置,应用程序应显示“丹麦语”版本(对于我的应用程序将表示UI中的所有文本和数据库为丹麦语。)或仅应该是“丹麦语”版本用户将语言设置为'Dansk'时会出现吗?

2 个答案:

答案 0 :(得分:3)

这是一个很好的问题。

苹果公司认为,真正的问题是,当他们这样做时,NSLocalizedString是否倾向于支持“地区格式”或“语言”设置?

我从来没有找到一个明确的答案,我只是让NSLocalizedString决定。

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

以下代码段可能会对您有所帮助。

// 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]

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

答案 1 :(得分:2)

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

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

中找到
  

向用户显示数据时   应根据格式进行格式化   用户原生的约定   国家,地区或文化。   相反,当用户输入数据时,   他们可以根据自己的意愿这样做   习俗或偏好。区域设置对象   用于提供信息   需要本地化演示文稿   或解释数据。这个   信息可以包括小数   分隔符,日期格式和单位   测量,以及语言和   地区信息。

     

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

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

Internationalization Programming Topics指南详细讨论了所涉及的所有问题以及如何处理这些问题。