以上的是以 web
为例
第一步:新建所有的语言包文件 resources/lang
建立global.php文件
中文的:
return [
"test" => "这里是测试",
"test1" => "继续测试",
......
];
英文的:
return [
"test" => "this is a test...",
"test1" => "test again...",
......
];
就是返回一个数组 return []
格式
注意: 各种语言中的元素键名是对应
第二步:配置文件 app/config/app.php
'locale' => 'zh',
'locales' => ['zh','en','cht'], //包含的语言种类
'fallback_locale' => 'cht',
第三步:处理多语言切换的控制器 SetLangController.php
以及方法
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class SetLangController extends Controller
{
public function language(Request $request){
$lang = $request->lang;
App::setLocale($lang); //配置默认语言
$request->session()->put('language',$lang); //存到session
return App::getLocale();
}
}
第四步:中间件的设置-middleware
(每一次请求,每个中间件都会执行) app/http/middleware
下添加中间件 Language.php
内容如下
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Session;
class Language
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Session::has('language') AND in_array(Session::get('language'), Config::get('app.locales'))) {
App::setLocale(Session::get('language'));
}else {
App::setLocale(Config::get('app.locale'));
}
return $next($request);
}
}
配置app/http/middleware/kernel.php
添加 Language
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Language::class, //这里
],
'api' => [
'throttle:60,1',
'bindings',
],
];
基本上就是这样了,试试看,希望可以对你有帮助.告辞
前后端分离,切换语言包
以下为前后端分离是laravel
无法使用session
,下面讲解如何使用api
切换语言包
以上不变,在中间中是需要变化一下:
一、在Kernel.php
中
扫描二维码关注公众号,回复:
4954666 查看本文章
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
...
...
'switch_lang'=>\Illuminate\Session\Middleware\StartSession::class,//这里开启session
'lang'=>\App\Http\Middleware\Language::class, //这里自己定义的切换语言包
];
二、在api
路由中
<?php
$api = app("Dingo\Api\Routing\Router");
$api->version('v1', function ($api) {
$api->group(["namespace" => "App\Http\Controllers\Api",'middleware'=>['auth.token','auth:api','permissions','switch_lang','lang']],
function ($api) {
//用户认证之后在这里写api
$api->post('college_alterlist','ResourceController@collegeList');
});
$api->group(["namespace" => "App\Http\Controllers\Api"], function ($api) {
//不需要做认证在这里写api
$api->post('login', 'TokenController@login');
});
//不需要权限认证
$api->group(["namespace" => "App\Http\Controllers\Api",'middleware'=>['auth.token','auth:api','switch_lang']], function ($api) {
$api->post('setLang','SetLangController@language');
});
});
到此结束