From 165d2f08e7da0d1b8ff4475e00427969082c9bd1 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Tue, 3 Feb 2026 03:52:21 +0400 Subject: [PATCH 1/2] feat: properties file provider --- build.gradle.kts | 2 +- .../core/provider/PropertiesFileProvider.java | 97 +++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/org/densy/polyglot/core/provider/PropertiesFileProvider.java diff --git a/build.gradle.kts b/build.gradle.kts index 569d8ae..f645f82 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ java { allprojects { group = "org.densy.polyglot" - version = "1.1.1-SNAPSHOT" + version = "1.1.2-SNAPSHOT" } subprojects { diff --git a/core/src/main/java/org/densy/polyglot/core/provider/PropertiesFileProvider.java b/core/src/main/java/org/densy/polyglot/core/provider/PropertiesFileProvider.java new file mode 100644 index 0000000..7fe1236 --- /dev/null +++ b/core/src/main/java/org/densy/polyglot/core/provider/PropertiesFileProvider.java @@ -0,0 +1,97 @@ +package org.densy.polyglot.core.provider; + +import org.densy.polyglot.api.language.Language; +import org.densy.polyglot.api.language.LanguageStandard; +import org.densy.polyglot.api.provider.TranslationProvider; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +/** + * Properties file translation provider. + */ +public class PropertiesFileProvider implements TranslationProvider { + public static final Set ALLOWED_EXTENSIONS = Set.of("properties", "props", "ini", "cfg", "conf", "env", "lang", "txt"); + + private final File folder; + private final LanguageStandard languageStandard; + private final Map> translations; + private final Set allowedExtensions; + + public PropertiesFileProvider(File folder, LanguageStandard languageStandard) { + this(folder, languageStandard, ALLOWED_EXTENSIONS); + } + + public PropertiesFileProvider(File folder, LanguageStandard languageStandard, Set allowedExtensions) { + this.folder = folder; + this.languageStandard = languageStandard; + this.allowedExtensions = new HashSet<>(allowedExtensions); + this.translations = new HashMap<>(); + this.loadTranslationsFromFolder(); + } + + private void loadTranslationsFromFolder() { + if (!folder.exists() || !folder.isDirectory()) { + return; + } + + File[] propertiesFiles = folder.listFiles((dir, name) -> { + String lowerName = name.toLowerCase(); + int dotIndex = lowerName.lastIndexOf('.'); + if (dotIndex == -1) { + return false; + } + String extension = lowerName.substring(dotIndex + 1); + return allowedExtensions.contains(extension); + }); + + if (propertiesFiles == null) { + return; + } + + for (File file : propertiesFiles) { + try { + String fileName = file.getName(); + String languageString = fileName.substring(0, fileName.lastIndexOf('.')); + + if (languageStandard.matches(languageString)) { + Language language = languageStandard.parseLanguage(languageString); + Properties properties = new Properties(); + + try (InputStreamReader reader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)) { + properties.load(reader); + } + + Map translationMap = new HashMap<>(); + for (String key : properties.stringPropertyNames()) { + translationMap.put(key, properties.getProperty(key)); + } + + this.translations.put(language, translationMap); + } + } catch (IOException e) { + throw new RuntimeException("Error loading translation file: " + file.getName(), e); + } catch (Exception e) { + throw new RuntimeException("Error parsing translation file: " + file.getName(), e); + } + } + } + + @Override + public Map> getTranslations() { + return new HashMap<>(translations); + } + + @Override + public Set getSupportedLanguages() { + return new HashSet<>(translations.keySet()); + } +} \ No newline at end of file From 13489ca788d310a605468621802a573d4afd7ba9 Mon Sep 17 00:00:00 2001 From: MEFRREEX Date: Tue, 3 Feb 2026 03:53:05 +0400 Subject: [PATCH 2/2] chore: update version in readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6b7afcd..c756c83 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ Adding a library api: org.densy.polyglot api - 1.1.1-SNAPSHOT + 1.1.2-SNAPSHOT ``` @@ -82,7 +82,7 @@ Adding a library implementation: org.densy.polyglot core - 1.1.1-SNAPSHOT + 1.1.2-SNAPSHOT ``` @@ -97,10 +97,10 @@ maven { Adding a library api: ```groovy -implementation "org.densy.polyglot:api:1.1.1-SNAPSHOT" +implementation "org.densy.polyglot:api:1.1.2-SNAPSHOT" ``` Adding a library implementation: ```groovy -implementation "org.densy.polyglot:core:1.1.1-SNAPSHOT" +implementation "org.densy.polyglot:core:1.1.2-SNAPSHOT" ``` \ No newline at end of file