Как локализовать контент приложения Django - PullRequest
9 голосов
/ 14 декабря 2008

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

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

Спасибо, Янош

Ответы [ 9 ]

10 голосов
/ 15 декабря 2008

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

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

5 голосов
/ 16 декабря 2008

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

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

4 голосов
/ 15 декабря 2008

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

1 голос
/ 18 сентября 2012

У меня на сайте 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 голос
/ 15 декабря 2008

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

«Есть ли в Джанго естественный способ сделать это?»

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

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

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

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

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

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

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

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

0 голосов
/ 06 октября 2010

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

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

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

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

Надеюсь, это поможет тем, у кого возникла такая же проблема.

0 голосов
/ 25 августа 2009

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

0 голосов
/ 15 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...