feat: 添加 loadTranslation API

This commit is contained in:
2024-08-09 04:15:23 +08:00
parent 00d582a5ea
commit 3955f352c6

View File

@@ -1,6 +1,7 @@
package cn.hamster3.mc.plugin.core.common.util; package cn.hamster3.mc.plugin.core.common.util;
import cn.hamster3.mc.plugin.core.common.config.ConfigSection; import cn.hamster3.mc.plugin.core.common.config.ConfigSection;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
@@ -8,42 +9,42 @@ import net.kyori.adventure.key.Key;
import net.kyori.adventure.sound.Sound; import net.kyori.adventure.sound.Sound;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.kyori.adventure.title.Title; import net.kyori.adventure.title.Title;
import net.kyori.adventure.translation.TranslationRegistry;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.text.MessageFormat;
import java.time.Duration; import java.time.Duration;
import java.util.zip.ZipEntry; import java.util.HashMap;
import java.util.zip.ZipOutputStream; import java.util.Locale;
import java.util.Map;
import java.util.Objects;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final class CoreUtils { public final class CoreUtils {
private CoreUtils() { private CoreUtils() {
} }
public static void zipCompressionFolder(@NotNull File folder, @NotNull File zipFile) throws IOException { @NotNull
try (ZipOutputStream stream = new ZipOutputStream(Files.newOutputStream(zipFile.toPath()))) { public static DataSource getDataSource(@NotNull ConfigSection datasourceConfig) {
putFileToZipStream(stream, "", folder); HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName(datasourceConfig.getString("driver"));
hikariConfig.setJdbcUrl(datasourceConfig.getString("url"));
hikariConfig.setUsername(datasourceConfig.getString("username"));
hikariConfig.setPassword(datasourceConfig.getString("password"));
hikariConfig.setMaximumPoolSize(datasourceConfig.getInt("maximum-pool-size", 3));
hikariConfig.setMinimumIdle(datasourceConfig.getInt("minimum-idle", 1));
long keepAliveTime = datasourceConfig.getLong("keep-alive-time", 0);
if (keepAliveTime > 5000) {
hikariConfig.setKeepaliveTime(keepAliveTime);
} }
} hikariConfig.setIdleTimeout(datasourceConfig.getLong("idle-timeout", 10 * 60 * 1000));
hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000));
public static void putFileToZipStream(@NotNull ZipOutputStream stream, @NotNull String path, @NotNull File file) throws IOException { hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000));
if (file.isDirectory()) { hikariConfig.setPoolName(datasourceConfig.getString("name", "HamsterCore-Pool"));
File[] files = file.listFiles(); return new HikariDataSource(hikariConfig);
if (files == null) {
throw new IOException();
}
for (File subFile : files) {
putFileToZipStream(stream, path + file.getName() + "/", subFile);
}
return;
}
ZipEntry entry = new ZipEntry(path + file.getName());
stream.putNextEntry(entry);
stream.write(Files.readAllBytes(file.toPath()));
stream.closeEntry();
} }
/** /**
@@ -125,24 +126,30 @@ public final class CoreUtils {
); );
} }
@NotNull public static void loadTranslation(@NotNull TranslationRegistry registry, @NotNull File folder) throws IOException {
public static DataSource getDataSource(@NotNull ConfigSection datasourceConfig) { for (File subFile : Objects.requireNonNull(folder.listFiles())) {
HikariConfig hikariConfig = new HikariConfig(); String filename = subFile.getName().split("\\.")[0];
hikariConfig.setDriverClassName(datasourceConfig.getString("driver")); String[] args = filename.split("_");
hikariConfig.setJdbcUrl(datasourceConfig.getString("url")); Locale locale = new Locale.Builder().setLanguage(args[0]).setRegion(args[1]).build();
hikariConfig.setUsername(datasourceConfig.getString("username")); YamlConfig config = YamlConfig.load(subFile);
hikariConfig.setPassword(datasourceConfig.getString("password")); Map<String, MessageFormat> map = loadTranslation(locale, config, "");
hikariConfig.setMaximumPoolSize(datasourceConfig.getInt("maximum-pool-size", 3)); registry.registerAll(locale, map);
hikariConfig.setMinimumIdle(datasourceConfig.getInt("minimum-idle", 1));
long keepAliveTime = datasourceConfig.getLong("keep-alive-time", 0);
if (keepAliveTime > 5000) {
hikariConfig.setKeepaliveTime(keepAliveTime);
} }
hikariConfig.setIdleTimeout(datasourceConfig.getLong("idle-timeout", 10 * 60 * 1000)); }
hikariConfig.setMaxLifetime(datasourceConfig.getLong("max-lifetime", 30 * 60 * 1000));
hikariConfig.setValidationTimeout(datasourceConfig.getLong("validation-timeout", 5000)); public static Map<String, MessageFormat> loadTranslation(@NotNull Locale locale, @NotNull ConfigSection config, @NotNull String prefix) {
hikariConfig.setPoolName(datasourceConfig.getString("name", "HamsterCore-Pool")); HashMap<String, MessageFormat> result = new HashMap<>();
return new HikariDataSource(hikariConfig); for (Map.Entry<String, Object> entry : config.getMap().entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
if (value instanceof String) {
String string = (String) value;
result.put(prefix + key, new MessageFormat(string, locale));
} else if (value instanceof Map) {
loadTranslation(locale, config.getSectionOrCreate(key), "$prefix$key.");
}
}
return result;
} }
/** /**