pytz时区和地区的国际化
项目描述
© 2014-2021 Thomas Khyn
地区国际化包。地点、时区等的翻译
已用Python 2和3的最新次要版本进行测试。
支持的语言:英语、法语、德语、捷克语、中文(想添加您的语言吗?)
什么是l18n?
如您所注意到的,l18n是i18n和l10n的缩写,即“国际化”和“本地化”。它基本上为用于本地化的名称(例如地点和时区)提供懒惰的翻译。
我开始编写l18n是因为我在寻找pytz库的翻译。确实,在一个多语言网站上,用户可以选择他们所在的时区,如果他们能选择他们自己的语言,那就更好了,因为在某些情况下,与英语名称的差异可能很大,因此在按字母顺序排序时,这就是查找它的地方。
因为我懒惰,我想到了一种方法来几乎自动地从CLDR(Unicode的通用地区数据仓库)数据库中检索翻译。
将时区与国家代码关联的函数集成后,没有理由不尝试为后者也提供翻译。在不久的将来,我或贡献者也可能添加来自CLDR数据库的货币或度量单位...
它是如何工作的?
要使用 l18n,您首先需要安装它。它与 pip 配合得很好。
pip install l18n
然后,在您的代码中
>>> import l18n
l18n公开了几个只读的字典样式的对象
l18n.tz_cities
是一个映射,将 pytz.all_timezones 中列出的所有时区与当前语言中城市名称的翻译的友好版本(见下文的 选择语言)进行映射。例如,如果语言是英语
>>> l18n.tz_cities['Pacific/Easter'] L18NLazyString <Easter Island> >>> str(l18n.tz_cities['Pacific/Easter']) 'Easter Island'法语中,它会给出
>>> str(l18n.tz_cities['Pacific/Easter']) 'Île de Pâques'
l18n.tz_fullnames
是一个映射,将 pytz.all_timezones 中列出的所有时区与当前语言的时区完整名称的友好版本进行映射。例如
>>> str(l18n.tz_fullnames['Pacific/Easter']) 'Pacific/Easter Island' # or 'Pacifique/Île de Pâques' in French值得注意的是,对于包含当地州或领地名称的3部分时区名称,l18n会巧妙地删除这些信息,以便不重复
>>> str(l18n.tz_fullnames['America/North_Dakota/New_Salem']) 'America/North Dakota/New Salem'确实
>>> str(l18n.tz_cities['America/North_Dakota/New_salem']) 'New Salem, North Dakota'
l18n.territories
是一个映射,将 CLDR 中定义的领土代码及其本地化名称进行映射,定义为懒加载。例如
>>> str(l18n.territories['CZ']) 'Czech Republic' # or 'République Tchèque' in French
懒加载映射的特殊功能(从2016.6.3版本开始)
前面提到的 tz_cities、tz_fullnames 和 territories 不是简单的字典,并提供额外的功能。
排序
当迭代 L18NMap 时,项、键或值会以 当前选择的语言中的字母顺序 生成。为了性能,结果按语言缓存,因此每个语言只进行一次排序。请注意,值仍然是懒加载对象,仅在将它们渲染为字符串时才会进行评估。
子集
您可以通过使用 subset 方法并传递一个需要保留在新映射中的 keys 的可迭代对象来从现有的 L18NMap 生成一个新的。任何缓存的排序也会用于生成新的缓存,因此在新子集中没有需要重新计算的内容。
例如,可以生成一个 pytz.common_timezones 的翻译映射
>>> common_cities = l18n.tz_cities.subset(pytz.common_timezones.keys())
选择语言
默认情况下,当导入 l18n 时,当前默认的区域设置被使用(通过 locale.getdefaultlocale())。如果它不是您想要的,或者您需要更改它,这相当简单
>>> l18n.set_language('en') >>> str(l18n.tz_cities['Pacific/Easter']) 'Easter Island' >>> l18n.set_language('fr') >>> str(l18n.tz_cities['Pacific/Easter']) 'Île de Pâques'
并且如果您想禁用翻译并使用原始默认字符串
>>> l18n.set_language(None)
实用工具
l18n 还公开了一些可能在某些情况下有帮助的函数
l18n.utils.get_country_tzs(country_code)
返回给定国家代码的位置列表,按当前选择的语言的字母顺序排序
l18n.utils.get_country_code_from_tz(timezone)
返回给定(未翻译)时区的国家代码
版本
l18n的主版本号与pytz的版本号相匹配。无论X的值如何,l18n 2014.10.X都将与pytz 2014.10完全兼容。实际上,主要目标是保持l18n的翻译文件与pytz时区名称的一致性。
在l18n 2016.6之前,pytz版本被锁定在l18n版本上。现在,l18n YEAR.MONTH可以与任何后续的pytz版本一起使用。然而,请注意,如果这两个版本差异太大,可能会缺少翻译。在这种情况下,请通过提交问题来请求发布l18n的新版本。
想添加一种语言吗?
这是个好主意!请查看CONTRIBUTE.rst。
路线图
添加支持的语言
添加货币和其他内容
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。