【问题标题】:Develop multilingual system开发多语言系统
【发布时间】:2011-11-26 21:02:24
【问题描述】:

这更像是一个分析问题。

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

nl.php

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

zh.php

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

index.php

include($language . '.php');

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

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

【问题讨论】:

    标签: php translation multilingual analytical


    【解决方案1】:

    好吧,如果您不需要提供通过 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?"
                )
            );
        }
    ?>
    

    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"];
    

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

    【讨论】:

    • ... 这就是重点。我需要能够通过网络界面轻松更改语言。
    • 在这种方法中通过 Web 界面更改语言有什么问题?我正在使用您的 $language 变量作为从 cookie 或您喜欢的任何地方传递的语言标识符。我的意思是您不能更改语言 strings,而不是用户想要查看页面的语言。
    • 但是这种方式在某种程度上似乎效率低下:\ 有没有一种方法可以让我例如用荷兰语/英语制作整个系统,并且多语言系统可以随时随地翻译字符串中的所有内容在另一个文件中?
    • 会慢一些。而且更复杂。
    • 我如何将它用于像“Welcome, $user!”这样的字符串?因为显然我需要在脚本顶部包含语言环境文件,但是在包含语言环境文件后变量用户可能会更改...
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多