2011-07-07 32 views
8

Web sayfamı tam olarak uluslararası hale getirmek ve URL'lerin farklı dillere çevrilmesini istiyorum. Örneğin http://example.tld/de/pagina Spring 3 Aynı içeriğe sahip çok dilli URL'yi nasıl yönetirim

tüm yukarıda belirtilen sayfalarda

  • http://example.tld/en/page
  • aynı kontrolör tarafından ele ve aynı içeriği göstermek gerekir (tabii istenilen dile tercüme, bu i nasıl yapılacağını biliyorum - mesaj özelliklerini kullanarak).

    Yani benim sorular şunlardır:

    1. nasıl @RequestMapping ek açıklama kullanarak bu işlevselliği elde etmek için?
    2. Bu tür takma adları özelliklerde veya XML dosyasında yapılandırabilir ve daha sonra bunları "denetleyiciye" enjekte edebilir miyim? yani .:

    özellikleri dosya:

    alias.page=page:pagina 
    

    Kontrolör böyle

    @RequestMapping("${alias.page}") 
    ... 
    

    Ya da bir şey.

    Yanıtlarınız için teşekkürler.

+1

Bunun gibi bir şey arıyorum .. Özel @ I18NRequestMapping ("alias.page") ek açıklaması oluşturmayı düşündünüz mü? Bu mümkün olabilir mi? – spike07

+0

veya RequestMappingHandlerMapping için kendi özel embeddedValueResolver'ınızı sağlayabilir – spike07

cevap

4

Ben Nihayet web.xml

içine yeni filtre yayımlamak sonra

@Controller 
public class MultiLangController { 

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

gibi görünecek 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() {} 
} 

isteği işlemek için denetleyici yöntemi kendi uygulama oluşturarak bu sorunu çözdük

Ve bu yapılmalı Numara. Böyle bir esnekliğe ihtiyacınız yoksa, UrlRewriteFilter (Java için .htaccess analogu) yeterli olacaktır.

-1

Kullanım Bahar isteği harita böylece kendinden önce bir şey ile @RequestMapping bir PathVariable:

@RequestMapping("myPage.do") 
public String displayBasePage() { 
    return("pageName"); // a hard-coded JSP 
} 

@RequestMapping("/someidentifier/{pageName}.do" 
public String displayBasePage (
     PathVariable("pageName") String pageName) { 
    return(pageName); // the language-specific JSP, or whatever else you want to do 
} 

Bahar bu RequestMapping için /someidentifier/ maç olacak hale gelir ve kullanabileceğiniz pageName için istediğiniz değer.

İlgili konular