跳转到主要内容

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.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 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() 函数从线程局部缓存中获取当前区域设置。

使用模板标签

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

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

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

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

{% load babel %}

有关日期/时间和数字格式化的详细信息,请参阅 日期格式化数字格式化

以下过滤器是可用的。以下示例假设区域设置为 en_US

datefmt

渲染日期的字符串表示形式。

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

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

假设 book.pubdate 返回 datetime.datedatetime.datetime 对象

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

将渲染: 4/1/07

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

将渲染: Sun, Apr 01 2007 AD

datetimefmt

渲染日期和时间的字符串表示形式。

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

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

示例

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

将渲染: 4/1/07 3:30 PM

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

将渲染: Sun, Apr 01 2007 AD - 15:30:00

timefmt

渲染时间的字符串表示形式。

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

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

示例

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

将渲染: 3:30 PM

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

将渲染: 3 o’clock PM

decimalfmt

渲染十进制数字的字符串表示形式。

  • 输入:一个 Decimal 对象,或一个浮点/整数/长值

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

示例

{{ book.pagecount|decimalfmt }}

将渲染: 1,234

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

将渲染: 1,234.00

currencyfmt

将数字格式化为货币值。

  • 输入:一个 Decimal 对象,或一个浮点/整数/长值

  • 参数:货币代码

示例

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

将渲染: $49.90

percentfmt

将数字作为百分比渲染为字符串。

  • 输入:一个 Decimal 对象,或一个浮点/整数/长值

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

示例

假设 book.rebate 返回 0.15

{{ book.rebate|percentfmt }}

将渲染 15%

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

将渲染 15.00%

scientificfmt

使用科学记数法渲染数字的字符串表示形式。

  • 输入:一个 Decimal 对象,或一个浮点/整数/长值

  • 参数:无

示例

假设 book.numsold 返回 1,000,000。

{{ book.numsold|scientificfmt }}

将渲染 10E5

变更日志

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,带有 makemessagescompilemessages 标签。模仿 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 作为源控制

项目详情


下载文件

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

源分布

django-babel-0.6.2.tar.gz (24.3 kB 查看散列

上传时间

构建分布

django_babel-0.6.2-py2.py3-none-any.whl (15.8 kB 查看散列

上传时间 Python 2 Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页