diff --git a/src/main/java/com/gitblit/wicket/pages/EditUserPage.html b/src/main/java/com/gitblit/wicket/pages/EditUserPage.html index 3bccdd590..48e5339f3 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditUserPage.html +++ b/src/main/java/com/gitblit/wicket/pages/EditUserPage.html @@ -31,11 +31,12 @@ - - - - - + + + + + + diff --git a/src/main/java/com/gitblit/wicket/pages/EditUserPage.java b/src/main/java/com/gitblit/wicket/pages/EditUserPage.java index 72dee6b6d..0a6981b3e 100644 --- a/src/main/java/com/gitblit/wicket/pages/EditUserPage.java +++ b/src/main/java/com/gitblit/wicket/pages/EditUserPage.java @@ -20,15 +20,18 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.apache.wicket.PageParameters; import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.CheckBox; +import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.util.CollectionModel; import org.apache.wicket.model.util.ListModel; @@ -108,6 +111,30 @@ protected void setupPage(final UserModel userModel) { final Palette teams = new Palette("teams", new ListModel( new ArrayList(userTeams)), new CollectionModel(app().users() .getAllTeamNames()), new StringChoiceRenderer(), 10, false); + Locale locale = userModel.getPreferences().getLocale(); + if (locale == null) { + locale = Locale.ENGLISH; + } + + List languages = UserPage.getLanguages(); + Language preferredLanguage = null; + if (locale != null) { + String localeCode = locale.getLanguage(); + if (!StringUtils.isEmpty(locale.getCountry())) { + localeCode += "_" + locale.getCountry(); + } + + for (Language lang : languages) { + if (lang.code.equals(localeCode)) { + // language_COUNTRY match + preferredLanguage = lang; + } else if (preferredLanguage != null && lang.code.startsWith(locale.getLanguage())) { + // language match + preferredLanguage = lang; + } + } + } + final IModel language = Model.of(preferredLanguage); Form form = new Form("editForm", model) { private static final long serialVersionUID = 1L; @@ -123,6 +150,10 @@ protected void onSubmit() { error(getString("gb.pleaseSetUsername")); return; } + Language lang = language.getObject(); + if (lang != null) { + userModel.getPreferences().setLocale(lang.code); + } // force username to lower-case userModel.username = userModel.username.toLowerCase(); String username = userModel.username; @@ -251,7 +282,10 @@ protected void onSubmit() { form.add(confirmPasswordField.setEnabled(editCredentials)); form.add(new TextField("displayName").setEnabled(editDisplayName)); form.add(new TextField("emailAddress").setEnabled(editEmailAddress)); + + DropDownChoice choice = new DropDownChoice("language",language,languages ); + form.add( choice.setEnabled(languages.size()>0) ); if (userModel.canAdmin() && !userModel.canAdmin) { // user inherits Admin permission // display a disabled-yet-checked checkbox diff --git a/src/main/java/com/gitblit/wicket/pages/Language.java b/src/main/java/com/gitblit/wicket/pages/Language.java new file mode 100644 index 000000000..6eafb4dc6 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/pages/Language.java @@ -0,0 +1,21 @@ +package com.gitblit.wicket.pages; + +import java.io.Serializable; + +public class Language implements Serializable { + + private static final long serialVersionUID = 1L; + + final String name; + final String code; + + public Language(String name, String code) { + this.name = name; + this.code = code; + } + + @Override + public String toString() { + return name + " (" + code + ")"; + } +} \ No newline at end of file diff --git a/src/main/java/com/gitblit/wicket/pages/UserPage.java b/src/main/java/com/gitblit/wicket/pages/UserPage.java index ea68f25b1..25a2249b7 100644 --- a/src/main/java/com/gitblit/wicket/pages/UserPage.java +++ b/src/main/java/com/gitblit/wicket/pages/UserPage.java @@ -166,12 +166,9 @@ protected void addDropDownMenus(List navLinks) { navLinks.add(menu); } - - private void addPreferences(UserModel user) { - // add preferences - Form prefs = new Form("prefsForm"); - - List languages = Arrays.asList( + + public static List getLanguages(){ + return Arrays.asList( new Language("Deutsch","de"), new Language("English","en"), new Language("Español", "es"), @@ -185,6 +182,13 @@ private void addPreferences(UserModel user) { new Language("Português", "pt_BR"), new Language("簡體中文", "zh_CN"), new Language("正體中文", "zh_TW")); + } + + private void addPreferences(UserModel user) { + // add preferences + Form prefs = new Form("prefsForm"); + + List languages = getLanguages(); Locale locale = user.getPreferences().getLocale(); if (locale == null) { @@ -315,22 +319,4 @@ private void addSshKeys(final UserModel user) { add(new Fragment("sshKeysLink", "sshKeysLinkFragment", this).setRenderBodyOnly(true)); add(keysTab.setRenderBodyOnly(true)); } - - private class Language implements Serializable { - - private static final long serialVersionUID = 1L; - - final String name; - final String code; - - public Language(String name, String code) { - this.name = name; - this.code = code; - } - - @Override - public String toString() { - return name + " (" + code +")"; - } - } }