@Override public String translate(String key, Object[] params, Locale locale) { return translate(key, params, locale, null); }
private Object[] translateParams(Object[] params, Locale locale) { if (params == null) { return null; } Object[] translated = new Object[params.length]; for (int i = 0; i < params.length; i++) { Object param = params[i]; if (param instanceof Object[]) { param = translateParams((Object[]) param, locale); } else if (param instanceof LocalizableMessage) { LocalizableMessage msg = (LocalizableMessage) param; param = translate(msg, locale); } translated[i] = param; } return translated; }
public String translate(LocalizableMessageList msgList, Locale locale) { String separator = translateIfPresent(msgList.getSeparator(), locale); String prefix = translateIfPresent(msgList.getPrefix(), locale); String suffix = translateIfPresent(msgList.getPostfix(), locale); return msgList.getMessages().stream() .map(m -> translate(m, locale)) .collect(Collectors.joining(separator, prefix, suffix)); }
private String translateIfPresent(LocalizableMessage msg, Locale locale) { return msg != null ? translate(msg, locale) : ""; }
@Override public String translate(LocalizableMessage msg, Locale locale) { if (msg == null) { return null; } else if (msg instanceof SingleLocalizableMessage) { return translate((SingleLocalizableMessage) msg, locale); } else if (msg instanceof LocalizableMessageList) { return translate((LocalizableMessageList) msg, locale); } else { throw new AssertionError("Unsupported localizable message type: " + msg); } }
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(); }
@Test public void localizationParams2() throws Exception { Object[] params = new Object[2]; params[0] = "John"; params[1] = "Couldn't find user with name 'John'"; String real = service.translate("UserProfileServiceImpl.unknownUser", params, new Locale("sk")); String expected = "Couldn't find user with name '" + params[0] + "', reason: " + params[1] + "."; AssertJUnit.assertEquals(expected, real); }
@Override public <T extends CommonException> T translate(T e) { if (e == null) { return null; } if (e.getUserFriendlyMessage() == null) { return e; } if (e.getTechnicalMessage() == null) { e.setTechnicalMessage(translate(e.getUserFriendlyMessage(), Locale.US)); } if (e.getLocalizedUserFriendlyMessage() == null) { e.setLocalizedUserFriendlyMessage(translate(e.getUserFriendlyMessage(), Locale.getDefault())); } return e; } }
@Test public void localizationParams() throws Exception { Object[] params = new Object[3]; params[0] = 123; params[1] = new LocalizableMessageBuilder().key("someunknownkey").fallbackMessage("fallback").build(); params[2] = "Joe"; String real = service.translate("joekey", params, new Locale("sk")); String expected = "User Joe with id 123 tried to translate fallback"; AssertJUnit.assertEquals(expected, real); }