Hi all, I just finished the translation of web pages in our product (which uses H::T) from French to English, and now I'm *sure* that having as many template files as languages is definitely a bad idea (except if your product/site doesn't evolve anymore, which could not be a good news ;-). So i was looking for a different way of localizing my H::T
I was thinking about a solution using HTML::Template::Expr and adding a function that would directly call maketext. I'm not sure it's really different from Matthew's solution (except for the difference between Locale::Maketext and Locale::Makephrase). In my idea, the template could look like: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title><TMPL_VAR EXPR="maketext('Hello, world!')"></title> </head> <body> <b><TMPL_VAR EXPR="maketext('Hello, world!')"></b> <p><TMPL_VAR EXPR="maketext('Welcome to this website.')"></p> <!-- We could use H::T variables to have things like this : --> <p><TMPL_VAR EXPR="maketext('We have [quant,_1,visitor] today', visitor_count)"></p> </body> </html> With an appropriate H::T filter, the template could be more readable, for example using a {{ ... }} notation which would result in: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title>{{Hello, world!}}></title> ...and so on. I didn't had time to implement it, but I guess this could work. Did someone try this ? Best, Hugues ----- Original Message ----- From: "Mathew Robertson" <[EMAIL PROTECTED]> To: "Johan Kuuse" <[EMAIL PROTECTED]> Cc: <html-template-users@lists.sourceforge.net> Sent: Thursday, May 26, 2005 12:50 PM Subject: Re: [htmltmpl] HTML::Template and Locale::Maketext Hi Johan, About 18 months ago I had a similar requirement, and thus eventually got around to looking at Locale::Maketext. One of the key points that the documentation makes, is that English is not a language that you should derive your second language from. One problem I had with L::M was that it still forces some of the "English is a base language" syndrome onto the programmer. I also like the idea of not needing to distribute .po files for every GUI change. So I created Locale::MakeText. Then I patch H::T so that it is capable of supporting custom TMPL_xxx tags. Then I wrote a module to combine the two. The end result is that my translations are: - stored in a database (whenever I do do a GUI update, translations can happen in real-time) - singular/plural aware (and the rest of the ideas mentioned in L::M) - I can create custom TMPL_xxx tags (which erally rocks for some situtations). You can find this information on my website: http://members.optusnet.com.au/mathew Hope this helps, Mathew ----- Original Message ----- From: "Johan Kuuse" <[EMAIL PROTECTED]> To: <html-template-users@lists.sourceforge.net>; <cgiapp@lists.erlbaum.net> Sent: Thursday, May 26, 2005 3:40 AM Subject: [htmltmpl] HTML::Template and Locale::Maketext Hi, This is a long post, so feel free to stop reading now. :-) Anyone has used HTML::Template and Locale::Maketext together? Or HTML::Template in any I18N project? My doubts are mostly what approach I should use. The application I planning to start is not that big, but I always liked separating things: a. .pl files - For the Perl programmer. b. .html files - for the web designer c. .po and/or .pm files containing just languages hashes - for the language translator (ok, Perl hashes, but very readable even for a non-programmer) To keep things separated, there is a problem: 1. If, on one hand, I want to use one single HTML::Template for the output in different languages, the template itself cannot have any "fixed strings" in one languages, but has to be filled up only with <TMPL_VAR NAME=xxx> tags for every single message. This makes the job tougher for the web designer (the web page preview will be almost unreadable). 2. If, on the other hand, one HTML::Template per language, the translator has to know some HTML to create a HTML::Template with "fixed strings" in her/his language. And this means that the web designer will end up with one template per language, which also is undesirable. Any suggestions are appreciated. I will try explaining details of the problem by using a couple of examples: Approach 1, using one template for all languages: hello.pl # ---------------------------------------- #!/usr/bin/perl -w use HTML::Template; use MyApp:I18N; my $locale = $ARGV || 'en'; # Use English as default my $lh = MyApp::I18N->get_handle($locale) || die "Can't get a language handle!"; # open the html template my $template = HTML::Template->new(filename => 'hello.world.tmpl.html'); # fill in some parameters $template->param( HELLO_WORLD => $lh->maketext("Hello, world!"), WELCOME_TO_THIS_WEB_SITE => $lh->maketext("Welcome to this web site."), ); # send the obligatory Content-Type and print the template output print "Content-Type: text/html\n\n", $template->output; # ---------------------------------------- hello.world.tmpl.html # ---------------------------------------- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title><TMPL_VAR NAME=HELLO_WORLD></title> </head> <body> <b><TMPL_VAR NAME=HELLO_WORLD></b> <p><TMPL_VAR NAME=WELCOME_TO_THIS_WEB_SITE></p> </body> </html> # ---------------------------------------- MyApp/I18N/en.pm # ---------------------------------------- package MyApp::I18N::es; # Spanish language messages use base qw(MyApp::I18N); use strict; use vars qw(%Lexicon); %Lexicon = ( # Message to translator: Start here! "Hello, world!" => "Hello, world!", "Welcome to this website." => "Welcome to this website.", # Message to translator: Stop here! ); # ---------------------------------------- MyApp/I18N/es.pm # ---------------------------------------- package MyApp::I18N::es; # Spanish language messages use base qw(MyApp::I18N); use strict; use vars qw(%Lexicon); %Lexicon = ( # Mensaje a traductor: ¡Empieza aquí! "Hello, world!" => "¡Hola, mundo!", "Welcome to this website." => "Bienvenido a este sitio web.", # Mensaje a traductor: ¡Termina aquí! ); # ---------------------------------------- MyApp/I18N/se.pm # ---------------------------------------- package MyApp::I18N::es; # Swedish language messages use base qw(MyApp::I18N); use strict; use vars qw(%Lexicon); %Lexicon = ( # Meddelande till översättaren: Börja här! "Hello, world!" => "Hej, världen!", "Welcome to this website." => "Välkommen till den här webbsajten.", # Meddelande till översättaren: Sluta här! ); # ---------------------------------------- Approach 2, using one template per language: hello.pl # ---------------------------------------- #!/usr/bin/perl -w use HTML::Template; my $locale = $ARGV || 'en'; # Use English as default my $filename = 'hello.world.tmpl.html.' . $locale; # open the html template my $template = HTML::Template->new(filename => $filename); # send the obligatory Content-Type and print the template output print "Content-Type: text/html\n\n", $template->output; # ---------------------------------------- hello.world.tmpl.html.en # ---------------------------------------- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title>Hello, world!</title> </head> <body> <b>Hello, world!</b> <p>Welcome to this website.</p> </body> </html> # ---------------------------------------- hello.world.tmpl.html.es # ---------------------------------------- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title>¡Hola, mundo!</title> </head> <body> <b>¡Hola, mundo!</b> <p>Bienvenido a este sitio web.</p> </body> </html> # ---------------------------------------- hello.world.tmpl.html.se # ---------------------------------------- <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> <html> <head> <title>Hej, världen!</title> </head> <body> <b>Hej, världen!</b> <p>Välkommen till den här webbsajten.</p> </body> </html> # ---------------------------------------- Best Regards, Johan Kuuse ------------------------------------------------------- SF.Net email is sponsored by: GoToMeeting - the easiest way to collaborate online with coworkers and clients while avoiding the high cost of travel and communications. There is no equipment to buy and you can meet as often as you want. Try it free.http://ads.osdn.com/?ad_idt02&alloc_id135&op=ick _______________________________________________ Html-template-users mailing list Html-template-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/html-template-users ------------------------------------------------------- SF.Net email is sponsored by: GoToMeeting - the easiest way to collaborate online with coworkers and clients while avoiding the high cost of travel and communications. There is no equipment to buy and you can meet as often as you want. Try it free.http://ads.osdn.com/?ad_idt02&alloc_id135&op=ick _______________________________________________ Html-template-users mailing list Html-template-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/html-template-users ------------------------------------------------------- SF.Net email is sponsored by: GoToMeeting - the easiest way to collaborate online with coworkers and clients while avoiding the high cost of travel and communications. There is no equipment to buy and you can meet as often as you want. Try it free.http://ads.osdn.com/?ad_idt02&alloc_id135&op=click _______________________________________________ Html-template-users mailing list Html-template-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/html-template-users