Джанго: Как я могу локализовать свои URL? - PullRequest
1 голос
/ 28 апреля 2011

Как я могу локализовать свои URL-адреса в Django?

url(u'^{0}/$'.format(_('register')), RegisterView.as_view(), name='register'),

Я попробовал описанное выше, но, похоже, он работает только при остановке и запуске сервера.Я думаю, что URL-адреса переводятся при запуске приложения.

Так есть ли способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Это немного сложнее, чем просто бросить _() в urls.py. Вы сами определили причину: URL-адреса оцениваются один раз, когда запускается Django, и не для каждого запроса. Поэтому вам придется

а) поместите все возможные переводы в urls.py или

б) реализовать маршрутизацию самостоятельно

A. Все в urls.py

url('hello', hello, name="hello_en"),
url('hallo', hello, name="hello_de"),
url('buenos_dias', hello, name="hello_es"),

Очевидно, что это не очень хорошее решение, но оно работает для небольших проектов.

B. Реализация маршрутизации

У этого есть свой собственный недостаток, особенно когда дело доходит до reverse(). Тем не менее, это работает в принципе:

urls.py:

#...
url('(?<path>.+)', dispatcher),
#...

views.py:

def dispatcher(request, path):
    if path == "hallo":
        lang = "de"
    elif path == "buenos_dias":
        lang = "de"
    else:
        lang = "en"

Конечно, вы можете сделать поиск более интеллектуальным, но тогда вы должны сделать предположение:

# if request.session['language'] can be trusted:
def dispatcher(request, path):
    list_of_views = ['contact', 'about', 'foo']
    v = None
    for view in list_of_views:
        if _(view) == path:
            v = view
            break
    if v is None:
        # return 404 or the home page
0 голосов
/ 09 мая 2012

Интернационализация URL была введена в django 1.4

см. https://docs.djangoproject.com/en/dev/topics/i18n/translation/#url-internationalization

это именно то, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...