在 Django 中使用 Babel 的实用程序,没有和上限 Django 版本约束。
项目描述
在 Django 中使用 Babel 的工具
这个包包含用于将Babel集成到 Django Web 框架中的各种实用程序:
Django 模板的消息提取插件。
将 Babel Locale对象添加到请求的中间件类。
一组用于日期和数字格式的模板标签。
提取消息
Babel 提供了一个类似于 GNU xgettext的消息提取框架,但更具可扩展性并且更适合 Python 应用程序。虽然 Django 确实提供了使xgettext的使用更方便的包装脚本,但提取功能相当有限。例如,您不能使用扩展名为.html以外的模板文件,并且所有内容都需要在您的项目包目录中。
提取方法映射
所以 django-babel 自带了一个提取方法插件,可以从 Django 模板文件中提取可本地化的消息。Babel 开箱即用地支持 Python。要使用此提取功能,请在项目目录(项目包上方的目录)中创建一个名为 babel.cfg的文件,其内容为:
[django: templates/**.*]
[django: mypkg/*/templates/**.*]
[python: mypkg/**.py]
这指示 Babel 查找顶级模板 目录中的任何文件,或应用程序模板目录中的任何文件,并使用名为“django”的提取方法从这些模板文件中提取消息。您需要将这些 glob 模式调整到您存储模板的任何位置。
此外,包目录中任何扩展名为.py的文件(将“mypkg”替换为 Django 项目包的实际名称)都由“python”提取方法处理。
如果你不使用 setuptools,或者由于某种原因没有使用 setuptools/pip 安装 django-babel,你需要定义提取方法“django”映射到的函数。这是在配置文件顶部的额外部分中完成的:
[extractors]
django = <s>django_babel.extract:extract_django</s>
模板的编码假定为 UTF-8。如果您使用不同的编码,则需要在配置中指定它。例如:
[django: templates/**.*]
encoding = <s>iso-8859-1</s>
运行提取过程
一旦你设置了配置文件,实际的提取是通过执行与 Babel 包一起安装的命令行程序pybabel来执行的:
$ cd projectdir
$ pybabel extract -F babel.cfg -o mypkg/locale/django.pot .
这会在mypkg/locale/django.pot中创建 PO 文件模板。
创建和更新翻译目录
如果您还没有翻译目录,则需要创建它们。这是使用pybabel init命令完成的:
$ pybabel init -D django -i mypkg/locale/django.pot -d mypkg/locale -l en_US
$ pybabel init -D django -i mypkg/locale/django.pot -d mypkg/locale -l de_DE
这应该创建两个文件:mypkg/locale/en_US/django.po和 mypkg/locale/de_DE/django.po。这些文件是您放置实际翻译的地方。
当您修改 Python 源文件或模板时,通常需要同步翻译目录。为此,您首先按照上一节所述执行全新提取,以便更新django.pot文件。
然后,运行pybabel update命令将更改合并到翻译目录中:
`bash $ pybabel update -D django -i mypkg/locale/django.pot -d mypkg/locale `
这将更新在mypkg/locale目录中找到的所有.po文件。
编译翻译目录
最后,您需要将这些.po文件编译为二进制.mo文件。为此使用 pybabel 编译命令:
$ pybabel compile -D django -d mypkg/locale
添加--statistics选项以获取有关翻译完整性的信息:
$ pybabel compile -D django -d mypkg/locale --statistics
使用setup.py
如果您将setup.py脚本添加到您的项目并使用 Babel 附带的 distutils/setuptools 命令,上述大部分过程都可以自动化。这在Distutils/Setuptools 集成中有所描述。
使用中间件
要使用 Babel 中间件,请将其添加到设置模块中的MIDDLEWARE_CLASSES列表中。如果您还使用 Django 自己的LocaleMiddleware来根据用户偏好更改语言环境,则必须在 Django 中间件之后插入 Babel 中间件:
MIDDLEWARE_CLASSES = (
...
'django.middleware.locale.LocaleMiddleware',
'django_babel.middleware.LocaleMiddleware',
...
)
这会为请求对象添加一个locale属性,该对象是 Babel Locale类的一个实例。当请求对象可用时,您可以通过request.locale访问语言环境,或者使用 django_babel.middleware.get_current_locale()函数从线程本地缓存中获取当前语言环境。
变更日志
0.6.2 - 2017-07-20
添加了与 Django 2.0 及更高版本的兼容性
0.6.1 - 2017-07-20
添加了与 Django 1.11 的兼容性
0.6.0 - 2017-04-25
与不受支持的 Django 版本 (<1.8) 的兼容性被删除
添加了与 Django 1.10+ 中间件的兼容性
0.5.1 - 2016-03-30
在 babel 模板标签中使导入绝对
通过 _() 从翻译中删除引号
修复文档中的链接
添加对“修剪过的”blocktrans 内容的支持
0.5.0 - 2016-02-29
添加对 Django-1.9 的兼容性
0.4.0 - 2015-04-22
添加对 Django 1.8 的兼容性
添加对最新 django master 的兼容性
各种 python 3 修复
0.3.9 - 2014-12-24
修复对 Django/Babel 的依赖以使用小写的 egg 名称。
0.3.8 - 2014-10-14
修复入口点中对babeldjango模块的旧引用。
0.3.7 - 2014-10-14
修复babel makemessages命令中的 Python 3.x 兼容性。
0.3.6 - 2014-10-05
Django 1.7 兼容性
0.3.5 - 2014-09-10
如果不存在,则创建 .po 和 .pot 文件,以及特定的基本目录。
0.3.4 - 2014-05-25
修复了 django 兼容性
0.3.3 - 2014-04-22
固定版本构建
0.3.2 - 2014-04-22
初始测试基础设施
添加带有makemessages和compilemessages 标签的管理命令babel 。模仿 django 的makemessages和compilemessages命令。
各种 unicode 修复
0.3.1 - 2013-12-11
修复模板标签中的相对导入
0.3.0 - 2013-12-11
将包重命名为 django_babel
0.2.3 - 2013-12-11
在 PyPI 上重命名包
使用 GitHub 作为源代码控制
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
django2_babel -0.6.3-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a4c1e1a94c523aaaa5ea6cec45e3db05331702ab52fcbcd8a7abb876f4ca5ca0 |
|
MD5 | a8f591d0930185f06cc4a82fa4ca2546 |
|
布莱克2-256 | 4b3293a6f73e22a975c7e50b5a679b81d3a78a7394f293ad03e24f9c4d274de4 |