学习笔记

ThinkPHP6多应用多语言切换,最佳解决方案

2023-09-08 11:37:16 juzhen 2

在当今国际化的世界中,越来越多的企业走向国际,面向多元化的内容建设,网站的发展也已经随着现在不同国家的需求,打造出来了很多的关于不同国家和地区的网站,多语言网站成为必备的宣传阵地,能使网站在不同的国家和地区进行打开查看。
ThinkPHP6使用多语言其实很简单,下面就以创建 中英繁多语言切换为例。
简体中文 zh-cn
繁体中文 zh-hk
美式英语 en-us

1、开启中间件的自动侦测
配置中间件 middleware.php 在模块主目录下创建以index为例:app/index/middleware.php

return [
// 多语言加载
\think\middleware\LoadLangPack::class,];

2、配置语言应用文件地址 app/index/config/lang.php

use think\facade\Env;return [
'lang_switch_on' => true,
// 默认语言
'default_lang'=> 'en-us',
// 允许的语言列表
'allow_lang_list' => ['zh-cn', 'en-us',"zh-hk"],
// 多语言自动侦测变量名
'detect_var'=> 'lang',
// 是否使用Cookie记录
'use_cookie'=> true,
// 多语言cookie变量
'cookie_var'=> 'think_lang',
// 多语言header变量
'header_var' => 'think-lang',
// 扩展语言包
'extend_list' => [],
// Accept-Language转义为对应语言包名称
'accept_language' => [
'zh-hans-cn' => 'en-us',
],
// 是否支持语言分组
'allow_group' => true,];

3、创建对应多语言文件
图片alt
图片alt
zh-cn.php

return [
 'wel' => '欢迎',
 'i18n' => '多语言'];

zh-hk.php

return [
 'wel' => '歡迎',
 'i18n' => '多語言'];

en-us.php

return [
 'wel' => 'welcome',
 'i18n' => 'internationalization'];

4、页面中使用
index.html(测试多语言切换)

<!DOCTYPE html><html><head>
<meta charset="utf-8">
<title>ThinkPHP6测试多语言切换</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"></head><body>
 <div>
 <select id="language" class="lan">
<option value="zh-cn">中文简体</option>
<option value="zh-hk">中文繁体</option>
<option value="en-us">English</option>
</select>
 </div>
 <div>{:lang('wel')}</div>
 <div>{:lang('i18n')}</div></body><script src="/static/jquery-3.4.1.min.js"></script><script>
$("#language option[value=" + getCookie("lang") + "]").attr("selected", true);
//选择语言
$("#language").bind('change', function () {
var language = $(this).children('option:selected').val();
setCookie("lang", language, {
expires: 30,
path: ''
});
location.reload();
});
function setCookie(name, value, options) {
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 30));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
var path = options.path ? '; path=' + options.path : '';
var domain = options.domain ? '; domain=' + options.domain : '';
var s = [cookie, expires, path, domain, secure].join('');
var secure = options.secure ? '; secure' : '';
var c = [name, '=', encodeURIComponent(value)].join('');
var cookie = [c, expires, path, domain, secure].join('')
document.cookie = cookie;
}

function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}</script></html>


首页
产品
新闻
联系