我正試圖想出一種有效的方法來在我的網站中實現語言選擇。使用數據庫和PHP的多語言網站
我右上角有一些標記,點擊時我希望所有的文本都變成所選擇的語言,其中翻譯存儲在我的數據庫中。
我應該這樣做,在如URL參數:
www.myside.com?lang=3
我有這個唯一的問題是,它可能就複雜的方式,我的路線網址的東西,它不使url看起來很乾淨。
更好的方法是將它存儲在會話中,並且僅在語言發生更改時才從數據庫提取翻譯。翻譯將保存在會話數組中,因此如果您知道我的意思,那麼用戶不會在每次加載頁面時都訪問數據庫。
我在想,如果像下面是我想要的達到的一個好辦法:
Session::set('langarray', array(
'id' => $languageId,
'cake' => $this->model->getLanguagesNavigation('cake', $languageId),
'login' => $this->model->getLanguagesNavigation('login', $languageId),
'register' => $this->model->getLanguagesNavigation('register', $languageId),
'share' => $this->model->getLanguagesNavigation('share', $languageId),
'galleries' => $this->model->getLanguagesNavigation('galleries', $languageId),
'decorator' => $this->model->getLanguagesNavigation('decorator', $languageId),
'find' => $this->model->getLanguagesContent('find', $languageId),
'headertext' => $this->model->getLanguagesContent('headerText', $languageId),
));
header('Location: ' . $_SERVER['HTTP_REFERER']);
在我看來:
...
public function render($viewFile, $data = NULL) {
if(!Session::get('langarray'))
{
$this->Language = new Language;
$this->Language->setLanguage(1);
}
if (is_array($data)) {
extract($data);
}
include Vs . $viewFile . '.php';
}
...
這簡直是將語言設置爲1 (英語)如果會話變量尚未設置,即語言未被選中。
在我的HTML,我只想回應相應的元素數組中得到了這個詞:
...
<p><?PHP echo $_SESSION['langarray']['headertext'];?></p>
...
這是一個好方法嗎?或者是否有一種將語言實現到網站的標準方式?
我的舊網站目前使用就像我提到的一個URL方法(?LANG = 3)和外國變種的社會企業做的相當不錯。我喜歡使用子域名的想法,但是如何根據第一個之前出現的內容在頁面上顯示正確的內容。在網址?例如。 FR。德。 etc
對於搜索引擎優化,我會建議將語言放在URL中。搜索引擎通常不會在瀏覽您的網站時使用會話,因此您可能會錯過很多索引頁面。您可以通過爲每種語言設置單獨的子域或「子文件夾」樣式來做到這一點。例如主頁是example.com/page/,默認爲英文,那麼西班牙文版本將爲example.com/es/page/。這是我在酒店的網站上使用.htaccess所做的。 – Mike
你應該真的使用poedit。 http://stackoverflow.com/questions/11563403/poedit-and-php-annotations#11625690 – pregmatch
@Mike你願意分享你的.htaccess那部分嗎?我主要關心的是,如何路由請求(www.site.com/controller/method/param1 ...)可能無法工作。 – imperium2335