php语言切换
㈠ php如何实现多语言切换。用tp写的
我是用php默认先识别包头携带的语言来作为默认语言,然后根据用户的选择切换不同的语言包
㈡ php 多语言切换
语言切换如果考虑用户体验的话就相对有点麻烦,分离语言模块保存在数据库或者指定文件中然后用php调用指定的语言是比较常用的,但是你要知道每种语言都有差异,这样会导致样式不一致,所以如果想要更好的用户体验最好也替换一下对应的css样式。
㈢ php网站中英文切换
多语言网站解决方案 php
前言:
多语言网站开发,重点的还是在解决语言之间的问题。
那如何解决这个问题呢?大概就分三步走:
1.页面多语言
2.数仔链据库多语言
3.用户访问语言统一
1.页面多语言
需要考虑的问题:
A.用户登陆时候,自动识别字符,调用不同的语言包?
B.用户切换不同语言时候,调用不同的语言包?
C.增加多语言后的目录结构?
页面多语言也就是外观的多语言化,这里可以采用静态的语言包的方式。
设计时候就应该包括language的目录,针对不同语言有独立的子目录。
如英文language/en ,简体中文language/gb,繁体中文language/b5 (可以扩展其他语言)
每个目录下就包含了对每个页面的语言版本。选择语言版本时候就可以调用相应版本的语言包。
具体做法:
0.利用js语言,识别浏览器语言,在调用不同的语言包.
1.language/en/global.ln是针对英文版的全局语言包。
2.global.ln 内容为:
$title = "English webstie";
$charset = "UTF-8";
3.index.php调用:
<?php
require_once()
?>;
<html>;
<head>;
<title>;$title<title>;
<meta http-equiv="content-type" content="text/html;charset=$charset">;
</head>;
<body>;</body>;
</html>;
这样通过扩展就可以实现页面的多搏饥语言化.
2.数据库多语言
这个考虑的问题:
A.后台录入数据的多语言化?
B.用户在不同版本下,提交的内容,如何保存?
C.提供三种语言包,还是提供英文和简体,简体通过转化提供繁体?
数据库多语言就是达到多语言在数据库里面的统一。就需要采用utf-8统一编码。
无论什么语言的文字,都统一使用utf-8来存放到数据库里面。采用表字段来表识
属于什么语言版本的文字。
具体:
A.对于后台添加的问题:
1.后台添加时候,就需要多语言化的录入。先建立一个以utf-8编码的数据库,录入英文/简体,简体在通过转化为繁体,
再以utf-8编码方式存于数据库中。
2.建立以utf-8为编码的表结构,importlanguage标识属于什么语言版本
但在某个版本下,就搜索属于这个版本的文字来显示。其他文字不显示。
DROP TABLE IF EXISTS `zz_importer`;
CREATE TABLE IF NOT EXISTS `zz_importer` (
`importID` int(11) NOT NULL auto_increment,
`importTime` date NOT NULL default '0000-00-00',
`improtfile` varchar(100) NOT NULL default '',
`importlanguage` varchar(100) NOT NULL default ''
PRIMARY KEY (`importID`)
) ENGINE=MyISAM DEFAULT CHARSET=uft-8;
3.简体转化的繁体。
利用php的iconv.此过程对于linux/unix有效,对于windows无效。
iconv("GB2312","BIG5",$text);
4.因为,charset = "utf-8",数据就都是以utf-8编码方式存在,
添加数据时候,要分别用en/gb/big5来标识语言版本.
INSERT INTO `zz_importer` VALUES (,'', '', 'en');
INSERT INTO `zz_importer` VALUES (,'', '', 'gb');
INSERT INTO `zz_importer` VALUES (,'', '', 'big5');
B.对于用户添加的问题:
1.假设下简体中念银孙文下.用户因为页面头为UTF-8.则用户浏览器会以utf-8编码
方式浏览页面。
2.添加的数据库本身以utf-8方式存在。
3.添加数据时候,要分别用gb来标识语言版本
INSERT INTO `zz_importer` VALUES (,'', '', 'gb');
C.对于简体和繁体是单独提供还是转化问题
单独提供 - 比较符合多语言的标准,灵活性大,对ISP没有特别的要求。
转化提供 - 提交速度会受影响,同时要ISP提供iconv的函数支持。
3.用户访问语言统一
A.假设用户简体中文版时候:
<meta http-equiv="content-type" content="text/html;charset=UTF-8">;
所有语言版本都是这样。
B.调用language/gb的语言包。
C.搜索数据库有语言字段为gb的数据,并显示
D.当用户提交信息,参照上面数据库多语言的B问题。
㈣ thinkphp3.0如何实现多语言切换
ThinkPHP内置多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文件。任何字符串形式的输出,都可以定义语言常量。要启用多语言功能,需要配置开启多语言行为(确保你下载的是完整版本,如果不是需要单独下载多语言检测行为扩展),在项目的配置目录下面的行为定义文件tags.php中,添加:
return array(
// 添加下面一行定义即可
'app_begin'=>array('CheckLang')
);
表示在app_begin标签位置执行多语言检测行为。
可以为项目定义不同的语言文件,框架的系统语言包目录在系统框架的Lang目录下面,每个语言都对应一个语言包文件,系统默认只有简体中文语言包文件zh-cn.php ,如果要增加繁体中文 zh-tw或者英文en,只要增加相应的文件。
语言包的使用由系统自动判断当前用户的浏览器支持语言来定位,如果找不到相关的语言包文件,会使用默认的语言。如果浏览器支持多种语言,那么取第一种支持语言。
ThinkPHP的多语言支持已经相当完善了,可以满足应用的多语言需求。这里是指的是模板多语言支持,数据的多语言转换(翻译)不在这个范畴之内。ThinkPHP具备语言包定义、自动识别、动态定义语言参数的功能。并且可以自动识别用户浏览器的语言,从而选择相应的语言包(如果有定义)。例如:
throw_exception('新增用户失败!');
我们在语言包里面增加了ADD_USER_ERROR 语言配置变量的话,在程序中的写法就要改为:
throw_exception(L('ADD_USER_ERROR'));
也就是说,字符串信息要改成L方法和语言定义来表示。
项目语言包文件位于项目的Lang目录下面,并且按照语言类别分子目录存放,在执行的时候系统会自动加载,无需手动加载。
具体的语言包文件命名规范如下:
项目公共语言包
语言目录/common.php
项目分组语言包
语言目录/分组名.php
项目模块语言包
不存在分组情况:语言目录/模块名(小写).php
存在分组的情况:语言目录/分组名_模块名(小写).php
语言子目录采用浏览器的语言命名(全部小写)定义,例如English (United States) 可以使用en-us作为目录名。如果项目比较小,整个项目只有一个语言包文件,那可以定义common.php文件,而无需按照模块分开定义。
语言包文件可以按照模块来定义,每个模块单独定义语言包文件,文件名和模块名称相同,例如:
Lang/zh-cn/user.php 表示给User模块定义简体中文语言包文件
Lang/zh-tw/user.php 表示给User模块定义繁体中文语言包文件
语言文件定义
ThinkPHP语言文件定义采用返回数组方式:
return array(
'lan_define'=>'欢迎使用ThinkPHP',
);
要在程序里面设置语言定义的值,使用下面的方式:
L('define2','语言定义');
$value = L('define2');
上面的语言包是指项目的语言包,如果在提示信息的时候使用了框架底层的提示,那么还需要定义系统的语言包,系统语言包目录位于ThinkPHP目录下面的Lang目录。
通常多语言的使用是在Action控制器里面,但是模型类的自动验证功能里面会用到提示信息,这个部分也可以使用多语言的特性。例如:
原来的方式是把提示信息直接写在模型里面定义
array('title','require','标题必须!',1),
如果使用了多语言功能的话(假设,我们在当前语言包里面定义了' lang_var'=>'标题必须!')
还可以这样定义模型的自动验证
array('title','require','{%lang_var}',1),
如果要在模板中输出语言变量不需要在Action中赋值,可以直接使用模板引擎特殊标签来直接输出语言定义的值:
{$Think.lang.lang_var}
可以输出当前选择的语言包里面定义的 lang_var 语言定义
㈤ Thinkphp 多语言多模板 怎么做到切换,
一般情况更换语亮携言包就行了,我想你的英文和中文的模板相差比较多吧
比较简单的办法在index.php中加上如下代码:
if(isset($_GET['l'])){
$_GET['t'源键禅]=$_GET['l'];
}
另外记得配置雹尘文件里需要加上如下配置
'DEFAULT_THEME'=>'default',
'TMPL_DETECT_THEME'=>true,//自动侦测模板主题
模板切换事例:
http://www.thinkphp.cn/extend/234.html
㈥ PHP做的网站怎么实现中文和英文、繁体中文语言切换
语言配置文件的问题 先在语言配置文件中定义好,不同语言环境下要显示的内容 (比如中文cn.php中$country= '中国',而英文en.php中$country='china') 而好缓在页面中要显示的内容不直接显示,而是用变量替换 (在页面中,如果单一中文时,你直接写‘中国’ 现在双语言了,你就写$country) 在在页面头部根据用户提交的语言,include相应的语友态模言配置文件 当然如何用户刚打开页面显示什么呢,所以要设置一个默认语言 (如 if( !$_COOKIE['lang'] ) include 'cn.php'; ) 原理就闭早这样吧
㈦ thinkphp5.0实现网站英文切换 --- 2020-08-26
首先来看下它的配置:
// 是否开启多语言
'竖兆lang_switch_on' => true,
//语音列表
'lang_list' => ['zh-cn','en-us'],
// 获取当前选择语言的方法类
GetLang.php
<?php
namespace app\index\controller;
use think\Cookie;
use think\Lang;
use think\Request;
class GetLang{
public function get_lang(){
lang = input('lang');
}
if( lang = Cookie::get('think_var');
}else{
lang = Lang::range( lang.EXT, lang);
return $lang;
}
}
?>
// 显示效果的控制器类
Index.php
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index(){
now_lang = now_lang=='zh-cn'){
尺羡 now_lang=='en-us'){
陵纤拍 this->assign('set_lang', this->fetch();
}
}
?>
// 视图页
index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{:lang('TITLE')}</title>
</head>
<body>
<a href="?lang={$set_lang}">{:lang('NOW_LANG')}</a>
</body>
</html>
//语言包文件
zh-cn.php
<?php
return [
'TITLE'=>'语言切换',
'NOW_LANG'=>'切换',
]
?>
en-us.php
<?php
return [
'TITLE'=>'Language switching',
'NOW_LANG'=>'Switch',
];
?>
㈧ thinkphp实现多语言切换时,数据库数据如何也实现多语言
有两种情况,分析如下:
1、需要中英文切换内容较少
假设我们现在正在操作的是文章表,需要根据用户的语言环境输出中文或英文的文章内容。
在文章表中多添加一个字段用于存储英文的内容,发布文章的页面,同时上传中英文内容即可,然后服务端通过thinkphp的多语言标识来决定读取中文内容或者英文内容。也可以在前端模板中进行识别。
2、需要中英文切换内容较多
如果某个数据表的多个字段或者多个数据表都需要做中英文切换,显然在数据表里添加多个字段的方式就不太合适了,那将导致数据表字段太多,不方便管理,可以采用多数据表的方式,将内容完整的分为两份。就是把涉及到中英文切换的数据表多拷贝一份而已,里面的数据是英文的
。管理员后台,可以同时存储中英文内容,也可以分开存储,你自己决定就好,读取时同样使用thinkphp的多语言标识判断用户的语言环境,来决定查询中文表还是英文表。
另外,如果整站都需要中英文切换,也可以做分布式数据库!
一切根据实际需求决定!