Как мы можем заставить django автоматически переводить языки, хранящиеся в языковой модели?

У меня есть языковая модель, в которой все языки хранятся на английском (например, японский, а не 日本語):

      class Language(models.Model):
    name = models.CharField(
        max_length=20,
    )

    short_name = models.CharField(
        max_length=20,
    )

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['name']

Я хочу, чтобы Django автоматически переводил name

поле, так что японский будет автоматически переведен Django на 日本語, поскольку кажется, что Django по умолчанию имеет все переводы для языков.

Когда я настроил Rosetta для предоставления переводов по всему сайту и вручную добавил поддерживаемые языки в базовые настройки:

      LANGUAGES = [
    ("af", _("Afrikaans")),
    ("ar", _("Arabic")),
    ...
    ("he", _("עברית")),
]

Все перечисленные здесь языки (если они переведены в Rosetta) переводятся автоматически при переключении языков сайта.

Было бы очень сложно добавить все языки в LANGUAGES, так есть ли способ заставить Django автоматически переводить только эту модель?

1 ответ

Создайте файл utils.translation.py

      from django.utils.translation import ugettext
from django.utils import translation

def get_translation(text: str, locale: str):
    translation.activate(locale)
    val = ugettext(text)
    translation.deactivate()
    return val

а затем в вашем model.py

      def __str__(self):
    from utils.translation import get_translation
    return get_translation(self.name, self.short_name)

Убедитесь, что self.short_name совпадает с кратким именем rosetta

И вам также необходимо перевести языки в розетте.

en.po

      msgid "English"
msgstr "English"

he.po

      msgid "Hebrew"
msgstr "עברית"
Другие вопросы по тегам