12

글로벌

기능설계 ⑫ — 한국의 실벗을 세계 어르신에게

항목내용
기능 IDFEAT-GLOBAL
연결 시스템마스터 시스템⑫ 글로벌 · 전 시스템에 적용되는 횡단 관심사(i18n)
한 줄 정의다국어·현지 통화/긴급번호/문화에 맞춰 실벗을 다른 나라에 확장한다
관련 액터PWA실벗서버아리
설계 철학 — 글로벌은 "번역"이 아니라 "현지화(Localization)"입니다. 언어·긴급번호·통화·문화·아리의 말투까지 그 나라 어르신에게 맞춥니다. 모든 기능(d01~d11)에 적용되는 횡단 설계.

설계 7계층 체크리스트

계층이 문서의 섹션
① UI언어·지역 설정 SCR-GLB-01 + 전 화면 i18n 적용
② Flow로케일 결정 → 리소스 로드 → 현지화 적용
③ Datalocales / translations / region_settings
④ API로케일·번역 리소스·지역설정 엔드포인트
⑤ Seq로케일 협상 → 현지화 적용 시퀀스
⑥ Compi18n 미들웨어·번역 리소스 구조
⑦ Test검수 체크리스트

① UI · 화면 명세

언어·지역 설정 SCR-GLB-01

영역요소 / 동작
언어 선택국기+언어명 큰 버튼(한국어·English·日本語·中文…)
지역 선택국가/지역 → 긴급번호(119/911/999)·통화 자동 설정
아리 말투현지 문화에 맞는 인사·존칭 방식

현지화 대상 (전 화면 횡단)

대상
텍스트모든 UI 문구·아리 응답 언어
긴급번호(d02)SOS 119 → 국가별 응급번호로 자동 치환
통화·날짜·숫자지역 포맷(₩/$/¥, YYYY-MM-DD 등)

② Flow · 로케일 결정·적용

앱 실행 로케일 협상(설정>기기>기본) 번역 리소스 로드 지역 설정 적용 현지화 렌더

우선순위: 사용자 명시 설정 > 기기 언어 > 기본(ko). 번역 누락 키는 기본 언어로 폴백(빈 화면 금지).

③ Data · DB 스키마

MariaDB · UTF8MB4 · InnoDB
CREATE TABLE locales ( code VARCHAR(10) PRIMARY KEY, -- 'ko','en','ja' name VARCHAR(40), is_active TINYINT DEFAULT 1 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE translations ( id BIGINT PRIMARY KEY AUTO_INCREMENT, locale VARCHAR(10) NOT NULL, t_key VARCHAR(120) NOT NULL, -- 'home.greeting' t_value TEXT, UNIQUE KEY uq_t (locale, t_key), FOREIGN KEY (locale) REFERENCES locales(code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE region_settings ( region VARCHAR(10) PRIMARY KEY, -- 'KR','US','JP' emergency_no VARCHAR(10), -- '119','911' currency VARCHAR(10), -- 'KRW','USD' date_fmt VARCHAR(20) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
설계 포인트 — 긴급번호는 region_settings에서 가져와 d02 SOS의 119 호출을 자동 치환. 글로벌 확장 시 생명 안전 로직을 다시 짜지 않는다.

④ API · 엔드포인트 명세

M경로설명
GET/i18n/{locale}번역 리소스 번들(캐시 가능)
PUT/me/locale사용자 언어·지역 설정
GET/i18n/region/{region}지역 설정(긴급번호·통화)

응답의 {success,data,meta} 구조 안에서 어르신용 message는 항상 사용자 로케일로 내려간다.

⑤ Seq · 로케일 협상·적용

PWA
앱 실행 → 저장된 로케일 또는 기기 언어 판정 → GET /i18n/{locale}
실벗
번역 번들 반환(ETag 캐시) + region_settings 동봉
PWA
i18n 적용 + 긴급번호·통화·날짜 포맷 치환
아리
로케일을 프롬프트에 주입 → 현지 언어·말투로 응답(d01)
폴백 — 번역 키 누락 시 기본 언어(ko)로 표시. 절대 빈 문자열/키 노출 금지.

⑥ Comp · 컴포넌트 / 모듈 구조

프론트엔드 (PWA)

core/i18n/ ├─ i18n.js # t(key) 번역 함수·폴백 ├─ LocaleProvider.js # 전역 로케일 상태 ├─ formatters.js # 통화·날짜·숫자 └─ LocaleSettings.js # 언어·지역 설정 화면

백엔드 (PHP)

app/ ├─ Controllers/I18nController.php ├─ Middleware/LocaleMiddleware.php # 요청별 로케일 결정 └─ Services/ TranslationService.php # 번들·폴백
모듈책임
LocaleMiddleware모든 요청에서 로케일 결정(헤더·사용자설정). 응답 message를 해당 언어로.
i18n.js (t)전 화면 공통 번역 함수. 누락 키는 기본 언어 폴백.

⑦ Test · 검수 체크리스트

ID시나리오기대 결과
T-01언어를 English로 변경전 화면 문구·아리 응답 영어로 전환
T-02지역을 US로 설정긴급번호 911·통화 USD·날짜 포맷 적용
T-03US 지역에서 SOS 발동(d02)119 대신 911로 자동 호출
T-04번역 키 누락기본 언어(ko)로 폴백, 빈 화면/키 노출 0
T-05오프라인 재실행캐시된 번역 번들로 정상 표시
완료 판정 — T-01~T-05 통과 시 FEAT-GLOBAL 완료. T-03(긴급번호 치환)·T-04(폴백)는 글로벌 확장의 생명·안정성 핵심.
기능설계 ⑫ 완성 — 12대 시스템 전체 설계 완료! 글로벌은 d01~d11 모든 기능에 적용되는 횡단 설계입니다. 이로써 실벗 개발 설계서의 12대 시스템이 7계층(UI→Flow→DB→API→Seq→Comp→Test)으로 모두 완성되었습니다.