in reply to Concepts of multilangual CGI-Website?
Hi Yaerox. The thread you referenced is well-found; it contains three posts, each with a good idea.
You will have to decide whether storing in a DB or in text files is the best solution for you (the questions of how the text is updated, and by whom, will be most of the decision, IMO). But whatever you do about that, you will need to get the text out of your code, and one step more, out of the HTML.
Personally I have used, for big projects and for small, and I really like using, the Template Toolkit -- I find it easy to use and very powerful. You can pass complex data structures to the template and process them with conditional logic, or you can use logic to design your template library and pass simple data to the templates. You'll also be able to use the same system for other output, such as email messages you need to send in different languages, etc.
You might have to spend a few days figuring out your setup, but once you have it going you will have an easy time.
Basically you should separate the text both from the programmatic code, and from the display code.
[ Perl programs to create output data ] V [ Languages library in DB or textfiles ] V [ Template Toolkit templates to display output ]
For your example, you could make the change to your demo program as simple as follows:
#!/usr/bin/perl # Includes use strict; use warnings; use MyPackages; use Template; my $tt = Template->new({ INCLUDE_PATH => '/usr/local/templates', INTERPOLATE => 1, }) || die "$Template::ERROR\n"; my ($lang, $data) = &MyPackages::MyFunctions(); # Module above changed to return data, not HTML # You're going to love deleting all that non-perl code!!! # $data is { first_name => 'Joe', last_name => 'Bloe' } $tt->process("${lang}/homepage.tmpl", $data) || die $tt->error(), "\n";
# in en/homepage.tmpl Welcome $first_name $last_name # or, if you set INTERPOLATE to 0 Welcome [% first_name %] [% last_name %] # in es/homepage.tmpl Bienvenido $first_name $last_name # ...
And so on.
I strongly recommend keeping separate templates for your languages rather than trying to build on the fly, as in
# in single_template.tmpl # Do not do this! $welcome $first_name $last_name, $next_sentence. $second_paragraph. ...
Languages are too different in structure for that.
Good luck: I think you will do fine, based on how you have researched your question so far. You have a lot of work ahead for a few weeks, then one day you will notice that you are able to advance much. much quicker than before the upgrade.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Concepts of multilangual CGI-Website?
by Yaerox (Scribe) on Jul 10, 2015 at 12:51 UTC | |
by 1nickt (Canon) on Jul 10, 2015 at 14:45 UTC | |
by Yaerox (Scribe) on Jul 13, 2015 at 05:53 UTC | |
|
Re^2: Concepts of multilangual CGI-Website?
by Yaerox (Scribe) on Jul 13, 2015 at 07:53 UTC |