public String translate(SingleLocalizableMessage msg, Locale locale) { String translated = translate(msg.getKey(), msg.getArgs(), locale); if (StringUtils.isNotEmpty(translated)) { return translated; } if (msg.getFallbackLocalizableMessage() != null) { translated = translate(msg.getFallbackLocalizableMessage(), locale); if (StringUtils.isNotEmpty(translated)) { return translated; } } return msg.getFallbackMessage(); }
@NotNull private static SingleLocalizableMessageType createLocalizableMessageType(@NotNull SingleLocalizableMessage message, Function<LocalizableMessage, String> resolveKeys) { SingleLocalizableMessageType rv = new SingleLocalizableMessageType(); rv.setKey(message.getKey()); if (message.getArgs() != null) { for (Object argument : message.getArgs()) { LocalizableMessageArgumentType messageArgument; if (argument instanceof LocalizableMessage) { messageArgument = new LocalizableMessageArgumentType() .localizable(createLocalizableMessageType(((LocalizableMessage) argument), resolveKeys)); } else { messageArgument = new LocalizableMessageArgumentType().value(argument != null ? argument.toString() : null); } rv.getArgument().add(messageArgument); } } if (message.getFallbackLocalizableMessage() != null) { rv.setFallbackLocalizableMessage(createLocalizableMessageType(message.getFallbackLocalizableMessage(), resolveKeys)); } if (StringUtils.isBlank(message.getFallbackMessage()) && resolveKeys != null) { rv.setFallbackMessage(resolveKeys.apply(message)); } else { rv.setFallbackMessage(message.getFallbackMessage()); } return rv; }