[Moscow.pm] Как делать сайт на нескольких языках с template toolkit

Dmitry E. Oboukhov unera на debian.org
Чт Ноя 19 03:56:24 PST 2009


>> но тут возникает одна небольшая
>> трабла: не для всех форматов файлов есть экстракторы строк. то есть
>> какой-либо XML или C запросто, а с html+TT я что-то искал искал и не
>> нашел ничего приличного.

ИБ> Я наткнулся на Locale::Maketext::Extract
ИБ> http://search.cpan.org/~drtech/Locale-Maketext-Lexicon-0.77/lib/Locale/Maketext/Extract.pm
ИБ> он умеет вытаскивать строки из template toolkit и из самого перла. В
ИБ> tt он вытаскивает из tt строки, которые типа в таком формате:
ИБ> {{{
ИБ> [% | l(arg1,argn) %]string[% END %]
ИБ> [% 'string' | l(arg1,argn) %]
ИБ> [% l('string',arg1,argn) %]
ИБ> }}}

ИБ> Я поигрался, действительно вытаскивает (только пока не понятно, как
ИБ> написать фильтр l).
ИБ> Не эксперементировал с этим модулем?

Я думаю что идея вытаскивать строки на автоопределении - заведомо
порочная по своей сути.
строки надо маркировать для перевода. потому что далеко не все строки
нужно переводить.

>> в итоге пришел к такой структуре:
>> 
>> в корне проекта Makefile
>> в каталоге tt/ лежит шаблон шаблонов (один или несколько)
>> далее по команде make
>> самописный скрипт извлекает из указанных источников все помеченное
>> тегами <gt>...</gt> и кладет в .po

ИБ> У тебя только в шаблоне есть вещи которые нужно перевеодить?

так в том и фишка что не только в шаблоне, потому я их маркирую везде.
потому и утилиту написал :)


>> далее работа с этими po стандартными gettext'овыми утилитами (клеим их
>> в один большой .po

ИБ> А как ты объединяешь несколько po файлов в один?

msgmerge (я ссылку на реальный makefile приводил)

>> и кладем в какое-то место где переводчик может
>> найти, ну а make далее ищет po-шки вида LANG.po и из них из шаблона
>> шаблонов собирает
>> index.ru.tt, index.cs.tt и даже blah.cs.cgi

ИБ> Я правильно тебя понимаю, что сначала ты запускаешь что-то вроде "make
ИБ> extract", а после перевода дешаешь типа "make create" чтобы у тебя все
ИБ> шаблоны собрались?

ИБ> Расскажи, пожалуйста, немного поподробнее как у тебя собираются
ИБ> шаблоны. Меня очень заинтерсовало, что ты создаешь еще и перл скрипт.
ИБ> Мне кажется, что с этим как-то очень неудобно работать - поправил
ИБ> скрипт и не можешь сразу его запустить для дебага, нужно програть
ИБ> через "make create" и только потом запускать (хотя, конечно, это
ИБ> автоматизируется). В перл коде ты так же размечаешь текст для перевода
<gt>> ...</gt> ?

перл-скрипт тут как экстрактор и строитель. просто готовых
инструментов не оказалось. надо бы отдокументировать и довести до
уровня "обычная утилита".

в перл-коде можно размечать как-то по другому, для перла-то есть
экстракторы готовые (например ~~). речь шла о html, JS, TT и даже
просто txt

>> недостатков два:
>>  - велосипед на экстракт/сборку таргета
>>  - после каждой правки главного шаблона надо звать make

ИБ> Если я правильно понял, как все работает, то тогда еще один недостаток
ИБ> можно записать - без make проект будет выводить кучу ненужных тегов
"<gt>> ", плюс нативного gettext-а (в сях во всяком случае) то что если
ИБ> нет перевода, то выводится нормальный английский текст.

для вывода я не использую шаблон с <gt>. а всегда сгенеренный шаблон.
для английского получается что не нужен переводчик а напрямую просто
как бы удаляются теги

ИБ> Вот, еще вопрос осознал: из-за всей этой кантители с po файлами проект
ИБ> сначала нужно делать на английском языке, я правильно понимаю?

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

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

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

ага и это тоже Ж)

-- 
... mpd is off

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera на debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: отсутствует
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20091119/d2bc4bc1/attachment.bin>


Подробная информация о списке рассылки Moscow-pm