feat: 添加 loadTranslation API
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user