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/'