azerphoenix
@azerphoenix
Java Software Engineer

Как динамически получать перевод из properties для Enum и вставлять в нужный документ?

Здравствуйте!
Пишу небольшое веб-приложение. Необходимо данные из DTO добавить в docx используя docx-stamper (docx4j).
Для enum в messages.properties храню переводы. Если напрямую вставлять значения из DTO, то добавляется именно enum. а не его перевод. Отсюда вопрос - Как динамически получать перевод из properties для Enum и вставлять в нужный документ?

// Сформировать docx из DTO
    public void createDocXFromDTO(DischargeDTO dischargeDTO) throws Exception {
        InputStream template = new FileInputStream("discharge.docx");
        OutputStream out = new FileOutputStream("newDischarge.docx");
        DocxStamper stamper = new DocxStamperConfiguration()
                .build();
        stamper.stamp(template, dischargeDTO, out);
        out.close();
}


Сам DTO, в котором содержится Enum
@Setter  @Getter
public class DischargeDTO {
    private Long dischargeId;
    private LocalDate dob;
    private Sex sex;
}


Ну и содержимое messages.properties, где хранятся переводы значений enum
# Enum Sex
info.test.models.enums.Sex.MAN = мужчина
info.test.models.enums.Sex.WOMAN = женщина


Мне нужно, чтобы вместо самих значений enum (MAN, WOMAN) вставлялись их переводы (Мужчина, Женщина).
Я так понимаю, что в DTO мне нужно это формировать... но вот как...
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Автор вопроса, куратор тега Java
Java Software Engineer
Нашел решение на гитхаб.
Ниже предоставляю исходный код:

@Component
public class Messages {

    @Autowired
    private MessageSource messageSource;

    private MessageSourceAccessor accessor;

    @PostConstruct
    private void init() {
        accessor = new MessageSourceAccessor(messageSource, LocaleContextHolder.getLocale());
    }
    public String get(String code) {
        return accessor.getMessage(code);
    }
}


При надобности просто используете
@Autowired
private Messages messages;

(лучше конечно использовать конструктор)

Ну и
messages.get("info.md7.urodocs.models.enums.Sex.MAN")

Были причины, почему я не использовал @Value или @ConfigurationProperties в данном случае.

Ну и соответственно, содержимое messages.properties
info.test.models.enums.Sex.MAN = мужчина
info.test.models.enums.Sex.WOMAN = женщина
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы