Как я могу сделать I18N в HTML :: Template [:: Compiled] с gettext? - PullRequest
2 голосов
/ 21 апреля 2009

В настоящее время я пытаюсь переместить веб-проект из пользовательской системы i18n в gettext, однако мне нужно будет подготовить HTML :: Template :: Compiled шаблоны для i18n и не делать пока не знаю, как это сделать. Мои шаблоны хранятся в отдельных файлах, поэтому я не могу использовать строковую интерполяцию Perl, и я также хотел бы использовать синтаксис gettext-типичный _() в шаблонах.

Есть идеи, как это правильно реализовать?

1 Ответ

1 голос
/ 21 апреля 2009

вы можете попробовать это: http://perlboard.svn.sourceforge.net/viewvc/perlboard/battie/lib/HTML/Template/Compiled/Plugin/Translate.pm?view=markup

Я хочу сделать из него модуль CPAN. Надеюсь, скоро =) Вот пример, комментарии в модуле устарели:

use HTML::Template::Compiled;
use HTML::Template::Compiled::Plugin::Translate;
my $t = <<"EOM";
<%translate id="search %1:s found %2:d videos" count=".items#" args=".search,.items#" %>
EOM

my $map = {
    "search %1:s found %2:d videos" => [
        q/Suche nach "%1:s" hat %2:020d Video gefunden/,
        q/Suche nach "%1:s" hat %2:d Videos gefunden/,
    ],
};
my $plug = HTML::Template::Compiled::Plugin::Translate->new({
    lang => "de",
    map => $map,
});

my $htc = HTML::Template::Compiled->new(
    scalarref => \$t,
    plugin => [$plug],
);
$htc->param(
    search => "search term",
    items => [qw/ result1 result2 /],
);
print $htc->output;

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

С уважением, тина

...