Add Korean Japanese and English user interfaces
This commit is contained in:
36
docs/LANGUAGES.md
Normal file
36
docs/LANGUAGES.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# 사용자 화면의 언어
|
||||
|
||||
hop.의 사용자 화면은 한국어(`ko`), 일본어(`ja`), 영어(`en`)를 지원합니다. 관리자 페이지의 본문·관리 기록·날짜 표시는 한국어를 유지합니다.
|
||||
|
||||
## 처음 접속할 때
|
||||
|
||||
1. 같은 브라우저에 저장된 직접 선택 언어가 있으면 가장 먼저 적용합니다.
|
||||
2. 저장된 선택이 없고 기존 신뢰 프록시 설정으로 국가를 확인할 수 있으면 대한민국은 한국어, 일본은 일본어, 그 외 국가는 영어로 표시합니다.
|
||||
3. 국가를 확인할 수 없으면 브라우저의 지원 언어 목록을 참고하고, 지원 언어가 없으면 영어를 사용합니다.
|
||||
|
||||
새 위치 권한 요청, GPS 조회, 외부 IP 조회 서비스나 GeoIP DB를 추가하지 않습니다. 기존 `CLIENT_IP_SOURCE=cloudflare`와 `TRUSTED_PROXY_CIDRS`로 확인한 국가만 사용합니다. 직접 보낸 위조 국가 헤더는 기본 언어 판별에 쓰지 않습니다. IP 기반 국가가 실제 거주지와 같다는 보장은 없으므로 항상 직접 변경할 수 있습니다.
|
||||
|
||||
상단 지구본 옆 선택창에서 **한국어 / 日本語 / English**를 선택합니다. 선택은 `localStorage`의 `hop-language`에 저장하며, 같은 브라우저의 다른 탭과도 동기화합니다. 로그인 계정의 공통 설정이 아니므로 브라우저마다 다른 언어를 쓸 수 있습니다. 사이트 데이터를 지우면 저장된 선택도 지워집니다. 저장소를 쓸 수 없어도 현재 페이지에서 선택한 언어는 적용됩니다.
|
||||
|
||||
국가 응답을 기다리는 중 직접 선택한 언어도 우선합니다. 언어 전환은 앱을 다시 시작하거나 기기·세션·계정을 초기화하지 않습니다. 작성 중인 내용과 선택한 파일·전송 상태는 유지합니다.
|
||||
|
||||
## 번역 범위
|
||||
|
||||
기기 목록·연결 공간·파일/클립보드 전송·수락/거절·텍스트 복사·로그인/가입/비밀번호 변경·계정 보관함·알림·설치 안내를 번역합니다. 날짜는 사용자 화면의 언어와 브라우저 시간대에 맞춰 표시하고, 관리자 날짜는 기존 한국 시간 표시를 유지합니다. 사용자가 요청한 인증·비밀번호 재설정 메일은 요청 시 선택한 언어로 발송합니다. 링크·인증 토큰·메일 발송/요청 제한은 그대로입니다.
|
||||
|
||||
파일명·기기 이름·계정 표시 이름·메모·URL·전송 원문은 번역하지 않습니다. 사용자 메시지나 HTML을 번역 키로 실행하지 않고 Vue의 일반 텍스트 출력으로 표시합니다. 시스템 문구의 값은 한 번만 치환하므로 원문에 `{p0}` 같은 문자열이 있어도 재해석하지 않습니다.
|
||||
|
||||
공통 문구는 `packages/shared/src/messages.js`, 순수 언어 선택/치환 로직은 `packages/shared/src/localization.js`, 브라우저의 선택·날짜 처리는 `apps/web/src/i18n.js`에서 관리합니다. 한국어 원문을 번역 키로 사용하며 새 사용자 문구를 추가하면 영어·일본어와 변수 자리도 함께 추가합니다. 관리자 전용 문구는 이 카탈로그로 옮길 필요가 없습니다. API는 선택한 `Accept-Language`에 맞춰 최상위 시스템 `message`만 번역하며 자료 본문이나 API 코드·상태는 변경하지 않습니다. 기존 언어 헤더가 없는 클라이언트의 API 메시지는 한국어를 유지합니다.
|
||||
|
||||
설치 manifest는 언어별 이름/설명을 사용하고 오프라인 안내도 저장된 언어 또는 브라우저 언어로 표시합니다. 개인정보·파일·API 응답을 오프라인 캐시에 넣지 않습니다. OS 자체 클립보드 확인이나 브라우저 권한 창의 언어는 해당 OS/브라우저 설정을 따릅니다.
|
||||
|
||||
## 배포와 확인
|
||||
|
||||
DB 변경·자료 초기화·새 환경변수·Compose 변경이 없습니다. 같은 운영 Compose로 적용합니다.
|
||||
|
||||
```sh
|
||||
git pull --ff-only origin main
|
||||
sudo docker compose -f docker-compose.yaml up -d --build
|
||||
```
|
||||
|
||||
`npm test`는 언어 우선순위·신뢰 헤더·번역 누락/변수·선택 언어의 오류와 인증 메일을 검증합니다. `npm run test:e2e:languages`는 세 언어의 기본값, 수동 선택/재접속/다른 탭 동기화, 영어 가입·인증, 영어→일본어 실제 전송, 원문/파일 보존, 보관함·날짜·오류·관리자 한국어·모바일·오프라인 안내를 확인합니다. 실제 메일 검증은 격리 발송 대역을 사용하며 Resend 운영 메일은 발송하지 않습니다.
|
||||
@@ -240,3 +240,11 @@
|
||||
- 텍스트·파일·링크와 보관함 재전송의 거절 시 보내기 창을 닫고 상대 이름과 거절 알림을 표시한다. 전송 POST 응답을 일부러 지연하고 먼저 거절한 경우에도 알림/종료를 놓치지 않는 실제 브라우저 검증을 통과했다. 새로고침으로 과거 거절을 다시 알리지 않고, 세 번째 거절 뒤 재요청 제한에는 기존 남은 초 카운트를 표시한다. 거절/종료된 파일 초안의 메모리 참조도 정리한다.
|
||||
- 모든 화면의 용량을 공통 컴포넌트로 표시하여 천 단위 정수는 선명하게, 소수점은 더 작고 흐리게, 단위 앞에는 시각적 간격을 준다. 기존 표시 단위·계산값·정확한 입력값은 유지한다. 실제 관리자 카드의 `7,687`/`.0`/`GB` 분리·소수점 글자 크기/명암·줄바꿈 방지·단위 간격과 PC/390px 모바일 화면을 확인했다. 게스트 명칭과 `UUID · 이메일/게스트(Guest)`, `국가 · 도시 · IP` 구분점도 확인했다.
|
||||
- 전체 API 146개, 수신/관리자/클립보드/계정 보관함 브라우저 회귀, 타입 검사·빌드·포맷 검사를 통과했다. 최종 격리 운영 Docker에서 계정·파일·정책·관리 설정 재시작 보존, 8MiB 부분 조각 재개와 다운로드, NAS UID 바인드 저장소·수동 파일 삭제·SQLite integrity를 통과했다. 운영 NAS 자료·Compose·DB 구조 변경은 없다.
|
||||
|
||||
## 2026-10-15 한국어·일본어·영어 사용자 화면
|
||||
|
||||
- 사용자 화면·버튼/접근성 이름·연결 공간·파일/클립보드·수락/거절·보관함·계정 설정·알림과 사용자 요청 인증/재설정 메일을 세 언어로 제공한다. 관리자 본문·표·관리 기록·용량의 작은 값 표시는 한국어를 유지한다. 기존 한국어 문구를 키로 쓴 공통 카탈로그의 영어/일본어 누락·한국어 잔여·변수 자리 불일치와 한 번만 값 치환을 검사했다. 사용자 이름·파일명·메모·전송 원문에는 번역 함수를 적용하지 않는다.
|
||||
- 직접 저장한 브라우저 선택을 먼저 적용하고, 없으면 검증된 국가 KR/JP/그 외를 ko/ja/en으로 결정한다. 국가 미확인 때는 지원 브라우저 언어/품질 순서·영어 기본값을 사용한다. 위조 국가 헤더 무시, 불지원/거부 언어 처리와 국가 응답 대기 중 수동 선택 우선을 검증했다. 추가 GPS 요청이나 외부 IP 조회를 하지 않고 관리자 보관 지역 정보도 바꾸지 않는다.
|
||||
- 실제 브라우저에서 재접속 시 언어/기기 ID 유지, 다른 탭의 언어 변경 후 작성 중 Unicode 원문 보존, 영어 가입/메일/인증 자동 로그인·계정 설정, 영어 연결 공간 생성→일본어 참여, EN→JA 텍스트 수락/미리보기/복사·링크 거절 알림·Unicode 파일명 다운로드와 바이트 보존을 확인했다. 보관함·날짜·오류·문서 lang/설치 manifest와 선택 언어의 오프라인 안내도 검증했다. 한국어 API의 코드·상태·원문 호환은 유지한다.
|
||||
- 320px 영어 가입/일본어 로그인과 390px 일본어 수신 화면을 확인하고 긴 헤더/보조 버튼의 어색한 줄바꿈을 보완했다. 언어 선택으로 컴포넌트를 다시 만들거나 선택 파일/세션을 초기화하지 않는다. 사용자 알림을 공통 표시해 계정 화면에서 토스트가 겹치지 않게 하고, 표시 중인 시스템 문구도 언어 전환에 맞춰 갱신한다.
|
||||
- 전체 API 150개·타입 검사·빌드·포맷 검사, 새 언어 통합 브라우저와 기존 파일/링크/클립보드·계정·관리자·레이아웃·근처 탐색·재접속·101MiB 분할 전송·PWA 회귀를 통과했다. 격리 운영 Docker에서 영어/일본어 기본 언어/오류·언어별 manifest와 기존 이름·파일·텍스트·인증·관리 정책 재시작 보존, 8MiB 조각 재개·다운로드·NAS UID 바인드·수동 삭제·SQLite integrity를 확인했다. 실제 Resend 메일·NAS 자료·Compose·DB 구조는 변경하지 않았다.
|
||||
|
||||
Reference in New Issue
Block a user