python - i18n and l10n in Django with different views -
i'm trying localize application internationalization purposes, i'm having problem developing url views once language chosen.
i have these relevant entries in settings.py
... use_i18n = true use_l10n = true locale_paths = ( os.path.join(base_dir, 'locale'), ) django.utils.translation import ugettext_lazy _ languages = ( ('en', _('english')), ('es', _('spanish')), ('zh', _('chinese')), ) ...
and urls.py
looks this...
# -*- coding: utf-8 -*- django.conf.urls import include, url, patterns django.contrib import admin django.conf import settings 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. )
so "works" locally. go localhost:8080/es/
, see spanish page. however, when click on application's button navigate downloads
page, go localhost:8080/downloads
in english. if type localhost:8080/es/downloads
, unfound url error.
how can make more naturally localized , internationalized? if there's information missing, please let me know. i'll add it.
i'm using django 1.7.4.
thanks, erip
edit
from home downloads, have html looks this...
<a class="navbar-brand" href="/"> {% trans "home"%}</a> <a class="navbar-brand" href="/downloads/"> {% trans "downloads"%}</a>
have added django.middleware.locale.localemiddleware
middleware_classes
(docs)?
middleware_classes = ( 'django.contrib.sessions.middleware.sessionmiddleware', 'django.middleware.locale.localemiddleware', 'django.middleware.common.commonmiddleware', )
also, shouldn't define patterns twice. patterns wish handled i18n should defined in i18n_patterns(...)
. if identical, block enough:
# -*- coding: utf-8 -*- django.conf.urls import include, url, patterns django.contrib import admin django.conf import settings 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. )
update: building url in template
in url pattern add name
attribute downloads
pattern:
urlpatterns = i18n_patterns('', # ... url(r'^downloads/$', 'myapp.views.downloads', name='downloads'), # ... )
in template, resolve link url
tag:
<a class="navbar-brand" href="{% url 'home' %}">{% trans "home"%}</a> <a class="navbar-brand" href="{% url 'downloads' %}">{% trans "downloads"%}</a>
this way django builds url respecting current language.
how debug if resolving works correctly
for debugging django resolves url to, try following in shell.
$ ./manage.py shell >>> django.core.urlresolvers import reverse >>> django.utils.translation import activate >>> activate('en') >>> reverse('downloads') '/en/downloads' >>> activate('es') >>> reverse('downloads') '/es/downloads/'