From a90b4dadeca85c474bcf89c53ba65c5fa3ade051 Mon Sep 17 00:00:00 2001
From: Timi
Date: Thu, 8 Oct 2026 08:39:54 +0800
Subject: [PATCH] refactor
---
...ual.java => FileMultilingualResolver.java} | 10 +--
...lingual.java => MultilingualResolver.java} | 34 ++++-----
...ava => ResourcesMultilingualResolver.java} | 10 +--
.../java/com/imyeyu/lang/bean/Language.java | 74 +++++++++++++++++++
.../com/imyeyu/lang/bean/LanguageMapping.java | 54 ++++++++++++++
.../com/imyeyu/lang/bean/Multilingual.java | 21 ++++++
.../imyeyu/lang/bean/MultilingualValue.java | 25 +++++++
.../lang/mapper/AbstractLanguageMapper.java | 12 +--
.../imyeyu/lang/mapper/FileLanguageMap.java | 2 +-
.../com/imyeyu/lang/mapper/LanguageMap.java | 20 ++---
.../lang/mapper/PropertiesLanguageMap.java | 2 +-
.../lang/mapper/ResourcesLanguageMap.java | 2 +-
.../imyeyu/lang/message/MessageResolver.java | 24 ------
src/test/java/test/TestLang.java | 4 +-
14 files changed, 222 insertions(+), 72 deletions(-)
rename src/main/java/com/imyeyu/lang/{multi/FileMultilingual.java => FileMultilingualResolver.java} (85%)
rename src/main/java/com/imyeyu/lang/{multi/Multilingual.java => MultilingualResolver.java} (84%)
rename src/main/java/com/imyeyu/lang/{multi/ResourcesMultilingual.java => ResourcesMultilingualResolver.java} (85%)
create mode 100644 src/main/java/com/imyeyu/lang/bean/Language.java
create mode 100644 src/main/java/com/imyeyu/lang/bean/LanguageMapping.java
create mode 100644 src/main/java/com/imyeyu/lang/bean/Multilingual.java
create mode 100644 src/main/java/com/imyeyu/lang/bean/MultilingualValue.java
delete mode 100644 src/main/java/com/imyeyu/lang/message/MessageResolver.java
diff --git a/src/main/java/com/imyeyu/lang/multi/FileMultilingual.java b/src/main/java/com/imyeyu/lang/FileMultilingualResolver.java
similarity index 85%
rename from src/main/java/com/imyeyu/lang/multi/FileMultilingual.java
rename to src/main/java/com/imyeyu/lang/FileMultilingualResolver.java
index a1bc69c..f9b5828 100644
--- a/src/main/java/com/imyeyu/lang/multi/FileMultilingual.java
+++ b/src/main/java/com/imyeyu/lang/FileMultilingualResolver.java
@@ -1,6 +1,6 @@
-package com.imyeyu.lang.multi;
+package com.imyeyu.lang;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import com.imyeyu.lang.mapper.AbstractLanguageMapper;
import com.imyeyu.lang.mapper.FileLanguageMap;
import com.imyeyu.lang.mapper.LanguageMap;
@@ -11,9 +11,9 @@ import com.imyeyu.lang.mapper.LanguageMap;
* @author 夜雨
* @version 2024-04-09 01:06
*/
-public class FileMultilingual extends Multilingual {
+public class FileMultilingualResolver extends MultilingualResolver {
- public FileMultilingual() {
+ public FileMultilingualResolver() {
}
/**
@@ -21,7 +21,7 @@ public class FileMultilingual extends Multilingual {
*
* @param path 文件路径模板,使用 %s 作为语言代码占位符,例如:lang/app_%s.lang
*/
- public FileMultilingual(String path) {
+ public FileMultilingualResolver(String path) {
addAll(path);
}
diff --git a/src/main/java/com/imyeyu/lang/multi/Multilingual.java b/src/main/java/com/imyeyu/lang/MultilingualResolver.java
similarity index 84%
rename from src/main/java/com/imyeyu/lang/multi/Multilingual.java
rename to src/main/java/com/imyeyu/lang/MultilingualResolver.java
index 63bb21b..3d7f479 100644
--- a/src/main/java/com/imyeyu/lang/multi/Multilingual.java
+++ b/src/main/java/com/imyeyu/lang/MultilingualResolver.java
@@ -1,9 +1,9 @@
-package com.imyeyu.lang.multi;
+package com.imyeyu.lang;
import com.imyeyu.java.bean.CallbackArg;
-import com.imyeyu.java.bean.Language;
-import com.imyeyu.java.bean.LanguageMapping;
import com.imyeyu.java.ref.Ref;
+import com.imyeyu.lang.bean.Language;
+import com.imyeyu.lang.bean.LanguageMapping;
import com.imyeyu.lang.mapper.AbstractLanguageMapper;
import lombok.Getter;
@@ -21,7 +21,7 @@ import java.util.Objects;
* say.msg=hello {0}
*
* // 加载
- * Multilingual lang = Multilingual.getInstance();
+ * MultilingualResolver lang = MultilingualResolver.getInstance();
* lang.load(Language.zh_CN, "lang/timijava/%s.lang");
*
* // 加载所有支持的映射文件
@@ -31,17 +31,17 @@ import java.util.Objects;
* lang.setActivated("zh_CN");
*
* // 引用当前激活语言
- * Multilingual.text("say.msg");
- * Multilingual.text("say.msg", "timi-java");
+ * MultilingualResolver.text("say.msg");
+ * MultilingualResolver.text("say.msg", "timi-java");
*
* // 动态引用
- * Multilingual.map("en_US").text("say.msg");
+ * MultilingualResolver.map("en_US").text("say.msg");
*
*
* @author 夜雨
* @version 2021-10-25 15:16
*/
-public class Multilingual implements LanguageMapping {
+public class MultilingualResolver implements LanguageMapping {
/** 多语言映射表,存储各语言对应的映射器 */
protected final Map multilingualMap;
@@ -62,7 +62,7 @@ public class Multilingual implements LanguageMapping {
* 根据系统默认 Locale 初始化激活语言,如果无法识别则默认为中文
*
*/
- public Multilingual() {
+ public MultilingualResolver() {
multilingualMap = new HashMap<>();
updateActiveListeners = new ArrayList<>();
@@ -199,19 +199,19 @@ public class Multilingual implements LanguageMapping {
* mapping=@test.msg
* no_mapping=\@test.msg
*
- * Multilingual.text("mapping"); // Hello world
- * Multilingual.text("no_mapping"); // @test.msg
+ * MultilingualResolver.text("mapping"); // Hello world
+ * MultilingualResolver.text("no_mapping"); // @test.msg
*
*
* @param key 键
* @return 文本值
*/
@Override
- public String text(String key) {
+ public String message(String key) {
if (multilingualMap.get(getActivated()) == null) {
return key;
}
- return multilingualMap.get(getActivated()).text(key);
+ return multilingualMap.get(getActivated()).message(key);
}
/**
@@ -222,11 +222,11 @@ public class Multilingual implements LanguageMapping {
* @return 获取结果
*/
@Override
- public String text(String key, String def) {
+ public String message(String key, String def) {
if (multilingualMap.get(getActivated()) == null) {
return Objects.requireNonNullElse(def, key);
}
- return multilingualMap.get(getActivated()).text(key, def);
+ return multilingualMap.get(getActivated()).message(key, def);
}
/**
@@ -237,10 +237,10 @@ public class Multilingual implements LanguageMapping {
* @return 结果
*/
@Override
- public String textArgs(String key, Map argsMap) {
+ public String message(String key, Map argsMap) {
if (multilingualMap.get(getActivated()) == null) {
return key;
}
- return multilingualMap.get(getActivated()).textArgs(key, argsMap);
+ return multilingualMap.get(getActivated()).message(key, argsMap);
}
}
diff --git a/src/main/java/com/imyeyu/lang/multi/ResourcesMultilingual.java b/src/main/java/com/imyeyu/lang/ResourcesMultilingualResolver.java
similarity index 85%
rename from src/main/java/com/imyeyu/lang/multi/ResourcesMultilingual.java
rename to src/main/java/com/imyeyu/lang/ResourcesMultilingualResolver.java
index d3b3360..60e3a12 100644
--- a/src/main/java/com/imyeyu/lang/multi/ResourcesMultilingual.java
+++ b/src/main/java/com/imyeyu/lang/ResourcesMultilingualResolver.java
@@ -1,6 +1,6 @@
-package com.imyeyu.lang.multi;
+package com.imyeyu.lang;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import com.imyeyu.lang.mapper.AbstractLanguageMapper;
import com.imyeyu.lang.mapper.LanguageMap;
import com.imyeyu.lang.mapper.ResourcesLanguageMap;
@@ -14,9 +14,9 @@ import com.imyeyu.lang.mapper.ResourcesLanguageMap;
* @author 夜雨
* @version 2024-04-09 01:03
*/
-public class ResourcesMultilingual extends Multilingual {
+public class ResourcesMultilingualResolver extends MultilingualResolver {
- public ResourcesMultilingual() {
+ public ResourcesMultilingualResolver() {
}
/**
@@ -24,7 +24,7 @@ public class ResourcesMultilingual extends Multilingual {
*
* @param path 资源文件路径模板,使用 %s 作为语言代码占位符,例如:lang/app_%s.lang
*/
- public ResourcesMultilingual(String path) {
+ public ResourcesMultilingualResolver(String path) {
addAll(path);
}
diff --git a/src/main/java/com/imyeyu/lang/bean/Language.java b/src/main/java/com/imyeyu/lang/bean/Language.java
new file mode 100644
index 0000000..ca9af49
--- /dev/null
+++ b/src/main/java/com/imyeyu/lang/bean/Language.java
@@ -0,0 +1,74 @@
+package com.imyeyu.lang.bean;
+
+import com.imyeyu.java.ref.Ref;
+import lombok.Data;
+
+/**
+ * 多语言
+ *
+ * @author 夜雨
+ * @since 2022-02-23 11:25
+ */
+@Data
+public class Language {
+
+ /**
+ * 支持语言枚举
+ *
+ * @author 夜雨
+ * @since 2025-12-05 14:31
+ */
+ public enum Enum {
+
+ /** 英语 */
+ en_US,
+
+ /** 简中 */
+ zh_CN,
+
+ /** 繁中 */
+ zh_TW,
+
+ /** 日语 */
+ ja_JP,
+
+ /** 韩语 */
+ ko_KR,
+
+ /** 俄语 */
+ ru_RU,
+
+ /** 德语 */
+ de_DE;
+ }
+
+ protected String key;
+
+ protected String zhCN;
+
+ protected String zhTW;
+
+ protected String enUS;
+
+ protected String ruRU;
+
+ protected String koKR;
+
+ protected String jaJP;
+
+ protected String deDE;
+
+ /**
+ * 获取指定语言值
+ *
+ * @param language 指定语言
+ * @return 值
+ */
+ public String getValue(Enum language) {
+ try {
+ return Ref.getFieldValue(this, language.toString().replace("_", ""), String.class);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/src/main/java/com/imyeyu/lang/bean/LanguageMapping.java b/src/main/java/com/imyeyu/lang/bean/LanguageMapping.java
new file mode 100644
index 0000000..18dd097
--- /dev/null
+++ b/src/main/java/com/imyeyu/lang/bean/LanguageMapping.java
@@ -0,0 +1,54 @@
+package com.imyeyu.lang.bean;
+
+import java.util.Map;
+
+/**
+ * 多语言映射接口
+ *
+ * @author 夜雨
+ * @since 2024-04-03 11:27
+ */
+public interface LanguageMapping {
+
+ /**
+ * 添加映射
+ *
+ * @param key 键
+ * @param value 值
+ */
+ void add(String key, String value);
+
+ /**
+ * 是否存在映射
+ *
+ * @param key 键
+ * @return true 为存在
+ */
+ boolean has(String key);
+
+ /**
+ * 获取映射值
+ *
+ * @param key 键
+ * @return 值
+ */
+ String message(String key);
+
+ /**
+ * 获取映射值,不存在时使用默认值
+ *
+ * @param key 键
+ * @param def 默认值
+ * @return 值
+ */
+ String message(String key, String def);
+
+ /**
+ * 获取映射值并插入参数
+ *
+ * @param key 键
+ * @param argsMap 参数列表
+ * @return 值
+ */
+ String message(String key, Map argsMap);
+}
diff --git a/src/main/java/com/imyeyu/lang/bean/Multilingual.java b/src/main/java/com/imyeyu/lang/bean/Multilingual.java
new file mode 100644
index 0000000..d26b4a7
--- /dev/null
+++ b/src/main/java/com/imyeyu/lang/bean/Multilingual.java
@@ -0,0 +1,21 @@
+package com.imyeyu.lang.bean;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 多语言数据契约
+ *
+ * @author 夜雨
+ * @since 2026-09-18 13:35
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class Multilingual extends Language implements MultilingualValue {
+
+ /** 唯一标识 */
+ private String id;
+
+ /** 业务类型 */
+ private String bizType;
+}
diff --git a/src/main/java/com/imyeyu/lang/bean/MultilingualValue.java b/src/main/java/com/imyeyu/lang/bean/MultilingualValue.java
new file mode 100644
index 0000000..6c389e6
--- /dev/null
+++ b/src/main/java/com/imyeyu/lang/bean/MultilingualValue.java
@@ -0,0 +1,25 @@
+package com.imyeyu.lang.bean;
+
+/**
+ * 多语言值对象
+ *
+ * @author 夜雨
+ * @since 2026-09-18 13:35
+ */
+public interface MultilingualValue {
+
+ /**
+ * 获取唯一标识
+ *
+ * @return 唯一标识
+ */
+ String getId();
+
+ /**
+ * 获取指定语言值
+ *
+ * @param language 指定语言
+ * @return 语言值
+ */
+ String getValue(Language.Enum language);
+}
diff --git a/src/main/java/com/imyeyu/lang/mapper/AbstractLanguageMapper.java b/src/main/java/com/imyeyu/lang/mapper/AbstractLanguageMapper.java
index 5c405c2..e043aa1 100644
--- a/src/main/java/com/imyeyu/lang/mapper/AbstractLanguageMapper.java
+++ b/src/main/java/com/imyeyu/lang/mapper/AbstractLanguageMapper.java
@@ -1,7 +1,7 @@
package com.imyeyu.lang.mapper;
-import com.imyeyu.java.bean.Language;
-import com.imyeyu.java.bean.LanguageMapping;
+import com.imyeyu.lang.bean.Language;
+import com.imyeyu.lang.bean.LanguageMapping;
import com.imyeyu.utils.StringInterpolator;
import lombok.Getter;
import lombok.Setter;
@@ -44,8 +44,8 @@ public abstract class AbstractLanguageMapper implements LanguageMapping {
* @return 获取结果
*/
@Override
- public String text(String key, String def) {
- String result = text(key);
+ public String message(String key, String def) {
+ String result = message(key);
return result.equals(key) ? def : result;
}
@@ -57,7 +57,7 @@ public abstract class AbstractLanguageMapper implements LanguageMapping {
* @return 替换占位符后的文本
*/
@Override
- public String textArgs(String key, Map args) {
- return INTERPOLATOR.inject(text(key), args);
+ public String message(String key, Map args) {
+ return INTERPOLATOR.inject(message(key), args);
}
}
diff --git a/src/main/java/com/imyeyu/lang/mapper/FileLanguageMap.java b/src/main/java/com/imyeyu/lang/mapper/FileLanguageMap.java
index 748615f..5f9f4f0 100644
--- a/src/main/java/com/imyeyu/lang/mapper/FileLanguageMap.java
+++ b/src/main/java/com/imyeyu/lang/mapper/FileLanguageMap.java
@@ -1,7 +1,7 @@
package com.imyeyu.lang.mapper;
import com.imyeyu.io.IO;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import java.io.InputStream;
import java.io.InputStreamReader;
diff --git a/src/main/java/com/imyeyu/lang/mapper/LanguageMap.java b/src/main/java/com/imyeyu/lang/mapper/LanguageMap.java
index e65795a..b6621c9 100644
--- a/src/main/java/com/imyeyu/lang/mapper/LanguageMap.java
+++ b/src/main/java/com/imyeyu/lang/mapper/LanguageMap.java
@@ -1,7 +1,7 @@
package com.imyeyu.lang.mapper;
import com.imyeyu.java.TimiJava;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import com.imyeyu.utils.Text;
import java.util.HashMap;
@@ -26,7 +26,7 @@ public class LanguageMap extends AbstractLanguageMapper {
{
INTERPOLATOR.putFilter("lang", value -> {
if (value.startsWith("@")) {
- value = text(value.substring(1));
+ value = message(value.substring(1));
}
return value;
});
@@ -83,20 +83,20 @@ public class LanguageMap extends AbstractLanguageMapper {
* mapping=@test.msg
* no_mapping=\@test.msg
*
- * Multilingual.text("mapping"); // Hello world
- * Multilingual.text("no_mapping"); // @test.msg
+ * MultilingualResolver.text("mapping"); // Hello world
+ * MultilingualResolver.text("no_mapping"); // @test.msg
*
*
* @param key 键
* @return 文本值
*/
@Override
- public String text(String key) {
+ public String message(String key) {
if (map.containsKey(key)) {
String result = map.get(key);
if (result.startsWith("@")) {
// 递归映射
- return text(result.substring(1));
+ return message(result.substring(1));
} else {
if (result.startsWith("\\@")) {
return result.substring(1);
@@ -134,8 +134,8 @@ public class LanguageMap extends AbstractLanguageMapper {
* @return 获取结果
*/
@Override
- public String text(String key, String def) {
- String result = text(key);
+ public String message(String key, String def) {
+ String result = message(key);
return key.equals(result) ? def : result;
}
@@ -147,7 +147,7 @@ public class LanguageMap extends AbstractLanguageMapper {
* @return 结果
*/
@Override
- public String textArgs(String key, Map argsMap) {
- return INTERPOLATOR.inject(text(key), argsMap);
+ public String message(String key, Map argsMap) {
+ return INTERPOLATOR.inject(message(key), argsMap);
}
}
diff --git a/src/main/java/com/imyeyu/lang/mapper/PropertiesLanguageMap.java b/src/main/java/com/imyeyu/lang/mapper/PropertiesLanguageMap.java
index b7aa67c..417c70d 100644
--- a/src/main/java/com/imyeyu/lang/mapper/PropertiesLanguageMap.java
+++ b/src/main/java/com/imyeyu/lang/mapper/PropertiesLanguageMap.java
@@ -1,6 +1,6 @@
package com.imyeyu.lang.mapper;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import java.util.HashMap;
import java.util.Properties;
diff --git a/src/main/java/com/imyeyu/lang/mapper/ResourcesLanguageMap.java b/src/main/java/com/imyeyu/lang/mapper/ResourcesLanguageMap.java
index 2daf377..bf0a822 100644
--- a/src/main/java/com/imyeyu/lang/mapper/ResourcesLanguageMap.java
+++ b/src/main/java/com/imyeyu/lang/mapper/ResourcesLanguageMap.java
@@ -1,7 +1,7 @@
package com.imyeyu.lang.mapper;
import com.imyeyu.io.IO;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import java.io.FileNotFoundException;
import java.io.InputStream;
diff --git a/src/main/java/com/imyeyu/lang/message/MessageResolver.java b/src/main/java/com/imyeyu/lang/message/MessageResolver.java
deleted file mode 100644
index 3cbf839..0000000
--- a/src/main/java/com/imyeyu/lang/message/MessageResolver.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.imyeyu.lang.message;
-
-import com.imyeyu.java.bean.Language;
-
-import java.util.Map;
-
-/**
- * 消息解析器
- *
- * @author 夜雨
- * @since 2026-08-01 00:00
- */
-public interface MessageResolver {
-
- /**
- * 解析消息
- *
- * @param messageCode 消息代码
- * @param messageArgs 消息插值参数
- * @param language 语言
- * @return 消息
- */
- String resolve(String messageCode, Map messageArgs, Language.Enum language);
-}
diff --git a/src/test/java/test/TestLang.java b/src/test/java/test/TestLang.java
index b4e76ec..f39ba9c 100644
--- a/src/test/java/test/TestLang.java
+++ b/src/test/java/test/TestLang.java
@@ -1,6 +1,6 @@
package test;
-import com.imyeyu.java.bean.Language;
+import com.imyeyu.lang.bean.Language;
import com.imyeyu.lang.mapper.ResourcesLanguageMap;
import org.junit.jupiter.api.Test;
@@ -16,6 +16,6 @@ public class TestLang {
public void testArgs() {
ResourcesLanguageMap map = new ResourcesLanguageMap(Language.Enum.zh_CN);
map.load("zh_CN.lang");
- System.out.println(map.textArgs("test", Map.of("msg", "hello world")));
+ System.out.println(map.message("test", Map.of("msg", "hello world")));
}
}