Django:国际路线
Django: international routes
我的路线是这样的:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
urlpatterns += i18n_patterns(
url(r'^{0}/'.format(_('produits')),
include('produits.urls', namespace="produits")
),
)
我认为 format(_('produits'))
会自动适应,所以我制作了两个 .po
文件:
makemessages -l en
makemessages -l fr
在英文 .po
文件中,我已经更改了:
#: .\pyweb\urls.py:31
msgid "produits"
msgstr "products"
然后我重新启动了网络服务器,我仍然有:
http://localhost:8000/en/produits/
-> 好
http://localhost:8000/en/products/
-> 找不到页面
我做错了什么?
试着这样想:
from django.conf import settings
from django.utils import translation
...
for lng in settings.LANGUAGES:
lng_code = lng[0]
with translation.override(lng_code):
urlpatterns += i18n_patterns(
url(r'^{0}/'.format(_('produits')),
include('produits.urls', namespace="produits")
)
)
当您使用 .format()
时,延迟翻译的字符串会在导入时立即计算。您想要一个带有延迟翻译字符串的单一模式作为正则表达式。这意味着您必须翻译整个正则表达式。
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
urlpatterns += i18n_patterns(
url(_(r'^produits/'),
include('produits.urls', namespace="produits")
),
)
这样,正则表达式模式将根据请求的当前语言而改变,因为惰性翻译仅在您使用 resolve()
或 reverse()
.
时评估
您必须将完整的正则表达式添加到您的 .po
文件中:
#: .\pyweb\urls.py:31
msgid "^produits/"
msgstr "^products/"
我的路线是这样的:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
urlpatterns += i18n_patterns(
url(r'^{0}/'.format(_('produits')),
include('produits.urls', namespace="produits")
),
)
我认为 format(_('produits'))
会自动适应,所以我制作了两个 .po
文件:
makemessages -l en
makemessages -l fr
在英文 .po
文件中,我已经更改了:
#: .\pyweb\urls.py:31
msgid "produits"
msgstr "products"
然后我重新启动了网络服务器,我仍然有:
http://localhost:8000/en/produits/
-> 好http://localhost:8000/en/products/
-> 找不到页面
我做错了什么?
试着这样想:
from django.conf import settings
from django.utils import translation
...
for lng in settings.LANGUAGES:
lng_code = lng[0]
with translation.override(lng_code):
urlpatterns += i18n_patterns(
url(r'^{0}/'.format(_('produits')),
include('produits.urls', namespace="produits")
)
)
当您使用 .format()
时,延迟翻译的字符串会在导入时立即计算。您想要一个带有延迟翻译字符串的单一模式作为正则表达式。这意味着您必须翻译整个正则表达式。
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
urlpatterns += i18n_patterns(
url(_(r'^produits/'),
include('produits.urls', namespace="produits")
),
)
这样,正则表达式模式将根据请求的当前语言而改变,因为惰性翻译仅在您使用 resolve()
或 reverse()
.
您必须将完整的正则表达式添加到您的 .po
文件中:
#: .\pyweb\urls.py:31
msgid "^produits/"
msgstr "^products/"