From d8654bdf5c5e0e062a683b40ba826f9638e25d41 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 28 Apr 2014 12:47:08 -0400
Subject: [PATCH] Merged #51 "Can not force default locale to English or to a locale with a country code"

---
 src/main/java/com/gitblit/manager/IRuntimeManager.java       |    9 +++++++++
 src/main/java/com/gitblit/manager/GitblitManager.java        |    6 ++++++
 releases.moxie                                               |    1 +
 src/main/java/com/gitblit/wicket/GitBlitWebApp.java          |    7 +++----
 src/test/java/com/gitblit/tests/mock/MockRuntimeManager.java |    6 ++++++
 src/main/java/com/gitblit/models/UserPreferences.java        |    6 ++++++
 src/main/java/com/gitblit/manager/RuntimeManager.java        |   19 +++++++++++++++++++
 7 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index 207209c..41719df 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -13,6 +13,7 @@
     - Fix subdirectory links in pages servlet (issue-411)
     - Fix subdirectory navigation in pages servlet (issue-412)
     - Fix bug in adding invalid or empty SSH keys (ticket-50)
+    - Fix forcing default locale to en or LANG_CC for web ui (ticket-51)
     changes:
     - improve French translation (pr-176)
     - simplify current plugin release detection and ignore the currentRelease registry field 
diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java
index 790445a..5b16ef6 100644
--- a/src/main/java/com/gitblit/manager/GitblitManager.java
+++ b/src/main/java/com/gitblit/manager/GitblitManager.java
@@ -27,6 +27,7 @@
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
@@ -606,6 +607,11 @@
 	}
 
 	@Override
+	public Locale getLocale() {
+		return runtimeManager.getLocale();
+	}
+
+	@Override
 	public boolean isDebugMode() {
 		return runtimeManager.isDebugMode();
 	}
diff --git a/src/main/java/com/gitblit/manager/IRuntimeManager.java b/src/main/java/com/gitblit/manager/IRuntimeManager.java
index acd3a57..29e7368 100644
--- a/src/main/java/com/gitblit/manager/IRuntimeManager.java
+++ b/src/main/java/com/gitblit/manager/IRuntimeManager.java
@@ -17,6 +17,7 @@
 
 import java.io.File;
 import java.util.Date;
+import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
@@ -39,6 +40,14 @@
 	TimeZone getTimezone();
 
 	/**
+	 * Returns the fixed locale for clients, or null if clients may choose their locale
+	 *
+	 * @return a fixed locale or null if clients are allowed to specify locale preference
+ 	 * @since 1.5.1
+	 */
+	Locale getLocale();
+
+	/**
 	 * Determine if this Gitblit instance is actively serving git repositories
 	 * or if it is merely a repository viewer.
 	 *
diff --git a/src/main/java/com/gitblit/manager/RuntimeManager.java b/src/main/java/com/gitblit/manager/RuntimeManager.java
index 9805701..52f4d67 100644
--- a/src/main/java/com/gitblit/manager/RuntimeManager.java
+++ b/src/main/java/com/gitblit/manager/RuntimeManager.java
@@ -18,6 +18,7 @@
 import java.io.File;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
@@ -63,6 +64,8 @@
 		logger.info("Settings    : " + settings.toString());
 		logTimezone("JVM timezone: ", TimeZone.getDefault());
 		logTimezone("App timezone: ", getTimezone());
+		logger.info("JVM locale  : " + Locale.getDefault());
+		logger.info("App locale  : " +  (getLocale() == null ? "<client>" : getLocale()));
 		return this;
 	}
 
@@ -146,6 +149,22 @@
 		logger.info("{}{} ({})", new Object [] { type, zone.getID(), offset });
 	}
 
+	@Override
+	public Locale getLocale() {
+		String lc = settings.getString(Keys.web.forceDefaultLocale, null);
+		if (!StringUtils.isEmpty(lc)) {
+			int underscore = lc.indexOf('_');
+			if (underscore > 0) {
+				String lang = lc.substring(0, underscore);
+				String cc = lc.substring(underscore + 1);
+				return new Locale(lang, cc);
+			} else {
+				return new Locale(lc);
+			}
+		}
+		return null;
+	}
+
 	/**
 	 * Is Gitblit running in debug mode?
 	 *
diff --git a/src/main/java/com/gitblit/models/UserPreferences.java b/src/main/java/com/gitblit/models/UserPreferences.java
index baab071..44e4493 100644
--- a/src/main/java/com/gitblit/models/UserPreferences.java
+++ b/src/main/java/com/gitblit/models/UserPreferences.java
@@ -49,6 +49,12 @@
 		if (StringUtils.isEmpty(locale)) {
 			return null;
 		}
+		int underscore = locale.indexOf('_');
+		if (underscore > 0) {
+			String lang = locale.substring(0, underscore);
+			String cc = locale.substring(underscore + 1);
+			return new Locale(lang, cc);
+		}
 		return new Locale(locale);
 	}
 
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
index 58fc5b7..c4fdeda 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -41,7 +41,6 @@
 import com.gitblit.manager.IUserManager;
 import com.gitblit.tickets.ITicketService;
 import com.gitblit.transport.ssh.IPublicKeyManager;
-import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.pages.ActivityPage;
 import com.gitblit.wicket.pages.BlamePage;
 import com.gitblit.wicket.pages.BlobDiffPage;
@@ -242,9 +241,9 @@
 	public final Session newSession(Request request, Response response) {
 		GitBlitWebSession gitBlitWebSession = new GitBlitWebSession(request);
 
-		String forcedLocale = settings.getString(Keys.web.forceDefaultLocale, null);
-		if (!StringUtils.isEmpty(forcedLocale)) {
-			gitBlitWebSession.setLocale(new Locale(forcedLocale));
+		Locale forcedLocale = runtime().getLocale();
+		if (forcedLocale != null) {
+			gitBlitWebSession.setLocale(forcedLocale);
 		}
 		return gitBlitWebSession;
 	}
diff --git a/src/test/java/com/gitblit/tests/mock/MockRuntimeManager.java b/src/test/java/com/gitblit/tests/mock/MockRuntimeManager.java
index 8e518de..6e56a87 100644
--- a/src/test/java/com/gitblit/tests/mock/MockRuntimeManager.java
+++ b/src/test/java/com/gitblit/tests/mock/MockRuntimeManager.java
@@ -17,6 +17,7 @@
 
 import java.io.File;
 import java.util.Date;
+import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
@@ -71,6 +72,11 @@
 	}
 
 	@Override
+	public Locale getLocale() {
+		return Locale.getDefault();
+	}
+
+	@Override
 	public boolean isServingRepositories() {
 		return true;
 	}

--
Gitblit v1.9.1