Как локализовать контент приложения Django

Привет, в настоящее время я работаю над приложением django для своей учебы и дошел до 1817 года. Локализация самого сайта была очень простой, но теперь я должен позволить пользователям переводить динамический контент приложения. Пользователи могут сохранять «продукты» в базе данных и давать им имена и описания, но, поскольку весь сайт должен быть локализован, я должен предоставить способ перевода названий и описаний этих пользователей.

Есть ли в Django естественный способ сделать это? Или я должен реализовать это как часть приложения (представляя переводы в модель данных)

Спасибо янош

14.12.2008 18:48:49
9 ОТВЕТОВ
РЕШЕНИЕ

Я хотел бы предложить проверить Джанго многоязычный . Это стороннее приложение, которое позволяет вам определять поля перевода в ваших моделях.

Конечно, вам все равно придется вводить фактические переводы, но они прозрачно хранятся в базе данных (в отличие от статических PO-файлов), о чем, я полагаю, вы спрашиваете.

10
15.12.2008 07:40:50

Это зависит от того, кто будет предоставлять переводы. Если вы хотите предоставить веб-интерфейс для перевода, вам нужно разработать его самостоятельно, а также представить переводы в базе данных.

Если те же переводчики, которые перевели сайт, также будут переводить данные, вы можете предоставить им ту же модель, которую они используют для сайта (предположительно, gettext), а затем вы также можете использовать gettext для этого контента.

0
14.12.2008 21:43:39

«Я должен предоставить возможность переводить имена и описания тезисов пользователям».

"Есть ли в Django естественный способ сделать это?"

Вы спрашиваете, может ли Django переводить с языка на язык? Вы спрашиваете о чем-то вроде http://translate.google.com/ ?

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

Если вы собираетесь выполнять перевод для своих пользователей, это должно быть частью вашей модели данных.

Фильтр Django i18n позволяет вам иметь таблицу строк перевода. Документация говорит , что это.

  1. Вставьте строки перевода в ваш код и шаблоны Python.
  2. Получите переводы для этих строк на те языки, которые вы хотите поддерживать. Это то, что вы делаете вручную, нанимая переводчиков или зная много языков самостоятельно.
  3. Активируйте промежуточное ПО локали в настройках Django.
1
15.12.2008 01:50:01

В Django есть два заметных проекта для переводимого контента: http://code.google.com/p/django-multilingual/ http://code.google.com/p/transdb/

4
15.12.2008 07:42:14

Я использую django-multilingual для локализации контента и django-localeurl для выбора языка на основе URL (например, mypage / en /).

Вы можете увидеть, как работает мультиязычный и localeurl, на странице JewishKrakow.net .

5
16.12.2008 10:36:05

Также ищите плагин локализации контента или как его написать. Можно добавить в список django-i18n-model

0
24.08.2009 22:46:21

Я думаю, что вы должны действовать в два этапа:

  1. Получить переводы
  2. Показать переведенные строки

Для первого шага вы должны сказать Django, что введенные пользователем строки должны быть переведены. Я думаю, что нет никакого собственного способа сделать это. Может быть, вы можете извлечь строки из вашей базы данных, поместив их в специфичные для локали файлы, запустить на них 'makemessages', получить файлы django.po и перевести.

Во-вторых, используйте ugettext, чтобы показать эти строки в вашем веб-приложении.

Надеюсь, что это может помочь тем, кто решит ту же проблему.

0
6.10.2010 08:22:18

Или попробуйте это:

http://packages.python.org/django-easymode/i18n/index.html

Это очень близко к тому, как вы обычно делаете модель django, вы просто добавляете 1 декоратор над вашей моделью. Он имеет поддержку администратора для переведенных полей, в том числе встроенных и общих строк. Почти все, что вы можете сделать с обычными моделями и классами администратора, вы можете сделать с интернационализированными версиями.

0
10.10.2010 08:26:31
Тестировали ли вы решение на производстве и как оно сравнивается с django-multilingual-ng? Я выбираю новый подход к локализации полей базы данных, поскольку django-multilingual не работает на Django 1.2+, а django-multilingual-ng выглядит совершенно мертвым.
stricjux 21.02.2011 14:46:49
да, это используется в производстве на многих сайтах. Единственная причина, по которой он имеет бета-статус, заключается в том, что тестовый набор еще не имеет 100% покрытия.
specialunderwear 25.04.2011 07:37:02

У меня на сайте 2 языка: английский и арабский. Пользователи могут переключаться между языками, нажимая на флажок. В моделях я использую модель прокси:

class Product(models.Model):
    name=models.CharField(max_length=100)
    name_ar=models.CharField(max_length=100, default='')

    def __unicode__(self):
        return self.name

class Product_ar(Product):
    def __unicode__(self):
        return self.name_ar
    class Meta:
        proxy=True

В формах я использую 2 формы вместо одной:

class CollectionEditForm_en(forms.Form):
    name = forms.CharField(label=_('Name'), max_length=100, widget=forms.TextInput(attrs={'size':'50'}))
    product = forms.ModelChoiceField(label=_('product'), queryset=Product.objects.filter(enabled=True), empty_label=None)

class CollectionEditForm_ar(forms.Form):
    name = forms.CharField(label=_('Name'), max_length=100, widget=forms.TextInput(attrs={'size':'50'}))
    product = forms.ModelChoiceField(label=_('product'), queryset=Product_ar.objects.filter(enabled=True), empty_label=None)

В коде проверьте язык следующим образом:

if request.LANGUAGE_CODE=='ar':
    CollectionEditForm=CollectionEditForm_ar
else:
    CollectionEditForm=CollectionEditForm_en

Итак, в шаблонах я проверяю:

{% if LANGUAGE_CODE == "ar" %}
  <a href="/product/{{product.alias}}/">{{product.name_ar}}</a>
{% else %}
  <a href="/product/{{product.alias}}/">{{product.name}}</a>
{% endif %}

Надеюсь, что это решение кому-нибудь поможет

1
18.09.2012 17:49:24