Geert,

Herewith a new proposition with:
- Spring as IoC container
- interface List<Locale> getLocales(ElementSupport)

Regards

Pierre

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd";>

<beans>

<bean id="UserLocaleProvider"
      class="com.uwyn.rife.i18n.UserLocaleProvider"
      lazy-init="true"
      />

<bean id="RequestLocaleProvider"
      class="com.uwyn.rife.i18n.RequestLocaleProvider"
      lazy-init="true"
      />

<bean id="BaseLocaleProvider"
      class="com.uwyn.rife.i18n.BaseLocaleProvider"
      lazy-init="true"
      />

<bean id="LocaleProviderFactory"
      class="com.uwyn.rife.i18n.DefaultLocaleProviderFactory"
      >
      <property name="defaultProvider"><ref local="UserLocaleProvider"/></property>
</bean>
      
</beans>

package com.uwyn.rife.i18n;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import com.uwyn.rife.config.RifeConfig;
import com.uwyn.rife.engine.ElementSupport;

public abstract class AbstractLocaleProvider implements LocaleProvider
{
        public final static String PROP_L10N_DEFAULT_LANGUAGE  = 
RifeConfig.Tools.PARAM_L10N_DEFAULT_LANGUAGE;
        public final static String PROP_L10N_DEFAULT_COUNTRY   = 
RifeConfig.Tools.PARAM_L10N_DEFAULT_COUNTRY;
        
        protected final static String EMPTY_STRING = ""; //$NON-NLS-1$
        
        AbstractLocaleProvider () {
        }

    public List<Locale> getLocales(ElementSupport element) {
        if (element == null) {
                return null;
        }
        return addLocales(new ArrayList<Locale>(), element);
    }
    
    protected void addAllNotNullLocales(List<Locale> locales, List<Locale> 
more) {
        if (more != null) {
                for(Locale locale : more) {
                        if (locale != null) {
                        locales.add(locale);
                        }
                }
        }
    }

    protected void addNotNullLocale(List<Locale> locales, Locale more) {
        if (more != null) {
                locales.add(more);
        }
    }

    /*
     * Used to specify the locales in reverse order of priority
     */
    protected abstract List<Locale> addLocales(List<Locale> locales, 
ElementSupport element);
    
    protected abstract Locale getDefaultLocale(ElementSupport element);
        
}

/*
 * This locale provider has a behavior similar to the old one of Rife,
 * i.e. with only default value. But this one can be changed by any
 * element.
 * 
 */

package com.uwyn.rife.i18n;

import java.util.List;
import java.util.Locale;

import com.uwyn.rife.engine.ElementSupport;
import com.uwyn.rife.engine.exceptions.EngineException;

public class BaseLocaleProvider extends AbstractLocaleProvider
{

        protected List<Locale> addLocales(List<Locale> locales, ElementSupport 
element){
        locales.add(getDefaultLocale(element));  // null: "en" as last default
        return locales;
    }
    
    protected Locale getDefaultLocale(ElementSupport element) {
                try {
                        String language = 
element.getPropertyString(PROP_L10N_DEFAULT_LANGUAGE);
                if (language != null) {
                        return new Locale( language
                                             , 
element.getPropertyString(PROP_L10N_DEFAULT_COUNTRY, EMPTY_STRING)
                                 );
                        }
                } catch (EngineException ee) {
                } 
                return null;
    }

}

package com.uwyn.rife.i18n;

import com.uwyn.rife.engine.ElementSupport;

public final class DefaultLocaleProviderFactory implements LocaleProviderFactory
{
        public static final String  PROP_L10N_LOCALE_PROVIDER = 
"L10N_LOCALE_PROVIDER";  //$NON-NLS-1$
        
        private static final String DEFAULT_LOCALE_PROVIDER   = 
"BaseLocaleProvider";    //$NON-NLS-1$

        private LocaleProvider defaultProvider = null;

        protected DefaultLocaleProviderFactory() {
        }
        
