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

Rad*_*hiu 1 python django internationalization web

我想尝试一个简单的例子来理解Django的国际化.

从我在djangoproject文档中读到的内容来看,最简单的方法是使用块来包装要从模板中翻译的内容{% trans %}.

根据我的理解和预期,在我的情况下,字符串会自动执行翻译:

{% for x in found_bills %}
    <tr>
        <td>{% trans x.name %}
    </td>
    </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

并且对于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))
Run Code Online (Sandbox Code Playgroud)

Gar*_*ees 5

国际化和本地化是复杂的,阅读文档是无可替代.但这里是必要步骤的粗略概述:

  1. 您需要标记所有需要翻译的字符串.在模板中,您可以{% trans "text" %}用于简单案例和{% blocktrans %} text {% endblocktrans %}复杂案例.在源代码中你包用绳子ugettext函数(或它的变体之一).在Django 1.4中,您还可以本地化URL模式.

  2. 运行makemessages管理命令来创建要翻译成各种语言的消息文件.

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

  4. 运行compilemessages管理命令编译消息文件.

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

哦,阅读文档.