[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cgiapp] 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


---------------------------------------------------------------------
Web Archive:  http://www.mail-archive.com/suppressed/
              http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: suppressed
For additional commands, e-mail: suppressed


Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.