From 9b8553b9536d276a1caa80d9a297f167a95075e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Bigaret?=
 <sebastien.bigaret@telecom-bretagne.eu>
Date: Fri, 20 Oct 2017 10:03:46 +0200
Subject: [PATCH] Leave the default locale untouched when the application
 changes its locale

This allows logging to use a different locale (the default one) thanthe locale used by the application
---
 .../praxis/common/Configuration.java          |  4 +--
 .../telecom_bretagne/praxis/common/I18N.java  | 32 +++++++++++--------
 2 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/src/eu/telecom_bretagne/praxis/common/Configuration.java b/src/eu/telecom_bretagne/praxis/common/Configuration.java
index 99d7fe2e..93b5a789 100644
--- a/src/eu/telecom_bretagne/praxis/common/Configuration.java
+++ b/src/eu/telecom_bretagne/praxis/common/Configuration.java
@@ -612,9 +612,7 @@ public final class Configuration
 	{
 		if (language == null)
 			language = "en";
-		Locale locale = new Locale(language);
-		Locale.setDefault(locale);
-		I18N.reinit();
+		I18N.setLocale(new Locale(language));
 	}
 
 	/**
diff --git a/src/eu/telecom_bretagne/praxis/common/I18N.java b/src/eu/telecom_bretagne/praxis/common/I18N.java
index e1932950..1e82875a 100644
--- a/src/eu/telecom_bretagne/praxis/common/I18N.java
+++ b/src/eu/telecom_bretagne/praxis/common/I18N.java
@@ -15,23 +15,28 @@ public class I18N
 
 	private static ResourceBundle applicationSpecific;
 
-	private static MessageFormat  msg_fmt;
+	private static final MessageFormat msg_fmt = new MessageFormat("");
+	
 	static
 	{
-		reinit();
+		setLocale(Locale.getDefault());
 	}
 
-	public static void reinit()
+	public static void setLocale(Locale locale)
 	{
-		praxis = ResourceBundle.getBundle("data/i18n/praxis", Locale.getDefault());
+		praxis = ResourceBundle.getBundle("data/i18n/praxis", locale);
 		String appSpecific = Configuration.get("i18n", "");
 		if (!"".equals(appSpecific))
-			applicationSpecific = ResourceBundle.getBundle(appSpecific, Locale.getDefault());
+			applicationSpecific = ResourceBundle.getBundle(appSpecific, locale);
 		else
 			applicationSpecific = null;
-		msg_fmt = new MessageFormat("");
-		Log.log.log(java.util.logging.Level.INFO, "Setting locale: {0}", Locale.getDefault());
-		msg_fmt.setLocale(Locale.getDefault());
+		Log.log.log(java.util.logging.Level.INFO, "Setting locale: {0}", locale);
+		synchronized(msg_fmt) { msg_fmt.setLocale(locale); }
+	}
+
+	public static Locale getLocale()
+	{
+		synchronized(msg_fmt) { return msg_fmt.getLocale(); }
 	}
 
 	/**
@@ -65,7 +70,7 @@ public class I18N
 	 */
 	static public String s(String key, Object args)
 	{
-		String fmt = "";
+		String fmt = key;
 		try
 		{
 			if (applicationSpecific != null)
@@ -81,8 +86,6 @@ public class I18N
 			}
 			else
 				fmt = praxis.getString(key);
-			msg_fmt.applyPattern(fmt);
-			return msg_fmt.format(args);
 		}
 		catch (java.util.MissingResourceException e)
 		{
@@ -92,8 +95,11 @@ public class I18N
 		{
 			Log.log.log(Level.SEVERE, "I18N: could format " + fmt, e);
 		}
-		msg_fmt.applyPattern(key);
-		return msg_fmt.format(args);
+		synchronized (msg_fmt)
+		{
+			msg_fmt.applyPattern(fmt);
+			return msg_fmt.format(args);
+		}
 	}
 
 	/**
-- 
GitLab