Always get the current l10n helper from the node, don’t reuse an old one.
[Sone.git] / src / main / java / net / pterodactylus / sone / freenet / L10nFilter.java
index ef1a183..16dc9fb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * FreenetSone - L10nFilter.java - Copyright © 2010 David Roden
+ * Sone - L10nFilter.java - Copyright © 2010 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
 
 package net.pterodactylus.sone.freenet;
 
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
+import net.pterodactylus.sone.web.WebInterface;
 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
@@ -31,17 +35,17 @@ import freenet.l10n.BaseL10n;
  */
 public class L10nFilter implements Filter {
 
-       /** The l10n handler. */
-       private final BaseL10n l10n;
+       /** The web interface. */
+       private final WebInterface webInterface;
 
        /**
         * Creates a new L10n filter.
         *
-        * @param l10n
-        *            The l10n handler
+        * @param webInterface
+        *            The Sone web interface
         */
-       public L10nFilter(BaseL10n l10n) {
-               this.l10n = l10n;
+       public L10nFilter(WebInterface webInterface) {
+               this.webInterface = webInterface;
        }
 
        /**
@@ -49,7 +53,21 @@ public class L10nFilter implements Filter {
         */
        @Override
        public String format(TemplateContext templateContext, Object data, Map<String, String> parameters) {
-               return l10n.getString(String.valueOf(data));
+               if (parameters.isEmpty()) {
+                       return webInterface.getL10n().getString(String.valueOf(data));
+               }
+               List<Object> parameterValues = new ArrayList<Object>();
+               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(webInterface.getL10n().getString(String.valueOf(data)), new Locale(webInterface.getL10n().getSelectedLanguage().shortCode)).format(parameterValues.toArray());
        }
-
 }