thinkphp实现多语言切换时,数据库数据如何也实现多语言?
发布网友
发布时间:2022-04-23 06:09
我来回答
共2个回答
懂视网
时间:2022-04-06 09:39
最近项目比较忙,就没有怎么写文章。本文主要内容为多语言的后台是如何实现的。
前言
公司需要写一个多语言后台,以前也没做过,于是到面向百度了一下。这是用了TP框架俩年了,第一次发现框架是自带的多语言切换功能。这里着实给点一个赞。
接下来我们来实现一下这个功能。
一、后台实现多语言
使用框架为v5.1.38 LTS
来到配置文件config/app.php
可以看到关于语言的配置信息就只有这俩个参数。
lang_switch_on
这个参数是自动监听的浏览器语言,
default_lang关于这个参数就是在没有切换其它语言之前就直接默认中文配置文件了解之后我们需要在需要的模块创建lang目录,并且配置对应语言的语言包。
这里咔咔只配置了英文和中文 如还需要其它语言可自行添加即可。到这一步你会发现从头到尾都没有一个参数说是配置语言列表的参数。配置文件也没有找到。
但是在文档里你可以看到这行代码。我们去源码看看
在源码中就可以看得明白,语言的cookie的name值也是固定的,并且cookie的有效期时间为3600,这些都是需要根据自己项目进行调整的。
最重要的是看允许语言列表。我们继续追溯这个变量在文件thinkphp/library/think/Lang.php
最后我们就可以看到一个方法,这个方法也正是文档给出的一个方法由于我们整个后台都需要使用多语言,所以我们需要在common中进行配置
二、视图切换语言
在视图模板里直接调用languageChange
方法在视图中有一个变量为$languageName
,这个变量是咔咔直接从配置文件直接取出来的,后期会调整到数据库中。
然后在控制器写方法changeLanguage
,用来处理语言切换后的cookie改变此时我们的后台页面就是这样的
三、测试
在经过上面的操作之后,我们就可以根据自己设置的语言包来进行语言切换了
在模板中我们就需要使用lang这个模板标签进行获取数据这个是英文状态这个是中文状态到这关于多语言的实现就完成了。
四、总结
上面说了这么多,只是把每一步的步骤给大家写出来了。
其中关键点如下
application/config.php
配置文件修改在对应的模块里添加lang目录,并且创建需要的语言包视图进行语言切换调用后台接口存储cookie值。保存在think_var坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在诺大互联网中咔咔的文章能带给你一丝丝帮助。
热心网友
时间:2022-04-06 06:47
有两种情况,分析如下:
1、需要中英文切换内容较少
假设我们现在正在操作的是文章表,需要根据用户的语言环境输出中文或英文的文章内容。
在文章表中多添加一个字段用于存储英文的内容,发布文章的页面,同时上传中英文内容即可,然后服务端通过thinkphp的多语言标识来决定读取中文内容或者英文内容。也可以在前端模板中进行识别。
2、需要中英文切换内容较多
如果某个数据表的多个字段或者多个数据表都需要做中英文切换,显然在数据表里添加多个字段的方式就不太合适了,那将导致数据表字段太多,不方便管理,可以采用多数据表的方式,将内容完整的分为两份。就是把涉及到中英文切换的数据表多拷贝一份而已,里面的数据是英文的
。管理员后台,可以同时存储中英文内容,也可以分开存储,你自己决定就好,读取时同样使用thinkphp的多语言标识判断用户的语言环境,来决定查询中文表还是英文表。
另外,如果整站都需要中英文切换,也可以做分布式数据库!
一切根据实际需求决定!
thinkphp实现多语言切换时,数据库数据如何也实现多语言?
1、需要中英文切换内容较少 假设我们现在正在操作的是文章表,需要根据用户的语言环境输出中文或英文的文章内容。在文章表中多添加一个字段用于存储英文的内容,发布文章的页面,同时上传中英文内容即可,然后服务端通过thinkphp的多语言标识来决定读取中文内容或者英文内容。也可以在前端模板中进行识别。2、需...
哪位大神会thinkphp5.0多语言切换?
在Thinkphp5.0中,使用多语言的话,一般使用自动检测就可以了。开启自动检测只需要设置一下lang_switch_on参数就可以了。设置步骤如下:1、在根目录找到application文件中找到config.php。2、在config.php文件中找到lang_switch_on参数。3、将lang_switch_on参数的值设置为true即可。设置完毕后,Thinkphp...
怎么样配置thinkphp 与本地mysql和sql server同时连接俩个数据库
thinkphp 同时连接两个数据库的配置方法如下:1、在Db.class.php脚本文件里面的类增加一个魔术方法__get(),写法如下:public function __get($propertyName){ return $this->$propertyName;}这个方法是用来访问类中protected $config成员属性用的。有的人可能会说,直接把protected改成public岂不是更...
在Thinkphp 中怎么实现中英文切换啊?
if ( ereg('['.chr(0xa1).'-'.chr(0xff).']', $value) ){ //判断是不是纯中文,是为 true //是纯中文时,去相应的语言包中做对比,查找当前的中文 $value 对应的英文是什么,并把找到的英文替换掉当前这个中文 info[$key] = '匹配成功后的英文';}elseif ( ereg('[a-zA-Z]',...
thinkphp配置文件里面要使用到数据库的数据怎么办,在config.php文件里面...
config.php是用来设置相关的sql连接项,比如连接类型 连接帐号 密码 端口 数据库选择等.在要使用到数据库的数据时,在控制器中先初始化该表的model,如$user = M('User');
在thinkphp框架中如何防止sql注入
参数绑定能够确保传递给SQL语句的数据与命令分开,这样即使数据中包含恶意代码,也不会被数据库执行。在ThinkPHP中,可以通过预处理语句或者查询构造器的方式来实现参数绑定。其次,查询构造器是ThinkPHP中另一个重要的防SQL注入工具。查询构造器提供了一种链式调用的方式来构建SQL语句,它内部会自动处理数据的...
thinkphp数据库事物可以在多个模块中用么
事务是针对数据库本身的,所以可以跨模型操作的 。例如:// 在User模型中启动事务 User->startTrans();// 进行相关的业务逻辑操作 Info = M("Info"); // 实例化Info对象 Info->save($User); // 保存用户信息 if (操作成功){ // 提交事务 User->commit();}else{ // 事务回滚 User->...
thinkphp怎么输出数据库内容?
控制器:result = $M->where($where)->select(); //读取数据库内容 this->assign("result",$result); //输出变量到模板 dump($result);//打印当前变量内容 模板:<volist name="result" id="vo"> {$vo.id} </volist>
thinkphp在想数据库里插入数据的时候也想自动插入系统时间,代码怎么...
这个是公用model,定义自动填充的函数如下:class CommonModel extends Model { function getDate{ return ('Y-m-d');}} 在该model中 class testModel extends CommonModel{ // 自动填充设置 protected $_auto = array(array('update_date','getDate',1,'callback'),);} 数据库中对应字段:...
thinkphp如何同时向数据库插入多条数据?
数据整理好后,批量插入可用addAll方法(仅针对Mysql数据库):User->addAll($data);