package org.trimou.lambda.i18n;
import java.util.ResourceBundle;
import org.trimou.engine.MustacheEngine;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.MustacheEngineBuilder.EngineBuiltCallback;
import org.trimou.engine.locale.LocaleSupport;
import org.trimou.engine.resolver.i18n.ResourceBundleResolver;
import org.trimou.handlebars.i18n.ResourceBundleHelper;
import org.trimou.lambda.InputProcessingLambda;
import org.trimou.util.Strings;
/**
* Displays localized messages. It might be registered as a global lambda - see
* {@link MustacheEngineBuilder#addGlobalData(String, Object)}.
*
* <pre>
* {{#bundle}}key{{/bundle}}
* </pre>
*
* @author Martin Kouba
* @see ResourceBundle
* @see ResourceBundleHelper
* @see ResourceBundleResolver
*/
public class ResourceBundleLambda extends InputProcessingLambda
implements EngineBuiltCallback {
private String baseName;
private LocaleSupport localeSupport;
/**
*
* @param baseName
*/
public ResourceBundleLambda(String baseName) {
this.baseName = baseName;
}
/**
*
* @param baseName
* @param localeSupport
*/
public ResourceBundleLambda(String baseName, LocaleSupport localeSupport) {
this.baseName = baseName;
this.localeSupport = localeSupport;
}
@Override
public String invoke(String text) {
if (localeSupport == null) {
throw new IllegalStateException(
"ResourceBundleLambda requires a LocaleSupport instance to work properly");
}
ResourceBundle bundle = ResourceBundle.getBundle(baseName,
localeSupport.getCurrentLocale());
if (bundle.containsKey(text)) {
return bundle.getObject(text).toString();
}
return Strings.EMPTY;
}
@Override
public boolean isReturnValueInterpolated() {
return false;
}
@Override
public void engineBuilt(MustacheEngine engine) {
this.localeSupport = engine.getConfiguration().getLocaleSupport();
}
}