关于网站多语言的实现

目前见到的网站多语言支持有两种:

  1. 两个视图,即制作两个版本的视图文件。比如项目分两个模块,样式什么的都一样,视图不一样。

  2. 通过存session,记录当前语言版本,然后调用不同的文字配置文件,显示不同的语言文字。如thinkphp的多语言实现方法。

其实在一开始看到thinkphp的源码是通过session实现时,我就有想过通过另一种方法,有点结合两个方法的意思。

第一种方法分两个模块,但是controller什么的都一样,修改起来就很麻烦,两个模块都得一起改动。

第二种方法,虽然现在我们网站是这样做的,但是视图里都是变量,文字全存在配置文件里,看着变扭,修改的时候通过文字找位置也麻烦,所有文字全部存变量的形式在配置文件中,取名也麻烦

我自己的想法是借用thinkphp的多语言实现方法,只是最后不读取文字配置文件,而是在渲染视图时,先判断语言版本,再渲染对应的视图。虽然修改视图两个都需要改,但是整体我感觉更舒服容易维护。


class IndexController extends Controller
{
    public function index()
    {
        if(session('lang') == 'us')
        {
            return $this->fetch('index_us');
        }else{
            return $this->fetch('index_cn');
        }
    }
}

//一劳永逸的方法是修改fetch源代码,在fetch()内部进行判断,然后自动组成对应语言的视图文件名。简单举例:

class Controller
{
    //原函数
    /*
    protected function fetch($template = '', $vars = [], $replace = [], $config = [])
    {
        return $this->view->fetch($template, $vars, $replace, $config);
    }
    */

    //修改
    protected function fetch($template = '', $vars = [], $replace = [], $config = [])
    {
        $lang = session('?lang') ? session('lang') : 'cn'; 
        $template .= '_'.$lang;
        return $this->view->fetch($template, $vars, $replace, $config);
    }
}

因为功力尚浅,得出如此结论,可能随着阅历提升,会找到更好的办法,仅此作为学习记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值