Я предполагаю, что этот вопрос касается автономного приложения (командная строка, SWING и т. Д.), А не о серверном приложении (с одновременным доступом нескольких пользователей).
ВСамым простым приложением является создание одного статического класса доступа , который будет отвечать за загрузку одиночного пакета ресурсов и последующий поиск строк в этом пакете ресурсов.
Примерно так:
public class ResourceUtil {
private static ResourceBundle rb;
static {
//set the default locale
setLocale(Locale.ENGLISH);
}
public static void setLocale(Locale locale) {
rb = ResourceBundle.getBundle("Resources", locale);
}
public static String tr(String key, Object... args) {
return MessageFormat.format(rb.getString(key), args);
}
}
Вы можете изменить активную локаль с помощью метода setLocale(Locale)
и получить доступ к переведенным строкам с помощью метода tr(String,Object...)
.
Затем вы можете вызвать его изВаш класс выглядит так:
import static ResourceUtil.tr;
public String howBigIsTheFile(File f) {
String name = f.getAbsolutePath();
long length = f.length();
return tr("The file %s is %d bytes long", name, length);
}
Обратите внимание на статический импорт.
Отказ от ответственности : весь предоставленный код находится на уровне псевдокода и не гарантирует компиляцию.
В зависимости от размера вашего приложения может оказаться полезным использовать Поддержка экстернализации строк IDE (например, см. Главу в Справка Eclipse JDT , я уверен, что другиеIDE хаМы также можем использовать несколько комплектов ресурсов и / или несколько статических классов - это зависит от размера вашего приложения и ваших личных предпочтений.См. этот вопрос для дальнейшего обсуждения этого вопроса.
В серверной среде, использующей статический подход, подобный описанному выше, могут возникнуть проблемы, поскольку разные пользователи будут иметь разные локали.В зависимости от среды вашего веб-приложения вы решите эту проблему по-разному (например, используйте MessageSource в Spring ).