2

我正在使用 Django 1.6 和 Python 3.4。我想在参数中翻译 url。例如:
/en/temperature/London/
到:
/fr/température/Londres/
但它不起作用。相反,我获得 /fr/temperature/London/ 。在 urls.py 中,“温度”是硬编码的,“伦敦”是参数的值citytreshold是可选的。这个不带参数的 url 被正确翻译:/en/terms/ 到 /fr/mentions-légales/在 django.po 中的
每次更改后,我运行 compilemessage 命令,我手动重新启动开发服务器并刷新浏览器缓存。怎么了?

urls.py:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _

urlpatterns += i18n_patterns('foo.views',
    url(_(r'^terms/$'), 'terms', name="terms"),
    url(_(r'^temperature/%(city)s(?:/(%(treshold)s))?/$') %{'city': city, 'treshold': treshold}, 'temperature', name="temperature"),
) 

django.po
#: /urls.py:X
#, python-format
msgid "^temperature/%(city)s(?:/(%(treshold)s))?/$"
msgstr "^température/%(city)s(?:/(%(treshold)s))?/$"

msgid "London"
msgstr "Londres"

msgid "^terms/$"
msgstr "^mentions-légales/$"

{% load i18n %}
<a href="{% url 'temperature' city="London" %}">Link name</a>
4

1 回答 1

0

在您的 urls.py 中,您应该有以下行:

url(_(r'^temperature/%(city)s(?:/(%(treshold)s))?/$') %{'city': city, 'treshold': treshold}, 'temperature', name="temperature"),

因为这是您在 django.po 中引用的行。在那里您搜索温度并将其替换为温度然后

另外你应该使用:

{% load i18n %}
<a href="{% url 'temperature' city=_("London") %}">Link name</a>

这将告诉 Django 也翻译伦敦。

您还可以使用 2 个网址:

url(_(r'^temperature/%(city)s(?:/(%(treshold)s))?/$') %{'temperature': temperature, 'treshold': treshold}, 'temperature', name="temperature"),
url(_(r'^témperature/%(city)s(?:/(%(treshold)s))?/$') %{'temperature': temperature, 'treshold': treshold}, 'temperature', name="témperature"),

在您的 html 中,您可以使用:

<a href="{% url _('temperature') city=_("London") %}">Link name</a>
于 2014-07-09T12:24:38.243 回答