在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 29 Python
python复制与引用用法分析
Apr 08 Python
python使用matplotlib绘制柱状图教程
Feb 08 Python
关于Django外键赋值问题详解
Aug 13 Python
基于python 字符编码的理解
Sep 02 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
Python 3.8新特征之asyncio REPL
May 28 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
python统计文章中单词出现次数实例
Feb 27 Python
python zip()函数的使用示例
Sep 23 Python
详解Python调用系统命令的六种方法
Jan 28 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
星际原理概述
2020/03/04 星际争霸
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
Python下使用Psyco模块优化运行速度
2015/04/05 Python
常见python正则用法的简单实例
2016/06/21 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
详解python读取image
2019/04/03 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
法学研究生自我鉴定范文
2013/12/04 职场文书
初二生物教学反思
2014/02/03 职场文书
教师个人剖析材料
2014/02/05 职场文书
企业宣传工作方案
2014/06/02 职场文书
煤矿安全生产标语
2014/06/06 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书