2009-10-14 20 views
1

爲了更容易地修改屬性,我必須將Spring MessageSources包爲了支持i18n支持(屬性文件)而在類路徑之外。我怎樣才能做到這一點 ?如何外部化WAR之外的Spring MessageSources包

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="test-messages"/> 

謝謝!

+0

你是指在課程之外還是在戰爭之外? –

+0

是在戰爭之外。 Thx –

回答

1

我們構建了一個在DB中查找消息的消息源實現。你需要做的是創建一個繼承自Spring的AbstractMessageSource的MessageSource實現(爲了獲得所有的特性,請參閱javadoc)。

你必須儘可能少的執行抽象方法'resolveCode(String,Locale)'(但是實現'resolveCodeWithoutArguments(String,Locale)'會增加你的表現),它代表一個指向那個簡單表的DAO,定義如下:

table translation (
    translation_id number pk 
    code varchar(20) 
    locale varchar(5) 
    translation varchar(100) 
) 

代碼和語言環境形成一個唯一索引。

你完成了。當然,您將添加一些緩存功能,並提供「本地化降級」行爲(即,如果未找到「en_US」,請嘗試「en」),無論是在dao或MessageSource級別。

這個效果很好。

+0

感謝這個例子,我做了類似你的解決方案來解決我的問題。 –

1

查看這個thread的信息關於這個問題,但我認爲不是一個好的做法,有文件以外的tomcat上下文,因爲你永遠不知道它將在哪裏部署你的應用程序。

但如果你需要,你會發現一些相當不錯的解決方案。