この質問はすでに見てきましたが、liferay-velocityについて話しているので、アクセスできないこの「$portal」オブジェクトにアクセスできるようです。
具体的には、テンプレート内にロケールオブジェクトを作成して、それを$ dateTool.format呼び出しに渡して、特定の言語で出力を取得しようとしています。
ロケールオブジェクトを作成して事前にテンプレートに渡すことはできません。そのコードはさまざまなテンプレートを呼び出すことができ、それぞれが異なる言語である可能性があるためです。
私はもう試した
#set($localeClass = $portal.getClass().forName("java.util.Locale"))
$localeClass.getName
しかし、それは'$ localeClass.getName'を出力するだけです($ portalが魔法のプリセット変数か何かかどうかはわかりませんでした)。
私も試しました
#set($localeClass = java.util.Locale.class)
$localeClass.getName
しかし、テンプレートを処理しようとすると、ランタイム例外が発生しました。
ClassToolがVelocityに存在するのを見ましたが、それはコードの再帰的実行をサポートしていません。私はのようなものを試すことができると思い$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"))
しかし、リフレクションを介してこれを達成する方法があったかどうかはまだ興味があります。