使用codeigniter构建多语言网站的最佳方式?

时间:2011-04-04 05:40:40

标签: php codeigniter

我目前的做法是使用codeigniter提供的_remap函数来获取URI段,以检查语言是“en”还是“np”

以下是一个示例:

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。这些都是根据使用的语言字段来回应的。

3 个答案:

答案 0 :(得分:7)

很多部分。

  1. 除非您希望将其用于Google Analytics,否则您的网址并不一定需要是/ en /和/ fr /。 Spidering没有太大的区别。 Accept-Language标题可以同样可靠。

  2. 全局解析此网址细分。您可以使用this method或Accept-Language,但无论哪种方式,您都需要一个钩子,MY_Controller或扩展Lang类。

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

    WHERE lang = CURRENT_LANGUAGE

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

    < / LI>

    有一百万种方法可以做到这一切,但要考虑的不仅仅是URL。我最喜欢的

答案 1 :(得分:4)

我一直在使用this internationalization library进行codeigniter,我觉得它很适合我的需求。

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

$this->lang->lang();

答案 2 :(得分:1)

如果您有500个新闻和2种语言,在root中更改url前缀将为您提供1000个链接,让我们说“/ en / hello-world”和“/ np / hello-world”将具有相同的内容并且可能相同标题,从SEO方面可能是坏的。我会使用会话或cookie来存储首选项,以保留链接汁。