package com.imyeyu.lang.mapper; import com.imyeyu.java.TimiJava; import com.imyeyu.java.bean.CallbackArgReturn; import com.imyeyu.java.bean.Language; import com.imyeyu.utils.Text; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; /** * 基于内存的语言映射实现 *
* 使用 HashMap 存储语言映射关系,支持二次映射、模糊匹配等功能 *
* * @author 夜雨 * @version 2024-04-03 10:11 */ public class LanguageMap extends AbstractLanguageMapper { /** 语言键值映射表 */ protected final Map* 将另一个映射表的所有键值对合并到当前映射表中,如果存在相同键则覆盖 *
* * @param map 要合并的语言映射表 */ public void union(LanguageMap map) { this.map.putAll(map.map); } /** * 添加语言映射 * * @param key 键 * @param value 值 */ @Override public void add(String key, String value) { map.put(key, value); } /** * 检查是否存在指定键的映射 * * @param key 键 * @return true 为存在 */ @Override public boolean has(String key) { return map.containsKey(key); } /** * 获取文本,支持二次映射,没有找到映射时返回入参键 *
* test.msg=Hello world
* mapping=@test.msg
* no_mapping=\@test.msg
*
* Multilingual.text("mapping"); // Hello world
* Multilingual.text("no_mapping"); // @test.msg
*
*
* @param key 键
* @return 文本值
*/
@Override
public String text(String key) {
if (map.containsKey(key)) {
String result = map.get(key);
if (result.startsWith("@")) {
// 递归映射
return text(result.substring(1));
} else {
if (result.startsWith("\\@")) {
return result.substring(1);
} else {
return result;
}
}
} else {
if (TimiJava.isNotEmpty(key)) {
// 推测
String guessKey = key;
LinkedHashMap