diff --git a/.github/configs/yaml-linter.yml b/.github/configs/yaml-linter.yml
index 3f056f2a1..93b337bfc 100644
--- a/.github/configs/yaml-linter.yml
+++ b/.github/configs/yaml-linter.yml
@@ -23,4 +23,4 @@ rules:
## Trailing Spaces for language files are too common and these files are automated anyway
trailing-spaces:
ignore: |
- /src/main/resources/languages/*.yml
+ /src/main/resources/languages/**/*.yml
diff --git a/.github/workflows/translator-webhook.yml b/.github/workflows/translator-webhook.yml
index caaf4004f..fe03a8c59 100644
--- a/.github/workflows/translator-webhook.yml
+++ b/.github/workflows/translator-webhook.yml
@@ -5,7 +5,7 @@ on:
branches:
- master
paths:
- - 'src/main/resources/languages/**_en.yml'
+ - 'src/main/resources/languages/en/**.yml'
jobs:
notify:
diff --git a/pom.xml b/pom.xml
index 09693483f..e31346c18 100644
--- a/pom.xml
+++ b/pom.xml
@@ -203,11 +203,6 @@
kong.unirest
io.github.thebusybiscuit.slimefun4.libraries.unirest
-
-
- org.apache
- io.github.thebusybiscuit.slimefun4.libraries.apache
-
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java
index 6f7206b3a..a7d0fddcb 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/LocalizationService.java
@@ -13,6 +13,7 @@ import java.util.logging.Level;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import javax.annotation.ParametersAreNonnullByDefault;
import org.apache.commons.lang.Validate;
import org.bukkit.NamespacedKey;
@@ -24,6 +25,7 @@ import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import io.github.thebusybiscuit.slimefun4.core.services.localization.Language;
+import io.github.thebusybiscuit.slimefun4.core.services.localization.LanguageFile;
import io.github.thebusybiscuit.slimefun4.core.services.localization.SlimefunLocalization;
import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin;
import io.github.thebusybiscuit.slimefun4.utils.NumberUtils;
@@ -60,7 +62,7 @@ public class LocalizationService extends SlimefunLocalization {
translationsEnabled = SlimefunPlugin.getCfg().getBoolean("options.enable-translations");
defaultLanguage = new Language(serverDefaultLanguage, "11b3188fd44902f72602bd7c2141f5a70673a411adb3d81862c69e536166b");
- defaultLanguage.setMessagesFile(getConfig().getConfiguration());
+ defaultLanguage.setFile(LanguageFile.MESSAGES, getConfig().getConfiguration());
loadEmbeddedLanguages();
@@ -122,7 +124,7 @@ public class LocalizationService extends SlimefunLocalization {
public boolean hasLanguage(@Nonnull String id) {
Validate.notNull(id, "The language id cannot be null");
// Checks if our jar files contains a messages.yml file for that language
- return containsResource("messages_" + id);
+ return containsResource(id, LanguageFile.MESSAGES);
}
/**
@@ -138,9 +140,11 @@ public class LocalizationService extends SlimefunLocalization {
return languages.containsKey(id);
}
- private boolean containsResource(@Nonnull String file) {
- Validate.notNull(file, "File name cannot be null!");
- return plugin.getClass().getResource("/languages/" + file + ".yml") != null;
+ private boolean containsResource(@Nonnull String languageId, @Nonnull LanguageFile file) {
+ Validate.notNull(languageId, "Language id cannot be null");
+ Validate.notNull(file, "Language file cannot be null");
+
+ return plugin.getClass().getResource(file.getFilePath(languageId)) != null;
}
@Override
@@ -172,16 +176,18 @@ public class LocalizationService extends SlimefunLocalization {
getConfig().clear();
}
- defaultLanguage.setResearchesFile(streamConfigFile("researches_" + language + ".yml", null));
- defaultLanguage.setResourcesFile(streamConfigFile("resources_" + language + ".yml", null));
- defaultLanguage.setCategoriesFile(streamConfigFile("categories_" + language + ".yml", null));
- defaultLanguage.setRecipeTypesFile(streamConfigFile("recipes_" + language + ".yml", null));
+ // Copy defaults
+ for (LanguageFile file : LanguageFile.values()) {
+ if (file != LanguageFile.MESSAGES) {
+ copyToDefaultLanguage(language, file);
+ }
+ }
SlimefunPlugin.logger().log(Level.INFO, "Loaded language \"{0}\"", language);
getConfig().setValue(LANGUAGE_PATH, language);
// Loading in the defaults from our resources folder
- String path = "/languages/messages_" + language + ".yml";
+ String path = "/languages/" + language + "/messages.yml";
try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path), StandardCharsets.UTF_8))) {
FileConfiguration config = YamlConfiguration.loadConfiguration(reader);
@@ -193,24 +199,25 @@ public class LocalizationService extends SlimefunLocalization {
save();
}
+ @ParametersAreNonnullByDefault
+ private void copyToDefaultLanguage(String language, LanguageFile file) {
+ FileConfiguration config = streamConfigFile(file.getFilePath(language), null);
+ defaultLanguage.setFile(file, config);
+ }
+
@Override
protected void addLanguage(@Nonnull String id, @Nonnull String texture) {
Validate.notNull(id, "The language id cannot be null!");
Validate.notNull(texture, "The language texture cannot be null");
if (hasLanguage(id)) {
- FileConfiguration messages = streamConfigFile("messages_" + id + ".yml", getConfig().getConfiguration());
- FileConfiguration researches = streamConfigFile("researches_" + id + ".yml", null);
- FileConfiguration resources = streamConfigFile("resources_" + id + ".yml", null);
- FileConfiguration categories = streamConfigFile("categories_" + id + ".yml", null);
- FileConfiguration recipes = streamConfigFile("recipes_" + id + ".yml", null);
-
Language language = new Language(id, texture);
- language.setMessagesFile(messages);
- language.setResearchesFile(researches);
- language.setResourcesFile(resources);
- language.setCategoriesFile(categories);
- language.setRecipeTypesFile(recipes);
+
+ for (LanguageFile file : LanguageFile.values()) {
+ FileConfiguration defaults = file == LanguageFile.MESSAGES ? getConfig().getConfiguration() : null;
+ FileConfiguration config = streamConfigFile(file.getFilePath(language), defaults);
+ language.setFile(file, config);
+ }
languages.put(id, language);
}
@@ -263,14 +270,13 @@ public class LocalizationService extends SlimefunLocalization {
return keys;
}
+ @Nullable
private FileConfiguration streamConfigFile(@Nonnull String file, @Nullable FileConfiguration defaults) {
- String path = "/languages/" + file;
-
- if (plugin.getClass().getResourceAsStream(path) == null) {
+ if (plugin.getClass().getResourceAsStream(file) == null) {
return new YamlConfiguration();
}
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(path), StandardCharsets.UTF_8))) {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(plugin.getClass().getResourceAsStream(file), StandardCharsets.UTF_8))) {
FileConfiguration config = YamlConfiguration.loadConfiguration(reader);
if (defaults != null) {
@@ -279,7 +285,7 @@ public class LocalizationService extends SlimefunLocalization {
return config;
} catch (IOException e) {
- SlimefunPlugin.logger().log(Level.SEVERE, e, () -> "Failed to load language file into memory: \"" + path + "\"");
+ SlimefunPlugin.logger().log(Level.SEVERE, e, () -> "Failed to load language file into memory: \"" + file + "\"");
return null;
}
}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java
index 0e4460c3d..438209968 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/Language.java
@@ -1,6 +1,9 @@
package io.github.thebusybiscuit.slimefun4.core.services.localization;
+import java.util.Arrays;
+import java.util.EnumMap;
import java.util.Locale;
+import java.util.Map;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -26,16 +29,12 @@ import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
*/
public final class Language {
+ private final Map files = new EnumMap<>(LanguageFile.class);
+
private final String id;
private final ItemStack item;
private double progress = -1;
- private FileConfiguration messages;
- private FileConfiguration researches;
- private FileConfiguration resources;
- private FileConfiguration categories;
- private FileConfiguration recipeTypes;
-
/**
* This instantiates a new {@link Language} with the given language code
* and skull texture.
@@ -85,58 +84,15 @@ public final class Language {
}
@Nullable
- FileConfiguration getMessagesFile() {
- return messages;
+ FileConfiguration getFile(@Nonnull LanguageFile file) {
+ return files.get(file);
}
- @Nullable
- FileConfiguration getResearchesFile() {
- return researches;
- }
+ public void setFile(@Nonnull LanguageFile file, @Nonnull FileConfiguration config) {
+ Validate.notNull(file, "The provided file should not be null.");
+ Validate.notNull(config, "The provided config should not be null.");
- @Nullable
- FileConfiguration getResourcesFile() {
- return resources;
- }
-
- @Nullable
- FileConfiguration getCategoriesFile() {
- return categories;
- }
-
- @Nullable
- FileConfiguration getRecipeTypesFile() {
- return recipeTypes;
- }
-
- public void setMessagesFile(@Nonnull FileConfiguration config) {
- Validate.notNull(config);
-
- this.messages = config;
- }
-
- public void setResearchesFile(@Nonnull FileConfiguration config) {
- Validate.notNull(config);
-
- this.researches = config;
- }
-
- public void setResourcesFile(@Nonnull FileConfiguration config) {
- Validate.notNull(config);
-
- this.resources = config;
- }
-
- public void setCategoriesFile(@Nonnull FileConfiguration config) {
- Validate.notNull(config);
-
- this.categories = config;
- }
-
- public void setRecipeTypesFile(@Nonnull FileConfiguration config) {
- Validate.notNull(config);
-
- this.recipeTypes = config;
+ files.put(file, config);
}
/**
@@ -180,7 +136,7 @@ public final class Language {
@Nonnull
public FileConfiguration[] getFiles() {
- return new FileConfiguration[] { getMessagesFile(), getCategoriesFile(), getResearchesFile(), getResourcesFile() };
+ return Arrays.stream(LanguageFile.valuesCached).map(this::getFile).toArray(FileConfiguration[]::new);
}
}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/LanguageFile.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/LanguageFile.java
new file mode 100644
index 000000000..7669523ea
--- /dev/null
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/LanguageFile.java
@@ -0,0 +1,43 @@
+package io.github.thebusybiscuit.slimefun4.core.services.localization;
+
+import javax.annotation.Nonnull;
+
+import org.apache.commons.lang.Validate;
+
+/**
+ * This enum holds the different types of files each {@link Language} holds.
+ *
+ * @author TheBusyBiscuit
+ *
+ * @see Language
+ * @see SlimefunLocalization
+ *
+ */
+public enum LanguageFile {
+
+ MESSAGES("messages.yml"),
+ CATEGORIES("categories.yml"),
+ RECIPES("recipes.yml"),
+ RESOURCES("resources.yml"),
+ RESEARCHES("researches.yml");
+
+ static final LanguageFile[] valuesCached = values();
+
+ private final String fileName;
+
+ LanguageFile(@Nonnull String fileName) {
+ this.fileName = fileName;
+ }
+
+ @Nonnull
+ public String getFilePath(@Nonnull Language language) {
+ return getFilePath(language.getId());
+ }
+
+ @Nonnull
+ public String getFilePath(@Nonnull String languageId) {
+ Validate.notNull(languageId, "Language id must not be null!");
+ return "/languages/" + languageId + '/' + fileName;
+ }
+
+}
diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java
index 5943f2a57..dec044ac3 100644
--- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java
+++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/services/localization/SlimefunLocalization.java
@@ -121,6 +121,23 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
}
}
+ @Nonnull
+ private final FileConfiguration getFallback(@Nonnull LanguageFile file) {
+ Language language = getLanguage(SupportedLanguage.ENGLISH.getLanguageId());
+
+ if (language == null) {
+ throw new IllegalStateException("Fallback language \"en\" is missing!");
+ }
+
+ FileConfiguration fallback = language.getFile(file);
+
+ if (fallback != null) {
+ return fallback;
+ } else {
+ throw new IllegalStateException("Fallback file: \"" + file.getFilePath("en") + "\" is missing!");
+ }
+ }
+
@Nonnull
@Override
public String getMessage(@Nonnull String key) {
@@ -128,11 +145,10 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
Language language = getDefaultLanguage();
- String message = language == null ? null : language.getMessagesFile().getString(key);
+ String message = language == null ? null : language.getFile(LanguageFile.MESSAGES).getString(key);
if (message == null) {
- Language fallback = getLanguage(SupportedLanguage.ENGLISH.getLanguageId());
- return fallback.getMessagesFile().getString(key);
+ return getFallback(LanguageFile.MESSAGES).getString(key);
}
return message;
@@ -149,11 +165,10 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
return "NO LANGUAGE FOUND";
}
- String message = language.getMessagesFile().getString(key);
+ String message = language.getFile(LanguageFile.MESSAGES).getString(key);
if (message == null) {
- Language fallback = getLanguage(SupportedLanguage.ENGLISH.getLanguageId());
- return fallback.getMessagesFile().getString(key);
+ return getFallback(LanguageFile.MESSAGES).getString(key);
}
return message;
@@ -170,11 +185,10 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
return Collections.singletonList("NO LANGUAGE FOUND");
}
- List messages = language.getMessagesFile().getStringList(key);
+ List messages = language.getFile(LanguageFile.MESSAGES).getStringList(key);
if (messages.isEmpty()) {
- Language fallback = getLanguage(SupportedLanguage.ENGLISH.getLanguageId());
- return fallback.getMessagesFile().getStringList(key);
+ return getFallback(LanguageFile.MESSAGES).getStringList(key);
}
return messages;
@@ -200,11 +214,11 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
Language language = getLanguage(p);
- if (language == null || language.getResearchesFile() == null) {
+ if (language == null || language.getFile(LanguageFile.RESEARCHES) == null) {
return null;
}
- return language.getResearchesFile().getString(key.getNamespace() + '.' + key.getKey());
+ return language.getFile(LanguageFile.RESEARCHES).getString(key.getNamespace() + '.' + key.getKey());
}
@Nullable
@@ -214,11 +228,11 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
Language language = getLanguage(p);
- if (language == null || language.getCategoriesFile() == null) {
+ if (language == null || language.getFile(LanguageFile.CATEGORIES) == null) {
return null;
}
- return language.getCategoriesFile().getString(key.getNamespace() + '.' + key.getKey());
+ return language.getFile(LanguageFile.CATEGORIES).getString(key.getNamespace() + '.' + key.getKey());
}
@Nullable
@@ -228,13 +242,12 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
Language language = getLanguage(p);
- String value = language != null && language.getResourcesFile() != null ? language.getResourcesFile().getString(key) : null;
+ String value = language != null && language.getFile(LanguageFile.RESOURCES) != null ? language.getFile(LanguageFile.RESOURCES).getString(key) : null;
if (value != null) {
return value;
} else {
- Language fallback = getLanguage(SupportedLanguage.ENGLISH.getLanguageId());
- return fallback.getResourcesFile().getString(key);
+ return getFallback(LanguageFile.RESOURCES).getString(key);
}
}
@@ -247,15 +260,15 @@ public abstract class SlimefunLocalization extends Localization implements Keyed
ItemStack item = recipeType.toItem();
NamespacedKey key = recipeType.getKey();
- if (language == null || language.getRecipeTypesFile() == null || !language.getRecipeTypesFile().contains(key.getNamespace() + '.' + key.getKey())) {
+ if (language == null || language.getFile(LanguageFile.RECIPES) == null || !language.getFile(LanguageFile.RECIPES).contains(key.getNamespace() + '.' + key.getKey())) {
language = getLanguage("en");
}
- if (!language.getRecipeTypesFile().contains(key.getNamespace() + '.' + key.getKey())) {
+ if (!language.getFile(LanguageFile.RECIPES).contains(key.getNamespace() + '.' + key.getKey())) {
return item;
}
- FileConfiguration config = language.getRecipeTypesFile();
+ FileConfiguration config = language.getFile(LanguageFile.RECIPES);
return new CustomItem(item, meta -> {
meta.setDisplayName(ChatColor.AQUA + config.getString(key.getNamespace() + "." + key.getKey() + ".name"));
diff --git a/src/main/resources/languages/ar/categories_ar.yml b/src/main/resources/languages/ar/categories.yml
similarity index 100%
rename from src/main/resources/languages/ar/categories_ar.yml
rename to src/main/resources/languages/ar/categories.yml
diff --git a/src/main/resources/languages/ar/messages_ar.yml b/src/main/resources/languages/ar/messages.yml
similarity index 100%
rename from src/main/resources/languages/ar/messages_ar.yml
rename to src/main/resources/languages/ar/messages.yml
diff --git a/src/main/resources/languages/ar/researches_ar.yml b/src/main/resources/languages/ar/researches.yml
similarity index 100%
rename from src/main/resources/languages/ar/researches_ar.yml
rename to src/main/resources/languages/ar/researches.yml
diff --git a/src/main/resources/languages/ar/resources_ar.yml b/src/main/resources/languages/ar/resources.yml
similarity index 100%
rename from src/main/resources/languages/ar/resources_ar.yml
rename to src/main/resources/languages/ar/resources.yml
diff --git a/src/main/resources/languages/bg/categories_bg.yml b/src/main/resources/languages/bg/categories.yml
similarity index 100%
rename from src/main/resources/languages/bg/categories_bg.yml
rename to src/main/resources/languages/bg/categories.yml
diff --git a/src/main/resources/languages/bg/messages_bg.yml b/src/main/resources/languages/bg/messages.yml
similarity index 100%
rename from src/main/resources/languages/bg/messages_bg.yml
rename to src/main/resources/languages/bg/messages.yml
diff --git a/src/main/resources/languages/bg/recipes_bg.yml b/src/main/resources/languages/bg/recipes.yml
similarity index 100%
rename from src/main/resources/languages/bg/recipes_bg.yml
rename to src/main/resources/languages/bg/recipes.yml
diff --git a/src/main/resources/languages/bg/resources_bg.yml b/src/main/resources/languages/bg/resources.yml
similarity index 100%
rename from src/main/resources/languages/bg/resources_bg.yml
rename to src/main/resources/languages/bg/resources.yml
diff --git a/src/main/resources/languages/cs/categories_cs.yml b/src/main/resources/languages/cs/categories.yml
similarity index 100%
rename from src/main/resources/languages/cs/categories_cs.yml
rename to src/main/resources/languages/cs/categories.yml
diff --git a/src/main/resources/languages/cs/messages_cs.yml b/src/main/resources/languages/cs/messages.yml
similarity index 100%
rename from src/main/resources/languages/cs/messages_cs.yml
rename to src/main/resources/languages/cs/messages.yml
diff --git a/src/main/resources/languages/cs/recipes_cs.yml b/src/main/resources/languages/cs/recipes.yml
similarity index 100%
rename from src/main/resources/languages/cs/recipes_cs.yml
rename to src/main/resources/languages/cs/recipes.yml
diff --git a/src/main/resources/languages/cs/researches_cs.yml b/src/main/resources/languages/cs/researches.yml
similarity index 100%
rename from src/main/resources/languages/cs/researches_cs.yml
rename to src/main/resources/languages/cs/researches.yml
diff --git a/src/main/resources/languages/cs/resources_cs.yml b/src/main/resources/languages/cs/resources.yml
similarity index 100%
rename from src/main/resources/languages/cs/resources_cs.yml
rename to src/main/resources/languages/cs/resources.yml
diff --git a/src/main/resources/languages/da/categories_da.yml b/src/main/resources/languages/da/categories.yml
similarity index 100%
rename from src/main/resources/languages/da/categories_da.yml
rename to src/main/resources/languages/da/categories.yml
diff --git a/src/main/resources/languages/de/categories_de.yml b/src/main/resources/languages/de/categories.yml
similarity index 100%
rename from src/main/resources/languages/de/categories_de.yml
rename to src/main/resources/languages/de/categories.yml
diff --git a/src/main/resources/languages/de/messages_de.yml b/src/main/resources/languages/de/messages.yml
similarity index 100%
rename from src/main/resources/languages/de/messages_de.yml
rename to src/main/resources/languages/de/messages.yml
diff --git a/src/main/resources/languages/de/recipes_de.yml b/src/main/resources/languages/de/recipes.yml
similarity index 100%
rename from src/main/resources/languages/de/recipes_de.yml
rename to src/main/resources/languages/de/recipes.yml
diff --git a/src/main/resources/languages/de/researches_de.yml b/src/main/resources/languages/de/researches.yml
similarity index 100%
rename from src/main/resources/languages/de/researches_de.yml
rename to src/main/resources/languages/de/researches.yml
diff --git a/src/main/resources/languages/de/resources_de.yml b/src/main/resources/languages/de/resources.yml
similarity index 100%
rename from src/main/resources/languages/de/resources_de.yml
rename to src/main/resources/languages/de/resources.yml
diff --git a/src/main/resources/languages/en/categories_en.yml b/src/main/resources/languages/en/categories.yml
similarity index 100%
rename from src/main/resources/languages/en/categories_en.yml
rename to src/main/resources/languages/en/categories.yml
diff --git a/src/main/resources/languages/en/messages_en.yml b/src/main/resources/languages/en/messages.yml
similarity index 100%
rename from src/main/resources/languages/en/messages_en.yml
rename to src/main/resources/languages/en/messages.yml
diff --git a/src/main/resources/languages/en/recipes_en.yml b/src/main/resources/languages/en/recipes.yml
similarity index 100%
rename from src/main/resources/languages/en/recipes_en.yml
rename to src/main/resources/languages/en/recipes.yml
diff --git a/src/main/resources/languages/en/researches_en.yml b/src/main/resources/languages/en/researches.yml
similarity index 100%
rename from src/main/resources/languages/en/researches_en.yml
rename to src/main/resources/languages/en/researches.yml
diff --git a/src/main/resources/languages/en/resources_en.yml b/src/main/resources/languages/en/resources.yml
similarity index 100%
rename from src/main/resources/languages/en/resources_en.yml
rename to src/main/resources/languages/en/resources.yml
diff --git a/src/main/resources/languages/es/categories_es.yml b/src/main/resources/languages/es/categories.yml
similarity index 100%
rename from src/main/resources/languages/es/categories_es.yml
rename to src/main/resources/languages/es/categories.yml
diff --git a/src/main/resources/languages/es/messages_es.yml b/src/main/resources/languages/es/messages.yml
similarity index 100%
rename from src/main/resources/languages/es/messages_es.yml
rename to src/main/resources/languages/es/messages.yml
diff --git a/src/main/resources/languages/es/recipes_es.yml b/src/main/resources/languages/es/recipes.yml
similarity index 100%
rename from src/main/resources/languages/es/recipes_es.yml
rename to src/main/resources/languages/es/recipes.yml
diff --git a/src/main/resources/languages/es/researches_es.yml b/src/main/resources/languages/es/researches.yml
similarity index 100%
rename from src/main/resources/languages/es/researches_es.yml
rename to src/main/resources/languages/es/researches.yml
diff --git a/src/main/resources/languages/es/resources_es.yml b/src/main/resources/languages/es/resources.yml
similarity index 100%
rename from src/main/resources/languages/es/resources_es.yml
rename to src/main/resources/languages/es/resources.yml
diff --git a/src/main/resources/languages/fi/categories_fi.yml b/src/main/resources/languages/fi/categories.yml
similarity index 100%
rename from src/main/resources/languages/fi/categories_fi.yml
rename to src/main/resources/languages/fi/categories.yml
diff --git a/src/main/resources/languages/fr/categories_fr.yml b/src/main/resources/languages/fr/categories.yml
similarity index 100%
rename from src/main/resources/languages/fr/categories_fr.yml
rename to src/main/resources/languages/fr/categories.yml
diff --git a/src/main/resources/languages/fr/messages_fr.yml b/src/main/resources/languages/fr/messages.yml
similarity index 100%
rename from src/main/resources/languages/fr/messages_fr.yml
rename to src/main/resources/languages/fr/messages.yml
diff --git a/src/main/resources/languages/fr/recipes_fr.yml b/src/main/resources/languages/fr/recipes.yml
similarity index 100%
rename from src/main/resources/languages/fr/recipes_fr.yml
rename to src/main/resources/languages/fr/recipes.yml
diff --git a/src/main/resources/languages/fr/researches_fr.yml b/src/main/resources/languages/fr/researches.yml
similarity index 100%
rename from src/main/resources/languages/fr/researches_fr.yml
rename to src/main/resources/languages/fr/researches.yml
diff --git a/src/main/resources/languages/fr/resources_fr.yml b/src/main/resources/languages/fr/resources.yml
similarity index 100%
rename from src/main/resources/languages/fr/resources_fr.yml
rename to src/main/resources/languages/fr/resources.yml
diff --git a/src/main/resources/languages/he/categories_he.yml b/src/main/resources/languages/he/categories.yml
similarity index 100%
rename from src/main/resources/languages/he/categories_he.yml
rename to src/main/resources/languages/he/categories.yml
diff --git a/src/main/resources/languages/he/messages_he.yml b/src/main/resources/languages/he/messages.yml
similarity index 100%
rename from src/main/resources/languages/he/messages_he.yml
rename to src/main/resources/languages/he/messages.yml
diff --git a/src/main/resources/languages/he/researches_he.yml b/src/main/resources/languages/he/researches.yml
similarity index 100%
rename from src/main/resources/languages/he/researches_he.yml
rename to src/main/resources/languages/he/researches.yml
diff --git a/src/main/resources/languages/he/resources_he.yml b/src/main/resources/languages/he/resources.yml
similarity index 100%
rename from src/main/resources/languages/he/resources_he.yml
rename to src/main/resources/languages/he/resources.yml
diff --git a/src/main/resources/languages/hu/categories_hu.yml b/src/main/resources/languages/hu/categories.yml
similarity index 100%
rename from src/main/resources/languages/hu/categories_hu.yml
rename to src/main/resources/languages/hu/categories.yml
diff --git a/src/main/resources/languages/hu/messages_hu.yml b/src/main/resources/languages/hu/messages.yml
similarity index 100%
rename from src/main/resources/languages/hu/messages_hu.yml
rename to src/main/resources/languages/hu/messages.yml
diff --git a/src/main/resources/languages/hu/recipes_hu.yml b/src/main/resources/languages/hu/recipes.yml
similarity index 100%
rename from src/main/resources/languages/hu/recipes_hu.yml
rename to src/main/resources/languages/hu/recipes.yml
diff --git a/src/main/resources/languages/hu/researches_hu.yml b/src/main/resources/languages/hu/researches.yml
similarity index 100%
rename from src/main/resources/languages/hu/researches_hu.yml
rename to src/main/resources/languages/hu/researches.yml
diff --git a/src/main/resources/languages/hu/resources_hu.yml b/src/main/resources/languages/hu/resources.yml
similarity index 100%
rename from src/main/resources/languages/hu/resources_hu.yml
rename to src/main/resources/languages/hu/resources.yml
diff --git a/src/main/resources/languages/id/categories_id.yml b/src/main/resources/languages/id/categories.yml
similarity index 100%
rename from src/main/resources/languages/id/categories_id.yml
rename to src/main/resources/languages/id/categories.yml
diff --git a/src/main/resources/languages/id/messages_id.yml b/src/main/resources/languages/id/messages.yml
similarity index 100%
rename from src/main/resources/languages/id/messages_id.yml
rename to src/main/resources/languages/id/messages.yml
diff --git a/src/main/resources/languages/id/researches_id.yml b/src/main/resources/languages/id/researches.yml
similarity index 100%
rename from src/main/resources/languages/id/researches_id.yml
rename to src/main/resources/languages/id/researches.yml
diff --git a/src/main/resources/languages/id/resources_id.yml b/src/main/resources/languages/id/resources.yml
similarity index 100%
rename from src/main/resources/languages/id/resources_id.yml
rename to src/main/resources/languages/id/resources.yml
diff --git a/src/main/resources/languages/it/categories_it.yml b/src/main/resources/languages/it/categories.yml
similarity index 100%
rename from src/main/resources/languages/it/categories_it.yml
rename to src/main/resources/languages/it/categories.yml
diff --git a/src/main/resources/languages/it/messages_it.yml b/src/main/resources/languages/it/messages.yml
similarity index 100%
rename from src/main/resources/languages/it/messages_it.yml
rename to src/main/resources/languages/it/messages.yml
diff --git a/src/main/resources/languages/it/recipes_it.yml b/src/main/resources/languages/it/recipes.yml
similarity index 100%
rename from src/main/resources/languages/it/recipes_it.yml
rename to src/main/resources/languages/it/recipes.yml
diff --git a/src/main/resources/languages/it/researches_it.yml b/src/main/resources/languages/it/researches.yml
similarity index 100%
rename from src/main/resources/languages/it/researches_it.yml
rename to src/main/resources/languages/it/researches.yml
diff --git a/src/main/resources/languages/it/resources_it.yml b/src/main/resources/languages/it/resources.yml
similarity index 100%
rename from src/main/resources/languages/it/resources_it.yml
rename to src/main/resources/languages/it/resources.yml
diff --git a/src/main/resources/languages/ja/categories_ja.yml b/src/main/resources/languages/ja/categories.yml
similarity index 100%
rename from src/main/resources/languages/ja/categories_ja.yml
rename to src/main/resources/languages/ja/categories.yml
diff --git a/src/main/resources/languages/ja/messages_ja.yml b/src/main/resources/languages/ja/messages.yml
similarity index 100%
rename from src/main/resources/languages/ja/messages_ja.yml
rename to src/main/resources/languages/ja/messages.yml
diff --git a/src/main/resources/languages/ja/recipes_ja.yml b/src/main/resources/languages/ja/recipes.yml
similarity index 100%
rename from src/main/resources/languages/ja/recipes_ja.yml
rename to src/main/resources/languages/ja/recipes.yml
diff --git a/src/main/resources/languages/ja/researches_ja.yml b/src/main/resources/languages/ja/researches.yml
similarity index 100%
rename from src/main/resources/languages/ja/researches_ja.yml
rename to src/main/resources/languages/ja/researches.yml
diff --git a/src/main/resources/languages/ja/resources_ja.yml b/src/main/resources/languages/ja/resources.yml
similarity index 100%
rename from src/main/resources/languages/ja/resources_ja.yml
rename to src/main/resources/languages/ja/resources.yml
diff --git a/src/main/resources/languages/ko/categories_ko.yml b/src/main/resources/languages/ko/categories.yml
similarity index 100%
rename from src/main/resources/languages/ko/categories_ko.yml
rename to src/main/resources/languages/ko/categories.yml
diff --git a/src/main/resources/languages/ko/messages_ko.yml b/src/main/resources/languages/ko/messages.yml
similarity index 100%
rename from src/main/resources/languages/ko/messages_ko.yml
rename to src/main/resources/languages/ko/messages.yml
diff --git a/src/main/resources/languages/ko/recipes_ko.yml b/src/main/resources/languages/ko/recipes.yml
similarity index 100%
rename from src/main/resources/languages/ko/recipes_ko.yml
rename to src/main/resources/languages/ko/recipes.yml
diff --git a/src/main/resources/languages/ko/researches_ko.yml b/src/main/resources/languages/ko/researches.yml
similarity index 100%
rename from src/main/resources/languages/ko/researches_ko.yml
rename to src/main/resources/languages/ko/researches.yml
diff --git a/src/main/resources/languages/ko/resources_ko.yml b/src/main/resources/languages/ko/resources.yml
similarity index 100%
rename from src/main/resources/languages/ko/resources_ko.yml
rename to src/main/resources/languages/ko/resources.yml
diff --git a/src/main/resources/languages/lv/messages_lv.yml b/src/main/resources/languages/lv/messages.yml
similarity index 100%
rename from src/main/resources/languages/lv/messages_lv.yml
rename to src/main/resources/languages/lv/messages.yml
diff --git a/src/main/resources/languages/mk/categories_mk.yml b/src/main/resources/languages/mk/categories.yml
similarity index 100%
rename from src/main/resources/languages/mk/categories_mk.yml
rename to src/main/resources/languages/mk/categories.yml
diff --git a/src/main/resources/languages/mk/recipes_mk.yml b/src/main/resources/languages/mk/recipes.yml
similarity index 100%
rename from src/main/resources/languages/mk/recipes_mk.yml
rename to src/main/resources/languages/mk/recipes.yml
diff --git a/src/main/resources/languages/mk/resources_mk.yml b/src/main/resources/languages/mk/resources.yml
similarity index 100%
rename from src/main/resources/languages/mk/resources_mk.yml
rename to src/main/resources/languages/mk/resources.yml
diff --git a/src/main/resources/languages/nl/categories_nl.yml b/src/main/resources/languages/nl/categories.yml
similarity index 100%
rename from src/main/resources/languages/nl/categories_nl.yml
rename to src/main/resources/languages/nl/categories.yml
diff --git a/src/main/resources/languages/nl/messages_nl.yml b/src/main/resources/languages/nl/messages.yml
similarity index 100%
rename from src/main/resources/languages/nl/messages_nl.yml
rename to src/main/resources/languages/nl/messages.yml
diff --git a/src/main/resources/languages/nl/recipes_nl.yml b/src/main/resources/languages/nl/recipes.yml
similarity index 100%
rename from src/main/resources/languages/nl/recipes_nl.yml
rename to src/main/resources/languages/nl/recipes.yml
diff --git a/src/main/resources/languages/nl/resources_nl.yml b/src/main/resources/languages/nl/resources.yml
similarity index 100%
rename from src/main/resources/languages/nl/resources_nl.yml
rename to src/main/resources/languages/nl/resources.yml
diff --git a/src/main/resources/languages/pl/categories_pl.yml b/src/main/resources/languages/pl/categories.yml
similarity index 100%
rename from src/main/resources/languages/pl/categories_pl.yml
rename to src/main/resources/languages/pl/categories.yml
diff --git a/src/main/resources/languages/pl/messages_pl.yml b/src/main/resources/languages/pl/messages.yml
similarity index 100%
rename from src/main/resources/languages/pl/messages_pl.yml
rename to src/main/resources/languages/pl/messages.yml
diff --git a/src/main/resources/languages/pl/researches_pl.yml b/src/main/resources/languages/pl/researches.yml
similarity index 100%
rename from src/main/resources/languages/pl/researches_pl.yml
rename to src/main/resources/languages/pl/researches.yml
diff --git a/src/main/resources/languages/pl/resources_pl.yml b/src/main/resources/languages/pl/resources.yml
similarity index 100%
rename from src/main/resources/languages/pl/resources_pl.yml
rename to src/main/resources/languages/pl/resources.yml
diff --git a/src/main/resources/languages/pt_br/categories_pt-BR.yml b/src/main/resources/languages/pt-BR/categories.yml
similarity index 100%
rename from src/main/resources/languages/pt_br/categories_pt-BR.yml
rename to src/main/resources/languages/pt-BR/categories.yml
diff --git a/src/main/resources/languages/pt_br/messages_pt-BR.yml b/src/main/resources/languages/pt-BR/messages.yml
similarity index 100%
rename from src/main/resources/languages/pt_br/messages_pt-BR.yml
rename to src/main/resources/languages/pt-BR/messages.yml
diff --git a/src/main/resources/languages/pt_br/researches_pt-BR.yml b/src/main/resources/languages/pt-BR/researches.yml
similarity index 100%
rename from src/main/resources/languages/pt_br/researches_pt-BR.yml
rename to src/main/resources/languages/pt-BR/researches.yml
diff --git a/src/main/resources/languages/pt_br/resources_pt-BR.yml b/src/main/resources/languages/pt-BR/resources.yml
similarity index 100%
rename from src/main/resources/languages/pt_br/resources_pt-BR.yml
rename to src/main/resources/languages/pt-BR/resources.yml
diff --git a/src/main/resources/languages/pt/categories_pt.yml b/src/main/resources/languages/pt/categories.yml
similarity index 100%
rename from src/main/resources/languages/pt/categories_pt.yml
rename to src/main/resources/languages/pt/categories.yml
diff --git a/src/main/resources/languages/pt/resources_pt.yml b/src/main/resources/languages/pt/resources.yml
similarity index 100%
rename from src/main/resources/languages/pt/resources_pt.yml
rename to src/main/resources/languages/pt/resources.yml
diff --git a/src/main/resources/languages/ru/categories_ru.yml b/src/main/resources/languages/ru/categories.yml
similarity index 100%
rename from src/main/resources/languages/ru/categories_ru.yml
rename to src/main/resources/languages/ru/categories.yml
diff --git a/src/main/resources/languages/ru/messages_ru.yml b/src/main/resources/languages/ru/messages.yml
similarity index 100%
rename from src/main/resources/languages/ru/messages_ru.yml
rename to src/main/resources/languages/ru/messages.yml
diff --git a/src/main/resources/languages/ru/recipes_ru.yml b/src/main/resources/languages/ru/recipes.yml
similarity index 100%
rename from src/main/resources/languages/ru/recipes_ru.yml
rename to src/main/resources/languages/ru/recipes.yml
diff --git a/src/main/resources/languages/ru/researches_ru.yml b/src/main/resources/languages/ru/researches.yml
similarity index 100%
rename from src/main/resources/languages/ru/researches_ru.yml
rename to src/main/resources/languages/ru/researches.yml
diff --git a/src/main/resources/languages/ru/resources_ru.yml b/src/main/resources/languages/ru/resources.yml
similarity index 100%
rename from src/main/resources/languages/ru/resources_ru.yml
rename to src/main/resources/languages/ru/resources.yml
diff --git a/src/main/resources/languages/sk/categories_sk.yml b/src/main/resources/languages/sk/categories.yml
similarity index 100%
rename from src/main/resources/languages/sk/categories_sk.yml
rename to src/main/resources/languages/sk/categories.yml
diff --git a/src/main/resources/languages/sk/messages_sk.yml b/src/main/resources/languages/sk/messages.yml
similarity index 100%
rename from src/main/resources/languages/sk/messages_sk.yml
rename to src/main/resources/languages/sk/messages.yml
diff --git a/src/main/resources/languages/sk/recipes_sk.yml b/src/main/resources/languages/sk/recipes.yml
similarity index 100%
rename from src/main/resources/languages/sk/recipes_sk.yml
rename to src/main/resources/languages/sk/recipes.yml
diff --git a/src/main/resources/languages/sk/researches_sk.yml b/src/main/resources/languages/sk/researches.yml
similarity index 100%
rename from src/main/resources/languages/sk/researches_sk.yml
rename to src/main/resources/languages/sk/researches.yml
diff --git a/src/main/resources/languages/sk/resources_sk.yml b/src/main/resources/languages/sk/resources.yml
similarity index 100%
rename from src/main/resources/languages/sk/resources_sk.yml
rename to src/main/resources/languages/sk/resources.yml
diff --git a/src/main/resources/languages/sv/categories_sv.yml b/src/main/resources/languages/sv/categories.yml
similarity index 100%
rename from src/main/resources/languages/sv/categories_sv.yml
rename to src/main/resources/languages/sv/categories.yml
diff --git a/src/main/resources/languages/sv/messages_sv.yml b/src/main/resources/languages/sv/messages.yml
similarity index 100%
rename from src/main/resources/languages/sv/messages_sv.yml
rename to src/main/resources/languages/sv/messages.yml
diff --git a/src/main/resources/languages/sv/researches_sv.yml b/src/main/resources/languages/sv/researches.yml
similarity index 100%
rename from src/main/resources/languages/sv/researches_sv.yml
rename to src/main/resources/languages/sv/researches.yml
diff --git a/src/main/resources/languages/sv/resources_sv.yml b/src/main/resources/languages/sv/resources.yml
similarity index 100%
rename from src/main/resources/languages/sv/resources_sv.yml
rename to src/main/resources/languages/sv/resources.yml
diff --git a/src/main/resources/languages/th/categories_th.yml b/src/main/resources/languages/th/categories.yml
similarity index 100%
rename from src/main/resources/languages/th/categories_th.yml
rename to src/main/resources/languages/th/categories.yml
diff --git a/src/main/resources/languages/th/messages_th.yml b/src/main/resources/languages/th/messages.yml
similarity index 100%
rename from src/main/resources/languages/th/messages_th.yml
rename to src/main/resources/languages/th/messages.yml
diff --git a/src/main/resources/languages/th/recipes_th.yml b/src/main/resources/languages/th/recipes.yml
similarity index 100%
rename from src/main/resources/languages/th/recipes_th.yml
rename to src/main/resources/languages/th/recipes.yml
diff --git a/src/main/resources/languages/th/researches_th.yml b/src/main/resources/languages/th/researches.yml
similarity index 100%
rename from src/main/resources/languages/th/researches_th.yml
rename to src/main/resources/languages/th/researches.yml
diff --git a/src/main/resources/languages/th/resources_th.yml b/src/main/resources/languages/th/resources.yml
similarity index 100%
rename from src/main/resources/languages/th/resources_th.yml
rename to src/main/resources/languages/th/resources.yml
diff --git a/src/main/resources/languages/tl/categories_tl.yml b/src/main/resources/languages/tl/categories.yml
similarity index 100%
rename from src/main/resources/languages/tl/categories_tl.yml
rename to src/main/resources/languages/tl/categories.yml
diff --git a/src/main/resources/languages/tl/messages_tl.yml b/src/main/resources/languages/tl/messages.yml
similarity index 100%
rename from src/main/resources/languages/tl/messages_tl.yml
rename to src/main/resources/languages/tl/messages.yml
diff --git a/src/main/resources/languages/tl/recipes_tl.yml b/src/main/resources/languages/tl/recipes.yml
similarity index 100%
rename from src/main/resources/languages/tl/recipes_tl.yml
rename to src/main/resources/languages/tl/recipes.yml
diff --git a/src/main/resources/languages/tl/researches_tl.yml b/src/main/resources/languages/tl/researches.yml
similarity index 100%
rename from src/main/resources/languages/tl/researches_tl.yml
rename to src/main/resources/languages/tl/researches.yml
diff --git a/src/main/resources/languages/tl/resources_tl.yml b/src/main/resources/languages/tl/resources.yml
similarity index 100%
rename from src/main/resources/languages/tl/resources_tl.yml
rename to src/main/resources/languages/tl/resources.yml
diff --git a/src/main/resources/languages/tr/categories_tr.yml b/src/main/resources/languages/tr/categories.yml
similarity index 100%
rename from src/main/resources/languages/tr/categories_tr.yml
rename to src/main/resources/languages/tr/categories.yml
diff --git a/src/main/resources/languages/tr/messages_tr.yml b/src/main/resources/languages/tr/messages.yml
similarity index 100%
rename from src/main/resources/languages/tr/messages_tr.yml
rename to src/main/resources/languages/tr/messages.yml
diff --git a/src/main/resources/languages/tr/recipes_tr.yml b/src/main/resources/languages/tr/recipes.yml
similarity index 100%
rename from src/main/resources/languages/tr/recipes_tr.yml
rename to src/main/resources/languages/tr/recipes.yml
diff --git a/src/main/resources/languages/tr/researches_tr.yml b/src/main/resources/languages/tr/researches.yml
similarity index 100%
rename from src/main/resources/languages/tr/researches_tr.yml
rename to src/main/resources/languages/tr/researches.yml
diff --git a/src/main/resources/languages/tr/resources_tr.yml b/src/main/resources/languages/tr/resources.yml
similarity index 100%
rename from src/main/resources/languages/tr/resources_tr.yml
rename to src/main/resources/languages/tr/resources.yml
diff --git a/src/main/resources/languages/uk/categories_uk.yml b/src/main/resources/languages/uk/categories.yml
similarity index 100%
rename from src/main/resources/languages/uk/categories_uk.yml
rename to src/main/resources/languages/uk/categories.yml
diff --git a/src/main/resources/languages/uk/messages_uk.yml b/src/main/resources/languages/uk/messages.yml
similarity index 100%
rename from src/main/resources/languages/uk/messages_uk.yml
rename to src/main/resources/languages/uk/messages.yml
diff --git a/src/main/resources/languages/uk/recipes_uk.yml b/src/main/resources/languages/uk/recipes.yml
similarity index 100%
rename from src/main/resources/languages/uk/recipes_uk.yml
rename to src/main/resources/languages/uk/recipes.yml
diff --git a/src/main/resources/languages/uk/researches_uk.yml b/src/main/resources/languages/uk/researches.yml
similarity index 100%
rename from src/main/resources/languages/uk/researches_uk.yml
rename to src/main/resources/languages/uk/researches.yml
diff --git a/src/main/resources/languages/uk/resources_uk.yml b/src/main/resources/languages/uk/resources.yml
similarity index 100%
rename from src/main/resources/languages/uk/resources_uk.yml
rename to src/main/resources/languages/uk/resources.yml
diff --git a/src/main/resources/languages/vi/categories_vi.yml b/src/main/resources/languages/vi/categories.yml
similarity index 100%
rename from src/main/resources/languages/vi/categories_vi.yml
rename to src/main/resources/languages/vi/categories.yml
diff --git a/src/main/resources/languages/vi/messages_vi.yml b/src/main/resources/languages/vi/messages.yml
similarity index 100%
rename from src/main/resources/languages/vi/messages_vi.yml
rename to src/main/resources/languages/vi/messages.yml
diff --git a/src/main/resources/languages/vi/recipes_vi.yml b/src/main/resources/languages/vi/recipes.yml
similarity index 100%
rename from src/main/resources/languages/vi/recipes_vi.yml
rename to src/main/resources/languages/vi/recipes.yml
diff --git a/src/main/resources/languages/vi/researches_vi.yml b/src/main/resources/languages/vi/researches.yml
similarity index 100%
rename from src/main/resources/languages/vi/researches_vi.yml
rename to src/main/resources/languages/vi/researches.yml
diff --git a/src/main/resources/languages/vi/resources_vi.yml b/src/main/resources/languages/vi/resources.yml
similarity index 100%
rename from src/main/resources/languages/vi/resources_vi.yml
rename to src/main/resources/languages/vi/resources.yml
diff --git a/src/main/resources/languages/zh_cn/categories_zh-CN.yml b/src/main/resources/languages/zh-CN/categories.yml
similarity index 100%
rename from src/main/resources/languages/zh_cn/categories_zh-CN.yml
rename to src/main/resources/languages/zh-CN/categories.yml
diff --git a/src/main/resources/languages/zh_cn/messages_zh-CN.yml b/src/main/resources/languages/zh-CN/messages.yml
similarity index 100%
rename from src/main/resources/languages/zh_cn/messages_zh-CN.yml
rename to src/main/resources/languages/zh-CN/messages.yml
diff --git a/src/main/resources/languages/zh_cn/recipes_zh-CN.yml b/src/main/resources/languages/zh-CN/recipes.yml
similarity index 100%
rename from src/main/resources/languages/zh_cn/recipes_zh-CN.yml
rename to src/main/resources/languages/zh-CN/recipes.yml
diff --git a/src/main/resources/languages/zh_cn/researches_zh-CN.yml b/src/main/resources/languages/zh-CN/researches.yml
similarity index 100%
rename from src/main/resources/languages/zh_cn/researches_zh-CN.yml
rename to src/main/resources/languages/zh-CN/researches.yml
diff --git a/src/main/resources/languages/zh_cn/resources_zh-CN.yml b/src/main/resources/languages/zh-CN/resources.yml
similarity index 100%
rename from src/main/resources/languages/zh_cn/resources_zh-CN.yml
rename to src/main/resources/languages/zh-CN/resources.yml
diff --git a/src/main/resources/languages/zh_tw/categories_zh-TW.yml b/src/main/resources/languages/zh-TW/categories.yml
similarity index 100%
rename from src/main/resources/languages/zh_tw/categories_zh-TW.yml
rename to src/main/resources/languages/zh-TW/categories.yml
diff --git a/src/main/resources/languages/zh_tw/messages_zh-TW.yml b/src/main/resources/languages/zh-TW/messages.yml
similarity index 100%
rename from src/main/resources/languages/zh_tw/messages_zh-TW.yml
rename to src/main/resources/languages/zh-TW/messages.yml
diff --git a/src/main/resources/languages/zh_tw/recipes_zh-TW.yml b/src/main/resources/languages/zh-TW/recipes.yml
similarity index 100%
rename from src/main/resources/languages/zh_tw/recipes_zh-TW.yml
rename to src/main/resources/languages/zh-TW/recipes.yml
diff --git a/src/main/resources/languages/zh_tw/researches_zh-TW.yml b/src/main/resources/languages/zh-TW/researches.yml
similarity index 100%
rename from src/main/resources/languages/zh_tw/researches_zh-TW.yml
rename to src/main/resources/languages/zh-TW/researches.yml
diff --git a/src/main/resources/languages/zh_tw/resources_zh-TW.yml b/src/main/resources/languages/zh-TW/resources.yml
similarity index 100%
rename from src/main/resources/languages/zh_tw/resources_zh-TW.yml
rename to src/main/resources/languages/zh-TW/resources.yml
diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/registration/TestItemSetup.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/registration/TestItemSetup.java
index 9af935b77..5cfe31ab6 100644
--- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/registration/TestItemSetup.java
+++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/registration/TestItemSetup.java
@@ -73,7 +73,7 @@ class TestItemSetup {
@Order(value = 4)
@DisplayName("Test whether every Category is added to the translation files")
void testCategoryTranslations() throws IOException {
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/categories_en.yml"), StandardCharsets.UTF_8))) {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/en/categories.yml"), StandardCharsets.UTF_8))) {
FileConfiguration config = YamlConfiguration.loadConfiguration(reader);
for (Category category : SlimefunPlugin.getRegistry().getCategories()) {
diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/researches/TestResearchSetup.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/researches/TestResearchSetup.java
index 1af5501a1..dfc4df625 100644
--- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/researches/TestResearchSetup.java
+++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/researches/TestResearchSetup.java
@@ -53,7 +53,7 @@ class TestResearchSetup {
@Order(value = 2)
@DisplayName("Test if Researches have a translation")
void testResearchTranslations() throws IOException {
- try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/researches_en.yml"), StandardCharsets.UTF_8))) {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/languages/en/researches.yml"), StandardCharsets.UTF_8))) {
FileConfiguration config = YamlConfiguration.loadConfiguration(reader);
for (Research research : SlimefunPlugin.getRegistry().getResearches()) {