localization - django translated urls and accept-language header -


i've setup translated urls languages. default language django has been set en-us.

if request page /registration/ nl-nl accept-language header, 404. wasn't expecting such behaviour. rather hoping redirected /registratie/ ,the tranlated url corresponds accept-language header. ofcourse /registratie/ nl-nl accept-language header, works fine , gives me expected 200.

i'm guessing normal can ?

isn't there chance user might link website , link build english language, user in question has different supported language setting, accept-language header ? in such case presented 404. should presented or english (default) content or or redirected correct url language if supported.

also happens if user has not supported language setting ? django default language_code used, en-us in case ?

is there way work around or handle in different better way ?

an extract urls.py file, shows how i've setup translated urls:

url(_(r'^step1/$'), accounttypeselectionview.as_view(), name="registration_step1"), 

i'm making wild assumption _ ugettext_lazy.

also happens if user has not supported language setting ? django default language_code used, en-us in case ?

yes, ugettext use default value if no specific value set. can see behaviour in do_translate in django.utils.translation.trans_real.

what happens ugettext_lazy prior url being looked up, translated user's language , part of url checked against these. (django uses per-thread language setting changed reflect user's choices.)

isn't there chance user might link website , link build english language, user in question has different supported language setting, accept-language header ? in such case presented 404. should presented or english (default) content or or redirected correct url language if supported.

well, yes believe should supported feature quick @ source made appear url resolving have changed bit accomodate this.

what can do, use custom 404 page (as briefly mentioned here under customizing error views):

in urls.py:

handler404 = 'mysite.views.i18n_retry' 

and in view

from django.utils.translation import override django.core.urlresolvers import resolve def i18n_retry(request):     language in settings.languages:         override(language, deactivate=true):            try:               result = resolve(request.path)               #here know language url in               #if supported format               #and can smart            except http404:               #http404 thrown whenever resolving fails               pass      #here should return real 404 

i've used override context manager django 1.4. there longer way of doing same without.


Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c++ - Using OpenSSL in a multi-threaded application -

All overlapping substrings matching a java regex -