2011-04-04 12 views
9

私の現在のアプローチは、言語が「エン」または「NP」であればここでcodeigniterで多言語サイトを構築する最も良い方法は?

をチェックするために、URIセグメントを取得するためのCodeIgniterが提供する機能を_remapするために使用することであったが、サンプルです:

function _remap($url_title){ 

    $this->_identify_language($this->uri->segment(1)); 

    $data ['sub_categories'] = $this->category_model->get_category_list_by_url($url_title)->result_array(); 
    $data ['news'] = $this->news_model->get_news_list_by_url($url_title)->result_array(); 
    $data ['url_title'] = $url_title; 

    $this->_render_front_view('main',$data); 
} 

私はすべてのコントローラでこのテクニックを使用しています。それはあまり効率的ではありません。

セッションを使用して言語コードを格納する方が良いか、私の現在のテクニックで十分ですか?

私はこの多言語のことをすることができます他の方法はありますか?

もちろん私のデータベースは2つの言語学のために形成されており、私はフィールドを分けています。例: - title_en、title_np。これらは使用される言語フィールドに従ってエコーされます。

答えて

7

これには多くの部分が含まれています。

  1. Googleアナリティクスで使用する場合を除き、URLは/ en /と/ fr /である必要はありません。スパイダリングは大きな違いにはなりません。 Accept-Languageヘッダも同様に信頼性があります。

  2. このURLセグメントをグローバルに解析します。 this methodまたはAccept-Languageを使用できますが、フックが必要な場合はMY_Controllerか、Langクラスを拡張してください。

  3. さまざまな言語を完全に分離したいと考えてください。たとえば、フランス語に翻訳されていない英語ページがあり、フランス語ページが存在しない場合は、英語ページまたは404が表示されますか? lang = frをデータベースに格納し、フック/ MY_Controller/etcの定数セットから値を取得することができます。

    LANG = CURRENT_LANGUAGE

  4. 構造あなたのDB。 title_en title_frは1つの方法ですが、すぐにそれは多くの言語では扱いにくいためです。 "ページ"と "page_content"テーブルを持つので、すべての一般的な情報が1つのテーブルにあり、すべての言語(タイトル、コンテンツ、メタなど)はlangフィールドを持つpage_contenテーブルにあります。

これを実行する方法は数百万もありますが、URLだけではなく、さらに多くのことを考えることができます。私のお気に入り

1

500のニュースと2つの言語がある場合、ルートのURLプレフィックスを変更すると1000リンクが得られます。「/ en/hello-world」と「/ np/hello-world」の内容は同じです。同じタイトルは、SEOの面から悪いことができます。リンクジュースを保存するために、セッションやクッキーを使用して環境設定を保存します。

4

私はcodeigniterにthis internationalization libraryを使用しています。私はそれが私のニーズに合っていると思います。

これはLangクラスを拡張し、コンストラクタでURIを解析して使用する言語を特定します。したがって、言語ファイルを使用する前にロードされます。コントローラにコードを追加する必要はありません。言語オブジェクトの設定を変更するだけです。現在の言語は、通常と同じように取得できます。

$this->lang->lang(); 
関連する問題