        public void setDefaultProvider(LocaleProvider provider) {
                this.defaultProvider = provider;
        }

        public LocaleProvider getDefaultProvider() {
                return this.defaultProvider;
        }
        
        public LocaleProvider getInstance(ElementSupport element)
    {
                LocaleProvider provider = null;
                if (element.hasProperty(PROP_L10N_LOCALE_PROVIDER))
                {
                        String locale_provider_type = null;
                        locale_provider_type = 
element.getPropertyString(PROP_L10N_LOCALE_PROVIDER);

                        if ((locale_provider_type != null) && 
(locale_provider_type.length() > 0))
                        {
                                provider = 
Locales.getProvider(locale_provider_type);
                                if (provider != null) {
                                        return provider;
                                }
                                provider = getInstance(locale_provider_type);
                                if (provider != null) {
                                        return provider;
                                }
                        }
                }
                if (getDefaultProvider() != null) {  // Default from context, 
if available
                        return getDefaultProvider();
                }
                provider = Locales.getProvider(DEFAULT_LOCALE_PROVIDER);
                if (provider != null) {
                        return provider;
                }
                provider = getInstance(DEFAULT_LOCALE_PROVIDER);
                if (provider != null) {
                        return provider;
                }
                return null;
        }
        
        private LocaleProvider getInstance(String className) {
                if ((className != null) && (className.length() > 0))
                {
                        Class provider_classname = null;
                        try
                        {
                                provider_classname = Class.forName(className);
                        }
                        catch (ClassNotFoundException e1)
                        {
                        }
                        
                        if (provider_classname != null) {
                                try
                                {
                                        return (LocaleProvider) 
provider_classname.newInstance();
                                } 
                                catch (IllegalAccessException ce) 
                                {
                                } 
                            catch (InstantiationException ie) 
                            {
                                }
                        }
                }
                return null;
        }
}
/*
 * This locale provider has a behavior like the old one of Rife,
 * i.e. with only default values.
 * 
 */

package com.uwyn.rife.i18n;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import com.uwyn.rife.engine.ElementSupport;

public class EmptyLocaleProvider implements LocaleProvider
{

    public List<Locale> getLocales(ElementSupport element) {
        List<Locale> locales = new ArrayList<Locale>(1);
        locales.add(null);
        return locales;
    }
}

package com.uwyn.rife.i18n;

import com.uwyn.rife.engine.ElementSupport;

public class EmptyLocaleProviderFactory implements LocaleProviderFactory
{
        public LocaleProvider getInstance(ElementSupport element) {return new 
EmptyLocaleProvider();}
}
package com.uwyn.rife.i18n;

import java.util.List;
import java.util.Locale;

import com.uwyn.rife.engine.ElementSupport;

public interface LocaleProvider
{
    public List<Locale> getLocales(ElementSupport element);
}
package com.uwyn.rife.i18n;

import com.uwyn.rife.engine.ElementSupport;

public interface LocaleProviderFactory
{
        public LocaleProvider getInstance(ElementSupport element);
}
/*
 * This class hides the link between Spring beans and Rife i18n, i.e.
 * Spring classes are referenced only here
 * 
 */
package com.uwyn.rife.i18n;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;

import com.uwyn.rife.rep.Participant;
import com.uwyn.rife.rep.Rep;

public class Locales
{
        private static final String SPRING_WEB           = 
"ParticipantSpringWeb";   //$NON-NLS-1$
        private static final String FACTORY_BEAN_NAME    = 
"LocaleProviderFactory";  //$NON-NLS-1$
        
        private static final LocaleProviderFactory DEFAULT_FACTORY  = new 
EmptyLocaleProviderFactory();
        private static final LocaleProvider        DEFAULT_PROVIDER = new 
EmptyLocaleProvider();

        public static LocaleProviderFactory getFactory() {
                return (LocaleProviderFactory) getBean( FACTORY_BEAN_NAME
                                                              , 
LocaleProviderFactory.class
                                                              , DEFAULT_FACTORY
                                                              );
        }

