Как перевести строку в шаблоне Django?

Ответ

Для интернационализации (i18n) строк в шаблонах Django используются теги `{% trans %}` и `{% blocktrans %}`. Перед их использованием необходимо загрузить библиотеку тегов: `{% load i18n %}`. ### 1. Простые строки: `{% trans %}` Используется для перевода статических строк без переменных. ```django {% load i18n %}

{% trans "Welcome to our site!" %}

``` ### 2. Строки с переменными и HTML: `{% blocktrans %}` Этот тег позволяет вставлять переменные и использовать множественные формы (плюрализацию). **С переменной:** ```django {% load i18n %} {% blocktrans with username=user.get_full_name %}

Hello, {{ username }}!

{% endblocktrans %} ``` **С плюрализацией:** ```django {% load i18n %} {% blocktrans count counter=items|length %} Found {{ counter }} item. {% plural %} Found {{ counter }} items. {% endblocktrans %} ``` ### Процесс настройки 1. **Настройте `settings.py`**: Убедитесь, что `django.middleware.locale.LocaleMiddleware` добавлен в `MIDDLEWARE`. 2. **Создайте файлы перевода**: Выполните команду `python manage.py makemessages -l `, например, `makemessages -l de` для немецкого языка. 3. **Заполните `.po` файлы**: В директории `locale/de/LC_MESSAGES/django.po` появятся строки для перевода. ```po #: templates/base.html:5 msgid "Welcome to our site!" msgstr "Willkommen auf unserer Seite!" # <-- Ваш перевод ``` 4. **Скомпилируйте переводы**: Выполните `python manage.py compilemessages`, чтобы создать скомпилированные `.mo` файлы, которые Django использует в работе.

Ответ 18+ 🔞

А, ну это же про переводы в Джанге! Слушай, это вообще отдельная песня, блядь. Как будто нарочно придумали, чтобы у разработчиков мозг вытекал, но если разобраться — ничего сложного, ёпта. Вот смотри, чтобы строки на сайте переводились, есть два главных тега, как два хуя в одной жопе — `{% trans %}` и `{% blocktrans %}`. Но чтобы они вообще работали, их сначала надо вызвать, как гостей на хату: `{% load i18n %}`. Без этого нихуя не заработает, будет просто текст висеть. **1. Простые строки — `{% trans %}`** Это для перевода всякой статической хуйни, где переменных нет. Просто обернул и всё. ```django {% load i18n %}

{% trans "Welcome to our site!" %}

``` Вот и всё, блядь. Взял фразу, засунул в тег, и она готова к переводу. Проще некуда. **2. Строки с переменными и плюрализацией — `{% blocktrans %}`** А вот это уже поинтереснее, ёбана. Тут можно и имя пользователя вставить, и с числами поиграться. **С переменной:** Допустим, надо поздороваться по имени. Делаем так: ```django {% load i18n %} {% blocktrans with username=user.get_full_name %}

Hello, {{ username }}!

{% endblocktrans %} ``` Видишь? Берём `username` из контекста, и вставляем его прямо в переводимую строку. Удобно, блядь. **С плюрализацией (это когда разное окончание в зависимости от числа):** Вот это вообще пиздец, где можно накосячить. Смотри: ```django {% load i18n %} {% blocktrans count counter=items|length %} Found {{ counter }} item. {% plural %} Found {{ counter }} items. {% endblocktrans %} ``` Тут магия в том, что если `counter` равен 1, то выведется первая фраза, а если больше — вторая. В других языках, ёпта, правил может быть дохуя, но Джанга сама разберётся, если в `.po` файле всё правильно прописать. ### А теперь, сука, как это всё настроить, чтобы работало 1. **Ковыряем `settings.py`** Первым делом, убедись, что в `MIDDLEWARE` есть строчка `django.middleware.locale.LocaleMiddleware`. Без этого посредника локализация будет работать через жопу, если вообще будет. 2. **Создаём файлы для переводов** Тут команда в консоли: `python manage.py makemessages -l <язык>`. Хочешь немецкий? `makemessages -l de`. Испанский? `-l es`. Команда пробежится по всем шаблонам и `*.py` файлам, соберёт все строки из `trans` и `blocktrans` и создаст `.po` файлик в папке `locale/de/LC_MESSAGES/`. 3. **Переводим, блядь!** Открываешь этот самый `django.po` файл. Там будет куча записей типа: ```po #: templates/base.html:5 msgid "Welcome to our site!" msgstr "" # <-- Сюда пишешь перевод, например "Willkommen auf unserer Seite!" ``` Сидишь, вспоминаешь школьный немецкий (или гугл переводчик) и заполняешь все `msgstr`. Главное — не проебать кавычки и форматирование. 4. **Компилируем результат** После того как натрудился, нужно это всё скомпилировать командой `python manage.py compilemessages`. Она создаст бинарные `.mo` файлы, которые Джанга и будет использовать в работе. Без компиляции твой перевод так и останется мёртвым грузом, нахуй никому не нужным. Вот и вся магия, ёпта. Сначала кажется, что овердохуища шагов, но как разберёшься — обычная рутина. Главное — не забывать компилировать сообщения после правок, а то будешь сидеть и думать: «Ну почему же не работает, блядь?!».