Найти - Пользователи
Полная версия: Двуязычный сайт
Начало » Django » Двуязычный сайт
1 2 3
dnstuff
Здравствуйте!
Подскажите, пожалуйста, оптимальную методику создания двуязычного сайта. Никакой автоматики не надо. Пользователь переключает языки сам (стандартные флажки rus/eng). Перевод подготовлен заранее.
Спасибо!
newca9h
Здравствуйте! Не знаю на счет оптимальности, но использовал в одном проекте стандартную джанговскую. То есть, создал файл перевода и в нем прописал те слова, которые нужно переводить. Затем написал простую модельку, в которой сделал возможность добавлять информацию в двух языках. И последнее, в views просто добавил импорт from django.utils import translation и в функции строчку вида translation.activate(current_lang). Где current_lang - это тот lang, на который мне нужно перевести сайт. Вроде бы работает и неплохо, но может есть решение более красивое и быстрое.
dnstuff
newca9h
Здравствуйте! Не знаю на счет оптимальности, но использовал в одном проекте стандартную джанговскую. То есть, создал файл перевода и в нем прописал те слова, которые нужно переводить. Затем написал простую модельку, в которой сделал возможность добавлять информацию в двух языках. И последнее, в views просто добавил импорт from django.utils import translation и в функции строчку вида translation.activate(current_lang). Где current_lang - это тот lang, на который мне нужно перевести сайт. Вроде бы работает и неплохо, но может есть решение более красивое и быстрое.
Спасибо. Я никак не могу понять общий план действий. В моем случае требуется, чтобы при нажатии на нужный флажок контент на русском заменялся на контент на английском. Тоже и с пунктами меню. Тексты статей хранятся в базе данных, а не забиты в шаблон. Плюс еще в раздел новости можно добавлять статьи через админку.
newca9h
Можете использовать GET запрос вида lang=en. Или же прописать в урлах его. Текст и не должен быть зашит в шаблон. Как я написал. При добавлении информации в моем случае есть выбор языка.

Чтобы подхватить информацию для шаблонов(по типу тех, которые незачем хранить в базе) я сделал так, создал файл, в котором прописал всю необходимую для перевода информацию. Она такая же, как и в любом файле locale. А во views просто пишите, translation.activate с параметром из GET запроса или из урла, здесь как вам удобнее. Это мой подход. Пункты меню у меня строились из той же модельки. Translation вообще довольно глобально переводит весь сайт. Поэтому, в моем случае даже админка автоматически переводилась)) Было забавно увидеть все по арабски в первый раз)

Забыл добавить. У меня был класс(назовем его Article). Который использовался в отношениях ForeignKey для, скажем класса TextForAtricle. Затем в admin.py сделаем inline, а количество inline равно количеству языков(в вашем случае их два). Затем, при добавлении статьи, выбираем язык, пишем статью на русском, затем на английском. Во views берем тот язык, который выбран сейчас. По умолчанию это тот, который в settings.py прописан. Ну а далее вы сами разберетесь. Возможно написал запутанно, задавайте вопросы. Я бы привел кусок кода, но у меня проект довольно специфичный.
dnstuff
А если у меня уже есть готовый перевод (или вообще другой текст)? Т.е. фактически мне надо что-то такое:
Есть кнопка переключения языков. В зависимости от её положения из БД подгружаются те или иные данные. Строго говоря, язык тут вообще не причем. Зря я наверное заострил внимание на этом.

Т.е. вопрос у меня теперь такой:
Как в Django реализуется такой вот переключатель-флажок, чтобы в шаблоне можно было ставить по нему условие if else?
И как ему присвоить значение по умолчанию?
Спасибо!
buddha
В django для этого есть стандартное приложение со своим механизмом, которое опирается на утилиту gettext в операционной системе. https://docs.djangoproject.com/en/1.5//topics/i18n/translation/
dnstuff
buddha
В django для этого есть стандартное приложение со своим механизмом, которое опирается на утилиту gettext в операционной системе. https://docs.djangoproject.com/en/1.5//topics/i18n/translation/
Это приложение для автоматического перевода. Мне нужно переключение контента, а не перевод. Перевод уже сделан профессиональным переводчиком.
buddha
Это не автоматический перевод. Почему вы такой вывод сделали? Пользовались?
dnstuff
Возможно я не прав, просто сбился с толку. Но, как я понял из документации, это автоматический перевод, который можно скорректировать в заголовке файла .po в плане склонений\спряжений. У меня же не стоит задача дословного перевода. В общем случае английский и русский текст могут сильно отличаться. Они могут быть вообще разными. Вопрос, как подтягивать из БД нужный контент в зависимости от “флажка”.
buddha
В твоём случае у меня нет идей как сделать. Скажу как делается в стандартной интернационализации. Там в шаблонах и в модулях подключаются некие метки:
from django.utils.translation import ugettext_lazy as _ для модулей
{% load i18n %} для шаблонов,
которые показывают механизму перевода место, где расположена строка, которую нужно занести в файл .po по команде python manage.py makemessages -a, в которых ты в свою очередь допишешь вариант перевода, какой пожелаешь, хоть вообще неверный. Потом пишется представление, в котором идёт проверка, какой язык поступил из запроса(т.е. какой ты выбрал в поле выбора) и активируется. Активация - джанговская функция. В местах которые были помечены строки заменяются на те варианты, которые прописаны в .po файле.

Думаю твоя ситуация сводится к тому, как сделать такие же метки. А подставить из базы нужные значения по конкретному языку это ведь элементарно. Придумай метку, подставляй её в нужные места, сделай скрипт , который будет шарить по всем файлам проекта и искать эти места, когда найдёт подставит значение из базы, но соответствующее конкретной метке. Наверно надо иметь какой то индекс до этой операции.
В итоге, проще запилить ваши переводы в файлы .po =)

Маленький кусочек .po файла, для примера:
#: templates/mybookmark/bookmarks_list.html:35
#: templates/mynotes/edit_note.html:10 templates/mynotes/show_notes.html:33
msgid "Edit"
msgstr "Редактировать"
#: templates/mybookmark/bookmarks_list.html:36
msgid "Priority:"
msgstr "Приоритет:"
#: templates/mybookmark/bookmarks_list.html:37
msgid "Looked trough:"
msgstr "Просмотрено:"
#: templates/mybookmark/bookmarks_list.html:38
msgid "Publick:"
msgstr "Публичная:"
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