我已经看过这个问题,但它谈论的是生命射线速度,并且似乎可以访问我无法访问的这个“$portal”对象。
具体来说,我正在尝试在模板中创建一个 Locale 对象,以将其传递给 $dateTool.format 调用,以获取特定语言的输出。
我无法创建语言环境对象并将其预先传递给模板,因为该代码可以调用各种模板,每个模板都可以使用不同的语言。
我试过了
#set($localeClass = $portal.getClass().forName("java.util.Locale"))
$localeClass.getName
但这只是输出 '$localeClass.getName' (我不确定 $portal 是否是一些神奇的预设变量或其他东西)。
我也试过
#set($localeClass = java.util.Locale.class)
$localeClass.getName
但是当我尝试处理模板时,这给了我一个运行时异常。
我在 Velocity 中看到了ClassTool,但它不支持代码的反身执行。我想我可以尝试类似的东西$classTool.inspect("java.util.Locale").getType.getConstructor([$classTool.inspect("java.util.String"),$classTool.inspect("java.util.String")]).newInstance(["es","ES"])
。
我会尝试一下,但与此同时,我会看看其他人是否有更好的主意。
编辑
自发布以来,我意识到velocity 有一个 ConversionTool(没有在他们的 GenericTool 概述页面上列出),它有一个我可以调用的 toLocale 函数。所以我可以使用
$dateTool.format('dd-MMM-yyyy', $date, $conversionTool.toLocale("es_ES"))
但是我仍然很好奇是否有一种方法可以通过反射来实现这一点。