Django интернационализация и перевод

У меня проблема с переводами django.

Проблема 1 - Я обновил строку в файле django.po, но это изменение не появилось на веб-странице.

Проблема 2. Я создал свой собственный файл locale с django-admin.py makemessages -l et, добавив строку перевода в файл, но они тоже не отображаются на странице.

Я не думаю, что это задание проблемы, потому что переводы с файла django.po появляются на веб-сайте, его просто изменения и переводы из моего собственного сгенерированного файла, которые не отображаются.

Изменить: Мои параметры settings.py содержат следующее:

gettext = lambda s: s
LANGUAGE_CODE = 'et'

LANGUAGES = (
             ('et', gettext('Estonian')),
             )

мои собственные файлы локали находятся в

/path/to/project/locale/et/LC_MESSAGES/

и файлы

django.mo и django.po

Файл, на который я ссылаюсь в проблеме 1, является django own et transaltion, который я изменил.

Ответы

Ответ 1

Хорошо, я получил ту же ошибку несколько минут назад. Я решил удалить текстовый тег "#, fuzzy" над строками перевода в файлах django.po. Кажется, что переведенный текст не подается, если он получил этот тег, поэтому обязательно переведите текст, а затем удалите эту строку.

Вот пример переведенного текста, а не сервера в po файле:

     #: course/models.py:13
     #, fuzzy
     msgid "code"
     msgstr "código"

Итак, просто удалите флаг и оставьте его следующим образом:

     #: course/models.py:13
     msgid "code"
     msgstr "código"

Я надеюсь, что эта работа для вас. Удачи!

Ссылка: http://share-experiences.com/blog/what-fuzzy-means-python-django-gettext/

PD: Я знаю, что вы получили эту проблему несколько месяцев назад, но я оставляю этот ответ из-за того, что вы никогда не слышали, если вы решили эту проблему.

Ответ 2

Была такая же/подобная проблема, при которой переводы не появлялись. Установка LOCALE_PATHS исправила проблему:

# settings.py
USE_I18N = True
USE_L10N = True

LOCALE_PATHS = (
  '/path/to/djangoapp/locale',
)

Ответ 3

Файлы переводов (PO) загружаются в память только один раз, изменения в файлах PO не подбираются Django. Чтобы загрузить новые файлы перевода, вам необходимо перезапустить Django (например, остановить/запустить серверы запуска, Apache или NGINX).

Ответ 4

Еще одна причина, по которой перевод Django не работает, заключается в компиляции файла .po с версией Python, отличной от той, которая используется для запуска вашего приложения. Убедитесь, что вы используете ту же версию.

Ответ 5

Обязательно используйте ugettext_lazy, а не ugettext

Ответ 6

Если вы используете gettext.translation для получения переводов, то есть:

text_de = gettext.translation('django', locale_dir, ['de'], fallback=True).ugettext('Welcome to my site')

... и ваш перевод работает на сервере разработки, но не на производстве, обратите внимание, что locale_dir должен указывать на ваш каталог локали. Он может быть расположен в другом месте на одной из систем. Потрачено, как 2 часа нахождение его.