我正在为丹麦本地化我的应用。我将Localizable.Strings和XIB翻译成丹麦语。
在iPhone上,用户可以
我的问题是:对于上述任何设置,应用程序应显示“丹麦语”版本(对于我的应用程序将表示UI中的所有文本和数据库为丹麦语。)或仅应该是“丹麦语”版本用户将语言设置为'Dansk'时会出现吗?
答案 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指南详细讨论了所涉及的所有问题以及如何处理这些问题。