开发者

Best way to build a multilingual site with codeigniter?

My current approach has been to use to _remap function provided by codeigniter to get the URI segment in order to check if the language is "en" or "np"

Here is a sample:

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

I am using this technique on every controller. Wh开发者_StackOverflowich is well not very efficient.

I wanted to ask if using sessions to store language codes would be better or is my current technique good enough?

Are there any other ways i can do this multi-lingual thing?

Of course my database is currently shaped for 2 lanaguages and i have seperated the fields. e.g:- title_en, title_np. these are echoed according to the language field used.


Lots of parts to this.

  1. Your URL's do not really need to be /en/ and /fr/ unless you want it to be used for Google Analytics. Spidering doesn't make a lot of difference. Accept-Language headers can be just as reliable.

  2. Globally parse this URL segment. You can use this method or the Accept-Language, but either way you need a hook, a MY_Controller or extend the Lang class.

  3. Think about if you want the different languages to be totally seperate. For example, if I have an English page not translated to French, and the French page does not exist, should it show the English page or 404? You can either store the lang = fr in the database and take the value from a constant set in the hook/MY_Controller/etc.

    WHERE lang = CURRENT_LANGUAGE

  4. Structure your DB. title_en title_fr is one method, but it soon because unmanagable with lots of languages. Have a "pages" and "page_content" table, so that all generic information is in one table then all language specific (title, content, meta, etc) is in the page_conten table, which has a lang field.

There are a million ways to do all of this, but there is lots more to think about than just the URL. My favourite


I have been using this internationalization library for codeigniter and I find it suits my needs pretty well.

It extends the Lang class, and then in the constructor it parses the URI to figure out which language to use. So it is just loaded before you use any language files. You don't need to add any code to your controllers. It simply changes the setting in the language object. So you can retrieve the current language the same as you normally would:

$this->lang->lang();


If you have 500 news and 2 languages, changing url prefix in root will give you 1000 links, lets say "/en/hello-world" and "/np/hello-world" will have identical content and possibly the same title, which can be bad from SEO aspect. I would use session or cookies to store preferences, to preserve link juice.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