code: public String keyWithParams(String keyName) {
  
          if (keyName.indexOf('|') == -1) {
              // no separator found, key has no parameters
              return key(keyName, false);
          } else {
              // this key contains parameters
              String[] values = CmsStringUtil.splitAsArray(keyName, '|');
              String cutKeyName = values[0];
              String[] params = new String[values.length - 1];
              System.arraycopy(values, 1, params, 0, params.length);
              return key(cutKeyName, params);
          }
      }
docs: Returns the localized resource string for a given message key,
  treating all values appended with "|" as replacement parameters.<p>
  
  If the key was found in the bundle, it will be formatted using
  a <code>{@link MessageFormat}</code> using the provided parameters.
  The parameters have to be appended to the key separated by a "|".
  For example, the keyName <code>error.message|First|Second</code>
  would use the key <code>error.message</code> with the parameters
  <code>First</code> and <code>Second</code>. This would be the same as calling
  <code>{@link CmsMessages#key(String, Object[])}</code>.<p>
  
  If no parameters are appended with "|", this is the same as calling
  <code>{@link CmsMessages#key(String)}</code>.<p>
  
  If the key was not found in the bundle, the return value is
  <code>"??? " + keyName + " ???"</code>. This will also be returned
  if the bundle was not properly initialized first.
  
  @param keyName the key for the desired string, optinally containing parameters appended with a "|"
  @return the resource string for the given key
  
  @see #key(String, Object[])
  @see #key(String)