Перевод Django не работает в моем случае

Мне жаль, что я спрашиваю об этом, ведь меня спрашивали столько раз:

django - как заставить перевод работать?

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

Как правильно настроить перевод Django? < / а>

http://askbot.org/en/question/8948/weve-edited-djangopo-files-but-translations-do-not-work-why/

Я хочу иметь английский (по умолчанию) и словенский языки. Мои настройки такие:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
)
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Europe/Belgrade'
USE_I18N = True
USE_L10N = True
USE_TZ = True
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
  ('si', _('Slovenian')),
  ('en-us', _('English')),
)
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

Urls.py:

urlpatterns = i18n_patterns('',
    url(r'^', include('analytics.urls')),
    url(r'^login', RedirectView.as_view(url='/admin/login', permanent=False)),
    url(r'^admin/', include(admin.site.urls)),
)

Шаблоны:

<div class="time_range">{% trans "Time range:" %}</div>

Я скомпилировал сообщения в файл .po, и теперь, согласно документации, можно было ожидать, что это начнет работать. Но мне не повезло. Если я захожу по URL-адресу с префиксом / si /, я все равно вижу английские строки.


person user568021    schedule 12.09.2015    source источник
comment
код urls.py неверен (лишний символ [). Это просто опечатка или, может быть, этот файл вообще не импортируется?   -  person zymud    schedule 15.09.2015
comment
ох .. извините, это была опечатка ..   -  person user568021    schedule 15.09.2015
comment
Однажды у меня была эта ошибка, потому что я использовал испанский с английским языком и nano (текстовый редактор консоли), а затем после нескольких попыток я увидел какое-то странное поведение некоторых символов, отличных от ascii, в файле .po, я исправил их и все работает, не могли бы вы выложить свой файл django.po? или, возможно, перевести только одну строку в какую-то бессмыслицу вроде «это для проверки i18n в django» (без символов, отличных от ascii) и посмотреть, работает ли это?   -  person diegueus9    schedule 16.09.2015
comment
вам нужно создавать сообщения и компилировать сообщения после перевода каждого из них. Вы можете взглянуть на django-rosetta. Но если вы не перевели их, конечно, он все равно будет показывать английский текст.   -  person DevLounge    schedule 19.09.2015


Ответы (2)


Я не уверен, что это важно, но в моем интернационализированном приложении у меня есть следующее:

LANGUAGES = (
    ("nl", "Nederlands"),
    ("en", "English"),
    )   

то есть без _() вокруг струн. Во фрагменте кода не показано, как вы определяете _, документацию говорит, что вам нужно присвоить ему псевдоним ugettext_lazy(). Может быть, это имеет значение.

Что также упростило бы вам помощь, это если бы вы предоставили исходный код минимальному приложению Django, которое демонстрирует вашу проблему (например, на github).

person Michiel Overtoom    schedule 14.09.2015
comment
Я определяю _ с помощью этого импорта: from django.utils.translation import ugettext_lazy как _ - person user568021; 15.09.2015
comment
В этом случае это согласно документации. Я склонен подробно изучить вашу проблему, даже отладить ее вручную, но было бы очень полезно, если бы вы могли предоставить какое-нибудь минимальное приложение Django, которое демонстрирует вашу проблему. Это возможно? - person Michiel Overtoom; 15.09.2015

После создания файлов .po нужно сделать еще два шага:

  1. Переведите сообщения в вашем .po файле
  2. Запустите ./manage.py compilemessages, чтобы скомпилировать ваш файл .po в файл .mo.

Чтобы процитировать документацию по переводу Django, After you create your message file – and each time you make changes to it – you’ll need to compile it into a more efficient form, for use by gettext. Do this with the django-admin compilemessages utility.

person Joey Wilhelm    schedule 15.09.2015