Advertisement
JolyJDIA

Untitled

Jun 13th, 2020
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.78 KB | None | 0 0
  1. public class LocaleLanguage {
  2.     public static Language DEFAULT = Language.RU;
  3.     private static final EnumMap<Language, Map<String, Object>> languageMap = new EnumMap<>(Language.class);
  4.     private final ClassLoader loader;
  5.  
  6.     public LocaleLanguage(ClassLoader loader) {
  7.         this.loader = loader;
  8.     }
  9.  
  10.     public Map<String, Object> load(Language lang) {
  11.         return languageMap.compute(lang, (language, map) -> {
  12.             try (InputStream stream = loader.getResourceAsStream(lang.getFileName() + ".json")) {
  13.                 assert stream != null;
  14.                 try (InputStreamReader inputStreamReader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
  15.                     Map<String, Object> mapFromJson = StringBind.GSON.fromJson(inputStreamReader, new LocalizationTypeToken().getType());
  16.                     if(map == null) {
  17.                         map = mapFromJson;
  18.                     } else {
  19.                         map.putAll(mapFromJson);
  20.                     }
  21.                 }
  22.             } catch (IOException e) {
  23.                 throw new RuntimeException(e);//todo: ошибка
  24.             }
  25.             return map;
  26.         });
  27.     }
  28.     private Map<String, Object> getOrLoad(Language lang) {
  29.         return languageMap.putIfAbsent(lang, load(lang));
  30.     }
  31.     public String getCorrectLine(Language lang, String key, Object... args) {
  32.         return String.format(getOrLoad(lang).get(key).toString(), args);
  33.     }
  34.  
  35.     public Object get(Language lang, String key) {
  36.         Object value = getOrLoad(lang).get(key);
  37.         return value != null ? value : key;
  38.     }
  39.     private static class LocalizationTypeToken extends TypeToken<Map<String, Object>> {
  40.         private static final long serialVersionUID = 3988518176787768044L;
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement