Compare commits
7 Commits
1a81ac1c54
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 08aab8d5a9 | |||
| f887079a62 | |||
| 3283c678db | |||
| 3eb6bd7df5 | |||
| 6a57d22366 | |||
| 007253f828 | |||
| d1728955aa |
@ -20,6 +20,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -336,12 +337,16 @@ public class TimiSpring {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取请求头的令牌,键为 Token
|
* 获取请求令牌,键为 Token 或 token,包括请求头和 URI
|
||||||
*
|
*
|
||||||
* @return 令牌
|
* @return 令牌
|
||||||
*/
|
*/
|
||||||
public static String getToken() {
|
public static String getToken() {
|
||||||
return getHeader("Token");
|
return TimiJava.firstNotEmpty(getHeader("Token"), getHeader("token"), getRequestArg("token"), getRequestArg("Token"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getLanguageRaw() {
|
||||||
|
return getHeader("Accept-Language");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -351,10 +356,16 @@ public class TimiSpring {
|
|||||||
public static Language getLanguage() {
|
public static Language getLanguage() {
|
||||||
String name = getRequestArg("lang");
|
String name = getRequestArg("lang");
|
||||||
if (TimiJava.isEmpty(name)) {
|
if (TimiJava.isEmpty(name)) {
|
||||||
name = getHeader("Accept-Language");
|
List<Locale.LanguageRange> rangeList = Locale.LanguageRange.parse(getLanguageRaw());
|
||||||
|
for (Locale.LanguageRange item : rangeList) {
|
||||||
|
if (item.getRange().contains("-")) {
|
||||||
|
name = item.getRange();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (TimiJava.isEmpty(name)) {
|
}
|
||||||
name = getLocale().toString();
|
}
|
||||||
|
if (TimiJava.isNotEmpty(name)) {
|
||||||
|
name = name.replace("-", "_");
|
||||||
}
|
}
|
||||||
if (TimiJava.isEmpty(name)) { // use for not support
|
if (TimiJava.isEmpty(name)) { // use for not support
|
||||||
return Language.zh_CN;
|
return Language.zh_CN;
|
||||||
|
|||||||
105
src/main/java/com/imyeyu/spring/bean/Multilingual.java
Normal file
105
src/main/java/com/imyeyu/spring/bean/Multilingual.java
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
package com.imyeyu.spring.bean;
|
||||||
|
|
||||||
|
import com.imyeyu.java.ref.Ref;
|
||||||
|
import com.imyeyu.spring.entity.UUIDEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 夜雨
|
||||||
|
* @since 2025-10-17 15:21
|
||||||
|
*/
|
||||||
|
public class Multilingual extends UUIDEntity {
|
||||||
|
|
||||||
|
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(com.imyeyu.java.bean.Language language) {
|
||||||
|
try {
|
||||||
|
return Ref.getFieldValue(this, language.toString().replace("_", ""), String.class);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getZhCN() {
|
||||||
|
return zhCN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setZhCN(String zhCN) {
|
||||||
|
this.zhCN = zhCN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getZhTW() {
|
||||||
|
return zhTW;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setZhTW(String zhTW) {
|
||||||
|
this.zhTW = zhTW;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEnUS() {
|
||||||
|
return enUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnUS(String enUS) {
|
||||||
|
this.enUS = enUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRuRU() {
|
||||||
|
return ruRU;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRuRU(String ruRU) {
|
||||||
|
this.ruRU = ruRU;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKoKR() {
|
||||||
|
return koKR;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKoKR(String koKR) {
|
||||||
|
this.koKR = koKR;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJaJP() {
|
||||||
|
return jaJP;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJaJP(String jaJP) {
|
||||||
|
this.jaJP = jaJP;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDeDE() {
|
||||||
|
return deDE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeDE(String deDE) {
|
||||||
|
this.deDE = deDE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -89,7 +89,7 @@ public class GlobalExceptionHandler {
|
|||||||
@ExceptionHandler(Throwable.class)
|
@ExceptionHandler(Throwable.class)
|
||||||
public TimiResponse<?> error(Throwable e) {
|
public TimiResponse<?> error(Throwable e) {
|
||||||
if (e instanceof TimiException timiE) {
|
if (e instanceof TimiException timiE) {
|
||||||
if (env.startsWith("dev") || log.isDebugEnabled()) {
|
if (!env.startsWith("prod") || log.isDebugEnabled()) {
|
||||||
log.error(timiE.getMessage(), e);
|
log.error(timiE.getMessage(), e);
|
||||||
}
|
}
|
||||||
// 一般异常
|
// 一般异常
|
||||||
|
|||||||
@ -55,11 +55,16 @@ public class GlobalReturnHandler implements ResponseBodyAdvice<Object> {
|
|||||||
} else {
|
} else {
|
||||||
result = new TimiResponse<>(TimiCode.SUCCESS, body);
|
result = new TimiResponse<>(TimiCode.SUCCESS, body);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
if (multilingualHeader != null && TimiJava.isNotEmpty(result.getMsgKey())) {
|
if (multilingualHeader != null && TimiJava.isNotEmpty(result.getMsgKey())) {
|
||||||
result.setMsg(multilingualHeader.handler(result));
|
result.setMsg(multilingualHeader.handler(result));
|
||||||
} else if (TimiJava.isEmpty(result.getMsg())) {
|
} else if (TimiJava.isEmpty(result.getMsg())) {
|
||||||
result.setMsg(TimiCode.fromCode(result.getCode()).toString());
|
result.setMsg(TimiCode.fromCode(result.getCode()).toString());
|
||||||
}
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("multilingual response error", e);
|
||||||
|
result.setMsg(TimiCode.fromCode(result.getCode()).toString());
|
||||||
|
}
|
||||||
if (30000 < result.getCode()) {
|
if (30000 < result.getCode()) {
|
||||||
log.warn("ID: {} Response -> Exception.{}.{}", TimiSpring.getSessionAttr(AOPLogInterceptor.REQUEST_ID), result.getCode(), result.getMsg());
|
log.warn("ID: {} Response -> Exception.{}.{}", TimiSpring.getSessionAttr(AOPLogInterceptor.REQUEST_ID), result.getCode(), result.getMsg());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user