使用{%trans%}块进行国际化

时间:2012-04-23 13:33:46

标签: python django internationalization web

我想尝试一个简单的例子来理解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))

3 个答案:

答案 0 :(得分:5)

国际化和本地化是复杂的,reading the documentation无可替代。但这里是必要步骤的粗略概述:

  1. 您需要标记所有需要翻译的字符串。在模板中,您可以针对简单案例使用{% trans "text" %},针对复杂案例使用{% blocktrans %} text {% endblocktrans %}。在源代码中,您使用the ugettext function(或其中一个变体)包装字符串。在Django 1.4中,您还可以localize URL patterns

  2. 运行the makemessages administration command为您要翻译的每种语言创建一个消息文件。

  3. 将邮件翻译成目标语言。您可以在文本编辑器中执行此操作,但是您可能希望使用计算机辅助翻译工具来帮助完成此步骤:see Wikipedia以获取使用GNU消息文件的部分工具列表(.po延期)。如果您有翻译人员,请与他们交谈并找出他们喜欢使用的软件。

  4. 运行the compilemessages administration command以编译邮件文件。

  5. 打开Django的language preference detection middleware。如果您的网站已注册用户,请为其提供语言首选项设置。对于未登录的用户,请提供一种切换语言的方法(通过URL或语言首选项cookie。)

  6. 哦,阅读文档。

答案 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包源代码中的错误格式化字符串。

干杯!