2

我试图找到一种方法来根据请求上的 Accept-Language 标头来尊重响应的语言环境。我正在使用 Jersey 实现。这将适用于应用程序的 Restful 方面。我们已经为 WebApplication 端 (JSF) 提供了它,但 Jersey/JAXRS 不合作。

所以基本上说我需要返回一个错误响应,我想发回一个字符串,说英语语言环境的“问题”和西班牙语语言环境的“问题”。

到目前为止,我发现了这个类似的帖子,但没有给出具体的答案——实现在 JSF 和 JAX-RS 中工作的语言环境提供程序

感谢您的帮助

更新:

到目前为止,我可以通过这样做来获取语言环境:

@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以为您的语言环境获取 a 并返回:

@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", ...)所述,将尝试ResourceBundle使用当前类加载器获取 a 的位置。这意味着您可以在每个受支持的语言环境中拥有一个属性文件(如果您正在使用 JSF,那么您可能已经拥有它们......)任何您的类加载器可以找到它们并且资源包魔法将为您完成工作。

文件看起来像这样

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 回答