Как проверить локаль против message.properties - PullRequest
0 голосов
/ 15 февраля 2012

Я использую hibernate и RestEasy API для создания сервера.у меня есть 3 файла свойств message.properties a, mesage_en-GB.properties and message_en.propperties файлы.Когда я получаю запрос от клиента, он имеет локаль в параметре заголовка.Мне нужно проверить эту локаль по моему файлу свойств, т. Е. Если он en-GB, чем использовать mesage_en-GB.properties, если не дано, чем использовать message.properties, и, если неправильно, ввести, чем выдавать сообщение об ошибке.но я не понимаю, как сравнить эти значения.пожалуйста, предложите.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Если контейнер по каким-то причинам не может управлять локалями и пакетами, вам нужно будет управлять ими вручную.

Я предполагаю, что у вас есть файлы свойств в вашем classpath.

Прежде всего вам нужно создать локаль, которую вы собираетесь использовать. Например, вы получаете язык из HTTP-заголовка как String fr, передаете его в Locale.forLanguageTag (String) метод в Java7 или используете Locale (String) конструктор в Java6 и получаете Локаль объекта:

Locale locale = Locale.forLanguageTag(stringFromHeader) // since Java 7
Locale locale = new Locale(stringFromHeader) // prior to Java 7

Затем вы передаете эту локаль методу ResourceBundle.getBundle , чтобы получить правильный пакет:

ResourceBundle messages = ResourceBundle.getBundle("messages", locale);

Затем вы вызываете метод ResourceBundle getString (key: String) , чтобы получить локализованную строку:

messages.getString("my_message")

Чтобы убедиться, что этот метод работает на 100%, вы можете выполнить следующие простые шаги:

1) Создать папку tmp где-то

2) В этой папке создайте файл A.java со следующим содержимым:

import java.util.*;

public class A {

public static void main(String[] args) throws Exception {
  Locale locale = new Locale("en");
  ResourceBundle messages = ResourceBundle.getBundle("messages", locale);
  System.out.println(messages.getString("my_message"));
  locale = new Locale("fr");
  messages = ResourceBundle.getBundle("messages", locale);
  System.out.println(messages.getString("my_message"));
}   
}

3) Создать файл messages.properties со следующим содержимым:

my_message=hello

4) Создать файл messages_fr.properties со следующим содержимым:

my_message=salut

5) Перейдите в папку tmp и выполните две команды:

javac A.java
java -cp . A

Вывод:

hello
salut

Я надеюсь, что это работает для вас!

PS: Здесь есть отличная прогулка: http://docs.oracle.com/javase/tutorial/i18n/resbundle/propfile.html

0 голосов
/ 15 февраля 2012

Вам необходимо зарегистрировать LocaleChangeInterceptor в конфигурации Spring и использовать тег <spring:message> для вывода сообщений.

Вот отличное пошаговое руководство: http://viralpatel.net/blogs/2010/07/spring-3-mvc-internationalization-i18n-localization-tutorial-example.html

PS Этот механизм можно изменитьот сервера к серверу, в некоторых случаях использование <fmt:message> может быть лучшей альтернативой.

...