2011-04-28 7 views
7

У меня есть сайт, который написан на голландском языке. Теперь я должен предоставить второй язык для этого веб-сайта, который является французским.Django: язык по умолчанию i18n

Итак, я окружил весь текст, который нужно перевести с помощью функции gettext, создал po-файлы и скомпилировал их для mo-файлов. Я также создал представление, которое устанавливает сеанс django_language на соответствующий код языка. Итак, теперь французская версия работает, но я не могу вернуться к голландской версии.

Так что мне было интересно, нужно ли мне создать файл po/mo для голландской версии? Текст, который проходит в gettext, уже находится на голландском языке. Можно ли использовать «текст по умолчанию»?

Это мнение я использую, чтобы добавить код языка к моей сессии:

class LanguagePickerView(RedirectView): 
    url = '/' 

    def get(self,request,*args, **kwargs): 
     request.session['django_language'] = self.kwargs.get('language') 
     return super(LanguagePickerView, self).get(request, args, kwargs) 

В моих шаблонах я использую следующие ссылки: строки языка

<a href='{% url web-language 'nl-nl' %}'>NL</a> 
<a href='{% url web-language 'fr' %}'>fr</a> 
+0

Я думаю, что вы не можете переключиться на голландскую спину, не имеет ничего общего с вашими языковыми файлами, но с тем, как вы меняете язык (просмотр, промежуточное ПО)? Можете ли вы дать более подробную информацию об этом? И о вашем вопросе: нет, вам не нужно предоставлять языковые файлы для языка, на который вы ввели переводимые строки. –

+0

Я использую django.middleware.locale.LocaleMiddleware. Я добавлю представление, которое меняет сеанс на мой вопрос. – Pickels

ответ

13

по умолчанию не сохраняются в ро/mo файлы, они идут непосредственно в коде и шаблонах - кажется, что у вас есть это право.

Вы можете вернуться к нему, установив переменную сеанса django_language обратно на голландский.

Убедитесь, что у вас есть ваши настройки установить правильный путь:

LANGUAGE_CODE = 'nl' #default language 

LANGUAGES = (
    ('nl', _('Dutch')), 
    ('fr', _('French')), 
) 

Не забывайте, что вам не придется писать код для переключения между языками на себя. Лучше использовать специальный вид django (цитата из django book):

Для удобства Django имеет вид django.views.i18n.set_language, который задает предпочтение пользователя и перенаправляет его обратно на предыдущую страницу.

Активировать эту точку зрения, добавив следующую строку в файл привязок:

(r'^i18n/', include('django.conf.urls.i18n')), 
+0

Это заставило его работать на меня, спасибо большое. Мне не хватает части URLconf. – DrKaoliN

2

этот вопрос может быть полезным - set language within a django view

Не забудьте использовать translation.activate(lang_code), это очень важно.

Вы можете использовать стандартный способ изменения языков с помощью метода post или написать собственное промежуточное программное обеспечение и изменить его, например, в URL-адресе.

Cheers, Игнас

1

Если вы используете {% url web-language 'nl-nl' %} как этот 'nl-nl' в вашем args (args[0]), а не в kwargs. Для файла kwargs вы должны использовать синтаксис как {% url web-language language='nl-nl' %}. Тогда ваше мнение должно работать. Надеюсь, ваш urlconf будет соответствовать тому, как вид имеет дело с ним.

+0

Спасибо, что поймал эту ошибку. – Pickels

Смежные вопросы