【问题标题】:Spring Message Resource Bundles - Suitable for white labelling and versioning?Spring Message Resource Bundles - 适合白标和版本控制?
【发布时间】:2012-11-11 17:00:58
【问题描述】:

我想知道是否有人可以提供帮助。我们正在组合一个 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 = 你的名字是什么?)

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

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

干杯

内森

【问题讨论】:

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


    【解决方案1】:

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

    我使用的解决方案是在 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(另一个需要操作的文件是 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}"/>
    

    【讨论】:

    • 忘了提到这个解决方案假设您也不想要基于传统语言的 i18n。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2016-12-19
    • 2020-06-29
    相关资源
    最近更新 更多