You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2016/11/15 03:24:44 UTC

svn commit: r1769713 [1/2] - in /openmeetings/application: branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/ branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/ branches/3.1.x/openmeetings-ser...

Author: solomax
Date: Tue Nov 15 03:24:44 2016
New Revision: 1769713

URL: http://svn.apache.org/viewvc?rev=1769713&view=rev
Log:
[OPENMEETINGS-1488] date/time is being formatted according to recipient locale

Modified:
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
    openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
    openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
    openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
    openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
    openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
    openmeetings/application/trunk/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java Tue Nov 15 03:24:44 2016
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings;
 
+import java.util.Locale;
+
 import javax.servlet.ServletContext;
 
 import org.apache.openmeetings.db.entity.room.Invitation;
@@ -34,6 +36,7 @@ public interface IApplication {
 	String getOmString(long id);
 	String getOmString(long id, long languageId);
 	String getOmString(String key, long languageId);
+	String getOmString(String key, final Locale loc);
 	String getOmContactsLink();
 	String getOmInvitationLink(Invitation i);
 	String urlForActivatePage(PageParameters pp);

Modified: openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java Tue Nov 15 03:24:44 2016
@@ -18,7 +18,13 @@
  */
 package org.apache.openmeetings;
 
+import java.util.Locale;
+
+import org.apache.openmeetings.db.entity.user.User;
+
 public interface IWebSession {
 	long getOmLanguage();
 	void setLanguage(long languageId);
+	Locale getLocale();
+	Locale getLocale(User u);
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java Tue Nov 15 03:24:44 2016
@@ -46,6 +46,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.service.mail.template.subject.AbstractSubjectEmailTemplate;
 import org.apache.openmeetings.service.mail.template.subject.AppointmentReminderTemplate;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
@@ -100,7 +101,7 @@ public class AppointmentLogic {
 
 		String smsSubject = generateSMSSubject(langDao.getString(1158L, langId), a);
 
-		AppointmentReminderTemplate t = AppointmentReminderTemplate.get(langId, a, tz);
+		AbstractSubjectEmailTemplate t = AppointmentReminderTemplate.get(u, a, tz);
 		invitationManager.sendInvitationLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false);
 
 		invitationManager.sendInvitationReminderSMS(u.getAddress().getPhone(), smsSubject, langId);

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java Tue Nov 15 03:24:44 2016
@@ -21,6 +21,8 @@ package org.apache.openmeetings.service.
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
 
+import java.util.Locale;
+
 import org.apache.openmeetings.IWebSession;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
@@ -33,7 +35,7 @@ import org.apache.wicket.protocol.http.W
 public abstract class AbstractTemplatePanel extends Panel {
 	private static final long serialVersionUID = 1L;
 	public static final String COMP_ID = "template";
-	protected long langId;
+	protected final Locale locale;
 
 	public static <T> T getBean(Class<T> clazz) {
 		return ensureApplication().getOmBean(clazz);
@@ -43,13 +45,18 @@ public abstract class AbstractTemplatePa
 		return (IWebSession)WebSession.get();
 	}
 
-	public AbstractTemplatePanel(Long langId) {
+	private static Locale getDefault() {
+		long langId = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1");
+		return LabelDao.languages.get(langId);
+	}
+
+	public AbstractTemplatePanel(Locale locale) {
 		super(COMP_ID);
-		this.langId = langId == null ? getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : langId;
-		add(new TransparentWebMarkupContainer("container").add(AttributeAppender.append("dir", FormatHelper.isRtlLanguage(LabelDao.languages.get(langId).toLanguageTag()) ? "rtl" : "ltr")));
+		this.locale = locale == null ? getDefault() : locale;
+		add(new TransparentWebMarkupContainer("container").add(AttributeAppender.append("dir", FormatHelper.isRtlLanguage(this.locale.toLanguageTag()) ? "rtl" : "ltr")));
 	}
 
-	public static String getString(long id, long languageId) {
-		return ensureApplication().getOmString(id, languageId);
+	public static String getString(String id, Locale locale) {
+		return ensureApplication().getOmString(id, locale);
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java Tue Nov 15 03:24:44 2016
@@ -27,7 +27,7 @@ public class FeedbackTemplate extends Ab
 	private static final long serialVersionUID = 1L;
 
 	public FeedbackTemplate(String username, String email, String message) {
-		super(getOmSession().getOmLanguage());
+		super(getOmSession().getLocale());
 		add(new Label("appname", getBean(ConfigurationDao.class).getAppName()));
 		add(new Label("username", username));
 		add(new Label("email", email));

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,6 +20,9 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
+
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -28,26 +31,26 @@ import org.apache.wicket.markup.html.lin
 public class InvitationTemplate extends AbstractTemplatePanel {
 	private static final long serialVersionUID = 1L;
 
-	private InvitationTemplate(Long langId, String invitorName, String message, String link) {
-		super(langId);
+	private InvitationTemplate(Locale locale, String invitorName, String message, String link) {
+		super(locale);
 
-		add(new Label("titleLbl", getString(500, langId)));
-		add(new Label("userLbl", getString(501, langId)));
+		add(new Label("titleLbl", getString("500", locale)));
+		add(new Label("userLbl", getString("501", locale)));
 		add(new Label("user", invitorName));
-		add(new Label("messageLbl", getString(502, langId)));
+		add(new Label("messageLbl", getString("502", locale)));
 		add(new Label("message", message).setEscapeModelStrings(false));
 		
 		add(new WebMarkupContainer("links")
-			.add(new Label("comment_for_link1", getString(503, langId)))
-			.add(new ExternalLink("invitation_link1", link).add(new Label("clickMe", getString(504, langId))))
-			.add(new Label("comment_for_link2", getString(505, langId)))
+			.add(new Label("comment_for_link1", getString("503", locale)))
+			.add(new ExternalLink("invitation_link1", link).add(new Label("clickMe", getString("504", locale))))
+			.add(new Label("comment_for_link2", getString("505", locale)))
 			.add(new Label("invitation_link2", link))
 			.setVisible(link != null)
 			);
 	}
-	
-	public static String getEmail(Long langId, String invitorName, String message, String link) {
-		ensureApplication(langId);
-		return ComponentRenderer.renderComponent(new InvitationTemplate(langId, invitorName, message, link)).toString();
+
+	public static String getEmail(User invitee, String invitorName, String message, String link) {
+		ensureApplication(invitee.getLanguageId());
+		return ComponentRenderer.renderComponent(new InvitationTemplate(getOmSession().getLocale(invitee), invitorName, message, link)).toString();
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java Tue Nov 15 03:24:44 2016
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.service.mail.template;
 
-import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
-
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.basic.Label;
@@ -28,14 +26,6 @@ public class OmTextLabel extends Label {
 	private static final long serialVersionUID = 1L;
 	private static final String WICKET_VISIBLE = ":visible";
 
-	public OmTextLabel(String id, long key, long langId) {
-		this(id, "" + key, langId);
-	}
-
-	public OmTextLabel(String id, String key, long langId) {
-		this(id, ensureApplication().getOmString(key, langId));
-	}
-
 	public OmTextLabel(String id, String label) {
 		super(id, label);
 		setRenderBodyOnly(true);

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java Tue Nov 15 03:24:44 2016
@@ -27,15 +27,15 @@ public class RegisterUserTemplate extend
 	private static final long serialVersionUID = 1L;
 
 	public RegisterUserTemplate(String username, String email, String verification_url) {
-		super(getOmSession().getOmLanguage());
-		add(new Label("registrationLbl", getString(506, langId)));
+		super(getOmSession().getLocale());
+		add(new Label("registrationLbl", getString("506", locale)));
 		add(new Label("username", username));
 		add(new Label("email", email));
 		WebMarkupContainer verification = new WebMarkupContainer("verification");
 		add(verification.add(new Label("verification_url2", verification_url))
 			.add(new ExternalLink("verification_url1", verification_url))
 			.setVisible(verification_url != null));
-		add(new Label("groupLbl", getString(511, langId)));
+		add(new Label("groupLbl", getString("511", locale)));
 	}
 
 	public static String getEmail(String username, String email, String verification_url) {

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java Tue Nov 15 03:24:44 2016
@@ -26,15 +26,15 @@ public class RequestContactConfirmTempla
 	private static final long serialVersionUID = 1L;
 
 	public RequestContactConfirmTemplate(UserContact contact) {
-		super(contact.getOwner().getLanguageId());
-		add(new Label("hi", getString(1192, langId)));
+		super(getOmSession().getLocale(contact.getOwner()));
+		add(new Label("hi", getString("1192", locale)));
 		add(new Label("firstName", contact.getOwner().getFirstname()));
 		add(new Label("lastName", contact.getOwner().getLastname()));
 		add(new Label("addedFirstName", contact.getContact().getFirstname()));
 		add(new Label("addedLastName", contact.getContact().getLastname()));
-		add(new Label("confirmed", getString(1198, langId)));
+		add(new Label("confirmed", getString("1198", locale)));
 	}
-	
+
 	public static String getEmail(UserContact contact) {
 		return ComponentRenderer.renderComponent(new RequestContactConfirmTemplate(contact)).toString();
 	}

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java Tue Nov 15 03:24:44 2016
@@ -29,17 +29,17 @@ public class RequestContactTemplate exte
 	private static final long serialVersionUID = 1L;
 
 	public RequestContactTemplate(User userToAdd, User user) {
-		super(userToAdd.getLanguageId());
-		add(new Label("hi", getString(1192, langId)));
+		super(getOmSession().getLocale(userToAdd));
+		add(new Label("hi", getString("1192", locale)));
 		add(new Label("addedFirstName", userToAdd.getFirstname()));
 		add(new Label("addedLastName", userToAdd.getLastname()));
 		add(new Label("firstName", user.getFirstname()));
 		add(new Label("lastName", user.getLastname()));
-		add(new Label("likeToAdd", getString(1193, langId)));
-		add(new Label("check", getString(1194, langId)));
-		add(new ExternalLink("link", ensureApplication().getOmContactsLink()).add(new Label("contactList", getString(1196, langId))));
+		add(new Label("likeToAdd", getString("1193", locale)));
+		add(new Label("check", getString("1194", locale)));
+		add(new ExternalLink("link", ensureApplication().getOmContactsLink()).add(new Label("contactList", getString("1196", locale))));
 	}
-	
+
 	public static String getEmail(User userToAdd, User user) {
 		return ComponentRenderer.renderComponent(new RequestContactTemplate(userToAdd, user)).toString();
 	}

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java Tue Nov 15 03:24:44 2016
@@ -26,7 +26,7 @@ public class ResetPasswordTemplate exten
 	private static final long serialVersionUID = 1L;
 
 	public ResetPasswordTemplate(String link) {
-		super(getOmSession().getOmLanguage());
+		super(getOmSession().getLocale());
 		add(new ExternalLink("reset_link1", link));
 		add(new Label("reset_link2", link));
 	}

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java Tue Nov 15 03:24:44 2016
@@ -18,13 +18,18 @@
  */
 package org.apache.openmeetings.service.mail.template.subject;
 
+import static org.apache.commons.lang3.time.FastDateFormat.MEDIUM;
+import static org.apache.commons.lang3.time.FastDateFormat.SHORT;
+
+import java.util.Date;
+import java.util.Locale;
 import java.util.TimeZone;
 
+import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.service.mail.template.AbstractTemplatePanel;
 import org.apache.openmeetings.service.mail.template.DashOmTextLabel;
 import org.apache.openmeetings.service.mail.template.OmTextLabel;
-import org.apache.openmeetings.util.CalendarPatterns;
 import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.panel.Fragment;
 
@@ -34,42 +39,53 @@ public abstract class AbstractSubjectEma
 	protected TimeZone tz;
 	private String email = null;
 	private String subject = null;
+	private boolean created = false;
 
-
-	public AbstractSubjectEmailTemplate(Long langId, Appointment a, TimeZone tz) {
-		super(langId);
+	public AbstractSubjectEmailTemplate(Locale locale, Appointment a, TimeZone tz) {
+		super(locale);
 		this.a = a;
 		this.tz = tz;
 	}
 
-	abstract void omInit();
-
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();
-		omInit();
+	AbstractSubjectEmailTemplate create() {
 		email = ComponentRenderer.renderComponent(this).toString();
 		subject = ComponentRenderer.renderComponent(getSubjectFragment()).toString();
+		created = true;
+		return this;
 	}
 
-	public final String getEmail() {
-		return email;
+	abstract String getPrefix();
+
+	protected String format(Date d) {
+		return format(d, MEDIUM);
 	}
 
-	abstract String getPrefix();
+	protected String format(Date d, int fmt) {
+		return FastDateFormat.getDateTimeInstance(fmt, fmt, tz, locale).format(d);
+	}
 
 	Fragment getSubjectFragment() {
 		Fragment f = new Fragment(COMP_ID, "subject", this);
 		f.add(new OmTextLabel("prefix", getPrefix())
 				, new OmTextLabel("title", a.getTitle())
-				, new OmTextLabel("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+				, new OmTextLabel("start", format(a.getStart(), SHORT))
 				, new DashOmTextLabel("dash")
-				, new OmTextLabel("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz))
+				, new OmTextLabel("end", format(a.getEnd(), SHORT))
 				);
 		return f;
 	}
 
+	public final String getEmail() {
+		if (!created) {
+			throw new RuntimeException("Not created!!");
+		}
+		return email;
+	}
+
 	public final String getSubject() {
+		if (!created) {
+			throw new RuntimeException("Not created!!");
+		}
 		return subject;
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,10 +20,11 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.string.Strings;
@@ -31,32 +32,33 @@ import org.apache.wicket.util.string.Str
 public class AppointmentReminderTemplate extends AbstractSubjectEmailTemplate {
 	private static final long serialVersionUID = 1L;
 
-	private AppointmentReminderTemplate(Long langId, Appointment a, TimeZone tz) {
-		super(langId, a, tz);
+	private AppointmentReminderTemplate(Locale locale, Appointment a, TimeZone tz) {
+		super(locale, a, tz);
 	}
 
 	@Override
-	void omInit() {
-		add(new Label("titleLbl", getString(1158L, langId)));
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new Label("titleLbl", getString("1158", locale)));
 		add(new Label("title", a.getTitle()));
 		add(new WebMarkupContainer("descContainer")
-			.add(new Label("descLbl", getString(1152L, langId)))
+			.add(new Label("descLbl", getString("1152", locale)))
 			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
 			.setVisible(!Strings.isEmpty(a.getDescription()))
 			);
-		add(new Label("startLbl", getString(1153L, langId)));
-		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
-		add(new Label("endLbl", getString(1154L, langId)));
-		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("startLbl", getString("1153", locale)));
+		add(new Label("start", format(a.getStart())));
+		add(new Label("endLbl", getString("1154", locale)));
+		add(new Label("end", format(a.getEnd())));
 	}
 
-	public static AppointmentReminderTemplate get(Long langId, Appointment a, TimeZone tz) {
-		ensureApplication(langId);
-		return new AppointmentReminderTemplate(langId, a, tz);
+	public static AbstractSubjectEmailTemplate get(User u, Appointment a, TimeZone tz) {
+		ensureApplication(u.getLanguageId());
+		return new AppointmentReminderTemplate(getOmSession().getLocale(u), a, tz).create();
 	}
 
 	@Override
 	String getPrefix() {
-		return ensureApplication().getOmString(1158, langId);
+		return ensureApplication().getOmString("1158", locale);
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,10 +20,11 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.string.Strings;
@@ -32,35 +33,36 @@ public class CanceledAppointmentTemplate
 	private static final long serialVersionUID = 1L;
 	private final String invitorName;
 
-	private CanceledAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
-		super(langId, a, tz);
+	private CanceledAppointmentTemplate(Locale locale, Appointment a, TimeZone tz, String invitorName) {
+		super(locale, a, tz);
 		this.invitorName = invitorName;
 	}
 
 	@Override
-	void omInit() {
-		add(new Label("titleLbl", getString(1157L, langId)));
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new Label("titleLbl", getString("1157", locale)));
 		add(new Label("title", a.getTitle()));
 		add(new WebMarkupContainer("descContainer")
-			.add(new Label("descLbl", getString(1152L, langId)))
+			.add(new Label("descLbl", getString("1152", locale)))
 			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
 			.setVisible(!Strings.isEmpty(a.getDescription()))
 			);
-		add(new Label("startLbl", getString(1153L, langId)));
-		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
-		add(new Label("endLbl", getString(1154L, langId)));
-		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
-		add(new Label("invitorLbl", getString(1156L, langId)));
+		add(new Label("startLbl", getString("1153", locale)));
+		add(new Label("start", format(a.getStart())));
+		add(new Label("endLbl", getString("1154", locale)));
+		add(new Label("end", format(a.getEnd())));
+		add(new Label("invitorLbl", getString("1156", locale)));
 		add(new Label("invitor", invitorName));
 	}
 
-	public static CanceledAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
-		ensureApplication(langId);
-		return new CanceledAppointmentTemplate(langId, a, tz, invitorName);
+	public static AbstractSubjectEmailTemplate get(User u, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(u.getLanguageId());
+		return new CanceledAppointmentTemplate(getOmSession().getLocale(u), a, tz, invitorName).create();
 	}
 
 	@Override
 	String getPrefix() {
-		return ensureApplication().getOmString(1157, langId);
+		return ensureApplication().getOmString("1157", locale);
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CreatedAppointmentTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,10 +20,11 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.string.Strings;
@@ -32,35 +33,36 @@ public class CreatedAppointmentTemplate
 	private static final long serialVersionUID = 1L;
 	private final String invitorName;
 
-	private CreatedAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
-		super(langId, a, tz);
+	private CreatedAppointmentTemplate(Locale locale, Appointment a, TimeZone tz, String invitorName) {
+		super(locale, a, tz);
 		this.invitorName = invitorName;
 	}
 
 	@Override
-	void omInit() {
-		add(new Label("titleLbl", getString(1151L, langId)));
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new Label("titleLbl", getString("1151", locale)));
 		add(new Label("title", a.getTitle()));
 		add(new WebMarkupContainer("descContainer")
-			.add(new Label("descLbl", getString(1152L, langId)))
+			.add(new Label("descLbl", getString("1152", locale)))
 			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
 			.setVisible(!Strings.isEmpty(a.getDescription()))
 			);
-		add(new Label("startLbl", getString(1153L, langId)));
-		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
-		add(new Label("endLbl", getString(1154L, langId)));
-		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
-		add(new Label("invitorLbl", getString(1156L, langId)));
+		add(new Label("startLbl", getString("1153", locale)));
+		add(new Label("start", format(a.getStart())));
+		add(new Label("endLbl", getString("1154", locale)));
+		add(new Label("end", format(a.getEnd())));
+		add(new Label("invitorLbl", getString("1156", locale)));
 		add(new Label("invitor", invitorName));
 	}
 
-	public static CreatedAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
-		ensureApplication(langId);
-		return new CreatedAppointmentTemplate(langId, a, tz, invitorName);
+	public static AbstractSubjectEmailTemplate get(User u, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(u.getLanguageId());
+		return new CreatedAppointmentTemplate(getOmSession().getLocale(u), a, tz, invitorName).create();
 	}
 
 	@Override
 	String getPrefix() {
-		return ensureApplication().getOmString(1151, langId);
+		return ensureApplication().getOmString("1151", locale);
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/UpdatedAppointmentTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,10 +20,11 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.string.Strings;
@@ -32,35 +33,36 @@ public class UpdatedAppointmentTemplate
 	private static final long serialVersionUID = 1L;
 	private final String invitorName;
 
-	private UpdatedAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
-		super(langId, a, tz);
+	private UpdatedAppointmentTemplate(Locale locale, Appointment a, TimeZone tz, String invitorName) {
+		super(locale, a, tz);
 		this.invitorName = invitorName;
 	}
 
 	@Override
-	void omInit() {
-		add(new Label("titleLbl", getString(1155L, langId)));
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new Label("titleLbl", getString("1155", locale)));
 		add(new Label("title", a.getTitle()));
 		add(new WebMarkupContainer("descContainer")
-			.add(new Label("descLbl", getString(1152L, langId)))
+			.add(new Label("descLbl", getString("1152", locale)))
 			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
 			.setVisible(!Strings.isEmpty(a.getDescription()))
 			);
-		add(new Label("startLbl", getString(1153L, langId)));
-		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
-		add(new Label("endLbl", getString(1154L, langId)));
-		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
-		add(new Label("invitorLbl", getString(1156L, langId)));
+		add(new Label("startLbl", getString("1153", locale)));
+		add(new Label("start", format(a.getStart())));
+		add(new Label("endLbl", getString("1154", locale)));
+		add(new Label("end", format(a.getEnd())));
+		add(new Label("invitorLbl", getString("1156", locale)));
 		add(new Label("invitor", invitorName));
 	}
 
-	public static UpdatedAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
-		ensureApplication(langId);
-		return new UpdatedAppointmentTemplate(langId, a, tz, invitorName);
+	public static AbstractSubjectEmailTemplate get(User u, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(u.getLanguageId());
+		return new UpdatedAppointmentTemplate(getOmSession().getLocale(u), a, tz, invitorName).create();
 	}
 
 	@Override
 	String getPrefix() {
-		return ensureApplication().getOmString(1155, langId);
+		return ensureApplication().getOmString("1155", locale);
 	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/room/InvitationManager.java Tue Nov 15 03:24:44 2016
@@ -84,19 +84,18 @@ public class InvitationManager implement
 	private void sendInvitionLink(Appointment a, MeetingMember mm, MessageType type, boolean ical) throws Exception	{
 		User owner = a.getOwner();
 		String invitorName = owner.getFirstname() + " " + owner.getLastname();
-		Long langId = mm.getUser().getLanguageId();
 		TimeZone tz = timezoneUtil.getTimeZone(mm.getUser());
 		AbstractSubjectEmailTemplate t = null;
 		switch (type) {
 			case Cancel:
-				t = CanceledAppointmentTemplate.get(langId, a, tz, invitorName);
+				t = CanceledAppointmentTemplate.get(mm.getUser(), a, tz, invitorName);
 				break;
 			case Create:
-				t = CreatedAppointmentTemplate.get(langId, a, tz, invitorName);
+				t = CreatedAppointmentTemplate.get(mm.getUser(), a, tz, invitorName);
 				break;
 			case Update:
 			default:
-				t = UpdatedAppointmentTemplate.get(langId, a, tz, invitorName);
+				t = UpdatedAppointmentTemplate.get(mm.getUser(), a, tz, invitorName);
 				break;
 			
 		}
@@ -113,7 +112,7 @@ public class InvitationManager implement
 		User owner = i.getInvitedBy();
 		
 		String invitorName = owner.getFirstname() + " " + owner.getLastname();
-		String template = InvitationTemplate.getEmail(i.getInvitee().getLanguageId(), invitorName, message, invitation_link);
+		String template = InvitationTemplate.getEmail(i.getInvitee(), invitorName, message, invitation_link);
 		String email = i.getInvitee().getAddress().getEmail();
 		String replyToEmail = owner.getAddress().getEmail();
 		

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Tue Nov 15 03:24:44 2016
@@ -490,4 +490,9 @@ public class Application extends Authent
 	public String getOmString(String key, long languageId) {
 		return getString(key, languageId);
 	}
+
+	@Override
+	public String getOmString(String key, final Locale loc) {
+		return getString(key, loc, false);
+	}
 }

Modified: openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java (original)
+++ openmeetings/application/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java Tue Nov 15 03:24:44 2016
@@ -22,6 +22,7 @@ import static java.text.DateFormat.SHORT
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.getAuthenticationStrategy;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.Application.getClientByKeys;
@@ -29,6 +30,7 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.Application.isInvaldSession;
 import static org.apache.openmeetings.web.app.Application.removeInvalidSession;
 import static org.apache.openmeetings.web.app.Application.removeOnlineUser;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
 
 import java.util.Arrays;
 import java.util.Calendar;
@@ -79,6 +81,7 @@ import org.apache.wicket.authroles.autho
 import org.apache.wicket.request.Request;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
+import org.slf4j.Logger;
 import org.wicketstuff.dashboard.Dashboard;
 import org.wicketstuff.dashboard.Widget;
 import org.wicketstuff.dashboard.WidgetFactory;
@@ -86,6 +89,7 @@ import org.wicketstuff.dashboard.web.Das
 
 public class WebSession extends AbstractAuthenticatedWebSession implements IWebSession {
 	private static final long serialVersionUID = 1L;
+	private static final Logger log = getLogger(WebSession.class, webAppRootKey);
 	public static final int MILLIS_IN_MINUTE = 60000;
 	public static final String ISO8601_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ssZ";
 	public static final List<String> AVAILABLE_TIMEZONES = Arrays.asList(TimeZone.getAvailableIDs());
@@ -255,6 +259,21 @@ public class WebSession extends Abstract
 		return false;
 	}
 
+	public Locale getLocale(User u) {
+		Long langId = u.getLanguageId();
+		Locale locale = langId == 3 ? Locale.GERMANY : LabelDao.languages.get(langId);
+		try {
+			Locale.Builder builder = new Locale.Builder().setLanguage(locale.getLanguage());
+			if (u.getAddress() != null && u.getAddress().getCountry() != null) {
+				builder.setRegion(u.getAddress().getCountry());
+			}
+			locale = builder.build();
+		} catch (Exception e) {
+			log.error("Unexpected Error whilw constructing locale for the user", e.getMessage());
+		}
+		return locale;
+	}
+
 	private void setUser(User u, Set<Right> rights) {
 		String _sid = SID;
 		Long _recordingId = recordingId;
@@ -292,8 +311,7 @@ public class WebSession extends Abstract
 		externalType = u.getExternalType();
 		tz = getBean(TimezoneUtil.class).getTimeZone(u);
 		ISO8601FORMAT = FastDateFormat.getInstance(ISO8601_FORMAT_STRING, tz);
-		setLocale(languageId == 3 ? Locale.GERMANY : LabelDao.languages.get(languageId));
-		//FIXMW locale need to be set by User language first
+		setLocale(getLocale(u));
 		sdf = FastDateFormat.getDateTimeInstance(SHORT, SHORT, getLocale());
 	}
 	

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java Tue Nov 15 03:24:44 2016
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings;
 
+import java.util.Locale;
+
 import javax.servlet.ServletContext;
 
 import org.apache.openmeetings.db.entity.room.Client;
@@ -35,6 +37,7 @@ public interface IApplication {
 	String getOmString(long id);
 	String getOmString(long id, long languageId);
 	String getOmString(String key, long languageId);
+	String getOmString(String key, final Locale loc);
 	Client updateClient(Client rcl);
 	String getOmContactsLink();
 	String getOmInvitationLink(Invitation i);

Modified: openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/IWebSession.java Tue Nov 15 03:24:44 2016
@@ -18,7 +18,13 @@
  */
 package org.apache.openmeetings;
 
+import java.util.Locale;
+
+import org.apache.openmeetings.db.entity.user.User;
+
 public interface IWebSession {
 	long getOmLanguage();
 	void setLanguage(long languageId);
+	Locale getLocale();
+	Locale getLocale(User u);
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/calendar/AppointmentLogic.java Tue Nov 15 03:24:44 2016
@@ -46,6 +46,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.service.mail.template.subject.AbstractSubjectEmailTemplate;
 import org.apache.openmeetings.service.mail.template.subject.AppointmentReminderTemplate;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
@@ -100,7 +101,7 @@ public class AppointmentLogic {
 
 		String smsSubject = generateSMSSubject(langDao.getString(1158L, langId), a);
 
-		AppointmentReminderTemplate t = AppointmentReminderTemplate.get(langId, a, tz);
+		AbstractSubjectEmailTemplate t = AppointmentReminderTemplate.get(u, a, tz);
 		invitationManager.sendInvitationLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false);
 
 		invitationManager.sendInvitationReminderSMS(u.getAddress().getPhone(), smsSubject, langId);

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/AbstractTemplatePanel.java Tue Nov 15 03:24:44 2016
@@ -21,6 +21,8 @@ package org.apache.openmeetings.service.
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
 
+import java.util.Locale;
+
 import org.apache.openmeetings.IWebSession;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.label.LabelDao;
@@ -33,7 +35,7 @@ import org.apache.wicket.protocol.http.W
 public abstract class AbstractTemplatePanel extends Panel {
 	private static final long serialVersionUID = 1L;
 	public static final String COMP_ID = "template";
-	protected long langId;
+	protected final Locale locale;
 
 	public static <T> T getBean(Class<T> clazz) {
 		return ensureApplication().getOmBean(clazz);
@@ -43,13 +45,18 @@ public abstract class AbstractTemplatePa
 		return (IWebSession)WebSession.get();
 	}
 
-	public AbstractTemplatePanel(Long langId) {
+	private static Locale getDefault() {
+		long langId = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1");
+		return LabelDao.languages.get(langId);
+	}
+
+	public AbstractTemplatePanel(Locale locale) {
 		super(COMP_ID);
-		this.langId = langId == null ? getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : langId;
-		add(new TransparentWebMarkupContainer("container").add(AttributeAppender.append("dir", FormatHelper.isRtlLanguage(LabelDao.languages.get(langId).toLanguageTag()) ? "rtl" : "ltr")));
+		this.locale = locale == null ? getDefault() : locale;
+		add(new TransparentWebMarkupContainer("container").add(AttributeAppender.append("dir", FormatHelper.isRtlLanguage(this.locale.toLanguageTag()) ? "rtl" : "ltr")));
 	}
 
-	public static String getString(long id, long languageId) {
-		return ensureApplication().getOmString(id, languageId);
+	public static String getString(String id, Locale locale) {
+		return ensureApplication().getOmString(id, locale);
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/FeedbackTemplate.java Tue Nov 15 03:24:44 2016
@@ -27,7 +27,7 @@ public class FeedbackTemplate extends Ab
 	private static final long serialVersionUID = 1L;
 
 	public FeedbackTemplate(String username, String email, String message) {
-		super(getOmSession().getOmLanguage());
+		super(getOmSession().getLocale());
 		add(new Label("appname", getBean(ConfigurationDao.class).getAppName()));
 		add(new Label("username", username));
 		add(new Label("email", email));

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/InvitationTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,6 +20,9 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
+
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
@@ -28,26 +31,26 @@ import org.apache.wicket.markup.html.lin
 public class InvitationTemplate extends AbstractTemplatePanel {
 	private static final long serialVersionUID = 1L;
 
-	private InvitationTemplate(Long langId, String invitorName, String message, String link) {
-		super(langId);
+	private InvitationTemplate(Locale locale, String invitorName, String message, String link) {
+		super(locale);
 
-		add(new Label("titleLbl", getString(500, langId)));
-		add(new Label("userLbl", getString(501, langId)));
+		add(new Label("titleLbl", getString("500", locale)));
+		add(new Label("userLbl", getString("501", locale)));
 		add(new Label("user", invitorName));
-		add(new Label("messageLbl", getString(502, langId)));
+		add(new Label("messageLbl", getString("502", locale)));
 		add(new Label("message", message).setEscapeModelStrings(false));
 		
 		add(new WebMarkupContainer("links")
-			.add(new Label("comment_for_link1", getString(503, langId)))
-			.add(new ExternalLink("invitation_link1", link).add(new Label("clickMe", getString(504, langId))))
-			.add(new Label("comment_for_link2", getString(505, langId)))
+			.add(new Label("comment_for_link1", getString("503", locale)))
+			.add(new ExternalLink("invitation_link1", link).add(new Label("clickMe", getString("504", locale))))
+			.add(new Label("comment_for_link2", getString("505", locale)))
 			.add(new Label("invitation_link2", link))
 			.setVisible(link != null)
 			);
 	}
-	
-	public static String getEmail(Long langId, String invitorName, String message, String link) {
-		ensureApplication(langId);
-		return ComponentRenderer.renderComponent(new InvitationTemplate(langId, invitorName, message, link)).toString();
+
+	public static String getEmail(User invitee, String invitorName, String message, String link) {
+		ensureApplication(invitee.getLanguageId());
+		return ComponentRenderer.renderComponent(new InvitationTemplate(getOmSession().getLocale(invitee), invitorName, message, link)).toString();
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/OmTextLabel.java Tue Nov 15 03:24:44 2016
@@ -18,8 +18,6 @@
  */
 package org.apache.openmeetings.service.mail.template;
 
-import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
-
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.basic.Label;
@@ -28,14 +26,6 @@ public class OmTextLabel extends Label {
 	private static final long serialVersionUID = 1L;
 	private static final String WICKET_VISIBLE = ":visible";
 
-	public OmTextLabel(String id, long key, long langId) {
-		this(id, "" + key, langId);
-	}
-
-	public OmTextLabel(String id, String key, long langId) {
-		this(id, ensureApplication().getOmString(key, langId));
-	}
-
 	public OmTextLabel(String id, String label) {
 		super(id, label);
 		setRenderBodyOnly(true);

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RegisterUserTemplate.java Tue Nov 15 03:24:44 2016
@@ -27,15 +27,15 @@ public class RegisterUserTemplate extend
 	private static final long serialVersionUID = 1L;
 
 	public RegisterUserTemplate(String username, String email, String verification_url) {
-		super(getOmSession().getOmLanguage());
-		add(new Label("registrationLbl", getString(506, langId)));
+		super(getOmSession().getLocale());
+		add(new Label("registrationLbl", getString("506", locale)));
 		add(new Label("username", username));
 		add(new Label("email", email));
 		WebMarkupContainer verification = new WebMarkupContainer("verification");
 		add(verification.add(new Label("verification_url2", verification_url))
 			.add(new ExternalLink("verification_url1", verification_url))
 			.setVisible(verification_url != null));
-		add(new Label("groupLbl", getString(511, langId)));
+		add(new Label("groupLbl", getString("511", locale)));
 	}
 
 	public static String getEmail(String username, String email, String verification_url) {

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactConfirmTemplate.java Tue Nov 15 03:24:44 2016
@@ -26,15 +26,15 @@ public class RequestContactConfirmTempla
 	private static final long serialVersionUID = 1L;
 
 	public RequestContactConfirmTemplate(UserContact contact) {
-		super(contact.getOwner().getLanguageId());
-		add(new Label("hi", getString(1192, langId)));
+		super(getOmSession().getLocale(contact.getOwner()));
+		add(new Label("hi", getString("1192", locale)));
 		add(new Label("firstName", contact.getOwner().getFirstname()));
 		add(new Label("lastName", contact.getOwner().getLastname()));
 		add(new Label("addedFirstName", contact.getContact().getFirstname()));
 		add(new Label("addedLastName", contact.getContact().getLastname()));
-		add(new Label("confirmed", getString(1198, langId)));
+		add(new Label("confirmed", getString("1198", locale)));
 	}
-	
+
 	public static String getEmail(UserContact contact) {
 		return ComponentRenderer.renderComponent(new RequestContactConfirmTemplate(contact)).toString();
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/RequestContactTemplate.java Tue Nov 15 03:24:44 2016
@@ -29,17 +29,17 @@ public class RequestContactTemplate exte
 	private static final long serialVersionUID = 1L;
 
 	public RequestContactTemplate(User userToAdd, User user) {
-		super(userToAdd.getLanguageId());
-		add(new Label("hi", getString(1192, langId)));
+		super(getOmSession().getLocale(userToAdd));
+		add(new Label("hi", getString("1192", locale)));
 		add(new Label("addedFirstName", userToAdd.getFirstname()));
 		add(new Label("addedLastName", userToAdd.getLastname()));
 		add(new Label("firstName", user.getFirstname()));
 		add(new Label("lastName", user.getLastname()));
-		add(new Label("likeToAdd", getString(1193, langId)));
-		add(new Label("check", getString(1194, langId)));
-		add(new ExternalLink("link", ensureApplication().getOmContactsLink()).add(new Label("contactList", getString(1196, langId))));
+		add(new Label("likeToAdd", getString("1193", locale)));
+		add(new Label("check", getString("1194", locale)));
+		add(new ExternalLink("link", ensureApplication().getOmContactsLink()).add(new Label("contactList", getString("1196", locale))));
 	}
-	
+
 	public static String getEmail(User userToAdd, User user) {
 		return ComponentRenderer.renderComponent(new RequestContactTemplate(userToAdd, user)).toString();
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/ResetPasswordTemplate.java Tue Nov 15 03:24:44 2016
@@ -26,7 +26,7 @@ public class ResetPasswordTemplate exten
 	private static final long serialVersionUID = 1L;
 
 	public ResetPasswordTemplate(String link) {
-		super(getOmSession().getOmLanguage());
+		super(getOmSession().getLocale());
 		add(new ExternalLink("reset_link1", link));
 		add(new Label("reset_link2", link));
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AbstractSubjectEmailTemplate.java Tue Nov 15 03:24:44 2016
@@ -18,13 +18,18 @@
  */
 package org.apache.openmeetings.service.mail.template.subject;
 
+import static org.apache.commons.lang3.time.FastDateFormat.MEDIUM;
+import static org.apache.commons.lang3.time.FastDateFormat.SHORT;
+
+import java.util.Date;
+import java.util.Locale;
 import java.util.TimeZone;
 
+import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.service.mail.template.AbstractTemplatePanel;
 import org.apache.openmeetings.service.mail.template.DashOmTextLabel;
 import org.apache.openmeetings.service.mail.template.OmTextLabel;
-import org.apache.openmeetings.util.CalendarPatterns;
 import org.apache.wicket.core.util.string.ComponentRenderer;
 import org.apache.wicket.markup.html.panel.Fragment;
 
@@ -34,42 +39,53 @@ public abstract class AbstractSubjectEma
 	protected TimeZone tz;
 	private String email = null;
 	private String subject = null;
+	private boolean created = false;
 
-
-	public AbstractSubjectEmailTemplate(Long langId, Appointment a, TimeZone tz) {
-		super(langId);
+	public AbstractSubjectEmailTemplate(Locale locale, Appointment a, TimeZone tz) {
+		super(locale);
 		this.a = a;
 		this.tz = tz;
 	}
 
-	abstract void omInit();
-
-	@Override
-	protected void onInitialize() {
-		super.onInitialize();
-		omInit();
+	AbstractSubjectEmailTemplate create() {
 		email = ComponentRenderer.renderComponent(this).toString();
 		subject = ComponentRenderer.renderComponent(getSubjectFragment()).toString();
+		created = true;
+		return this;
 	}
 
-	public final String getEmail() {
-		return email;
+	abstract String getPrefix();
+
+	protected String format(Date d) {
+		return format(d, MEDIUM);
 	}
 
-	abstract String getPrefix();
+	protected String format(Date d, int fmt) {
+		return FastDateFormat.getDateTimeInstance(fmt, fmt, tz, locale).format(d);
+	}
 
 	Fragment getSubjectFragment() {
 		Fragment f = new Fragment(COMP_ID, "subject", this);
 		f.add(new OmTextLabel("prefix", getPrefix())
 				, new OmTextLabel("title", a.getTitle())
-				, new OmTextLabel("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+				, new OmTextLabel("start", format(a.getStart(), SHORT))
 				, new DashOmTextLabel("dash")
-				, new OmTextLabel("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz))
+				, new OmTextLabel("end", format(a.getEnd(), SHORT))
 				);
 		return f;
 	}
 
+	public final String getEmail() {
+		if (!created) {
+			throw new RuntimeException("Not created!!");
+		}
+		return email;
+	}
+
 	public final String getSubject() {
+		if (!created) {
+			throw new RuntimeException("Not created!!");
+		}
 		return subject;
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/AppointmentReminderTemplate.java Tue Nov 15 03:24:44 2016
@@ -20,10 +20,11 @@ package org.apache.openmeetings.service.
 
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 
+import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.string.Strings;
@@ -31,32 +32,33 @@ import org.apache.wicket.util.string.Str
 public class AppointmentReminderTemplate extends AbstractSubjectEmailTemplate {
 	private static final long serialVersionUID = 1L;
 
-	private AppointmentReminderTemplate(Long langId, Appointment a, TimeZone tz) {
-		super(langId, a, tz);
+	private AppointmentReminderTemplate(Locale locale, Appointment a, TimeZone tz) {
+		super(locale, a, tz);
 	}
 
 	@Override
-	void omInit() {
-		add(new Label("titleLbl", getString(1158L, langId)));
+	protected void onInitialize() {
+		super.onInitialize();
+		add(new Label("titleLbl", getString("1158", locale)));
 		add(new Label("title", a.getTitle()));
 		add(new WebMarkupContainer("descContainer")
-			.add(new Label("descLbl", getString(1152L, langId)))
+			.add(new Label("descLbl", getString("1152", locale)))
 			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
 			.setVisible(!Strings.isEmpty(a.getDescription()))
 			);
-		add(new Label("startLbl", getString(1153L, langId)));
-		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
-		add(new Label("endLbl", getString(1154L, langId)));
-		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("startLbl", getString("1153", locale)));
+		add(new Label("start", format(a.getStart())));
+		add(new Label("endLbl", getString("1154", locale)));
+		add(new Label("end", format(a.getEnd())));
 	}
 
-	public static AppointmentReminderTemplate get(Long langId, Appointment a, TimeZone tz) {
-		ensureApplication(langId);
-		return new AppointmentReminderTemplate(langId, a, tz);
+	public static AbstractSubjectEmailTemplate get(User u, Appointment a, TimeZone tz) {
+		ensureApplication(u.getLanguageId());
+		return new AppointmentReminderTemplate(getOmSession().getLocale(u), a, tz).create();
 	}
 
 	@Override
 	String getPrefix() {
-		return ensureApplication().getOmString(1158, langId);
+		return ensureApplication().getOmString("1158", locale);
 	}
 }

Modified: openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html?rev=1769713&r1=1769712&r2=1769713&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/mail/template/subject/CanceledAppointmentTemplate.html Tue Nov 15 03:24:44 2016
@@ -9,7 +9,7 @@
   with the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
-    	  
+  
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY