一.配置点击打开链接
1.开启语言包功能
‘lang_switch_on’ => true,
2.支持的语言列表
‘lang_list’ => [‘zh-cn’,‘en-us’],
二.语言定义(默认语言无需定义,下面会提到原因及使用)方法
1.文件定义
框架或模块目录\lang\en-us.php
return [
‘按钮1’=>‘button1’,//表示模板内使用{:lang(‘按钮1’)}获得的字符在英文状态下显示为button1
‘按钮2’=>‘button2’,
‘其它语言变量’=>‘Other language variables’,
];
ps:如果还需要加载其他的语言包,可以在自动检测语言之后,用load方法进行加载:
\think\Lang::load(路径\lang\语言.php’);
2.动态定义在控制器方法中
a.单个设置
\think\Lang::set($name,
v
a
l
u
e
,
′
z
h
−
c
n
′
)
;
/
/
value,'zh-cn');//
value,′zh−cn′);//name KaTeX parse error: Expected 'EOF', got '\think' at position 11: value是键值对 \̲t̲h̲i̲n̲k̲\Lang::set(name, $value,‘en-us’);
如\think\Lang::set(‘按钮’, ‘button’,‘en-us’);//表示模板内使用{:lang(‘按钮’)}获得的字符在英文状态下显示为button
b.批量设置
\think\Lang::set([‘按钮1’=>‘button1’,‘按钮2’=>‘button2’],’’,‘en-us’);
ps:
1.动态定义优先
2.默认语言无需语言包或动态设置,控制器方法,模板内在需要的地方可以直接使用默认语言变量,再编写其它语言包或动态设置其它语言(需保证默认语言变量是其它语言变量的键值)即可切换,
如使用语言为中(默认)英文,那么只要编写英文语言包
return [
‘中文’=>‘Chinese’,
//…
];
模板使用{:lang(‘中文’)},那么在中文状态下会显示’中文’,英文状态下会显示’Chinese’,
模板使用{:lang(‘中文中文’)},那么在中英文状态下都会显示’中文中文’,英文状态下无效,因为中文语言变量’中文中文’与英文语言变量的键值’中文’不一致
三.在项目(貌似模块无效)公共文件(common.php)中选择自动侦测当前语言
\think\Lang::detect();
ps:convention.php里有个’default_lang’ => ‘zh-cn’,貌似设置无效.为使之有效,可以修改detect方法如下
public static function detect() {
// 自动侦测设置获取语言选择
l
a
n
g
S
e
t
=
C
o
n
f
i
g
:
:
g
e
t
(
′
d
e
f
a
u
l
t
l
a
n
g
′
)
;
i
f
(
i
s
s
e
t
(
langSet = Config::get('default_lang'); if (isset(
langSet=Config::get(′defaultlang′);if(isset(_GET[self::$langDetectVar])) {
// url中设置了语言变量
l
a
n
g
S
e
t
=
s
t
r
t
o
l
o
w
e
r
(
langSet = strtolower(
langSet=strtolower(_GET[self::
l
a
n
g
D
e
t
e
c
t
V
a
r
]
)
;
C
o
o
k
i
e
:
:
s
e
t
(
s
e
l
f
:
:
langDetectVar]); Cookie::set(self::
langDetectVar]);Cookie::set(self::langCookieVar, KaTeX parse error: Expected 'EOF', got '}' at position 21: …et, 3600); }̲ elseif (Cookie…langCookieVar)) {
// 获取上次用户的选择
l
a
n
g
S
e
t
=
s
t
r
t
o
l
o
w
e
r
(
C
o
o
k
i
e
:
:
g
e
t
(
s
e
l
f
:
:
langSet = strtolower(Cookie::get(self::
langSet=strtolower(Cookie::get(self::langCookieVar));
} elseif (KaTeX parse error: Expected '}', got 'EOF' at end of input: …kie::set(self::langCookieVar, KaTeX parse error: Expected 'EOF', got '}' at position 21: …et, 3600); }̲ elseif (isset(_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {
// 自动侦测浏览器语言
preg_match(’/^([a-z\d-]+)/i’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’], $matches);
l
a
n
g
S
e
t
=
s
t
r
t
o
l
o
w
e
r
(
langSet = strtolower(
langSet=strtolower(matches[1]);
Cookie::set(self::$langCookieVar, KaTeX parse error: Expected 'EOF', got '}' at position 21: …et, 3600); }̲ if (empty(…allowLangList) || in_array(
l
a
n
g
S
e
t
,
s
e
l
f
:
:
langSet, self::
langSet,self::allowLangList)) {
// 合法的语言
self::$range = $langSet;
}
}
4.自动侦测浏览器语言
四.控制器方法编写(模块/Index.php)
//转英文
public function enlang() {
l
a
n
g
=
i
n
p
u
t
(
′
l
a
n
g
′
)
;
s
w
i
t
c
h
(
lang=input('lang'); switch (
lang=input(′lang′);switch(lang) {
case ‘en’:
cookie(‘think_var’, ‘en-us’);
break;
case ‘zn’:
cookie(‘think_var’, ‘zh-cn’);
break;
default:
cookie(‘think_var’,‘zh-cn’);
break;
}
}
五.模板使用(index.html)
{:lang(‘英文’)}
{:lang(‘中文’)}
{:lang(‘按钮3’)}
{:lang(‘其它语言变量’)}
语言的使用是通过设置cookie来实现的,由于cookie的特性,所以设置后需要刷新才能成功
模板发送ajax请求成功后刷新页面
tp5多语言切换
最新推荐文章于 2023-07-19 19:07:31 发布