2012-04-06 112 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');