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

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

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
0
8 850
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

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

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

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

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

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

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

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

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

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

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

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

Следует отметить два проекта переводимого контента в Django: http://code.google.com/p/django-multilingual/http://code.google.com/p/transdb/

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

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

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

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

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

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

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

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

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

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

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

Вы тестировали решение на производстве и как оно сравнивается с django-Multilingual-ng? Я выбираю новый подход к локализации полей базы данных, поскольку django-Multilingual не работает в Django 1.2+, а django-Multilingual-ng выглядит совершенно мертвым.

stricjux 21.02.2011 17:46

да, это используется в продакшене на многих веб-сайтах. Единственная причина, по которой он имеет статус бета-версии, заключается в том, что набор тестов еще не имеет 100% покрытия.

specialunderwear 25.04.2011 11:37

У меня на сайте 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

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

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 %}

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

Другие вопросы по теме