Django中使用Babel的实用工具
项目描述
使用 Babel 与 Django 集成的工具
此包包含将 Babel 集成到 Django 网络框架的各种实用工具
一个用于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在顶级templates目录中查找任何文件,或在应用templates目录中的任何文件,并使用名为“django”的提取方法从这些模板文件中提取消息。您需要调整这些glob模式以匹配您存储模板的位置。
此外,您的包目录中任何以.py扩展名的文件都由“python”提取方法处理(将“mypkg”替换为您的Django项目包的实际名称)。
如果您不使用setuptools,或者由于某种原因没有使用setuptools/pip安装django-babel,您需要定义提取方法“django”映射到的函数。这通过配置文件顶部的额外部分完成
[extractors]
django = django_babel.extract:extract_django
模板的编码默认为UTF-8。如果您使用不同的编码,您需要在配置中指定它。例如
[django: templates/**.*]
encoding = iso-8859-1
运行提取过程
一旦设置了配置文件,实际的提取是通过执行与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 compile命令完成此操作
$ 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 来根据用户偏好更改区域设置,则 Babel 中间件必须插入 Django 中间件之后。
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-12-18)
增加了对 Django 2.0 的兼容性
0.6.1 (2017-12-18)
增加了对 Django 1.11 的兼容性
0.6.0 - 2017-04-25
删除了对不支持 Django 版本(<1.8)的兼容性
增加了对 Django 1.10+ 中间件的兼容性
0.5.1 - 2016-03-30
在 babel templatetags 中使用绝对导入
通过 _() 删除翻译中的引号
修复文档中的链接
添加了对“裁剪”块翻译内容的支持
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
修复 entry points 中对 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
初始测试基础设施
添加管理命令 babel,带有 makemessages 和 compilemessages 标签。模仿 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 作为源控制
项目详情
下载文件
下载适用于您平台的项目文件。如果您不确定选择哪一个,请了解有关 安装包 的更多信息。