2010-04-14 6 views
13

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

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

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

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

Edit: Мой 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, который я изменилось.

+0

Готовы ли вы к документу о [i18n] (http://docs.djangoproject.com/en/1.1/topics/i18n/internationalization/#topics-i18n-internationalization)? Я предполагаю, но вы включаете тег i18n в шаблонах? Вы уверены, что ваш файл .po находится на правильном пути? Можете ли вы написать больше информации? – diegueus9

+0

Ну да. i18n включен в шаблонах с {% load i18n%}. Так как файл django.po находится в правильном пути (проблема 1), я не думаю, что проблема включения или загрузки i18n. Поскольку, как я уже сказал, существующие переводы загружаются в шаблон. Но как узнать, есть ли проблема в 2 файлах локали в правильном месте? Они находятся там, где они были созданы django-admin.py makemessages -l et –

+0

: http://docs.djangoproject.com/en/1.1/topics/i18n/localization/#message-files путь будет: your_project/locale/et/LC_MESSAGES/django.po. – diegueus9

ответ

25

Ну, у меня была такая же ошибка несколько минут назад. Я решил удалить текстовый тег «#, fuzzy» над строками перевода в файлах django.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: Я знаю, что вы получили этот вопрос несколько месяцев назад, но я оставляю этот ответ из-за вас, что мы никогда не слышали, если вы получили эту проблему решить.

+4

я вытащил несколько из моих волосы из-за этих 'fuzzies' :) –

+1

Ну, это не сработало для меня. Django работает таинственным образом на данный момент :( – shailenTJ

+0

Уф! Я просто потратил полчаса, пытаясь понять это, и это было чертовски нечеткое. – 3cheesewheel

-2

Проверьте установку USE_I18N. More info. Во всяком случае, я думаю, что по умолчанию это True ...

7

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

+0

Что нужно перезапустить сервер django, это также мой опыт, но это странно, что он нигде не упоминается в документации. – qff

12

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

# settings.py 
USE_I18N = True 
USE_L10N = True 

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

Хмм да, django получил 4 основных обновления, так как я разместил вопрос. Локальные пути действительно являются одной из проблем, связанных с переводами, и они были добавлены в django 1.4, я думаю. –

+2

Еще лучше я бы рекомендовал 'os.path.join (BASE_DIR, 'locale'),'. ** Не ** используйте относительные пути, так как, хотя они работают в dev, они могут не работать в режиме реального времени в зависимости от сервера и т. д. Я усвоил этот трудный путь. – Wtower

0

Убедитесь в использовании ugettext_lazy и не ugettext

0

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

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

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

1

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

Смежные вопросы