我想尝试一个简单的例子来理解Django国际化。
从我在djangoproject文档中阅读的内容来看,最简单的方法是使用{% trans %}
块来包装您想要从模板中翻译的内容。
根据我的理解和预期,在我的情况下,字符串会自动执行翻译:
{% for x in found_bills %}
<tr>
<td>{% trans x.name %}
</td>
</tr>
{% endfor %}
和x.name中的字符串(它是一天的英文名称,即&#34;星期日&#34;)将被翻译并返回到显示在其中的模板它的翻译形式。
我误解了它的运作方式吗?
更新:
错误:在_argparse.py上运行xgettext时发生错误 ./build/ipython/IPython/external/argparse/_argparse.py:1113:警告:&#39; msgid&#39;带有未命名参数的格式字符串无法正确本地化: 翻译者无法重新排序参数。 请考虑使用带有命名参数的格式字符串, 和参数的映射而不是元组。
第二次更新:
模板中的HTML代码如上所示,以下代码是视图中的代码。
bills.py: 的
def bills(request):
bills = ps_bill.objects.all()
return render_to_response('bills.html',"bills":bills,},context_instance=RequestContext(request))
答案 0 :(得分:5)
国际化和本地化是复杂的,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
延期)。如果您有翻译人员,请与他们交谈并找出他们喜欢使用的软件。
打开Django的language preference detection middleware。如果您的网站已注册用户,请为其提供语言首选项设置。对于未登录的用户,请提供一种切换语言的方法(通过URL或语言首选项cookie。)
哦,阅读文档。
答案 1 :(得分:1)
请阅读the doc至。 trans
标记只标记要翻译的字符串,正如文档所说:
一旦应用程序的字符串文字被标记为以后 翻译,翻译本身需要写(或 获得)....第一步是创建一个消息po。提交新文件 语言...然后你有责任改变po文件(通过在其中添加特定于语言的翻译)...最后你需要使用工具来运行所有可用的.po文件和 创建.mo文件......(之后)您的翻译可以使用。
答案 2 :(得分:1)
有点晚了,但总比没有好。我遇到了同样的错误,实际上我在我的virtualenv中安装了名为env /的Ipython。因为我想翻译我的项目,而不是env / my解决方案下的软件包是执行以下操作:
django-admin.py makemessages -l LL --ignore=env/* (EDITED)
其中LL是您为翻译提供的名称。
希望有人发现它有用,因为这个错误可能令人沮丧,它是IPython包源代码中的错误格式化字符串。
干杯!