package rabbitescape.engine.i18n; import static rabbitescape.engine.util.Util.*; import java.util.*; import rabbitescape.engine.util.NamedFieldFormatter; import rabbitescape.engine.util.Util.Function; public class Translation { public static class Instance { private final String bundleName; private final Locale locale; public Instance( String bundleName, Locale locale ) { this.bundleName = bundleName; this.locale = locale; } public String t( String key ) { try { ResourceBundle bundle = ResourceBundle.getBundle( bundleName, locale ); return bundle.getString( sanitise( key ) ); } catch( MissingResourceException e ) { return key; } } public static String sanitise( String key ) { return stringFromChars( map( sanitiseChar(), asChars( key ) ) ); } private static Function<Character, Character> sanitiseChar() { return new Function<Character, Character>() { final List<Character> ALLOWED = list( asChars( "abcdefghijklmnopqrstuvwxyz0123456789" ) ); @Override public Character apply( Character t ) { char lct = Character.toLowerCase( t ); if ( ALLOWED.contains( lct ) ) { return lct; } else { return '_'; } } }; } public String t( String key, Map<String, Object> params ) { return NamedFieldFormatter.format( t( key ), params ); } } private static Instance instance = new Instance( "rabbitescape.engine.translations", Locale.getDefault() ); public static void init( Locale locale ) { init( instance.bundleName, locale ); } public static void init( String bundleName, Locale locale ) { instance = new Instance( bundleName, locale ); } public static String t( String key ) { return instance.t( key ); } public static String t( String key, Map<String, Object> params ) { return instance.t( key, params ); } }