2017-03-03 16 views
0

私は自分のアプリケーションで国際化を実装しようとしています。私はすでに多くのブログ&のチュートリアルを見てきましたが、これはさまざまなライブラリを使って実装する方法を説明しています。国際化Springアプリケーションのバックエンドメッセージのサポート

私が使用する予定のものは、春のI18Nです。

私のアプリケーションの構造は、このようなものである: -

私のアプリケーションのフロントエンド(Angular2に基づく)は、バックエンドから露出しているレストのAPIを消費します。 私は、Rest APIを実装するためにSpring Restを使用しています。すべての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; 
} 

を次の行を追加します。 resourcesディレクトリ内に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); 
}