2013-03-01 2 views
1

Я использую Locale::TextDomain в среде Dancer с Template-Toolkit.Как создать специальный ROOT_OPS в Template-Toolkit?

И да, я знаю Dancer-Plugin-I18N и попробовал, но я не хочу его использовать!

Я прочитал Defining_Custom_Virtual_Methods и скорректировал его для моих нужд.

# load Template::Stash to make method tables visible 
use Template::Stash; 

$Template::Stash::ROOT_OPS->{ 'localize' } = sub { 
    return __(shift); 
}; 

и в представлении

[% localize("Hello") %] 

Это работает очень хорошо.

Но я хотел бы wrapp все Locale::TextDomain functions как:

$Template::Stash::ROOT_OPS->{__} = sub { return __x(shift) }; 
$Template::Stash::ROOT_OPS->{__x} = sub { return __x(shift, @_) }; 
$Template::Stash::ROOT_OPS->{__n} = sub { return __n(shift, shift, shift) }; 
$Template::Stash::ROOT_OPS->{__nx} = sub { return __nx(shift, shift, shift, @_) }; 
$Template::Stash::ROOT_OPS->{__xn} = sub { return __xn(shift, shift, shift, @_) }; 
$Template::Stash::ROOT_OPS->{__p} = sub { return __p(shift, shift) }; 
$Template::Stash::ROOT_OPS->{__px} = sub { return __px(shift, shift, @_) }; 
$Template::Stash::ROOT_OPS->{__np} = sub { return __np(shift, shift, shift, shift) }; 
$Template::Stash::ROOT_OPS->{__npx} = sub { return __npx(shift, shift, shift, shift, @_) }; 

, но, к сожалению, не представляется возможным использование «__» или «__x» в качестве маркера.

Итак, мой вопрос: как мне создать корневые операции «__» (и друзей) в Template-Toolkit?

ответ

3

Шаблон Toolkit не экспортирует функции, начинающиеся с _, потому что они считаются закрытыми. Вы можете обойти это, установив следующие операции:

$Template::Stash::PRIVATE = 0; 
+0

Отлично. Теперь я прочитал об этом в http://www.template-toolkit.org/docs/manual/Variables.html. Должно быть, это пропустило. Благодарю. – smartmeta

0

Лексер не распознает их как идентификаторы. Изменение модуля для приема ведущего _ кажется далеким от тривиального.

+0

Хм, любые идеи для работы? – smartmeta

+0

Это был ваш вопрос, и вот что я ответил. – ikegami

Смежные вопросы