Если интересно, то вот мультиязычный сайт о вейк парке в Турции:<br>
<br>
<a href="http://www.goldcablepark.com/">http://www.goldcablepark.com/</a><br>
<br>
Использован модуль  Mojolicious::Plugin::I18N; <br>
Куски кода оттуда. <br>
<br>
1) Определение языка в зависимости от типа браузера пользователя. 
(Определяем язык браузера). И перенаправляем на нужную страничку:<br>
<br>
sub welcome {<br>
  my $self = shift;<br>
  my $lang = $self->languages;<br>
  $self->redirect_to("/$lang/index.html")->res->code(301);<br>
}<br>
<br>
<br>
2) Вот так выглядит хэш для каждого языка:<br>
<br>
package Goldcable::I18N::ru;<br>
use base 'Goldcable::I18N';<br>
use utf8;<br>
<br>
our %Lexicon = (<br>
'Home' => 'Главная',<br>
'Photos' => 'Фото',<br>
'Videos' => 'Видео',<br>
'Services' => 'Услуги',<br>
'Address' => 'Адрес',<br>
'Info' => 'Инфо',<br>
# И т.д.<br>
);<br>
<br>
3) Вот так выглядит темплейт:<br>
...<br>
<li><a href="/"><%=l 'Home' %></a></li><br>
<br>
4) Большие куски текстов загружаются просто в зависимости от типа языка.<br>
Тоже код из темплейта:<br>
<br>
%== &Goldcable::get_html( languages );<br>
<br>
<br>
P.S. Вообще изначально думал сделать это на perl Dancer. Нашел модуль Dancer::Plugin::I18N<br>
Но не получилось.  Приятель даже написал sh скрипт для теста:<br>
<a href="http://pastebin.com/XqQ90cLa"> http://pastebin.com/XqQ90cLa</a><br>
<br>
Переписывался с создателем модуля, но он что-то проигнорировал.<br>
<br><br><div class="gmail_quote">13 декабря 2012 г., 12:48 пользователь iSage <span dir="ltr"><<a href="mailto:isage@aumi.ru" target="_blank">isage@aumi.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<u></u>
<div>
<p>То есть как это "не понимает"? xgettext всеравно откуда доставать строки.</p>
<p>Я вот таким скриптом из ТТ доставал: <a href="http://pastie.org/5519469" target="_blank">http://pastie.org/5519469</a></p>
<p>А в ТТ использовал синтаксис l("some text")</p><div><div class="h5">
<p> </p>
<p>On 2012-12-13 12:28, Иван Бессарабов wrote:</p>
<blockquote type="cite" style="padding-left:5px;border-left:#1010ff 2px solid;margin-left:5px;width:100%">
<p>Совсем-совсем самопильными или ты что-то взял за основу с cpan?<br>Со станартным экстрактором xgettext есть проблема — он не понимает template toolkit.</p>
<div class="gmail_extra"><br><br>
<div class="gmail_quote">13 декабря 2012 г., 12:14 пользователь Alexander Q <span><<a href="mailto:qalexx@gmail.com" target="_blank">qalexx@gmail.com</a>></span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Лично я в момент раздумий, как бы прикрутить стандартные утилиты gettext к этой задаче, вспомнил, на каком языке пишу, и делаю всё это средствами перла, самописным скриптом.
<div>
<div>
<div class="gmail_extra"><br><br>
<div class="gmail_quote">2012/12/13 Иван Бессарабов <span><<a href="mailto:ivan@bessarabov.ru" target="_blank">ivan@bessarabov.ru</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">А как ты экстрактишь вот эти pgettext строки из template toolkit шаблонов?
<div class="gmail_extra"><br><br>
<div class="gmail_quote">12 декабря 2012 г., 23:07 пользователь Alexander Q <span><<a href="mailto:qalexx@gmail.com" target="_blank">qalexx@gmail.com</a>></span>написал:
<div>
<div><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Я использую Locale::TextDomain, который поддерживает контексты.
<div>__p('new user form button', 'New');</div>
<div>__p('show only new books link', 'new');</div>
<div><br>
<div>Вторую проблему я не понял.</div>
</div>
<div class="gmail_extra">
<div>
<div><br><br>
<div class="gmail_quote">2012/12/12 Ruslan Zakirov <span><<a href="mailto:ruz@bestpractical.com" target="_blank">ruz@bestpractical.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2012/12/12 Ruslan Zakirov <<a href="mailto:ruz@bestpractical.com" target="_blank">ruz@bestpractical.com</a>>:<br>

<div>>> В мире Rails принято хранить i18n в config/locales/$LANGCODE.yml<br> >><br> >> В шаблонах и в коде используются хэлперы типа<br> >> t(ключ_локализации_иерархия_черезз_точку, параметры).<br>
 >><br> >> ru:<br> >>   page:<br> >>     title: Привет, %1<br> >><br> >> Использование<br> >><br> >> [%= t('page.title', customer_title) %]<br> >><br> >> В принипе, у меня есть заготовка модуля для CPAN, могу выложить.<br>
 >><br> >> По своей практике скажу, что поддерживать такой код удобно.<br> >><br><br> Хоть такой код и кособоко выглядит, но из простых альтернатив gettext,</div>
который тоже имеет свои проблемы. Из самых назойливых:<br> 1) короткие термины с многими значениями, типа new. Они могут<br> переводится по разному в зависимости от контекста. Контексты в<br> перловых модулях не поддерживаются. Можно обойти вводом контекста<br>
 прямо в текст и созданием перевода и для основного языка.<br> 2) loc("Created $type"). По другому нельзя, а список возможных типов<br> может быть большим.<br><br> И так далее и тому подобное.<br>
<div>
<div><br> --<br> Best regards, Ruslan.<br> --<br> Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a></div>

</div>
</blockquote>
</div>
<br><br clear="all">
<div> </div>
</div>
</div>
<div>-- <br>With best regards,<br>    Alexander Q                        mailto:<a href="mailto:qalexx@gmail.com" target="_blank">qalexx@gmail.com</a></div>
</div>
<br>--<br> Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br><br></blockquote>
</div>
</div>
</div>
</div>
<br>--<br> Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br><br></blockquote>
</div>
<br><br clear="all">
<div> </div>
-- <br>With best regards,<br>    Alexander Q                        mailto:<a href="mailto:qalexx@gmail.com" target="_blank">qalexx@gmail.com</a></div>
</div>
</div>
<br>--<br> Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br><br></blockquote>
</div>
</div>
</blockquote>
<p> </p>
<div> </div>
</div></div></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br>