/* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.services.customlocalization; import java.util.Locale; import org.apache.turbine.services.localization.TurbineLocalizationService; import org.apache.turbine.util.RunData; import org.apache.jetspeed.om.security.JetspeedUser; /** * <p>This class is the single point of access to all localization * resources. It caches different ResourceBundles for different * Locales.</p> * * Work in the same way of turbine except for getLocale(RunData data), * turbine read the accept-language header in a http request, * instead this method read the user.getPerm("language") * from the RunData to obtain the language choice by the user * without the browser language rule. * If a user not change the language with a ChangeLanguagePortlet, * and a user.getPerm("language")are not set, * the "Accept-Language" header are read. * * @author <a href="mailto:desmax74@yahoo.it">DessMassimiliano</a> * @version $Id: JetspeedLocalizationService.java,v 1.8 2004/02/23 03:49:33 jford Exp $ */ public class JetspeedLocalizationService extends TurbineLocalizationService implements CustomLocalizationService { /** * Initialize list of default bundle names. * * @param ignored * protected void initBundleNames(String ignored[]) { bundleNames = TurbineResources.getStringArray("locale.default.bundles"); String name = TurbineResources.getString("locale.default.bundle"); if (name != null && name.length() > 0) { if (bundleNames == null || bundleNames.length <= 0) { bundleNames = (new String[] {name}); } else { String array[] = new String[bundleNames.length + 1]; array[0] = name; System.arraycopy(bundleNames, 0, array, 1, bundleNames.length); bundleNames = array; } } if (bundleNames == null) { bundleNames = new String[0]; } } */ /** * Call getDefaultBundleName() of turbine * * @return */ /* public String getDefaultBundleName() { return bundleNames.length > 0 ? bundleNames[0] : ""; } */ /** * This method read if a user has set getPerm("language") * to use another language or not. * If not set , accept-language of the request are returned. * * @param data * @return */ public final Locale getLocale(RunData data) { JetspeedUser user = (JetspeedUser) data.getUser(); if (user == null) { return getLocale(data.getRequest().getHeader(CustomLocalizationService.ACCEPT_LANGUAGE)); } else { String lang = "null"; try { if (user.getPerm("language") == null) { return getLocale(data.getRequest().getHeader(CustomLocalizationService.ACCEPT_LANGUAGE)); } else { lang = user.getPerm("language").toString(); Locale locale = new Locale(lang, ""); return locale; } } catch (Exception use) { return getLocale(data.getRequest().getHeader(CustomLocalizationService.ACCEPT_LANGUAGE)); } } } /** * Call searchKey(Locale locale, String key) to search the key in the Bundles * * @param bundleName * @param locale * @param key * @return * public String getString(String bundleName, Locale locale, String key) { return searchKey(locale,key); } */ /** * Search the key in the first bundle, if is not found * search in the list of bundles * * @param locale * @param key * @return * private String searchKey(Locale locale, String key) { String keyTemp=null; int i=0; boolean find=false; ResourceBundle rb ; while ((null==keyTemp)&&(!find)&&(i<bundleNames.length)) { rb = getBundle(bundleNames[i], locale); keyTemp=super.getStringOrNull(rb,key); if (keyTemp!=null) { find=true; } else i++; } return keyTemp; } private String bundleNames[]; */ }