2012-04-06 116 views
1

我有一個PHP站點。現在我需要通過添加一個選項來將其「轉換」爲多語言網站,用戶可以選擇其偏好的語言。比方說,我需要2種語言的開始,然後在需要時添加新語言。多語言PHP站點

數據庫VS語言文件...

據我所知有兩個選項。

1)我可以使用MySQL數據庫表的語言,翻譯等,每次都基於用戶的首選語言從數據庫中檢索數據,這意味着大量的數據庫請求。

2)我可以使用define命令(使用外部語言PHP文件,比如誰擁有不同語言的文件到語言文件夾,如fr.php eng.php等)

更好的是一些電子商務的框架?答案必須基於以下論點及其利弊。

1)最佳性能

2)柔韌性

3)更有效的

4)智能方式

5)資源使用量(CPU,存儲器等)

P.S. Google的網站翻譯工具對我來說不是一個合適的解決方案。

+0

在我的工作中,我們總是使用語言文件。它們駐留在服務器上,通過框架輕鬆訪問它們,下載它們的響應時間幾乎爲零。如果你的數據庫或者其他任何事情發生了(無論是否保存),至少你的語言將始終提供給用戶。這並不是說把它放在數據庫中並不是一個好主意,我只是通過其他方式獲得更多經驗。 – 2012-04-06 17:02:21

+0

看看這個問題:http://stackoverflow.com/questions/8281589/develop-multilangual-system – raPHPid 2012-04-06 17:02:26

回答

2

的數據庫解決方案是我的真實想法非常昂貴,不是真的需要。可能您的網站有靜態(不會更改)語言短語。在這種情況下,您應該使用語言數組將它們存儲爲$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.phplang/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');