feat(i18n): 일본어 리소스를 반영한다
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
| 대상 제품 | SodaLive Android 일본어 string resource |
|
||||
| 작성자·결정권자 | 사용자, Sisyphus |
|
||||
| 기준 CSV | `docs/20260811_일본어_string_resource_반영/kr_jp_string_resource.csv` |
|
||||
| 매핑표 | `docs/20260811_일본어_string_resource_반영/resource-mapping.md` |
|
||||
| 관련 구현 계획 | `docs/20260811_일본어_string_resource_반영/plan-task.md` |
|
||||
| 관련 review | 없음 |
|
||||
|
||||
@@ -23,7 +24,7 @@
|
||||
|
||||
## 1. Overview
|
||||
|
||||
`kr_jp_string_resource.csv`의 KR/JP 쌍을 기준으로 Android 일본어 리소스 `app/src/main/res/values-ja/strings.xml` 반영 범위를 확정한다. CSV에는 Android `string name` 키가 없으므로, 한국어 원문과 `app/src/main/res/values/strings.xml` 값을 대조해 resource key 매핑을 먼저 확정한 뒤 일본어 값을 반영한다.
|
||||
`kr_jp_string_resource.csv`의 KR/JP 쌍을 기준으로 Android 일본어 리소스 `app/src/main/res/values-ja/strings.xml` 반영 범위를 확정한다. CSV에는 Android `string name` 키가 없으므로, 한국어 원문과 `app/src/main/res/values/strings.xml` 값을 대조한 결과를 `resource-mapping.md`에 저장하고 resource key 매핑을 먼저 확정한 뒤 일본어 값을 반영한다. `{{...}}`, `{...}`, `n%`처럼 앱에서 치환되는 문구는 Android placeholder 또는 suffix resource와 대응되는 경우 후보로 포함한다.
|
||||
|
||||
## 2. Problem Statement
|
||||
|
||||
@@ -70,7 +71,7 @@
|
||||
|
||||
1. `kr_jp_string_resource.csv`의 KR/JP 행을 읽는다.
|
||||
2. `app/src/main/res/values/strings.xml`에서 KR 문구와 일치하는 resource key 후보를 찾는다.
|
||||
3. 같은 KR 문구가 여러 key에 매칭되면 모두 후보로 기록하고, 화면 맥락상 반영할 key를 확정한다.
|
||||
3. 같은 KR 문구가 여러 key에 매칭되면 모두 `resource-mapping.md`에 후보로 기록하고, 기존 JP가 CSV JP와 다르면 CSV JP를 우선 반영한다.
|
||||
4. `app/src/main/res/values-ja/strings.xml`의 기존 JP 값을 확인한다.
|
||||
5. 확정된 key만 CSV JP 값으로 수정한다.
|
||||
6. XML escape, placeholder, 줄바꿈, 빌드 리소스 검증을 실행한다.
|
||||
@@ -82,9 +83,12 @@
|
||||
| ID | 상태 | 요구사항 | 수용 기준 | 계획 연결 |
|
||||
|---|---|---|---|---|
|
||||
| `I18N-MAP-001` | 확정 | CSV 행은 resource key 없이 제공된 KR/JP 쌍으로 취급한다. | key 추정 없이 `values/strings.xml` 값과 일치하는 후보만 매핑 대상으로 삼는다. | `P1-T1` |
|
||||
| `I18N-MAP-002` | 확정 | 동일 KR 문구가 여러 resource key에 있으면 자동 덮어쓰지 않는다. | 중복 후보는 `plan-task.md`의 후보 매핑/충돌 목록에 기록하고 확정된 key만 반영한다. | `P1-T1`, `P1-T2` |
|
||||
| `I18N-MAP-003` | 확정 | CSV JP와 기존 JP가 다른 항목은 변경 후보로 분리한다. | 변경 전 기존 값, CSV 값, 반영 결정이 기록된다. | `P1-T2` |
|
||||
| `I18N-MAP-004` | 확정 | CSV JP의 오탈자 의심 항목은 임의 수정하지 않는다. | 예: `しいシリーズを見つけましょう!`처럼 의심되는 값은 확인 필요로 남긴다. | `P1-T2` |
|
||||
| `I18N-MAP-002` | 확정 | 동일 KR 문구가 여러 resource key에 있으면 모든 후보를 기록하고 CSV JP를 우선한다. | 중복 후보 중 기존 JP가 CSV JP와 다르면 해당 key에 CSV JP를 반영한다. | `P1-T1`, `P1-T2`, `P2-T1` |
|
||||
| `I18N-MAP-003` | 확정 | CSV JP와 기존 JP가 다른 항목은 변경 후보로 분리한다. | 변경 전 기존 값, CSV 값, 반영 결정이 `resource-mapping.md`에 기록된다. | `P1-T2` |
|
||||
| `I18N-MAP-004` | 확정 | CSV JP의 오탈자 의심 항목은 제품 문구를 임의 보정하지 않는다. | KR resource key가 있으면 CSV JP를 그대로 반영하고 최종 리포트에 확인 필요로 기록한다. KR resource key가 없으면 반영하지 않는다. | `P1-T2`, `P2-T1` |
|
||||
| `I18N-MAP-005` | 확정 | `values/strings.xml`에 exact 또는 placeholder/suffix 대응 한국어 리소스가 없으면 반영하지 않는다. | 해당 CSV 행은 신규 key 추정 없이 `resource-mapping.md`에서 `제외`로 분류한다. | `P1-T2`, `P1-GATE` |
|
||||
| `I18N-MAP-006` | 확정 | CSV의 `{{...}}`, `{...}`, `n%` 치환 문구는 앱 내 변경 가능한 리소스로 고려한다. | Android `%1$s`, `%1$d`, suffix resource와 안전하게 대응되는 경우 후보로 기록하고 Android 형식 값으로 반영한다. | `P1-T2`, `P2-T1` |
|
||||
| `I18N-MAP-007` | 확정 | 매핑표의 `<br>`은 표시용이며 XML에 그대로 반영하지 않는다. | `values-ja/strings.xml`에는 줄바꿈을 `\n`으로 저장하고 literal `<br>`이 없어야 한다. | `P2-T1`, `P2-GATE` |
|
||||
|
||||
### 7.2 리소스 반영
|
||||
|
||||
@@ -117,7 +121,7 @@ API 변경은 없다. 서버 계약, request/response, endpoint, 인증 header
|
||||
### 11.1 기능 수용 기준
|
||||
|
||||
- [ ] CSV KR/JP 행 중 `values/strings.xml`과 매칭되는 후보가 resource key 단위로 식별된다. (`I18N-MAP-001`)
|
||||
- [ ] 중복 KR 문구와 기존 JP 충돌 항목이 반영/보류/제외 중 하나로 분류된다. (`I18N-MAP-002`, `I18N-MAP-003`)
|
||||
- [ ] 중복 KR 문구와 기존 JP 충돌 항목이 `resource-mapping.md`에서 반영/보류/제외 중 하나로 분류된다. (`I18N-MAP-002`, `I18N-MAP-003`)
|
||||
- [ ] 확정된 key만 `values-ja/strings.xml`에 반영된다. (`I18N-RES-001`)
|
||||
- [ ] Android resource placeholder와 줄바꿈 형식이 보존된다. (`I18N-RES-002`, `I18N-RES-003`)
|
||||
|
||||
@@ -132,13 +136,16 @@ API 변경은 없다. 서버 계약, request/response, endpoint, 인증 header
|
||||
| ID | 상태 | 결정 필요 사항 | 현재 권고 | 결정 주체 | 결정 시점 | 영향 Goal |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `OQ-001` | 확정 | CSV에 key가 없을 때 반영 정책 | 매핑표 먼저 확정 후 확정 key만 반영 | 사용자 | 2026-08-11 | `P1-T1`, `P1-T2` |
|
||||
| `OQ-002` | 미결 | CSV JP 오탈자 의심 항목을 그대로 반영할지 제품 문구로 보정할지 | 오탈자 의심 항목은 보류하고 사용자 확인 후 반영 | 사용자 | `P1-T2` 완료 전 | `P2-T1` |
|
||||
| `OQ-002` | 확정 | CSV JP 오탈자 의심 항목을 그대로 반영할지 제품 문구로 보정할지 | KR resource key가 있으면 CSV JP 그대로 반영하고 최종 리포트에 기록 | 사용자 | 2026-08-11 | `P2-T1` |
|
||||
| `OQ-003` | 확정 | 한국어 리소스가 없는 CSV 행을 신규 key로 추가할지 여부 | exact 또는 placeholder/suffix 대응 key가 없으면 신규 key를 만들지 않고 제외 | 사용자 | 2026-08-11 | `P1-T2`, `P1-GATE` |
|
||||
| `OQ-004` | 확정 | 중복 KR 후보의 기존 JP가 CSV JP와 다를 때 처리 | CSV JP 우선 반영 | 사용자 | 2026-08-11 | `P2-T1` |
|
||||
| `OQ-005` | 확정 | 매핑표 `<br>`의 XML 반영 방식 | literal `<br>`이 아니라 `\n` 줄바꿈으로 반영 | 사용자 | 2026-08-11 | `P2-T1`, `P2-GATE` |
|
||||
|
||||
## 13. 요구사항 추적표
|
||||
|
||||
| 요구사항 범위 | 계획 Phase | Goal | 자동 검증 | 수동 검증 |
|
||||
|---|---:|---|---|---|
|
||||
| `I18N-MAP-001~004` | 1 | `P1-T1`, `P1-T2`, `P1-GATE` | CSV/resource 대조, XML 후보 목록 확인 | 사용자 매핑 승인 |
|
||||
| `I18N-MAP-001~007` | 1 | `P1-T1`, `P1-T2`, `P1-GATE` | `resource-mapping.md` 후보 목록 확인 | 사용자 매핑 승인 |
|
||||
| `I18N-RES-001~004` | 2 | `P2-T1`, `P2-GATE` | `./gradlew :app:assembleDebug`, 필요 시 `./gradlew :app:lintDebug` | 일본어 locale 화면 확인은 사용자 명시 요청 시 별도 수행 |
|
||||
|
||||
## 14. Decision Log
|
||||
@@ -148,6 +155,12 @@ API 변경은 없다. 서버 계약, request/response, endpoint, 인증 header
|
||||
| 2026-08-11 | `DEC-001` | 확정 | CSV KR/JP 쌍은 resource key 매핑표를 먼저 확정한 뒤 반영한다. | CSV에 key가 없고 동일 KR 문구가 여러 resource key에 반복된다. | `I18N-MAP-001~003`, `P1-T1`, `P1-T2` |
|
||||
| 2026-08-11 | `DEC-002` | 확정 | 이번 요청에서는 PRD와 계획문서만 생성하고 실제 string resource는 수정하지 않는다. | 사용자 요청: “모호한 것은 물어보고 prd와 계획문서만 생성한다.” | 전체 |
|
||||
| 2026-08-11 | `DEC-003` | 확정 | 문서는 CSV 파일이 있는 `docs/20260811_일본어_string_resource_반영/` 폴더에 생성한다. | 사용자 요청: “문서 생성은 csv파일이 있는 폴더에 생성한다.” | 전체 |
|
||||
| 2026-08-11 | `DEC-004` | 확정 | 매핑표는 `resource-mapping.md` 별도 파일로 생성한다. | 매핑 행이 많고 반영/보류/제외 검토가 필요해 `plan-task.md` Progress에만 누적하면 추적성이 낮다. | `I18N-MAP-002~003`, `P1-T1`, `P1-T2` |
|
||||
| 2026-08-11 | `DEC-005` | 확정 | 한국어 리소스가 없는 CSV 행은 반영하지 않고 `제외`로 분류한다. | 사용자 지시: “한국어 리소스가 없는 것은 반영하지 않는다.” | `I18N-MAP-005`, `P1-T2`, `P1-GATE` |
|
||||
| 2026-08-11 | `DEC-006` | 확정 | JP 오탈자 의심 항목은 CSV 값을 그대로 반영하고 최종 리포트에 확인 필요로 기록한다. | 사용자 지시: “JP 오탈자로 의심되는 것은 우선 그대로 반영하고 최종 리포트에 기록” | `I18N-MAP-004`, `P2-T1` |
|
||||
| 2026-08-11 | `DEC-007` | 확정 | `{{...}}`, `{...}`, `n%` 치환 문구는 Android placeholder/suffix 대응 후보로 재확인한다. | 사용자 지시: “{{}} 형태로 들어가 있는 것은 앱 내에서 변경할 수 있는 리소스” | `I18N-MAP-006`, `P1-T2`, `P2-T1` |
|
||||
| 2026-08-11 | `DEC-008` | 확정 | 중복 KR 후보의 JP가 다르면 CSV JP를 우선 반영한다. | 사용자 지시: “중복되는 것 중 JP가 다르게 적용되어 있는 것은 csv JP를 우선 반영” | `I18N-MAP-002`, `P2-T1` |
|
||||
| 2026-08-11 | `DEC-009` | 확정 | 매핑표 `<br>`은 XML에 literal로 쓰지 않고 `\n`으로 반영한다. | 사용자 지시: “<br>은 그대로 반영하는 것이 아니라 줄바꿈으로 반영” | `I18N-MAP-007`, `P2-T1`, `P2-GATE` |
|
||||
|
||||
## 15. 변경 관리
|
||||
|
||||
|
||||
Reference in New Issue
Block a user