的数据库解决方案是我的真实想法非常昂贵,不是真的需要。可能您的网站有静态(不会更改)语言短语。在这种情况下,您应该使用语言数组将它们存储为$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