国际化

Pluralize

Pluralize 是一个用于国际化(i18n)和多元化(p10n)的 Python 库。

Pluralize 库假定一个文件夹(例如 “translations” )包含以下文件:

it.json
it-IT.json
fr.json
fr-FR.json
(etc)

每个文件都有以下结构,例如意大利语(it.json):

{"dog": {"0": "no cane", "1": "un cane", "2": "{n} cani", "10": "tantissimi cani"}}

顶层键是要翻译的表达式,与之关联的值/字典则将一个数字映射到对应的译文。不同的翻译对应于表达的不同的多元化形式。

这是捷克语中 “bed” 一词的另一个例子

{"bed": {"0": "no postel", "1": "postel", "2": "postele", "5": "postelí"}}

要翻译和多元化化字符串 “dog” ,只需在 T 运算符中传递并处理字符串,如下所示:

>>> from pluralize import Translator
>>> T = Translator('translations')
>>> dog = T("dog")
>>> print(dog)
dog
>>> T.select('it')
>>> print(dog)
un cane
>>> print(dog.format(n=0))
no cane
>>> print(dog.format(n=1))
un cane
>>> print(dog.format(n=5))
5 cani
>>> print(dog.format(n=20))
tantissimi cani

字符串可以包含多个占位符,但 {n} 占位符是特殊的,因为名为 “n” 的变量被用于通过最佳匹配(最大的字典键 <= n )来确定多元化的结果。

T(…) 对象可以彼此相加,也可以与字符串相加,就像常规字符串一样。

T.select(s) 可以按照 HTTP 接受的语言格式解析字符串 s 。

更新翻译文件

在 .py、.html 和 .js 文件中查找所有用 T(…) 包装的字符串:

matches = T.find_matches('path/to/app/folder')

在所有支持的语言中添加新发现的条目

T.update_languages(matches)

添加新的支持语言(例如德语 “de” )

T.languages['de'] = {}

确保所有语言都包含相同的源表达式:

known_expressions = set()
for language in T.languages.values():
    for expression in language:
        known_expressions.add(expression)
T.update_languages(known_expressions))

最后保存更改:

T.save('translations')