diff --git a/dspace-api/src/main/java/org/dspace/core/I18nUtil.java b/dspace-api/src/main/java/org/dspace/core/I18nUtil.java index a28c3d8c98..1843c5172e 100644 --- a/dspace-api/src/main/java/org/dspace/core/I18nUtil.java +++ b/dspace-api/src/main/java/org/dspace/core/I18nUtil.java @@ -37,6 +37,10 @@ package org.dspace.core; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dspace.eperson.EPerson; + import java.io.File; import java.util.Locale; import java.util.MissingResourceException; @@ -62,6 +66,8 @@ import java.util.StringTokenizer; public class I18nUtil { + private static final Logger log = Logger.getLogger(I18nUtil.class); + // the default Locale of this DSpace Instance public static final Locale DEFAULTLOCALE = getDefaultLocale(); @@ -110,6 +116,32 @@ public class I18nUtil return defaultLocale; } + /** + * Get the Locale for a specified EPerson. If the language is missing, + * return the default Locale for the repository. + * + * @param ep + * @return + */ + public static Locale getEPersonLocale(EPerson ep) + { + if (ep == null) + { + log.error("No EPerson specified, returning default locale"); + return I18nUtil.getDefaultLocale(); + } + + String lang = ep.getLanguage(); + + if (StringUtils.isBlank(lang)) + { + log.error("No language specified for EPerson " + ep.getID()); + return I18nUtil.getDefaultLocale(); + } + + return I18nUtil.getSupportedLocale(new Locale(lang)); + } + /** * get the available Locales for the User Interface as defined in dspace.cfg * returns an array of Locales or null diff --git a/dspace-api/src/main/java/org/dspace/eperson/Subscribe.java b/dspace-api/src/main/java/org/dspace/eperson/Subscribe.java index da27a14011..83d742db56 100644 --- a/dspace-api/src/main/java/org/dspace/eperson/Subscribe.java +++ b/dspace-api/src/main/java/org/dspace/eperson/Subscribe.java @@ -327,8 +327,7 @@ public class Subscribe SQLException { // Get a resource bundle according to the eperson language preferences - Locale epersonLocale = new Locale(eperson.getLanguage()); - Locale supportedLocale = I18nUtil.getSupportedLocale(epersonLocale); + Locale supportedLocale = I18nUtil.getEPersonLocale(eperson); ResourceBundle labels = ResourceBundle.getBundle("Messages", supportedLocale); // Get the start and end dates for yesterday diff --git a/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java b/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java index 970239b779..a3459d87cb 100644 --- a/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java +++ b/dspace-api/src/main/java/org/dspace/workflow/WorkflowManager.java @@ -667,8 +667,7 @@ public class WorkflowManager // Get submitter EPerson ep = i.getSubmitter(); // Get the Locale - Locale epLocale = new Locale(ep.getLanguage()); - Locale supportedLocale = I18nUtil.getSupportedLocale(epLocale); + Locale supportedLocale = I18nUtil.getEPersonLocale(ep); Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_archive")); // Get the item handle to email to user @@ -856,8 +855,7 @@ public class WorkflowManager for (int i = 0; i < epa.length; i++) { - Locale epersonLocale = new Locale(epa[i].getLanguage()); - Locale supportedLocale = I18nUtil.getSupportedLocale(epersonLocale); + Locale supportedLocale = I18nUtil.getEPersonLocale(epa[i]); Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale, "submit_task")); email.addArgument(title); email.addArgument(coll.getMetadata("name")); @@ -937,8 +935,7 @@ public class WorkflowManager // Get rejector's name String rejector = getEPersonName(e); - Locale eLocale = new Locale(e.getLanguage()); - Locale supportedLocale = I18nUtil.getSupportedLocale(eLocale); + Locale supportedLocale = I18nUtil.getEPersonLocale(e); Email email = ConfigurationManager.getEmail(I18nUtil.getEmailFilename(supportedLocale,"submit_reject")); email.addRecipient(getSubmitterEPerson(wi).getEmail()); diff --git a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/PasswordServlet.java b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/PasswordServlet.java index a2fdb9d69a..a070835d69 100644 --- a/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/PasswordServlet.java +++ b/dspace-jspui/src/main/java/org/dspace/app/webui/servlet/PasswordServlet.java @@ -102,8 +102,7 @@ public class PasswordServlet extends DSpaceServlet Authenticate.loggedIn(context, request, context.getCurrentUser()); // Set the Locale according to user preferences - String preferredLanguage = context.getCurrentUser().getLanguage(); - Locale epersonLocale = I18nUtil.getSupportedLocale(new Locale(preferredLanguage)); + Locale epersonLocale = I18nUtil.getEPersonLocale(context.getCurrentUser()); context.setCurrentLocale(epersonLocale); Config.set(request.getSession(), Config.FMT_LOCALE, epersonLocale);