Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class LocaleLanguage {
- public static Language DEFAULT = Language.RU;
- private static final EnumMap<Language, Map<String, Object>> languageMap = new EnumMap<>(Language.class);
- private final ClassLoader loader;
- public LocaleLanguage(ClassLoader loader) {
- this.loader = loader;
- }
- public Map<String, Object> load(Language lang) {
- return languageMap.compute(lang, (language, map) -> {
- try (InputStream stream = loader.getResourceAsStream(lang.getFileName() + ".json")) {
- assert stream != null;
- try (InputStreamReader inputStreamReader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
- Map<String, Object> mapFromJson = StringBind.GSON.fromJson(inputStreamReader, new LocalizationTypeToken().getType());
- if(map == null) {
- map = mapFromJson;
- } else {
- map.putAll(mapFromJson);
- }
- }
- } catch (IOException e) {
- throw new RuntimeException(e);//todo: ошибка
- }
- return map;
- });
- }
- private Map<String, Object> getOrLoad(Language lang) {
- return languageMap.putIfAbsent(lang, load(lang));
- }
- public String getCorrectLine(Language lang, String key, Object... args) {
- return String.format(getOrLoad(lang).get(key).toString(), args);
- }
- public Object get(Language lang, String key) {
- Object value = getOrLoad(lang).get(key);
- return value != null ? value : key;
- }
- private static class LocalizationTypeToken extends TypeToken<Map<String, Object>> {
- private static final long serialVersionUID = 3988518176787768044L;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement