2012-04-23 4 views
1

Я пытаюсь сделать простой пример, чтобы понять интернационализацию Django.Интернационализация с помощью {% trans%} блока

Из того, что я читал в документации djangoproject, самый простой способ сделать это - обернуть, что вы хотите перевести с шаблона блоком {% trans %}.

Из того, что я понял, и ожидал, было для перевода будет выполняться автоматически для строки, в моем случае:

{% for x in found_bills %} 
    <tr> 
     <td>{% trans x.name %} 
    </td> 
    </tr> 
{% endfor %} 

и для строки в x.name (это название одного дня, в Английский, т. Е. «Воскресенье»), который должен быть переведен и возвращен в шаблон, где он был представлен в переводе.

Я неправильно понял, как это работает?

UPDATE:

Ошибка: ошибки произошло во время работы на _argparse.py зная искомых ./build/ipython/IPython/external/argparse/_argparse.py:1113: предупреждение: 'MsgID' формат строки с неназванные аргументы не могут быть правильно локализованы: Переводчик не может изменить порядок аргументов. Пожалуйста, рассмотрите возможность использования строки формата с именованными аргументами и сопоставления вместо кортежа для аргументов.

ВТОРАЯ UPDATE:

HTML код из шаблона выше один, и следующий код является один в представлении.

bills.py:

def bills(request): 
    bills = ps_bill.objects.all() 
    return render_to_response('bills.html',"bills":bills,},context_instance=RequestContext(request)) 
+2

Я не знаком с Django, но могу вас заверить, что он не будет автоматически переводить его. Вероятно, это будет просто означать перевод. –

+1

Я тоже думал то же самое. http://devdoodles.wordpress.com/2009/02/14/multi-language-support-in-a-django-project/ http://www.djangobook.com/en/2.0/chapter19/ Должно быть ты начал. – dm03514

ответ

5

Интернационализация и локализация сложны, и нет никакой замены для reading the documentation. Но вот очень грубая схема необходимых шагов:

  1. Необходимо пометить все строки, требующие перевода. В шаблонах вы используете {% trans "text" %} для простых случаев и {% blocktrans %} text {% endblocktrans %} для сложных случаев. В исходном коде вы обмениваете строки the ugettext function (или один из его вариантов). В Django 1.4 вы также можете использовать localize URL patterns.

  2. Запустить the makemessages administration command, чтобы создать файл сообщения для каждого языка, на который вы хотите перевести.

  3. Перевести сообщения на целевые языки. Вы можете сделать это в своем текстовом редакторе, но вы можете использовать инструменты перевода с помощью компьютера, которые помогут на этом этапе: see Wikipedia для частичного списка инструментов, которые работают с файлами сообщений GNU (расширение .po). Если у вас есть переводчики, поговорите с ними и узнайте, какое программное обеспечение они предпочитают использовать.

  4. Запустить the compilemessages administration command, чтобы скомпилировать файлы сообщений.

  5. Включите Django's language preference detection middleware. Если ваш сайт зарегистрировал пользователей, дайте им настройку предпочтений на языке. Для не неавторизованных пользователей, обеспечивает способ переключения языка (либо URL или привилегированный языка печеньем.)

О, и прочитайте документацию.

+0

И если файлы .po, которые должны были быть созданы командой 'makemessages', отсутствуют, что я могу сделать? Есть ли шаблон для файла .po? –

+0

Вы должны выяснить, почему файлы '.po' отсутствуют. Возможно, «makemessages» не смог найти никаких сообщений? Что говорится, когда вы передаете аргумент '-v 2'? –

+0

Я читал, что команда 'makemessages' неявно ищет файлы' .html' для блоков перевода. У меня есть мои шаблоны в папке 'templates' в моей корневой папке. Я начал запускать команду в своей папке приложения, где я установил локаль, но не было создано файлов '.po'. Затем я переместился и запустил команду 'makemessages' в корневой папке, но затем получаю некоторые ошибки, связанные с определенной папкой' build', созданной моей виртуальной средой. Итак, это моя проблема сейчас, и я думаю, что я должен исправить все, чтобы работать. –

1

Пожалуйста, прочитайте the doc через. trans тег просто помечает строку для перевода, как говорит доктор:

Once the string literals of an application have been tagged for later translation, the translation themselves need to be written (or obtained).... The first step is to create a message po. file for a new language ... then it's your responsibility to change the po files (by putting the language-specific translation in it)... finally you need to use tools to run over all available .po files and creates .mo files... (after that) your translations are ready for use.

+0

Хорошо, спасибо. Как только я это сделаю, получается, что я буду отмечать ваш ответ как правильный. –

1

Немного поздно, но лучше, чем никогда. Я наткнулся на ту же ошибку, на самом деле я установил Ipython во мне virtualenv с именем env /. Как я хотел бы перевести свой проект, а не все пакеты под окр/мое решение было сделать следующее:

django-admin.py makemessages -l LL --ignore=env/* (EDITED) 

где LL имя, которое вы даете ваш перевод.

Надеюсь, что кто-то посчитает это полезным, поскольку эта ошибка может быть разочаровывающей, это плохая форматированная строка в источнике пакета IPython.

Cheers!

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