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

Иван Бессарабов ivan на bessarabov.ru
Чт Ноя 19 02:30:31 PST 2009


Дмитрий, спасибо за интересную информацию. Мне понятно далеко не все,
так что я сейчас задаю тебе кучу вопросов в цитировании. =)

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

16 ноября 2009 г. 12:53 пользователь Dmitry E. Oboukhov
<unera на debian.org> написал:
> ИБ> Пока сильно хороших идей не появилось, поэтому хочу с вами
> ИБ> посоветоваться. Однозначно, что это задача часто встречается и
> ИБ> наверняка существует множество хороших решений.
>
> ИБ> Пока я думаю в такую сторону. Сейчас есть главная страница index.tt,
> ИБ> вместо нее я хочу сделать index.ru.tt и index.en.tt. В записимосит от
> ИБ> того, какой язык выбрал пользователь ему будет отображаться либо один
> ИБ> шаблон, либо другой. Это все просто реализовать, но не супер
> ИБ> элементарно будет поддерживать (нужно будет не забывать что-то менять
> ИБ> в обоих шаблонах). С другой стороны у меня еще есть javascript,
> ИБ> который тоже что-то рисует на страницах. Для js я сейчас планирую
> ИБ> сделать массив myText, где у меня будет хранится все строки на нужном
> ИБ> мне языке, которые js у меня будет выводить.
>
> ИБ> Вообще, хотелось бы, чтобы и js и perl использовал одну и ту же базу
> ИБ> строк (следить за одной системой всегда проще чем за нескольким), но
> ИБ> при этом хочется, чтобы наличие этой базы не сильно усложняло систему
> ИБ> и не сильно замедляло ее работу.
>
> у меня тоже пара маленьких проектов таких есть (даж один на 10 языков уже
> перевели), небольшой опыт в этом вопросе
>
> так вот очень хорошо если переводы пойдут через какую-то стандартную
> систему. например po-файлы от gettext.

Полностью поддерживаю. Плюсы такого решения очивидны.

> но тут возникает одна небольшая
> трабла: не для всех форматов файлов есть экстракторы строк. то есть
> какой-либо 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

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

В моем случае, я бы еще хотел доставать из js файлов (вроде как это
стандартный экстрактор xgettext более или менее делает, если ему
указать тип файла Питон) и может быть в самих скриптах у меня будет
что-то что нужно будет первевести (L:M:E это тоже прекрасно умеет
делать).

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

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

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

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

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

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

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

Вот, еще вопрос осознал: из-за всей этой кантители с 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
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEAREDAAYFAksBIQMACgkQq4wAz/jiZTfwNQCcD9uZt97hJ50LK5NDMG3u3HJL
> eWcAoIlfQ8WQIJ8Ft3ciGGMWOKKGNE2s
> =5ro4
> -----END PGP SIGNATURE-----
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
bessarabov


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