我的路线是这样的:
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/
- >页面未找到我做错了什么?
答案 0 :(得分:0)
使用.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/"
答案 1 :(得分:-1)
尝试以这种方式思考:
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")
)
)