Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Multilingual design

by cavac (Vicar)
on Dec 16, 2022 at 09:57 UTC ( #11148919=note: print w/replies, xml ) Need Help??

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>[%"Hello World") %]</h1> <p>[%"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 (Priest) 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...

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11148919]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (2)
As of 2023-03-26 08:11 GMT
Find Nodes?
    Voting Booth?
    Which type of climate do you prefer to live in?

    Results (63 votes). Check out past polls.