在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常用模块用法分析
Sep 08 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
Python检测网络延迟的代码
May 15 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python 自定义对象的打印方法
Jan 12 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
Python根据服务获取端口号的方法
Sep 25 Python
利用Python函数实现一个万历表完整示例
Jan 23 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 urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
PHP文件上传类实例详解
2016/04/08 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
js的event详解。
2006/09/06 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
python中yield的用法详解
2021/01/13 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
演讲稿开场白
2014/01/13 职场文书
行政前台岗位职责
2015/04/16 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书
解析python中的jsonpath 提取器
2022/01/18 Python
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库
MySQL数据库查询之多表查询总结
2022/08/05 MySQL