1

我试图做一个简单的例子来理解 Django 国际化。

从我在 djangoproject 文档中阅读的内容来看,最简单的方法是用一个{% trans %}块包装你想要从模板翻译的内容。

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

{% for x in found_bills %}
    <tr>
        <td>{% trans x.name %}
    </td>
    </tr>
{% endfor %}

并且对于 x.name 中的字符串(它是一天的名称,英文,即“星期日”)被翻译并返回到以翻译形式显示的模板。

我误解了它的工作方式吗?

更新:

错误:在 _argparse.py ./build/ipython/IPython/external/argparse/_argparse.py:1113 上运行 xgettext 时发生错误:警告:带有未命名参数的“msgid”格式字符串无法正确本地化:翻译器无法重新排序参数. 请考虑使用带有命名参数的格式字符串,以及参数的映射而不是元组。

第二次更新:

来自模板的 HTML 代码是上面的代码,下面的代码是视图中的代码。

票据.py:

def bills(request):
    bills = ps_bill.objects.all()
    return render_to_response('bills.html',"bills":bills,},context_instance=RequestContext(request))
4

3 回答 3

5

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

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

  2. 运行管理命令makemessages您要翻译的每种语言创建一个消息文件。

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

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

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

哦,阅读文档。

于 2012-04-23T14:13:14.183 回答
1

请通读文档transtag 只是标记要翻译的字符串,正如文档所说:

一旦应用程序的字符串文字被标记以供以后翻译,翻译本身就需要编写(或获取)......第一步是创建一个消息po。新语言的文件...然后您有责任更改 po 文件(通过将特定语言的翻译放入其中)...最后您需要使用工具来运行所有可用的 .po 文件并创建 .mo 文件...(之后)您的翻译就可以使用了。

于 2012-04-23T14:02:29.070 回答
1

A little bit late, but better than never. I came across the same error, actually I had Ipython installed in me virtualenv named env/. As I wanted to translate my project, not the packages under env/ my solution was to do the following:

django-admin.py makemessages -l LL --ignore=env/* (EDITED)

where LL is the name you are giving to your translation.

Hope someone finds it useful since this error can be frustrating, it's a bad formatted string in the source of IPython package.

Cheers !

于 2012-10-09T21:50:28.363 回答