        public static LocaleProvider getProvider(String providerName) {
                return (LocaleProvider) getBean(providerName, 
LocaleProvider.class, DEFAULT_PROVIDER);
        }

        private static Object getBean(String beanName, Class type, Object 
defaultBean) {
                if (Rep.hasParticipant(SPRING_WEB)) {
                        for(Participant participant : 
Rep.getParticipants(SPRING_WEB)) {
                                BeanFactory factory = (BeanFactory) 
participant.getObject();
                                try {
                                        return factory.getBean(beanName, type);
                                }
                                catch (BeansException ne) {
                                }
                        }
                }
                return defaultBean;
        }

}
/*
 * This LocaleProvider makes available the locales specifies by 
 * Accept-Language HTTP request header
 */

package com.uwyn.rife.i18n;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Locale;

import com.uwyn.rife.engine.ElementSupport;

public class RequestLocaleProvider extends BaseLocaleProvider
{
        
        protected List<Locale> addLocales(List<Locale> locales, ElementSupport 
element){
        locales.addAll(getRequestLocales(element));
        return super.addLocales(locales, element);
    }

    private List<Locale> getRequestLocales(ElementSupport element) {
        List<Locale> requestLocales = new ArrayList<Locale>();
        for (Enumeration el = element.getRequestLocales(); 
el.hasMoreElements(); ) {
            requestLocales.add((Locale) el.nextElement());
        }
        return requestLocales;
    }
                
}

/*
 * With this LocaleProvider, it's possible:
 * - to use a input variable to specify a user locale
 * - to specify a required locale (highest priority level)
 * 
 */

package com.uwyn.rife.i18n;

import java.util.List;
import java.util.Locale;

import com.uwyn.rife.engine.ElementSupport;
import com.uwyn.rife.engine.exceptions.EngineException;

public class UserLocaleProvider extends RequestLocaleProvider
{
        public final static String PROP_L10N_USER_LANGUAGE     = 
"L10N_USER_LANGUAGE";     //$NON-NLS-1$
        public final static String PROP_L10N_USER_COUNTRY      = 
"L10N_USER_COUNTRY";      //$NON-NLS-1$
        public final static String PROP_L10N_REQUIRED_LANGUAGE = 
"L10N_REQUIRED_LANGUAGE"; //$NON-NLS-1$
        public final static String PROP_L10N_REQUIRED_COUNTRY  = 
"L10N_REQUIRED_COUNTRY "; //$NON-NLS-1$
        
        protected List<Locale> addLocales(List<Locale> locales, ElementSupport 
element){
                addNotNullLocale(locales, getRequiredLocale(element));
                addNotNullLocale(locales, getUserLocale(element));
        return super.addLocales(locales, element);
    }

        private Locale getRequiredLocale(ElementSupport element) {
                try {
                        String language = 
element.getPropertyString(PROP_L10N_REQUIRED_LANGUAGE);
                if (language != null) {
                        return new Locale( language
                                             , 
element.getPropertyString(PROP_L10N_REQUIRED_COUNTRY, EMPTY_STRING)
                                 );
                        }
                } catch (EngineException ee) {
                } 
                return null;
    }
        
        private Locale getUserLocale(ElementSupport element) {
                try {
                        String language = 
element.getInput(PROP_L10N_USER_LANGUAGE);
                if (language != null) {
                        return new Locale( language, 
element.getInput(PROP_L10N_USER_COUNTRY, EMPTY_STRING));
                }
                } catch (EngineException ee) {
                }
                return null;
    }
                
}

Index: 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/template/TemplateFactory.java
===================================================================
--- 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/template/TemplateFactory.java  
    (revision 2744)
+++ 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/template/TemplateFactory.java  
    (working copy)
@@ -19,6 +19,8 @@
 import com.uwyn.rife.tools.Localization;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
