Browse Source

HUE-3100 [useradmin] Add a language setting in User's Edit Profile page

Jenny Kim 9 years ago
parent
commit
8de37b9

+ 7 - 2
apps/useradmin/src/useradmin/forms.py

@@ -23,10 +23,11 @@ from django import forms
 from django.contrib.auth.models import User, Group
 from django.forms import ValidationError
 from django.forms.util import ErrorList
-from django.utils.translation import ugettext as _, ugettext_lazy as _t
+from django.utils.translation import get_language, ugettext as _, ugettext_lazy as _t
 
 from desktop import conf as desktop_conf
 from desktop.lib.django_util import get_username_re_rule, get_groupname_re_rule
+from desktop.settings import LANGUAGES
 
 from useradmin.models import GroupPermission, HuePermission
 from useradmin.models import get_default_user_group
@@ -105,12 +106,16 @@ class UserChangeForm(django.contrib.auth.forms.UserChangeForm):
                                             help_text=_t("Create home directory if one doesn't already exist."),
                                             initial=True,
                                             required=False)
-
+  language = forms.ChoiceField(label=_t("Language Preference"),
+                               choices=LANGUAGES,
+                               required=False)
 
   class Meta(django.contrib.auth.forms.UserChangeForm.Meta):
     fields = ["username", "first_name", "last_name", "email", "ensure_home_directory"]
 
   def __init__(self, *args, **kwargs):
+
+
     super(UserChangeForm, self).__init__(*args, **kwargs)
 
     if self.instance.id:

+ 4 - 1
apps/useradmin/src/useradmin/templates/edit_user.mako

@@ -44,7 +44,7 @@ ${ layout.menubar(section='users') }
           % endif
           </a>
         </li>
-        <li><a href="#step2" class="step">${ user.is_superuser and _('Step 2: Names and Groups') or _('Step 2: Names') }</a>
+        <li><a href="#step2" class="step">${ user.is_superuser and _('Step 2: Profile and Groups') or _('Step 2: Profile') }</a>
         </li>
         % if user.is_superuser:
             <li><a href="#step3" class="step">${ _('Step 3: Advanced') }</a></li>
@@ -75,6 +75,9 @@ ${ layout.menubar(section='users') }
                 % endif
 
                 ${layout.render_field(form["email"])}
+
+                ${layout.render_field(form["language"])}
+
                 % if user.is_superuser:
                   ${layout.render_field(form["groups"])}
                 % endif

+ 9 - 1
apps/useradmin/src/useradmin/views.py

@@ -33,7 +33,7 @@ from django.forms.util import ErrorList
 from django.http import HttpResponse
 from django.shortcuts import redirect
 from django.utils.encoding import smart_str
-from django.utils.translation import ugettext as _
+from django.utils.translation import get_language, ugettext as _
 
 import desktop.conf
 from desktop.conf import LDAP
@@ -271,6 +271,10 @@ def edit_user(request, username=None):
         except (IOError, WebHdfsException), e:
           request.error(_('Cannot make home directory for user %s.') % instance.username)
 
+      # Change langugage preference, if necessary
+      if form.cleaned_data.get('language') and form.cleaned_data.get('language') != get_language():
+        request.session['django_language'] = form.cleaned_data.get('language')
+
       # Audit log
       if username is not None:
         request.audit = {
@@ -296,14 +300,18 @@ def edit_user(request, username=None):
       else:
         return redirect(reverse(edit_user, kwargs={'username': username}))
   else:
+    # Initialize form values
     default_user_group = get_default_user_group()
     initial = {
+      'language': request.session.get('django_language', get_language()),
       'ensure_home_directory': instance is None,
       'groups': default_user_group and [default_user_group] or []
     }
     form = form_class(instance=instance, initial=initial)
+
     if request.user.is_superuser and request.user.username != username:
       form.fields.pop("password_old")
+
   if require_change_password(userprofile):
     return render('change_password.mako', request, dict(form=form, username=username))
   else:

+ 12 - 0
desktop/core/src/desktop/settings.py

@@ -80,6 +80,18 @@ desktop.log.fancy_logging()
 # http://www.i18nguy.com/unicode/language-identifiers.html
 LANGUAGE_CODE = 'en-us'
 
+LANGUAGES = [
+  ('de', _('German')),
+  ('en-us', _('English')),
+  ('es', _('Spanish')),
+  ('fr', _('French')),
+  ('ja', _('Japanese')),
+  ('ko', _('Korean')),
+  ('pt', _('Portuguese')),
+  ('pt_BR', _('Brazilian Portuguese')),
+  ('zh_CN', _('Simplified Chinese')),
+]
+
 SITE_ID = 1
 
 # If you set this to False, Django will make some optimizations so as not