2020import java .util .Collections ;
2121import java .util .Iterator ;
2222import java .util .List ;
23+ import java .util .Locale ;
2324
2425import org .apache .wicket .PageParameters ;
2526import org .apache .wicket .behavior .SimpleAttributeModifier ;
2627import org .apache .wicket .extensions .markup .html .form .palette .Palette ;
2728import org .apache .wicket .markup .html .form .Button ;
2829import org .apache .wicket .markup .html .form .CheckBox ;
30+ import org .apache .wicket .markup .html .form .DropDownChoice ;
2931import org .apache .wicket .markup .html .form .Form ;
3032import org .apache .wicket .markup .html .form .TextField ;
3133import org .apache .wicket .model .CompoundPropertyModel ;
34+ import org .apache .wicket .model .IModel ;
3235import org .apache .wicket .model .Model ;
3336import org .apache .wicket .model .util .CollectionModel ;
3437import org .apache .wicket .model .util .ListModel ;
@@ -108,6 +111,30 @@ protected void setupPage(final UserModel userModel) {
108111 final Palette <String > teams = new Palette <String >("teams" , new ListModel <String >(
109112 new ArrayList <String >(userTeams )), new CollectionModel <String >(app ().users ()
110113 .getAllTeamNames ()), new StringChoiceRenderer (), 10 , false );
114+ Locale locale = userModel .getPreferences ().getLocale ();
115+ if (locale == null ) {
116+ locale = Locale .ENGLISH ;
117+ }
118+
119+ List <Language > languages = UserPage .getLanguages ();
120+ Language preferredLanguage = null ;
121+ if (locale != null ) {
122+ String localeCode = locale .getLanguage ();
123+ if (!StringUtils .isEmpty (locale .getCountry ())) {
124+ localeCode += "_" + locale .getCountry ();
125+ }
126+
127+ for (Language lang : languages ) {
128+ if (lang .code .equals (localeCode )) {
129+ // language_COUNTRY match
130+ preferredLanguage = lang ;
131+ } else if (preferredLanguage != null && lang .code .startsWith (locale .getLanguage ())) {
132+ // language match
133+ preferredLanguage = lang ;
134+ }
135+ }
136+ }
137+ final IModel <Language > language = Model .of (preferredLanguage );
111138 Form <UserModel > form = new Form <UserModel >("editForm" , model ) {
112139
113140 private static final long serialVersionUID = 1L ;
@@ -123,6 +150,10 @@ protected void onSubmit() {
123150 error (getString ("gb.pleaseSetUsername" ));
124151 return ;
125152 }
153+ Language lang = language .getObject ();
154+ if (lang != null ) {
155+ userModel .getPreferences ().setLocale (lang .code );
156+ }
126157 // force username to lower-case
127158 userModel .username = userModel .username .toLowerCase ();
128159 String username = userModel .username ;
@@ -251,7 +282,10 @@ protected void onSubmit() {
251282 form .add (confirmPasswordField .setEnabled (editCredentials ));
252283 form .add (new TextField <String >("displayName" ).setEnabled (editDisplayName ));
253284 form .add (new TextField <String >("emailAddress" ).setEnabled (editEmailAddress ));
285+
254286
287+ DropDownChoice <Language > choice = new DropDownChoice <Language >("language" ,language ,languages );
288+ form .add ( choice .setEnabled (languages .size ()>0 ) );
255289 if (userModel .canAdmin () && !userModel .canAdmin ) {
256290 // user inherits Admin permission
257291 // display a disabled-yet-checked checkbox
0 commit comments