多语言PHP站点
我有一个PHP网站。现在,我需要通过添加一个选项将其“转换”为多语言站点,用户可以在其中选择自己喜欢的语言。比如说,我想要两种语言,然后是一种在需要时添加新语言的智能方法 数据库与语言文件… 我知道有两种选择 1) 我可以使用带有语言、翻译等的MySQL数据库表,每次都基于用户的首选语言从数据库检索数据,这意味着大量的数据库请求 2) 我可以使用多语言PHP站点,php,mysql,database,Php,Mysql,Database,我有一个PHP网站。现在,我需要通过添加一个选项将其“转换”为多语言站点,用户可以在其中选择自己喜欢的语言。比如说,我想要两种语言,然后是一种在需要时添加新语言的智能方法 数据库与语言文件… 我知道有两种选择 1) 我可以使用带有语言、翻译等的MySQL数据库表,每次都基于用户的首选语言从数据库检索数据,这意味着大量的数据库请求 2) 我可以使用define命令使用外部语言PHP文件(例如,一些电子商务框架将不同语言的文件放入语言文件夹,如fr.PHP eng.PHP等) 什么更好?答案必须基于
define
命令使用外部语言PHP文件(例如,一些电子商务框架将不同语言的文件放入语言文件夹,如fr.PHP eng.PHP等)
什么更好?答案必须基于以下论点及其利弊
1) 最佳性能
2) 灵活性
3) 更有效率
4) 智能方式
5) 资源使用率(CPU、内存等)
顺便说一句,谷歌网站翻译工具对我来说不是一个合适的解决方案。老实说,数据库解决方案非常昂贵,并不真正需要。可能你的网站有静态(不改变)的语言短语。在这种情况下,您应该使用一个语言数组将它们存储为
$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');
在我的工作中,我们总是使用语言文件。它们驻留在服务器上,可以通过框架轻松访问,下载它们的响应时间几乎为零。如果您的数据库或任何东西出现故障(无论是维护还是其他),至少您的语言将始终可供用户使用。这并不是说将其放入数据库不是一个好主意,我只是在另一方面有更多的经验。看看这个问题: