phptranslationmultilingualanalytical

Develop multilingual system


This is more of an analytical question.

I need to know how best to make a multilingual system, a.k.a. a system where the user can change the language. The language will be stored in a cookie or a database.
I've worked in the past with different files for each language, for example:

nl.php

$lang['hi'] = 'Hoi';
$lang['howareyou'] = 'Hoe gaat het?';

en.php

$lang['hi'] = 'Hi'];
$lang['howareyou'] = 'How are you?';

index.php

include($language . '.php');

As you can see, this system is both inefficient and insecure. Is there a better way to do it? I can think of a few ways to do this this instant, but I don't really know which one would be good.

Can anyone help me with this? Please don't just say "Do it like this!", also tell me why it is a good way to do it.


Solution

  • Well, if you don't need to provide ability to change localization texts via web interface, you can just do it like this:

    include/locales.php

    <?php
        if (!isset($locales)) {
            $locales = array(
                "en" => array(
                    "hi" => "Hi",
                    "howareyou" => "How are you?"
                ),
                "nl" => array(
                    "hi" => "Hoi",
                    "howareyou" => "Hoe gaat het?"
                )
            );
        }
    ?>
    

    index.php

    include("include/locales.php");
    if (!isset($locales[$language])) $locale = $locales[$deflang]; // $deflang could be "en"
    else $locale = $locales[$deflang];
    
    echo $locale["hi"]." ".$locale["howareyou"];
    

    This is the fastest approach, because parsing single include file with hash is very fast operation. If you need to provide ability to modify localization strings via web interface, then you will need to store localization strings in DB and read em from there each time you show a page... This approach is way more slow.