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=click _______________________________________________ Html-template-users mailing list Html-template-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/html-template-users