如何使用户能够使用URI语言标识符在语言之间切换

时间:2012-11-05 17:16:38

标签: php codeigniter url

我正在使用此URI Language Identifier

http://localhost/internationalisation/index.php/en/
http://localhost/internationalisation/index.php/en/welcome/
http://localhost/internationalisation/index.php/en/contact/
http://localhost/internationalisation/index.php/es/
http://localhost/internationalisation/index.php/es/welcome/

我已设置$config['lang_ignore'] = FALSE;,因此该网址会显示我目前正在使用的语言。

问题:如何让用户在语言之间切换?

View中的这些代码不起作用:

<a href="<?php echo site_url('en'); ?>">English</a>
<a href="<?php echo site_url('es'); ?>">Spanish</a>

因为他们会产生这样的链接:

http://localhost/internationalisation/index.php/en/en
http://localhost/internationalisation/index.php/en/es

由于

2 个答案:

答案 0 :(得分:1)

你有几个选择......

  • site_url将始终返回/ en或/ es或末尾路径的任何位,以便您可以使用字符串函数来修改(删除)结束位并添加自己的位。

    < / LI>
  • 您可以设置具有站点名称和引用的配置属性(“http://localhost/internationalisation/index.php”),然后附加您的语言标识符。

  • 您可以使用相对路径和basename函数以及 FILE 魔术常量

<?php echo basename(__FILE__) . '/en'; ?>

答案 1 :(得分:0)

跟随LastCoder的第一个建议:

<强> CONFIG:

$config['lang_ignore'] = FALSE;

查看:

<a href="<?php echo site_url('language/en'); ?>">English</a>
<a href="<?php echo site_url('language/es'); ?>">Spanish</a>

<强>控制器:

class Language extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();

        $this->load->helper('url');

        $lang_uri_abbr = $this->config->item('lang_uri_abbr');

        if ($this->uri->segment(2) === false ||
            ! isset($lang_uri_abbr[$this->uri->segment(2)]))
        {
            redirect();
        }
        else
        {
            $site_url = substr(site_url(), 0, -2);

            redirect($site_url . $this->uri->segment(2));
        }
    }
}