Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Интернационализация - не работает переключение языка [RSS Feed]

#1 Март 30, 2011 19:14:45

lyapun
От:
Зарегистрирован: 2011-01-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация - не работает переключение языка

Здраствуйте!
Делаю возможность на сайте переключаться между русской и украинской версией. Накатил model_translation, обернул строки в шаблонах которые надо перевести в тег {% trans %}, попереводил все с помощью rosetta. Также установил locale_url.

В settings.py прописал:

LANGUAGE_CODE = 'ru'
MODELTRANSLATION_TRANSLATION_REGISTRY = "project.translation"
TRANSLATION_REGISTRY = "project.translation"
ugettext = lambda s: s
LANGUAGES = (
('ru', ugettext(u'Russian')),
('uk', ugettext(u'Ukrainian')),
)
Переключать язык через POST, так как это делается в django.conf.urls.i18n мне не захотелось, поэтому создал такое представление:
def set_language(request):
next = request.REQUEST.get('next', None)
if not next:
next = request.META.get('HTTP_REFERER', None)
if not next:
next = '/'
response = http.HttpResponseRedirect(next)
if request.method == 'GET':
lang_code = request.GET.get('language', None)
if lang_code and check_for_language(lang_code):
if hasattr(request, 'session'):
request.session['django_language'] = lang_code
else:
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
return response
Делаю ссылку типа:
<a href="{% url set_lang %}?lang=uk&next={{request.path}}">Українською мовою</a>
Но переключение языка не происходит. При этом если вручную прописать ссылку http://localhost/uk/ то все работает, и шаблоны переведены, и записи из БД, однако переход по любой ссылке сбрасывает обратно на русский язык.

В чем проблема, подскажите пожалуйста!

Вот мои middleware, может в них дело:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'localeurl.middleware.LocaleURLMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)



Офлайн

#2 Март 31, 2011 14:34:33

lyapun
От:
Зарегистрирован: 2011-01-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация - не работает переключение языка

Чтобы языки переключались надо было добавить в views:

from django.utils import translation
Теперь языки переключается, но не меняется url, т.е. locale_url не работает. В чем может быть дело?



Офлайн

#3 Апрель 6, 2011 11:13:57

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация - не работает переключение языка

если разобрались - постаните, плиз, решение.



Офлайн

#4 Апрель 10, 2011 09:33:10

lyapun
От:
Зарегистрирован: 2011-01-25
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация - не работает переключение языка

ne razobralsya =(



Офлайн

#5 Май 15, 2013 10:30:17

Berg
От: Украина
Зарегистрирован: 2010-03-10
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация - не работает переключение языка

Add ‘localeurl.middleware.LocaleURLMiddleware’ to settings.MIDDLEWARE_CLASSES. It must come before ‘django.middleware.common.CommonMiddleware’ or settings.APPEND_SLASH will not work. Make sure Django’s built-in LocaleMiddleware is not in your MIDDLEWARE_CLASSES setting; LocaleURLMiddleware replaces it and the two will not work together.


‘localeurl.middleware.LocaleURLMiddleware’, должен быть вместо этого ‘django.middleware.locale.LocaleMiddleware’, а не совместно.




Офлайн

#6 Май 29, 2013 21:35:43

prikozhd
Зарегистрирован: 2013-05-29
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Интернационализация - не работает переключение языка

from django.utils.translation import activate
К примеру у нас такая модель

class News(models.Model):
    title = models.CharField(max_length=100)
    text = models.TextField()


когда зарегаєшь эту модель в translator.py

у тебя будут поля title, title_en, title_ua и тд

дальше вьюха

например ок клацнул по ссылке типа - <a href=“{% url set_lang %}?lang=uk&next{{request.path}}”>Українською мовою</a>

чтобы все это заработало надо

def simple(request):
    if request.method == 'GET':
        user_lang = if request.GET.get('lang', 'ru')
        activate(user_lang)
        return HttpResponseRedirect('/index/')



теперь переключит и прошу обратить внимание что в поле title уже будет текст на украинском или на русском

Отредактировано prikozhd (Май 29, 2013 21:39:36)

Офлайн

  • Начало
  • » Django
  • » Интернационализация - не работает переключение языка[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version