Repository navigation
Commit b126c13
i18n(platform-objects): ship the platform objects, Setup, Studio and Account in Korean (#31588)
<!-- claude-projects-attribution: {"github_login":"os-project-manager"}
-->
_Requested by **Leehom** · [project
thread](https://claude.ai/code/project/chan_01TenzsRopZj4jMbvjX8uz1X?thread=cmsg_01TenzsRopZj4jMbvjX8uz1X5xwArPxERFNdAjYY2nKcc9)_
Fixes #30512
Thread-read: 6723260365
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:给 `@objectstack/platform-objects` 加上韩语(ko):平台对象、Studio
的元数据表单、Setup/Studio/Account 导航、系统概览仪表板和用户/组织记录页的内嵌文字,做法与已合并的
pt-BR(#31440)、ru(#31466)、de(#31511)逐文件一致。
- 为什么改:ko 是 #30512 七个语言里的最后一个,本 PR 合并即关闭该卡。目前 ko 用户在控制台里看到的 `sys_*`
标签全是英文。
- 风险与回滚:只新增 ko 文件、注册行和测试里的语言列表;已有语言一个字节都不变(其余 29 个生成文件不在 diff 里);新文字同样走
source-hash 回退。回滚即 revert 本 PR。
-
先看:`packages/platform-objects/src/apps/translations/ko.ts`(导航钉住项),`ko.source-hashes.generated.ts`(45
条与英文相同的叶子,下面逐类列出),以及被 repeater-row-properties 拒绝后改为带父级名称的 3 个 `ID` 行(见
Acceptance notes)。
- 两分钟验证:`cd packages/platform-objects && npx vitest run
src/apps/translations/source-hash.test.ts
src/apps/translations/repeater-row-properties.test.ts`,预期 2 个文件全部通过。
- 需要你做的:生成文件让 PR 超过 3000 行,需要席位契约复审 ACCEPT,然后请人工合并。
## What changes
- New `ko` bundles in `packages/platform-objects/src/apps/translations`:
`ko.objects.generated.ts` (1704 leaves),
`ko.metadata-forms.generated.ts` (1263 leaves), their provenance table
`ko.source-hashes.generated.ts` (45 deliberate byte copies of `en`,
listed under Acceptance notes), the hand-authored `ko.ts` (141 leaves)
and `ko.source-hashes.ts` recording the `en` digest of every hand leaf.
- Registration: the extract config's `--locales` docstring and
`translations:` baseline, `setup.translation.ts`, the `apps` barrel, and
`metadata-translations/index.ts`.
- Inline maps: 36 in `sys-user.page.ts`, 6 in
`sys-organization.page.ts`, and the System Overview null label in
`system.datasets.ts` (`시스템`).
- Wording pins, as #31233 lists them: `nav_account_approvals` reads as
plugin-approvals' `my_pending` label (`내 승인 대기`), `nav_assignment_rules`
as `sys_assignment_rule`'s plural label (`배정 규칙`), each `nav_settings_*`
(including `nav_settings_access_policy`, `액세스 정책`) as its
service-settings hub title, `nav_settings_hub` as the console's
`backToHub` (`전체 설정`), and the four #30935 keys:
`grp_account_ai_assistant` = `AI 어시스턴트`; both `nav_connect_agent`
entries and `pages.connect_agent.label` = `AI 어시스턴트 연결`.
- Changeset `.changeset/30512-platform-objects-ko.md` (patch).
## Tests
- `ko` added beside `de` to the locale lists of every test #31511
widened (vocabulary, nav parity, dead-key tombstone, source-hash,
bu-rename with `old: /부서/`, the five identity copy tests, record-page
tabs, null label, per-user stores, plugin translation loads), plus
plugin-approvals `approval-status-vocabulary`, plugin-security
`people-org-assignment-nav-contribution` and service-settings
`setup-nav-hub-parity`. The cli `platform-page-i18n-parity` LOCALE_KEY
shape already accepts `ko`.
- No new negative pin, for the same reason as #31466 and #31511: the
plugin-audit twin test is outside this claim's file surface.
## Acceptance notes
- Every leaf is translated. The 45 byte copies of `en` the extract
records fall into three groups:
- Identifiers and protocol names (34): `ID` ×24, `API` ×2, `UI` ×2 (the
`source` option of the two settings audit objects), `JWKS`, `JWKS URI`,
`Message-ID`, `IdP SSO URL`, `snake_case`, and the SAML
`urn:…:emailAddress` NameID format.
- Lowercase option values and placeholder defaults that are identifiers
(6): `cron`, `dlq`, `api`, and the `openid email profile` / `email` /
`name` defaults.
- The five JSON examples (5), kept verbatim as every locale keeps them.
- `repeater-row-properties` refused three `ID` echoes in repeater rows,
so each now names its parent: `영역 ID` (app areas), `노드 ID` (flow nodes)
and `에지 ID` (flow edges), matching how `de` and `ja-JP` name them.
- Vocabulary follows the existing `ko` plugin bundles: formal 합니다 style,
confirm prompts ending `~하시겠습니까?`, `사용자`, `조직`, `사업부`, `직위`, `권한 세트`,
`대기열`, `공유`, `레코드`, `승인`, `에이전트`, `스킬`, `도구`, `시스템 권한` (capability), and
`상사` for a person's manager so it never collides with `관리자` (admin). Hub
titles are exactly as service-settings spells them (`메일 전송`, `SMS 전송`,
`파일 저장소`, `AI 및 Embedder`, `데이터 수명 주기`, …).
- Business units are `사업부`; `부서` appears only where the source says
department (the `department` type option and the object description),
which `bu-rename-consistency` allows.
- Deviation, as in #31466 and #31511: no plugin-audit `ko` twin of the
#28107 activity-summary test, because plugin-audit is not in the claim's
file surface.
## Verification
- `os i18n extract
packages/platform-objects/scripts/i18n-extract.config.ts
--locales=zh-CN,ja-JP,es-ES,zh-Hant,ar,fr,pt-BR,ru,de,ko --fill=default
--source-hashes --out=packages/platform-objects/src/apps/translations`:
a rerun regenerates the `ko` bundles byte-identical (`md5sum -c`) and
leaves the 29 other generated files unchanged (none of them is in the
diff). `check-i18n-bundles --filter=platform-objects`: in sync (32
bundles).
- `vitest run` in platform-objects: 120 files, 1931 tests passed.
plugin-approvals `approval-status-vocabulary` (6), plugin-security
`people-org-assignment-nav-contribution` (5), service-settings
`setup-nav-hub-parity` plus `translations` (158) and cli
`platform-page-i18n-parity` (27) passed.
- platform-objects `typecheck`: exit 0. `check:app-nav-i18n`: OK (13
contributors, 11 locales, 2 apps).
- `dispatch-gates --ran` at e56cfa3 (on `origin/main` 8c75f83): 68
derived families, 68 run, 0 NOT-MEASURED, all exit 0 (including
`check:i18n`, `check:i18n-stale-fill`, `check:dts-closure`,
`check:dual-build-cjs-loads`, `check:nul-bytes`).
- `origin/main` moved 2 commits past the base (2c6b936, neither touches
platform-objects, plugin-approvals or service-settings).
- `eslint` over the changed `.ts` paths (scoped, `--no-inline-config`):
exit 0.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---
_Generated by [Claude
Code](https://claude.ai/code/session_01FEkQ5mqoYjnPaGZhS8jzcF)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 13f9e8e commit b126c13
36 files changed
Lines changed: 7334 additions & 48 deletions
File tree
- .changeset
- packages
- platform-objects
- scripts
- src
- apps
- dashboards
- translations
- identity
- metadata-translations
- pages
- plugins
- plugin-approvals/src/translations
- plugin-security/src
- services/service-settings/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
| 231 | + | |
231 | 232 | | |
232 | 233 | | |
233 | 234 | | |
| |||
238 | 239 | | |
239 | 240 | | |
240 | 241 | | |
| 242 | + | |
241 | 243 | | |
242 | 244 | | |
243 | 245 | | |
| |||
266 | 268 | | |
267 | 269 | | |
268 | 270 | | |
| 271 | + | |
269 | 272 | | |
270 | 273 | | |
271 | 274 | | |
| |||
373 | 376 | | |
374 | 377 | | |
375 | 378 | | |
| 379 | + | |
376 | 380 | | |
377 | 381 | | |
378 | 382 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| 54 | + | |
54 | 55 | | |
55 | 56 | | |
56 | 57 | | |
| |||
61 | 62 | | |
62 | 63 | | |
63 | 64 | | |
| 65 | + | |
64 | 66 | | |
65 | 67 | | |
66 | 68 | | |
| |||
71 | 73 | | |
72 | 74 | | |
73 | 75 | | |
| 76 | + | |
74 | 77 | | |
75 | 78 | | |
76 | 79 | | |
| |||
145 | 148 | | |
146 | 149 | | |
147 | 150 | | |
148 | | - | |
| 151 | + | |
149 | 152 | | |
150 | | - | |
| 153 | + | |
151 | 154 | | |
152 | 155 | | |
153 | 156 | | |
| |||
157 | 160 | | |
158 | 161 | | |
159 | 162 | | |
| 163 | + | |
160 | 164 | | |
161 | 165 | | |
162 | 166 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
24 | 25 | | |
25 | | - | |
| 26 | + | |
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| 119 | + | |
119 | 120 | | |
120 | 121 | | |
121 | | - | |
| 122 | + | |
122 | 123 | | |
123 | 124 | | |
124 | 125 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
| 67 | + | |
67 | 68 | | |
68 | | - | |
| 69 | + | |
69 | 70 | | |
70 | 71 | | |
71 | 72 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| 36 | + | |
35 | 37 | | |
36 | 38 | | |
37 | 39 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| |||
42 | 43 | | |
43 | 44 | | |
44 | 45 | | |
| 46 | + | |
45 | 47 | | |
46 | 48 | | |
47 | 49 | | |
| |||
0 commit comments