天天看点

I18N by Spring

Target:

In velocity files, we visite international resource which was stored in DB by used some methods!

Key Words:

Velocity , Spring , messagesource , Synyx Messagesource for Spring

Reference:

http://redmine.synyx.org/projects/messagesource/wiki

Getting Start:

configure in Maven(down related package):

<repositories>

    .......

  <repository>

         <id>nexus.synyx.org</id>

         <name>Synyx OpenSource Repository</name>

         <url>http://repo.synyx.org</url>

      </repository>

 </repositories>

<dependencies>

  <dependency>

            <groupId>org.synyx</groupId>

            <artifactId>messagesource</artifactId>

            <version>0.6.1</version>

        </dependency>

 </dependencies>

Configue in application context:

<bean id="messageSource" class="org.synyx.messagesource.InitializableMessageSource">

  <property name="defaultLocale" value="en_US" />

  <property name="messageProvider">

   <bean class="org.synyx.messagesource.jdbc.JdbcMessageProvider">

    <property name="dataSource" ref="dataSource" />

    <property name="delimiter">

     <value>"</value>

    </property>

   </bean>

  </property>

 </bean>

Read reource by messageSourceAccessor:

MessageSource  messageSource = (MessageSource) applicationContext.getBean("messageSource");

MessageSourceAccessor  messageSourceAccessor = new MessageSourceAccessor(messageSource);

Create a helper class to read resource for DB

 calss MessageTool {

   ..........................

   public String get(String code) {

        return messageSourceAccessor.getMessage(code, locale);

    }

    public String get(String code, String s1) {

        return messageSourceAccessor.getMessage(code, s1, locale);

    }

    public String get(String code, Object[] args) {

        return messageSourceAccessor.getMessage(code, args, locale);

    }

    public String get(String code, Object[] args, String defaultMsg) {

        return messageSourceAccessor.getMessage(code, args, defaultMsg, locale);

    }

    public String get(String code, List args) {

        return this.get(code, args.toArray());

    }

    public String get(String s, String s1, List list) {

        return this.get(s, list.toArray(), s1);

    }

}

Finnally, we can use following writing to read resource file:

$messageTool.get('VELOCITY')

if current locale is en_US, the tool will query special message by follow conditions: language=en and country=US and key=VELOCITY!