我正在尝试在我的应用程序中实现国际化。我已经浏览了很多博客和教程解释了我们如何使用不同的库实现它。
我打算用的是带弹簧的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 :(得分:1)
将以下内容添加到配置类
@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 Bean注入国际化消息的位置,即控制器,然后从控制器方法的头文件中接受Locale,并从以下属性文件中获取消息:
@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);
}