在Python中的Django框架中进行字符串翻译


Posted in Python onJuly 27, 2015

使用函数 ugettext() 来指定一个翻译字符串。 作为惯例,使用短别名 _ 来引入这个函数以节省键入时间.

在下面这个例子中,文本 "Welcome to my site" 被标记为待翻译字符串:

from django.utils.translation import ugettext as _

def my_view(request):
  output = _("Welcome to my site.")
  return HttpResponse(output)

显然,你也可以不使用别名来编码。 下面这个例子和前面两个例子相同:

from django.utils.translation import ugettext

def my_view(request):
  output = ugettext("Welcome to my site.")
  return HttpResponse(output)

翻译字符串对于计算出来的值同样有效。 下面这个例子等同前面一种:

def my_view(request):
  words = ['Welcome', 'to', 'my', 'site.']
  output = _(' '.join(words))
  return HttpResponse(output)

翻译对变量也同样有效。 这里是一个同样的例子:

def my_view(request):
  sentence = 'Welcome to my site.'
  output = _(sentence)
  return HttpResponse(output)

(以上两个例子中,对于使用变量或计算值,需要注意的一点是Django的待翻译字符串检测工具, make-messages.py ,将不能找到这些字符串。 稍后,在 makemessages 中会有更多讨论。)你传递给 _() 或 gettext() 的字符串可以接受占位符,由Python标准命名字符串插入句法指定的。 例如:

def my_view(request, m, d):
  output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}
  return HttpResponse(output)

这项技术使得特定语言的译文可以对这段文本进行重新排序。 比如,一段英语译文可能是 "Today is November 26." ,而一段西班牙语译文会是 "Hoy es 26 de Noviembre." 使用占位符(月份和日期)交换它们的位置。

由于这个原因,无论何时当你有多于一个单一参数时,你应当使用命名字符串插入(例如: %(day)s )来替代位置插入(例如: %s or %d )。 如果你使用位置插入的话,翻译动作将不能重新排序占位符文本。

Python 相关文章推荐
Python实现模拟时钟代码推荐
Nov 08 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
python+ffmpeg批量去视频开头的方法
Jan 09 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
学习Django知识点分享
Sep 11 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
Python日志logging模块功能与用法详解
Apr 09 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Python中特殊函数集锦
Jul 27 #Python
Python实现截屏的函数
Jul 26 #Python
Python计算已经过去多少个周末的方法
Jul 25 #Python
Python基于动态规划算法计算单词距离
Jul 25 #Python
Python中Django框架利用url来控制登录的方法
Jul 25 #Python
Python实现模拟登录及表单提交的方法
Jul 25 #Python
Python基于有道实现英汉字典功能
Jul 25 #Python
You might like
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
最新的互联网创业计划书
2014/01/10 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
食品安全演讲稿
2014/09/01 职场文书
中班教师个人总结
2015/02/05 职场文书
党小组推荐意见
2015/06/02 职场文书
python多线程方法详解
2022/01/18 Python
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS