Geo*_*old 9 java wicket internationalization
我正在将应用程序转换为在其所有页面上使用i18n/l10n.我对Wicket对此的支持感到非常满意,到目前为止一切顺利.我遇到的一个棘手问题是:
我们有一个文本文件,用作HTML模板,用于在用户在网站上执行某项操作时发送电子邮件.当用户单击特定链接时,我手动读取此模板,执行一些文本替换"Dear $USERNAME"
,并将结果作为HTML电子邮件发送给用户.
为了支持我们目标的10种左右的语言,我要么必须维护这个模板文件的10个副本,要么想办法使用Wicket的内置i18n支持渲染这个"页面",抓住结果作为字符串,然后发送它.
因此我的问题是:如何以编程方式"呈现"Wicket页面并将结果作为字符串获取?
如果可能的话,我宁愿避免像使用HttpClient这样的黑客攻击; HttpClient不会有用户的Locale,也不会以用户等身份自动登录,这对我来说似乎不是一个好的解决方案.
如果您只是想要原始代码,那么它是:(这实际上与本文中描述的解决方案相同.)
//I assumed that you want to use the current user's session for rendering. If this isn't the case, you'll have to use a mock session
MockHttpServletRequest mockReq = new MockHttpServletRequest( WebApplication.get(), ((WebRequest)getRequest()).getHttpServletRequest().getSession(), WebApplication.get().getServletContext() );
MockHttpServletResponse mockRes = new MockHttpServletResponse( mockReq );
WebResponse res = new WebResponse(mockRes);
ServletWebRequest req = new ServletWebRequest( mockReq );
RequestCycle cycle = new WebRequestCycle( WebApplication.get(), req, res );
PageParameters pp = new PageParameters();
//add page parameters here
//Your email page should really be a bookmarkable page, but if it isn't, you can replace the request target with something that better suits your case
cycle.request( new BookmarkablePageRequestTarget( EmailPage.class, pp ));
System.out.println( mockRes.getDocument() );
Run Code Online (Sandbox Code Playgroud)