Следуя другим темам здесь, в SO, я пришел к этому решению, которое также учитывает кодировку, используемую для файлов свойств (которая может быть проблематичной, так как ResourceBundle использует по умолчанию "ISO-8859-1"):
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.ResourceBundle;
public class MyResourceBundle {
// feature variables
private ResourceBundle bundle;
private String fileEncoding;
public MyResourceBundle(Locale locale, String fileEncoding){
this.bundle = ResourceBundle.getBundle("com.app.Bundle", locale);
this.fileEncoding = fileEncoding;
}
public MyResourceBundle(Locale locale){
this(locale, "UTF-8");
}
public String getString(String key){
String value = bundle.getString(key);
try {
return new String(value.getBytes("ISO-8859-1"), fileEncoding);
} catch (UnsupportedEncodingException e) {
return value;
}
}
}
Способ использования этого будет очень похож на обычное использование ResourceBundle:
private MyResourceBundle labels = new MyResourceBundle("es", "UTF-8");
String label = labels.getString(key)
Или вы можете использовать альтернативный конструктор, который по умолчанию использует UTF-8:
private MyResourceBundle labels = new MyResourceBundle("es");