java - Spring MVC 国际化 : Content not changing as per the selected language

标签 java spring spring-mvc jakarta-ee internationalization

我正在尝试执行一个 Spring MVC 国际化演示程序,该程序将以三种不同的语言(即英语、意大利语和德语)在登录页面上显示用户名和密码。但点击其他语言时,它也仅显示英语内容。请帮我找出我在这个程序中犯了什么错误。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>FirstSpringMVCAnnotations</display-name>

    <servlet>
        <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>  

</web-app>

spring-dispatcher-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.3.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <context:component-scan base-package="com.demo.controller" />

    <mvc:annotation-driven enable-matrix-variables="true" />

        <!-- For reading the properties files -->
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="/WEB-INF/message" />
    </bean>

    <mvc:interceptors>
        <mvc:interceptor>
        <mvc:mapping path="/init" />
            <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
                <property name="paramName" value="lang"></property>
            </bean>
        </mvc:interceptor>

    </mvc:interceptors>

        <!-- Cookie Resolver -->
    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    </bean>

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

InternationalizationDemoController.java:

package com.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class InternationalizationDemoController {

    @RequestMapping(value="/login.html")
    public ModelAndView getAdmissionForm(){
        ModelAndView modelView = new ModelAndView("Login");
        modelView.addObject("headerMsg", "Please enter below details to login");
        System.out.println("Inside InternationalizationDemoController..");
        return modelView;
    }

}

登录.jsp:

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

Select Language : <a href="?lang=en">English</a> | <a href="?lang=de">German</a> | <a href="?lang=it">Italian</a>

<form action="/FirstSpringMVCAnnotations/login.html">
  <div class="container">

    <h1 align="center">Login Page</h1>
    <p>${headerMsg}</p>
    <hr>

    <spring:message code="spring.username.label" />
    <input type="text" name="username"><br><br>

    <spring:message code="spring.password.label" />
    <input type="password" name="password"><br><br>

    <button type="submit" class="submitbtn">Submit</button>
    <button type="reset" class="resetbtn">Reset</button>
  </div>

</form>

</body>
</html>

我在/Web-Inf 文件夹中有 message_en.properties、message_it.properties 和 message_de.properties 文件。

message_en.properties

spring.username.label=User name
spring.password.label=Password

message_de.properties

spring.username.label=Nutzername
spring.password.label=Passwort

message_it.properties

spring.username.label=Nome utente
spring.password.label=Parola d'ordine

如下图所示,单击“德语”也会显示英语的“用户名”和“密码”标签。

enter image description here

最佳答案

您需要更改<mvc:mapping path="/init" /><mvc:mapping path="/**" /> .

关于java - Spring MVC 国际化 : Content not changing as per the selected language,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54735735/

相关文章:

java - 在tomcat中合并自定义和默认信任库

java - 如何从 Netbeans 平台中的另一个窗口更新一个窗口中的组件?

java - 使用java将字符串中的\u替换为\\u

java - AOP切入点未注册

java - Java Spring多线程原子性问题

java - 如何在java中检查Spring Mvc框架中的int和boolean可选参数

java - 如何使用 Spring MVC RequestMapping 有多个参数?

java - 简单的 Java 程序奇怪的输出

Spring:无法将模拟注入(inject)到使用 @Aspect 注释的类中

java - 是否有一种简单而干净的方法将表单输入绑定(bind)到域类上的两个属性?