Cargar varios ficheros de recursos (bundles) sin necesidad de usar las llaves de los bundles
Artículo por Club Developers · 21 July 2006
2174 vistas
El principio consiste a fusiona los resources-bundles al momento de la carga.
Veamos la clase que se encarga de hacerlo (en este ejemplo se usa el API commons Logging):
Ahora tenemos que escribir una Factory para Struts:
Ahora sólo queda modificar el struts-config.xml:
Veamos la clase que se encarga de hacerlo (en este ejemplo se usa el API commons Logging):
java
package bla.bla.bla.struts; import java.io.InputStream; import java.util.Enumeration; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.util.MessageResourcesFactory; import org.apache.struts.util.PropertyMessageResources; public class MultiPropertyMessageResources extends PropertyMessageResources { protected static final Log log; { super(factory, config); log.info("Initializing, config='" + config + "'"); } public MultiPropertyMessageResources(MessageResourcesFactory factory, String config, boolean returnNull) { super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); } { label0: { if(log.isTraceEnabled()) log.trace("loadLocale(" + localeKey + ")"); synchronized(locales) { if(locales.get(localeKey) == null) break label0; } return; } locales.put(localeKey, localeKey); for(int i = 0; i < configFiles.length; i++) { if(localeKey.length() > 0) name = name + "_" + localeKey; name = name + ".properties"; try { if(log.isTraceEnabled()) log.trace(" Loading resource '" + name + "'"); if(classLoader == null) classLoader = getClass().getClassLoader(); is = classLoader.getResourceAsStream(name); if(is != null) { props.load(is); is.close(); } if(log.isTraceEnabled()) log.trace(" Loading resource completed"); } { log.error("loadLocale()", t); if(is != null) try { is.close(); } } if(props.size() < 1) return; synchronized(messages) { String key; for(Enumeration names = props.keys(); names.hasMoreElements(); messages.put(messageKey(localeKey, key), props.getProperty(key))) { if(log.isTraceEnabled()) log.trace(" Saving message key '" + messageKey(localeKey, key)); } } } return; } static { log = LogFactory.getLog(MultiPropertyMessageResources.class); } }
Ahora tenemos que escribir una Factory para Struts:
java
package bla.bla.bla.struts; import org.apache.struts.util.MessageResources; import org.apache.struts.util.PropertyMessageResourcesFactory; public class MultiPropertyMessageResourcesFactory extends PropertyMessageResourcesFactory { public MultiPropertyMessageResourcesFactory() { } { return new MultiPropertyMessageResources(this, config, returnNull); } }
Ahora sólo queda modificar el struts-config.xml:
xml
<message-resources parameter="fichero1,fichero2,fichero3" factory="bla.bla.bla.struts.MultiPropertyMessageResourcesFactory" />