瀏覽代碼

Store user preferred language in database

Daniel Supernault 5 年之前
父節點
當前提交
18bc9c3024

+ 9 - 4
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);
             }
         }
 

+ 5 - 0
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);
         }
 

+ 6 - 0
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');
+    }
 }

+ 15 - 5
resources/views/settings/home.blade.php

@@ -37,25 +37,25 @@
   <form method="post">
     @csrf
     <div class="form-group row">
-      <label for="name" class="col-sm-3 col-form-label font-weight-bold text-right">Name</label>
+      <label for="name" class="col-sm-3 col-form-label font-weight-bold">Name</label>
       <div class="col-sm-9">
         <input type="text" class="form-control" id="name" name="name" placeholder="Your Name" value="{{Auth::user()->profile->name}}">
       </div>
     </div>
     <div class="form-group row">
-      <label for="username" class="col-sm-3 col-form-label font-weight-bold text-right">Username</label>
+      <label for="username" class="col-sm-3 col-form-label font-weight-bold">Username</label>
       <div class="col-sm-9">
         <input type="text" class="form-control" id="username" name="username" placeholder="Username" value="{{Auth::user()->profile->username}}" readonly>
       </div>
     </div>
     <div class="form-group row">
-      <label for="website" class="col-sm-3 col-form-label font-weight-bold text-right">Website</label>
+      <label for="website" class="col-sm-3 col-form-label font-weight-bold">Website</label>
       <div class="col-sm-9">
         <input type="text" class="form-control" id="website" name="website" placeholder="Website" value="{{Auth::user()->profile->website}}">
       </div>
     </div>
     <div class="form-group row">
-      <label for="bio" class="col-sm-3 col-form-label font-weight-bold text-right">Bio</label>
+      <label for="bio" class="col-sm-3 col-form-label font-weight-bold">Bio</label>
       <div class="col-sm-9">
         <textarea class="form-control" id="bio" name="bio" placeholder="Add a bio here" rows="2" data-max-length="{{config('pixelfed.max_bio_length')}}">{{Auth::user()->profile->bio}}</textarea>
         <p class="form-text">
@@ -63,11 +63,21 @@
         </p>
       </div>
     </div>
+    <div class="form-group row">
+      <label for="bio" class="col-sm-3 col-form-label font-weight-bold">Language</label>
+      <div class="col-sm-9">
+        <select class="form-control" name="language">
+        @foreach(App\Util\Localization\Localization::languages() as $lang)
+          <option value="{{$lang}}" {{Auth::user()->language == $lang ? 'selected':''}}>{{locale_get_display_language($lang, 'en')}} - {{locale_get_display_language($lang, $lang)}}</option>
+        @endforeach
+        </select>
+      </div>
+    </div>
     <div class="pt-3">
       <p class="font-weight-bold text-muted text-center">Storage Usage</p>
     </div>
     <div class="form-group row">
-      <label for="email" class="col-sm-3 col-form-label font-weight-bold text-right">Storage Used</label>
+      <label class="col-sm-3 col-form-label font-weight-bold">Storage Used</label>
       <div class="col-sm-9">
         <div class="progress mt-2">
           <div class="progress-bar" role="progressbar" style="width: {{$storage['percentUsed']}}%"  aria-valuenow="{{$storage['percentUsed']}}" aria-valuemin="0" aria-valuemax="100"></div>