关于网站多语言的实现

xiaoxiao2021-02-28  127

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

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

通过存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); } }

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

转载请注明原文地址: https://www.6miu.com/read-22048.html

最新回复(0)