+import java.util.Locale;
 import java.util.ResourceBundle;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
@@ -387,6 +389,16 @@
        }
 
        public Template get(String name, String encoding, TemplateTransformer 
transformer)
+    throws TemplateException
+    {
+               return get(name, encoding, transformer, null);
+    }
+       
+       public Template get( String name 
+                                  , String encoding
+                                  , TemplateTransformer transformer
+                                  , List<Locale> locales
+                                  )
        throws TemplateException
        {
                if (null == name)               throw new 
IllegalArgumentException("name can't be null.");
@@ -402,21 +414,14 @@
 
                        assert template != null;
 
-                       Collection<String> default_resourcebundles = 
RifeConfig.Template.getDefaultResourcebundles(this);
-                       if (default_resourcebundles != null)
+                       List<String> default_resourcebundles = 
+                               (List<String>) 
RifeConfig.Template.getDefaultResourcebundles(this);
+                       if ((default_resourcebundles != null) && 
(default_resourcebundles.size() > 0))
                        {
-                               ArrayList<ResourceBundle> default_bundles = new 
ArrayList<ResourceBundle>();
-                               for (String bundle_name : 
default_resourcebundles)
-                               {
-                                       // try to look it up as a filename in 
the classpath
-                                       ResourceBundle bundle = 
Localization.getResourceBundle(bundle_name);
-                                       if (bundle != null)
-                                       {
-                                               default_bundles.add(bundle);
-                                               continue;
-                                       }
-                               }
-                               
template.setDefaultResourceBundles(default_bundles);
+                               template.setDefaultResourceBundles(
+                                               (ArrayList<ResourceBundle>) 
Localization.getResourceBundles( default_resourcebundles
+                                                                               
                                   , locales
+                                                                               
                                   )); 
                        }
 
                        template.initialize();
Index: 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/authentication/elements/Authenticated.java
===================================================================
--- 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/authentication/elements/Authenticated.java
 (revision 2744)
+++ 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/authentication/elements/Authenticated.java
 (working copy)
@@ -159,7 +159,7 @@
                        throw new UnsupportedTemplateTypeException(type);
                }
 
-               Template template = template_factory.get(name, encoding, null);
+               Template template = getTemplate(template_factory, name, 
encoding, null);
                entrance(template);
                return template;
        }
Index: 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/engine/ElementContext.java
===================================================================
--- C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/engine/ElementContext.java 
(revision 2744)
+++ C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/engine/ElementContext.java 
(working copy)
@@ -1090,14 +1090,14 @@
        {
                return mOutputs;
        }
-       
+
        Template getHtmlTemplate(String name, String encoding, 
TemplateTransformer transformer)
        throws TemplateException
        {
                if (null == name)                       throw new 
IllegalArgumentException("name can't be null.");
                if (0 == name.length())         throw new 
IllegalArgumentException("name can't be empty.");
 
-               return TemplateFactory.ENGINEHTML.get(name, encoding, 
transformer);
+               return mElement.getTemplate(TemplateFactory.ENGINEHTML, name, 
encoding, transformer);
        }
        
        Template getXhtmlTemplate(String name, String encoding, 
TemplateTransformer transformer)
Index: 
C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/engine/ElementSupport.java
===================================================================
--- C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/engine/ElementSupport.java 
(revision 2744)
+++ C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/engine/ElementSupport.java 
(working copy)
@@ -15,14 +15,15 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.uwyn.rife.config.RifeConfig;
 import com.uwyn.rife.engine.exceptions.*;
+import com.uwyn.rife.i18n.LocaleProvider;
+import com.uwyn.rife.i18n.Locales;
 import com.uwyn.rife.template.Template;
+import com.uwyn.rife.template.TemplateFactory;
 import com.uwyn.rife.template.TemplateTransformer;
 import com.uwyn.rife.template.exceptions.TemplateException;
