多语言网站:切换语言

时间:2012-05-18 09:51:13

标签: php multilingual

我正在使用多语言脚本来改变lanquage。 现在,当我使用默认语言(英语)

时,我遇到了从语言改变的麻烦

该网站看起来像:

example.com ( Main directory)
example.com/fr/
example.com/es/ 

当我在example.com/fr/blabla/index时,我想转到example.com/es/blabla/index,它可以正常工作。

但是当我在example.com/blabla/index时,我想去example.com/fr/blabla/index。我重定向到example.com/fr/index

我正在使用:

<?php
function switchLanguage($lang) {
    $u = explode('/', $_SERVER['REQUEST_URI']);
    $u[1] = $lang;
    return implode('/', $u);
}

?>

所以我没有重定向到正确的路径,因为没有目录/ eng。

我在想是否可以使用数组重写网址? 像这样:

<?php 
function switchLanguage($lang) 
$array1 = array(' ', $_SERVER['REQUEST_URI']);
$array2 = array('$lang', ' ');
$newArray = array_combine($array1, $array2);

foreach ($newArray as $key ) {
        echo "$key $value"; 
}

?>

但是我怎样才能在网址中找到值或者我错在哪里。

使用数据库或.ini和geoip缓存不是一个选项

2 个答案:

答案 0 :(得分:1)

function switchLanguage($lang, $defaultLang = "eng") {
    if($lang == $defaultLang) {
        $lang = "";
    }
    $u = explode('/', $_SERVER['REQUEST_URI']);
    $u[1] = $lang;
    return implode('/', $u);
}

如果我理解你的问题,这可能会有效。

答案 1 :(得分:1)

您正在通过$u[1] = $lang覆盖第一个目录。您需要重建阵列,将语言推送到正确的位置,而不是覆盖可能已存在的内容(例如目录)

编辑: 使用array_splice添加语言部分:

<?php
function switchLanguage($lang) {
    $u = explode('/', $_SERVER['REQUEST_URI']);
    $u = array_splice($u,1,0,$lang);
    return implode('/', $u);
}

?>