Skip to main content

在 Django 中使用 Babel 的实用程序,没有和上限 Django 版本约束。

项目描述

在 Django 中使用 Babel 的工具

这个包包含用于将Babel集成到 Django Web 框架中的各种实用程序:

  • Django 模板的消息提取插件。

  • 将 Babel Locale对象添加到请求的中间件类。

  • 一组用于日期和数字格式的模板标签。

这是django-babel的硬分叉

https://img.shields.io/pypi/v/django2-babel.svg https://img.shields.io/travis/wooyek/django2-babel.svg

提取消息

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.pomypkg/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()函数从线程本地缓存中获取当前语言环境。

使用模板标签

django-babel 提供的模板过滤器允许以区域设置敏感的方式格式化日期/时间和数字值,为 Django 附带的datetimefloatformat过滤器提供了更强大的替代方案。

要使模板过滤器/标签可用,您需要将 django-babel 添加到设置模块中的INSTALLED_APPS列表中:

INSTALLED_APPS = (
    ...
    'django_babel',
    ...
)

在每个要使用过滤器的模板中,您需要显式加载 django-babel 库:

{% load babel %}

有关日期/时间和数字格式的一般信息,请参阅 日期格式数字格式

提供以下过滤器。这些示例假定语言环境为 en_US

日期文件

呈现日期的字符串表示形式。

  • 输入datetime.datedatetime.datetime或 float/int 时间戳

  • 参数:格式名称或模式(可选)

假设book.pubdate返回一个datetime.datedatetime.datetime对象:

{{ book.pubdate|datefmt:"short" }}

将呈现:4/1/07

{{ book.pubdate|datefmt:"E, MMM dd yyyy GGG" }}

将呈现:太阳,2007 年 4 月 1 日 AD

日期时间文件

呈现日期和时间的字符串表示形式。

  • 输入datetime.datetime或浮点/整数时间戳

  • 参数:格式名称或模式(可选)

例子:

{{ book.pubdate|datetimefmt:"short" }}

将呈现:4/1/07 3:30 PM

{{ book.pubdate|datetimefmt:"E, MMM dd yyyy GGG' - 'HH:mm:ss'" }}

将呈现:太阳,2007 年 4 月 1 日 AD - 15:30:00

时限

呈现时间的字符串表示形式。

  • 输入datetime.datetimedatetime.time或浮点/整数时间戳

  • 参数:格式名称或模式(可选)

例子:

{{ book.pubdate|timefmt:"short" }}

将呈现:3:30 PM

{{ book.pubdate|timefmt:"h 'o''clock' a'" }}

将呈现:下午 3 点

十进制

呈现十进制数的字符串表示形式。

  • 输入:一个Decimal对象,或一个 float/int/long 值

  • 参数:格式名称或模式(可选)

例子:

{{ book.pagecount|decimalfmt }}

将呈现:1,234

{{ book.pagecount|decimalfmt:"#,##0.00" }}

将呈现:1,234.00

货币fmt

呈现格式化为货币值的数字。

  • 输入:一个Decimal对象,或一个 float/int/long 值

  • 参数:货币代码

例子:

{{ book.price|currencyfmt:"USD" }}

将呈现:49.90 美元

百分比

将数字的字符串表示形式呈现为百分比。

  • 输入:一个Decimal对象,或一个 float/int/long 值

  • 参数:格式名称或模式(可选)

例子:

假设book.rebate将返回0.15

{{ book.rebate|percentfmt }}

将呈现15%,并且

{{ book.rebate|percentfmt:"#,##0.00%" }}

将呈现15.00%

科学术语

使用科学计数法呈现数字的字符串表示形式。

  • 输入:一个Decimal对象,或一个 float/int/long 值

  • 参数:无

例子:

假设book.numsold将返回 1.000.000,

{{ book.numsold|scientificfmt }}

将呈现10E5

变更日志

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

  • 初始测试基础设施

  • 添加带有makemessagescompilemessages 标签的管理命令babel 。模仿 django 的makemessagescompilemessages命令。

  • 各种 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.tar.gz (23.3 kB 查看哈希)

已上传 source

内置分布

django2_babel-0.6.3-py2.py3-none-any.whl (16.0 kB 查看哈希

已上传 3 5