From 6537deb8b76b7a4725c40a174a7c440385f88e51 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 05 Jun 2014 10:20:59 -0400
Subject: [PATCH] Revise language/locale preference handling

---
 src/main/java/com/gitblit/wicket/pages/UserPage.java |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/UserPage.java b/src/main/java/com/gitblit/wicket/pages/UserPage.java
index 4a955c7..9404896 100644
--- a/src/main/java/com/gitblit/wicket/pages/UserPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/UserPage.java
@@ -181,28 +181,36 @@
 				new Language("Português", "pt_BR"),
 				new Language("中文", "zh_CN"));
 
-		String lc = user.getPreferences().locale;
-		if (StringUtils.isEmpty(lc)) {
+		Locale locale = user.getPreferences().getLocale();
+		if (locale == null) {
 			// user has not specified language preference
 			// try server default preference
-			lc = app().settings().getString(Keys.web.forceDefaultLocale, null);
+			String lc = app().settings().getString(Keys.web.forceDefaultLocale, null);
 			if (StringUtils.isEmpty(lc)) {
 				// server default language is not configured
 				// try browser preference
 				Locale sessionLocale = GitBlitWebSession.get().getLocale();
 				if (sessionLocale != null) {
-					lc = sessionLocale.getLanguage() + "_" + sessionLocale.getCountry();
+					locale = sessionLocale;
 				}
+			} else {
+
 			}
 		}
+
 		Language preferredLanguage = null;
-		if (!StringUtils.isEmpty(lc)) {
+		if (locale != null) {
+			String localeCode = locale.getLanguage();
+			if (!StringUtils.isEmpty(locale.getCountry())) {
+				localeCode += "_" + locale.getCountry();
+			}
+
 			for (Language language : languages) {
-				if (language.code.equals(lc)) {
+				if (language.code.equals(localeCode)) {
 					// language_COUNTRY match
 					preferredLanguage = language;
-				} else if (preferredLanguage != null && lc.startsWith(language.code)) {
-					// language match, but not COUNTRY match
+				} else if (preferredLanguage != null && language.code.startsWith(locale.getLanguage())) {
+					// language match
 					preferredLanguage = language;
 				}
 			}
@@ -242,7 +250,7 @@
 
 				Language lang = language.getObject();
 				if (lang != null) {
-					user.getPreferences().locale = lang.code;
+					user.getPreferences().setLocale(lang.code);
 				}
 
 				try {

--
Gitblit v1.9.1