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