blob: 048dd7548a4d8aa1a6cfdb7e2f9c7c2a044dd47b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* 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. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.abdera2.common;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Wraps ResourceBundle with a couple of additional, useful methods. Used for l10n
*/
public final class Localizer {
private static Localizer instance = null;
public static synchronized Localizer getInstance() {
if (instance == null)
instance = new Localizer();
return instance;
}
public static synchronized void setInstance(Localizer localizer) {
Localizer.instance = localizer;
}
public static String get(String key) {
return getInstance().getValue(key);
}
public static String get(String key, String defaultValue) {
return getInstance().getValue(key, defaultValue);
}
public static String sprintf(String key, Object... args) {
return getInstance().sprintfValue(key, args);
}
private static final String DEFAULT_BUNDLE = "abderamessages";
private final Locale locale;
private final ResourceBundle bundle;
public Localizer() {
this(Locale.getDefault(), Thread.currentThread().getContextClassLoader());
}
public Localizer(Locale locale, ClassLoader loader) {
this(initResourceBundle(DEFAULT_BUNDLE, locale, loader), locale);
}
public Localizer(String bundle) {
this(initResourceBundle(bundle, Locale.getDefault(), Thread.currentThread().getContextClassLoader()));
}
public Localizer(String bundle, Locale locale) {
this(initResourceBundle(bundle, locale, Thread.currentThread().getContextClassLoader()));
}
public Localizer(ResourceBundle bundle) {
this(bundle, bundle.getLocale());
}
public Localizer(ResourceBundle bundle, Locale locale) {
this.bundle = bundle;
this.locale = locale;
}
private static ResourceBundle initResourceBundle(String bundle, Locale locale, ClassLoader loader) {
try {
return ResourceBundle.getBundle(bundle, locale, loader);
} catch (Exception e) {
return null;
}
}
public Locale getLocale() {
return locale;
}
public String getValue(String key) {
try {
return bundle.getString(key);
} catch (Exception e) {
return null;
}
}
public String getValue(String key, String defaultValue) {
String value = getValue(key);
return value != null ? value : defaultValue;
}
/**
* Use the JDK 1.5 sprintf style Formatter
*/
public String sprintfValue(String key, Object... args) {
String value = getValue(key);
return value != null ? String.format(locale, value, args) : null;
}
}