在Python的Django框架中创建语言文件


Posted in Python onJuly 27, 2015

当你标记了翻译字符串,你就需要写出(或获取已有的)对应的语言翻译信息。 这里就是它如何工作的。

地域限制

Django不支持把你的应用本地化到一个连它自己都还没被翻译的地域。 在这种情况下,它将忽略你的翻译文件。 如果你想尝试这个并且Django支持它,你会不可避免地见到这样一个混合体??参杂着你的译文和来自Django自己的英文。 如果你的应用需要你支持一个Django中没有的地域,你将至少需要做一个Django core的最小翻译。
消息文件

第一步,就是为一种语言创建一个信息文件。 信息文件是包含了某一语言翻译字符串和对这些字符串的翻译的一个文本文件。 信息文件以 .po 为后缀名。

Django中带有一个工具, bin/make-messages.py ,它完成了这些文件的创建和维护工作。 运行以下命令来创建或更新一个信息文件:

django-admin.py makemessages -l de

其中 de 是所创建的信息文件的语言代码。 在这里,语言代码是以本地格式给出的。 例如,巴西地区的葡萄牙语为 pt_BR ,澳大利亚地区的德语为 de_AT 。

这段脚本应该在三处之一运行:

  1.     Django项目根目录。
  2.     您Django应用的根目录。
  3.     django 根目录(不是Subversion检出目录,而是通过 $PYTHONPATH 链接或位于该路径的某处)。 这仅和你为Django自己创建一个翻译时有关。

这段脚本遍历你的项目源树或你的应用程序源树并且提取出所有为翻译而被标记的字符串。 它在 locale/LANG/LC_MESSAGES 目录下创建(或更新)了一个信息文件。针对上面的de,应该是locale/de/LC_MESSAGES/django.po。

作为默认, django-admin.py makemessages 检测每一个有 .html 扩展名的文件。  以备你要重载缺省值,使用 --extension 或 -e 选项指定文件扩展名来检测。

django-admin.py makemessages -l de -e txt

用逗号和(或)使用-e或--extension来分隔多项扩展名:

django-admin.py makemessages -l de -e html,txt -e xml

当创建JavaScript翻译目录时,你需要使用特殊的Django域:not -e js 。

没有gettext?

如果没有安装 gettext 组件, make-messages.py 将会创建空白文件。 这种情况下,安装 gettext 组件或只是复制英语信息文件( conf/locale/en/LC_MESSAGES/django.po )来作为一个起点;只是一个空白的翻译信息文件而已。

工作在Windows上么?

如果你正在使用Windows,且需要安装GNU gettext共用程序以便 django-admin makemessages 可以工作,请参看下面Windows小节中gettext部分以获得更多信息。

.po 文件格式很直观。 每个 .po 文件包含一小部分的元数据,比如翻译维护人员的联系信息,而文件的大部分内容是简单的翻译字符串和对应语言翻译结果的映射关系的列表。

举个例子,如果Django应用程序包括一个 "Welcome to my site." 的待翻译字符串 ,像这样:

_("Welcome to my site.")

则django-admin.py makemessages将创建一个 .po 文件来包含以下片段的消息:

#: path/to/python/module.py:23
msgid "Welcome to my site."
msgstr ""

快速解释:

  •     msgid 是在源文件中出现的翻译字符串。 不要做改动。
  •     msgstr 是相应语言的翻译结果。 刚创建时它只是空字符串,此时就需要你来完成它。 注意不要丢掉语句前后的引号。
  •     作为方便之处,每一个消息都包括:以 # 为前缀的一个注释行并且定位上边的msgid 行,文件名和行号。

对于比较长的信息也有其处理方法。 msgstr (或 msgid )后紧跟着的字符串为一个空字符串。 然后真正的内容在其下面的几行。 这些字符串会被直接连在一起。 同时,不要忘了字符串末尾的空格,因为它们会不加空格地连到一起。

若要对新创建的翻译字符串校验所有的源代码和模板,并且更新所有语言的信息文件,可以运行以下命令:

django-admin.py makemessages -a

编译信息文件

创建信息文件之后,每次对其做了修改,都需要将它重新编译成一种更有效率的形式,供 gettext 使用。可以使用django-admin.py compilemessages完成。

这个工具作用于所有有效的 .po 文件,创建优化过的二进制 .mo 文件供 gettext 使用。在你可以运行django-admin.py makemessages的目录下,运行django-admin.py compilemessages:

django-admin.py compilemessages

就是这样了。 你的翻译成果已经可以使用了。

编译信息文件

创建信息文件之后,每次对其做了修改,都需要将它重新编译成一种更有效率的形式,供 gettext 使用。可以使用django-admin.py compilemessages完成。

这个工具作用于所有有效的 .po 文件,创建优化过的二进制 .mo 文件供 gettext 使用。在你可以运行django-admin.py makemessages的目录下,运行django-admin.py compilemessages:

django-admin.py compilemessages

就是这样了。 你的翻译成果已经可以使用了。

Python 相关文章推荐
python中requests库session对象的妙用详解
Oct 30 Python
python的exec、eval使用分析
Dec 11 Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
Flask框架模板继承实现方法分析
Jul 31 Python
python 字典访问的三种方法小结
Dec 05 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
详解Python+OpenCV进行基础的图像操作
Feb 15 Python
在Django的模型和公用函数中使用惰性翻译对象
Jul 27 #Python
使用Django的模版来配合字符串翻译工作
Jul 27 #Python
Django中的“惰性翻译”方法的相关使用
Jul 27 #Python
在Python中的Django框架中进行字符串翻译
Jul 27 #Python
Python中特殊函数集锦
Jul 27 #Python
Python实现截屏的函数
Jul 26 #Python
Python计算已经过去多少个周末的方法
Jul 25 #Python
You might like
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
python selenium 弹出框处理的实现
2019/02/26 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
为什么是 Python -m
2020/06/19 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
介绍一下OSI七层模型
2012/07/03 面试题
一夜的工作教学反思
2014/02/08 职场文书
2015新年寄语大全
2014/12/08 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
企业培训简报范文
2015/07/20 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
话题作文之生命的旋律
2019/12/17 职场文书