在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 19 Python
python实现排序算法解析
Sep 08 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
Python发展简史 Python来历
May 14 Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
通过Python实现一个简单的html页面
May 16 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
python定义类的简单用法
Jul 24 Python
聊聊python中的异常嵌套
Sep 01 Python
python脚本定时发送邮件
Dec 22 Python
python和anaconda的区别
May 06 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实现小型站点广告管理(修正版)
2006/10/09 PHP
mayfish 数据入库验证代码
2010/04/30 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
python3.7 的新特性详解
2019/07/25 Python
python自动下载图片的方法示例
2020/03/25 Python
python字典与json转换的方法总结
2020/12/28 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
《黄山奇石》教学反思
2014/04/19 职场文书
婚前保证书
2014/04/29 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
消防安全培训工作总结
2015/10/23 职场文书
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers