Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring应用程序中对后端消息的国际化支持_Java_Spring_Internationalization - Fatal编程技术网

Java Spring应用程序中对后端消息的国际化支持

Java Spring应用程序中对后端消息的国际化支持,java,spring,internationalization,Java,Spring,Internationalization,我正在尝试在我的应用程序中实现国际化。我已经浏览了很多博客和教程,它们解释了如何使用不同的库来实现它 我计划使用的是I18N with spring 我的应用程序的结构如下所示:- 我的应用程序的前端(基于Angular2)使用从后端公开的Rest API。 我使用SpringREST实现RESTAPI。对于每个API调用,我都在准备并向UI发送适当的消息 现在默认消息是英文的,但现在我想为它添加国际化支持。我怎么做 下面是我正在公开的一个Rest API的示例以及我发送消息的方式:- @Cro

我正在尝试在我的应用程序中实现国际化。我已经浏览了很多博客和教程,它们解释了如何使用不同的库来实现它

我计划使用的是I18N with spring

我的应用程序的结构如下所示:-

我的应用程序的前端(基于Angular2)使用从后端公开的Rest API。 我使用SpringREST实现RESTAPI。对于每个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);
}
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;
}

将以下内容添加到配置类中

@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;
}
在resources目录中创建一个名为i18n的新目录,并将messages.properties和其他国际化属性文件(如messages_ru.properties、messages_fr.properties等)放入其中。创建消息键和值,如下所示:

@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);
}
消息.属性

msg.success=User Account Reset Successful
msg.failure=Failed to Reset User Account
现在,将MessageSource Bean插入到要国际化消息的位置,即控制器,然后在控制器方法中接受来自标头的区域设置,并从属性文件获取消息,如下所示:

@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);
}
@Autowired
私有消息源;
@交叉原点(methods=RequestMethod.POST)
@PostMapping(value=“/user/resetUserAccount”,products=MediaType.APPLICATION\u JSON\u value)
public@ResponseBody ResponseEntity resetUserAccount(@RequestHeader(“接受语言”)区域设置@RequestBody InputObj InputObj){
布尔值isUserAccountReset=userService.resetUserAccount(inputObj);
如果(isUserAccountReset){
返回新的ResponseEntity(successResponse(messageSource.getMessage(“msg.success”,null,locale)).toString(),HttpStatus.OK);
}
返回新的ResponseEntity(failureResponse(messageSource.getMessage(“msg.failure”,null,locale)).toString(),HttpStatus.CONFLICT);
}