2017-03-03 140 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); 
}