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

Reply via email to