У меня есть такое перечисление
public enum CheckboxFeature {
Option1(" choose this"),
Option2(" or this"),
Option3(" maybe this"),
Option4(" lastly this");
@Getter
private final String text;
public static CheckboxFeature fromName(String v) {
for (CheckboxFeature c: CheckboxFeature.values()) {
if (c.name().equalsIgnoreCase(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
Это показывает четыре варианта в виде флажков в веб-представлении.
<form:checkboxes items = "${features}" path = "enabledFeatures" itemLabel = "text" delimiter = "<br/>"/>
Как я могу перевести эти варианты? Я использую fmt: message для остальных переводов в веб-представлении.
я пытался
Option1(" <fmt:message key=\"text.test\"/>"),
а также
Option1(" ${option1}"),
с участием
<fmt:message key = "text.select" var = "option1"/>
в .jsp. Ни один из них не работает, так что, похоже, так работать не может. Как правильно переводить строки? В идеале использовать ресурсы fmt: message и i18n (файлы lang.properties), которые существуют и работают над остальной частью сервлета?




1, CheckboxFeature добавить метод, например:
public static List<String> getAllCheckboxFeature(String v) {
return Arrays.asList(Option1.getText(),...Option4.getText());
}
2, чем использовать jstl, например:
<c:forEach items = "${options}" var = "option">
<input type = "checkbox" = "${option}">
</c:forEach>
Оптимально, вы получаете ключ ресурса из перечисления и ищите его.
public enum CheckboxFeature {
Option1("label.option1.key"),
Option2("label.option2.key"),
Option1("label.option3.key"),
Option2("label.option4.key");
private final String key;
[...]
Я не знаю, как вложить поиск l10n в атрибут itemLabel, поэтому я бы написал что-то вроде:
<c:forEach items = "Options.values()" var = "current">
<form:checkbox path = "selectedOptions" value = "${current.name()}"/> <fmt:message key = "${current.getKey()}"/>
</c:forEach>