From 5c81f5d4d63010e573de5f4cea81c0c67c283760 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Chyeonggkim=E2=80=9D?=
<“hyeonggkim@smilegate.com”>
Date: Tue, 11 Nov 2025 19:08:58 +0900
Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=97=90=EB=9F=AC=20=EC=B2=98?=
=?UTF-8?q?=EB=A6=AC=20=EC=99=84=EB=A3=8C,=20=ED=8E=98=EC=9D=B4=EC=A7=80?=
=?UTF-8?q?=20=EC=A0=91=EA=B7=BC=20api=20=EB=AF=B8=EB=93=A4=EC=9B=A8?=
=?UTF-8?q?=EC=96=B4=EB=A1=9C=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DYNAMIC_I18N_ROUTES.md | 120 -------------------------
app/error.vue | 105 ++++++++++++++++++++++
app/pages/error/index.vue | 59 ------------
error.vue | 118 ++++++++++++------------
i18n.config.ts | 8 +-
layers/middleware/init.route.global.ts | 36 +++++---
layers/middleware/inspection.ts | 17 ++++
layers/middleware/pageData.global.ts | 59 ++++++++++--
layers/plugins/error-handler.ts | 12 ---
layers/server/middleware/gameData.ts | 58 ++++++++++++
layers/templates/FxSecure01/index.vue | 1 +
layers/types/api/pageData.ts | 1 +
12 files changed, 318 insertions(+), 276 deletions(-)
delete mode 100644 DYNAMIC_I18N_ROUTES.md
create mode 100644 app/error.vue
delete mode 100644 app/pages/error/index.vue
delete mode 100644 layers/plugins/error-handler.ts
diff --git a/DYNAMIC_I18N_ROUTES.md b/DYNAMIC_I18N_ROUTES.md
deleted file mode 100644
index 056b74d..0000000
--- a/DYNAMIC_I18N_ROUTES.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# Dynamic I18n Routes - gameData.lang_codes 기반 언어 제외 설정
-
-이 문서는 `gameDataFromServer.lang_codes`를 기반으로 특정 언어들을 제외하는 Ignoring Localized Routes 기능의 사용법을 설명합니다.
-
-## 구현된 기능
-
-### 1. 동적 언어 제외 설정
-- `gameDataFromServer.lang_codes`에 포함된 언어만 허용
-- 포함되지 않은 언어는 자동으로 제외 처리
-- 런타임에 동적으로 언어 설정 변경
-
-### 2. 구현된 파일들
-
-#### `i18n.config.ts`
-- `getI18n()` 함수에 `allowedLangCodes` 매개변수 추가
-- `generatePageExclusions()` 함수로 언어 제외 설정 생성
-- `customRoutes: 'config'` 설정으로 페이지별 언어 제외 지원
-
-#### `layers/composables/useDynamicI18nRoutes.ts`
-- `getAllowedLangCodes()`: 허용된 언어 목록 반환
-- `isLangAllowed()`: 특정 언어 허용 여부 확인
-- `getI18nRouteConfig()`: `defineI18nRoute`용 설정 생성
-- `getExcludedLangConfig()`: 특정 언어 제외 설정 생성
-
-#### `layers/plugins/dynamic-i18n-routes.client.ts`
-- 클라이언트 사이드에서 gameData 변경 감지
-- 언어 설정 동적 업데이트
-
-#### `layers/plugins/dynamic-i18n-routes.server.ts`
-- 서버 사이드에서 gameData 기반 언어 설정 적용
-
-## 사용법
-
-### 1. 페이지에서 동적 언어 제외 설정
-
-```vue
-
-```
-
-### 2. 특정 언어만 허용하는 경우
-
-```vue
-
-```
-
-### 3. 특정 언어를 제외하는 경우
-
-```vue
-
-```
-
-### 4. 언어 허용 여부 확인
-
-```vue
-
-```
-
-## 동작 원리
-
-1. **서버 사이드**: `gameDataFromServer.lang_codes`를 기반으로 초기 언어 설정 적용
-2. **클라이언트 사이드**: gameData 변경 시 언어 설정 동적 업데이트
-3. **페이지 레벨**: `defineI18nRoute`를 통해 페이지별 언어 제외 설정
-4. **자동 리다이렉트**: 허용되지 않은 언어로 접근 시 기본 언어로 리다이렉트
-
-## 예시 시나리오
-
-### 시나리오 1: 게임별 언어 제한
-```typescript
-// gameData.lang_codes = ['ko', 'en', 'ja']
-// 결과: 한국어, 영어, 일본어만 허용, 나머지 언어는 자동 제외
-```
-
-### 시나리오 2: 특정 언어 제외
-```typescript
-// gameData.lang_codes = ['ko', 'en', 'ja', 'zh-tw', 'fr', 'de', 'es', 'pt', 'th', 'zh-cn']
-// getExcludedLangConfig(['fr', 'de']) 호출
-// 결과: 프랑스어, 독일어 제외, 나머지 언어 허용
-```
-
-## 주의사항
-
-1. `defineI18nRoute`는 컴파일 타임에 실행되므로, 동적 설정이 필요한 경우 `watchEffect`나 `watch`를 사용
-2. SSR과 클라이언트 사이드 모두에서 일관된 동작을 위해 플러그인 사용 권장
-3. 언어 변경 시 사용자 경험을 고려한 적절한 리다이렉트 처리 필요
-
-## 참고 문서
-
-- [Nuxt i18n - Ignoring Localized Routes](https://i18n.nuxtjs.org/docs/guide/ignoring-localized-routes)
-- [Nuxt i18n - defineI18nRoute](https://i18n.nuxtjs.org/docs/compiler-macros/define-i18n-route)
diff --git a/app/error.vue b/app/error.vue
new file mode 100644
index 0000000..e2f4873
--- /dev/null
+++ b/app/error.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/pages/error/index.vue b/app/pages/error/index.vue
deleted file mode 100644
index 4549382..0000000
--- a/app/pages/error/index.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/error.vue b/error.vue
index 2509015..c1b40a7 100644
--- a/error.vue
+++ b/error.vue
@@ -1,14 +1,16 @@
-