首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按地区和模板名称获得模板

按地区和模板名称获得模板
EN

Stack Overflow用户
提问于 2014-04-11 18:30:44
回答 1查看 7.2K关注 0票数 3

我的EmailHandler类如下:

代码语言:javascript
复制
Class EmailHandler {
    ...
    @Autowired
        protected Configuration config;
    }
    ...
    protected Template getTemplate(String templateName, Locale locale) throws IOException, TemplateException {
        return config.getTemplate(templateName, locale);
    }
    ...
}

在我的applicationcontext.xml里

代码语言:javascript
复制
<bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
    <property name="templateLoaderPath" value="classpath:/templates/email"/>
</bean>

模板的目录结构如下:

代码语言:javascript
复制
--src
----main
------resources
--------templates
----------email
------------template1.ftl
------------template2.ftl
------------template3.ftl
------------template4.ftl
------------multilanguage
--------------fr
----------------template1.ftl

目前,getTemplate总是与(string,Locale.US)一起调用。但是,在将来,我希望能够用(string,Locale.FR)调用Locale.FR。

以下是我的问题: 1.如何更改目录结构以指定法语模板。2. config.getTemplate(templateName,locale)到底做了什么?该方法如何在模板目录中找到Locale.US的模板? 3.我想从email/multilanguage/fr目录中加载我的法语模板。我该怎么做?

谢谢,

理时

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 20:06:10

当您调用getTemplate("foo.ftl", Locale.US)时,FreeMarker首先尝试加载foo_en_US.ftl,然后是foo_en.ftl,最后是foo.ftl。因此,法语模板应该命名为foo_fr.ftl

getTemplate指定的区域设置还决定模板中locale设置的值。但是,这可以在Environment对象中重写。如果您调用myTemplate.process(...)而不是调用env = myTemplate.createProcessingEnvironment(...); env.setLocale(...); env.process(),或者在模板中调用<#setting locale='...'>,则可以这样做。

在根据区域设置从子目录中加载模板时,您可以为此实现一个TemplateLookupStrategy (参见http://freemarker.org/docs/api/freemarker/cache/TemplateLookupStrategy.html)。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23020094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档