diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 32996d54b..7cb5ab908 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -43,6 +43,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\HandleInertiaRequests::class,
+ \App\Http\Middleware\CheckLocale::class,
],
'api' => [
diff --git a/app/Http/Middleware/CheckLocale.php b/app/Http/Middleware/CheckLocale.php
new file mode 100644
index 000000000..dddf35f53
--- /dev/null
+++ b/app/Http/Middleware/CheckLocale.php
@@ -0,0 +1,61 @@
+app = $app;
+ }
+
+ /**
+ * Handle an incoming request.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ * @return mixed
+ */
+ public function handle(Request $request, Closure $next)
+ {
+ $locale = $request->query('lang');
+
+ if (empty($locale)) {
+ $locale = $this->getLocale($request);
+ }
+
+ $this->app->setLocale($locale ?? $this->app['config']->get('app.locale'));
+
+ return $next($request);
+ }
+
+ /**
+ * Get the current or default locale.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return string|null
+ */
+ public function getLocale(Request $request): ?string
+ {
+ return ($user = $request->user())
+ ? $user->locale
+ : $this->app['language.detector']->detect();
+ }
+}
diff --git a/app/Listeners/LocaleUpdatedListener.php b/app/Listeners/LocaleUpdatedListener.php
new file mode 100644
index 000000000..c0f2f49fe
--- /dev/null
+++ b/app/Listeners/LocaleUpdatedListener.php
@@ -0,0 +1,19 @@
+set('cashier.currency_locale', $event->locale);
+ }
+}
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index a9f10a631..30c0ac9ef 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -2,8 +2,10 @@
namespace App\Providers;
+use App\Listeners\LocaleUpdatedListener;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
+use Illuminate\Foundation\Events\LocaleUpdated;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
@@ -18,6 +20,9 @@ class EventServiceProvider extends ServiceProvider
Registered::class => [
SendEmailVerificationNotification::class,
],
+ LocaleUpdated::class => [
+ LocaleUpdatedListener::class,
+ ],
];
/**
diff --git a/composer.json b/composer.json
index 12ad73189..ad8ca44cc 100644
--- a/composer.json
+++ b/composer.json
@@ -22,7 +22,8 @@
"laravel/scout": "^9.4",
"laravel/tinker": "^2.5",
"meilisearch/meilisearch-php": "^0.23.2",
- "tightenco/ziggy": "^1.0"
+ "tightenco/ziggy": "^1.0",
+ "vluzrmos/language-detector": "^2.3"
},
"require-dev": {
"barryvdh/laravel-ide-helper": "^2.12",
diff --git a/composer.lock b/composer.lock
index c364c8abb..023e01b6c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "3b192e17153bb856a43fe13be354d31b",
+ "content-hash": "efc65da104294a065a51d76bff968d03",
"packages": [
{
"name": "asm89/stack-cors",
@@ -6088,6 +6088,72 @@
],
"time": "2021-12-12T23:22:04+00:00"
},
+ {
+ "name": "vluzrmos/language-detector",
+ "version": "v2.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vluzrmos/laravel-language-detector.git",
+ "reference": "ed0b70b1a8078a8a550df20ff4e4bcc8fd370dc7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vluzrmos/laravel-language-detector/zipball/ed0b70b1a8078a8a550df20ff4e4bcc8fd370dc7",
+ "reference": "ed0b70b1a8078a8a550df20ff4e4bcc8fd370dc7",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/config": "~6.0 || ~7.0 || ~8.0 || ~9.0",
+ "illuminate/cookie": "~6.0 || ~7.0 || ~8.0 || ~9.0",
+ "illuminate/support": "~6.0 || ~7.0 || ~8.0 || ~9.0",
+ "illuminate/translation": "~6.0 || ~7.0 || ~8.0 || ~9.0",
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "orchestra/testbench": "^5.0 || ^6.0 || ^7.0",
+ "phpunit/phpunit": "^8.5 || ^9.0"
+ },
+ "type": "package",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Vluzrmos\\LanguageDetector\\Providers\\LanguageDetectorServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Vluzrmos\\LanguageDetector\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vagner do Carmo",
+ "email": "vluzrmos@gmail.com"
+ }
+ ],
+ "description": "Detect the language for your application using browser preferences, subdomains or route prefixes.",
+ "keywords": [
+ "i18n",
+ "language",
+ "laravel",
+ "locale",
+ "lumen"
+ ],
+ "support": {
+ "issues": "https://github.com/vluzrmos/laravel-language-detector/issues",
+ "source": "https://github.com/vluzrmos/laravel-language-detector/tree/v2.3.3"
+ },
+ "time": "2022-03-16T21:43:24+00:00"
+ },
{
"name": "voku/portable-ascii",
"version": "2.0.1",
diff --git a/config/lang-detector.php b/config/lang-detector.php
new file mode 100644
index 000000000..5858b8d67
--- /dev/null
+++ b/config/lang-detector.php
@@ -0,0 +1,48 @@
+ env('LANG_DETECTOR_AUTODETECT', false),
+
+ /*
+ * Default driver to use to detect the request language.
+ *
+ * Available: browser, subdomain, uri.
+ */
+ 'driver' => env('LANG_DETECTOR_DRIVER', 'browser'),
+
+ /*
+ * Used on subdomain and uri drivers. That indicates which segment should be used
+ * to verify the language.
+ */
+ 'segment' => env('LANG_DETECTOR_SEGMENT', 0),
+
+ /*
+ * Languages available on the application.
+ *
+ * You could use parse_langs_to_array to use the string syntax
+ * or just use the array of languages with its aliases.
+ */
+ 'languages' => parse_langs_to_array(
+ env('LANG_DETECTOR_LANGUAGES', [
+ 'en',
+ ])
+ ),
+
+ /*
+ * Indicates if should store detected locale on cookies
+ */
+ 'cookie' => (bool) env('LANG_DETECTOR_COOKIE', true),
+
+ /*
+ * Indicates if should encrypt cookie
+ */
+ 'cookie_encrypt' => (bool) env('LANG_DETECTOR_COOKIE_ENCRYPT', false),
+
+ /*
+ * Cookie name
+ */
+ 'cookie_name' => env('LANG_DETECTOR_COOKIE', 'locale'),
+];
diff --git a/resources/lang/en/account.php b/lang/en/account.php
similarity index 100%
rename from resources/lang/en/account.php
rename to lang/en/account.php
diff --git a/resources/lang/en/app.php b/lang/en/app.php
similarity index 100%
rename from resources/lang/en/app.php
rename to lang/en/app.php
diff --git a/resources/lang/en/auth.php b/lang/en/auth.php
similarity index 100%
rename from resources/lang/en/auth.php
rename to lang/en/auth.php
diff --git a/resources/lang/en/contact.php b/lang/en/contact.php
similarity index 100%
rename from resources/lang/en/contact.php
rename to lang/en/contact.php
diff --git a/resources/lang/en/contact_log.php b/lang/en/contact_log.php
similarity index 100%
rename from resources/lang/en/contact_log.php
rename to lang/en/contact_log.php
diff --git a/resources/lang/en/currencies.php b/lang/en/currencies.php
similarity index 100%
rename from resources/lang/en/currencies.php
rename to lang/en/currencies.php
diff --git a/resources/lang/en/email.php b/lang/en/email.php
similarity index 100%
rename from resources/lang/en/email.php
rename to lang/en/email.php
diff --git a/resources/lang/en/feed.php b/lang/en/feed.php
similarity index 100%
rename from resources/lang/en/feed.php
rename to lang/en/feed.php
diff --git a/resources/lang/en/format.php b/lang/en/format.php
similarity index 100%
rename from resources/lang/en/format.php
rename to lang/en/format.php
diff --git a/resources/lang/en/log.php b/lang/en/log.php
similarity index 100%
rename from resources/lang/en/log.php
rename to lang/en/log.php
diff --git a/resources/lang/en/pagination.php b/lang/en/pagination.php
similarity index 100%
rename from resources/lang/en/pagination.php
rename to lang/en/pagination.php
diff --git a/resources/lang/en/passwords.php b/lang/en/passwords.php
similarity index 100%
rename from resources/lang/en/passwords.php
rename to lang/en/passwords.php
diff --git a/resources/lang/en/validation.php b/lang/en/validation.php
similarity index 100%
rename from resources/lang/en/validation.php
rename to lang/en/validation.php
diff --git a/package.json b/package.json
index 7b35e9b8e..6ad8459db 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,7 @@
"husky": "^4.3.0",
"eslint-plugin-vue": "^9.1.0",
"laravel-mix": "^6.0.44",
+ "laravel-vue-i18n": "^1.4.3",
"lint-staged": "^12.5.0",
"lodash": "^4.17.19",
"postcss": "^8.4.14",
diff --git a/resources/js/Pages/Auth/Login.vue b/resources/js/Pages/Auth/Login.vue
index ed05f9555..f00a584d4 100644
--- a/resources/js/Pages/Auth/Login.vue
+++ b/resources/js/Pages/Auth/Login.vue
@@ -62,7 +62,9 @@