2

这更像是一个分析问题。

我需要知道如何最好地制作多语言系统,也就是用户可以更改语言的系统。该语言将存储在 cookie 或数据库中。
我过去曾为每种语言使用不同的文件,例如:

nl.php

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

en.php

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

索引.php

include($language . '.php');

如您所见,该系统既低效又不安全。有更好的方法吗?我现在可以想到几种方法来做到这一点,但我真的不知道哪种方法会好。

谁能帮我这个?请不要只说“这样做!”,还要告诉我为什么这是一个好方法。

4

2 回答 2

4

好吧,如果您不需要提供通过 Web 界面更改本地化文本的功能,您可以这样做:

包括/locales.php

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

索引.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"];

这是最快的方法,因为用哈希解析单个包含文件是非常快速的操作。如果您需要提供通过 Web 界面修改本地化字符串的能力,那么您需要将本地化字符串存储在 DB 中,并在每次显示页面时从那里读取它们......这种方法更慢。

于 2011-11-26T21:09:03.727 回答
0

首先,您不需要在文件中包含更多语言。将每种语言保存在不同的文件中。

  1. 它更干净
  2. 您可以编写一个脚本来比较定义的键。如果文件缺少密钥,您可以提醒人们修复这种情况。

不要忘记您可以在语言文件中保留和其他设置,例如:日期格式、数字格式等/

于 2011-11-26T21:37:32.810 回答