首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在模板工具包中创建特殊的ROOT_OPS?

如何在模板工具包中创建特殊的ROOT_OPS?
EN

Stack Overflow用户
提问于 2013-03-01 22:59:57
回答 2查看 178关注 0票数 1

我在带有Template-ToolkitDancer环境中使用Locale::TextDomain

是的,我知道Dancer-Plugin-I18N,也试过,但我不想用它!

我阅读了Defining_Custom_Virtual_Methods,并根据需要对其进行了调整。

代码语言:javascript
复制
# load Template::Stash to make method tables visible
use Template::Stash;

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

在一个视图中

代码语言:javascript
复制
[% localize("Hello")  %] 

这样做效果很好。

但我想像这样包装所有的Locale::TextDomain functions

代码语言:javascript
复制
$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中创建'__‘(和好友)根操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-21 11:03:53

模板工具包不会导出以_开头的函数,因为它们被认为是私有的。您可以通过在隐藏操作之前设置以下内容来解决此问题:

代码语言:javascript
复制
$Template::Stash::PRIVATE = 0;
票数 3
EN

Stack Overflow用户

发布于 2013-03-02 00:09:16

词法分析器不会将它们识别为标识符。更改模块以接受前导_似乎远非易事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15160691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档