
com.lyncode.xliff.message.XliffMessageResolver Maven / Gradle / Ivy
The newest version!
package com.lyncode.xliff.message;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.collect.Collections2;
import com.lyncode.choiceprops.PluralProperty;
import com.lyncode.xliff.XLIFF;
import com.lyncode.xliff.XLiffUtils;
import com.lyncode.xliff.XliffException;
import com.lyncode.xliff.cache.InMemoryPersistentMessageCache;
import com.lyncode.xliff.cache.InMemoryPersistentXliffCache;
import com.lyncode.xliff.cache.MessageCache;
import com.lyncode.xliff.cache.XliffCache;
import com.lyncode.xliff.resource.TranslationResourceResolver;
import java.io.InputStream;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
public class XliffMessageResolver implements MessageResolver {
private final TranslationResourceResolver translationResourceResolver;
private final MessageCache messageCache;
private final XliffCache xliffCache;
public XliffMessageResolver(TranslationResourceResolver translationResourceResolver, MessageCache messageCache, XliffCache xliffCache) {
this.translationResourceResolver = translationResourceResolver;
this.messageCache = messageCache;
this.xliffCache = xliffCache;
}
public XliffMessageResolver(Locale defaultLocale, TranslationResourceResolver translationResourceResolver) {
this.translationResourceResolver = translationResourceResolver;
this.messageCache = new InMemoryPersistentMessageCache(defaultLocale);
this.xliffCache = new InMemoryPersistentXliffCache(defaultLocale);
}
private Collection getXliffs(final Locale locale) {
return xliffCache.get(locale, new Supplier>() {
@Override
public Collection get() {
return Collections2.transform(translationResourceResolver.resolve(locale), new Function() {
@Override
public XLIFF apply(InputStream input) {
try {
return XLiffUtils.read(input);
} catch (XliffException e) {
throw new RuntimeException(e);
}
}
});
}
});
}
@Override
public String resolve(final Locale locale, final int count, final String code, final Map replacements) {
return messageCache.retrieve(locale, code, new Supplier() {
@Override
public String get() {
Collection xliffs = getXliffs(locale);
for (XLIFF xliff : xliffs) {
String target = xliff.getTarget(code);
if (target != null) return PluralProperty.translate(count, target, replacements);
}
return null;
}
});
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy