1

私はPHPサイトを持っています。次に、ユーザーが好みの言語を選択できるオプションを追加して、サイトを多言語サイトに「変換」する必要があります。最初に 2 つの言語が必要で、必要に応じて新しい言語を追加するスマートな方法が必要だとします。

データベース VS 言語ファイル...

私が知っているように、2つのオプションがあります。

1)言語、翻訳などでMySQLデータベーステーブルを使用でき、ユーザーの好みの言語に基づいて毎回データベースからデータを取得できます。これは、多くのデータベースリクエストを意味します。

2)コマンドを使用して外部言語のPHPファイルを使用できますdefine(fr.php eng.phpなどの言語フォルダーに異なる言語ファイルを持つ一部のeコマースフレームワークなど)

何が良いですか?答えは、次の議論とその長所と短所に基づいている必要があります。

1) 最高のパフォーマンス

2) 柔軟性

3) より効率的

4) インテリジェントな方法

5) リソースの使用状況 (CPU、メモリなど)

PS ウェブサイトの Google 翻訳ツールは、私の場合は適切なソリューションではありません。

4

1 に答える 1

2

私の正直な意見では、データベース ソリューションは非常に高価であり、実際には必要ありません。おそらくあなたのウェブサイトには、静的な (変化しない) 言語フレーズがあります。この場合、言語配列を使用してそれらを保存し、$array['key'] = 'phrase'グローバルなものを介してそれらを取得できるようにする必要があります。このようなもの:

class Lang {

    private static $loaded;
    private static $array;

    private static function set($key, $value) {
        self::$array[$key] = $value;
    }

    public static function get($key, $default = 'empty') {
        $lang = LANG;
        $file = "lang/$lang.php";
        if (!in_array($lang, self::$array) and file_exists($file)) {
            include($file);
            self::$loaded[] = $lang;
        }
        return (isset(self::$array[$key])
            ? self::$array[$key]
            : $default;
    }

}

次に、言語ファイルをlang/en.phpまたはとして保存する必要がありますlang/it.php...これには、次のようなものが含まれます。次に、各要求に対して正しいものにself::set('MY_KEY', 'This is a phrase'); 設定するだけです。LANG定数を使用しましたLANGが、グローバルなものを保存する方法は他にもあります。

非静的クラスを使用することができ、おそらく推奨されます。そのような:

class Lang {

    private $lang;

    public function __construct($lang) {
        $file = "lang/{$lang}.php";
        if (file_exists($file))
            include($file);
    }

    private function set($key, $value) {
        $this->lang[$key] = $value;
    }

    public function get($key, $default = 'empty') {
        return (isset($this->lang[$key])
            ? $this->lang[$key]
            : $default;
    }

}

ただし、依存性注入を使用して、必要なたびにこのクラスを注入する必要があります。使用例:

$lang = new Lang('en');
$lang->get('LANG_KEY');
于 2012-04-06T17:11:17.167 に答える