# 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)