2010-12-04 31 views
1

我正在将我的应用程序本地化为丹麦。我将Localizable.Strings和XIB翻译成丹麦语。NSLocalizedString()基于用户的语言或其区域设置?

在iPhone上,用户可以

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

我的问题是:对于上述任何设置应当该应用程序会显示'丹麦'版本(对于我的应用程序来说,这意味着用户界面中的所有文本以及数据库都是丹麦文版本),还是只有当用户将语言设置为'丹斯克'时才会显示'丹麦语'版本?

回答

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] 

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

+0

感谢您的回复。 – pm08 2010-12-04 21:22:21

2

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

为什么语言环境分别从语言处理可以在Locales Programming Guide发现:

当显示数据,将其 应根据用户的本地 国家,地区的 约定来格式化用户,或文化。 相反,当用户输入数据时,他们可能会根据他们自己的 海关或偏好设置。区域设置对象 用于提供本地化演示文稿 或解释数据所需的信息 。此 信息可包含十进制 分隔符,日期格式和 单位的测量值,以及语言和 区域信息。

例如,通过在 美国“76年7月4日”会议代表 独立宣言的 二百年。然而,在英国,它代表“1976年4月 ”的第7位。在泰国使用 泰国传统日历,它可能是 代表“2519年4月7日”;并在 法国它代表“7 avril 1976”。 举一个更微妙的例子,在 美国“12.125”代表 十进制数十二八八, 而在德国它代表 一千二百一千和 二十五。

在给那里的例子,你可能谁喜欢使用英语作为主要语言,但谁住在德国,用于逗号作为小数点分隔符,而不是一个时期的用户。

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

相关问题