首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多语言PHP站点

多语言PHP站点
EN

Stack Overflow用户
提问于 2012-04-06 16:57:49
回答 1查看 470关注 0票数 1

我有一个PHP站点。现在,我需要将它“转换”成一个多语言的网站,增加一个选项,用户将能够选择他们喜欢的语言。假设我想要2种语言作为乞丐,然后在需要的时候用一种聪明的方法来添加新的语言。

数据库与语言文件……

我知道有两种选择。

1)可以根据用户的首选语言,每次使用带有语言、翻译等的MySQL数据库表从数据库中检索数据,这就意味着需要大量的数据库请求。

2)我可以使用define命令使用外部语言PHP文件(就像有些电子商务框架将不同的语言文件放入语言文件夹,如fr.php、eng.php等)。

还有什么更好的?答案必须基于以下论点及其利弊。

1)最佳表现

2)灵活性

3)更有效率

4)智能方式

5)资源使用(CPU、内存等)

在我的例子中,谷歌网站的翻译工具并不是一个合适的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2012-04-06 17:11:17

在我看来,数据库解决方案是非常昂贵的,并不是真正需要的。也许你的网站有静态的(不变的)语言短语。在这种情况下,您应该使用语言数组将它们存储为$array['key'] = 'phrase',并能够通过全局的方法检索它们。就像这样:

代码语言:javascript
复制
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,但是还有其他方法来存储全局的东西。

您可以也可能是首选使用非静态类.例如:

代码语言:javascript
复制
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;
    }

}

但是,每次需要时,都应该使用依赖项注入来注入这个类。一个用法示例:

代码语言:javascript
复制
$lang = new Lang('en');
$lang->get('LANG_KEY');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10046610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档