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