From 8d3380bb5eb417865e872fb5387b12784633736c Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Mon, 31 May 2021 23:31:54 +0200 Subject: [PATCH] feat: change language dynamically (#932) --- .../Controllers/User/LocaleController.php | 8 +-- app/Http/Middleware/ShareInertiaData.php | 7 +- app/Models/User/User.php | 1 + app/Services/User/UpdateLocale.php | 7 +- .../Pages/Profile/Partials/UpdateLocale.vue | 53 +++++++++------ resources/js/Pages/Profile/Show.vue | 3 +- resources/js/app.js | 7 +- resources/js/langs.js | 7 +- resources/lang/fr/app.php | 4 ++ tests/Unit/Services/User/UpdateLocaleTest.php | 64 +++++++++++++++++++ 10 files changed, 126 insertions(+), 35 deletions(-) create mode 100644 tests/Unit/Services/User/UpdateLocaleTest.php diff --git a/app/Http/Controllers/User/LocaleController.php b/app/Http/Controllers/User/LocaleController.php index c40f7beb2..a504f5a9e 100644 --- a/app/Http/Controllers/User/LocaleController.php +++ b/app/Http/Controllers/User/LocaleController.php @@ -2,10 +2,10 @@ namespace App\Http\Controllers\User; -use Inertia\Response; use Illuminate\Http\Request; use App\Services\User\UpdateLocale; use App\Http\Controllers\Controller; +use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth; class LocaleController extends Controller @@ -23,8 +23,8 @@ public function update(Request $request) 'locale' => $request->input('locale'), ]); - return response()->json([ - 'data' => true, - ], 200); + return $request->wantsJson() + ? new JsonResponse('', 200) + : back()->with('status', 'locale-changed'); } } diff --git a/app/Http/Middleware/ShareInertiaData.php b/app/Http/Middleware/ShareInertiaData.php index f1310701b..d5c53703d 100644 --- a/app/Http/Middleware/ShareInertiaData.php +++ b/app/Http/Middleware/ShareInertiaData.php @@ -2,8 +2,8 @@ namespace App\Http\Middleware; +use App\Helpers\LocaleHelper; use Inertia\Inertia; -use Laravel\Jetstream\Jetstream; use Illuminate\Support\Facades\Session; /** @@ -26,6 +26,7 @@ public function handle($request, $next) 'jetstream' => function () use ($request) { return [ 'flash' => $request->session()->get('flash', []), + 'languages' => LocaleHelper::getLocaleList(), ]; }, 'user' => function () use ($request) { @@ -33,7 +34,9 @@ public function handle($request, $next) return; } - return []; + return [ + 'two_factor_enabled' => ! is_null($request->user()->two_factor_secret), + ]; }, 'errorBags' => function () { return collect(optional(Session::get('errors'))->getBags() ?: [])->mapWithKeys(function ($bag, $key) { diff --git a/app/Models/User/User.php b/app/Models/User/User.php index 273ee8b29..c08f25076 100644 --- a/app/Models/User/User.php +++ b/app/Models/User/User.php @@ -32,6 +32,7 @@ class User extends Authenticatable implements MustVerifyEmail 'nickname', 'uuid', 'show_help', + 'locale', ]; /** diff --git a/app/Services/User/UpdateLocale.php b/app/Services/User/UpdateLocale.php index 76bdb0f9c..aacff3aae 100644 --- a/app/Services/User/UpdateLocale.php +++ b/app/Services/User/UpdateLocale.php @@ -4,6 +4,7 @@ use App\Models\User\User; use App\Services\BaseService; +use Illuminate\Validation\Rule; class UpdateLocale extends BaseService { @@ -19,7 +20,11 @@ public function rules(): array { return [ 'user_id' => 'required|integer|exists:users,id', - 'locale' => 'required|string', + 'locale' => [ + 'required', + 'string', + Rule::in(config('lang-detector.languages')), + ], ]; } diff --git a/resources/js/Pages/Profile/Partials/UpdateLocale.vue b/resources/js/Pages/Profile/Partials/UpdateLocale.vue index a7378d487..2360dc310 100644 --- a/resources/js/Pages/Profile/Partials/UpdateLocale.vue +++ b/resources/js/Pages/Profile/Partials/UpdateLocale.vue @@ -9,14 +9,10 @@