2017-01-06 3 views
0

と全体のフレーズ:Velocityテンプレート - メッセージキーではなく、私がmessages_en.propertiesからのメッセージキーとMSGを含む電子メールテンプレート.vm持つプレースホルダ

#msg("email-body") 

messages_en.propertiesがあります

email-body = Hello, $name! 

後:

private String buildMessage(String templateName, Properties properties, Locale locale) { 

    Template template = getVelocityEngine().getTemplate(templateName); 

    VelocityContext context = new VelocityContext(); 

    for (String key : properties.stringPropertyNames()) { 
     context.put(key, properties.getProperty(key)); 
    } 

    context.put(LocaleDirective.MESSAGES_LOCALE, locale); 

    StringWriter writer = new StringWriter(); 
    template.merge(context, writer); 

    return writer.toString(); 
} 

私が取得:

Hello, $name! 

名前は実際の値に置き換えられません。

メールテンプレートのフレーズを管理するにはどうすればよいですか?私はプレースホルダでフレーズ全体ではなく、テンプレートにメッセージキーだけを入れたいと思っています。

答えて

1

使用する他の変数の内部代替変数のevaluateディレクティブ:

import org.apache.velocity.Template; 
import org.apache.velocity.VelocityContext; 
import org.apache.velocity.runtime.RuntimeServices; 
import org.apache.velocity.runtime.RuntimeSingleton; 
import org.apache.velocity.runtime.parser.node.SimpleNode; 

import java.io.StringReader; 
import java.io.StringWriter; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices(); 
     StringReader reader = new StringReader("#evaluate($email-body)"); 
     SimpleNode node = runtimeServices.parse(reader, "default"); 

     Template template = new Template(); 
     template.setRuntimeServices(runtimeServices); 
     template.setData(node); 
     template.initDocument(); 


     VelocityContext context = new VelocityContext(); 
     context.put("name", "Maxim"); 
     context.put("email-body", "Hello, $name!"); 

     StringWriter writer = new StringWriter(); 
     template.merge(context, writer); 

     System.out.println(writer.toString()); 
    } 
} 

出力:

Hello, Maxim! 
+0

それは(この場合は電子メール本体内の)すべてのメッセージがのVelocityContextに置かれた場合に動作しますが、私の場合#msgで読み込み、.vmファイルで#evaluateしないでください。 – Justas

+0

'msg'とは何ですか? –

+0

#evaluate( '#msg( "email-body")')は、$ nameというHelloを出力します。 – Justas

関連する問題