http://qs321.pair.com?node_id=11148919


in reply to Multilingual design

My own webserver uses TT. Text in the templates is defined in English, but with a translate callback, something like this:

<h1>[% tr.tr("Hello World") %]</h1> <p>[% tr.tr("Your new username is") %][% tr.quote(username) %]</p>

Basically, i'm registering a plugin into TT that provides a few functions. That includes making variables websafe as well to reduce the possibility of code injection. I haven't touched that particular code in a long, long time, but basically, you start by creating a TT plugin module

package PageCamel::Web::TT::Translate; ... use base qw(Template::Plugin); use Template::Plugin; use Template::Exception; sub load($class, $context) { my $self = bless { }, $class; return $self; } sub new($self, $context) { return $self; } sub tr($self, $data) { return $data if($data eq ''); my $lang = $self->getLang; my $trans = tr_translate($lang, $data); return $trans; <} ...

And then you provide that plugin when instatiating the Template Toolkit:

use Template; ... my $tt = Template->new({ PLUGINS => { tr => 'PageCamel::Web::TT::Translate', }, });

And since you provide the original, untranslated text in the Template, you can return that as default when no translation is found. Plus, automatically add it to the "still to be translated" list.

Original codebase of mine is open source.

PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP

Replies are listed 'Best First'.
Re^2: Multilingual design
by Bod (Parson) on Dec 18, 2022 at 21:59 UTC
    registering a plugin into TT that provides a few functions

    What an elegant solution - thanks for sharing

    I hardly use callbacks in Template so forget that thy exist! This alone is reason to take another little look at using them...