feat: 添加 loadTranslation API
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
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.YamlConfig;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.zaxxer.hikari.HikariConfig;
|
||||
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.text.serializer.gson.GsonComponentSerializer;
|
||||
import net.kyori.adventure.title.Title;
|
||||
import net.kyori.adventure.translation.TranslationRegistry;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.text.MessageFormat;
|
||||
import java.time.Duration;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class CoreUtils {
|
||||
private CoreUtils() {
|
||||
}
|
||||
|
||||
public static void zipCompressionFolder(@NotNull File folder, @NotNull File zipFile) throws IOException {
|
||||
try (ZipOutputStream stream = new ZipOutputStream(Files.newOutputStream(zipFile.toPath()))) {
|
||||
putFileToZipStream(stream, "", folder);
|
||||
@NotNull
|
||||
public static DataSource getDataSource(@NotNull ConfigSection datasourceConfig) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
public static void putFileToZipStream(@NotNull ZipOutputStream stream, @NotNull String path, @NotNull File file) throws IOException {
|
||||
if (file.isDirectory()) {
|
||||
File[] files = file.listFiles();
|
||||
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();
|
||||
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));
|
||||
hikariConfig.setPoolName(datasourceConfig.getString("name", "HamsterCore-Pool"));
|
||||
return new HikariDataSource(hikariConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -125,24 +126,30 @@ public final class CoreUtils {
|
||||
);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static DataSource getDataSource(@NotNull ConfigSection datasourceConfig) {
|
||||
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);
|
||||
public static void loadTranslation(@NotNull TranslationRegistry registry, @NotNull File folder) throws IOException {
|
||||
for (File subFile : Objects.requireNonNull(folder.listFiles())) {
|
||||
String filename = subFile.getName().split("\\.")[0];
|
||||
String[] args = filename.split("_");
|
||||
Locale locale = new Locale.Builder().setLanguage(args[0]).setRegion(args[1]).build();
|
||||
YamlConfig config = YamlConfig.load(subFile);
|
||||
Map<String, MessageFormat> map = loadTranslation(locale, config, "");
|
||||
registry.registerAll(locale, map);
|
||||
}
|
||||
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));
|
||||
hikariConfig.setPoolName(datasourceConfig.getString("name", "HamsterCore-Pool"));
|
||||
return new HikariDataSource(hikariConfig);
|
||||
}
|
||||
|
||||
public static Map<String, MessageFormat> loadTranslation(@NotNull Locale locale, @NotNull ConfigSection config, @NotNull String prefix) {
|
||||
HashMap<String, MessageFormat> result = new HashMap<>();
|
||||
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