2017-03-03 99 views
0

我試圖在我的應用程序中實現國際化。我已經瀏覽了很多博客,其中講解了我們如何使用不同的庫來實現它。國際化支持Spring應用程序中的後端消息

我打算使用的是帶彈簧的I18N。

我的應用程序的結構是這樣的: -

我的應用程序的前端(基於Angular2)消耗了從後端暴露的REST API。 我正在使用Spring Rest來實現Rest API。對於每個API調用,我正在準備&向UI發送適當的消息。

現在默認消息是英文,但現在我想添加國際化支持。我該怎麼做 ?

下面是我露出了REST API,我發送消息的方式之一例如: -

@CrossOrigin(methods = RequestMethod.POST) 
@PostMapping(value = "/user/resetUserAccount", produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody ResponseEntity<String> resetUserAccount(@RequestBody InputObj inputObj) { 

    boolean isUserAccountReset = userService.resetUserAccount(inputObj); 

    if (isUserAccountReset) { 
     return new ResponseEntity<String>(successResponse("User Account Reset Successful").toString(), HttpStatus.OK); 
    } 

    return new ResponseEntity<String>(failureResponse("Failed to Reset User Account").toString(), HttpStatus.CONFLICT); 
} 

我已經寫了準備響應消息下,鑑於2種輔助方法: -

private JSONObject successResponse(String apiMessage) { 
    JSONObject success = new JSONObject(); 
    success.put("reponse", "success"); 
    success.put("message", apiMessage); 
    return success; 
} 

private JSONObject failureResponse(String apiMessage) { 
    JSONObject failure= new JSONObject(); 
    success.put("reponse", "failure"); 
    success.put("message", apiMessage); 
    return failure; 
} 

回答

0

添加下面的配置類

@Bean 
public LocaleResolver localeResolver() { 
SessionLocaleResolver slr = new SessionLocaleResolver(); 
slr.setDefaultLocale(Locale.US); // Set default Locale as US 
return slr; 
} 

@Bean 
public ResourceBundleMessageSource messageSource() { 
ResourceBundleMessageSource source = new ResourceBundleMessageSource(); 
source.setBasenames("i18n/messages"); // name of the resource bundle 
source.setUseCodeAsDefaultMessage(true); 
return source; 
} 

在資源目錄中創建一個名爲i18n的新目錄,並將其中的messages.properties和其他國際化屬性文件(如messages_ru.properties,messages_fr.properties等)放在其中。創建信息項和值象下面這樣:

messages.properties

msg.success=User Account Reset Successful 
msg.failure=Failed to Reset User Account 

現在要在控制器方法頭國際化的信息,即你​​的控制器,然後接受語言環境注入的MessageSource豆並從屬性文件中獲取消息,如下所示:

@Autowired 
private MessageSource messageSource; 

@CrossOrigin(methods = RequestMethod.POST) 
@PostMapping(value = "/user/resetUserAccount", produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody ResponseEntity<String> resetUserAccount(@RequestHeader("Accept-Language") Locale locale, @RequestBody InputObj inputObj) { 

    boolean isUserAccountReset = userService.resetUserAccount(inputObj); 

    if (isUserAccountReset) { 
     return new ResponseEntity<String>(successResponse(messageSource.getMessage("msg.success",null,locale)).toString(), HttpStatus.OK); 
    } 

    return new ResponseEntity<String>(failureResponse(messageSource.getMessage("msg.failure",null,locale)).toString(), HttpStatus.CONFLICT); 
}