Example #1
0
 private String getDefaultMessage(Localizable l) {
   String key = l.getKey();
   Object[] args = l.getArguments();
   StringBuilder sb = new StringBuilder();
   sb.append("[failed to localize] ");
   sb.append(key);
   if (args != null) {
     sb.append('(');
     for (int i = 0; i < args.length; ++i) {
       if (i != 0) {
         sb.append(", ");
       }
       sb.append(String.valueOf(args[i]));
     }
     sb.append(')');
   }
   return sb.toString();
 }
Example #2
0
  public String localize(Localizable l) {
    String key = l.getKey();
    if (Localizable.NOT_LOCALIZABLE.equals(key)) {
      // this message is not localizable
      return (String) l.getArguments()[0];
    }
    String bundlename = l.getResourceBundleName();

    try {
      ResourceBundle bundle = _resourceBundles.get(bundlename);

      if (bundle == null) {
        try {
          bundle = ResourceBundle.getBundle(bundlename, _locale);
        } catch (MissingResourceException e) {
          // work around a bug in the com.sun.enterprise.deployment.WebBundleArchivist:
          //   all files with an extension different from .class (hence all the .properties files)
          //   get copied to the top level directory instead of being in the package where they
          //   are defined
          // so, since we can't find the bundle under its proper name, we look for it under
          //   the top-level package

          int i = bundlename.lastIndexOf('.');
          if (i != -1) {
            String alternateBundleName = bundlename.substring(i + 1);
            try {
              bundle = ResourceBundle.getBundle(alternateBundleName, _locale);
            } catch (MissingResourceException e2) {
              // try OSGi
              OsgiRegistry osgiRegistry = ReflectionHelper.getOsgiRegistryInstance();
              if (osgiRegistry != null) {
                bundle = osgiRegistry.getResourceBundle(bundlename);
              } else {
                return getDefaultMessage(l);
              }
            }
          }
        }

        _resourceBundles.put(bundlename, bundle);
      }

      if (bundle == null) {
        return getDefaultMessage(l);
      }

      if (key == null) {
        key = "undefined";
      }

      String msg;
      try {
        msg = bundle.getString(key);
      } catch (MissingResourceException e) {
        // notice that this may throw a MissingResourceException of its own (caught below)
        msg = bundle.getString("undefined");
      }

      // localize all arguments to the given localizable object
      Object[] args = l.getArguments();
      for (int i = 0; i < args.length; ++i) {
        if (args[i] instanceof Localizable) {
          args[i] = localize((Localizable) args[i]);
        }
      }

      String message = MessageFormat.format(msg, args);
      return message;

    } catch (MissingResourceException e) {
      return getDefaultMessage(l);
    }
  }