Anonymous avatar Anonymous committed 8a0338b

got parameterized i18n working

git-svn-id: http://svn.opensymphony.com/svn/xwork/trunk@35 e221344d-f017-0410-9bd5-d282ab1896d7

Comments (0)

Files changed (4)

src/java/com/opensymphony/xwork/ActionSupport.java

 
 import java.io.Serializable;
 
-import java.util.Collection;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
+import java.util.*;
 
 
 /**
         return localeAware.getText(aTextName, defaultValue);
     }
 
+    public String getText(String aTextName, List args)
+    {
+        return localeAware.getText(aTextName, args);
+    }
+
     public ResourceBundle getTexts(String aBundleName) {
         return localeAware.getTexts(aBundleName);
     }

src/java/com/opensymphony/xwork/LocaleAware.java

 
 import java.util.Locale;
 import java.util.ResourceBundle;
+import java.util.List;
 
 
 /**
      */
     String getText(String aTextName, String defaultValue);
 
+    String getText(String aTextName, List args);
+
     /**
     * Get the named bundle.
     *

src/java/com/opensymphony/xwork/LocaleAwareSupport.java

 
 import java.util.Locale;
 import java.util.ResourceBundle;
+import java.util.List;
 
 
 /**
      * @return     value of named text
      */
     public String getText(String aTextName, String defaultValue) {
-        return LocalizedTextUtil.findText(clazz, aTextName, getLocale(), defaultValue);
+        return LocalizedTextUtil.findText(clazz, aTextName, getLocale(), defaultValue, new Object[0]);
+    }
+
+    public String getText(String aTextName, List args) {
+        return LocalizedTextUtil.findText(clazz, aTextName, getLocale(), aTextName, args.toArray(new Object[args.size()]));
     }
 
     /**

src/java/com/opensymphony/xwork/util/LocalizedTextUtil.java

     }
 
     /**
-     * Calls {@link #findText(Class aClass, String aTextName, Locale locale, String defaultMessage)} with
+     * Calls {@link #findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args)} with
      * aTextName as the default message.
-     * @see #findText(Class aClass, String aTextName, Locale locale, String defaultMessage)
+     * @see #findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args)
      */
     public static String findText(Class aClass, String aTextName, Locale locale) {
-        return findText(aClass, aTextName, locale, aTextName);
+        return findText(aClass, aTextName, locale, aTextName, new Object[0]);
     }
 
     /**
      * @param defaultMessage the message to be returned if no text message can be found in a resource bundle
      * @return
      */
-    public static String findText(Class aClass, String aTextName, Locale locale, String defaultMessage) {
+    public static String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args) {
         OgnlValueStack valueStack = ActionContext.getContext().getValueStack();
         do {
             try {
                 ResourceBundle bundle = findResourceBundle(aClass.getName(), locale);
 
-                return TextParseUtil.translateVariables(bundle.getString(aTextName), valueStack);
+
+                String message = TextParseUtil.translateVariables(bundle.getString(aTextName), valueStack);
+                return MessageFormat.format(message, args);
             } catch (MissingResourceException ex) {
                 aClass = aClass.getSuperclass();
             }
         } while (!aClass.equals(Object.class));
 
         try {
-            return TextParseUtil.translateVariables(findDefaultText(aTextName, locale), valueStack);
+            String message = TextParseUtil.translateVariables(findDefaultText(aTextName, locale), valueStack);
+            return MessageFormat.format(message, args);
         } catch (MissingResourceException ex) {
             //ignore
         }
 
         LOG.debug("Unable to find text for key " + aTextName);
 
-        return TextParseUtil.translateVariables(defaultMessage, valueStack);
+        return MessageFormat.format(TextParseUtil.translateVariables(defaultMessage, valueStack), args);
     }
 }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.