Hi All, Hope all is well.
Attached is a patch to the I18nTransformer to support transform time configuration changes. The parameters given at definition time can now also be overridden as map:parameter's to change the defaults specified at definition time (all except the cache-at-startup option). eg. <map:transformer name="i18n" src="org.apache.cocoon.transformation.I18nTransformer"> <catalogue-name>messages</catalogue-name> <catalogue-location>translations</catalogue-location> </map:transformer> ... ... ... <map:transform type="i18n"> <map:parameter name="catalogue-name" value="msg"/> </map:transform> Hope it's all ok. Hope everyone has a great weekend. Cheers, Marcus -- ..... ,,$$$$$$$$$, Marcus Crafter ;$' '$$$$: Computer Systems Engineer $: $$$$: ManageSoft GmbH $ o_)$$$: 82-84 Mainzer Landstrasse ;$, _/\ &&:' 60327 Frankfurt Germany ' /( &&& \_&&&&' Email : [EMAIL PROTECTED] &&&&. Business Hours : +49 69 9757 200 &&&&&&&:
Index: src/org/apache/cocoon/transformation/I18nTransformer.java =================================================================== RCS file: /home/cvspublic/xml-cocoon2/src/org/apache/cocoon/transformation/I18nTransformer.java,v retrieving revision 1.8.2.13 diff -u -r1.8.2.13 I18nTransformer.java --- src/org/apache/cocoon/transformation/I18nTransformer.java 2001/10/26 15:32:52 1.8.2.13 +++ src/org/apache/cocoon/transformation/I18nTransformer.java 2001/12/07 17:56:08 @@ -17,6 +17,7 @@ import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.DefaultConfiguration; import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.excalibur.pool.Recyclable; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.ResourceNotFoundException; import org.apache.cocoon.acting.LocaleAction; @@ -150,6 +151,11 @@ * </pre> * * <p/> + * + * Note, <strong>catalogue-name</strong>, <strong>catalogue-location</strong> + * and <strong>untranslated-text</strong> can all be overridden at the + * pipeline level by specifying them as parameters to the transform statement. + * * <ul> * <li><strong><i18n:date/></strong> gives now only the date.</li> * <li><strong><i18n:date-time/></strong> gives the date and time.</li> @@ -173,17 +179,16 @@ * Future work coming: * * <ul> - * <li>Ability to override definition parameters in the pipeline * <li>Many clean ups :-) * </ul> * - * @author <a href="mailto:[EMAIL PROTECTED]">Marcus Crafter</a> + * @author <a href="mailto:[EMAIL PROTECTED]">Marcus Crafter</a> * @author <a href="mailto:[EMAIL PROTECTED]">Konstantin Piroumian</a> * @author <a href="mailto:[EMAIL PROTECTED]">Lassi Immonen</a> * @author <a href="mailto:[EMAIL PROTECTED]">Michael Enke</a> */ public class I18nTransformer extends AbstractTransformer - implements Composable, Poolable, Configurable { + implements Composable, Poolable, Configurable, Recyclable { private static final String FILE = "file:"; @@ -339,6 +344,7 @@ private String catalogueName; private String catalogueLocation; private String untranslated; + private String globalUntranslated; private boolean cacheAtStartup; /** @@ -394,11 +400,35 @@ try { + // check parameters to see if anything has been locally overloaded + String localCatLocation = null; + String localCatName = null; + String localUntranslated = null; + + if ( parameters != null ) { + localCatLocation = + parameters.getParameter( I18N_CATALOGUE_LOCATION, null ); + localCatName = + parameters.getParameter( I18N_CATALOGUE_NAME, null ); + localUntranslated = + parameters.getParameter( I18N_UNTRANSLATED, null ); + } + + // if untranslated-text has been overridden, save the original + // value so it can be restored when this object is recycled. + if ( localUntranslated != null ) { + globalUntranslated = untranslated; + untranslated = localUntranslated; + } + // Set current language and locale String lc = LocaleAction.getLocale( objectModel ); // configure the factory - _setup( resolver ); + _setup( resolver, + localCatLocation == null + ? catalogueLocation : localCatLocation + ); // setup everything for the current locale String[] matches = new RE( "_" ).split( lc ); @@ -412,7 +442,10 @@ debug( "using locale " + locale.toString() ); dictionary = - (XMLResourceBundle) factory.select( catalogueName, locale ); + (XMLResourceBundle) factory.select( + localCatName == null ? catalogueName : localCatName, + locale + ); debug( "selected dictionary " + dictionary ); @@ -430,7 +463,8 @@ * REVISIT: when we can get the resolver anywhere, we can pass the * configuration object directly to XMLResourceBundle. */ - private void _setup( SourceResolver resolver ) throws Exception { + private void _setup( SourceResolver resolver, String location ) + throws Exception { // configure the factory to log correctly and cache catalogues DefaultConfiguration configuration = @@ -450,8 +484,8 @@ "location" ); - debug( "catalog location:" + catalogueLocation ); - Source source = resolver.resolve( catalogueLocation ); + debug( "catalog location:" + location ); + Source source = resolver.resolve( location ); String systemId = source.getSystemId(); if ( !systemId.startsWith( FILE ) ) { throw new ResourceNotFoundException( systemId + " does not denote a directory" ); @@ -1155,4 +1189,14 @@ } */ + public void recycle() { + + // restore untranslated-text if necessary + if ( globalUntranslated != null && + !untranslated.equals( globalUntranslated ) + ) { + untranslated = globalUntranslated; + debug( "untranslated-text restored to " + untranslated ); + } + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]