package org.esupportail.helpdesk.services.i18n;
import java.util.Locale;
import java.util.Map;
import org.apache.myfaces.shared_impl.util.LocaleUtils;
import org.esupportail.commons.services.i18n.AbstractI18nService;
import org.esupportail.commons.utils.Assert;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.MessageSource;
/**
* An implementation of I18nService that loads several bundles.
* See /properties/i18n/i18n.xml for details.
*
* See /properties/i18n/i18n-example.xml.
*/
public class ResourceBundleMessageSourceI18nServiceImpl extends AbstractI18nService {
private final ReloadableResourceBundleMessageSource messageSource;
private final Map<String, String> mergedProps;
private static ResourceBundleMessageSourceI18nServiceImpl instance = null;
private Locale defaultLocale;
private ResourceBundleMessageSourceI18nServiceImpl(ReloadableResourceBundleMessageSource messageSource, String defLocale) {
setDefaultLocale(defLocale);
this.messageSource = messageSource;
mergedProps = messageSource.getStrings(getDefaultLocale());
}
public static ResourceBundleMessageSourceI18nServiceImpl create(ReloadableResourceBundleMessageSource messageSource, String defLocale) {
if (instance == null)
instance = new ResourceBundleMessageSourceI18nServiceImpl(messageSource, defLocale);
return instance;
}
@Override
public Map<String, String> getStrings(final Locale locale) {
return mergedProps;
}
@Override
public String getString(String key, Locale locale) {
return messageSource.getMessage(key, null, locale);
}
@Override
public String getString(String key) {
return messageSource.getMessage(key, null, defaultLocale);
}
@Override
public String getString(String key, Locale locale, Object... args) {
return messageSource.getMessage(key, args, locale);
}
@Override
public String getString(String key, Object... args) {
return messageSource.getMessage(key, args, defaultLocale);
}
public void setDefaultLocale(String defaultLocale) {
this.defaultLocale = LocaleUtils.toLocale(defaultLocale);
}
}