Question

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.

Was it helpful?

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.

OTHER TIPS

First of all you don't need to have more language in a file. Keep each language in distinct file.

  1. It's cleaner
  2. You can make a script to compare the keys defined. If a file is missing a key, you can alert people to repair this situation.

Don't forget you may keep and other setting in language files like : date format, number formatting,etc/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top