http://www.perlmonks.org?node_id=204099


in reply to Do I need an array within an array

Another, perhaps better way, of supporting multiple
languages is to separate your document design from your
content/language design.

Here's what I mean. You can use a set of
<language_tags> to hold your language variable text
content, and design your web page separately.

Next, create as many libraries as you have languages.
Each library consists entirely of a large hash, so
French.pm might look like:
package MyWebsite::French; %translation { tag_color => 'rouge'; tag_street => 'rue'; tag_hooligan => 'anglais'; #etc }; 1;
Finally, write a brief preparsing program that takes
your one and only web page, sucks in each
library in turn, and spews out the appropriate static
web page, with your <preparsing_tags> replaced
with the correct language.

This makes maintenance a great deal easier, and saves
having to do translations on the fly.

Instead, have your CGI invoke the correct static,
translated web page on the fly, based upon their
browser preferences, or whatever.

This method can also be combined with HTML::Template
for superior results, by having preparsed, translated web pages
each of which also possess your HTML::Template tags.

Jens

--
Microsoft delendum est.

Replies are listed 'Best First'.
Re: Another way of doing foreign language support
by bart (Canon) on Oct 10, 2002 at 21:28 UTC
    so French.pm might look like:
    package MyWebsite::French; my %translation { tag_color => rouge; tag_street => rue; tag_hooligan => anglais; #etc 1; }
    Would you please clean up your code, this is jibberish. You have a lexical hash, which is not accessible outside of this module file; a block of which I assume it is supposed to represent an anonymous hash AKA a hash ref, your strings on the RHS of the arrows are unquoted, you separate the key/value pairs with semicolons instead of comma's, and you have a "1;" inside the hash definition instead of after it. Plus there is no "=" sign connecting the hash and the data. Well, at least your comment uses the correct delimiter. ;-)

    Cleaned up:

    package MyWebsite::French; %translation = ( tag_color => 'rouge', tag_street => 'rue', tag_hooligan => 'anglais', #etc ); 1;
    Now, one can have access to this hash via %MyWebsite::French::translation.

    Otherwise, your suggestion to use a template module sounds good to me.