Java 我的Freemarker ObjectWrapper如何访问模板设置

Java 我的Freemarker ObjectWrapper如何访问模板设置,java,internationalization,freemarker,Java,Internationalization,Freemarker,用例:system administrator将Freemarker模板存储在数据库中,该数据库(由Spring Boot REST API使用)以区域设置感知的方式将系统用户(应答者)存储的信息呈现给不同的用户类型(审阅者) 受访者的回答可能存储在此类对象中(或者,如果向受访者提出的问题预计会有多个答案,则存储在此类对象的列表中): //snip 导入com.fasterxml.jackson.databind.node.ObjectNode; //更多的进口被切断 公共类语言StringMa

用例:system administrator将Freemarker模板存储在数据库中,该数据库(由Spring Boot REST API使用)以区域设置感知的方式将系统用户(应答者)存储的信息呈现给不同的用户类型(审阅者)

受访者的回答可能存储在此类对象中(或者,如果向受访者提出的问题预计会有多个答案,则存储在此类对象的列表中):

//snip
导入com.fasterxml.jackson.databind.node.ObjectNode;
//更多的进口被切断
公共类语言StringMap{
私有映射语言StringMap;
公共语言StringMap(ObjectNode语言节点){
//从JSON实例化LanguageStringMap的代码片段
}
公共void put(语言、字符串值){
如果(value.length()==0)
抛出新的IllegalArgumentException(String.format(
“长度为零的语言“%s”的值”,language.getCode());
languageStringMap.put(语言,值);
}
公共字符串get(语言){return languageStringMap.get(语言);}
}
我想我要做的是编写一个ObjectWrapper,将
LanguageStringMap
的实例映射到一个字符串(通过调用
get()
方法获得,该方法使用的语言派生自审阅者浏览器请求的区域设置,并在模板的设置中设置)。这为系统管理员提供了比使上载的模板包含一组模板方法调用更干净的用户体验

为此,我的对象包装器需要访问模板设置。我已经仔细阅读了这篇文章,但我仍然不清楚如何做到这一点,或者这是否可能


我认为,试图通过将资源束与模板一起上载到数据库来实现这一点是错误的,但这是一个考虑因素。

通常,您只需在处理模板之前将特定于区域设置的字符串以及所有其他变量放入数据模型中即可。在这种情况下,不需要
ObjectWrapper
自定义。但是,如果必须使用基于
ObjectWrapper
的解决方案,则可以在
ObjectWrapper
方法中获取区域设置(如使用
Environment.getCurrentEnvironment().getLocale()覆盖
DefaultObjectWrapper.handleUnknownType

// snip
import com.fasterxml.jackson.databind.node.ObjectNode;
// more imports snipped

public class LanguageStringMap {
    private Map<Language, String> languageStringMap;

    public LanguageStringMap(ObjectNode languageMapNode) {
        // snip of code instantiating a LanguageStringMap from JSON
    }

    public void put(Language language, String value) {
        if (value.length() == 0)
            throw new IllegalArgumentException(String.format(
                    "value for language '%s' of zero length", language.getCode()));
        languageStringMap.put(language, value);
    }

    public String get(Language language) { return languageStringMap.get(language); }
}