【发布时间】:2018-05-25 17:03:50
【问题描述】:
我有多语言库。和简单的切换器。我有3个朗。 英语、德语和俄语。默认为德语
什么时候检查默认语言,站点 url 看起来像 mysite.com,如果更改为 en 或 ru,则 url 看起来像 mysite.com/en 和 mysite.com/ru 当我从 en-ru 或 ru-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