You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by dl...@apache.org on 2001/10/14 01:17:04 UTC
cvs commit: jakarta-turbine-2/src/java/org/apache/turbine/services/localization TurbineLocalizationService.java
dlr 01/10/13 16:17:04
Modified: src/java/org/apache/turbine/services/localization
TurbineLocalizationService.java
Log:
Backported some of the functionality I'd added to the Fulcrum
repository. Mostly performance and robustness enhancements.
Revision Changes Path
1.2 +119 -50 jakarta-turbine-2/src/java/org/apache/turbine/services/localization/TurbineLocalizationService.java
Index: TurbineLocalizationService.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/localization/TurbineLocalizationService.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -u -r1.1 -r1.2
--- TurbineLocalizationService.java 2001/08/16 05:09:01 1.1
+++ TurbineLocalizationService.java 2001/10/13 23:17:04 1.2
@@ -57,43 +57,40 @@
import java.util.Hashtable;
import java.util.Locale;
import java.util.ResourceBundle;
+import javax.servlet.http.HttpServletRequest;
+
import org.apache.turbine.services.InitializationException;
import org.apache.turbine.services.TurbineBaseService;
import org.apache.turbine.services.resources.TurbineResources;
import org.apache.turbine.util.RunData;
+import org.apache.turbine.util.StringUtils;
/**
- * This class has been added 17.01.2000 by [jm],mediaphil digital
- * media. Please contact me if you have any questions, which ARE NOT
- * ANSWERED by the Java Localization/Internationalization
- * Documentation.
- *
- * This class is the single point of access to all localization
+ * <p>This class is the single point of access to all localization
* resources. It caches different ResourceBundles for different
- * Locales.
- *
- * <p>
- *
- * Usage example:<br>
- * LocalizationService ls =<br>
- * (LocalizationService)TurbineServices<br>
- * .getInstance()<br>
- * .getService(LocalizationService.SERVICE_NAME);<br>
+ * Locales.</p>
*
- * <p>
+ * <p>Usage example:</p>
+ *
+ * <blockquote><code><pre>
+ * LocalizationService ls = (LocalizationService) TurbineServices
+ * .getInstance().getService(LocalizationService.SERVICE_NAME);
+ * </pre></code></blockquote>
*
- * Then call one of four methods to retrieve a ResourceBundle:
+ * <p>Then call one of four methods to retrieve a ResourceBundle:
*
- * <br>
- * - getBundle("MyBundleName")<br>
- * - getBundle("MyBundleName", httpAcceptLanguageHeader)<br>
- * - getBundle("MyBundleName", RunData)<br>
- * - getBundle("MyBundleName", Locale)<br>
+ * <ul>
+ * <li>getBundle("MyBundleName")</li>
+ * <li>getBundle("MyBundleName", httpAcceptLanguageHeader)</li>
+ * <li>etBundle("MyBundleName", HttpServletRequest)</li>
+ * <li>getBundle("MyBundleName", Locale)</li>
+ * <li>etc.</li>
+ * </ul></p>
*
* @author <a href="mailto:jm@mediaphil.de">Jonas Maurus</a>
* @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
* @author <a href="mailto:novalidemail@foo.com">Frank Y. Kim</a>
- * @version $Id: TurbineLocalizationService.java,v 1.1 2001/08/16 05:09:01 jvanzyl Exp $
+ * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
*/
public class TurbineLocalizationService
extends TurbineBaseService
@@ -104,11 +101,23 @@
* Key=bundle name
* Value=Hashtable containing ResourceBundles keyed by Locale.
*/
- private static Hashtable bundles = null;
+ private Hashtable bundles = null;
/** The name of the default bundle to use. */
- private static String defaultBundle = null;
+ private String defaultBundle = null;
+
+ /**
+ * The name of the default locale to use (includes language and
+ * country).
+ */
+ private Locale defaultLocale = null;
+ /** The name of the default language to use. */
+ private String defaultLanguage = null;
+
+ /** The name of the default country to use. */
+ private String defaultCountry = null;
+
/**
* Constructor.
*/
@@ -124,10 +133,27 @@
{
bundles = new Hashtable();
defaultBundle = TurbineResources.getString("locale.default.bundle");
+ Locale jvmDefault = Locale.getDefault();
+ defaultLanguage = TurbineResources
+ .getString("locale.default.language",
+ jvmDefault.getLanguage()).trim();
+ defaultCountry = TurbineResources
+ .getString("locale.default.country",
+ jvmDefault.getCountry()).trim();
+ defaultLocale = new Locale(defaultLanguage, defaultCountry);
setInit(true);
}
/**
+ * Retrieves the name of the default bundle (as specified in the
+ * config file).
+ */
+ public String getDefaultBundleName()
+ {
+ return defaultBundle;
+ }
+
+ /**
* This method returns a ResourceBundle given the bundle name
* "DEFAULT" and the default Locale information supplied in
* TurbineProperties.
@@ -136,7 +162,7 @@
*/
public ResourceBundle getBundle()
{
- return getBundle( defaultBundle );
+ return getBundle(defaultBundle, (Locale) null);
}
/**
@@ -148,13 +174,7 @@
*/
public ResourceBundle getBundle(String bundleName)
{
- String language =
- TurbineResources.getString("locale.default.language", "en").trim();
- String country =
- TurbineResources.getString("locale.default.country", "US").trim();
-
- return getBundle( bundleName,
- new Locale(language, country) );
+ return getBundle(bundleName, (Locale) null);
}
/**
@@ -166,16 +186,42 @@
* @param languageHeader A String with the language header.
* @return A localized ResourceBundle.
*/
- public ResourceBundle getBundle(String bundleName,
- String languageHeader)
+ public ResourceBundle getBundle(String bundleName, String languageHeader)
{
- return getBundle( bundleName,
- LocaleDetector.getLocale(languageHeader) );
+ return getBundle(bundleName, getLocale(languageHeader));
}
/**
* This method returns a ResourceBundle given the Locale
* information supplied in the HTTP "Accept-Language" header which
+ * is stored in HttpServletRequest.
+ *
+ * @param req HttpServletRequest.
+ * @return A localized ResourceBundle.
+ */
+ public ResourceBundle getBundle(HttpServletRequest req)
+ {
+ return getBundle(defaultBundle, getLocale(req));
+ }
+
+ /**
+ * This method returns a ResourceBundle given the bundle name and
+ * the Locale information supplied in the HTTP "Accept-Language"
+ * header which is stored in HttpServletRequest.
+ *
+ * @param bundleName Name of the bundle to use if the request's
+ * locale cannot be resolved.
+ * @param req HttpServletRequest.
+ * @return A localized ResourceBundle.
+ */
+ public ResourceBundle getBundle(String bundleName, HttpServletRequest req)
+ {
+ return getBundle(bundleName, getLocale(req));
+ }
+
+ /**
+ * This method returns a ResourceBundle given the Locale
+ * information supplied in the HTTP "Accept-Language" header which
* is stored in RunData.
*
* @param data Turbine information.
@@ -183,10 +229,7 @@
*/
public ResourceBundle getBundle(RunData data)
{
- Locale locale = LocaleDetector.getLocale(data);
- if (locale == null)
- return getBundle();
- return getBundle( defaultBundle, locale );
+ return getBundle(defaultBundle, getLocale(data.getRequest()));
}
/**
@@ -198,13 +241,9 @@
* @param data Turbine information.
* @return A localized ResourceBundle.
*/
- public ResourceBundle getBundle(String bundleName,
- RunData data)
+ public ResourceBundle getBundle(String bundleName, RunData data)
{
- Locale locale = LocaleDetector.getLocale(data);
- if (locale == null)
- return getBundle(bundleName);
- return getBundle( bundleName, locale );
+ return getBundle(bundleName, getLocale(data.getRequest()));
}
/**
@@ -215,10 +254,14 @@
* @param locale A Locale.
* @return A localized ResourceBundle.
*/
- public ResourceBundle getBundle(String bundleName,
- Locale locale)
+ public ResourceBundle getBundle(String bundleName, Locale locale)
{
- bundleName = bundleName.trim();
+ // Assure usable inputs.
+ bundleName = (bundleName == null ? defaultBundle : bundleName.trim());
+ if (locale == null)
+ {
+ locale = getLocale((String) null);
+ }
if ( bundles.containsKey(bundleName) )
{
@@ -269,5 +312,31 @@
public void setBundle(String defaultBundle)
{
this.defaultBundle = defaultBundle;
+ }
+
+ /**
+ * @see org.apache.turbine.services.localization.LocalizationService#getLocale(HttpServletRequest)
+ */
+ public final Locale getLocale(HttpServletRequest req)
+ {
+ return getLocale(req.getHeader(ACCEPT_LANGUAGE));
+ }
+
+ /**
+ * @see org.apache.turbine.services.localization.LocalizationService#getLocale(String)
+ */
+ public Locale getLocale(String header)
+ {
+ if (!StringUtils.isEmpty(header))
+ {
+ LocaleTokenizer tok = new LocaleTokenizer(header);
+ if (tok.hasNext())
+ {
+ return (Locale) tok.next();
+ }
+ }
+
+ // Couldn't parse locale.
+ return defaultLocale;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org