的數據庫解決方案是我的真實想法非常昂貴,不是真的需要。可能您的網站有靜態(不會更改)語言短語。在這種情況下,您應該使用語言數組將它們存儲爲$array['key'] = 'phrase'
,並且能夠通過全局的東西來檢索它們。事情是這樣的:
class Lang {
private static $loaded;
private static $array;
private static function set($key, $value) {
self::$array[$key] = $value;
}
public static function get($key, $default = 'empty') {
$lang = LANG;
$file = "lang/$lang.php";
if (!in_array($lang, self::$array) and file_exists($file)) {
include($file);
self::$loaded[] = $lang;
}
return (isset(self::$array[$key])
? self::$array[$key]
: $default;
}
}
現在,你只需要存儲的語言文件作爲lang/en.php
或lang/it.php
... 其中包含了這樣的事情:self::set('MY_KEY', 'This is a phrase');
然後就是設置LANG
是正確的每個請求。我使用了一個常量LANG
,但還有其他一些方法來存儲全局。
你就可以了,可能是首選,使用非靜態類。如:
class Lang {
private $lang;
public function __construct($lang) {
$file = "lang/{$lang}.php";
if (file_exists($file))
include($file);
}
private function set($key, $value) {
$this->lang[$key] = $value;
}
public function get($key, $default = 'empty') {
return (isset($this->lang[$key])
? $this->lang[$key]
: $default;
}
}
但是你應該在每次需要時使用依賴注入來注入這個類。 用法示例:
$lang = new Lang('en');
$lang->get('LANG_KEY');
在我的工作中,我們總是使用語言文件。它們駐留在服務器上,通過框架輕鬆訪問它們,下載它們的響應時間幾乎爲零。如果你的數據庫或者其他任何事情發生了(無論是否保存),至少你的語言將始終提供給用戶。這並不是說把它放在數據庫中並不是一個好主意,我只是通過其他方式獲得更多經驗。 – 2012-04-06 17:02:21
看看這個問題:http://stackoverflow.com/questions/8281589/develop-multilangual-system – raPHPid 2012-04-06 17:02:26