From 8cdbbaa00e1daecdcadab4d46f74ababbf2f9439 Mon Sep 17 00:00:00 2001 From: Chri$ Date: Tue, 3 Dec 2024 02:01:09 +0100 Subject: [PATCH 01/15] Add local columns in tables and add middleware to check and set app language --- app/Http/Middleware/LocaleLangMiddleware.php | 33 ++++++++++++++ bootstrap/app.php | 3 ++ ...to_articles_discussions_threads_tables.php | 44 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 app/Http/Middleware/LocaleLangMiddleware.php create mode 100644 database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php diff --git a/app/Http/Middleware/LocaleLangMiddleware.php b/app/Http/Middleware/LocaleLangMiddleware.php new file mode 100644 index 00000000..67acc718 --- /dev/null +++ b/app/Http/Middleware/LocaleLangMiddleware.php @@ -0,0 +1,33 @@ +has('locale')) { + $navigatorLang = $request->server('HTTP_ACCEPT_LANGUAGE'); + $navigatorLang = (is_string($navigatorLang) && strlen($navigatorLang) >= 2) ? $navigatorLang : ''; + $navigatorLang = substr($navigatorLang, 0, 2); + $lang = in_array($navigatorLang, ['fr', 'en']) ? $navigatorLang : 'fr'; + $request->session()->put('locale', $lang); + } + app()->setLocale(session()->get('locale')); + + return $next($request); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 9b8a54b2..7269dc1f 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use App\Http\Middleware\LocaleLangMiddleware; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; @@ -17,6 +18,8 @@ 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'checkIfBanned' => \App\Http\Middleware\CheckIfBanned::class, ]); + $middleware->append(\Illuminate\Session\Middleware\StartSession::class); + $middleware->append(LocaleLangMiddleware::class); }) ->withExceptions(function (Exceptions $exceptions): void { // diff --git a/database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php b/database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php new file mode 100644 index 00000000..38ab3418 --- /dev/null +++ b/database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php @@ -0,0 +1,44 @@ +string('locale')->default('fr')->after('slug'); + }); + + Schema::table('discussions', function (Blueprint $table): void { + $table->string('locale')->default('fr')->after('body'); + }); + + Schema::table('threads', function (Blueprint $table): void { + $table->string('locale')->default('fr')->after('body'); + }); + }); + } + + public function down(): void + { + Schema::table('articles_discussions_threads_tables', function (Blueprint $table): void { + Schema::table('articles', function (Blueprint $table): void { + $table->dropColumn('locale'); + }); + + Schema::table('discussions', function (Blueprint $table): void { + $table->dropColumn('locale'); + }); + + Schema::table('threads', function (Blueprint $table): void { + $table->dropColumn('locale'); + }); + }); + } +}; From ea470efc79ba224fa4e40d229f8e5d7f2436caad Mon Sep 17 00:00:00 2001 From: Chri$ Date: Tue, 3 Dec 2024 16:33:28 +0100 Subject: [PATCH 02/15] add lang flag and update middleware with livewire class --- .env.example | 1 + app/Http/Middleware/LocaleLangMiddleware.php | 33 -------------- app/Http/Middleware/LocaleMiddleware.php | 42 ++++++++++++++++++ app/Livewire/Components/Locale.php | 39 ++++++++++++++++ bootstrap/app.php | 8 ++-- config/lcm.php | 5 +++ ..._03_004238_add_locale_column_to_tables.php | 36 +++++++++++++++ ...to_articles_discussions_threads_tables.php | 44 ------------------- .../views/components/layouts/footer.blade.php | 1 + .../livewire/components/locale.blade.php | 22 ++++++++++ 10 files changed, 151 insertions(+), 80 deletions(-) delete mode 100644 app/Http/Middleware/LocaleLangMiddleware.php create mode 100644 app/Http/Middleware/LocaleMiddleware.php create mode 100644 app/Livewire/Components/Locale.php create mode 100644 database/migrations/2024_12_03_004238_add_locale_column_to_tables.php delete mode 100644 database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php create mode 100644 resources/views/livewire/components/locale.blade.php diff --git a/.env.example b/.env.example index fd6377df..074ba148 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,7 @@ APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://laravel.cm.test +APP_LOCALE=fr FILAMENT_PATH=cp LOG_CHANNEL=stack diff --git a/app/Http/Middleware/LocaleLangMiddleware.php b/app/Http/Middleware/LocaleLangMiddleware.php deleted file mode 100644 index 67acc718..00000000 --- a/app/Http/Middleware/LocaleLangMiddleware.php +++ /dev/null @@ -1,33 +0,0 @@ -has('locale')) { - $navigatorLang = $request->server('HTTP_ACCEPT_LANGUAGE'); - $navigatorLang = (is_string($navigatorLang) && strlen($navigatorLang) >= 2) ? $navigatorLang : ''; - $navigatorLang = substr($navigatorLang, 0, 2); - $lang = in_array($navigatorLang, ['fr', 'en']) ? $navigatorLang : 'fr'; - $request->session()->put('locale', $lang); - } - app()->setLocale(session()->get('locale')); - - return $next($request); - } -} diff --git a/app/Http/Middleware/LocaleMiddleware.php b/app/Http/Middleware/LocaleMiddleware.php new file mode 100644 index 00000000..c3c5f0f4 --- /dev/null +++ b/app/Http/Middleware/LocaleMiddleware.php @@ -0,0 +1,42 @@ +server('HTTP_ACCEPT_LANGUAGE'))) { + $navigatorLang = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2); + if (in_array($navigatorLang, $supportLang)) { + $lang = $navigatorLang; + } + } + } + if (! is_null($user)) { + if (isset($user->settings['default_lang']) && $user->settings['default_lang'] != $lang) { + $lang = $user->settings['default_lang']; + } + } + app()->setLocale($lang); + + return $next($request); + } +} diff --git a/app/Livewire/Components/Locale.php b/app/Livewire/Components/Locale.php new file mode 100644 index 00000000..2b30081a --- /dev/null +++ b/app/Livewire/Components/Locale.php @@ -0,0 +1,39 @@ +selectedLang = app()->getLocale(); + } + + public function changeLang(string $lang): RedirectResponse|Redirector + { + $user = Auth::user(); + if ($user) { + $settings = $user->settings; + $settings['default_lang'] = $lang; + $user->settings = $settings; + $user->save(); + } + app()->setLocale($lang); + return redirect()->to(url()->current()); + } + + public function render(): View + { + return view('livewire.components.locale'); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 7269dc1f..2121f2c5 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use App\Http\Middleware\LocaleLangMiddleware; +use App\Http\Middleware\LocaleMiddleware; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; @@ -18,8 +18,10 @@ 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'checkIfBanned' => \App\Http\Middleware\CheckIfBanned::class, ]); - $middleware->append(\Illuminate\Session\Middleware\StartSession::class); - $middleware->append(LocaleLangMiddleware::class); + $middleware->appendToGroup('web', [ + LocaleMiddleware::class, + \Illuminate\Session\Middleware\StartSession::class, + ]); }) ->withExceptions(function (Exceptions $exceptions): void { // diff --git a/config/lcm.php b/config/lcm.php index eda80e6c..78b84eea 100644 --- a/config/lcm.php +++ b/config/lcm.php @@ -26,6 +26,11 @@ 'web_hook' => env('SLACK_WEBHOOK_URL', ''), ], + 'lang' => [ + 'app_local' => env('APP_LOCALE', 'fr'), + 'support_local' => ['fr', 'en'], + ], + 'spa_url' => env('FRONTEND_APP_URL', 'http://localhost:4200'), 'notch-pay-public-token' => env('NOTCHPAY_PUBLIC_KEY', null), diff --git a/database/migrations/2024_12_03_004238_add_locale_column_to_tables.php b/database/migrations/2024_12_03_004238_add_locale_column_to_tables.php new file mode 100644 index 00000000..4f2ce21f --- /dev/null +++ b/database/migrations/2024_12_03_004238_add_locale_column_to_tables.php @@ -0,0 +1,36 @@ +string('locale')->default('fr')->after('slug'); + }); + + Schema::table('discussions', function (Blueprint $table): void { + $table->string('locale')->default('fr')->after('body'); + }); + + Schema::table('threads', function (Blueprint $table): void { + $table->string('locale')->default('fr')->after('body'); + }); + } + + public function down(): void + { + foreach ($this->tables as $tab) { + Schema::table($tab, function (Blueprint $table): void { + $table->dropColumn('locale'); + }); + } + } +}; diff --git a/database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php b/database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php deleted file mode 100644 index 38ab3418..00000000 --- a/database/migrations/2024_12_03_004238_add_locale_to_articles_discussions_threads_tables.php +++ /dev/null @@ -1,44 +0,0 @@ -string('locale')->default('fr')->after('slug'); - }); - - Schema::table('discussions', function (Blueprint $table): void { - $table->string('locale')->default('fr')->after('body'); - }); - - Schema::table('threads', function (Blueprint $table): void { - $table->string('locale')->default('fr')->after('body'); - }); - }); - } - - public function down(): void - { - Schema::table('articles_discussions_threads_tables', function (Blueprint $table): void { - Schema::table('articles', function (Blueprint $table): void { - $table->dropColumn('locale'); - }); - - Schema::table('discussions', function (Blueprint $table): void { - $table->dropColumn('locale'); - }); - - Schema::table('threads', function (Blueprint $table): void { - $table->dropColumn('locale'); - }); - }); - } -}; diff --git a/resources/views/components/layouts/footer.blade.php b/resources/views/components/layouts/footer.blade.php index c8022351..f3bf9cfb 100644 --- a/resources/views/components/layouts/footer.blade.php +++ b/resources/views/components/layouts/footer.blade.php @@ -99,6 +99,7 @@ class="ml-2 size-6 rounded-full"