0

これらのことをまとめるのに迷っており、URL引数で渡される言語ごとにJSPがスプリングメッセージを表示しないので、助けていただければ幸いです。welcome.jsp で別の言語が選択されている場合、JSP は SessionLocaleResolver を介して SessionLocale を取得しません。私は何をしていますか/間違っていますか。

Spring 3.1.1 を使用しています。前もって感謝します

<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />

<!-- Enables the Spring MVC @Controller programming model -->
<mvc:view-controller path="/views/**" view-name="secure/index" />

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

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

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

<!-- Application Message Bundle -->
<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
</bean>

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass"
        value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

私の WelcomeController

@Controller
public class WelcomeController {

@Autowired
private MessageSource messageSource;

public void setMessageSource(MessageSource messageSource) {
    this.messageSource = messageSource;
}

@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome(Model model, HttpServletRequest request, HttpServletResponse response) {
    String lang = request.getParameter("lang");
    if (lang == null) {
        lang = "en_US";
    }
    /**
     * Get Message having PARAMETERS in the message {0}, {1}.....{n}
     */
    model.addAttribute(
            "welcome_back_msg",
                messageSource.getMessage("message_welcome_back_user", new Object[] { "(USER)",
                        new DateTime(), new DateTime() }, new Locale(lang)));
    return "welcome";
}
}

メッセージ ファイルは /WEB-INF/messages/messages_en.properties に配置されます

welcome_springmvc=Welcome to Spring MVC
message_welcome_back_user=Welcome back {0} Your Last Successful : {1} Failed : {2}

messages_zh.properties

welcome_springmvc=\u6B22\u8FCE\u5230 Spring \u7684 MVC

message_welcome_back_user=\u6B22\u8FCE\u56DE\u6765 {0} \u4E0A\u6B21\u6210\u529F : {1} \u5931\u8D25 : {2}

messages_fr.properties

welcome_springmvc=Bienvenue \u00E0 Spring MVC

message_welcome_back_user=Bienvenue \u00E0 nouveau {0} Votre r\u00E9ussite Derni\u00E8re : {1} manqu\u00E9 : {2}

--- ようこそ.jsp

Spring Message from Property:<b><spring:message code="welcome_springmvc" text="default text" /></b>
Message from Controller:<b>${welcome_back_msg}

JSP イメージ ここに画像の説明を入力

Property からの Spring Message は常に locale = en にフォールバックすることがわかります。この点で何か助けていただければ幸いです。

4

1 に答える 1

0

LocaleChangeInterceptor Bean をインスタンス化するだけでは不十分です。すべてのインターセプターと同様に、インターセプターとして登録する必要があります。

したがって、Bean 定義を<mvc:interceptors>タグ内に配置します。

<!-- URL interceptor -->
<mvc:interceptors>
     <bean id="localeChangeInterceptor"
       class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
       <property name="paramName" value="lang" />
     </bean>
</mvc:interceptors> 

ところで:jspスプリングメッセージタグを見てください

于 2012-09-14T06:14:53.743 に答える