1

我想知道有沒有人可以幫忙。我們正在編寫一個Spring MVC & Webflow應用程序,並且希望將所有屏幕文本等放在數據庫支持的消息資源包中。我有一個簡單的實現這個工作沒有問題。但是,我們需要支持對應用程序進行白色標記,包括對文本進行版本控制。Spring消息資源包 - 適用於白色標籤和版本控制?

當我說'白色標籤'時,我的意思是核心應用程序需要爲不同的商業品牌打上品牌。品牌的css元素很簡單 - 我們將使用Spring主題。但品牌延伸到不同的屏幕文字。例如,brandX可能會問「你叫什麼名字」,而brandY可能會問「請輸入你的名字」。

此外,我們需要支持每個品牌的屏幕文本版本。這爲用戶提供了一致的用戶旅程和消息 - 例如:如果他們在第1天看到了一組給定的屏幕標籤並保存了他們的報價,那麼當他們在第10天檢索報價時,他們應該看到相同的一組屏幕標籤等即使該品牌同時有5次屏幕文字迭代。 (實際上變化的頻率不會那麼頻繁,但我們仍然需要支持它)

我一直在玩這一段時間,在我的早期實驗中,我認爲我可以簡單地在消息密鑰的前綴資源包:

brandX.firstName = What is your firstname? 
brandY.firstName = Please enter your firstname 

但是這種感覺在幾方面都是錯誤的。

  1. 除非我們有每個品牌的視圖(我們可能需要),那麼該視圖需要基於任何東西在模型或主題,以某種方式應用的前綴。感覺錯誤的是爲了選擇正確的信息來顯示模型
  2. 我不知道如何應用版本控制(除了將它添加到組合鍵= brandX.firstname.v2 =什麼是您的名字?)

總而言之,我得出這樣的結論:這不是什麼消息資源包 - 它們非常適合基於區域的國際化(這是他們的目的!),但現在我我試圖做一些與他們完全不同的事情。它認爲,消息資源捆綁作爲解決方案可能不適合我的要求。

有沒有其他人做過這樣的事情?你是怎麼解決它的?

乾杯

彌敦道

回答

0

我做過類似這樣具有可與不同的主題或品牌被部署爲主題的web應用程序的東西。根據所部署的「品牌」,我還需要標註稍微不同的標籤。

我使用的解決方案是在JSP頁面中指定相同的i18n代碼,但要根據特定部署實例中使用的「品牌」選擇適當的消息包。因此,我沒有根據常規(基於語言)的語言環境選擇不同的消息包,而是通過org.springframework.web.servlet.i18n.CookieLocaleResolver指定自定義語言環境來強制Spring選擇定製的i18n包。這又是由應用程序的主屬性文件中的特定屬性配置的。這是我的一些調度程序servlet。xml文件:

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="lang" /> 
</bean> 

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 
    <property name="defaultLocale" value="${i18n.code}"/><!-- value from app.properties --> 
</bean> 

<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="interceptors"> 
     <ref bean="localeChangeInterceptor" /> 
    </property> 
</bean> 

唯一手搖需要的是在一個特定的品牌版本的部署 - 一個shell腳本做了部署,並將其複製特定的屬性文件,例如,cp app.properties.BRAND_X app.properties(即需要操縱其他文件是web.xml)。

編輯:不知道該版本的一部分,但你很可能拉,走出app.properties的文件很好,但指定它在JSP這樣的:

<!-- custom tag that reads a properties file --> 
<c:set var="version"><app:propertyLoader bundle="app" property="site.version"/></c:set> 
<fmt:message key="form.firstName.${version}"/> 
+0

忘了提,此解決方案假定您也不希望傳統的基於i18n的語言。 – nickdos