2013-03-01 3 views
1

J'utilise Locale::TextDomain dans un environnement Dancer avec Template-Toolkit.Comment créer des ROOT_OPS spéciaux dans Template-Toolkit?

Et oui, je connais Dancer-Plugin-I18N et l'ai essayé, mais je ne veux pas l'utiliser! J'ai lu Defining_Custom_Virtual_Methods et l'ai ajusté à mes besoins.

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

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

et en vue

[% localize("Hello") %] 

Cela fonctionne très bien.

Mais je voudrais WRAPP tous les Locale::TextDomain functions comme:

$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, @_) }; 

mais malheureusement il est impossible l'utilisation « __ » ou « __x » comme jeton. Donc, ma question: Comment créer des opérations root '__' (et friends) dans Template-Toolkit?

Répondre

3

Template Toolkit n'exporte pas les fonctions commençant par _ car elles sont considérées comme privées. Vous pouvez contourner ce problème en définissant les paramètres suivants avant vos opérations Stash:

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

Génial. Maintenant, j'ai lu à ce sujet dans http://www.template-toolkit.org/docs/manual/Variables.html. Doit l'avoir manqué. Merci. – smartmeta

0

La lexeur ne les reconnaît pas comme des identifiants. Changer le module pour accepter _ leader semble être loin d'être trivial.

+0

Hmm, avez-vous des idées pour contourner ce problème? – smartmeta

+0

C'était votre question, et c'est ce que j'ai répondu. – ikegami

Questions connexes