Для добавления вашему сайту на Django нескольких языков, в типовом проекте нужно перевести несколько вещей:
- меню сайта
- модели, информацию, которая хранится в базе данных
- текст в шаблонах
Для некоторых проектов также понадобится перевести сообщения, которые получает пользователь, но на большинстве сайтов это не используется.
Содержание
Подготовка перевода сайта на несколько языков
Измените settings.py
# язык сайта по умолчанию, если не удалось определить язык другими способами LANGUAGE_CODE = 'ru' # список доступных языков LANGUAGES = ( ('ru', 'Russian'), ('uk', 'Ukrainian'), ) # включаем систему перевода django USE_I18N = True # указываем, где лежат файлы перевода LOCALE_PATHS = ( 'locale', # os.path.join(PROJECT_DIR, 'locale'), )
Добавьте в MIDDLEWARE_CLASSES
'django.middleware.locale.LocaleMiddleware',
Измените urls.py
Для поддержки нескольких языков в URL нужно использовать i18n_patterns вместо patterns в urls.py
from django.conf.urls.i18n import i18n_patterns urlpatterns = i18n_patterns('', url(r'^$', 'project.views.home', name='home'), ... )
Перевод шаблонов и сообщений
Следующий шаг — отметить в проекте строки, которые будут переведены на другие языки.
В шаблонах строки, которые будут переводится на выбранный язык, нужно добавить в блок {% trans «This string will be translated» %}
В дальнейшем при создании файлов перевода (django.po файлы) в них появится строка This string will be translated, для которой вы укажете правильный перевод.
Подробнее — http://www.djangobook.com/en/2.0/chapter19.html
Создание файлов перевода
Создайте в каталоге проекта директорию locale
Выполните команду
django-admin.py makemessages -l ru
После этой команды в директории locale будет создан каталог ru, в нем — LC_MESSAGES и в нем файл django.po.
Теперь используйте poedit для перевода терминов.
Вы также можете использовать любой текстовый редактор, а затем скомпилировать файлы перевода командой
django-admin.py compilemessages
В результате компиляции в каталоге появится файл django.mo, из которого Django будет брать перевод на русский язык.
Отличная статья, жаль нет упоминания про js
круто спасибо за статью!
Если я не ошибаюсь, то ‘ukrainian’ это ‘ua’. Просто ‘uk’ это ‘United Kingdom’. А так, статья замечательная!
ua — Украина
uk — украинский язык
Тут речь идёт о языках. Поэтому нет конфликтов, так как для английского языка используется en