diff --git a/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java b/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java index cfde2bc4..e7d1ca72 100644 --- a/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/code/dto/CommonCodeDto.java @@ -2,6 +2,7 @@ package com.kamco.cd.kamcoback.code.dto; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import com.kamco.cd.kamcoback.common.utils.html.HtmlEscapeDeserializer; import com.kamco.cd.kamcoback.common.utils.html.HtmlUnescapeSerializer; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; @@ -14,7 +15,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -120,8 +120,7 @@ public class CommonCodeDto { String props2, String props3, ZonedDateTime deletedDttm) { - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); this.id = id; this.code = code; this.description = description; diff --git a/src/main/java/com/kamco/cd/kamcoback/common/utils/HeaderUtil.java b/src/main/java/com/kamco/cd/kamcoback/common/utils/HeaderUtil.java index d7078aa2..41a0bd96 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/utils/HeaderUtil.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/utils/HeaderUtil.java @@ -1,6 +1,9 @@ package com.kamco.cd.kamcoback.common.utils; import jakarta.servlet.http.HttpServletRequest; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; public final class HeaderUtil { @@ -20,4 +23,20 @@ public final class HeaderUtil { public static String getRequired(HttpServletRequest request, String headerName) { return get(request, headerName); } + + public static boolean isEnglishRequest() { + RequestAttributes attrs = RequestContextHolder.getRequestAttributes(); + + if (!(attrs instanceof ServletRequestAttributes servletAttrs)) { + return false; + } + + String acceptLanguage = servletAttrs.getRequest().getHeader("Accept-Language"); + + if (acceptLanguage == null || acceptLanguage.isBlank()) { + return false; + } + + return acceptLanguage.toLowerCase().startsWith("en"); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java b/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java index b81a7931..249cdeb5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java +++ b/src/main/java/com/kamco/cd/kamcoback/common/utils/enums/Enums.java @@ -1,13 +1,13 @@ package com.kamco.cd.kamcoback.common.utils.enums; import com.kamco.cd.kamcoback.code.dto.CommonCodeDto.CodeDto; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.reflections.Reflections; -import org.springframework.context.i18n.LocaleContextHolder; public class Enums { @@ -33,8 +33,7 @@ public class Enums { // enum -> CodeDto list public static List toList(Class> enumClass) { Object[] enums = enumClass.getEnumConstants(); - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); return Arrays.stream(enums) .map(e -> (EnumType) e) diff --git a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java index 96106a59..0ea0765f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/mapsheet/dto/MapSheetMngDto.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.mapsheet.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.kamco.cd.kamcoback.common.enums.MngStateType; import com.kamco.cd.kamcoback.common.enums.SyncStateType; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import com.kamco.cd.kamcoback.common.utils.enums.EnumType; import com.kamco.cd.kamcoback.common.utils.enums.Enums; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; @@ -16,7 +17,6 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -223,9 +223,9 @@ public class MapSheetMngDto { enumId = "NOTYET"; } - String lang = LocaleContextHolder.getLocale().getLanguage(); + boolean english = HeaderUtil.isEnglishRequest(); MngStateType type = Enums.fromId(MngStateType.class, enumId); - if ("en".equalsIgnoreCase(lang)) { + if (english) { return type.getTextEn(); } return type.getText(); @@ -351,8 +351,8 @@ public class MapSheetMngDto { } SyncStateType type = Enums.fromId(SyncStateType.class, enumId); - String lang = LocaleContextHolder.getLocale().getLanguage(); - if ("en".equalsIgnoreCase(lang)) { + boolean english = HeaderUtil.isEnglishRequest(); + if (english) { return type.getTextEn(); } return type.getText(); diff --git a/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java b/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java index f8094a6d..6f595b80 100644 --- a/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/members/dto/MembersDto.java @@ -3,6 +3,7 @@ package com.kamco.cd.kamcoback.members.dto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.kamco.cd.kamcoback.common.enums.RoleType; import com.kamco.cd.kamcoback.common.enums.StatusType; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import com.kamco.cd.kamcoback.common.utils.enums.Enums; import com.kamco.cd.kamcoback.common.utils.interfaces.EnumValid; import com.kamco.cd.kamcoback.common.utils.interfaces.JsonFormatDttm; @@ -15,7 +16,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -66,15 +66,13 @@ public class MembersDto { private String getUserRoleName(String roleId) { RoleType type = Enums.fromId(RoleType.class, roleId); - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); return english ? type.getTextEn() : type.getText(); } private String getStatusName(String status, Boolean pwdResetYn) { StatusType type = Enums.fromId(StatusType.class, status); - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); pwdResetYn = pwdResetYn != null && pwdResetYn; if (type.equals(StatusType.PENDING) && pwdResetYn) { type = StatusType.ACTIVE; diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MenuCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MenuCoreService.java index d10f620a..cd775d9e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/MenuCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/MenuCoreService.java @@ -1,5 +1,6 @@ package com.kamco.cd.kamcoback.postgres.core; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import com.kamco.cd.kamcoback.menu.dto.MenuDto; import com.kamco.cd.kamcoback.menu.dto.MyMenuDto; import com.kamco.cd.kamcoback.postgres.entity.MenuEntity; @@ -8,7 +9,6 @@ import java.util.Comparator; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Service; @Slf4j @@ -30,12 +30,8 @@ public class MenuCoreService { */ public List getFindByRole(String role) { List entities = menuRepository.getFindByRole(role); - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = lang.equalsIgnoreCase("en"); - log.info( - "[LANG CHECK] locale={}, language={}", - LocaleContextHolder.getLocale(), - LocaleContextHolder.getLocale().getLanguage()); + boolean english = HeaderUtil.isEnglishRequest(); + log.info("[LANG CHECK] english={}", english); return entities.stream() .map( diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java index e7ef12ea..bf3a305c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/log/AuditLogRepositoryImpl.java @@ -5,6 +5,7 @@ import static com.kamco.cd.kamcoback.postgres.entity.QErrorLogEntity.errorLogEnt import static com.kamco.cd.kamcoback.postgres.entity.QMemberEntity.memberEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMenuEntity.menuEntity; +import com.kamco.cd.kamcoback.common.utils.HeaderUtil; import com.kamco.cd.kamcoback.log.dto.AuditLogDto; import com.kamco.cd.kamcoback.log.dto.AuditLogDto.DownloadReq; import com.kamco.cd.kamcoback.log.dto.ErrorLogDto; @@ -27,7 +28,6 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.List; import java.util.Objects; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; @@ -85,10 +85,8 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport public Page findLogByMenu( AuditLogDto.searchReq searchReq, String searchValue) { Pageable pageable = searchReq.toPageable(); - String lang = LocaleContextHolder.getLocale().getLanguage(); - - Expression menuNameExpr = - "en".equalsIgnoreCase(lang) ? menuEntity.menuNmEn.max() : menuEntity.menuNm.max(); + boolean english = HeaderUtil.isEnglishRequest(); + Expression menuNameExpr = english ? menuEntity.menuNmEn.max() : menuEntity.menuNm.max(); List foundContent = queryFactory @@ -224,8 +222,7 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport @Override public Page findLogByDailyResult( AuditLogDto.searchReq searchReq, LocalDate logDate) { - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); Pageable pageable = searchReq.toPageable(); QMenuEntity parent = new QMenuEntity("parent"); // 1depth menu name @@ -296,8 +293,7 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport @Override public Page findLogByMenuResult( AuditLogDto.searchReq searchReq, String menuUid) { - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); Pageable pageable = searchReq.toPageable(); QMenuEntity parent = new QMenuEntity("parent"); // 1depth menu name @@ -365,8 +361,7 @@ public class AuditLogRepositoryImpl extends QuerydslRepositorySupport @Override public Page findLogByAccountResult( AuditLogDto.searchReq searchReq, Long userUid) { - String lang = LocaleContextHolder.getLocale().getLanguage(); - boolean english = "en".equalsIgnoreCase(lang); + boolean english = HeaderUtil.isEnglishRequest(); Pageable pageable = searchReq.toPageable(); QMenuEntity parent = new QMenuEntity("parent"); // 1depth menu name