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;
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;
}
/**