Как мы можем заставить 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
Когда я настроил 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 "עברית"