gpt4 book ai didi

python - Django 中的 i18n 和 l10n 具有不同的 View

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:50 25 4
gpt4 key购买 nike

我正在尝试本地化我的应用程序以实现国际化目的,但在选择语言后为 View 开发 URL 时遇到问题。

我的 settings.py 中有这些相关条目

...

USE_I18N = True

USE_L10N = True

LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)

from django.utils.translation import ugettext_lazy as _

LANGUAGES = (
('en', _('English')),
('es', _('Spanish')),
('zh', _('Chinese')),
)

...

我的 urls.py 看起来像这样......

# -*- coding: utf-8 -*-

from django.conf.urls import include, url, patterns
from django.contrib import admin
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns


urlpatterns = patterns('',
url(r'^$', 'myApp.views.home', name='home'),
url(r'^admin/', include(admin.site.urls)),
url(r'^downloads/$', 'myApp.views.downloads'),
# etc. etc.
)

urlpatterns += i18n_patterns('',
url(r'^$', 'myApp.views.home', name='home'),
url(r'^admin/', include(admin.site.urls)),
url(r'^downloads/$', 'myApp.views.downloads'),
# etc. etc.
)

所以这在本地“有效”。我转到 localhost:8080/es/ 并查看我的西类牙语页面。但是,当我单击应用程序的按钮导航到“下载”页面时,我会转到英文的“localhost:8080/downloads”。如果我输入 localhost:8080/es/downloads,我会收到未找到 URL 错误。

如何才能使其更加自然地本地化和国际化?如果缺少任何信息,请告诉我。我会添加它。

我使用的是 Django 1.7.4。

谢谢,埃里普

编辑

从主页到下载,我有一些看起来像这样的 HTML...

  <a class="navbar-brand" href="/"> {% trans "Home"%}</a>
<a class="navbar-brand" href="/downloads/"> {% trans "Downloads"%}</a>

最佳答案

您是否已将 django.middleware.locale.LocaleMiddleware 添加到您的 MIDDLEWARE_CLASSES (docs)?

MIDDLEWARE_CLASSES = (       
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
)

此外,您不应该两次定义模式。您希望由 I18N 处理的所有模式只能在 i18n_patterns(...) 中定义。因此,如果它们相同,这个 block 就足够了:

# -*- coding: utf-8 -*-

from django.conf.urls import include, url, patterns
from django.contrib import admin
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns('',
url(r'^$', 'myApp.views.home', name='home'),
url(r'^admin/', include(admin.site.urls)),
url(r'^downloads/$', 'myApp.views.downloads'),
# etc. etc.
)
<小时/>

更新:在模板中构建 URL

在 url 模式中,将 name 属性添加到 downloads 模式:

urlpatterns = i18n_patterns('',
# ...
url(r'^downloads/$', 'myApp.views.downloads', name='downloads'),
# ...
)

在模板中,使用 url 标记解析链接:

<a class="navbar-brand" href="{% url 'home' %}">{% trans "Home"%}</a>
<a class="navbar-brand" href="{% url 'downloads' %}">{% trans "Downloads"%}</a>

这样 Django 就会构建尊重当前语言的 url。

<小时/>

如何调试解析是否正确

要调试 Django 当前将 URL 解析为什么,您可以在 shell 中尝试以下操作。

$ ./manage.py shell

>>> from django.core.urlresolvers import reverse
>>> from django.utils.translation import activate
>>> activate('en')
>>> reverse('downloads')
'/en/downloads'
>>> activate('es')
>>> reverse('downloads')
'/es/downloads/'

关于python - Django 中的 i18n 和 l10n 具有不同的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com