diff --git a/app/Http/Controllers/Settings/HomeSettings.php b/app/Http/Controllers/Settings/HomeSettings.php index b63cedee8..aaf063c3a 100644 --- a/app/Http/Controllers/Settings/HomeSettings.php +++ b/app/Http/Controllers/Settings/HomeSettings.php @@ -38,12 +38,14 @@ trait HomeSettings 'name' => 'required|string|max:'.config('pixelfed.max_name_length'), 'bio' => 'nullable|string|max:'.config('pixelfed.max_bio_length'), 'website' => 'nullable|url', + 'language' => 'nullable|string|min:2|max:5' ]); $changes = false; $name = strip_tags(Purify::clean($request->input('name'))); $bio = $request->filled('bio') ? strip_tags(Purify::clean($request->input('bio'))) : null; $website = $request->input('website'); + $language = $request->input('language'); $user = Auth::user(); $profile = $user->profile; $layout = $request->input('profile_layout'); @@ -51,10 +53,10 @@ trait HomeSettings $layout = !in_array($layout, ['metro', 'moment']) ? 'metro' : $layout; } - $validate = config('pixelfed.enforce_email_verification'); + $enforceEmailVerification = config('pixelfed.enforce_email_verification'); // Only allow email to be updated if not yet verified - if (!$validate || !$changes && $user->email_verified_at) { + if (!$enforceEmailVerification || !$changes && $user->email_verified_at) { if ($profile->name != $name) { $changes = true; $user->name = $name; @@ -71,9 +73,12 @@ trait HomeSettings $profile->bio = $bio; } - if ($profile->profile_layout != $layout) { + if($user->language != $language && + in_array($language, \App\Util\Localization\Localization::languages()) + ) { $changes = true; - $profile->profile_layout = $layout; + $user->language = $language; + session()->put('locale', $language); } } diff --git a/app/Http/Controllers/SiteController.php b/app/Http/Controllers/SiteController.php index f552013d5..b7d2bdb19 100644 --- a/app/Http/Controllers/SiteController.php +++ b/app/Http/Controllers/SiteController.php @@ -34,6 +34,11 @@ class SiteController extends Controller // todo: add other locales after pushing new l10n strings $locales = Localization::languages(); if(in_array($locale, $locales)) { + if($request->user()) { + $user = $request->user(); + $user->language = $locale; + $user->save(); + } session()->put('locale', $locale); } diff --git a/app/Listeners/AuthLogin.php b/app/Listeners/AuthLogin.php index fab7ff6d6..bd38eee4a 100644 --- a/app/Listeners/AuthLogin.php +++ b/app/Listeners/AuthLogin.php @@ -36,6 +36,7 @@ class AuthLogin $this->userState($user); $this->userDevice($user); $this->userProfileId($user); + $this->userLanguage($user); } protected function userProfile($user) @@ -132,4 +133,9 @@ class AuthLogin }); } } + + protected function userLanguage($user) + { + session()->put('locale', $user->language ?? 'en'); + } } diff --git a/resources/views/settings/home.blade.php b/resources/views/settings/home.blade.php index 5487eaafd..12016533d 100644 --- a/resources/views/settings/home.blade.php +++ b/resources/views/settings/home.blade.php @@ -37,25 +37,25 @@
@csrf
- +
- +
- +
- +

@@ -63,11 +63,21 @@

+
+ +
+ +
+

Storage Usage

- +