Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter错误中的开关语言_Php_Codeigniter_Codeigniter 3_Multilingual - Fatal编程技术网

Php codeigniter错误中的开关语言

Php codeigniter错误中的开关语言,php,codeigniter,codeigniter-3,multilingual,Php,Codeigniter,Codeigniter 3,Multilingual,我有多语言库和简单的切换器。我有三门语言,英语、德语和俄语。默认值为德语 当选择默认语言时,站点url看起来像mysite.com,如果更改为en或ru,则url看起来像mysite.com/en和mysite.com/ru。当我从en-ru或ru-en更改时,url看起来像mysite.com/en/ru,并给出404错误 交换机是: <?php foreach ($languages as $language) {

我有多语言库和简单的切换器。我有三门语言,英语、德语和俄语。默认值为德语 当选择默认语言时,站点url看起来像mysite.com,如果更改为en或ru,则url看起来像mysite.com/en和mysite.com/ru。当我从en-ru或ru-en更改时,url看起来像mysite.com/en/ru,并给出404错误

交换机是:

                <?php
            foreach ($languages as $language) {
                if ($language['abbr'] == MY_DEFAULT_LANGUAGE_ABBR) {
                    $cr = trim(uri_string(), '/');
                    if (strlen($cr) == 2) {
                        $change_url = base_url();
                    } else {
                        $change_url = base_url(preg_replace('/' . MY_LANGUAGE_ABBR . '\//', '', uri_string()));
                    }
                } else {
                    $u = preg_replace('/' . $language['abbr'] . '\//', '', uri_string());
                    $change_url = base_url($language['abbr'] . '/' . $u);
                }
                ?>
                <li>
                    <a href="<?= $change_url ?>">
                        <img src="<?= base_url('attachments/langflags/' . $language['flag']) ?>" alt="<?= $language['name'] ?>">
                        <span><?= ucfirst($language['name']) ?></span>
                    </a>
                </li>
            <?php } ?> 
试试这个:

$replace= array('en/','ru/');
$u = preg_replace('/' . $language['abbr'] . '\//', '', uri_string());
$change_url = base_url($language['abbr'] . '/' . str_replace($replace,'', $u));

我认为最好将lang首选项保存在cookie或会话变量中。你这样做的方式将破坏路由,例如mysite.com/en/ru正在使用方法ru寻找控制器en,因此404I永远无法理解为什么有人想将lang添加到uri段。如果您只是对子域执行此操作,那么所有uri段都保持不变,您可以通过检查您所在的域来设置lang。请看这里:好的@BrianGottier我会记住下次。你知道怎么解决这个问题吗?