Дмитрий, спасибо за интересную информацию. Мне понятно далеко не все, так что я сейчас задаю тебе кучу вопросов в цитировании. =)
Я тут разбирался с gettext, так что уже что-то стал понимать, но еще пока полностью картина не складывается. 16 ноября 2009 г. 12:53 пользователь Dmitry E. Oboukhov <[email protected]> написал: > ИБ> Пока сильно хороших идей не появилось, поэтому хочу с вами > ИБ> посоветоваться. Однозначно, что это задача часто встречается и > ИБ> наверняка существует множество хороших решений. > > ИБ> Пока я думаю в такую сторону. Сейчас есть главная страница 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: [email protected] jabber://[email protected] > `. `~' 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 > [email protected] | http://moscow.pm.org > > -- bessarabov -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