-import com.uwyn.rife.tools.ArrayUtils;
-import com.uwyn.rife.tools.ObjectUtils;
-import com.uwyn.rife.tools.ServletUtils;
-import com.uwyn.rife.tools.StringUtils;
+import com.uwyn.rife.tools.*;
 
 /**
  * <p>The <code>ElementSupport</code> class provides all the methods to
@@ -36,6 +37,7 @@
  */
 public class ElementSupport implements Cloneable
 {
+
        private ElementAware    mElementAware = null;
        private ElementInfo     mElementInfo = null;
        private ElementContext  mElementContext = null;
@@ -46,7 +48,102 @@
        private Class                   mDeploymentClass = null;
        private boolean                 mProhibitRawAccess = true;
        private boolean                 mCloneContinuations = true;
+       private LocaleProvider          mLocaleProvider = null;
+       private List<ResourceBundle>    mResourceBundleList = null;
+        
+    public List<Locale> getLocales()
+    {
+       if (mLocaleProvider == null)
+       {   
+            mLocaleProvider = Locales.getFactory().getInstance(this);
+       }
+       return mLocaleProvider.getLocales(this); 
+    }
 
+    public String getResourceName()
+    {
+        return getPropertyString("resourcebundle_basename", null);
+    }
+
+    public List<ResourceBundle> getResourceBundles() 
+    {
+       if (mResourceBundleList == null) 
+       {
+               setResourceBundles();
+       }
+       return mResourceBundleList;
+    }
+
+    protected void setResourceBundles() 
+    {
+               mResourceBundleList = new ArrayList<ResourceBundle>();
+           addResourceBundle(null, true, true);
+    }
+
+    public void addResourceBundle(String baseName) 
+    {
+       addResourceBundle(baseName, false, false);
+    }
+    
+    public void addResourceBundle(String baseName, boolean atTheEnd) 
+    {
+       addResourceBundle(baseName, atTheEnd, false);
+    }
+    
+    public void addResourceBundle(String baseName, boolean atTheEnd, boolean 
withDefault) 
+    {
+               addResourceBundles(new String[] {baseName}, atTheEnd, 
withDefault);
+    }
+
+    public void addResourceBundles(String[] baseNameList)
+    {
+       addResourceBundles(baseNameList, false, false);
+    }
+    
+    public void addResourceBundles(String[] baseNameList, boolean atTheEnd)
+    {
+       addResourceBundles(baseNameList, atTheEnd, false);
+    }
+    
+    public void addResourceBundles(String[] baseNames, boolean atTheEnd, 
boolean withDefault)
+    {
+               
+       List<String> baseNameList = new ArrayList<String>(); 
+       boolean isDefault = false;
+               for (int i = 0; i < baseNames.length; i++)
+               {
+                       if (baseNames[i] != null)
+                       {
+                               baseNameList.add(baseNames[i]);
+                       }
+                       else
+                       {
+                               isDefault = true;
+                       }
+               }
+               if (withDefault && isDefault)  // it's the default case, so 
bottom priority
+               {
+                       baseNameList.add(null);
+               }
+       List<ResourceBundle> bundles = 
Localization.getResourceBundles(baseNameList, getLocales());
+               if (( bundles != null) && (bundles.size() > 0) ) 
+               {
+               addResourceBundles(bundles, atTheEnd);
+               }
+    }
+
+    public void addResourceBundles(List<ResourceBundle> bundles, boolean 
atTheEnd) 
+    {
+       if (atTheEnd)
+       {
+               getResourceBundles().addAll(bundles);
+       }
+       else
+       {
+               getResourceBundles().addAll(0, bundles);
+       }
+    }
+
        protected ElementSupport()
        {
        }
@@ -320,6 +417,26 @@
                throw new AnswerException(mElementContext, answer);
        }
        
