2013-03-01 5 views
1

Template-ToolkitDancer 환경에서 Locale::TextDomain을 사용합니다.Template-Toolkit에서 특수 ROOT_OPS를 만드는 방법은 무엇입니까?

그리고 예, 나는 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

Template Toolkit은 private로 간주되기 때문에 _로 시작하는 내보내기 기능을 제공하지 않습니다. 숨겨진 작업 전에 다음을 설정하여이 문제를 해결할 수 있습니다.

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

좋습니다. 이제 나는 http://www.template-toolkit.org/docs/manual/Variables.html에서 그것에 대해 읽었습니다. 그것을 놓쳤을 것입니다. 감사. – smartmeta

0

렉서는 식별자로 인식하지 않습니다. 선행을 받아들이도록 모듈을 바꾸면 _은 사소한 것 같지 않습니다.

+0

흠, 해결할 아이디어가 있습니까? – smartmeta

+0

그것은 당신의 질문이었습니다. 그리고 그것은 제가 대답 한 것입니다. – ikegami