【问题标题】:Switch language in codeigniter error在 codeigniter 错误中切换语言
【发布时间】:2018-05-25 17:03:50
【问题描述】:

我有多语言库。和简单的切换器。我有3个朗。 英语德语俄语。默认为德语 什么时候检查默认语言,站点 url 看起来像 mysite.com,如果更改为 enru,则 url 看起来像 mysite.com/enmysite.com/ru 当我从 en-ruru-en 更改时,网址看起来像 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 } ?> 

【问题讨论】:

  • 我认为将语言首选项保存在 cookie 或会话变量中会更好。你这样做的方式会对路线造成严重破坏,例如mysite.com/en/ru 正在寻找控制器 en 与方法 ru 因此 404
  • 我永远无法理解为什么有人要在 uri 段中添加 lang。如果你只是用子域来做,你所有的 uri 段都保持不变,你可以通过检查你所在的域来设置语言。见这里:expressionengine.com/forums/archive/topic/219463/…
  • 好的@BrianGottier 下次我会记住的。你知道如何解决这个问题吗?

标签: php codeigniter codeigniter-3 multilingual


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多