2012-04-06 17 views
1

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

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

私は2つの選択肢がある知っているよう。

1)私は、言語、翻訳、などとデータベース要求の多くを意味DBからデータを取得するために、ユーザーの優先言語に基づいたびにMySQLデータベースのテーブルを使用することができます。

2)私は(defineコマンドを使用して外部の言語のPHPファイルを使用することができ、そのようなfr.php eng.phpなどなどの言語フォルダに異なる言語ファイル)

より良い何ですかを持っているいくつかの電子商取引の枠組みのような?答えは、その長所と短所に基づいて、次の議論に基づいていなければなりません。

1)最高の性能

2)柔軟性

3)より効率的な

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

P.S.

4)インテリジェント方法ウェブサイト用のGoogle翻訳ツールは、私の場合、適切な解決策ではありません。

+0

私の仕事では常に言語ファイルを使用していました。それらはサーバー上に存在し、フレームワーク経由で簡単にアクセスでき、応答時間は無制限です。あなたのデータベースなどがダウンした場合(maintやそれ以外の場合)、少なくともあなたの言語は常にユーザーが利用できるようになります。これをDBに入れるのは良い考えではないというだけではなく、私はもう少し経験を積んでいます。 –

+0

この質問をご覧ください:http://stackoverflow.com/questions/8281589/develop-multilangual-system – raPHPid

答えて

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');