Многоязычные URL в Django - PullRequest
       18

Многоязычные URL в Django

1 голос
/ 22 июля 2010

Каков наилучший способ поддержки мультиязычных URL в Django? Как:

http://myenglishwebsite.com/user/foo
http://mygermanwebsite.com/benutzer/foo

Должен ли я использовать multilang в urls.py как:

(r'^%s/(?P<slug>[-w]+)/$' % _('user'), 'myapp.view.relatedaction')

Это не похоже на хорошее решение, и я не смог заставить его работать:))

Ответы [ 3 ]

1 голос
/ 22 июля 2010

Это решение не работает, потому что файл urls.py загружается на сервер Django один раз, прежде чем первый пользователь сможет сделать какой-либо запрос, поэтому он должен быть независимым от пользователя файлом (любой код уровня модуля должен быть независимым от пользователя, потому что он загружается только один раз).

Я предполагаю, что Django url resolver делает приведение str () где-то в середине запроса, поэтому вы можете использовать некоторый класс декоратора:

(URLLangDecorator(r'^%s/(?P<slug>[-w]+)/$', ['user']), 'myapp.view.relatedaction')
class URLLangDecorator:
    def __init__(self, url, params):
        self.url, self.params = url, params

    def __str__(self):
        return self.url % map(_, self.params)
    # Django can also preform "%" operation, so to be safe:
    def __mod__(self, arg):
        return str(self) % arg

Это предположение, поэтому я не уверен, сработает ли это.

0 голосов
/ 26 марта 2013

Я знаю, что это старый вопрос, но я искал что-то подобное и нашел проект transurlvania .Надеюсь, это поможет.

0 голосов
/ 22 июля 2010

Лучший способ - просто использовать одинаковые URL для каждого языка. Они не предназначены для чтения конечным пользователем.

Задумывались ли вы о том, что произойдет, если ваш URL не может быть представлен ASCII?

...