Spring Message Resource Bundles - 适用于白标和版本控制?

时间:2012-11-11 17:00:58

标签: spring-mvc internationalization spring-webflow-2 branding

我想知道是否有人可以提供帮助。我们正在组建一个Spring MVC& Webflow应用程序,并希望将所有屏幕文本等放在数据库支持的消息资源包中。我有一个简单的实现这个工作没有问题。但是,我们需要支持对应用程序进行白色标记,包括对文本进行版本控制。

当我说'白色标签'时,我的意思是核心应用程序需要为不同的商业品牌打上品牌。品牌的CSS元素很容易 - 我们将使用Spring主题。但品牌延伸到不同的屏幕文字。例如,brandX可能会问“你叫什么名字”,而brandY可能会问“请输入你的名字”。

此外,我们需要支持每个品牌的屏幕文字版本。这为用户提供了一致的用户旅程和信息 - 例如:如果他们在第1天看到一组给定的屏幕标签并保存他们的报价,他们应该在第10天检索报价时看到同一组屏幕标签等即使该品牌同时有5次迭代的屏幕文字。 (实际上,变化的频率不会经常发生,但我们仍然需要支持它)

我已经玩了一段时间,并且在我早期的实验中认为我可以简单地在资源包中添加消息键前缀:

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

但这在几个方面感觉不对。

  1. 除非我们拥有每个品牌的视图(我们可能需要),否则视图需要以某种方式根据模型中的某些内容或主题应用前缀。对于视图了解模型以选择要显示的正确消息
  2. ,感觉是错误的
  3. 我不知道如何应用版本控制(除了将其添加到复合键= brandX.firstname.v2 =你的名字是什么?)
  4. 总而言之,我得出的结论是,这不是消息资源包的用途 - 它们非常适合基于语言环境的国际化(这就是它们的用途!),但现在我正在尝试做某事与他们截然不同。感觉消息资源捆绑作为解决方案可能不适合我的要求。

    还有其他人做过这样的事吗?你是怎么解决它的?

    干杯

1 个答案:

答案 0 :(得分:0)

我使用主题网络应用程序做了类似的事情,可以部署不同的主题或品牌。根据所部署的“品牌”,我还需要略有不同的标签。

我使用的解决方案是在JSP页面中指定相同的i18n代码,但是根据特定部署实例中使用的“品牌”选择适当的消息包。因此,我不是根据传统的(基于语言的)语言环境选择不同的消息包,而是强制Spring通过org.springframework.web.servlet.i18n.CookieLocaleResolver指定自定义语言环境来选择自定义i18n包。这又是由应用程序主属性文件中的特定属性配置的。这是我的一些dispatcher-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(需要操作的另一个文件是{{1 }})。

编辑:不确定版本控制部分,但您也可以将其从app.properties文件中拉出来,但是在JSP中指定它:

web.xml