2012-06-01 2 views
0

Я следил за документацией, как делать i18n, но слова все еще отображаются на английском языке.Интернационализация в Django не активируется

Settings.py:

USE_I18N = True 
LANGUAGES = (
    ('en', 'English'), 
    ('de', 'German'), 
) 
LANGUAGE_CODE = 'de' 

Просмотров:

from django.utils.translation import ugettext as _ 
... 
messages.set_level(request, messages.SUCCESS) 
messages.success(request, _(u'An invitation was sent to %s.') % invitation.email) 

Я разрабатываю на Ubuntu и устанавливается Gettext. В командной строке я ввожу эти:

django-admin.py makemessages -l de 

я получаю файл .po и редактировать его соответствующим образом:

# SOME DESCRIPTIVE TITLE. 
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
# This file is distributed under the same license as the PACKAGE package. 
# FIRST AUTHOR <[email protected]>, YEAR. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PACKAGE VERSION\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2012-06-01 17:42+0100\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"Language: \n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Plural-Forms: nplurals=2; plural=(n != 1)\n" 

#: MyBookmarks/templates/friend_invite.html:3 
#: MyBookmarks/templates/friend_invite.html:4 
msgid "Invite A Friend" 
msgstr "hhhhh" 

#: MyBookmarks/templates/friend_invite.html:11 
msgid "send invite" 
msgstr "gggggggggg" 

#: MyBookmarksApp/forms.py:8 
msgid "Friend's Name" 
msgstr "ffffffffff" 

#: MyBookmarksApp/forms.py:9 
msgid "Friend's Email" 
msgstr "ddddddddd" 

#: MyBookmarksApp/views.py:123 
#, python-format 
msgid "An invitation was sent to %s." 
msgstr "ssssssssssss %s" 

#: MyBookmarksApp/views.py:127 
msgid "An error happened when sending the invitation." 
msgstr "aaaaaaa" 

Затем я запускаю эту команду:

django-admin.py compilemessages 

и тому. Создается mo-файл. Я запустил приложение, и все по-прежнему на английском. Что мне не хватает?

Update 2:

я сейчас попробовал новый подход:

я добавил

'django.middleware.locale.LocaleMiddleware', 

к MIDDLEWARE_CLASSES в settings.py

Затем я добавил на адрес: url.py:

# i18n 
(r'^i18n/', include('django.conf.urls.i18n')), 

И в моем шаблоне base.html я добавил это:

{% load i18n %} 
... 
<div id="footer"> 
    <form action="/i18n/setlang/" method="post"> 
     <select name="language"> 
     {% for lang in LANGUAGES %} 
      <option value="{{ lang.0 }}">{{ lang.1 }}</option> 
     {% endfor %} 
     </select> 
     <input type="submit" value="Go" /> 
    </form> 
    </div> 

Теперь я могу увидеть выпадающее меню на моей странице, чтобы изменить язык. Даже после изменения языка на немецкий язык ничего не меняется. Что-то, кажется, сломана в 1,4 ...

обновление 3:

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

Это очень простой проект, и вы можете переключаться между немецкими & на главной странице. Вы видите, что выбранный код языка действительно изменяется, что является хорошим знаком, но перевода просто не происходит. Интересно, если это ошибка, о которой нужно сообщить. Ваше сотрудничество высоко ценится.

Вы можете скачать здесь: http://www.chasebot.com/TestProject.zip

(После извлечения в settings.py вам необходимо изменить абсолютный путь к базе данных)

Пожалуйста, дайте мне знать, если вы можете воспроизвести его. Спасибо

+0

У вас установлено языковое промежуточное ПО? –

+0

Я вижу. Пожалуйста, посмотрите мое обновление в вопросе. Спасибо за помощь – Houman

ответ

3

Вы используете метод set_language()?https://docs.djangoproject.com/en/1.4/topics/i18n/translation/#set-language-redirect-view

Как вы менявите язык? Используя форму? Вы уверены, что язык изменен? Распечатайте текущий язык в шаблоне html. Возможно, некоторые cookie были сохранены в браузере с уже не «DE» значением, не позволяя переключиться на нужный язык.

UPDATE: ОК, похоже, что Django не может найти каталог локалей. Структура каталогов кажется немного беспорядочной. Читайте здесь: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

The directories listed in LOCALE_PATHS have the highest precedence, with the ones appearing first having higher precedence than the ones appearing later. 

Then, it looks for and uses if it exists a locale directory in each of the installed apps listed in INSTALLED_APPS. The ones appearing first have higher precedence than the ones appearing later. 

Таким образом, вы не имеете LOCALE_PATHS в settings.py и локаль/не подпапке приложения, включенные в INSTALLED_APPS.

Просто добавьте

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

Это должно сделать трюк (я тестировал с тестовым проектом).

+0

Я установил LANGUAGE_CODE = 'de' в settings.py. Поэтому на этом этапе язык должен быть закреплен на нем. Но я этого даже не понимаю. Я удалил все файлы cookie, такую ​​же проблему. Док говорит, что LANGUAGE_CODE = 'de' используется в качестве последнего средства. Может быть, мне нужно принять другую стратегию. – Houman

+0

Теперь я редактировал свой вопрос с последним статусом. : - \ – Houman

+0

Кажется странным. Попробуйте с ugettext_lazy вместо этого ... – Tisho

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