Develop multilingual system

随声附和 提交于 2020-01-15 08:24:11

问题


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.


回答1:


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.




回答2:


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/



来源:https://stackoverflow.com/questions/8281589/develop-multilingual-system

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!