【i18n】完善多语言方法

pull/3/head
fengshuonan 2021-01-24 22:10:03 +08:00
parent 291607886b
commit 4ca0e5f5fe
10 changed files with 195 additions and 13 deletions

View File

@ -33,4 +33,23 @@ public interface TranslationApi {
*/ */
Map<String, String> getTranslationDictByLanguage(TranslationEnum translationLanguages); Map<String, String> 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);
} }

View File

@ -17,7 +17,7 @@ public class TranslationContext {
* @author fengshuonan * @author fengshuonan
* @date 2021/1/24 19:06 * @date 2021/1/24 19:06
*/ */
public TranslationApi me() { public static TranslationApi me() {
return SpringUtil.getBean(TranslationApi.class); return SpringUtil.getBean(TranslationApi.class);
} }

View File

@ -60,16 +60,14 @@ public enum TranslationEnum {
* @date 2019/10/18 10:33 * @date 2019/10/18 10:33
*/ */
public static TranslationEnum valueOf(Integer value) { public static TranslationEnum valueOf(Integer value) {
if (value == null) { if (value != null) {
return null;
} else {
for (TranslationEnum translationLanguages : TranslationEnum.values()) { for (TranslationEnum translationLanguages : TranslationEnum.values()) {
if (translationLanguages.getCode().equals(value)) { if (translationLanguages.getCode().equals(value)) {
return translationLanguages; return translationLanguages;
} }
} }
return null;
} }
return null;
} }
} }

View File

@ -15,9 +15,9 @@ import lombok.Getter;
public enum TranslationExceptionEnum implements AbstractExceptionEnum { 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为:{}");
/** /**
* *

View File

@ -34,7 +34,7 @@ public class TranslationRequest extends BaseRequest {
/** /**
* 1: 2: * 1: 2:
*/ */
private Integer languages; private Integer language;
/** /**
* *

View File

@ -42,8 +42,8 @@ public class Translation extends BaseEntity {
/** /**
* 1: 2: * 1: 2:
*/ */
@TableField("languages") @TableField("language")
private Integer languages; private Integer language;
/** /**
* *

View File

@ -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;
}
}

View File

@ -1,14 +1,26 @@
package cn.stylefeng.roses.kernel.i18n.modular.service.impl; 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.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.TranslationDict;
import cn.stylefeng.roses.kernel.i18n.api.pojo.request.TranslationRequest; 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.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.mapper.TranslationMapper;
import cn.stylefeng.roses.kernel.i18n.modular.service.TranslationService; 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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -23,31 +35,115 @@ public class TranslationServiceImpl extends ServiceImpl<TranslationMapper, Trans
@Override @Override
public void add(TranslationRequest param) { public void add(TranslationRequest param) {
// 1.构造实体
Translation translation = new Translation();
BeanUtil.copyProperties(param, translation);
// 2.保存到库中
this.save(translation);
// 3.添加对应context
TranslationEnum translationEnum = TranslationEnum.valueOf(param.getLanguage());
TranslationDict translationDict = TranslationDictFactory.createTranslationDict(translationEnum, translation);
TranslationContext.me().addTranslationDict(translationDict);
} }
@Override @Override
public void update(TranslationRequest param) { public void update(TranslationRequest param) {
// 1.根据id获取信息
Translation translation = this.queryTranslation(param);
// 2.请求参数转化为实体
BeanUtil.copyProperties(param, translation);
// 3.更新记录
this.updateById(translation);
// 4.更新对应常量context
TranslationEnum translationEnum = TranslationEnum.valueOf(param.getLanguage());
TranslationDict translationDict = TranslationDictFactory.createTranslationDict(translationEnum, translation);
TranslationContext.me().addTranslationDict(translationDict);
} }
@Override @Override
public void delete(TranslationRequest param) { public void delete(TranslationRequest param) {
// 1.根据id获取实体
Translation translation = this.queryTranslation(param);
// 2.删除该记录
this.removeById(param.getTranId());
// 3.删除对应context
TranslationEnum translationEnum = TranslationEnum.valueOf(translation.getLanguage());
TranslationContext.me().deleteTranslationDict(translationEnum, translation.getTranCode());
} }
@Override @Override
public Translation findDetail(TranslationRequest param) { public Translation findDetail(TranslationRequest param) {
return null; return queryTranslation(param);
} }
@Override @Override
public PageResult<Translation> findPage(TranslationRequest param) { public PageResult<Translation> findPage(TranslationRequest param) {
return null; LambdaQueryWrapper<Translation> wrapper = createWrapper(param);
Page<Translation> page = this.page(PageFactory.defaultPage(), wrapper);
return PageResultFactory.createPageResult(page);
} }
@Override @Override
public List<TranslationDict> getAllTranslationDict() { public List<TranslationDict> getAllTranslationDict() {
return null; List<Translation> list = this.list();
ArrayList<TranslationDict> 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<Translation> createWrapper(TranslationRequest param) {
LambdaQueryWrapper<Translation> 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;
} }
} }

View File

@ -46,4 +46,29 @@ public class TranslationContainer implements TranslationApi {
return TRAN_DICT_CONTAINER.get(translationLanguages); return TRAN_DICT_CONTAINER.get(translationLanguages);
} }
@Override
public void addTranslationDict(TranslationDict translationDict) {
TranslationEnum translationLanguages = translationDict.getTranslationLanguages();
Map<String, String> 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<String, String> languageDict = TRAN_DICT_CONTAINER.get(translationLanguages);
if (languageDict == null) {
return;
}
languageDict.remove(tranCode);
TRAN_DICT_CONTAINER.put(translationLanguages, languageDict);
}
} }

View File

@ -1,5 +1,8 @@
package cn.stylefeng.roses.kernel.i18n.starter; 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; import org.springframework.context.annotation.Configuration;
/** /**
@ -11,4 +14,15 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
public class GunsTranslationAutoConfiguration { public class GunsTranslationAutoConfiguration {
/**
*
*
* @author fengshuonan
* @date 2021/1/24 19:42
*/
@Bean
public TranslationApi translationApi() {
return new TranslationContainer();
}
} }