From 4ca0e5f5fe5a3e7d972a739bc0f2b0b521ac86da Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Sun, 24 Jan 2021 22:10:03 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90i18n=E3=80=91=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roses/kernel/i18n/api/TranslationApi.java | 19 ++++ .../i18n/api/context/TranslationContext.java | 2 +- .../i18n/api/enums/TranslationEnum.java | 6 +- .../enums/TranslationExceptionEnum.java | 4 +- .../api/pojo/request/TranslationRequest.java | 2 +- .../i18n/modular/entity/Translation.java | 4 +- .../factory/TranslationDictFactory.java | 30 ++++++ .../service/impl/TranslationServiceImpl.java | 102 +++++++++++++++++- .../kernel/i18n/TranslationContainer.java | 25 +++++ .../GunsTranslationAutoConfiguration.java | 14 +++ 10 files changed, 195 insertions(+), 13 deletions(-) create mode 100644 kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/factory/TranslationDictFactory.java diff --git a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/TranslationApi.java b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/TranslationApi.java index 344f635ee..fd0493f55 100644 --- a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/TranslationApi.java +++ b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/TranslationApi.java @@ -33,4 +33,23 @@ public interface TranslationApi { */ Map getTranslationDictByLanguage(TranslationEnum translationLanguages); + /** + * 添加一个翻译项到context + * + * @param translationDict 具体的翻译项 + * @author fengshuonan + * @date 2021/1/24 21:47 + */ + void addTranslationDict(TranslationDict translationDict); + + /** + * 删除某条翻译记录 + * + * @param translationLanguages 语种枚举 + * @param tranCode 具体翻译项编码 + * @author fengshuonan + * @date 2021/1/24 21:59 + */ + void deleteTranslationDict(TranslationEnum translationLanguages, String tranCode); + } diff --git a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/context/TranslationContext.java b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/context/TranslationContext.java index b7dc51369..e1ea29968 100644 --- a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/context/TranslationContext.java +++ b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/context/TranslationContext.java @@ -17,7 +17,7 @@ public class TranslationContext { * @author fengshuonan * @date 2021/1/24 19:06 */ - public TranslationApi me() { + public static TranslationApi me() { return SpringUtil.getBean(TranslationApi.class); } diff --git a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/enums/TranslationEnum.java b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/enums/TranslationEnum.java index dba67f2cf..f114fd4aa 100644 --- a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/enums/TranslationEnum.java +++ b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/enums/TranslationEnum.java @@ -60,16 +60,14 @@ public enum TranslationEnum { * @date 2019/10/18 10:33 */ public static TranslationEnum valueOf(Integer value) { - if (value == null) { - return null; - } else { + if (value != null) { for (TranslationEnum translationLanguages : TranslationEnum.values()) { if (translationLanguages.getCode().equals(value)) { return translationLanguages; } } - return null; } + return null; } } diff --git a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/exception/enums/TranslationExceptionEnum.java b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/exception/enums/TranslationExceptionEnum.java index fda71f1e6..839b677ee 100644 --- a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/exception/enums/TranslationExceptionEnum.java +++ b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/exception/enums/TranslationExceptionEnum.java @@ -15,9 +15,9 @@ import lombok.Getter; public enum TranslationExceptionEnum implements AbstractExceptionEnum { /** - * 多语言xx + * 多语言记录不存在 */ - JWT_PARSE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + TranslationConstants.I18N_EXCEPTION_STEP_CODE + "01", "jwt解析错误!jwt为:{}"); + NOT_EXISTED(RuleConstants.BUSINESS_ERROR_TYPE_CODE + TranslationConstants.I18N_EXCEPTION_STEP_CODE + "01", "多语言记录不存在,id为:{}"); /** * 错误编码 diff --git a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/pojo/request/TranslationRequest.java b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/pojo/request/TranslationRequest.java index a367bc84b..719cd750e 100644 --- a/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/pojo/request/TranslationRequest.java +++ b/kernel-d-i18n/i18n-api/src/main/java/cn/stylefeng/roses/kernel/i18n/api/pojo/request/TranslationRequest.java @@ -34,7 +34,7 @@ public class TranslationRequest extends BaseRequest { /** * 1:中文 2:英语 */ - private Integer languages; + private Integer language; /** * 翻译的值 diff --git a/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/entity/Translation.java b/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/entity/Translation.java index b2dacec12..3a0589dc4 100644 --- a/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/entity/Translation.java +++ b/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/entity/Translation.java @@ -42,8 +42,8 @@ public class Translation extends BaseEntity { /** * 1:中文 2:英语 */ - @TableField("languages") - private Integer languages; + @TableField("language") + private Integer language; /** * 翻译的值 diff --git a/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/factory/TranslationDictFactory.java b/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/factory/TranslationDictFactory.java new file mode 100644 index 000000000..c05a07352 --- /dev/null +++ b/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/factory/TranslationDictFactory.java @@ -0,0 +1,30 @@ +package cn.stylefeng.roses.kernel.i18n.modular.factory; + +import cn.stylefeng.roses.kernel.i18n.api.enums.TranslationEnum; +import cn.stylefeng.roses.kernel.i18n.api.pojo.TranslationDict; +import cn.stylefeng.roses.kernel.i18n.modular.entity.Translation; + +/** + * 创建翻译字典 + * + * @author fengshuonan + * @date 2021/1/24 21:50 + */ +public class TranslationDictFactory { + + /** + * 创建翻译字典 + * + * @author fengshuonan + * @date 2021/1/24 21:50 + */ + public static TranslationDict createTranslationDict(TranslationEnum translationEnum, Translation translation) { + TranslationDict translationDict = new TranslationDict(); + translationDict.setTranName(translation.getTranName()); + translationDict.setTranCode(translation.getTranCode()); + translationDict.setTranValue(translation.getTranValue()); + translationDict.setTranslationLanguages(translationEnum); + return translationDict; + } + +} diff --git a/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/service/impl/TranslationServiceImpl.java b/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/service/impl/TranslationServiceImpl.java index d9696dbba..c7cc494ac 100644 --- a/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/service/impl/TranslationServiceImpl.java +++ b/kernel-d-i18n/i18n-business/src/main/java/cn/stylefeng/roses/kernel/i18n/modular/service/impl/TranslationServiceImpl.java @@ -1,14 +1,26 @@ package cn.stylefeng.roses.kernel.i18n.modular.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; +import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.i18n.api.context.TranslationContext; +import cn.stylefeng.roses.kernel.i18n.api.enums.TranslationEnum; +import cn.stylefeng.roses.kernel.i18n.api.exception.TranslationException; +import cn.stylefeng.roses.kernel.i18n.api.exception.enums.TranslationExceptionEnum; import cn.stylefeng.roses.kernel.i18n.api.pojo.TranslationDict; import cn.stylefeng.roses.kernel.i18n.api.pojo.request.TranslationRequest; import cn.stylefeng.roses.kernel.i18n.modular.entity.Translation; +import cn.stylefeng.roses.kernel.i18n.modular.factory.TranslationDictFactory; import cn.stylefeng.roses.kernel.i18n.modular.mapper.TranslationMapper; import cn.stylefeng.roses.kernel.i18n.modular.service.TranslationService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -23,31 +35,115 @@ public class TranslationServiceImpl extends ServiceImpl findPage(TranslationRequest param) { - return null; + LambdaQueryWrapper wrapper = createWrapper(param); + Page page = this.page(PageFactory.defaultPage(), wrapper); + return PageResultFactory.createPageResult(page); } @Override public List getAllTranslationDict() { - return null; + List list = this.list(); + ArrayList translationDictList = new ArrayList<>(); + for (Translation translation : list) { + TranslationEnum translationEnum = TranslationEnum.valueOf(translation.getLanguage()); + TranslationDict translationDict = TranslationDictFactory.createTranslationDict(translationEnum, translation); + translationDictList.add(translationDict); + } + return translationDictList; + } + + /** + * 获取字典项的对象 + * + * @author fengshuonan + * @date 2021/1/24 21:54 + */ + private Translation queryTranslation(TranslationRequest param) { + Translation translation = this.getById(param.getTranId()); + if (ObjectUtil.isEmpty(translation)) { + throw new TranslationException(TranslationExceptionEnum.NOT_EXISTED, param.getTranId()); + } + return translation; + } + + /** + * 创建多语言的wrapper + * + * @author fengshuonan + * @date 2021/1/24 22:03 + */ + private LambdaQueryWrapper createWrapper(TranslationRequest param) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + if (ObjectUtil.isNotNull(param)) { + + // 如果编码不为空,则带上名称搜素搜条件 + if (ObjectUtil.isNotEmpty(param.getTranCode())) { + queryWrapper.like(Translation::getTranCode, param.getTranCode()); + } + + // 如果翻译名称不为空,则带上翻译名称 + if (ObjectUtil.isNotEmpty(param.getTranName())) { + queryWrapper.eq(Translation::getTranName, param.getTranName()); + } + } + + // 按时间倒序 + queryWrapper.orderByDesc(Translation::getCreateTime); + + return queryWrapper; } } diff --git a/kernel-d-i18n/i18n-sdk/src/main/java/cn/stylefeng/roses/kernel/i18n/TranslationContainer.java b/kernel-d-i18n/i18n-sdk/src/main/java/cn/stylefeng/roses/kernel/i18n/TranslationContainer.java index 45355e2bd..5bedfdb56 100644 --- a/kernel-d-i18n/i18n-sdk/src/main/java/cn/stylefeng/roses/kernel/i18n/TranslationContainer.java +++ b/kernel-d-i18n/i18n-sdk/src/main/java/cn/stylefeng/roses/kernel/i18n/TranslationContainer.java @@ -46,4 +46,29 @@ public class TranslationContainer implements TranslationApi { return TRAN_DICT_CONTAINER.get(translationLanguages); } + @Override + public void addTranslationDict(TranslationDict translationDict) { + TranslationEnum translationLanguages = translationDict.getTranslationLanguages(); + + Map languageDict = TRAN_DICT_CONTAINER.get(translationLanguages); + if (languageDict == null) { + languageDict = new HashMap<>(); + } + languageDict.put(translationDict.getTranCode(), translationDict.getTranValue()); + + TRAN_DICT_CONTAINER.put(translationLanguages, languageDict); + } + + @Override + public void deleteTranslationDict(TranslationEnum translationLanguages, String tranCode) { + Map languageDict = TRAN_DICT_CONTAINER.get(translationLanguages); + + if (languageDict == null) { + return; + } + languageDict.remove(tranCode); + + TRAN_DICT_CONTAINER.put(translationLanguages, languageDict); + } + } diff --git a/kernel-d-i18n/i18n-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/i18n/starter/GunsTranslationAutoConfiguration.java b/kernel-d-i18n/i18n-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/i18n/starter/GunsTranslationAutoConfiguration.java index c76f913e8..073ee3401 100644 --- a/kernel-d-i18n/i18n-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/i18n/starter/GunsTranslationAutoConfiguration.java +++ b/kernel-d-i18n/i18n-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/i18n/starter/GunsTranslationAutoConfiguration.java @@ -1,5 +1,8 @@ package cn.stylefeng.roses.kernel.i18n.starter; +import cn.stylefeng.roses.kernel.i18n.TranslationContainer; +import cn.stylefeng.roses.kernel.i18n.api.TranslationApi; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -11,4 +14,15 @@ import org.springframework.context.annotation.Configuration; @Configuration public class GunsTranslationAutoConfiguration { + /** + * 多语言翻译条目存放容器 + * + * @author fengshuonan + * @date 2021/1/24 19:42 + */ + @Bean + public TranslationApi translationApi() { + return new TranslationContainer(); + } + }