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

Reply via email to