+       /*
+        * Here as needed by chidren which don't use template getters below
+        */
+       protected Template getTemplate( TemplateFactory factory
+                                             , String name
+                                             , String encoding
+                                             , TemplateTransformer transformer
+                                             )
+       {
+               Template template = factory.get(name, encoding, transformer, 
getLocales());
+
+               List<ResourceBundle> template_bundles = 
(List<ResourceBundle>)template.getResourceBundles();
+               addResourceBundle(getResourceName(), true); // top priority to 
specific element bundle
+               addResourceBundles(template_bundles, true);   
+               addResourceBundle(RifeConfig.Tools.getDefaultResourceBundle(), 
true); //bottom priority to global bundle 
+               template_bundles.clear();
+               template_bundles.addAll(getResourceBundles());
+               return template;
+       }
+
        /**
         * Creates a new template instance of the [EMAIL PROTECTED]
         * com.uwyn.rife.template.TemplateFactoryEngineTypes#ENGINEHTML 
enginehtml}
Index: C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/tools/Localization.java
===================================================================
--- C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/tools/Localization.java    
(revision 2744)
+++ C:/DEV/Rife/rife-svn/src/framework/com/uwyn/rife/tools/Localization.java    
(working copy)
@@ -7,19 +7,19 @@
  */
 package com.uwyn.rife.tools;
 
-import java.util.*;
-
-import com.uwyn.rife.config.RifeConfig;
-import com.uwyn.rife.resources.ResourceFinderClasspath;
-import com.uwyn.rife.resources.exceptions.ResourceFinderErrorException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.net.URLConnection;
 import java.text.MessageFormat;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import com.uwyn.rife.config.RifeConfig;
+import com.uwyn.rife.resources.ResourceFinderClasspath;
+import com.uwyn.rife.resources.exceptions.ResourceFinderErrorException;
+
 public class Localization
 {
        public final static Pattern URL_PATTERN = 
Pattern.compile("(?:\\s*(\\w+):((?!//)[^,]+)\\s*)|(?:\\s*([^,]+)\\s*)");
@@ -444,6 +444,48 @@
                
                return null;
        }
+
+       public static List<ResourceBundle> getResourceBundles(List<String> 
baseNameList, List<Locale> localeList)
+       {
+               if (localeList == null) 
+               {
+                       localeList = new ArrayList<Locale>();
+               }
+               if (localeList.size() == 0)
+               {
+                       localeList.add(null);
+               }
+               
+               List<ResourceBundle> bundles = new ArrayList<ResourceBundle>();
+               for (Locale locale : localeList) 
+               {
+                       if (locale == null) 
+                       {
+                               locale = getLocale();
+                       }
+                       for (String baseName : baseNameList) 
+                       {
+                               if ( (baseName == null) || (baseName.length() 
== 0) )
+                               {
+                                       baseName = 
RifeConfig.Tools.getDefaultResourceBundle();
+                               }
+                               if ( (baseName != null) && (baseName.length() > 
0) )
+                               {
+                                       ResourceBundle bundle = 
Localization.getResourceBundle(baseName, locale);
+                                       if (bundle != null)
+                                       {
+                                               bundles.add(bundle);
+                                       }
+                               }
+                       }
+               }
+               if (bundles.isEmpty())
+               {
+                       return null;
+               }
+               return bundles;
+       }
+
 }
 
 class ReloadingBundle extends ResourceBundle
Index: 
C:/DEV/Rife/rife-crud-svn/src/implementations/com/uwyn/rife/crud/elements/admin/CrudElement.java
===================================================================
--- 
C:/DEV/Rife/rife-crud-svn/src/implementations/com/uwyn/rife/crud/elements/admin/CrudElement.java
    (revision 2744)
+++ 
C:/DEV/Rife/rife-crud-svn/src/implementations/com/uwyn/rife/crud/elements/admin/CrudElement.java
    (working copy)
@@ -7,11 +7,14 @@
  */
 package com.uwyn.rife.crud.elements.admin;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
 
 import com.uwyn.rife.config.Config;
