2012-05-18 282 views
0

我正在使用多語言腳本從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); 
} 

?> 

所以,這是我不重定向到正確的路徑,因爲沒有目錄/英文邏輯。

我在想是否有可能使用數組重寫網址? 事情是這樣的:

<?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的緩存是不是一種選擇

+0

您能否向我解釋一件事:當您訪問example.com/fr/blabla/index時,您將重定向到example.com/fr/index。然後你說「沒有目錄/英文」。那「eng」來自哪裏? –

+0

您的腳本是否仍然默認語言爲您想要重定向到的路徑? –

+0

幾乎在那裏,它看起來很有希望! 我現在好希望解釋一下: 訪問者在頁面上: Example.com/sub1/index.php 他要改變語言爲西班牙語。 我想要重定向是: Example.com/es/sub1/index.php 但現在他(還是)要: Example.com/es/的index.php 所以目錄SUB1必須在/ es/ –

回答

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

這可能會實現,如果我理解正確你的問題。

+0

之後幾乎在那裏,它看起來很有希望! 我現在好希望解釋一下: 訪問者在頁面上: Example.com/sub1/index.php 而想要改變語言爲西班牙語。我想讓他重定向到: Example.com/es/sub1/index。PHP 但現在他(還是)要: Example.com/es/的index.php 所以目錄SUB1必須跟從/ ES/ –

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); 
} 

?> 
+0

快到了,它看起來很有希望! 我現在好希望解釋一下: 訪問者在頁面上: Example.com/sub1/index.php 他要改變語言爲西班牙語。 我想要重定向是: Example.com/es/sub1/index.php 但現在他(還是)要: Example.com/es/的index.php 所以目錄SUB1必須後/ es/ –

+0

那就是我的代碼上面做的 - 正如我解釋 – psynnott

+0

我已經在這裏測試它www.addressq.com/test.php但它不會工作 –