2017-07-27 26 views
1

映射i18n轉換的url路徑的方法是什麼?使用i18n路徑部件的Spring MVC RequestMapping

例如可以說,我們談論如下網址(爲區域en):

www.foo.tld/car/manufacturer 

在德語(DE)這個網址會

www.foo.tld/auto/hersteller 

我知道控制器RequestMapping我什麼可以使用severel值來映射這些網址的一種方法,如

@GetMapping(value={"/car/manufacturer/", "/auto/hersteller/"}) 

更多SEO優化窩ULD是可能是一些與當前區域的路徑類似

@GetMapping(value={"/en/car/manufacturer/", "/de/auto/hersteller/"}) 

...但我不想開始討論什麼是最好的搜索引擎優化的URI明智。

如果僅使用一些語言環境/語言,這並不是那麼糟糕,但是我想使其成爲動態的。 目前即時通訊使用messages_xx.properties爲我的應用程序生成的URL映射URL路徑的部分,如:使用他們已經爲

messages.properties

uri.car=car 
uri.manufacturer=manufacturer 

messages_de.properties

uri.car=auto 
uri.manufacturer=hersteller 

林建立鏈接重複的用戶區域設置工作正常。

什麼即時搜索是一個優雅的,錯誤的修剪方式來映射這些網址在我的控制器。如果我會改變例如一個關鍵uri.car的值,並將在我的控制器中有一個靜態的RequestMapping,就像上面的例子,我還需要在那裏改變它(如果我不會忘記!)。 另外,如果我想添加對另一種語言的支持,我需要在所有控制器中搜索並檢查是否需要添加其他值映射。

如何在Spring控制器中映射i18n路徑部分,理想情況下尊重請求語言環境並使用messages_xx.properties幫助解析路徑字符串,是否有更智能的方法? 或者將過濾器按照請求的語言環境提取路徑部分並在內部僅使用一種語言來映射URL?

回答

0

作爲您具有EN message.properties和DE 消息。性能具有以下屬性:

url.car=/car/manufacturer/在EN

url.car=/auto/hersteller/在DE

在你@Controller,你可以很容易地得到這個特性在配置爲messageSource並用它來獲取屬性:

注入配置的MessageSource以允許Spring解析消息:

@Autowired 
private MessageSource messageSource; 

然後你可以從你的message.properties獲得所有屬性文件:

String url= messageSource.getMessage("url.car", put_here_your_locale);