0

この質問に対する答えが見つかりませんでした...CodeigniterとMySQLデータベースに基づいた多言語のWebサイトを作成しています。静的言語テキストの場合、組み込みのlang関数を使用し、URLの最初のセグメントに従って/ en / / fr / ...適切な言語ファイルをロードしていますが、対応するデータをロードして表示するにはどうすればよいですか?データベースから?データベースにデータを保持するにはどうすればよいですか?製品テーブルがあり、エントリの半分は数値ですが、残りの半分は2つまたは3つの言語で保持する必要があるテキストです。

name_enとname_fr、description_enとdescription_fr ...をすべて同じテーブルに保持するロジックがあるので、新しい言語を追加するときにこれらの行を2倍にします。Selectクエリを作成するときは、セグメント「en」をクエリに渡し、name_またはdescription_の末尾で連結して、name_enまたはdescription_frまたはcategory_esになります。

もっと良い方法があることを願っています。すでにこれを使っている人の中には、私を助けてくれる人もいます。

4

1 に答える 1

0

多言語サポートのために 2 つのテーブルを使用しています。最初のテーブルには項目フィールドが含まれます。たとえば、日付、投票など。言語フィールドの 2 番目のテーブル。

CREATE TABLE `item` (
  `item_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `nested_category_id` int(11) DEFAULT NULL,
  `image_file` varchar(100) NOT NULL,
  `date` varchar(0) DEFAULT NULL,
  PRIMARY KEY (`item_id`)
);

CREATE TABLE `item_lang` (
  `item_lang_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `lang_id` varchar(2) NOT NULL,
  `item_id` int(11) unsigned NOT NULL,
  `url_name` varchar(255) NOT NULL DEFAULT '',
  `meta_title` varchar(255) DEFAULT NULL,
  `meta_description` text,
  `meta_keywords` varchar(255) DEFAULT NULL,
  `name` varchar(255) NOT NULL,
  `title` varchar(255) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`item_lang_id`)
);

行が必要な場合は、このように試してください。

function get_row( $id, $lg='tr'){

        $arr = array($id, $lg);

        $sql    = " SELECT ".$this->_table.".*, ".$this->_table_lang.".*
                     FROM ".$this->_table." 
                LEFT JOIN ".$this->_table_lang." 
                       ON ".$this->_table.".".$this->_table."_id = ".$this->_table_lang.".".$this->_table."_id 
                    WHERE ".$this->_table.".".$this->_table."_id = ? 
                      AND ".$this->_table_lang.".lang_id=?";

        $data   = $this->db->query($sql, $arr); 

        return ($data->row());
    }
于 2013-03-10T20:16:47.527 に答える