Spring 3如何处理具有相同内容的多语言URL

kur*_*nko 9 java url spring translation internationalization

我想完全国际化我的网页,并将网址翻译成不同的语言.例如

所有上述页面应该由同一个控制器处理并显示相同的内容(当然,翻译成所需的语言,我知道该怎么做 - 使用消息属性).

所以我的问题是:

  1. 如何使用@RequestMapping注释实现此功能?
  2. 我可以在属性或XML文件中配置这些别名,然后将它们"注入"到控制器中吗?即:

属性文件:

alias.page=page:pagina
Run Code Online (Sandbox Code Playgroud)

调节器

@RequestMapping("${alias.page}")
...
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

谢谢你的回答.

kur*_*nko 5

我已经通过创建自己的servlet实现解决了这个问题 Filter

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class ExampleFilter implements Filter {

    @Override
    public void init(FilterConfig fc) throws ServletException {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, 
                        FilterChain fc) throws IOException, ServletException {

        // Needed for getting URL from request
        final HttpServletRequest hsRequest = (HttpServletRequest) request;
        String url = hsRequest.getRequestURI().substring(
                        hsRequest.getContextPath().length()
                     );

        /* This is just simple example. Here you can connect to database
           or read properties or XML file with your configuration */
        if ("/de/pagina".equals(url) || "/en/page".equals(url)) {
            // change url and forward 
            RequestDispatcher dispatcher = request.getRequestDispatcher("/page");
            dispatcher.forward(request, response);
        } else {
            // Do nothing, just send request and response to other filters
            fc.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {}
}
Run Code Online (Sandbox Code Playgroud)

然后,用于处理请求的控制器方法将如下所示

@Controller
public class MultiLangController {

    @RequestMapping(value="/page", method = RequestMethod.GET)
    public String pageMethod() {        
        return ...;
    }    
}
Run Code Online (Sandbox Code Playgroud)

最后将新的过滤器发布到 web.xml

<filter>
    <filter-name>MyExampleFilter</filter-name>
    <filter-class>
        com.path.to.filter.ExampleFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>MyExampleFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。如果您不需要这种灵活性,那么UrlRewriteFilter.htaccessJava的类似物)可能就足够了。