From a8100bb4d3aa64e254e92e29130e8fd9bd4e0dd2 Mon Sep 17 00:00:00 2001 From: James Moger Date: Mon, 28 Apr 2014 12:44:38 -0400 Subject: [PATCH] Fix forcing default locale to en or LANG_CC for web ui --- releases.moxie | 1 + .../com/gitblit/manager/GitblitManager.java | 6 ++++++ .../com/gitblit/manager/IRuntimeManager.java | 9 +++++++++ .../com/gitblit/manager/RuntimeManager.java | 19 +++++++++++++++++++ .../com/gitblit/models/UserPreferences.java | 6 ++++++ .../com/gitblit/wicket/GitBlitWebApp.java | 7 +++---- .../tests/mock/MockRuntimeManager.java | 6 ++++++ 7 files changed, 50 insertions(+), 4 deletions(-) diff --git a/releases.moxie b/releases.moxie index 207209cd..41719dfc 100644 --- a/releases.moxie +++ b/releases.moxie @@ -13,6 +13,7 @@ r23: { - 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 790445a7..5b16ef66 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.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.TimeZone; @@ -605,6 +606,11 @@ public class GitblitManager implements IGitblit { return runtimeManager.getTimezone(); } + @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 acd3a576..29e7368f 100644 --- a/src/main/java/com/gitblit/manager/IRuntimeManager.java +++ b/src/main/java/com/gitblit/manager/IRuntimeManager.java @@ -17,6 +17,7 @@ package com.gitblit.manager; import java.io.File; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.TimeZone; @@ -38,6 +39,14 @@ public interface IRuntimeManager extends IManager { */ 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 9805701b..52f4d67b 100644 --- a/src/main/java/com/gitblit/manager/RuntimeManager.java +++ b/src/main/java/com/gitblit/manager/RuntimeManager.java @@ -18,6 +18,7 @@ package com.gitblit.manager; 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 @@ public class RuntimeManager implements IRuntimeManager { 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 ? "" : getLocale())); return this; } @@ -146,6 +149,22 @@ public class RuntimeManager implements IRuntimeManager { 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 baab0719..44e44933 100644 --- a/src/main/java/com/gitblit/models/UserPreferences.java +++ b/src/main/java/com/gitblit/models/UserPreferences.java @@ -49,6 +49,12 @@ public class UserPreferences implements Serializable { 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 58fc5b7a..c4fdeda5 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.IRuntimeManager; 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 class GitBlitWebApp extends WebApplication { 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 8e518de5..6e56a873 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 @@ package com.gitblit.tests.mock; import java.io.File; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.TimeZone; @@ -70,6 +71,11 @@ public class MockRuntimeManager implements IRuntimeManager { return TimeZone.getDefault(); } + @Override + public Locale getLocale() { + return Locale.getDefault(); + } + @Override public boolean isServingRepositories() { return true; -- 2.39.5