Если контейнер по каким-то причинам не может управлять локалями и пакетами, вам нужно будет управлять ими вручную.
Я предполагаю, что у вас есть файлы свойств в вашем 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