我试图做一个简单的例子,以了解Django国际化。
从我在djangoproject文档中阅读的内容来看,最简单的方法是使用{% trans %}
块包装要从模板转换的对象。
根据我的理解和期望,在我的情况下,将针对字符串自动执行翻译:
{% for x in found_bills %}
<tr>
<td>{% trans x.name %}
</td>
</tr>
{% endfor %}
并翻译x.name中的字符串(这是一天的名称,英文,即“ sunday”),并返回到以翻译后的形式分发的模板。
我是否误解了它的工作方式?
更新:
错误:在_argparse.py上运行xgettext时发生错误
./build/ipython/IPython/external/argparse/_argparse.py:1113:警告:带有未命名参数的'msgid'格式字符串无法正确定位:
翻译器无法重新排列参数。
请考虑使用带有命名参数的格式字符串,
以及参数的映射而不是元组。
第二次更新:
模板中的HTML代码是上面的代码,而视图中的代码是以下代码。
bills.py:
def bills(request):
bills = ps_bill.objects.all()
return render_to_response('bills.html',"bills":bills,},context_instance=RequestContext(request))
最佳答案
国际化和本地化是复杂的,并且不能替代reading the documentation。但这是必要步骤的粗略概述:
您需要标记所有需要翻译的字符串。在模板中,对于简单情况,请使用{% trans "text" %}
;对于复杂情况,请使用{% blocktrans %} text {% endblocktrans %}
。在源代码中,您用the ugettext
function(或其变体之一)包装字符串。在Django 1.4中,您也可以localize URL patterns。
运行the makemessages
administration command为要翻译成的每种语言创建一个消息文件。
将消息翻译成目标语言。您可以在文本编辑器中执行此操作,但是在此步骤中,您可能需要使用计算机辅助翻译工具来提供帮助:see Wikipedia列出了与GNU消息文件一起使用的工具的部分列表(扩展名.po
)。如果您有翻译人员,请与他们交谈,以了解他们更喜欢使用哪种软件。
运行the compilemessages
administration command来编译消息文件。
打开Django的language preference detection middleware。如果您的站点已注册用户,请为他们提供语言首选项设置。对于未登录的用户,提供一种切换语言的方式(通过URL或通过语言首选项cookie。)
哦,请阅读文档。