在django中使用babel的实用程序
django-babel的Python项目详细描述
与django一起使用babel的工具
此包包含各种实用程序,用于将 babel 集成到 django 网络框架:
< Buff行情>- Django模板的消息提取插件。
- 将babel对象添加到请求的中间件类。
- 一组用于设置日期和数字格式的模板标记。
提取消息
babel提供了一个类似于gnu
xgettext
的消息提取框架,但是
更具扩展性和面向python应用程序。而Django
提供
包装脚本
,以便使用
xgettext
更多
方便,提取功能相当有限。例如,你
不能使用扩展名为
提取方法映射
因此django babel附带了一个提取方法插件,可以提取 来自django模板文件的可本地化消息。python在 巴贝尔的盒子。要使用此提取功能,请创建名为 babel.cfg 在项目目录(项目上方的目录)中 包装),内容:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]
这将指示babel在顶级模板中查找任何文件。 目录,或应用程序 模板 目录中的任何文件,并使用 名为"django"的提取方法从这些模板文件中提取消息。 你需要调整这些球的形状以适应你的位置 模板。
此外,任何扩展名为 .py 的文件都在包目录中(替换 "mypkg"(实际名称为django项目包)由处理 "python"提取方法。
如果你不使用setuptools,或者由于某种原因没有安装django babel 使用setuptools/pip,您需要定义提取方法的功能 "django"映射到。这是在 配置文件:
[extractors]django=django_babel.extract:extract_django
模板的编码假定为utf-8。如果你在使用 不同的编码,您需要在配置中指定它。为了 例子:
[django: templates/**.*]encoding=iso-8859-1
运行提取过程
设置完配置文件后,将执行实际的提取 通过执行命令行程序 巴别塔套餐:
$ 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 命令将更改合并到 翻译目录:
< < > > $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 integration中描述。
使用中间件
要使用babel中间件,请将其添加到 设置模块。如果您还使用django自己的 localemidlware 来改变 基于用户偏好的区域设置,必须插入babel中间件 在Django One之后:
MIDDLEWARE_CLASSES=(...'django.middleware.locale.LocaleMiddleware','django_babel.middleware.LocaleMiddleware',...)
这将向请求对象添加 locale 属性,该对象是 babel 语言环境类。当 请求对象可用,或者使用 django_babel.middleware.get_current_locale() 函数获取当前 来自线程本地缓存的区域设置。
使用模板标记
django babel提供的模板过滤器允许格式化日期/时间和 以对区域设置敏感的方式对值进行编号,提供更强大的功能 与随附的 日期 、 时间 和 浮点格式 过滤器不同 Django,
要使模板过滤器/标记可用,需要将django babel添加到 设置模块中已安装的应用程序列表:
INSTALLED_APPS=(...'django_babel',...)
在每个要使用过滤器的模板中,都需要显式加载 Django Babel图书馆:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]0
有关日期/时间和数字格式的一般信息,请访问 日期格式 和 数字格式
以下过滤器可用。这些示例假定一个区域设置为 我们
日期fmt
呈现日期的字符串表示形式。
- 输入 : datetime.date , datetime.datetime 或float/int时间戳
- 参数 :格式名称或模式(可选)
假设 book.pubdate 返回一个 datetime.date 或 日期时间.datetime 对象:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]1
将呈现: 4/1/07 ,和
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]2
将呈现: 太阳,2007年4月1日广告
呈现日期和时间的字符串表示形式。
- 输入 : datetime.datetime 或float/int时间戳
- 参数 :格式名称或模式(可选)
示例:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]3
将呈现: 4/1/07下午3:30 ,和
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]4
将呈现: 太阳,2007年4月1日AD-15:30:00
时间
呈现时间的字符串表示形式。
- 输入: datetime.datetime , datetime.time 或float/int时间戳
- 参数 :格式名称或模式(可选)
示例:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]5
将呈现: 3:30 pm ,和
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]6
将呈现:下午3点
决策故障
呈现十进制数的字符串表示形式。
- 输入 :一个 十进制 对象,或一个float/int/long值
- 参数 :格式名称或模式(可选)
示例:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]7
将呈现: 1234 ,和
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]8
将呈现: 1234.00
货币fmt
呈现格式为货币值的数字。
- 输入 :a 十进制 对象或float/int/long值
- 参数 :货币代码
示例:
[django: templates/**.*][django: mypkg/*/templates/**.*][python: mypkg/**.py]9
将呈现: $49.90
百分比fmt
以百分比形式呈现数字的字符串表示。
- 输入 :a 十进制 对象或float/int/long值
- 参数 :格式名称或模式(可选)
示例:
假设 帐面折扣 将返回 0.15 ,
[extractors]django=django_babel.extract:extract_django0
将呈现 15% ,和
[extractors]django=django_babel.extract:extract_django1
将渲染 15.00%
使用科学符号呈现数字的字符串表示。
- 输入 :a 十进制 对象或float/int/long值
- 参数 :无
示例:
假设 book.numsold 将返回1.000.000,
[extractors]django=django_babel.extract:extract_django2
将渲染 10e5