首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring应用程序中后端消息的国际化支持

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

Stack Overflow用户
提问于 2017-03-03 06:40:48
回答 1查看 2.7K关注 0票数 2

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

我计划使用的是I18N和spring。

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

我的应用程序的前端(基于的Angular2)使用从后端公开的Rest。我使用Spring来实现Rest。对于每个API调用,我都在准备&向UI发送适当的消息。

现在,默认情况下,消息是英文的,但现在我想向它添加国际化支持。我该怎么做呢?

下面是我公开的Rest的一个例子,以及我发送消息的方式:-

代码语言:javascript
复制
@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种帮助方法,它们准备了响应消息:-

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2017-03-03 08:05:02

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

代码语言:javascript
复制
@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

代码语言:javascript
复制
msg.success=User Account Reset Successful
msg.failure=Failed to Reset User Account

现在,在您想要国际化消息的地方注入MessageSource Bean,即您的控制器,然后在控制器方法中接受来自headers的区域设置,并从属性文件中获取消息,如下所示:

代码语言:javascript
复制
@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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42572295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档