我在带有Template-Toolkit的Dancer环境中使用Locale::TextDomain。
是的,我知道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") %] 这样做效果很好。
但我想像这样包装所有的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中创建'__‘(和好友)根操作?
发布于 2014-02-21 11:03:53
模板工具包不会导出以_开头的函数,因为它们被认为是私有的。您可以通过在隐藏操作之前设置以下内容来解决此问题:
$Template::Stash::PRIVATE = 0;发布于 2013-03-02 00:09:16
词法分析器不会将它们识别为标识符。更改模块以接受前导_似乎远非易事。
https://stackoverflow.com/questions/15160691
复制相似问题