Локализация базы данных в Джанго - PullRequest
2 голосов
/ 08 июля 2011

Я использую .mo файлы для локализации в Django.Кроме того, в моей базе данных я храню некоторый переведенный текст в различных полях, таких как:

name_en, name_es, name_de (все они являются столбцами в каждой строке).

Какой метод будет наилучшим длявыбрать правильное поле внутри шаблона?

т.е.: {{ name.some_method }} сгенерирует правильный перевод на основе текущей локализации.

Спасибо,

Meit

Ответы [ 3 ]

2 голосов
/ 14 октября 2015

Вы должны взглянуть на http://goodcode.io/articles/django-multilanguage/ Вот простое решение, которое может подойти для вашего случая использования и которое легко реализовать и понять.

1 голос
/ 08 июля 2011

Вы должны взглянуть на Django Transmeta , он работает так же, как и вы (поля БД с языковым кодом), но это более полное решение. Это уже связано с шаблонами и т. Д.

Вы можете проверить Интернационализация моделей и Пакеты Django для получения дополнительной информации и идей в этой области.

0 голосов
/ 08 июля 2011

Я вижу два способа сделать это, один на ваш взгляд, а другой - в шаблоне ...

  1. В поле зрения:

Возможно, вы храните информацию о языке пользователя где-то так,

user_lang = 'es'
obj = Somemodel.objects.get(pk=123434)
obj.local_name = getattr(obj, 'name_%s'%user_lang)

Таким образом, вы сохраняете локальный перевод в определенной переменной экземпляра, и в вашем шаблоне вы можете использовать его как:

{{obj.local_name}}

Но это может быть дорогостоящим, если вы хотите передать шаблону набор запросов вместо одного экземпляра. Для такого использования вы должны оценить это значение для каждого объекта в вашем наборе запросов.

  1. В шаблоне:

Это более сложный способ решения проблемы в шаблоне ...

Определите шаблон тега и передайте object_id и информацию о местном языке и получите переведенный текст, используя аналогичную функцию getattr . Но в этом случае, если вы хотите использовать это для более чем одной модели, вам, вероятно, придется передать информацию о типе контента для вашего тега шаблона, например:

{% get_translation <object_id> <content_type_id> <local_language> %}

И в вашей функции тега шаблона сделайте что-то вроде:

from django.contrib.contenttypes.models import ContentType

....
cont_obj = Content_type.objects.get_for_id(<cotent_type_id>) #get the related model 
obj = cont_obj.get_object_for_this_type(pk=<object_id>) # get your object 
return getattr(obj, 'name_%s'%<local_language>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...