- app.json: version 0.2.0 / versionCode 2, drop expo-screen-capture plugin - add lib/i18n (ko/en/ja/zh), lib/roleTrack, LanguageContext + LanguageSelector - profile/security hardening across screens (login/register/forgot/profile/tabs) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
209 lines
8.8 KiB
TypeScript
209 lines
8.8 KiB
TypeScript
/*
|
|
* 한국어(ko) — 기본/폴백 로케일. **키 형상(shape)의 단일 출처.**
|
|
* 다른 로케일(en/zh/ja)은 이 파일의 타입(Resource)을 구현하므로 키 누락 시 tsc가 잡는다.
|
|
* 새 키는 반드시 여기에 먼저 추가하고 나머지 로케일을 맞춘다(병렬 편집 함정 회피 — 직렬·키 대조).
|
|
*/
|
|
export const ko = {
|
|
common: {
|
|
appName: 'KINTEX AI 전시관리',
|
|
loading: '확인 중…',
|
|
retry: '다시 시도',
|
|
cancel: '취소',
|
|
close: '닫기',
|
|
user: '사용자',
|
|
none: '-',
|
|
unknown: '알 수 없음',
|
|
error: '오류',
|
|
},
|
|
lang: {
|
|
title: '언어',
|
|
subtitle: '앱 표시 언어를 선택하세요. 선택은 이 기기에 저장됩니다.',
|
|
ko: '한국어',
|
|
en: 'English',
|
|
zh: '中文',
|
|
ja: '日本語',
|
|
},
|
|
roles: {
|
|
ORGANIZER: '주최자',
|
|
EXHIBITOR: '참가업체',
|
|
CONTRACTOR: '장치·시공업체',
|
|
HALL_MANAGER: '홀매니저',
|
|
},
|
|
nav: {
|
|
register: '회원가입',
|
|
forgotPassword: '비밀번호 찾기',
|
|
profile: '내 정보',
|
|
checklist: '현장 체크리스트',
|
|
inspection: '현장 검수',
|
|
ticketsIndex: '내 티켓',
|
|
ticketsSelect: '티켓 예매',
|
|
tabHome: '홈',
|
|
tabField: '현장',
|
|
tabGallery: '갤러리',
|
|
tabMore: '더보기',
|
|
},
|
|
login: {
|
|
brandTitle: '신청서를 내는 순간,\n시공 후 사진을 먼저 봅니다',
|
|
brandCaption: 'AI 생성 예상 이미지 · 실제 시공 결과와 다를 수 있습니다',
|
|
compromised:
|
|
'보안 위험이 감지된 기기입니다(루팅·후킹·디버거). 개인정보·티켓 보호를 위해 정상 기기에서 이용을 권장합니다.',
|
|
title: '로그인',
|
|
email: '이메일',
|
|
emailPlaceholder: 'name@company.co.kr',
|
|
password: '비밀번호',
|
|
passwordPlaceholder: '비밀번호',
|
|
otpLabel: '2차 인증 코드',
|
|
otpPlaceholder: '6자리 코드',
|
|
otpHelper: '인증 앱(TOTP)의 6자리 코드',
|
|
remember: '아이디 기억',
|
|
submit: '로그인',
|
|
submitOtp: '인증 후 로그인',
|
|
forgot: '비밀번호 찾기',
|
|
register: '회원가입',
|
|
errEmpty: '이메일과 비밀번호를 입력해 주세요.',
|
|
errOtpEmpty: '2차 인증 코드를 입력해 주세요.',
|
|
errOtpRequired: '2차 인증 코드가 필요합니다. 인증 앱의 코드를 입력해 주세요.',
|
|
errOtpInvalid: '인증 코드가 올바르지 않거나 만료되었습니다.',
|
|
errLocked: '로그인 시도 초과로 계정이 잠겼습니다. 잠시 후 다시 시도해 주세요.',
|
|
errGeneric: '로그인에 실패했습니다.',
|
|
},
|
|
register: {
|
|
title: '계정 만들기',
|
|
email: '이메일',
|
|
emailPlaceholder: 'name@company.co.kr',
|
|
name: '이름',
|
|
namePlaceholder: '홍길동',
|
|
password: '비밀번호',
|
|
passwordPlaceholder: '8자 이상',
|
|
passwordHelper: '8~100자',
|
|
company: '회사명 (선택)',
|
|
companyPlaceholder: '지오인포',
|
|
invite: '초대 코드 (선택)',
|
|
invitePlaceholder: '행사 초대 코드',
|
|
submit: '가입하기',
|
|
goLogin: '로그인으로 이동',
|
|
errInvalid: '이메일·이름·비밀번호(8자 이상)를 확인해 주세요.',
|
|
errEmailTaken: '이미 가입된 이메일입니다.',
|
|
errGeneric: '회원가입에 실패했습니다.',
|
|
doneJoined: '가입이 완료되었고 초대 행사에 연결되었습니다. 로그인해 주세요.',
|
|
done: '가입이 완료되었습니다. 로그인해 주세요.',
|
|
},
|
|
forgot: {
|
|
title: '비밀번호 재설정',
|
|
email: '이메일',
|
|
emailPlaceholder: 'name@company.co.kr',
|
|
request: '재설정 코드 요청',
|
|
code: '재설정 코드',
|
|
codePlaceholder: '6자리 코드',
|
|
newPassword: '새 비밀번호',
|
|
newPasswordPlaceholder: '8자 이상',
|
|
newPasswordHelper: '8~100자',
|
|
submit: '비밀번호 변경',
|
|
errEmail: '이메일을 입력해 주세요.',
|
|
errFields: '재설정 코드와 새 비밀번호(8자 이상)를 확인해 주세요.',
|
|
errCode: '재설정 코드가 올바르지 않거나 만료되었습니다.',
|
|
errRequest: '요청에 실패했습니다.',
|
|
errReset: '초기화에 실패했습니다.',
|
|
},
|
|
home: {
|
|
hello: '{{name}}님, 안녕하세요',
|
|
noEvent: '참여 중인 행사가 없습니다 — 초대 링크 또는 초대 코드를 확인해 주세요.',
|
|
progress: '진행 상태',
|
|
stepApply: '신청',
|
|
stepApprove: '승인',
|
|
stepBuild: '시공',
|
|
stepInspect: '검수',
|
|
actionChecklist: '현장 체크리스트',
|
|
actionInspection: '현장 검수',
|
|
actionGallery: '시각화 갤러리',
|
|
memberInternal: '킨텍스 내부 계정 (홀매니저)',
|
|
memberGeneral: '일반 계정',
|
|
},
|
|
field: {
|
|
title: '현장 업무',
|
|
guide: '현장 기능은 장치·시공업체(체크리스트)와 홀매니저(검수) 역할에서 제공됩니다.',
|
|
checklistTitle: '현장 체크리스트',
|
|
checklistDesc: '장치 공정 확인 · 사진 첨부 · 검수 요청',
|
|
inspectionTitle: '현장 검수',
|
|
inspectionDesc: '승인 도면 vs 현장 사진 · 적합/부적합 판정',
|
|
},
|
|
gallery: {
|
|
infoBar: 'AI 생성 이미지는 계약·심사 서류에 사용할 수 없습니다 — 시공 기준은 도면입니다',
|
|
degraded: '서버 이미지 이력에 연결할 수 없어 예시를 표시합니다 (degraded).',
|
|
empty: '아직 생성된 이미지가 없습니다 — 설계 스튜디오에서 예상 사진을 생성하세요.',
|
|
retry: '다시 생성',
|
|
studioNote: '설계 스튜디오는 데스크톱에서 편집',
|
|
notice: 'AI 생성 이미지는 계약·심사 서류에 사용할 수 없습니다 (시공 기준은 도면)',
|
|
},
|
|
more: {
|
|
accountInternal: '킨텍스 내부 계정 (홀매니저)',
|
|
accountGeneral: '일반 계정',
|
|
openProfile: '내 정보 열기',
|
|
apiServer: 'API 서버',
|
|
serverStatus: '서버 상태',
|
|
statusUp: '정상 (UP)',
|
|
statusDown: '연결 불가 (degraded)',
|
|
signOut: '로그아웃',
|
|
version: 'KINTEX AI 전시관리 · v0.1.0',
|
|
},
|
|
profile: {
|
|
sectionInfo: '내 정보',
|
|
sectionEventRoles: '참여 행사 역할',
|
|
sectionSecurity: '계정 · 보안',
|
|
sectionBiometric: '생체인식 잠금',
|
|
sectionNotify: '알림 설정',
|
|
labelName: '이름',
|
|
labelUserId: '사용자 ID',
|
|
labelGlobalRole: '전역 역할',
|
|
labelTenant: '전시관(테넌트)',
|
|
labelType: '구분',
|
|
typeInternal: '킨텍스 내부(홀매니저)',
|
|
typeGeneral: '일반 계정',
|
|
photoChange: '프로필 사진 변경',
|
|
photoTitle: '프로필 사진',
|
|
photoSelect: '사진을 선택하세요',
|
|
photoLibrary: '갤러리',
|
|
photoCamera: '카메라',
|
|
photoApply: '적용',
|
|
photoApplying: '적용 중…',
|
|
photoCaption: '원형으로 표시됩니다.',
|
|
photoPending: '선택한 사진은 이 기기에만 표시됩니다 — 서버 반영은 준비 중입니다.',
|
|
photoPickerUnavailable: '이미지 선택 기능을 사용할 수 없는 기기입니다.',
|
|
loadErr: '내정보를 불러오지 못했습니다.',
|
|
uploadErr: '사진 업로드에 실패했습니다.',
|
|
otpTitle: '2차 인증(OTP)',
|
|
otpOnAuth: '활성화됨 · Authenticator(OTP)',
|
|
otpOnMethod: '활성화됨 · {{method}}',
|
|
otpOff: '미설정 — 로그인 시 인증 앱(TOTP) 2단계 인증을 사용합니다.',
|
|
on: '켜짐',
|
|
off: '꺼짐',
|
|
bioTitle: '지문 · Face 잠금',
|
|
bioDesc:
|
|
'켜면 내정보 진입 시 지문 또는 Face로 재인증합니다. 로그인 2차 인증은 그대로 유지됩니다.',
|
|
bioUnsupported:
|
|
'이 기기는 생체인식을 지원하지 않거나 지문/Face가 등록되어 있지 않습니다. 기기 설정에서 생체 정보를 등록한 뒤 다시 시도해 주세요.',
|
|
bioFailed: '생체 인증에 실패했습니다. 다시 시도해 주세요.',
|
|
biometric: '생체인식',
|
|
lockTitle: '생체인식 잠금',
|
|
lockHint: '지문 또는 Face로 잠금을 해제하세요.',
|
|
notifyDeadline: '마감 D-데이 알림',
|
|
notifyApproval: '승인·검수 알림',
|
|
notifyPayment: '결제·정산 알림',
|
|
notifyNote: '알림 설정은 이 기기에 저장됩니다. 서버 동기화는 준비 중입니다.',
|
|
signOut: '로그아웃',
|
|
signOutConfirm: '로그아웃하시겠습니까?',
|
|
version: 'KINTEX AI 전시관리 · 내정보',
|
|
},
|
|
tickets: {
|
|
offline: '오프라인 — 저장된 티켓 표시 중',
|
|
badgeNotice: '티켓 QR로 현장 체크인하면 모바일 배지로 전환됩니다',
|
|
footNote: '표시된 티켓은 샘플입니다 — 티켓 백엔드(M10) 연동 시 실데이터로 대체됩니다.',
|
|
emptyTitle: '보유한 티켓이 없습니다',
|
|
emptyBody: '입장권을 예매하면 이곳에 티켓이 표시됩니다.',
|
|
emptyBtn: '입장권 예매',
|
|
detailTitle: '예매 상세·취소',
|
|
},
|
|
} as const;
|
|
|
|
export type Resource = typeof ko;
|