跳转到主要内容

pytz时区和地区的国际化

项目描述

© 2014-2021 Thomas Khyn

地区国际化包。地点、时区等的翻译

已用Python 2和3的最新次要版本进行测试。

支持的语言:英语、法语、德语、捷克语、中文(想添加您的语言吗?

什么是l18n?

如您所注意到的,l18ni18nl10n的缩写,即“国际化”和“本地化”。它基本上为用于本地化的名称(例如地点和时区)提供懒惰的翻译。

我开始编写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_citiestz_fullnamesterritories 不是简单的字典,并提供额外的功能。

排序

当迭代 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

路线图

  • 添加支持的语言

  • 添加货币和其他内容

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

l18n-2021.3.tar.gz (50.7 kB 查看哈希值)

上传时间 源代码

构建分布

l18n-2021.3-py3-none-any.whl (51.5 kB 查看哈希值)

上传时间 Python 3

支持者