以上的是以
web
為例
第一步:建立所有的語言封包件
resources/lang
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcVTWE9UenpWTykkeYhnRzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYvwFd4VGdvwlMvw1ayFWbyVGdhd3PwcDN0gTNyEjNwkDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
建立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
中
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','[email protected]');
});
$api->group(["namespace" => "App\Http\Controllers\Api"], function ($api) {
//不需要做認證在這裡寫api
$api->post('login', '[email protected]');
});
//不需要權限認證
$api->group(["namespace" => "App\Http\Controllers\Api",'middleware'=>['auth.token','auth:api','switch_lang']], function ($api) {
$api->post('setLang','[email protected]');
});
});
到此結束