X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2FL10nFilter.java;h=d667811d558b02cdc083515d9122920fabf4c80a;hp=910e0d6a0e39b9dddd80ff1ab2c8639d6e96754f;hb=b4d2d68b5ea4f4edc7337f380cfe078756678126;hpb=080f32eaacd0b50837d9ed9e0328e725bcd71151 diff --git a/src/main/java/net/pterodactylus/sone/freenet/L10nFilter.java b/src/main/java/net/pterodactylus/sone/freenet/L10nFilter.java index 910e0d6..d667811 100644 --- a/src/main/java/net/pterodactylus/sone/freenet/L10nFilter.java +++ b/src/main/java/net/pterodactylus/sone/freenet/L10nFilter.java @@ -1,5 +1,5 @@ /* - * Sone - L10nFilter.java - Copyright © 2010 David Roden + * Sone - L10nFilter.java - Copyright © 2010–2019 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,27 +23,21 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import javax.annotation.Nonnull; + import net.pterodactylus.util.template.Filter; import net.pterodactylus.util.template.TemplateContext; + import freenet.l10n.BaseL10n; /** * {@link Filter} implementation replaces {@link String} values with their * translated equivalents. - * - * @author David ‘Bombe’ Roden */ public class L10nFilter implements Filter { - /** The l10n handler. */ private final BaseL10n l10n; - /** - * Creates a new L10n filter. - * - * @param l10n - * The l10n handler - */ public L10nFilter(BaseL10n l10n) { this.l10n = l10n; } @@ -52,22 +46,33 @@ public class L10nFilter implements Filter { * {@inheritDoc} */ @Override - public String format(TemplateContext templateContext, Object data, Map parameters) { - if (parameters.isEmpty()) { - return l10n.getString(String.valueOf(data)); + public String format(TemplateContext templateContext, Object data, Map parameters) { + List parameterValues = getParameters(data, parameters); + String text = getText(data); + if (parameterValues.isEmpty()) { + return l10n.getString(text); } - List parameterValues = new ArrayList(); + return new MessageFormat(l10n.getString(text), new Locale(l10n.getSelectedLanguage().shortCode)).format(parameterValues.toArray()); + } + + @Nonnull + private String getText(Object data) { + return (data instanceof L10nText) ? ((L10nText) data).getText() : String.valueOf(data); + } + + @Nonnull + private List getParameters(Object data, Map parameters) { + if (data instanceof L10nText) { + return ((L10nText) data).getParameters(); + } + List parameterValues = new ArrayList<>(); int parameterIndex = 0; while (parameters.containsKey(String.valueOf(parameterIndex))) { Object value = parameters.get(String.valueOf(parameterIndex)); - if (((String) value).startsWith("=")) { - value = ((String) value).substring(1); - } else { - value = templateContext.get((String) value); - } parameterValues.add(value); ++parameterIndex; } - return new MessageFormat(l10n.getString(String.valueOf(data)), new Locale(l10n.getSelectedLanguage().shortCode)).format(parameterValues.toArray()); + return parameterValues; } + }