-import com.uwyn.rife.config.RifeConfig;
-import com.uwyn.rife.crud.CrudPropertyNames;
 import com.uwyn.rife.crud.CrudSiteProcessor;
 import com.uwyn.rife.crud.CrudTemplateFactory;
 import com.uwyn.rife.crud.dam.CrudContentQueryManager;
@@ -19,15 +22,21 @@
 import com.uwyn.rife.database.Datasource;
 import com.uwyn.rife.database.Datasources;
 import com.uwyn.rife.engine.Element;
-import com.uwyn.rife.site.*;
+import com.uwyn.rife.site.Constrained;
+import com.uwyn.rife.site.ConstrainedBean;
+import com.uwyn.rife.site.ConstrainedProperty;
+import com.uwyn.rife.site.ConstrainedUtils;
+import com.uwyn.rife.site.SelectResourceBundle;
 import com.uwyn.rife.template.Template;
-import com.uwyn.rife.tools.Convert;
 import com.uwyn.rife.tools.Localization;
 import com.uwyn.rife.tools.StringUtils;
 
 public abstract class CrudElement extends Element
 {
-       private String                                  mImplementation = null;
+    private static final String L10N_CRUD_RESOURCEBUNDLE   = 
"l10n/crud/admin";  //$NON-NLS-1$
+    private static final String L10N_PREFIX_RESOURCEBUNDLE =  
L10N_CRUD_RESOURCEBUNDLE + "-";  //$NON-NLS-1$
+
+    private String                                     mImplementation = null;
        private Class                                   mBeanClass = null;
        private String                                  mBeanClassName = null;
        private Constrained                             
mBeanConstrainedInstance = null;
@@ -107,36 +116,22 @@
                return mContentQueryManager;
        }
 
-       public Template getTemplate()
+    public Template getTemplate()
        {
                if (null == mTemplate)
                {
                        Template template = 
CrudTemplateFactory.CRUD.get(getTransformer());
+            
+            List<String> bundleNames = new ArrayList<String>();
+            
bundleNames.add(L10N_PREFIX_RESOURCEBUNDLE+StringUtils.encodeClassname(mBeanClassName));
+            bundleNames.add(L10N_CRUD_RESOURCEBUNDLE);
+            List<ResourceBundle> bundles = 
Localization.getResourceBundles(bundleNames, getLocales());
+            if ( (bundles != null) && (bundles.size() > 0) )
+            {
+                ((List<ResourceBundle>) 
template.getResourceBundles()).addAll(0, bundles);  // top priority
+                getResourceBundles().addAll(0, bundles);
+            }
 
-                       boolean detect_client_locale = 
Convert.toBoolean(getProperty(CrudPropertyNames.DETECT_CLIENT_LOCALE), false);
-                       if (detect_client_locale)
-                       {
-                               Enumeration locales = getRequestLocales();
-                               while (locales.hasMoreElements())
-                               {
-                                       Locale locale = 
(Locale)locales.nextElement();
-                                       
template.addResourceBundle(Localization.getResourceBundle("l10n/crud/admin-"+StringUtils.encodeClassname(mBeanClassName),
 locale));
-                               }
-                       }
-                       String language = RifeConfig.Tools.getDefaultLanguage();
-                       
template.addResourceBundle(Localization.getResourceBundle("l10n/crud/admin-"+StringUtils.encodeClassname(mBeanClassName),
 language));
-
-                       if (detect_client_locale)
-                       {
-                               Enumeration locales = getRequestLocales();
-                               while (locales.hasMoreElements())
-                               {
-                                       Locale locale = 
(Locale)locales.nextElement();
-                                       
template.addResourceBundle(Localization.getResourceBundle("l10n/crud/admin", 
locale));
-                               }
-                       }
-                       
template.addResourceBundle(Localization.getResourceBundle("l10n/crud/admin", 
language));
-
                        mTemplate = template;
                }
 
_______________________________________________
Rife-users mailing list
[email protected]
http://www.uwyn.com/mailman/listinfo/rife-users

Reply via email to