2014-02-01 7 views
1

i cant force django для перевода строк, выбор языка из запроса правильный, но у меня нет переведенных строк.django перевод не работает для меня

может быть, здесь может быть проблема: когда я запустить оболочку, возвращаемые language_code не равно, как я имею в settings.py

gettext = lambda s: s 
USE_I18N = True 
USE_L10N = True 
LANGUAGE_CODE = 'en' 

LANGUAGES = (
    ('cs', gettext('Czech')), 
    ('en', gettext('English')), 
) 

>>> from django.utils import translation 
>>> 
>>> translation.get_language() 
'en-us' 
>>> from django.conf import settings 
>>> settings.LANGUAGE_CODE 
'en' 

мой файл сообщений в locale/cs/LC_MESSAGES/django.{mo,po} у меня есть это содержание там (в переводе сокр недели короткий имена):

msgid "Mo Tu We Th Fr Sa Su" 
msgstr "Po Út St Čt Pá So Ne" 

в виду, когда я получаю правильное значение 'CS'

print get_language() 
'cs' 

и следующая строка ugettext

ugettext('Mo Tu We Th Fr Sa Su') 
'Mo Tu We Th Fr Sa Su' 

, но я ожидал

'Po Út St Čt Pá So Ne' 

может кто-нибудь сказать мне, где может быть проблема? : o)

+0

Django использует сеанс var для определения языка пользователя, поэтому, вероятно, именно по этой причине вы не получаете правильный язык в своей оболочке. – petkostas

+1

Вы активировали промежуточное ПО i18n и настроили путь локали? Некоторое время назад я боролся с http://stackoverflow.com/questions/20467626/how-to-setup-up-django-translation-in-the-correct-way – frlan

ответ

3

Возможно, что перевод находится в .po файла, однако отсутствует в файле .mo. Попробуйте перекомпилировать сообщения, запустив

./manage.py compilemessages 
+0

. Пожалуйста, поместите несколько заметок о том, почему он должен исправить вопрос. –

+0

Разверните свой ответ. Дайте нам несколько доказательств, что это действительно ответ на эту проблему. –

0

Я отслеживал код всю ночь и нашел некоторые подсказки. В основном в trans_real.py и gettext.py. Вы можете поставить точку останова в функции «перевод».

  1. Код перевода выполняется только один раз, когда приложение запускается. Поэтому вам нужно перезагрузить uwsgi для загрузки новой версии.
  2. Файл Po никогда не используется. gettext.py использует только файл «mo» (в моем ноутбуке). Таким образом, вы должны скомпилировать сообщения после изменения.
  3. «-» в коде языка будет преобразован в «_» в пути локали. Например, «zh-CN» преобразуется в «zh_CN». Вот почему файл перевода не найден. Я думаю, будет лучше, если просто использовать два символа в качестве кода языка. И чувствительность к регистру должна учитываться в системе Linux.
+1

Отображение языка для локалей выполняется с помощью этой функции [to_locale] (https://github.com/django/django/blob/c0a2388a1c4ead1afaec98e4ebc953a772ca3849/django/utils/translation/trans_real.py#L63), например, zh-hans будет zh_Hans. – schemacs

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