Skip to main content
 首页 » 编程设计

python之带有 {% trans %} block 的国际化

2025年05月04日14pengyingh

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

根据我在 djangoproject 文档中阅读的内容,最简单的方法是用 {% trans %} block 包装您要从模板翻译的内容。

根据我的理解和预期,在我的例子中是为字符串自动执行翻译:

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

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

我是不是误解了它的工作方式?

更新:

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

第二次更新:

模板中的HTML代码是上面的代码,下面是 View 中的代码。

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 无可替代.但这里有一个非常粗略的必要步骤概述:

  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。)

哦,还有阅读文档。