package org.trimou.tests.servlet.i18n; import java.io.IOException; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.trimou.engine.MustacheEngine; import org.trimou.engine.MustacheEngineBuilder; import org.trimou.engine.resolver.ResolutionContext; import org.trimou.engine.resolver.i18n.LocaleAwareResolver; import org.trimou.handlebars.Options; import org.trimou.handlebars.i18n.LocaleAwareValueHelper; import org.trimou.servlet.i18n.RequestLocaleSupport; /** * * @author Martin Kouba */ @WebServlet("/test") public class LocaleServlet extends HttpServlet { private static final Logger LOGGER = LoggerFactory .getLogger(LocaleServlet.class); private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { MustacheEngine engine = MustacheEngineBuilder .newBuilder() .addGlobalData("locale", Locale.FRENCH) .setLocaleSupport(new RequestLocaleSupport()) .registerHelper("getLocale", new LocaleAwareValueHelper() { @Override public void execute(Options options) { append(options, getLocale(options).getLanguage()); } @Override protected int numberOfRequiredParameters() { return 0; } }) .addResolver(new LocaleAwareResolver(1000) { @Override public Object resolve(Object contextObject, String name, ResolutionContext context) { if (name.equals("resolverLocale")) { return getCurrentLocale().getLanguage(); } return null; } }).build(); String locale = engine.compileMustache("request_locale_support_test", "{{resolverLocale}}:::{{getLocale}}") .render(null); LOGGER.info("Trimou current locale: {}", locale); resp.setContentType("text/plain"); resp.getWriter().append(locale); } }