Это полное решение, которое я использовал с Django 1.4 и до сих пор в 1.7.1:
В settings.py…
Добавить к MIDDLEWEAR_CLASSES, языковой стандарт, он позволяет выбрать язык на основе запроса:
'django.middleware.locale.LocaleMiddleware',
Добавьте LOCALE_PATHS, здесь будут храниться ваши файлы перевода:
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
Включить I18N:
USE_I18N = True
Установите ЯЗЫКИ, на которые вы будете переводить сайт:
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('fr', ugettext('French')),
('pl', ugettext('Polish')),
)
Добавьте процессор контекста шаблона i18n в TEMPLATE_CONTEXT_PROCESSORS, теперь запросы будут включать LANGUAGES и LANGUAGE_CODE:
'django.core.context_processors.i18n',
В urls.py:
В url_patterns добавьте ниже, это позволит включить представление перенаправления языка:
url(r'^i18n/', include('django.conf.urls.i18n')),
См. Разное в Переводах , чтобы узнать больше об этом.
Добавьте следующий импорт и инкапсулируйте URL-адреса, которые вы хотите перевести, с помощью i18n_patterns. Вот как выглядит моя шахта:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
(_(r'^dual-lang/'), include('duallang.urls')),
(r'^', include('home.urls')),
)
Теперь, где бы вы ни использовали текст и хотите его преобразовать, импортировать lazytext и обернуть каждую строку им, например, _ ('текст'), вы даже можете перейти к другим файлам urls.py и выполнить перевод URL следующим образом:
url(_(r'^dual_language/$'), landing, name='duallang_landing'),
Вы можете обернуть текст, который вы хотите перевести, в другие файлы, такие как models.py, views.py и т. Д. Вот пример поля модели с переводами для label и help_text:
name = models.CharField(_('name'), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
В ваших HTML шаблонах ...
Сделайте то же самое для ваших шаблонов, загрузите тег шаблона i18n и используйте trans и transblock для статического материала, который вы хотите перевести. Вот пример:
{% load i18n %}
{% trans "This is a translation" %}<br><br>
{% blocktrans with book_t='book title'|title author_t='an author'|title %}
This is {{ book_t }} by {{ author_t }}. Block trans is powerful!
{% endblocktrans %}
Теперь запустите makemessages для каждой из ваших локалей:
./manage.py makemessages -l pl
А теперь осталось только зайти в папку / locales и отредактировать каждый из .po файлов. Заполните данные для каждого сообщения. Вот один такой пример этого:
msgid "English"
msgstr "Angielski"
И, наконец, скомпилировать сообщения:
./manage.py compilemessages
Для трансляции данных экземпляра модели вы можете использовать некоторые доступные пакеты многократного использования, такие как
С переводами можно многому научиться, и интернационализация тесно связана с этой темой, поэтому ознакомьтесь с документацией по ней. Я также рекомендую проверить некоторые пакеты интернационализации, доступные для Django, такие как django-rosetta и django-linguo . Они помогают переводить содержимое модели, django-rosetta не создает новые записи для этого в вашей базе данных, в то время как django-linguo делает.
Если вы следовали этому, вам следует хорошо начать. Я считаю, что это самый стандартизированный способ запустить ваш сайт на нескольких языках. Ура!