2

リクエストの Accept-Language ヘッダーに応じて、レスポンスのロケールを尊重する方法を見つけようとしています。ジャージーの実装を使用しています。これは、アプリケーションの Restful 側のためのものです。WebApplication 側 (JSF) については既にカバーしていますが、Jersey/JAXRS は連携していません。

基本的には、エラー応答を返す必要があると言います。英語のロケールでは「Problem」、スペイン語のロケールでは「Problema」という文字列を送り返したいと思います。

これまでのところ、この同様の投稿を見つけましたが、具体的な回答は得られませんでした - JSF および JAX-RS で動作する Locale プロバイダーの実装

あなたの助けに感謝します

アップデート:

これまでのところ、次のようにしてロケールを取得できます。

@Controller @Path("/test")
@Produces("plain/text")
public class TestRouteController implements Serializable{

@GET
@RestrictedRoute(permissions={SCConstant.PERMISSION_SEARCH_VIEW_CLIENT})
public Response testMethong(@Context HttpServletRequest request){
    String message = "Locale in request is " + request.getLocale(); 
    return ResponseGenerator.response(message);
}

}

次に、送り返す文字列メッセージのロケールを尊重したいと思います。これを見た場合:

  if(request.getLocale() == "sp-VE")
       message = "El locale en la requesta es " + request.getLocale();
  else if(request.getLocale() == "sp-MX")
       message = "La localizacion en la requesta es " + request.getLocale();

多くのことをローカライズしたいので、これはできません。

4

1 に答える 1

3

あなたが欠けているように見えるものはすべてResourceBundle. 私のリンクされた質問は、ユーザーがヘッダーとは異なるロケールを選択できるようにする場合にのみ興味深いものになりますAccept-Language(たとえば、JSF ウィジェットを介してロケールを選択し、結果をセッションに保存するなど)。

ただし、返されるものに問題がない場合は、ロケールの をrequest.getLocale()取得して、それを返すことができます。ResourceBundle

@Path("/test")
@Produces(MediaType.TEXT_PLAIN)
public class TestRouteController {

    @GET
    public Response testMethong(@Context HttpServletRequest request) {
        Locale requestLocale = request.getLocale();
        ResourceBundle l8n = ResourceBundle.getBundle("msgs", requestLocale);

        return Response.ok(l8n.getString("problem")).build();
    }
}

ドキュメントで説明されているように、現在のクラスローダーを使用してgetBundle("msgs", ...)を取得しようとする場所。これは、サポートされているロケールごとに 1 つのプロパティ ファイルを持つことができることを意味します (JSF を使用している場合は、既にプロパティ ファイルを持っている可能性があります)。ResourceBundle

ファイルは次のようになります

msgs_sp_VE.properties :

problem = El locale en la requesta es

msgs_sp_MX.properties :

problem = La localizacion en la requesta es
于 2014-04-23T15:02:42.463 に答える