区域设置数据

同时 message catalogs 允许您本地化应用程序中的任何消息,但有许多在许多应用程序中使用的字符串,它们的翻译很容易获得。

例如,假设您有一个可供用户选择的国家/地区列表,并且您希望以用户喜欢的语言显示这些国家/地区的名称。您可以利用Babel附带的区域设置数据提供的翻译,而不是在应用程序中自己翻译所有这些国家/地区的名称,这些数据基于 Common Locale Data Repository (CLDR)Unicode Consortium .

这个 Locale 等级

通常情况下,您可以通过以下方式访问此类区域设置数据 Locale 由Babel提供的类:

>>> from babel import Locale
>>> locale = Locale('en', 'US')
>>> locale.territories['US']
u'United States'
>>> locale = Locale('es', 'MX')
>>> locale.territories['US']
u'Estados Unidos'

除了国家/地区名称外,区域设置数据还提供对语言、脚本、变体、时区等名称的访问。有些数据与数字和日期格式密切相关。

大多数相应的 Locale 属性返回字典,其中键是代码,如ISO国家/地区和语言代码。有关相关规范的参考,请参阅API文档。

可能的子标签

在处理区域设置时,您可能会遇到区域设置标记不是完全描述性的情况。例如,人们通常指的是 zh_TW 但是该标识符不能解析为CLDR覆盖的区域设置。在这种情况下,Babel的区域设置标识符解析器将尝试解析最有可能的子标记,以得到预期的区域设置:

>>> from babel import Locale
>>> Locale.parse('zh_TW')
Locale('zh', territory='TW', script='Hant')

这也可用于为某个地区查找最合适的区域设置。在这种情况下,需要在区域代码前加上前缀 und (未知语言标识符):

>>> Locale.parse('und_AZ')
Locale('az', territory='AZ', script='Latn')
>>> Locale.parse('und_DE')
Locale('de', territory='DE')

Babel目前不能处理模糊区域设置(数据文件没有完全支持的区域设置),所以我们只接受完全由CLDR数据支持的区域设置。这在未来将会改变,但目前这一限制已经到位。

区域设置显示名称

区域设置本身可用于描述区域设置本身或其他区域设置。这主要意味着,给定一个语言环境对象,您可以要求它提供其规范的显示名称、语言名称和其他信息。由于区域设置相互交叉引用,因此您可以要求使用CLDR支持的任何语言的区域设置名称:

>>> l = Locale.parse('de_DE')
>>> l.get_display_name('en_US')
u'German (Germany)'
>>> l.get_display_name('fr_FR')
u'allemand (Allemagne)'

显示名称包括唯一标识区域设置(语言、区域、脚本和变体)的所有信息,而该区域设置通常不是您想要的。您还可以要求提供部分信息:

>>> l.get_language_name('de_DE')
u'Deutsch'
>>> l.get_language_name('it_IT')
u'tedesco'
>>> l.get_territory_name('it_IT')
u'Germania'
>>> l.get_territory_name('pt_PT')
u'Alemanha'

日历显示名称

这个 Locale 类提供对许多与日历显示相关的区域设置显示名称的访问,例如工作日或月份的名称。

这些显示名称当然用于日期格式化,但也可以用于,例如,以用户首选的语言向用户显示月份列表:

>>> locale = Locale('es')
>>> month_names = locale.months['format']['wide'].items()
>>> for idx, name in sorted(month_names):
...     print name
enero
febrero
marzo
abril
mayo
junio
julio
agosto
septiembre
octubre
noviembre
diciembre