在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 文件操作实现代码
Oct 07 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
教你使用python画一朵花送女朋友
Mar 29 Python
selenium+python截图不成功的解决方法
Jan 30 Python
Python实现合并excel表格的方法分析
Apr 13 Python
Django框架反向解析操作详解
Nov 28 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
Django项目在pycharm新建的步骤方法
Mar 02 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
PHP 检查扩展库或函数是否可用的代码
2010/04/06 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
PHP 裁剪图片
2021/03/09 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
python:socket传输大文件示例
2017/01/18 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
详解python3中的真值测试
2018/08/13 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
小学校园广播稿(3篇)
2014/09/19 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL