2013-11-28 2 views
1

Im пытается найти способ почтить локаль для ответа в зависимости от заголовка Accept-Language в запросе. Я использую реализацию Джерси. Это будет для Restful стороны приложения. Мы уже его охватили для WebApplication стороны (JSF), но Джерси/JAXRS не сотрудничает.Почитайте язык, запрошенный в HTTP-запросе, используя JAX RS

Так что в основном говорят, что мне нужно вернуть ответ об ошибке, я бы хотел отправить строку обратно с сообщением «Проблема» для английского языка и «Проблема» для испанского языка.

До сих пор я нашел подобный пост, но никакого конкретного ответа не дали - Implementing a Locale provider that works in JSF and 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); 
} 

}

Тогда я хотел бы почтить языковой стандарт сообщения String, что я отправлю обратно. Если увидели это:

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(); 

Я не могу это сделать, потому что я хочу быть локализуются много вещей.

+0

Показать ваши усилия пытались. – Masudul

+0

Почему «sp» вместо стандартного «es»? – AdrianRM

ответ

2

Все, что вам кажется, отсутствует 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", ...) попытается принести ResourceBundle, используя текущий загрузчик классов, как documentation объясняет. Это означает, что у вас может быть один файл свойств на поддерживаемый локаль (если вы используете вероятность JSF, вы уже имеете их ...), где ваш загрузчик классов может их найти, а магия ресурсного пакета сделает вашу работу.

Файлы будут выглядеть так

msgs_sp_VE.properties:

problem = El locale en la requesta es 

msgs_sp_MX.properties:

problem = La localizacion en la requesta es