package tc.oc.commons.bukkit.localization;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.NavigableSet;
import java.util.Optional;
import javax.annotation.Nullable;
import org.bukkit.command.CommandSender;
/**
* Knows how to translate keys into text for specific viewers
*/
public interface Translator {
/**
* Does the given locale contain a localized pattern for the given key?
*/
boolean hasKey(Locale locale, String key);
/**
* Does a localized pattern exist for the given key in any locale?
*/
boolean hasKey(String key);
/**
* Return the keys of all messages localized to the given locale.
* If a prefix is given, return only keys that begin with that prefix.
*/
NavigableSet<String> getKeys(Locale locale, @Nullable String prefix);
/**
* Return the keys of all localized messages across all locales.
* If a prefix is given, return only keys that begin with that prefix.
*/
NavigableSet<String> getKeys(@Nullable String prefix);
/**
* Localize the given key for the given viewer, with the given arguments.
*/
String t(String key, @Nullable CommandSender sender, Object... arguments);
/**
* Format a localized String with a formatting prefix (such as a ChatColor).
* The prefix is inserted at the start of the formatted result, and after each argument.
*/
String t(String format, String key, @Nullable CommandSender viewer, Object... arguments);
Optional<MessageFormat> pattern(String key);
Optional<MessageFormat> pattern(String key, Locale locale);
/**
* Lookup a localized pattern for the given key and viewer, returning
* null if the viewer's locale does not contain the key.
*/
Optional<MessageFormat> pattern(String key, CommandSender sender);
}