Найти - Пользователи
Полная версия: Интернационализация - не работает переключение языка
Начало » Django » Интернационализация - не работает переключение языка
1
lyapun
Здраствуйте!
Делаю возможность на сайте переключаться между русской и украинской версией. Накатил 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',
)
lyapun
Чтобы языки переключались надо было добавить в views:
from django.utils import translation
Теперь языки переключается, но не меняется url, т.е. locale_url не работает. В чем может быть дело?
Chrizt
если разобрались - постаните, плиз, решение.
lyapun
ne razobralsya =(
Berg
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’, а не совместно.


prikozhd
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 уже будет текст на украинском или на русском
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB