FastAdmin 是基于 ThinkPHP5 的极速后台开发框架,其多语言的使用也可参考ThinkPHP5的思想 。

一、默认语言包

默认情况下,系统载入的是配置的默认语言包,并且不会自动侦测当前系统的语言。默认语言由 default_lang 配置参数设置,系统默认设置为:

'default_lang' => 'zh-cn',

注:如果网站只需要一种语言,直接在配置文件里将所需语言设置成默认即可。

二、开启多语言和语言自动侦测

要启用语言自动侦测和多语言自动切换,需要开启多语言切换,在应用的公共配置文件添加:

'lang_switch_on' => true,

开启后,系统会自动检测当前语言(主要是指浏览器访问的情况下)会对两种情况进行检测:

  1. 是否有$_GET[‘lang’]
  2. 识别$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]中的第一个语言
  • 检测到任何一种情况下采用Cookie缓存
  • 如果不希望浏览器自动侦测语言,关闭lang_switch_on后设置默认语言。

三、设置允许的语言列表

如果在自动侦测语言的时候,希望设置允许的语言列表,可以使用:

Lang::setAllowLangList(['zh-cn', 'en-us']);

如果检测到的语言在允许的语言列表内认为有效,否则使用默认设置的语言。

四、语言定义

语言定义一般采用英语来描述,分为语言变量定义(动态设置)和语言文件定义(静态设置)。

语言变量定义

在程序里动态设置语言定义的值,使用下面的方式:

Lang::set('dynamic define', '动态语言定义');

语言文件定义

系统会默认加载下面三个语言包:

  • 框架语言包:thinkphp\lang\当前语言.php
  • 应用语言包:application\lang\当前语言.php
  • 模块语言包:application\模块\lang\当前语言.php

如果你还需要加载其他的语言包,可以在设置或自动检测语言之后,用load方法进行加载:

Lang::load(APP_PATH . 'common\lang\zh-cn.php');

ThinkPHP语言文件定义采用返回数组方式:

return [
  'hello world' => '你好 世界',
  'hello thinkphp' => '欢迎使用ThinkPHP'
];

五、语言使用

在控制器中使用

$value = Lang::get('dynamic define');
//使用系统封装的助手函数
$value = lang('dynamic define');

如果要在模板里使用,再赋值即可:

$this->assign('dynamic define', $value);

在模型类中使用

通常多语言的使用是在控制器里面,但是模型类的自动验证功能里面会用到提示信息,这个部分也可以使用多语言的特性,例如原来的方式是把提示信息直接写在模型里面定义:

['title', 'require', '标题必须!', 1],

如果使用多语言功能的话(假设在当前语言包里面已经定义了 ‘title_require’ => ‘标题必须!’, 就可以这样定义模型的自动验证:

['title', 'require', '{%title_require}', 1],

在模板文件中使用

如果要在模板文件中输出变量不需要在控制器中赋值,可以直接使用模板引擎特殊标签来直接输出语言定义的值:

{$Think.lang.title_require} // 输出当前语言包里面定义的title_require的语言定义

六、语言包定义支持变量传入

语言包定义的时候支持传入变量,有两种方式。

使用命名绑定

使用变量作为占位符,使用时为变量赋值,例如:

'file_format' => '文件格式:{:format},文件大小:{:size}',

在模板中输出语言字符串的时候传入变量值即可:

{:lang('file_format', ['format' => 'jpeg,png,gif,jpg', 'size' => '2MB'])}

使用格式字符串

如果需要使用第三方的翻译工具,建议使用该方式定义变量,例如:

'file_format' => '文件格式:%s,文件大小:%d',

在模板中输出多语言的方式为:

{:lang('file_format', ['jpeg,png,gif,jpg', '2MB'])}
最后修改日期:2019年9月2日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。