多語言網站開發,重點的還是在解決語言之間的問題。
那要如何解決這個問題呢?大概就分三步驟:
1.頁面多語言
2.資料庫多語言
3.使用者存取語言統一
#1.頁面多語言
需要考慮的問題:
A.用戶登陸時候,自動識別字符,呼叫不同的語言包?
B.用戶切換不同語言時候,呼叫不同的語言包?
C.增加多語言後的目錄結構?
頁面多語言也就是外觀的多語言化,這裡可以採用靜態的語言包的方式。
設計時候就應該要包含language的目錄,針對不同語言有獨立的子目錄。
如英文language/en ,簡體中文language/gb,繁體中文language/b5 (可以擴充其他語言)
每個目錄下就包含了每個頁面的語言版本。選擇語言版本時候就可以呼叫對應版本的語言包。
下面是實例程式碼
class language { static $lanObject; public $type; // unit , dashboard , menu ,other public $lan; // language private $special; // The common in the file private function construct() { if( isset($_GET['hl']) || isset($_POST['hl']) ) { switch( isset($_GET['hl'])?$_GET['hl']:$_POST['hl'] ) { case 'en': $this->lan = 'en'; case 'zh': $this->lan = 'zh'; case 'all': $this->lan = 'all'; default: $this->error(); } } else $this->lan = isset($_COOKIE['hl']) ? $_COOKIE['hl']:'zh'; } public static function getObject() { if( !(self::$lanObject instanceof self) ) self::$lanObject = new language(); return self::$lanObject; } public function lto($key) //$key is English { if( $this->lan !== 'zh' ) return $key; if( empty($this->special) ) // if the $special is null { if( isset($this->type) ) $this->special = file_get_contents($this->type.'.txt'); else return $key; } echo $this->search($key); } private function search($searchTozh) // PHP String { $key_start = strpos($this->special,$searchTozh); $key_end = strpos($this->special,' ',$key_start); $len_str = strlen($searchTozh); $for_sub = $key_start + $len_str + 1; return substr($this->special, $for_sub, $key_end - $for_sub); } }
strpos(); 是找到字串第一次出現的位置例如'wo' 在'hello world' 中,傳回值為6
substr();是截取字串的一部份
接下來是調試時加上的程式碼
$la = language::getObject(); $la->type = 'unit'; $la->lto('min'); echo '<br/>'; $la->lto('hello');
lto(這裡面要翻譯的英文);
unit.txt 檔案的內容格式是
hello-你好min-小minute-分鐘minutes-分鐘
$special設計為全局也是想到不只一次會呼叫lto() ,如果反复加載文件太浪費效能了。
$type設計為公有是考慮到載入的檔案的效率問題,有的時候並不需要顯示幾天前這些,所以不如把這些按使用類型分開,例如有專門負責選單翻譯的menu.txt ,也有專門為操作,例如刪除,收藏翻譯的txt文字。這樣可以自由設定要載入的文字
語言也可以自由設定。
以上是php 中英文語言轉換類別詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!