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.

Remember: Ne dederis in spiritu molere illegitimi!

Replies are listed 'Best First'.
Re^2: Concepts of multilangual CGI-Website?
by Yaerox (Scribe) on Jul 10, 2015 at 12:51 UTC
    I really appreciate your reply sir,
    and I know there are really great techniques to do things, but I think I'll go with the more simple way and build 2 database tables and get data once the pages loads.
    Why I don't use a module? Well, I'll in future. I'm on this project for around 6 months now. The project needs to get ready for a realistic simulation right now, so I'll do it this way because It's simple and it requires only some effort.

    While developing this project I found alot of places where I feel like I have to change this in future. I feel like I'm always rising with my project ;) Based on the fact that I love using template-based homepages, I'll look to get an workaround to get into it and implement this on version 2 of my project.

    I took a little closer look (around 30 minutes) on this toolkit-template and I don't feel like I understood how it works. Now that I got an example of you, I'll work on this again in near future. Thanks for this example too.

    Have a good day.

      Always, the way forward is with a minimal test. It will always be overwhelming to think about converting what you have to ... anything! That is how most projects turn into a mess, because the developer is too intimidated by the size of the task involved in upgrading.

      To solve this, start small. In the case of converting a site where all the HTML is hard-coded in the Perl, and you are considering moving to a Template system, this means: do not consider trying to accomplish all the job! Consider instead taking the first step.

      • Install TT2, and in a completely separate project, write a 10-line Perl script that uses a 10-line template to output an HTML page. Make sure the Perl script uses no HTML and no hard-coded text that will be in the output.
      • This will take you ~ 30 minutes. After, enjoy the feeling of awesomeness you get from separating your HTML from your Perl. Have a cup of tea, then go back to your regular work. Even if this means going temporarily down the "wrong" path.
      • Next day, or next chance you get, go back to your new stuff and make the template pull in ("Process") another 10-line template. Put some condition in the Process directive in your main template so the sub-template is "chosen" in some way. (Like you might do with languages).
      • This will take you ~ 30 minutes. After, enjoy the feeling of awesomeness you get as you realize that structurally, you are now halfway to your goal. Have a cup of tea, then go back to your regular work. Be prepared to feel impatient with your regular work, and to stay late after getting it done, to work on your new project.

      And so on. Within less time that you imagine it will take, you will be on your way to an upgrade. But you have to take the first step . . . in the right direction.

      Remember: Ne dederis in spiritu molere illegitimi!
        I know you're right, that's why I'll give it a try today. I do those first step to get into it.
Re^2: Concepts of multilangual CGI-Website?
by Yaerox (Scribe) on Jul 13, 2015 at 07:53 UTC
    Do you got an idea how do I use this if I got a dynamic website? Do I have to edit the template every time?

    Example: My website gets data out of a database to fill tables.