1

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

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

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

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

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

但这在几个方面感觉是错误的。

  1. 除非我们有每个品牌的视图(我们可能必须这样做),否则视图需要以某种方式基于模型或主题中的某些内容应用前缀。视图了解模型以选择正确的消息来显示感觉是错误的
  2. 我不知道如何应用版本控制(除了将其添加到复合键 = brandX.firstname.v2 = 你的名字是什么?)

总而言之,我得出的结论是,这不是消息资源包的用途——它们非常适合基于语言环境的国际化(这就是它们的用途!),但现在我正在尝试做一些完全不同的事情他们。感觉消息资源包作为解决方案可能不适合我的要求。

有没有其他人做过这样的事情?你是怎么解决的?

干杯

弥敦道

4

1 回答 1

0

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

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