diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/EntryPointHelper.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/EntryPointHelper.java index 93c26d460e0..ba340c934ec 100755 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/EntryPointHelper.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/EntryPointHelper.java @@ -2,7 +2,11 @@ package com.sap.sse.gwt.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; +import com.google.gwt.http.client.RequestBuilder; +import com.google.gwt.i18n.client.LocaleInfo; +import com.google.gwt.user.client.rpc.RpcRequestBuilder; import com.google.gwt.user.client.rpc.ServiceDefTarget; +import com.sap.sse.gwt.shared.RpcConstants; public class EntryPointHelper { /** @@ -18,6 +22,13 @@ public class EntryPointHelper { String moduleBaseURL = GWT.getModuleBaseURL(); String baseURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf('/', moduleBaseURL.length()-2)+1); serviceToRegister.setServiceEntryPoint(baseURL + servicePath); + serviceToRegister.setRpcRequestBuilder(new RpcRequestBuilder() { + @Override + protected void doFinish(RequestBuilder rb) { + super.doFinish(rb); + rb.setHeader(RpcConstants.HEADER_LOCALE, LocaleInfo.getCurrentLocale().getLocaleName()); + } + }); } /** diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/dispatch/servlets/ProxiedRemoteServiceServlet.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/dispatch/servlets/ProxiedRemoteServiceServlet.java index dae2518aedb..d153dd3cb33 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/dispatch/servlets/ProxiedRemoteServiceServlet.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/dispatch/servlets/ProxiedRemoteServiceServlet.java @@ -1,6 +1,7 @@ package com.sap.sse.gwt.dispatch.servlets; import java.io.IOException; +import java.util.Locale; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -10,6 +11,7 @@ import com.google.gwt.user.client.rpc.SerializationException; import com.google.gwt.user.server.rpc.RPCServletUtils; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.google.gwt.user.server.rpc.SerializationPolicy; +import com.sap.sse.gwt.shared.RpcConstants; /** * Using GWT in a proxyfied environment can be tricky and leads to strange errors @@ -66,5 +68,21 @@ public abstract class ProxiedRemoteServiceServlet extends RemoteServiceServlet { } else { super.doUnexpectedFailure(e); } - } + } + + protected Locale getClientLocale() { + final HttpServletRequest request = getThreadLocalRequest(); + if (request != null) { + final String localeString = request.getHeader(RpcConstants.HEADER_LOCALE); + if (localeString != null && ! localeString.isEmpty()) { + try { + return Locale.forLanguageTag(localeString); + } catch (Exception e) { + // non-parseable locales are ignored + } + } + } + // Using default locale if the client locale could not be determined + return Locale.ENGLISH; + } } diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/shared/RpcConstants.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/shared/RpcConstants.java new file mode 100644 index 00000000000..e3fd8b4268f --- /dev/null +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/shared/RpcConstants.java @@ -0,0 +1,5 @@ +package com.sap.sse.gwt.shared; + +public interface RpcConstants { + public static final String HEADER_LOCALE = "X-Client-Locale"; +}