在海外專案中都會遇到的多語言(多面外一個國家就要多一個語言)和時區(伺服器時間與客戶端時間不一致)的問題,記錄一下解決方案,本文只針對服務端,前端思路與服務端一致
提示類
提示類的文字要用到多語言包的切換,下面寫下在laravel的建立流程
-
新建語言中介軟體使用命令:
artisan make:middleware lang
生成中介軟體:<?php namespace App\Http\Middleware; use Closure; class lang { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ($request->input('lang')) { \App::setLocale($request->input('lang')); }else{ \App::setLocale('en'); } return $next($request); } }
- 在Kernel中註冊新新增的中間區
protected $routeMiddleware = [ 'lang' => \App\Http\Middleware\lang::class, ];
- 在路由檔案中要用麼多語言的url繫結上lang中介軟體
Route::middleware(['lang'])->group(function(){ Route::post('login', 'User\LoginController@login'); });
4.管理對應的語言包
5.使用trans函式呼叫當前語言的語言包trans('message.success')
文章類
當一個文字或標題有多個語言的時候,常見的解決方案是每一種語言的標題都給一個輸入框填寫,然後跟據當前裝置的語言返回對應語言的標題或文字
在資料儲存中會記錄當前日期,保當前的日期是按照當前系統設定的時間生成的,比說laravel預設的是UTC,但某國的時區和UTC差了3個小時,你返回UTC的時期給這個國家的使用者明顯就錯了
-
composer Carbon包,laravel已自帶,跳過這一步
composer require nesbot/carbon
2.寫一個日期轉換的函式
/** * 時區轉換 * @param $date date 轉換時間 * @param $nowTimezone string 當前時區 * @param $transitionTimezone string 轉換時區 */ function timezoneTransition($date,$nowTimezone,$transitionTimezone){ $date = date('Y-m-d H:i:s',strtotime($date)); $date = Carbon::createFromFormat('Y-m-d H:i:s', $date, $nowTimezone)->setTimezone($transitionTimezone)->toDateTimeString(); return $date }