2011-04-04 75 views
9

我目前的做法是使用到_remap由笨得到URI段,以提供功能检查,如果语言是“en”或“NP”用codeigniter建立多语种网站的最佳方法是什么?

这里有一个例子:

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 Analytics,否则您的网址并非真的必须为/ en /和/ fr /。蜘蛛并没有太大的变化。 Accept-Language标头可以一样可靠。

  2. 全局解析此URL段。您可以使用this method或Accept-Language,但无论使用哪种方式,您都需要挂钩,MY_Controller或扩展Lang类。

  3. 想想如果你想让不同的语言完全分开。例如,如果我的英文页面没有翻译成法文,并且法文页面不存在,它应该显示英文页面还是404页面?您可以将lang = fr存储在数据库中,并从挂钩/ MY_Controller/etc中设置的常量中获取该值。

    其中lang = CURRENT_LANGUAGE

  4. 结构的数据库。 title_en title_fr是一种方法,但它很快就会因为许多语言无法运行。有一个“pages”和“page_content”表,以便所有通用信息都在一个表中,然后所有语言特定的(标题,内容,元等)位于具有lang字段的page_conten表中。

有上百万种方法可以做到这一点,但除了URL之外还有很多需要考虑的方法。我的最爱

1

如果你有500条新闻和2种语言,在根目录中改变url前缀会给你1000个链接,可以说“/ en/hello-world”和“/ np/hello-world”将会有相同的内容,相同的标题,这可能会从SEO方面不好。我会使用会话或cookie来存储偏好,以保持链接果汁。

4

我一直在使用this internationalization library进行codeigniter,我发现它非常适合我的需求。

它扩展了Lang类,然后在构造函数中解析URI以确定使用哪种语言。所以它只是在你使用任何语言文件之前加载。您不需要将任何代码添加到您的控制器。它只是改变语言对象中的设置。因此,您可以像通常那样检索当前的语言:

$this->lang->lang(); 
相关问题