[Catalyst] I18N with variables

Ben van Staveren benvanstaveren at gmail.com
Fri Aug 6 15:22:48 GMT 2010

Hi Bill,

Back in the day (heh) we faced the same problem for an app we were doing 
for a client, because the client insisted they wanted the ability to do 
their own translations, we ended up with text keyed on the location 
where it was called from, and the actual english string. So in a 
template we'd get

index.tt2(hello there, customer) as the key, but inside the template it 
was generated by doing [% f.xlat("hello there, customer") %] - or if you 
wanted parameters it was more like [% f.xlat("hello there, %", 
array_of_data) %].

We used one script that would just walk the template directory, and 
would set up the stash like this:

$stash = {
  f => {
    xlat => sub {
      my $string = shift;
      my @params = (@_);

We'd run it, and based on filename and the actual string passed it'd 
generate the "master key file" - some more scripts would look at 
duplicates (e.g. if more than one template contained the same string) 
and would generate a yaml configuration file containing a string => 
template mapping.

Similarly, inside perl modules we used the same mechanism, also 
described this in an earlier reply; where all translation strings *had* 
to be "registered" during module initialisation and it would then dump 
these to it's own master key file.

Rinse, repeat, merge. This then ended up going through the actual 
application's admin interface into the database, where it'd also flag 
everything that required translation into the available languages, so 
that the clients' translator team could go and take care of it.

In the end probably not the most graceful of solutions, and error-wise 
there were a few where certain phrases could have different meanings 
based on context but the code couldn't determine that - but usually that 
got fixed with a little rephrasing in choice locations :)

That's also the system I'm currently using in a slightly modified form 
for the webshop I'm building at the moment. I'll see if I can roll it 
all up into something distributable and put it online for download but 
that will have to happen some time later.

Bill Moseley wrote:
> On Fri, Aug 6, 2010 at 6:16 AM, Matthias Dietrich <mdietrich at cpan.org 
> <mailto:mdietrich at cpan.org>> wrote:
>     I'm using short identifiers for my I18N texts, like
>     "Home.Greeting" which is then translated to "Hi there" for en_us
>     or "Hallöchen" for de_de.  When I added a small CMS to a
>     customer's application all texts should also be translated.  So I
>     saved any text to I18N key CMS.NavigationPoint.PageKey.* within
>     the right language "file" (actually I'm using C::P::I18N::DBI), *
>     for "Title" or "Content" or similar.
> I've been arguing with work about how to key our text.  So far we 
> continue to use the English in the loc() tags in the templates, and 
> then the I18N team uses a script to pull out this text which gets sent 
> to translation services.
> The risk is text gets into the templates that for some reason does not 
> get pulled out.  The developers like the English in the templates as 
> it makes them easy to read, and it means they don't really have to 
> stop when entering new text.  Just seems like in the long run this 
> will be unmaintainable and error prone.  (Well, not in the long run as 
> it already is error prone.)
> I've been arguing for a system where we use some kind of ID for the 
> keys.  I'm not so sure the key format matters -- could be just a 
> primary key in the db, for example.  This could be a stage done by the 
> designers so the design spec just indicates a message id.  Then code 
> development and translation can happen at the same time.
> Is anyone using a system like that?  And more specifically, what 
> application are you using to manage the translation database?  We have 
> started to write one, but it's a bit more than trivial as we need it 
> to work with different translation services, track history/changes, 
> multiple applications, etc.  So, it would make more sense to use an 
> existing tool.
> So, I'd like to hear about your translation workflow and any tools you 
> are using.
> Thanks,
> -- 
> Bill Moseley
> moseley at hank.org <mailto:moseley at hank.org>
> ------------------------------------------------------------------------
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/

Ben van Staveren
phone: +62 81 70777529
email: benvanstaveren at gmail.com

More information about the Catalyst mailing list