我试图做一个简单的例子,以了解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。)


哦,请阅读文档。

09-25 17:24
查看更多