English · 한국어 · 简体中文 · 繁體中文 · 日本語 · Español
기본 언어는 영어이며 영어, 한국어, 간체 중국어(zh-Hans), 번체 중국어(zh-Hant), 일본어(ja), 스페인어(es)를 제공합니다. React 공급자는 hydration 후 명시적인 언어 설정을 복원해 정적 영어 출력과 첫 클라이언트 렌더를 일치시킵니다. 선택은 localStorage의 scopeweaver.locale과 scopeweaver_locale 쿠키에 저장됩니다. API는 hydration 완료 전에도 저장된 설정을 읽으며 localStorage가 차단되면 쿠키를 사용합니다. 운영체제나 브라우저의 언어를 자동으로 선택하지 않습니다.
- 검토된 표준 ID, 원어 이름, Intl 언어 태그, 별칭을
locale/definitions.json에 추가합니다. 프런트엔드는 이 선언을 가져오고 Go는 임베딩합니다.locale/matching-vectors.json에 허용·거부 사례를 추가합니다. 필요한 프런트엔드Locale타입과 백엔드 상수를 확장하고 완전성 검사가 선언과 일치하도록 합니다. 기존 EN/KO 별칭은 보존합니다. - 여섯 namespace의 현재 영어 키를 모두 번역합니다. 영어가
MessageKey타입과 의미의 기준입니다.catalog.ts에 새 타입 검사 대상 테이블을 등록합니다. 영어 복사본이나 런타임 대체로 누락을 숨긴 카탈로그는 제공하지 않습니다.messages/zh-hans.ts처럼 영어 namespace와 키를 대조합니다. 보간 필드 이름과 반복을 포함한 짝지어진 rich 태그를 보존합니다. 기술 식별자, 코드, 프로토콜 값은 바꾸지 않습니다. calendar.ts에 date-fns 객체를 추가합니다. 선택기의 원어 이름과 Intl 형식은 공통 선언을 따르며 달력과 날짜 범위 표시는 공통 date-fns 매핑을 사용합니다. 호출자가 지정한 달력 언어나 formatter가 우선합니다.- 백엔드의 언어별 카탈로그와 외부 production 등록을 모두 추가합니다.
locale.Register(key, en, ko)는 호환성을 유지하며 추가 언어는locale.RegisterAll(map[string]map[locale.Lang]string{key: {locale.En: en, locale.Ko: ko, locale.ZhHans: zh}})로 등록합니다.Lookup대신 원시 등록을 검사합니다.Lookup의 영어/키 대체는 알 수 없거나 불완전한 호출자의 호환성을 위한 것이며 출시 완전성을 충족하지 않습니다. - 정규화, 무결성, 상태 보존, 브라우저 시나리오를 추가합니다. 프런트엔드 테스트·타입 검사·정적 출력, 백엔드 카탈로그/등록 테스트와 CONTRIBUTING.ko.md의 필수 검사를 실행합니다. 번역 리뷰의 우려와 해결을 기록합니다. 확인되지 않은 독립 리뷰를 원어민 승인으로 표현하지 않습니다. 영어/한국어 기능 문서를 포함해 영어, 한국어, 간체 중국어, 번체 중국어, 일본어, 스페인어 여섯 언어의 사용자·기여자 안내를 모두 완전하게 유지합니다.
- 독립 어댑터의 표준 언어 ID 목록(
adapters/agent/src/client.js의SUPPORTED_LANGUAGES)과 루트 셸·배치 메시지 헬퍼도 함께 갱신합니다. 배포 어댑터는 자체 목록을 가지며 실행 시 저장소 루트 JSON에 의존하지 않아야 합니다.node e2e/script-locales.mjs로 어댑터/레지스트리 일치, 별칭, 셸 메시지, 보간과 일회용 스크립트 흐름을 확인합니다. 이 검사의 Windows 부분은 배치 구조만 확인하므로 실제 Windows 실행 일치는 Windows에서node e2e/windows-launcher.mjs또는 Windows CI로 검증해야 합니다.
언어 일치는 대소문자를 구분하지 않고 지역 태그의 밑줄 표기도 허용합니다. zh, zh-CN, zh-SG는 명시적으로 zh-Hans에 매핑되며 zh-Hans 뒤에 지역을 붙여도 일치합니다. 명시된 문자가 지역보다 우선하므로 zh-Hans-TW는 간체 중국어입니다. 번체 입력(zh-Hant, zh-TW, zh-HK, zh-MO, zh-Hant-CN 포함)은 zh-Hant로 일치하며 간체로 정규화하지 않습니다. 일본어와 스페인어 지역 태그는 ja와 es로 일치하며, 지원하지 않는 언어는 다음 설정 또는 기본값을 사용합니다. 충돌하는 두 중국어 문자를 명시하면 지원하지 않는 태그로 처리합니다.
컴포넌트는 useI18n().t, React 외부 도우미는 translate를 사용합니다. 제공하는 카탈로그는 모든 키를 포함하며 프런트엔드의 알 수 없는 키는 키 자체를 표시합니다. 사용자 값은 보간 매개변수로 전달합니다. 사용자 입력, 저장된 보고서, 원시 증거, 식별자, API 필드 이름, 자격 증명, 프로토콜 값을 번역하지 않습니다. 기존 중국어 멘션 전송 값과 과거 파서 별칭은 보존하고 화면 이름만 별도로 번역합니다.
interface namespace는 이전 화면과 작성된 데모 문구의 안정적인 ID를 유지하며 english는 기존 영어 화면 문구를 담습니다. 새 기능은 적절한 namespace에 의미 있는 키를 추가합니다. 정적 설정 객체는 getter로 번역된 이름을 노출합니다. 소비자는 언어 변경을 구독하고 메모된 결과는 언어를 의존성에 포함합니다. 언어 변경은 앱을 다시 마운트하거나 초안을 지우지 않습니다.
localizedFetch는 명시적인 호출자 설정과 인증을 보존하면서 언어 헤더와 쿼리를 추가합니다. SSE는 언어 쿼리를 추가하는 sseUrl을 사용합니다. 날짜와 숫자는 getIntlLocale 또는 fmt를 사용합니다.
prepareDemoFixture는 작성된 초기 데모에만 적용합니다. 편집하면 accessor를 쓰기 가능한 일반 값으로 바꾸며 cloneDemoFixture도 이를 보존합니다. 번역문과 같은 사용자 값도 바꾸지 않습니다.
web에서 npm test, npx tsc --noEmit, npm run build:static을 실행합니다. 테스트는 모든 카탈로그, 누락·빈값·보간·rich 태그 실패 사례, 공통 언어 사례, 저장/hydration, API/SSE, 편집 가능한 데모, 기존 멘션, Intl/date-fns, 호출자 우선 설정을 검사합니다. AST Han 검사는 여섯 중국어 카탈로그 객체의 직접 문자열 값에만 예외를 줍니다. 같은 파일의 일반 코드, 다른 화면 코드, 소스/설정 주석은 계속 검사합니다. 새 리소스도 검토된 좁은 예외를 추가하며 디렉터리 전체를 제외하지 않습니다. EN/KO 카탈로그의 미번역 Han 검사도 유지합니다. 번체 중국어와 일본어 리소스에는 같은 직접 값 예외를 좁게 적용하며 스페인어에는 예외가 없습니다.
필수 e2e 스모크는 같은 체크아웃의 임베디드 바이너리와 새 일회용 DB를 사용합니다. 기존 EN/KO 검사를 유지하며 여섯 언어의 초기 설정/로그인/작업/설정/채팅 초안, 설정 복원, 첫 API 언어, SSE 재연결/필터 보존과 화면의 숫자 형식을 검사합니다. 기존 대시보드 토큰 회귀도 npm run smoke에 포함됩니다. 날짜 범위 선택기는 현재 실제 화면 호출자가 없어 date-fns/날짜 범위와 명시적 달력 언어는 순수 함수 테스트로 검증합니다. 실제 호출자를 마운트해 조작하지 않았다면 브라우저 달력 검증으로 보고하지 않습니다.