【问题标题】:How to add resource-bundle to Spring-JSF application如何将资源包添加到 Spring-JSF 应用程序
【发布时间】:2013-04-12 19:59:57
【问题描述】:

我有一个 spring-jsf 集成应用程序。当我尝试从 faces-config.xml 的资源包中获取消息时,它运行没有问题。但我想将此资源包移动到 spring applicationContext.xml 但问题是,它找不到我的资源包。这是我的面孔配置;

    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    <application>
        <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>

         <resource-bundle>
                  <base-name>/resources/locale/messages</base-name>
                   <var>msg</var>
         </resource-bundle>
         <locale-config>
                   <default-locale>es</default-locale>
                   <supported-locale>en</supported-locale>
                   <supported-locale>fr</supported-locale>
          </locale-config>

    </application>
</faces-config>    

还有我的 applicationContext.xml

        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="es" />
    </bean>


<bean id="msg"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="useCodeAsDefaultMessage" value="true" />
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="cacheSeconds" value="1" />
</bean>

【问题讨论】:

    标签: spring jsf spring-mvc internationalization


    【解决方案1】:

    看起来&lt;base-name&gt; 元素不正确。

    <resource-bundle>
      <base-name>Messages</base-name>
      <var>msgs</var>
    </resource-bundle>
    <locale-config>
      <default-locale>en_US</default-locale>
      <supported-locale>nl</supported-locale>
      <supported-locale>es</supported-locale>
    </locale-config>
    

    资源包的基本名称是属性文件的前缀。 JSF 足够聪明,可以确定语言环境并从类路径中为属性文件派生正确的文件名。

    例如。

    Messages_en_US.properties

    Messages_es.properties

    上面的摘录显示了默认语言环境设置为英语以及下面列出的其他支持的语言环境。当具有此首选语言环境的访问者请求您的 JSF 页面时,它将足够聪明地从适当名称的资源包中检索属性值。

    Taken from BalusC's Tutorial on Resource Bundles

    <application>
        <locale-config>
            <default-locale>en_US</default-locale>
            <supported-locale>nl</supported-locale>
            <supported-locale>es</supported-locale>
        </locale-config>
        <resource-bundle>
            <base-name>com.example.faces.i18n.Text</base-name>
            <var>text</var>
        </resource-bundle>
    </application>
    

    另一种方法是实现您自己的 ResourceBundle 类。

    public class Text extends ResourceBundle {
    

    链接教程中列出了有关如何执行此操作的详细说明。

    实现自己的资源包的额外好处是,您可以将其声明为具有 Application Scope 的 Spring bean,并且可以通过 DI 将其推送到整个应用程序中的其他代码,以防您需要访问代码中的各种资源包属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-10
      • 2017-12-05
      • 1970-01-01
      • 2014-05-27
      • 2015-02-20
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多