From 4d9b84a40fcc5ee5268e5d75f39b8d519bf6fb03 Mon Sep 17 00:00:00 2001 From: clkim Date: Fri, 19 Dec 2025 11:23:11 +0900 Subject: [PATCH] =?UTF-8?q?fix.=20=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95,?= =?UTF-8?q?=20ip=20=ED=95=84=ED=84=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/locales/de.ts | 22 +++++++++++++++------- i18n/locales/en.ts | 22 +++++++++++++++------- i18n/locales/es.ts | 22 +++++++++++++++------- i18n/locales/fr.ts | 22 +++++++++++++++------- i18n/locales/ja.ts | 22 +++++++++++++++------- i18n/locales/ko.ts | 18 +++++++++++++----- i18n/locales/pt.ts | 22 +++++++++++++++------- i18n/locales/th.ts | 22 +++++++++++++++------- i18n/locales/zh-cn.ts | 22 +++++++++++++++------- i18n/locales/zh-tw.ts | 22 +++++++++++++++------- layers/components/atoms/LocaleLink.vue | 4 +++- layers/server/middleware/gameData.ts | 12 ++++++++++++ 12 files changed, 163 insertions(+), 69 deletions(-) diff --git a/i18n/locales/de.ts b/i18n/locales/de.ts index f0ed36d..c97650d 100644 --- a/i18n/locales/de.ts +++ b/i18n/locales/de.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['de'] || {} - return localeData + // locale이 'de'이므로 'de' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['de'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] de.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/en.ts b/i18n/locales/en.ts index 883038d..4b9e27c 100644 --- a/i18n/locales/en.ts +++ b/i18n/locales/en.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['en'] || {} - return localeData + // locale이 'en'이므로 'en' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['en'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] en.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/es.ts b/i18n/locales/es.ts index f98a9d2..b382b31 100644 --- a/i18n/locales/es.ts +++ b/i18n/locales/es.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['es'] || {} - return localeData + // locale이 'es'이므로 'es' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['es'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] es.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/fr.ts b/i18n/locales/fr.ts index 84ecf99..aced17c 100644 --- a/i18n/locales/fr.ts +++ b/i18n/locales/fr.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['fr'] || {} - return localeData + // locale이 'fr'이므로 'fr' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['fr'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] fr.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/ja.ts b/i18n/locales/ja.ts index 783a64c..11a01a2 100644 --- a/i18n/locales/ja.ts +++ b/i18n/locales/ja.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['ja'] || {} - return localeData + // locale이 'ja'이므로 'ja' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['ja'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] ja.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/ko.ts b/i18n/locales/ko.ts index 60b9316..bb3812a 100644 --- a/i18n/locales/ko.ts +++ b/i18n/locales/ko.ts @@ -14,14 +14,22 @@ export default defineI18nLocale(async (locale: string) => { const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['ko'] || {} - return localeData + const localeData = + multilingualData[locale] || multilingualData['ko'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { console.error('[Exception] ko.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/pt.ts b/i18n/locales/pt.ts index 5a99ee1..0ca73fc 100644 --- a/i18n/locales/pt.ts +++ b/i18n/locales/pt.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['pt'] || {} - return localeData + // locale이 'pt'이므로 'pt' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['pt'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] pt.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/th.ts b/i18n/locales/th.ts index daa657f..a425478 100644 --- a/i18n/locales/th.ts +++ b/i18n/locales/th.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['th'] || {} - return localeData + // locale이 'th'이므로 'th' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['th'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] th.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/zh-cn.ts b/i18n/locales/zh-cn.ts index bf960f7..fdfe347 100644 --- a/i18n/locales/zh-cn.ts +++ b/i18n/locales/zh-cn.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['zh-cn'] || {} - return localeData + // locale이 'zh-cn'이므로 'zh-cn' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['zh-cn'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] zh-cn.defineI18nLocale: ', e) return fallback } }) - diff --git a/i18n/locales/zh-tw.ts b/i18n/locales/zh-tw.ts index 637339c..9093bdf 100644 --- a/i18n/locales/zh-tw.ts +++ b/i18n/locales/zh-tw.ts @@ -13,15 +13,23 @@ export default defineI18nLocale(async (locale: string) => { // multilingual 객체에서 현재 locale에 해당하는 데이터 추출 const multilingualData = resultGetMultilingual?.value?.multilingual if (multilingualData && typeof multilingualData === 'object') { - // locale이 'ko'이므로 'ko' 키의 데이터를 반환 - const localeData = multilingualData[locale] || multilingualData['zh-tw'] || {} - return localeData + // locale이 'zh-tw'이므로 'zh-tw' 키의 데이터를 반환 + const localeData = + multilingualData[locale] || multilingualData['zh-tw'] || fallback + + // localeData가 유효한 객체인지 확인 + if ( + localeData && + typeof localeData === 'object' && + !Array.isArray(localeData) + ) { + return localeData + } } - - return {} + + return fallback } catch (e) { - console.error('[Exception] ko.defineI18nLocale: ', e) + console.error('[Exception] zh-tw.defineI18nLocale: ', e) return fallback } }) - diff --git a/layers/components/atoms/LocaleLink.vue b/layers/components/atoms/LocaleLink.vue index 8a855bc..5baaccf 100644 --- a/layers/components/atoms/LocaleLink.vue +++ b/layers/components/atoms/LocaleLink.vue @@ -10,5 +10,7 @@ const localePath = useLocalePath() diff --git a/layers/server/middleware/gameData.ts b/layers/server/middleware/gameData.ts index ce62723..0611153 100644 --- a/layers/server/middleware/gameData.ts +++ b/layers/server/middleware/gameData.ts @@ -186,6 +186,18 @@ export default defineEventHandler(async event => { event.context.googleAnalyticsId = gameDataValue?.ga_code console.log('🚀 ~ gameData response:', event.context.gameData) + if (process.env.NODE_ENV !== 'live') { + // 테스트용 + setCookie( + event, + 'DEBUG_INFO', + JSON.stringify({ + clientIP: getTrueClientIp(event.node.req as any), + }), + { maxAge: 60 } + ) + } + // ------------------------------------------------------------------------------- // [Inspection Middleware] // -------------------------------------------------------------------------------