@object-ui/i18n 17.7.0 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,18 +13,19 @@ const ko = {
13
13
  notRestored: '서버가 요청을 받았지만 관리자 세션을 복원하지 않았습니다. 여전히 {{user}} 계정을 대행하고 있습니다. 로그아웃 후 다시 로그인하여 종료하세요.',
14
14
  },
15
15
  },
16
- // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
16
+ // objectui#2600 B5 — capability picker scope group headers (labels come from the capability registry).
17
17
  capability: {
18
18
  label: {
19
19
  manage_users: "사용자 관리",
20
20
  manage_org_users: "조직 사용자 관리",
21
21
  manage_metadata: "메타데이터 관리",
22
- manage_org_presentation: "조직 표시 관리",
22
+ manage_mailboxes: "메일함 관리",
23
23
  manage_platform_settings: "플랫폼 설정 관리",
24
24
  setup_access: "설정 접근",
25
25
  setup_write: "설정 쓰기",
26
26
  studio_access: "Studio 접근",
27
27
  manage_sharing: "공유 관리",
28
+ view_all_audit_log: "모든 감사 로그 보기",
28
29
  },
29
30
  group: {
30
31
  platform: '플랫폼',
@@ -32,30 +33,6 @@ const ko = {
32
33
  other: '기타',
33
34
  },
34
35
  },
35
- // objectui#3546 slice six — PermissionFacetLink 의 권한 파셋 요약.
36
- // 수량 라벨은 appDesigner.objectManager.fieldCount 와 같은 "{{count}}개 + 단위" 형식.
37
- // 한국어에는 단수/복수 구분이 없어 `_one` 은 기본 키와 같은 값(의도적).
38
- perm: {
39
- facet: {
40
- none: "없음",
41
- more: "+{{count}} 더보기",
42
- objects: "{{count}}개 오브젝트",
43
- objects_one: "{{count}}개 오브젝트",
44
- objects_other: "{{count}}개 오브젝트",
45
- fields: "{{count}}개 필드 규칙",
46
- fields_one: "{{count}}개 필드 규칙",
47
- fields_other: "{{count}}개 필드 규칙",
48
- rls: "{{count}}개 RLS 정책",
49
- rls_one: "{{count}}개 RLS 정책",
50
- rls_other: "{{count}}개 RLS 정책",
51
- tabs: "{{count}}개 탭 규칙",
52
- tabs_one: "{{count}}개 탭 규칙",
53
- tabs_other: "{{count}}개 탭 규칙",
54
- adminScope: "위임 관리가 구성됨",
55
- designInStudio: "Studio에서 디자인 →",
56
- designInStudioHint: "Studio에서 디자인",
57
- },
58
- },
59
36
  lookup: {
60
37
  recentlyUsed: '최근 사용',
61
38
  allResults: '모든 결과',
@@ -126,6 +103,7 @@ const ko = {
126
103
  itemCount_one: "{{count}}개 항목",
127
104
  itemCount_other: "{{count}}개 항목",
128
105
  toggleSidebar: "사이드바 전환",
106
+ breadcrumb: "탐색 경로",
129
107
  package: "패키지",
130
108
  done: "완료",
131
109
  editInStudio: "Studio에서 편집",
@@ -154,6 +132,7 @@ const ko = {
154
132
  copyAll: '모두 복사',
155
133
  },
156
134
  notAvailableHere: '"{{action}}"은(는) 현재 페이지에서 사용할 수 없습니다.',
135
+ notAvailableForRecord: '이 레코드에서는 사용할 수 없습니다',
157
136
  completedSuccessfully: '작업이 완료되었습니다',
158
137
  failed: '작업 실패',
159
138
  parallelFailed: '하나 이상의 병렬 작업이 실패했습니다',
@@ -190,6 +169,8 @@ const ko = {
190
169
  // description, used when the form declares no `description` of its own.
191
170
  dialogDescriptionFallback: "양식 필드를 작성한 다음 제출하거나 취소하세요.",
192
171
  deniedDescription: "이 필드를 편집할 권한이 없습니다.",
172
+ serverDefaultHint: "저장 시 자동으로 설정됩니다.",
173
+ maxFileSize: "최대 크기: {{size}}",
193
174
  masterDetail: {
194
175
  loadingColumns: "열 로드 중…",
195
176
  subtotal: "소계",
@@ -258,10 +239,14 @@ const ko = {
258
239
  remove: "이미지 {{index}} 삭제",
259
240
  enlarge: "{{name}} 확대",
260
241
  preview: "이미지 미리보기",
242
+ cropPreview: "이미지 자르기 미리보기",
261
243
  previous: "이전 이미지",
262
244
  next: "다음 이미지",
263
245
  counter: "{{current}} / {{total}}",
264
246
  },
247
+ percent: {
248
+ slider: "백분율",
249
+ },
265
250
  relativeDate: {
266
251
  overdue: "기한 초과 {{count}}일",
267
252
  overdue_one: "기한 초과 {{count}}일",
@@ -283,6 +268,8 @@ const ko = {
283
268
  exceedsMaxSize: '"{{name}}"이(가) 최대 크기({{max}} MB)를 초과합니다',
284
269
  uploadFailed: '"{{name}}" 업로드 실패: {{error}}',
285
270
  uploadIncomplete: '"{{name}}" 업로드가 완료되지 않았습니다: 파일 ID가 반환되지 않아 저장된 내용이 없습니다',
271
+ restricted: '제한된 파일',
272
+ restrictedHint: '이 파일의 세부 정보에 접근할 권한이 없습니다',
286
273
  },
287
274
  richText: {
288
275
  format: "형식: {{format}}",
@@ -299,6 +286,10 @@ const ko = {
299
286
  search: "객체 검색…",
300
287
  empty: "객체를 찾을 수 없습니다",
301
288
  },
289
+ registryRef: {
290
+ loadFailed: "목록을 불러오지 못했습니다. 이름을 직접 입력할 수 있습니다.",
291
+ notFound: "{{name}} (찾을 수 없음)",
292
+ },
302
293
  recipient: {
303
294
  selectTypeFirst: "먼저 수신자 유형을 선택하세요.",
304
295
  loading: "로딩 중…",
@@ -340,6 +331,13 @@ const ko = {
340
331
  dateTime: {
341
332
  impossibleDay: "저장된 값 “{{value}}”은(는) 실제 날짜가 아닙니다. 바꾸려면 날짜와 시간을 선택하세요.",
342
333
  },
334
+ datePicker: {
335
+ today: "오늘",
336
+ tomorrow: "내일",
337
+ clear: "날짜 지우기",
338
+ openCalendar: "달력 열기",
339
+ invalid: "저장되지 않음: “{{value}}”은(는) 날짜가 아닙니다. {{format}} 형식으로 입력하거나 달력에서 선택하세요.",
340
+ },
343
341
  number: {
344
342
  badInput: "저장되지 않았습니다: 이 입력란의 텍스트는 숫자가 아닙니다. 일반 소수로 입력하세요(예: {{example}}).",
345
343
  },
@@ -354,6 +352,11 @@ const ko = {
354
352
  postalCode: "우편번호",
355
353
  country: "국가",
356
354
  },
355
+ boolean: {
356
+ offBadge: "{{label}} — 꺼짐",
357
+ completed: "완료됨",
358
+ notCompleted: "완료되지 않음",
359
+ },
357
360
  textarea: {
358
361
  characterCount: "글자 수: {{max}}자 중 {{count}}자",
359
362
  charactersRemaining: "{{count}}자 남음",
@@ -383,10 +386,15 @@ const ko = {
383
386
  selectAllRows: "모든 행 선택",
384
387
  expandRow: "행 펼치기",
385
388
  collapseRow: "행 접기",
389
+ rowActions: "행 작업",
386
390
  hideColumn: "열 숨기기",
387
391
  freezeColumn: "열 고정",
388
392
  unfreezeColumn: "열 고정 해제",
389
393
  pageInfo: "{{total}} 페이지 중 {{current}} 페이지",
394
+ firstPage: "첫 페이지",
395
+ previousPage: "이전 페이지",
396
+ nextPage: "다음 페이지",
397
+ lastPage: "마지막 페이지",
390
398
  totalRecords: "총 {{count}}개",
391
399
  noResults: "결과 없음",
392
400
  noResultsHint: "필터 또는 검색어를 조정해 보세요.",
@@ -398,6 +406,9 @@ const ko = {
398
406
  modified: "{{count}}개 행 수정됨",
399
407
  modified_one: "{{count}}개 행 수정됨",
400
408
  modified_other: "{{count}}개 행 수정됨",
409
+ saved: "{{count}}개 행 저장됨",
410
+ saved_one: "{{count}}개 행 저장됨",
411
+ saved_other: "{{count}}개 행 저장됨",
401
412
  saveFailed: '저장 실패',
402
413
  selected: "{{count}}개 선택됨",
403
414
  selected_one: "{{count}}개 선택됨",
@@ -416,6 +427,7 @@ const ko = {
416
427
  bulkAllOnPage_other: "이 페이지의 {{count}}건이 모두 선택되었습니다.",
417
428
  bulkSelectAllMatching: "일치하는 {{count}}건 모두 선택",
418
429
  bulkAllMatchingSelected: "일치하는 레코드 {{count}}건이 모두 선택되었습니다.",
430
+ bulkActions: "일괄 작업",
419
431
  bulk: {
420
432
  confirmDefault: "레코드 {{count}}건에 적용됩니다.",
421
433
  confirmDefault_one: "레코드 {{count}}건에 적용됩니다.",
@@ -454,6 +466,7 @@ const ko = {
454
466
  pullToRefresh: "당겨서 새로고침",
455
467
  refreshing: "새로고침 중…",
456
468
  openRecord: "레코드 열기",
469
+ recordUnavailable: "{{object}} · 레코드를 사용할 수 없음",
457
470
  rowHeight: "행 높이: {{mode}}",
458
471
  openMenu: "메뉴 열기",
459
472
  empty: "비어 있음",
@@ -473,6 +486,7 @@ const ko = {
473
486
  // pack controls its own separator and word order.
474
487
  summary: {
475
488
  pattern: "{{label}}: {{value}}",
489
+ pagePattern: "{{label}} (이 페이지): {{value}}",
476
490
  count: "개수",
477
491
  countEmpty: "빈 값",
478
492
  countFilled: "채워짐",
@@ -536,9 +550,6 @@ const ko = {
536
550
  needMatchFields: "일치 기준 필드를 하나 이상 선택하세요.",
537
551
  matchOnlyField: "(일치 전용)",
538
552
  optCreateOptions: "알 수 없는 선택 값 유지",
539
- optRunAutomations: "자동화 및 트리거 실행",
540
- optTreatHistorical: "과거 데이터로 가져오기",
541
- optTreatHistoricalHint: "(완료된 레코드를 그대로 가져옵니다 — 상태 머신 검사를 건너뛰고 현재 시각을 찍는 대신 원래 타임스탬프와 작성자를 유지합니다)",
542
553
  optSkipBlankKey: "일치 값이 비어 있는 행 건너뛰기",
543
554
  optBackground: "백그라운드에서 가져오기",
544
555
  optBackgroundHint: "(되돌릴 수 있는 작업으로 실행됩니다)",
@@ -553,6 +564,7 @@ const ko = {
553
564
  invalidBoolean: "\"{{value}}\"은(는) 유효한 true/false 값이 아닙니다",
554
565
  invalidNumber: "\"{{value}}\"은(는) 유효한 숫자가 아닙니다",
555
566
  invalidDate: "\"{{value}}\"은(는) 유효한 날짜가 아닙니다",
567
+ invalidTime: "\"{{value}}\"은(는) 유효한 시간이 아닙니다",
556
568
  invalidOption: "\"{{value}}\"은(는) 허용된 선택지에 없습니다",
557
569
  requiredValue: "필수 필드입니다",
558
570
  matchAmbiguous: "기존 레코드 여러 건과 일치합니다 — 고유한 값이나 레코드 ID를 사용하세요",
@@ -575,6 +587,9 @@ const ko = {
575
587
  undoing: "되돌리는 중…",
576
588
  undoConfirm: "이 가져오기를 되돌릴까요? 생성된 레코드는 삭제되고 업데이트된 레코드는 이전 값으로 복원됩니다.",
577
589
  reverted: "되돌림",
590
+ undoPartial: "{{count}}개 행을 되돌리지 못했습니다. 다시 되돌리면 이 행만 다시 시도합니다.",
591
+ undoPartial_one: "{{count}}개 행을 되돌리지 못했습니다. 다시 되돌리면 이 행만 다시 시도합니다.",
592
+ undoPartial_other: "{{count}}개 행을 되돌리지 못했습니다. 다시 되돌리면 이 행만 다시 시도합니다.",
578
593
  jobStatus: {
579
594
  pending: "대기 중",
580
595
  running: "실행 중",
@@ -640,6 +655,8 @@ const ko = {
640
655
  showingRows: "{{total}}개 중 {{shown}}개 행 표시",
641
656
  importing: "가져오는 중… {{progress}}%",
642
657
  importComplete: "가져오기 완료",
658
+ importPartial: "가져오기가 완료되었지만 오류가 있습니다",
659
+ importFailed: "가져오기에 실패했습니다",
643
660
  imported: "{{count}}개 가져옴",
644
661
  skippedCount: "{{count}}개 건너뜀",
645
662
  moreErrors: "…{{count}}개 오류 더",
@@ -700,6 +717,7 @@ const ko = {
700
717
  firstRunMessage: "첫 레코드를 만들어 시작하세요.",
701
718
  noMatches: "일치하는 레코드가 없습니다",
702
719
  noMatchesMessage: "현재 필터나 검색어와 일치하는 레코드가 없습니다. 조건을 조정하거나 지워 보세요.",
720
+ viewFilterNoMatchesMessage: "이 뷰의 필터와 일치하는 레코드가 없습니다.",
703
721
  loadErrorTitle: "레코드를 불러오지 못했습니다",
704
722
  loadErrorMessage: "이 데이터를 불러오는 중 문제가 발생했습니다. 연결을 확인하고 다시 시도하세요.",
705
723
  loadErrorForbiddenTitle: "접근 권한이 없습니다",
@@ -739,15 +757,21 @@ const ko = {
739
757
  recordCount_one: "{{count}}개 레코드",
740
758
  recordCount_other: "{{count}}개 레코드",
741
759
  addRecord: "레코드 추가",
760
+ // objectui#12703 — the compact list's footer link to the object's list or the block's view.
761
+ viewAll: "모두 보기",
742
762
  tabs: "탭",
743
763
  allRecords: "전체 레코드",
744
764
  search: "검색",
745
765
  filter: "필터",
746
766
  filterRecords: "레코드 필터",
767
+ filterActive: "필터, {{count}}개 적용됨",
768
+ filterActive_one: "필터, {{count}}개 적용됨",
769
+ filterActive_other: "필터, {{count}}개 적용됨",
747
770
  sort: "정렬",
748
771
  sortRecords: "레코드 정렬",
749
772
  sortByIdSuffix: "(ID 기준)",
750
773
  sortRelationalHint: "다른 레코드를 참조하는 열은 목록에 없습니다. 저장된 ID로만 정렬할 수 있고 셀에 표시되는 이름으로는 정렬할 수 없습니다. 그 이름으로 정렬하려면 이름을 이 오브젝트에 비정규화하여 원본이 변경될 때 기록되는 저장 필드로 만든 다음, 그 필드로 정렬하세요. 수식 필드는 안 됩니다. 수식은 가상이라 저장되는 열이 없어 서버가 정렬을 거부합니다.",
774
+ sortRelationalPicked: "연결된 열은 표시된 이름이 아니라 저장된 ID로 정렬됩니다.",
751
775
  resetSortToDefault: "뷰 기본 정렬로 재설정",
752
776
  group: "그룹",
753
777
  groupBy: "그룹 기준",
@@ -768,14 +792,15 @@ const ko = {
768
792
  print: "인쇄",
769
793
  hideFieldsTitle: "필드 숨기기",
770
794
  dataLimitReached: "처음 {{limit}}개 레코드를 표시합니다. 더 많은 데이터가 있을 수 있습니다.",
771
- viewSettings: "보기 설정",
772
- viewSettingsHint: "그룹화, 색상, 밀도 및 표시 필드. 이 보기를 사용하는 모든 사용자에게 적용됩니다.",
795
+ display: "표시",
796
+ layout: "레이아웃",
797
+ rowNumbers: "행 번호",
798
+ resetToViewDefault: "보기 기본값으로 재설정",
773
799
  addGroup: "그룹 필드 추가",
774
800
  collapsedByDefault: "기본적으로 접힘",
775
801
  removeGroup: "제거",
776
802
  inlineEditShort: "인라인 편집",
777
803
  inlineEditLabel: "레코드를 인라인으로 편집(셀을 클릭하여 편집)",
778
- recordEditingTitle: "레코드 편집",
779
804
  },
780
805
  managedByBadge: {
781
806
  systemWritable: {
@@ -806,6 +831,7 @@ const ko = {
806
831
  },
807
832
  kanban: {
808
833
  uncategorized: "미분류",
834
+ loadMore: "더 보기",
809
835
  columns: "열",
810
836
  addCard: "카드 추가",
811
837
  addColumn: "열 추가",
@@ -813,13 +839,28 @@ const ko = {
813
839
  deleteCard: "카드 삭제",
814
840
  deleteColumn: "열 삭제",
815
841
  noCards: "카드 없음",
842
+ columnCards: "{{column}} 열의 카드",
843
+ laneCards: "{{column}} - {{lane}}의 카드",
816
844
  cardTitlePlaceholder: "카드 제목 입력…",
817
845
  requiredFieldsTitle: "필수 항목 입력",
818
846
  requiredFieldsDescription: "이 이동으로 아래 항목이 필수가 됩니다. 입력한 후 계속하세요.",
847
+ dnd: {
848
+ start: "{{card}} 카드를 집었습니다. 현재 {{column}} 열에 있습니다.",
849
+ overCard: "{{card}} 카드를 {{column}} 열의 {{target}} 카드 위로 옮기는 중입니다.",
850
+ overColumn: "{{card}} 카드를 {{column}} 열 위로 옮기는 중입니다.",
851
+ overNone: "{{card}} 카드가 어느 열 위에도 있지 않습니다.",
852
+ moved: "{{card}} 카드를 {{column}} 열로 옮겼습니다.",
853
+ dropped: "{{card}} 카드를 놓았습니다. {{column}} 열에 그대로 있습니다.",
854
+ cancelled: "드래그를 취소했습니다. {{card}} 카드는 {{column}} 열에 그대로 있습니다.",
855
+ untitledCard: "제목 없는",
856
+ unnamedColumn: "이름 없는",
857
+ instructions: "이 카드를 다른 열로 옮기려면 마우스나 터치로 끌어 놓으세요.",
858
+ dragging: "{{card}} 카드를 끄는 중",
859
+ },
819
860
  },
820
861
  timeline: {
821
862
  bucket: {
822
- overdue: "기한 초과",
863
+ earlier: "이전",
823
864
  today: "오늘",
824
865
  tomorrow: "내일",
825
866
  thisWeek: "이번 주",
@@ -1000,10 +1041,13 @@ const ko = {
1000
1041
  readonlyAriaLabel: "읽기 전용 보기",
1001
1042
  readonlyTooltip: "시스템 보기 — 코드에 정의되어 있으며 읽기 전용입니다.",
1002
1043
  malformedFilter: "이 뷰의 필터가 잘못되어 레코드를 표시하지 않습니다: {{subject}} 조건을 적용할 수 없습니다.",
1044
+ noObject: "개체가 지정되지 않았습니다. {{property}} 또는 dataSource.object를 설정하세요.",
1003
1045
  },
1004
1046
  designer: {
1005
1047
  undo: "실행 취소",
1006
1048
  redo: "다시 실행",
1049
+ canvasMinimap: "캔버스 미니맵",
1050
+ versionHistory: "버전 기록",
1007
1051
  },
1008
1052
  detail: {
1009
1053
  editInlineHint: "더블클릭하여 편집",
@@ -1083,6 +1127,7 @@ const ko = {
1083
1127
  noAttachments: "아직 첨부파일이 없습니다. 파일을 업로드해 시작하세요.",
1084
1128
  downloadAttachment: "다운로드",
1085
1129
  deleteAttachment: "첨부파일 삭제",
1130
+ deleteAttachmentConfirm: "첨부파일 \"{{name}}\"을(를) 삭제하시겠습니까?",
1086
1131
  attachmentDeleteDenied: "업로드한 사용자 또는 이 레코드를 편집할 수 있는 사용자만 이 첨부파일을 삭제할 수 있습니다.",
1087
1132
  attachmentParentAccessDenied: "이 레코드에 파일을 첨부할 권한이 없습니다.",
1088
1133
  attachmentDownloadDenied: "이 첨부파일을 다운로드할 권한이 없습니다.",
@@ -1146,10 +1191,12 @@ const ko = {
1146
1191
  lockedByApproval: "승인을 위해 잠김",
1147
1192
  lockedTooltip: "이 레코드에 대기 중인 승인 요청이 있습니다. 편집이 잠겨 있습니다",
1148
1193
  writeStrippedTitle: "저장되었지만 일부 필드는 적용되지 않았습니다",
1194
+ writeWarningsTitle: "저장되었지만 경고가 있습니다",
1149
1195
  writeStrippedReadonly: "다음 필드는 읽기 전용이므로 적용되지 않았습니다: {{fields}}",
1150
1196
  writeStrippedByState: "다음 필드는 이 레코드의 현재 상태에서 편집할 수 없으므로 적용되지 않았습니다: {{fields}}",
1151
1197
  writeStrippedPrimaryKey: "다음 필드는 레코드의 식별자이며 저장으로 변경할 수 없으므로 적용되지 않았습니다: {{fields}}",
1152
1198
  writeStrippedComputed: "다음 필드는 서버가 수식으로 계산하므로 보낸 값이 적용되지 않았습니다: {{fields}}",
1199
+ writeStrippedStoredExpression: "다음 필드는 레코드에서 계산되므로 보낸 값 대신 계산된 값이 저장되었습니다: {{fields}}",
1153
1200
  writeStrippedUnknownReason: "다음 필드는 서버에서 적용되지 않았습니다: {{fields}}",
1154
1201
  approvalPendingEditable: "승인 진행 중 · 편집 가능",
1155
1202
  approvalPendingTooltip: "이 레코드에 대기 중인 승인 요청이 있지만 이 단계에서는 편집할 수 있습니다",
@@ -1173,6 +1220,11 @@ const ko = {
1173
1220
  linkCopied: "링크가 클립보드에 복사됨",
1174
1221
  commentFailed: "댓글이 게시되지 않았습니다. 아무것도 저장되지 않았습니다. 다시 시도해 주세요.",
1175
1222
  reactionFailed: "반응이 저장되지 않았습니다. 다시 시도해 주세요.",
1223
+ editComment: "댓글 편집",
1224
+ deleteComment: "댓글 삭제",
1225
+ deleteCommentConfirm: "이 댓글을 삭제하시겠습니까?",
1226
+ commentEditFailed: "수정 내용이 저장되지 않았습니다. 댓글은 이전 내용을 유지합니다.",
1227
+ commentDeleteFailed: "댓글이 삭제되지 않았습니다. 다시 시도해 주세요.",
1176
1228
  linkCopyFailed: "링크 복사 실패",
1177
1229
  cancel: "취소",
1178
1230
  cancelEdit: "변경 사항 취소",
@@ -1584,7 +1636,8 @@ const ko = {
1584
1636
  },
1585
1637
  console: {
1586
1638
  studio: {
1587
- backToHome: "홈으로 돌아가기",
1639
+ title: "Studio",
1640
+ accessRequired: "Studio를 열려면 Studio 접근 권한이 필요합니다.",
1588
1641
  },
1589
1642
  saveAdvisoryTitle: "저장되었습니다 — 작성 검사에서 {{count}}건의 권장 사항이 발견되었습니다",
1590
1643
  saveAdvisoryTitle_one: "저장되었습니다 — 작성 검사에서 {{count}}건의 권장 사항이 발견되었습니다",
@@ -1600,13 +1653,13 @@ const ko = {
1600
1653
  savedViewsUnreadable: "이 목록이 비어 있는 것은 읽지 못했기 때문이며, 이 오브젝트에 저장된 보기가 없어서가 아닙니다. 다시 시도하고, 계속 발생하면 문제를 보고하세요.",
1601
1654
  settingsHub: {
1602
1655
  title: "설정",
1603
- subtitle: "워크스페이스, 연동, 기능 플래그를 구성합니다.",
1656
+ subtitle: "시스템, 연동, 기능 플래그를 구성합니다.",
1604
1657
  loadError: "설정을 불러오지 못했습니다",
1605
1658
  empty: "등록된 설정이 없습니다. 플러그인은 SettingsService를 통해 설정 매니페스트를 등록할 수 있습니다.",
1606
1659
  settingsCount: "설정 {{n}}개",
1607
1660
  beta: "베타",
1608
1661
  categories: {
1609
- Workspace: "워크스페이스",
1662
+ Workspace: "일반",
1610
1663
  Communication: "커뮤니케이션",
1611
1664
  Security: "보안",
1612
1665
  Infrastructure: "인프라",
@@ -1651,8 +1704,7 @@ const ko = {
1651
1704
  },
1652
1705
  usage: {
1653
1706
  title: "AI 사용량",
1654
- meterBuild: "빌드",
1655
- meterAsk: "질문",
1707
+ poolUsed: "{{percent}} 사용됨",
1656
1708
  statusOk: "여유가 충분합니다",
1657
1709
  statusLow: "얼마 남지 않았습니다",
1658
1710
  statusFull: "한도에 도달했습니다",
@@ -1667,7 +1719,6 @@ const ko = {
1667
1719
  ctaUpgrade: "업그레이드하고 계속하기",
1668
1720
  ctaTopUp: "크레딧을 추가하고 계속하기",
1669
1721
  ariaLabel: "AI 사용량: {{status}}",
1670
- breakdownTitle: "지금까지 사용 내역",
1671
1722
  },
1672
1723
  workspaceTitle: "AI 워크스페이스",
1673
1724
  workspaceSubtitle: "질문하고, 살펴보고, 대화를 이어가세요",
@@ -1724,6 +1775,8 @@ const ko = {
1724
1775
  liveCanvasUnlisted: "실시간 앱 — {{app}}(게시 전까지 비공개)",
1725
1776
  loadingAgents: "에이전트를 불러오는 중…",
1726
1777
  askAnything: "무엇이든 물어보세요…",
1778
+ askOrChangeApp: "데이터에 대해 묻거나 이 앱을 바꿔 달라고 요청하세요…",
1779
+ describeAppToBuild: "만들고 싶은 앱이나 바꿀 부분을 설명하세요…",
1727
1780
  emptyTitle: "대화 시작하기",
1728
1781
  emptyDescription: "무엇이든 물어보세요 — 어시스턴트는 현재 앱 컨텍스트에 접근할 수 있습니다.",
1729
1782
  switchAssistant: "어시스턴트 전환",
@@ -1745,12 +1798,17 @@ const ko = {
1745
1798
  },
1746
1799
  clearConversation: "지우기",
1747
1800
  sendHint: "눌러 전송",
1801
+ newlineHint: "눌러 줄바꿈",
1748
1802
  agentActivity: "에이전트 활동",
1749
1803
  toolCompleted: "완료됨",
1750
1804
  toolRunning: "실행 중",
1751
1805
  toolAwaitingApproval: "승인 대기 중",
1752
1806
  toolFailed: "실패",
1753
1807
  toolDetailsHidden: "이 보기에서는 도구 입력과 원본 결과가 숨겨집니다.",
1808
+ toolDenyReason: "운영자가 채팅에서 거부함",
1809
+ builderHandoffTitle: "빌더에서 만들기",
1810
+ builderHandoffOpen: "빌더에서 열기 →",
1811
+ builderHandoffSuperseded: "더 최근의 요청이 있습니다",
1754
1812
  copy: "복사",
1755
1813
  copied: "복사됨",
1756
1814
  regenerate: "다시 생성",
@@ -1765,7 +1823,7 @@ const ko = {
1765
1823
  publishOk: "게시했습니다 — 객체가 이제 활성화되었습니다.",
1766
1824
  seedWarn: "게시했지만 일부 샘플 데이터를 불러오지 못했습니다.",
1767
1825
  openBuiltApp: "앱 열기",
1768
- designBuiltApp: "Studio에서 디자인",
1826
+ viewBuiltAppInStudio: "Studio에서 보기",
1769
1827
  previewDraft: "미리보기",
1770
1828
  previewApp: "앱 미리보기",
1771
1829
  resizeSplit: "채팅과 미리보기 크기 조정",
@@ -1892,6 +1950,7 @@ const ko = {
1892
1950
  collapse: "채팅 접기",
1893
1951
  maximize: "전체 페이지로 열기",
1894
1952
  open: "어시스턴트 열기",
1953
+ planAwaitingApproval: "제안된 계획이 승인을 기다리고 있습니다",
1895
1954
  },
1896
1955
  group: {
1897
1956
  today: "오늘",
@@ -1902,12 +1961,9 @@ const ko = {
1902
1961
  },
1903
1962
  },
1904
1963
  title: "ObjectStack 콘솔",
1905
- initializing: "애플리케이션 초기화 중…",
1906
- loadingHint: "새 환경을 설정하는 데 시간이 조금 걸릴 수 있습니다.",
1964
+ initializing: "콘솔을 여는 중…",
1965
+ skipToContent: "본문으로 건너뛰기",
1907
1966
  breadcrumb: {
1908
- dashboards: "대시보드",
1909
- pages: "페이지",
1910
- reports: "보고서",
1911
1967
  system: "시스템",
1912
1968
  marketplace: "마켓플레이스",
1913
1969
  settings: '설정',
@@ -1936,16 +1992,30 @@ const ko = {
1936
1992
  unsavedCount: "저장되지 않은 변경 {{count}}개",
1937
1993
  unsavedCount_one: "저장되지 않은 변경 {{count}}개",
1938
1994
  unsavedCount_other: "저장되지 않은 변경 {{count}}개",
1995
+ fieldErrorsToast: "확인이 필요한 설정 {{count}}개: {{settings}}",
1996
+ fieldErrorsToast_one: "확인이 필요한 설정 {{count}}개: {{settings}}",
1997
+ fieldErrorsToast_other: "확인이 필요한 설정 {{count}}개: {{settings}}",
1939
1998
  cryptoRefusalTitle: "이 배포는 시크릿을 암호화할 수 없습니다",
1940
1999
  cryptoRefusalSubjectSuffix: "은(는) 암호화 대상으로 선언되어 아무것도 기록되지 않았습니다.",
1941
2000
  cryptoRefusalNoSubject: "암호화 대상으로 선언된 값이 거부되어 아무것도 기록되지 않았습니다.",
1942
2001
  cryptoRefusalToast: "시크릿을 암호화할 수 없습니다: {{subject}}",
1943
2002
  cryptoRefusalToastNoSubject: "시크릿을 암호화할 수 없습니다",
1944
- },
1945
- loadingSteps: {
1946
- connecting: "데이터 소스에 연결 중",
1947
- loadingConfig: "설정 로드 중",
1948
- preparingWorkspace: "워크스페이스 준비 중",
2003
+ sourceBadgeInherited: "{{source}}에서 상속됨",
2004
+ sourceBadgeOverrides: "{{source}} 재정의",
2005
+ resetToDefault: "기본값으로 재설정",
2006
+ envLockBadge: "환경 변수로 잠김",
2007
+ envLockBadgeTitle: "환경 변수로 고정되어 UI에서 편집할 수 없습니다.",
2008
+ deprecatedBadge: "지원 중단됨",
2009
+ deprecatedBadgeReplacedBy: "지원 중단됨 → {{replacedBy}}",
2010
+ unsupportedSpecifierType: "지원되지 않는 설정 항목 유형: {{type}}",
2011
+ },
2012
+ workspaceTimezonePrompt: {
2013
+ title: "시스템 시간대 설정",
2014
+ description: "이 시스템은 아직 플랫폼 기본 시간대({{current}})를 사용하고 있습니다. 시스템 시간대는 수식에서 \"오늘\"의 의미, 보고서의 날짜별 그룹화, 날짜와 시간의 표시 방식을 결정하며 시스템의 모든 사용자에게 적용됩니다. 아래에 브라우저 시간대가 입력되어 있습니다.",
2015
+ laterHint: "설정 페이지에서 언제든지 변경할 수 있습니다.",
2016
+ decline: "기본값 유지",
2017
+ confirm: "시간대 설정",
2018
+ saved: "시스템 시간대를 {{zone}}(으)로 설정했습니다",
1949
2019
  },
1950
2020
  error: {
1951
2021
  connectionFailed: "서버에 연결할 수 없습니다",
@@ -1970,27 +2040,28 @@ const ko = {
1970
2040
  groups: {
1971
2041
  general: "일반",
1972
2042
  navigation: "탐색",
1973
- dataViews: "데이터 뷰",
1974
2043
  aiChat: "AI 어시스턴트",
1975
- preferences: "환경설정",
1976
2044
  },
1977
2045
  openCommandPalette: "명령 팔레트 열기",
1978
2046
  showShortcuts: "키보드 단축키 표시",
1979
2047
  closeDialog: "대화상자 / 패널 닫기",
1980
2048
  toggleSidebar: "사이드바 전환",
1981
- focusSearch: "검색에 포커스",
1982
- createRecord: "새 레코드 생성",
1983
- refreshData: "데이터 새로고침",
1984
- editRecord: "선택한 레코드 편집",
1985
2049
  newChat: "새 채팅",
1986
2050
  toggleChatsList: "채팅 목록 전환",
1987
- toggleDarkMode: "다크 모드 전환",
2051
+ goHome: "홈으로 돌아가기",
2052
+ },
2053
+ reportIndex: {
2054
+ title: "보고서",
2055
+ emptyTitle: "보고서 없음",
2056
+ emptyDescription: "이 앱에는 열 수 있는 보고서가 없습니다.",
1988
2057
  },
1989
2058
  commandPalette: {
1990
2059
  title: "명령 팔레트",
1991
2060
  placeholder: "명령어를 입력하거나 검색…",
1992
2061
  noResults: "결과를 찾을 수 없습니다.",
1993
2062
  objects: "객체",
2063
+ packages: "패키지",
2064
+ flows: "플로우",
1994
2065
  dashboards: "대시보드",
1995
2066
  pages: "페이지",
1996
2067
  reports: "보고서",
@@ -2009,9 +2080,9 @@ const ko = {
2009
2080
  },
2010
2081
  // objectui#9954 — see the `en` pack for what raises each case.
2011
2082
  readRate: {
2012
- ratioTitle: '이 환경의 읽기 양이 비정상적입니다',
2083
+ ratioTitle: '이 시스템의 읽기 양이 비정상적입니다',
2013
2084
  ratio: '쓰기 1행당 {{ratio}}행을 읽고 있습니다. 플랫폼은 {{threshold}} 초과 비율을 표시합니다. 제한하거나 차단하는 것은 없습니다. 읽기 패턴을 검토할 수 있도록 알리는 보고입니다.',
2014
- noWritesTitle: '이 환경은 읽기만 있고 쓰기가 전혀 없습니다',
2085
+ noWritesTitle: '이 시스템은 읽기만 있고 쓰기가 전혀 없습니다',
2015
2086
  noWrites: '행을 읽고 있지만 쓰기가 전혀 없어 읽기 비율에 상한이 없습니다. 가장 심각한 수치입니다. 플랫폼은 {{threshold}} 초과 비율을 표시합니다. 제한하거나 차단하는 것은 없습니다. 읽기 패턴을 검토할 수 있도록 알리는 보고입니다.',
2016
2087
  },
2017
2088
  // objectui#10439 — see the `en` pack for what raises each case.
@@ -2052,12 +2123,14 @@ const ko = {
2052
2123
  viewNameInvalid: "소문자, 숫자, 밑줄을 사용하고 문자 또는 밑줄로 시작하세요.",
2053
2124
  systemViewReadonly: "시스템 보기는 코드에 정의되어 있어 읽기 전용입니다.",
2054
2125
  cannotEditMetaView: "이 보기는 코드에 정의된 기본 제공 보기이므로 변경할 수 없습니다.",
2055
- viewConfigPermissionDenied: "보기 설정은 이 보기를 사용하는 모든 사용자에게 적용되므로 변경하려면 '메타데이터 관리' 권한이 필요합니다. 관리자에게 변경을 요청하세요.",
2126
+ resetView: "보기 재설정",
2127
+ resetViewTitle: "이 보기의 정렬, 필터, 열 너비를 보기 자체의 설정으로 되돌립니다. 본인의 설정만 변경됩니다.",
2056
2128
  cannotDeleteMetaView: "이 보기는 코드에 정의된 기본 제공 보기이므로 삭제할 수 없습니다.",
2057
2129
  expandToPage: "전체 페이지로 열기",
2058
2130
  objectNotFound: "객체를 찾을 수 없음",
2059
2131
  objectNotFoundDescription: "객체 \"{{objectName}}\"이(가) 현재 구성에 존재하지 않습니다.",
2060
2132
  objectNotFoundHint: "앱 탐색 설정을 확인하거나 사이드바에서 다른 객체를 선택하세요.",
2133
+ objectPackageDisabled: "객체 \"{{objectName}}\"이(가) 속한 패키지가 비활성화되어 있어 제공되지 않습니다.",
2061
2134
  filterOrNotSavable: "이 필터는 조건 사이에 OR을 사용하며, 저장된 뷰에는 아직 저장할 수 없습니다. 현재 목록에는 계속 적용됩니다. 뷰에 저장하려면 OR 그룹을 해제하세요.",
2062
2135
  filterNestedNotSavable: "이 필터는 중첩된 조건 그룹을 사용하며, 저장된 뷰에는 저장할 수 없습니다. 뷰에 저장하려면 단일 조건 목록으로 펼치세요.",
2063
2136
  allRecords: "모든 레코드",
@@ -2145,6 +2218,10 @@ const ko = {
2145
2218
  ufAddField: "+ 필터 필드 추가…",
2146
2219
  ufShowAllRecords: "\"모든 레코드\" 탭 표시",
2147
2220
  },
2221
+ runtimeDraft: {
2222
+ publishFailed: "게시에 실패했습니다",
2223
+ discardFailed: "초안 버리기에 실패했습니다",
2224
+ },
2148
2225
  localeSwitcher: {
2149
2226
  label: "언어",
2150
2227
  },
@@ -2152,17 +2229,22 @@ const ko = {
2152
2229
  nav: {
2153
2230
  pinItem: "{{name}} 고정",
2154
2231
  unpinItem: "{{name}} 고정 해제",
2155
- dragToReorder: "드래그하여 순서 변경",
2156
2232
  favorites: "즐겨찾기",
2157
2233
  launcherLabel: "앱 런처",
2158
2234
  menuLabel: "앱 탐색",
2159
2235
  menuEmpty: "이 앱에는 열 수 있는 탐색 항목이 없습니다.",
2236
+ itemMenu: "{{name}} 더 많은 작업",
2237
+ openInNewTab: "새 탭에서 열기",
2238
+ copyLink: "링크 복사",
2239
+ linkCopied: "링크가 클립보드에 복사됨",
2240
+ linkCopyFailed: "링크 복사 실패",
2241
+ design: "디자인",
2160
2242
  },
2161
2243
  },
2162
2244
  auth: {
2163
2245
  setPassword: {
2164
2246
  title: "복구 비밀번호 설정",
2165
- description: "싱글 사인온으로 로그인했습니다. SSO를 사용할 수 없게 되더라도 이 환경에 직접 로그인할 수 있도록 로컬 비밀번호를 설정하세요.",
2247
+ description: "싱글 사인온으로 로그인했습니다. SSO를 사용할 수 없게 되더라도 직접 로그인할 수 있도록 로컬 비밀번호를 설정하세요.",
2166
2248
  email: "이메일",
2167
2249
  newPassword: "새 비밀번호",
2168
2250
  confirmPassword: "비밀번호 확인",
@@ -2178,9 +2260,8 @@ const ko = {
2178
2260
  signingIn: "로그인하는 중…",
2179
2261
  ssoHandoff: "{{target}}(으)로 계속",
2180
2262
  devAdminHint: {
2181
- title: "개발 인스턴스",
2182
- body: "시드된 개발용 관리자 계정으로 로그인하세요:",
2183
- dismiss: "닫기",
2263
+ title: "로컬 개발 인스턴스",
2264
+ signIn: "개발용 관리자로 로그인",
2184
2265
  },
2185
2266
  title: "계정에 로그인",
2186
2267
  description: "이메일과 비밀번호를 입력하세요",
@@ -2212,6 +2293,20 @@ const ko = {
2212
2293
  usePasswordSignInText: "비밀번호로 로그인하기",
2213
2294
  socialButton: "{provider} 계정으로 계속",
2214
2295
  orText: "또는 이메일로 계속",
2296
+ ssoButton: "SSO로 로그인",
2297
+ ssoOnlyDescription: "소속 조직의 싱글 사인온으로 로그인하세요",
2298
+ usePasswordText: "비밀번호 사용하기",
2299
+ backToSsoText: "싱글 사인온으로 돌아가기",
2300
+ // objectui#12600 — the console login card's own header, the password
2301
+ // field's reveal toggle, and the footer's legal links.
2302
+ welcomeTitle: "다시 오신 것을 환영합니다",
2303
+ welcomeDescription: "로그인하고 작업을 계속하세요",
2304
+ showPasswordText: "비밀번호 표시",
2305
+ hidePasswordText: "비밀번호 숨기기",
2306
+ footer: {
2307
+ privacy: "개인정보처리방침",
2308
+ terms: "이용약관",
2309
+ },
2215
2310
  },
2216
2311
  register: {
2217
2312
  title: "계정 만들기",
@@ -2234,7 +2329,7 @@ const ko = {
2234
2329
  orText: "또는 이메일로 계속",
2235
2330
  errors: {
2236
2331
  userExists: "해당 이메일로 이미 계정이 존재합니다. 로그인해 보세요.",
2237
- selfRegistrationClosed: "이 환경에서는 직접 가입을 받지 않습니다. 관리자에게 초대를 요청하세요.",
2332
+ selfRegistrationClosed: "이 시스템에서는 직접 가입을 받지 않습니다. 관리자에게 초대를 요청하세요.",
2238
2333
  emailDomainNotAllowed: "이 이메일의 도메인으로는 여기에서 가입할 수 없습니다. 조직 이메일을 사용하거나 관리자에게 초대를 요청하세요.",
2239
2334
  },
2240
2335
  verifyInbox: {
@@ -2311,7 +2406,7 @@ const ko = {
2311
2406
  checkSpam: "이메일을 받지 못하셨나요? 스팸 폴더를 확인하거나 지원팀에 문의하세요.",
2312
2407
  or: "또는",
2313
2408
  // objectui#3546 slice three.
2314
- resendUnavailable: "이 환경에서는 이메일 발송이 구성되지 않았을 수 있습니다. 문제가 계속되면 지원팀에 문의하세요.",
2409
+ resendUnavailable: "이 시스템에서는 이메일 발송이 구성되지 않았을 수 있습니다. 문제가 계속되면 지원팀에 문의하세요.",
2315
2410
  },
2316
2411
  setup: {
2317
2412
  welcomeTitle: "ObjectStack에 오신 것을 환영합니다",
@@ -2355,7 +2450,7 @@ const ko = {
2355
2450
  disabledDescription: "이 배포에는 장치 승인이 활성화되어 있지 않으므로 여기에서 이 장치를 승인할 수 없습니다.",
2356
2451
  },
2357
2452
  shell: {
2358
- tenantHostHint: "이 작업 공간에 로그인하는 중입니다",
2453
+ tenantHostHint: "이 시스템에 로그인하는 중입니다",
2359
2454
  },
2360
2455
  layout: {
2361
2456
  headline: "강력한 비즈니스 애플리케이션을 더 빠르게.",
@@ -2365,6 +2460,7 @@ const ko = {
2365
2460
  signOut: "대신 로그아웃",
2366
2461
  password: {
2367
2462
  title: "비밀번호가 만료되었습니다",
2463
+ resetTitle: "비밀번호를 변경해야 합니다",
2368
2464
  fallbackMessage: "계속하려면 새 비밀번호를 설정하세요.",
2369
2465
  current: "현재 비밀번호",
2370
2466
  next: "새 비밀번호",
@@ -2390,6 +2486,11 @@ const ko = {
2390
2486
  verifying: "확인 중…",
2391
2487
  invalidCode: "코드가 올바르지 않습니다. 다시 시도하세요.",
2392
2488
  },
2489
+ impersonation: {
2490
+ passwordTitle: "{{user}} 님이 비밀번호를 변경해야 합니다",
2491
+ mfaTitle: "{{user}} 님이 2단계 인증을 설정해야 합니다",
2492
+ body: "{{user}} 계정을 대행하고 있습니다. 이 작업은 해당 사용자 본인만 할 수 있습니다. 대행을 종료하고 본인 계정으로 돌아가세요.",
2493
+ },
2393
2494
  },
2394
2495
  },
2395
2496
  // objectui#3546 slice three — the /oauth/consent screen.
@@ -2398,12 +2499,17 @@ const ko = {
2398
2499
  title: "{{appName}}이(가) 계정에 액세스하려고 합니다",
2399
2500
  request: "{{appName}}이(가) 권한을 요청합니다{{suffix}}.",
2400
2501
  unknownApp: "어떤 애플리케이션",
2502
+ unidentified: "이 애플리케이션을 식별할 수 없습니다.",
2503
+ clientId: "클라이언트 ID",
2401
2504
  willAllow: "이 앱은 다음을 할 수 있습니다:",
2402
2505
  scope: {
2403
2506
  openid: "본인 확인",
2404
2507
  profile: "기본 프로필(이름, 사진) 읽기",
2405
2508
  email: "이메일 주소 읽기",
2406
2509
  offlineAccess: "로그인 상태 유지(액세스 갱신)",
2510
+ dataRead: "레코드 읽기(본인 권한 범위 내)",
2511
+ dataWrite: "레코드 생성, 변경 및 삭제(본인 권한 범위 내)",
2512
+ actionsExecute: "사용자를 대신하여 작업 실행(본인 권한 범위 내)",
2407
2513
  },
2408
2514
  deny: "거부",
2409
2515
  authorize: "허용",
@@ -2446,8 +2552,8 @@ const ko = {
2446
2552
  password: {
2447
2553
  changeTitle: "비밀번호 변경",
2448
2554
  setTitle: "로컬 비밀번호 설정",
2449
- changeDescription: "이 환경에 로그인할 때 사용하는 비밀번호를 업데이트하세요.",
2450
- setDescription: "통합 인증(SSO)으로 로그인하셨습니다. 로컬 비밀번호를 설정하면 이 환경에서 이메일과 비밀번호로도 로그인할 수 있습니다.",
2555
+ changeDescription: "로그인할 때 사용하는 비밀번호를 업데이트하세요.",
2556
+ setDescription: "통합 인증(SSO)으로 로그인하셨습니다. 로컬 비밀번호를 설정하면 이메일과 비밀번호로도 로그인할 수 있습니다.",
2451
2557
  current: "현재 비밀번호",
2452
2558
  new: "새 비밀번호",
2453
2559
  password: "비밀번호",
@@ -2456,7 +2562,7 @@ const ko = {
2456
2562
  mismatch: "비밀번호가 일치하지 않습니다",
2457
2563
  enterCurrent: "현재 비밀번호를 입력하세요",
2458
2564
  changed: "비밀번호가 변경되었습니다.",
2459
- localSet: "로컬 비밀번호가 설정되었습니다. 이제 이 환경에서 이메일과 비밀번호로 로그인할 수 있습니다.",
2565
+ localSet: "로컬 비밀번호가 설정되었습니다. 이제 이메일과 비밀번호로 로그인할 수 있습니다.",
2460
2566
  changeAction: "비밀번호 변경",
2461
2567
  setAction: "비밀번호 설정",
2462
2568
  },
@@ -2471,21 +2577,21 @@ const ko = {
2471
2577
  unknown: "예기치 않은 오류가 발생했습니다.",
2472
2578
  },
2473
2579
  workspace: {
2474
- label: "워크스페이스",
2475
- default: "내 워크스페이스",
2476
- switch: "워크스페이스 전환",
2477
- createTitle: "워크스페이스 만들기",
2478
- createDescription: "워크스페이스는 팀이 협업할 수 있는 공유 공간입니다.",
2479
- createButton: "워크스페이스 생성",
2480
- nameLabel: "워크스페이스 이름",
2580
+ label: "조직",
2581
+ default: "내 조직",
2582
+ switch: "조직 전환",
2583
+ createTitle: "조직 만들기",
2584
+ createDescription: "조직은 팀이 협업할 수 있는 공유 공간입니다.",
2585
+ createButton: "조직 생성",
2586
+ nameLabel: "조직 이름",
2481
2587
  namePlaceholder: "예: Acme Inc",
2482
2588
  slugLabel: "URL 슬러그",
2483
2589
  slugHint: "URL에 사용됩니다. 소문자, 숫자, 하이픈만 사용 가능합니다.",
2484
2590
  invite: "구성원 초대",
2485
2591
  members: "구성원",
2486
- settings: "워크스페이스 설정",
2592
+ settings: "조직 설정",
2487
2593
  multiOrgDisabled: "이 인스턴스에서는 새 조직을 만들 수 없습니다.",
2488
- createFailed: '워크스페이스를 만들지 못했습니다',
2594
+ createFailed: '조직을 만들지 못했습니다',
2489
2595
  },
2490
2596
  help: {
2491
2597
  onThisPage: "이 페이지에서",
@@ -2493,6 +2599,12 @@ const ko = {
2493
2599
  appDocs: '이 앱의 문서',
2494
2600
  allDocs: '전체 문서',
2495
2601
  onlineDocs: '온라인 문서',
2602
+ loadingDocumentation: '문서 로딩 중',
2603
+ about: '정보',
2604
+ aboutTitle: '이 콘솔 정보',
2605
+ aboutDescription: '이 콘솔이 컴파일된 빌드입니다.',
2606
+ aboutBuild: '콘솔 빌드',
2607
+ aboutBuildUnknown: '알 수 없는 빌드(이 콘솔을 빌드할 때 버전이 설정되지 않음)',
2496
2608
  },
2497
2609
  sidebar: {
2498
2610
  packageManagement: "패키지 관리",
@@ -2507,18 +2619,16 @@ const ko = {
2507
2619
  area: "영역",
2508
2620
  scope: "범위",
2509
2621
  recent: "최근",
2510
- favorites: "즐겨찾기",
2511
2622
  starred: "즐겨찾기",
2512
2623
  removeFromFavorites: "즐겨찾기에서 {{name}} 제거",
2624
+ allReports: "모든 보고서",
2513
2625
  },
2514
2626
  topbar: {
2515
2627
  openAssistant: "{{name}} 어시스턴트 열기",
2516
2628
  offline: "오프라인",
2517
2629
  usersOnline: "현재 접속 중인 사용자",
2518
2630
  switchView: "뷰 전환",
2519
- switchObject: "객체 전환",
2520
2631
  connection: {
2521
- connected: "연결됨",
2522
2632
  connecting: "연결 중…",
2523
2633
  reconnecting: "다시 연결 중…",
2524
2634
  disconnected: "연결 끊김",
@@ -2531,23 +2641,22 @@ const ko = {
2531
2641
  },
2532
2642
  aiAssistant: "AI 어시스턴트",
2533
2643
  designInStudio: "Studio에서 디자인",
2644
+ editApp: "앱 편집",
2534
2645
  },
2535
2646
  home: {
2536
2647
  build: {
2537
2648
  title: "앱 만들기",
2538
- subtitle: "처음부터 시작 — 객체, 폼, 자동화, 인터페이스를 설계합니다.",
2539
- noCapability: "이 워크스페이스에서는 앱 만들기를 사용할 수 없습니다 — ‘메타데이터 관리’ 권한이 필요하지만 계정에 해당 권한이 없습니다.",
2649
+ noCapability: "이 시스템에서는 앱 만들기를 사용할 수 없습니다 — ‘메타데이터 관리’ 권한이 필요하지만 계정에 해당 권한이 없습니다.",
2540
2650
  },
2541
2651
  template: {
2542
2652
  title: "템플릿으로 시작",
2543
- subtitle: "마켓플레이스에서 템플릿 앱을 설치하고 원하는 대로 바꾸세요.",
2544
2653
  marketplaceDisabled: "이 런타임에는 앱 마켓플레이스가 구성되어 있지 않아 여기에서 설치할 템플릿이 없습니다.",
2545
2654
  },
2546
2655
  welcomeAdminDescription: "비즈니스를 한 문장으로 설명해 주세요 — AI가 객체, 화면, API, 에이전트 도구를 생성합니다. 왼쪽 메뉴에서 직접 설정할 수도 있습니다.",
2547
2656
  welcomeAdminDescriptionNoBuild: "왼쪽 관리 메뉴에서 첫 애플리케이션을 설정하세요. 데이터가 쌓이면 AI 어시스턴트가 살펴보는 것을 도와줍니다.",
2548
2657
  welcomeAdminDescriptionNoAi: "왼쪽 관리 메뉴에서 첫 애플리케이션을 설정하세요.",
2549
2658
  noAppsTitle: "아직 애플리케이션이 없습니다",
2550
- noAppsDescription: "워크스페이스를 준비하고 있습니다 — 관리자가 공유한 앱이 여기에 표시됩니다.",
2659
+ noAppsDescription: "시스템을 준비하고 있습니다 — 관리자가 공유한 앱이 여기에 표시됩니다.",
2551
2660
  buildWithAI: "AI로 빌드",
2552
2661
  askAI: "AI에게 질문",
2553
2662
  recoveryReminder: {
@@ -2556,9 +2665,15 @@ const ko = {
2556
2665
  dismiss: "닫기",
2557
2666
  },
2558
2667
  pendingDrafts: {
2559
- message: "게시되지 않은 변경이 {{count}}건 있습니다 — 게시하면 반영됩니다.",
2560
- message_one: "게시되지 않은 변경이 {{count}}건 있습니다 — 게시하면 반영됩니다.",
2561
- message_other: "게시되지 않은 변경이 {{count}}건 있습니다 — 게시하면 반영됩니다.",
2668
+ // objectui#12602 — the drafts row in Home's "My work" section: the
2669
+ // count, then the first draft names joined by `nameSeparator`, in
2670
+ // their package when they share one.
2671
+ title: "게시되지 않은 변경 {{count}}개",
2672
+ title_one: "게시되지 않은 변경 {{count}}개",
2673
+ title_other: "게시되지 않은 변경 {{count}}개",
2674
+ inPackage: "{{names}} · {{package}}에서 게시 대기 중",
2675
+ waiting: "{{names}} · 게시 대기 중",
2676
+ nameSeparator: ", ",
2562
2677
  cta: "게시",
2563
2678
  publishing: "게시하는 중…",
2564
2679
  published: "게시했습니다! 변경 사항이 반영되었습니다.",
@@ -2578,11 +2693,18 @@ const ko = {
2578
2693
  showMoreApps: "더 보기",
2579
2694
  showLess: "간략히",
2580
2695
  continueEmpty: "열어본 항목이 여기에 표시됩니다.",
2581
- actionCenter: {
2582
- title: "확인이 필요한 항목",
2583
- empty: "모두 처리했습니다",
2696
+ // objectui#12602 — Home's "My work" section: its heading, the link to the
2697
+ // full inbox, each column's title, "view all" link and empty line.
2698
+ myWork: {
2699
+ title: "내 작업",
2700
+ openInbox: "받은 편지함 열기",
2701
+ viewAll: "모두 보기",
2702
+ approvals: "승인 대기",
2703
+ approvalsEmpty: "승인 대기 중인 항목이 없습니다",
2704
+ notifications: "알림",
2705
+ notificationsEmpty: "읽지 않은 알림이 없습니다",
2584
2706
  },
2585
- loading: "워크스페이스 로드 중…",
2707
+ loading: "로딩 중…",
2586
2708
  welcome: "ObjectUI에 오신 것을 환영합니다",
2587
2709
  welcomeDescription: "첫 애플리케이션을 만들거나 시스템 설정을 구성하여 시작하세요.",
2588
2710
  createFirstApp: "첫 앱 만들기",
@@ -2593,7 +2715,7 @@ const ko = {
2593
2715
  manageObjects: "객체 관리",
2594
2716
  manageObjectsDesc: "데이터 모델 구성",
2595
2717
  systemSettings: "시스템 설정",
2596
- systemSettingsDesc: "워크스페이스 구성",
2718
+ systemSettingsDesc: "시스템 구성",
2597
2719
  },
2598
2720
  appCard: {
2599
2721
  noDescription: "설명 없음",
@@ -2603,7 +2725,17 @@ const ko = {
2603
2725
  greetingAfternoon: "좋은 오후에요",
2604
2726
  greetingEvening: "좋은 저녁이에요",
2605
2727
  greetingNight: "야간 작업 중",
2606
- heroTagline: "마지막으로 중단한 곳에서 이어서 하거나 새로운 것을 발견해 보세요.",
2728
+ greetingSeparator: ", ",
2729
+ greetingEnd: ".",
2730
+ search: "앱, 레코드, 페이지 검색…",
2731
+ summary: {
2732
+ approvals: "오늘 승인 대기 중인 항목이 {{count}}건 있습니다",
2733
+ approvals_one: "오늘 승인 대기 중인 항목이 {{count}}건 있습니다",
2734
+ approvals_other: "오늘 승인 대기 중인 항목이 {{count}}건 있습니다",
2735
+ none: "오늘은 처리할 일이 없습니다",
2736
+ },
2737
+ addApp: "앱 추가",
2738
+ appOpened: "{{time}}에 열람",
2607
2739
  open: "열기",
2608
2740
  recentApps: {
2609
2741
  title: "최근 열린 항목",
@@ -2612,6 +2744,8 @@ const ko = {
2612
2744
  dashboard: "대시보드",
2613
2745
  page: "페이지",
2614
2746
  report: "보고서",
2747
+ package: "패키지",
2748
+ view: "목록 보기",
2615
2749
  record: "레코드",
2616
2750
  metadata: "메타데이터",
2617
2751
  },
@@ -2649,11 +2783,17 @@ const ko = {
2649
2783
  manageAllApps: "모든 앱 관리",
2650
2784
  systemConsole: "시스템 콘솔",
2651
2785
  noAppsConfigured: "구성된 앱 없음",
2786
+ allApps: "모든 앱",
2787
+ editAppInStudio: "Studio에서 {{app}} 편집",
2788
+ backToHome: "홈으로 돌아가기",
2789
+ settings: "시스템 설정",
2790
+ productHome: "{{product}} 홈",
2652
2791
  },
2653
2792
  activityFeed: {
2654
2793
  title: "최근 활동",
2655
2794
  filter: "필터",
2656
2795
  empty: "최근 활동 없음",
2796
+ accessDenied: "활동을 볼 권한이 없습니다.",
2657
2797
  ariaLabel: "활동 피드",
2658
2798
  typeCreate: "생성",
2659
2799
  typeUpdate: "업데이트",
@@ -2718,11 +2858,19 @@ const ko = {
2718
2858
  appAccessDenied: "이 앱에 접근할 권한이 없습니다",
2719
2859
  appAccessDeniedDescription: "이 앱은 존재하지만 계정에 여는 권한이 없습니다. 관리자에게 접근 권한을 요청하세요.",
2720
2860
  appAccessDeniedHome: "홈으로 돌아가기",
2861
+ appNothingAvailable: "{{app}}에서 아직 사용할 수 있는 항목이 없습니다",
2862
+ appNothingAvailableDescription: "이 앱에는 계정으로 열 수 있는 페이지가 없습니다. 관리자에게 접근 권한을 요청하세요.",
2863
+ appNothingAvailableGrantDescription: "이 앱에는 계정으로 열 수 있는 페이지가 없습니다. 설정에서 접근 권한을 부여할 수 있습니다.",
2864
+ openSetup: "설정 열기",
2721
2865
  createFirstApp: "첫 번째 앱 만들기",
2722
2866
  systemSettings: "시스템 설정",
2723
2867
  back: "뒤로",
2724
2868
  recordNotFound: "레코드를 찾을 수 없습니다",
2725
2869
  recordNotFoundDescription: "찾고 있는 레코드가 존재하지 않거나 삭제되었을 수 있습니다.",
2870
+ recordAccessDenied: "{{object}} 레코드에 접근할 권한이 없습니다",
2871
+ recordAccessDeniedDescription: "이 유형의 레코드를 볼 권한이 없습니다. 접근이 필요하면 관리자에게 문의하세요.",
2872
+ recordLoadFailed: "이 레코드를 불러오지 못했습니다",
2873
+ recordLoadFailedDescription: "불러오는 중 문제가 발생했습니다. 연결을 확인하고 다시 시도하세요.",
2726
2874
  },
2727
2875
  actionDialog: {
2728
2876
  title: "작업 매개변수",
@@ -2755,12 +2903,15 @@ const ko = {
2755
2903
  updateFailed: "탐색을 업데이트할 수 없습니다",
2756
2904
  },
2757
2905
  objectActions: {
2758
- resetPackageSetConfirm: "이 권한 세트는 설치된 패키지에 포함되어 있어 제거할 수 없습니다. 삭제하면 패키지 기본 상태로 초기화되며 이 환경의 커스터마이징은 폐기됩니다. 계속할까요?",
2759
- resetPackageSetSuccess: "권한 세트를 패키지 기본 상태로 초기화했습니다",
2760
2906
  deleteSuccess: "{{label}} 삭제 성공",
2761
2907
  deleteFailed: "{{label}} 삭제 실패",
2762
2908
  noRecordId: "레코드 ID가 없습니다",
2763
2909
  deleteConfirm: "이 레코드를 삭제하시겠습니까?",
2910
+ deleteConfirmTitle: "{{label}} \"{{name}}\"을(를) 삭제하시겠습니까?",
2911
+ bulkDeleteConfirmTitle: "{{count}}개의 {{label}} 레코드를 삭제하시겠습니까?",
2912
+ bulkDeleteConfirmTitle_one: "{{count}}개의 {{label}} 레코드를 삭제하시겠습니까?",
2913
+ bulkDeleteConfirmTitle_other: "{{count}}개의 {{label}} 레코드를 삭제하시겠습니까?",
2914
+ deleteConfirmButton: "삭제",
2764
2915
  bulkDeleteSuccess: "{{count}}개의 {{label}} 레코드 삭제됨",
2765
2916
  bulkDeleteSuccess_one: "{{count}}개의 {{label}} 레코드 삭제됨",
2766
2917
  bulkDeleteSuccess_other: "{{count}}개의 {{label}} 레코드 삭제됨",
@@ -2796,6 +2947,7 @@ const ko = {
2796
2947
  loading: "로딩 중…",
2797
2948
  failedToLoad: "매트릭스 로드 실패: {{message}}",
2798
2949
  needsAcross: "매트릭스 보고서에는 하나 이상의 `groupingsAcross` 필드가 필요합니다.",
2950
+ forbiddenMessage: "이 보고서의 데이터를 볼 수 있는 권한이 없습니다.",
2799
2951
  aggregate: {
2800
2952
  count: "개수",
2801
2953
  countDistinct: "고유 개수",
@@ -2810,18 +2962,18 @@ const ko = {
2810
2962
  },
2811
2963
  },
2812
2964
  organizations: {
2813
- create: "워크스페이스 만들기",
2814
- mine: "내 워크스페이스",
2815
- title: "워크스페이스",
2816
- heading: "내 워크스페이스",
2817
- subtitle: "계속할 워크스페이스를 선택하거나 새 워크스페이스를 만드세요.",
2818
- searchPlaceholder: "워크스페이스 검색",
2819
- new: "새 워크스페이스",
2820
- current: "현재 워크스페이스",
2965
+ create: "조직 만들기",
2966
+ mine: "내 조직",
2967
+ title: "조직",
2968
+ heading: "내 조직",
2969
+ subtitle: "계속할 조직을 선택하거나 새 조직을 만드세요.",
2970
+ searchPlaceholder: "조직 검색",
2971
+ new: "새 조직",
2972
+ current: "현재 조직",
2821
2973
  manage: "관리",
2822
- emptyTitle: "아직 워크스페이스가 없습니다",
2823
- emptyDescription: "시작하려면 첫 번째 워크스페이스를 만드세요.",
2824
- noMatches: "검색과 일치하는 워크스페이스가 없습니다.",
2974
+ emptyTitle: "아직 조직이 없습니다",
2975
+ emptyDescription: "시작하려면 첫 번째 조직을 만드세요.",
2976
+ noMatches: "검색과 일치하는 조직이 없습니다.",
2825
2977
  },
2826
2978
  organization: {
2827
2979
  roles: {
@@ -2906,6 +3058,7 @@ const ko = {
2906
3058
  readOnlyNote: "소유자만 설정을 변경할 수 있습니다.",
2907
3059
  nameLabel: "조직 이름",
2908
3060
  slugLabel: "슬러그",
3061
+ slugLockedNote: "이 조직에는 활성 환경이 있어 여기에서 슬러그를 변경할 수 없습니다. 이름을 바꾸면 해당 환경의 하위 도메인도 함께 이동합니다.",
2909
3062
  logoLabel: "로고",
2910
3063
  logoUpload: "업로드",
2911
3064
  logoReplace: "변경",
@@ -2978,8 +3131,12 @@ const ko = {
2978
3131
  noPendingApprovals: "대기 중인 승인 없음",
2979
3132
  openApprovalsInbox: "승인 보관함 열기",
2980
3133
  badgeTotal: "총 {{total}}건",
2981
- badgeNotifications: "알림 {{unread}}건",
2982
- badgeApprovals: "승인 대기 {{approvals}}건",
3134
+ badgeNotifications: "알림 {{count}}건",
3135
+ badgeNotifications_one: "알림 {{count}}건",
3136
+ badgeNotifications_other: "알림 {{count}}건",
3137
+ badgeApprovals: "승인 대기 {{count}}건",
3138
+ badgeApprovals_one: "승인 대기 {{count}}건",
3139
+ badgeApprovals_other: "승인 대기 {{count}}건",
2983
3140
  arrivalMany: "새 메시지 {{count}}건",
2984
3141
  arrivalMany_one: "새 메시지 {{count}}건",
2985
3142
  arrivalMany_other: "새 메시지 {{count}}건",
@@ -3024,10 +3181,10 @@ const ko = {
3024
3181
  body: 'MCP 서비스가 꺼져 있습니다(OS_MCP_SERVER_ENABLED=false). 운영자에게 다시 활성화를 요청하세요.',
3025
3182
  },
3026
3183
  url: {
3027
- title: '이 환경의 MCP 엔드포인트',
3184
+ title: '이 시스템의 MCP 엔드포인트',
3028
3185
  body: 'MCP를 지원하는 모든 AI 클라이언트가 이 URL로 연결합니다. 인증은 셀프서비스입니다. 배포 자체가 OAuth 2.1 인가 서버이므로 브라우저 로그인만 하면 되고, 모든 호출은 본인의 권한과 행 수준 보안 아래 실행됩니다.',
3029
3186
  downloadSkill: 'SKILL.md 다운로드',
3030
- skillHint: '이식 가능한 에이전트 스킬: 스킬을 지원하는 에이전트에게 이 환경 사용법을 알려줍니다.',
3187
+ skillHint: '이식 가능한 에이전트 스킬: 스킬을 지원하는 에이전트에게 이 시스템 사용법을 알려줍니다.',
3031
3188
  },
3032
3189
  claude: {
3033
3190
  body: '설정 → 커넥터 → 사용자 지정 커넥터 추가에서 이 URL을 붙여넣고 브라우저에서 로그인하세요.',
@@ -3070,15 +3227,8 @@ const ko = {
3070
3227
  importAction: "가져오기",
3071
3228
  dismiss: "닫기",
3072
3229
  },
3073
- cloudOnboarding: {
3074
- hintCreate: "첫 환경을 만들어 보세요. 고유한 URL과 데이터베이스, 요금제를 갖춘 전용 작업 공간이며 앱 구축은 그 안에서 이루어집니다.",
3075
- hintReady: "프로덕션 환경이 준비되었습니다. 열어서 앱을 만들고 실행하세요. 모두 환경 안에서 이루어집니다.",
3076
- createEnvironment: "환경 만들기",
3077
- openProduction: "프로덕션 열기",
3078
- manageEnvironments: "환경 관리",
3079
- },
3080
- cloudPlanStatus: {
3081
- current: "현재 요금제",
3230
+ cloudWorkspaceTimezoneNotice: {
3231
+ seeded: "환경 시간대는 생성 시 브라우저에 맞춰 {{zone}}(으)로 설정되었습니다. 설정 → 현지화에서 변경할 수 있습니다.",
3082
3232
  },
3083
3233
  ai: {
3084
3234
  nlQuery: {
@@ -3155,8 +3305,8 @@ const ko = {
3155
3305
  rowConversational: "Build / Ask 모델",
3156
3306
  rowStructured: "구조화(블루프린트 / 시드)",
3157
3307
  rowReasoning: "추론 강도",
3158
- readFailed: "유효한 AI 모델을 읽을 수 없습니다. 이 환경에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다.",
3159
- readFailedWithStatus: "유효한 AI 모델을 읽을 수 없습니다(HTTP {{status}}). 이 환경에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다.",
3308
+ readFailed: "유효한 AI 모델을 읽을 수 없습니다. 이 시스템에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다.",
3309
+ readFailedWithStatus: "유효한 AI 모델을 읽을 수 없습니다(HTTP {{status}}). 이 시스템에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다.",
3160
3310
  overridesInEffect: "적용 중인 재정의: ",
3161
3311
  noOverrides: "없음 — 배포된 코드의 기본값으로 실행 중입니다.",
3162
3312
  adapter: "어댑터: ",
@@ -3174,9 +3324,13 @@ const ko = {
3174
3324
  // against). `humanizeToolName` looks each up as
3175
3325
  // `chatbot.tool.<tool_name>` and falls back to its English
3176
3326
  // title-caser for a custom / third-party tool, so a name
3177
- // missing here is degraded, never broken. The `en` values
3178
- // are deliberately EQUAL to what that title-caser produces:
3179
- // adding the key must not silently reword the English UI.
3327
+ // missing here is degraded, never broken. Every value, `en`
3328
+ // included, is a short sentence in the pack's language
3329
+ // saying what the step does (cloud#2927 Target 3, ruled
3330
+ // 「同意」; objectui#12724): never the tool id, and never
3331
+ // the title-caser's output for it, which is how the step
3332
+ // reads for a tool the pack has no entry for.
3333
+ // `toolLabels-locale-parity-7481` holds both.
3180
3334
  // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3181
3335
  // set for both surfaces (they used to carry separate
3182
3336
  // tables and disagreed on casing).
@@ -3194,42 +3348,48 @@ const ko = {
3194
3348
  // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3195
3349
  // against the registry instead of against its own hand-held list.
3196
3350
  chatbot: {
3351
+ answer: {
3352
+ showFull: '전체 답변 보기',
3353
+ collapse: '접기',
3354
+ expandTable: '펼치기',
3355
+ exitExpandedTable: '닫기',
3356
+ },
3197
3357
  tool: {
3198
- aggregate_data: "데이터 집계",
3199
- get_record: "레코드 가져오기",
3200
- query_data: "데이터 조회",
3201
- query_records: "레코드 조회",
3202
- search_knowledge: "지식 검색",
3203
- visualize_data: "차트 생성",
3204
- add_field: "필드 추가",
3205
- apply_blueprint: "앱 생성",
3206
- apply_edit: "변경 사항 적용",
3207
- create_metadata: "메타데이터 생성",
3208
- create_object: "오브젝트 생성",
3209
- create_package: "패키지 생성",
3210
- create_seed: "샘플 데이터 생성",
3211
- delete_field: "필드 삭제",
3212
- describe_metadata: "메타데이터 확인",
3213
- describe_object: "오브젝트 구조 확인",
3214
- get_active_package: "현재 패키지 가져오기",
3215
- get_authoring_rules: "작성 규칙 가져오기",
3216
- get_metadata_schema: "메타데이터 구조 가져오기",
3217
- get_package: "패키지 가져오기",
3218
- list_metadata: "메타데이터 목록",
3219
- list_objects: "오브젝트 목록",
3220
- list_packages: "패키지 목록",
3221
- load_tools: "도구 불러오기",
3222
- modify_field: "필드 수정",
3223
- open_record: "레코드 열기",
3224
- propose_blueprint: "앱 설계안 작성",
3225
- set_active_package: "현재 패키지 전환",
3226
- suggest_builder: "구축 방법 제안",
3227
- test_flow: "플로우 테스트",
3228
- todo_write: "할 일 기록",
3229
- toggle_flow: "플로우 켜기·끄기",
3230
- update_metadata: "메타데이터 업데이트",
3231
- validate_expression: "표현식 검증",
3232
- verify_build: "빌드 검증",
3358
+ aggregate_data: "관련 데이터 집계하기",
3359
+ get_record: "이 레코드 읽기",
3360
+ query_data: "필요한 데이터 조회하기",
3361
+ query_records: "해당 레코드 찾기",
3362
+ search_knowledge: "지식 베이스에서 찾아보기",
3363
+ visualize_data: "데이터를 차트로 그리기",
3364
+ add_field: "오브젝트에 필드 추가하기",
3365
+ apply_blueprint: "설계안대로 앱 만들기",
3366
+ apply_edit: "이번 변경 적용하기",
3367
+ create_metadata: "메타데이터 새로 만들기",
3368
+ create_object: "오브젝트 새로 만들기",
3369
+ create_package: "패키지 새로 만들기",
3370
+ create_seed: "오브젝트 샘플 데이터 만들기",
3371
+ delete_field: "필드 삭제하기",
3372
+ describe_metadata: "메타데이터 내용 확인하기",
3373
+ describe_object: "오브젝트 구조 살펴보기",
3374
+ get_active_package: "현재 패키지 확인하기",
3375
+ get_authoring_rules: "작성 규칙 읽기",
3376
+ get_metadata_schema: "메타데이터 형식 살펴보기",
3377
+ get_package: "패키지 정보 확인하기",
3378
+ list_metadata: "기존 메타데이터 나열하기",
3379
+ list_objects: "기존 오브젝트 나열하기",
3380
+ list_packages: "기존 패키지 나열하기",
3381
+ load_tools: "다른 도구 불러오기",
3382
+ modify_field: "필드 수정하기",
3383
+ open_record: "이 레코드 열기",
3384
+ propose_blueprint: "앱 설계안 정리하기",
3385
+ set_active_package: "대상 패키지로 전환하기",
3386
+ suggest_builder: "AI로 만들기 제안하기",
3387
+ test_flow: "플로우 시험 실행하기",
3388
+ todo_write: "나중에 확인할 항목 적어 두기",
3389
+ toggle_flow: "플로우 켜거나 끄기",
3390
+ update_metadata: "메타데이터 업데이트하기",
3391
+ validate_expression: "표현식이 맞는지 확인하기",
3392
+ verify_build: "빌드 결과 대조하기",
3233
3393
  },
3234
3394
  toolState: {
3235
3395
  agentActivity: "에이전트 활동",
@@ -3242,6 +3402,15 @@ const ko = {
3242
3402
  denied: "거부됨",
3243
3403
  failed: "실패",
3244
3404
  },
3405
+ phase: {
3406
+ build: "빌드",
3407
+ design: "계획 설계",
3408
+ stepCount: "{{count}}단계",
3409
+ stepCount_one: "{{count}}단계",
3410
+ stepCount_other: "{{count}}단계",
3411
+ expand: "단계 보기",
3412
+ collapse: "단계 숨기기",
3413
+ },
3245
3414
  plan: {
3246
3415
  countObjects: "오브젝트 {{count}}개",
3247
3416
  countObjects_one: "오브젝트 {{count}}개",
@@ -3253,10 +3422,17 @@ const ko = {
3253
3422
  countDashboards_one: "대시보드 {{count}}개",
3254
3423
  countDashboards_other: "대시보드 {{count}}개",
3255
3424
  countSeedData: "샘플 데이터",
3425
+ extendTarget: "기존 앱에 추가: {{app}}",
3426
+ awaitingConfirm: "확인 대기 중",
3427
+ objectsAndFields: "개체 및 필드",
3428
+ views: "뷰",
3429
+ suggestedField: "추가 제안",
3430
+ nameField: "이름: {{field}}",
3256
3431
  },
3257
3432
  build: {
3258
3433
  building: "{{app}} 빌드 중…",
3259
3434
  built: "{{app}} 빌드 완료",
3435
+ builtAndLive: "빌드 및 게시 완료 · {{app}}",
3260
3436
  appFallback: "앱",
3261
3437
  addingSampleData: "샘플 데이터 추가 중",
3262
3438
  group: {
@@ -3267,6 +3443,43 @@ const ko = {
3267
3443
  seed: "샘플 데이터",
3268
3444
  },
3269
3445
  moreArtifacts: "외 {{n}}개",
3446
+ verifying: "변경 사항 확인 중…",
3447
+ verifyStep: "{{n}}단계",
3448
+ verified: "변경 사항 확인 완료",
3449
+ unknownPhase: "알 수 없는 빌드 단계",
3450
+ nextStepsLead: "다음으로 이렇게 말할 수 있습니다: {{steps}}",
3451
+ nextStepQuote: "“{{step}}”",
3452
+ draftPosture: "이후 변경 사항은 초안으로 저장되며, Studio에서 직접 게시합니다.",
3453
+ checksPassed: "검증 통과 {{passed}}/{{total}}",
3454
+ },
3455
+ changes: {
3456
+ planTitle: "변경안 · {{count}}개",
3457
+ planTitle_one: "변경안 · {{count}}개",
3458
+ planTitle_other: "변경안 · {{count}}개",
3459
+ saveDraft: "초안으로 저장",
3460
+ reviewAndPublish: "변경 사항 확인 후 게시",
3461
+ undo: "되돌리기",
3462
+ undoWithOthers: "되돌리기(다른 초안 {{count}}개 포함)",
3463
+ undoWithOthers_one: "되돌리기(다른 초안 {{count}}개 포함)",
3464
+ undoWithOthers_other: "되돌리기(다른 초안 {{count}}개 포함)",
3465
+ undoConfirm: "되돌리면 이 앱 패키지의 게시되지 않은 초안 {{total}}개가 모두 폐기되며, 그중 {{count}}개는 이번 변경이 아닙니다.",
3466
+ undoConfirm_one: "되돌리면 이 앱 패키지의 게시되지 않은 초안 {{total}}개가 모두 폐기되며, 그중 {{count}}개는 이번 변경이 아닙니다.",
3467
+ undoConfirm_other: "되돌리면 이 앱 패키지의 게시되지 않은 초안 {{total}}개가 모두 폐기되며, 그중 {{count}}개는 이번 변경이 아닙니다.",
3468
+ undoConfirmUnknown: "되돌리면 이번 변경뿐 아니라 이 앱 패키지의 게시되지 않은 초안이 모두 폐기됩니다.",
3469
+ undoConfirmAction: "모두 되돌리기",
3470
+ undoCancel: "취소",
3471
+ undoing: "되돌리는 중…",
3472
+ undone: "되돌림",
3473
+ undoFailed: "되돌리지 못했습니다",
3474
+ kind: {
3475
+ field: "필드",
3476
+ object: "오브젝트",
3477
+ view: "뷰",
3478
+ dashboard: "대시보드",
3479
+ app: "앱",
3480
+ seed: "샘플 데이터",
3481
+ package: "앱 패키지",
3482
+ },
3270
3483
  },
3271
3484
  },
3272
3485
  chatbotError: {
@@ -3282,10 +3495,13 @@ const ko = {
3282
3495
  buyCredits: "크레딧 팩 구매",
3283
3496
  upgradePlan: "요금제 업그레이드",
3284
3497
  },
3498
+ planTier: {
3499
+ teamAndUp: "Team 요금제 이상",
3500
+ },
3285
3501
  environment: {
3286
- addEnvironment: "환경 추가",
3287
3502
  setUpProduction: "프로덕션 환경 설정",
3288
3503
  addDevelopment: "개발 환경 추가",
3504
+ developmentLocked: "개발 환경 · {{tier}}",
3289
3505
  // Plan/capacity dialog (EnvironmentEntitlementDialog) — cloud#959.
3290
3506
  entitlement: {
3291
3507
  productionLimitTitle: "이미 프로덕션 환경이 있습니다",
@@ -3333,7 +3549,7 @@ const ko = {
3333
3549
  },
3334
3550
  unbound: {
3335
3551
  title: "연결되지 않음",
3336
- body: "이 런타임을 ObjectStack 컨트롤 플레인에 연결하면 조직의 비공개 패키지를 탐색하고 여기에 설치할 수 있습니다. 승인은 클라우드 계정에서 한 번만 클릭하면 되며, 이 페이지에 ID나 자격 증명을 입력할 필요가 없습니다.",
3552
+ body: "이 런타임은 컨트롤 플레인에 연결되어 있지 않습니다. '연결'을 누르면 새 창에서 클라우드 계정이 열리고, 한 번의 클릭으로 연결을 승인할 수 있습니다. 이 페이지에 ID나 자격 증명을 입력할 필요가 없습니다.",
3337
3553
  connect: "연결",
3338
3554
  },
3339
3555
  },
@@ -3346,6 +3562,13 @@ const ko = {
3346
3562
  dismiss: "닫기",
3347
3563
  confirmedToast: "\"{{set}}\"이(가) 이제 {{anchor}}에 부여되었습니다.",
3348
3564
  dismissedToast: "\"{{set}}\" 제안을 닫았습니다.",
3565
+ guestUnsupported: "여기서는 부여할 수 없습니다. Guest 위치의 세트는 승인된 제안에서 파생되지 않습니다.",
3566
+ acceptedState: "\"{{set}}\"이(가) 로그인한 모든 사용자(Everyone 위치)에 대해 승인되었습니다.",
3567
+ notInForceState: "\"{{set}}\"이(가) 승인되었지만 아직 적용되지 않았습니다. 이 요청으로 Everyone 위치가 변경되지 않았습니다. 이유는 서버 로그에 기록되어 있습니다.",
3568
+ dismissedState: "\"{{set}}\"은(는) 부여되지 않았습니다. 제안이 닫혔거나 취소되었습니다.",
3569
+ revoke: "취소",
3570
+ revoking: "취소하는 중…",
3571
+ revokedToast: "\"{{set}}\" 승인을 취소했습니다.",
3349
3572
  },
3350
3573
  title: "앱 마켓플레이스",
3351
3574
  subtitle: "ObjectStack 카탈로그에 게시된 승인된 앱을 탐색하세요. 앱을 클릭하여 세부 정보를 보고 환경 중 하나에 설치하세요.",
@@ -3359,21 +3582,26 @@ const ko = {
3359
3582
  noMatchFilters: "필터와 일치하는 앱이 없습니다.",
3360
3583
  noDescription: "사용 가능한 설명이 없습니다.",
3361
3584
  back: "마켓플레이스로 돌아가기",
3362
- installedTitle: "설치된 앱",
3363
- installedSubtitle: "이 런타임의 커널에 현재 설치된 마켓플레이스 패키지.",
3364
- installedEmpty: "아직 이 런타임에 마켓플레이스 앱이 설치되지 않았습니다.",
3365
3585
  browseLink: "마켓플레이스 탐색 →",
3366
- installedAdditiveNote: "<strong>참고:</strong> 커널 API는 추가 전용입니다 — 제거하면 디스크에서 매니페스트가 삭제되어 다음 시작 시 패키지가 로드되지 않지만, 실행 중인 커널은 재시작될 때까지 앱을 등록된 상태로 유지합니다.",
3367
- installedAt: "{{when}} 설치됨",
3368
- installedBy: "{{user}}에 의해",
3369
- installedPackageId: "패키지",
3370
- cachedAs: "<code>{{path}}</code>로 캐시됨",
3586
+ installedAdditiveNote: "제거하면 앱이 실행 중인 커널에서 즉시 제거되며, 앱의 권한 세트와 그 부여 내역도 함께 제거됩니다. 캐시된 매니페스트도 삭제되므로 다음 시작 시 패키지가 로드되지 않습니다. 앱의 객체에 저장된 레코드는 데이터베이스에 남습니다.",
3371
3587
  versionBadge: "v{{version}}",
3372
3588
  installedBadge: "v{{version}} 설치됨",
3589
+ // objectui#11645 — an install-local entry this runtime refused to load at
3590
+ // startup (the listing's `notLoaded` marker), read on Installed Apps.
3591
+ notLoaded: {
3592
+ badge: "로드되지 않음",
3593
+ protocolIncompatible: "이 런타임은 이 패키지를 로드하지 않았습니다. 이 패키지는 프로토콜 {{requiredRange}}을(를) 대상으로 하지만 이 런타임은 해당 프로토콜을 지원하지 않습니다.",
3594
+ otherReason: "이 런타임은 이 패키지를 로드하지 않았습니다({{code}}).",
3595
+ },
3373
3596
  load: {
3374
3597
  failed: "마켓플레이스를 로드할 수 없습니다",
3375
3598
  failedHintConfigured: "이 런타임은 {{url}} 의 컨트롤 플레인을 통해 마켓플레이스에 접속합니다. 해당 주소가 온라인이고 여기에서 접근 가능한지 확인하세요.",
3376
- failedHintSameOrigin: "이 런타임이 마켓플레이스 카탈로그를 직접 제공합니다. 런타임이 온라인인지 확인하세요.",
3599
+ failedHintSameOrigin: "마켓플레이스 카탈로그는 이 런타임을 통해 접근합니다. 런타임이 온라인이고 카탈로그에 접근할 수 있는지 확인하세요.",
3600
+ loading: "마켓플레이스 카탈로그를 불러오는 중…",
3601
+ slow: "아직 불러오는 중입니다 — 마켓플레이스 카탈로그의 응답이 느립니다.",
3602
+ retry: "다시 시도",
3603
+ unreachable: "마켓플레이스 카탈로그에 연결할 수 없습니다.",
3604
+ answeredError: "마켓플레이스 카탈로그가 오류로 응답했습니다(HTTP {{status}}).",
3377
3605
  packageFailed: "패키지를 로드할 수 없습니다",
3378
3606
  notFound: "찾을 수 없습니다.",
3379
3607
  },
@@ -3415,6 +3643,7 @@ const ko = {
3415
3643
  working: "처리 중…",
3416
3644
  installToCloud: "클라우드에 설치…",
3417
3645
  installing: "설치 중…",
3646
+ updating: "업데이트 중…",
3418
3647
  uninstall: "제거",
3419
3648
  uninstalling: "제거 중…",
3420
3649
  details: "세부 정보",
@@ -3432,15 +3661,45 @@ const ko = {
3432
3661
  environmentPlaceholder: "환경 선택",
3433
3662
  includeSampleData: "샘플 데이터 포함",
3434
3663
  noEnvs: "활성 조직에서 환경을 찾을 수 없습니다.",
3435
- noPermission: "환경에 앱을 설치할 권한이 없습니다. 조직 소유자 및 관리자만 설치할 수 있습니다.",
3664
+ noPermission: "환경에 앱을 설치할 권한이 없습니다. 조직 소유자 및 관리자만 설치할 수 있습니다 — 조직 관리자에게 문의하세요.",
3436
3665
  signInFirst: "먼저 ObjectStack Cloud에 로그인해야 합니다.",
3437
3666
  success: "설치 성공. 환경을 열어 새 앱을 확인하세요.",
3438
3667
  localSuccess: "이 런타임에 v{{version}} 설치됨. \"{{name}}\"이(가) 이제 앱 전환기에 표시됩니다.",
3668
+ localLoadsAtRestart: "이 런타임에 v{{version}} 설치됨. \"{{name}}\"은(는) 런타임이 다음에 다시 시작될 때 로드되며, 그때까지는 앱 전환기에 표시되지 않습니다.",
3439
3669
  localManifestConflict: "{{message}}\n참고: 로컬 앱이 이미 이 manifest_id를 가지고 있습니다. 먼저 objectstack.config.ts에서 제거하세요.",
3440
3670
  localUnauthorized: "먼저 이 런타임에 로그인하세요.",
3441
3671
  localMarketplaceUnavailable: "이 런타임에 OS_CLOUD_URL이 구성되지 않았습니다.",
3442
3672
  updateTo: "업데이트 → v{{version}}",
3443
3673
  installedVersion: "v{{version}} 설치됨",
3674
+ deploying: "앱을 배포하는 중…",
3675
+ deployed: "앱이 배포되어 사용할 준비가 되었습니다.",
3676
+ openApp: "{{name}} 열기",
3677
+ deployTimeout: "설치는 기록되었지만 이 환경에서 아직 앱을 제공하지 않습니다. 아직 배포 중일 수 있으니 잠시 후 다시 확인하세요. 계속 나타나지 않으면 패키지가 로드되지 않았거나, 앱이 포함되어 있지 않거나, 앱에 사용자에게 없는 권한이 필요할 수 있습니다.",
3678
+ checkAgain: "다시 확인",
3679
+ // ADR-0131 D6 — the install modes a package's manifest permits, and
3680
+ // what an unmanaged install answers (MarketplacePackagePage).
3681
+ mode: {
3682
+ label: "설치 방식",
3683
+ managed: "관리형",
3684
+ managedHint: "패키지가 계속 원본으로 남습니다. 코드로 등록되고 업그레이드를 받으며, 항목은 여기에서 편집하지 않습니다.",
3685
+ unmanaged: "비관리형 사본",
3686
+ unmanagedHint: "이 런타임의 자체 메타데이터로 한 번 복사됩니다. 모든 항목을 여기에서 편집할 수 있으며, 사본은 업그레이드를 받지 않습니다.",
3687
+ required: "이 패키지를 설치하려면 설치 방식을 선택하세요.",
3688
+ },
3689
+ unmanagedSuccess: "\"{{name}}\" v{{version}}을(를) 이 런타임의 자체 메타데이터로 베이스 {{base}}에 복사했습니다. 사본은 편집할 수 있으며 업그레이드를 받지 않습니다.",
3690
+ unmanagedStrippedLocks: "패키지가 이 항목들을 잠갔습니다. 사본은 편집할 수 있으므로 잠금은 복사되지 않았습니다:",
3691
+ unmanagedIgnored: "이 런타임은 비관리형 설치를 지원하지 않으므로 \"{{name}}\"이(가) 복사되지 않고 관리형(코드로 등록)으로 설치되었습니다. 런타임을 업그레이드한 다음 패키지를 제거하고 비관리형 사본으로 다시 설치하세요.",
3692
+ },
3693
+ // objectui#12146 — the install dialog opened as an UPDATE of the copy
3694
+ // this environment holds (MarketplacePackagePage).
3695
+ update: {
3696
+ dialogTitle: "{{name}} 업데이트",
3697
+ dialogDescCurrent: "이 환경({{host}})에 설치된 앱을 업데이트합니다.",
3698
+ dialogDescPicker: "설치된 앱을 업데이트할 환경을 선택하세요. ObjectStack Cloud에 로그인되어 있어야 합니다.",
3699
+ majorNotice: "메이저 버전 업데이트입니다(v{{fromMajor}} → v{{toMajor}}). 호환되지 않는 변경이 포함될 수 있습니다.",
3700
+ releaseNotes: "v{{version}} 릴리스 노트 읽기",
3701
+ success: "v{{version}}(으)로 업데이트했습니다.",
3702
+ deployTimeout: "업데이트는 기록되었지만 이 환경에서 아직 v{{version}}을(를) 제공하지 않습니다. 아직 배포 중일 수 있으니 잠시 후 다시 확인하세요.",
3444
3703
  },
3445
3704
  // objectui#3546 — the MarketplacePage "Your organization" strip.
3446
3705
  org: {
@@ -3473,9 +3732,11 @@ const ko = {
3473
3732
  },
3474
3733
  },
3475
3734
  uninstall: {
3476
- confirm: "이 런타임에서 {{manifestId}} v{{version}}을(를) 제거하시겠습니까?\n\n캐시된 매니페스트가 삭제됩니다.",
3477
- successInList: "{{manifestId}} 제거됨. 완전히 언로드하려면 런타임을 재시작하세요.",
3478
- successInDetail: "{{manifestId}}의 캐시된 매니페스트 제거됨.",
3735
+ confirm: "이 런타임에서 {{manifestId}} v{{version}}을(를) 제거하시겠습니까?\n\n앱이 실행 중인 커널에서 즉시 제거되며, 앱의 권한 세트와 그 부여 내역도 함께 제거됩니다. 캐시된 매니페스트도 삭제됩니다. 앱의 객체에 저장된 레코드는 데이터베이스에 남습니다.",
3736
+ successInList: "{{manifestId}} 제거됨. 앱이 실행 중인 커널에서 제거되었으며, 권한 세트와 그 부여 내역도 함께 제거되었습니다. 앱의 객체에 저장된 레코드는 데이터베이스에 남습니다.",
3737
+ successInDetail: "{{manifestId}} 및 캐시된 매니페스트 제거됨. 앱이 실행 중인 커널에서 제거되었으며, 권한 세트와 그 부여 내역도 함께 제거되었습니다. 앱의 객체에 저장된 레코드는 데이터베이스에 남습니다.",
3738
+ confirmNotLoaded: "이 런타임에서 {{manifestId}} v{{version}}을(를) 제거하시겠습니까?\n\n캐시된 매니페스트가 삭제됩니다. 이 런타임은 이 패키지를 로드하지 않았으므로 실행 중인 부분이 없습니다.",
3739
+ successNotLoaded: "{{manifestId}} 제거됨. 로드되지 않았으므로 재시작할 필요가 없습니다.",
3479
3740
  },
3480
3741
  accessDenied: {
3481
3742
  title: "관리자 전용 앱 마켓플레이스",
@@ -3551,6 +3812,7 @@ const ko = {
3551
3812
  progressEligible_other: '승인 가능자 {{count}}명',
3552
3813
  progressBar: '결정 진행 상황',
3553
3814
  declaredActions: '작업',
3815
+ decisionPanelOffRequestPage: '승인 결정 패널은 승인 요청 페이지에서만 작동합니다.',
3554
3816
  attachmentChip: '첨부 파일',
3555
3817
  attachmentOpenFailed: '첨부 파일을 열 수 없습니다. 다시 시도해 주세요',
3556
3818
  approveOneTitle: '"{{title}}"을(를) 승인할까요?',
@@ -3616,6 +3878,9 @@ const ko = {
3616
3878
  emptyPending: '모두 처리했습니다. 승인 대기 항목이 없습니다.',
3617
3879
  emptyOther: '아직 아무것도 없습니다.',
3618
3880
  emptyViewAll: '전체 요청 보기',
3881
+ waitingOnOthers: "{{count}}건의 요청이 다른 승인자를 기다리고 있습니다",
3882
+ waitingOnOthers_one: "{{count}}건의 요청이 다른 승인자를 기다리고 있습니다",
3883
+ waitingOnOthers_other: "{{count}}건의 요청이 다른 승인자를 기다리고 있습니다",
3619
3884
  noMatches: '현재 필터와 일치하는 항목이 없습니다.',
3620
3885
  keyboardHint: '단축키: j/k 이동 · Enter 열기 · x 선택 · a 승인 · r 거부',
3621
3886
  drawerTitle: '승인 요청',
@@ -3633,12 +3898,12 @@ const ko = {
3633
3898
  overrideActionLabel: '{{action}}(관리자 권한)',
3634
3899
  overrideNotice: '이 단계의 승인자 자리가 없습니다. 계속하면 관리자 재정의가 사용되어 단계가 즉시 확정되고, 아직 처리하지 않은 승인자는 모두 건너뜁니다. 이 결정은 관리자 재정의로 기록됩니다.',
3635
3900
  overrideNoticeWho: '이 단계의 승인자 자리가 없습니다. 계속하면 관리자 재정의가 사용되어 단계가 즉시 확정되고, 아직 처리하지 않은 승인자 — {{who}} — 를 건너뜁니다. 이 결정은 관리자 재정의로 기록됩니다.',
3901
+ overrideReassignNotice: '이 단계의 승인자 자리가 없습니다. 계속하면 관리자 재정의가 사용되어 단계가 선택한 새 승인자에게 재할당되고, 아직 처리하지 않은 승인자는 모두 교체됩니다. 요청은 대기 상태로 유지되며 새 승인자의 처리를 기다립니다. 이 재할당은 관리자 재정의로 기록됩니다.',
3902
+ overrideReassignNoticeWho: '이 단계의 승인자 자리가 없습니다. 계속하면 관리자 재정의가 사용되어 단계가 선택한 새 승인자에게 재할당되고, 아직 처리하지 않은 승인자 — {{who}} — 는 교체됩니다. 요청은 대기 상태로 유지되며 새 승인자의 처리를 기다립니다. 이 재할당은 관리자 재정의로 기록됩니다.',
3903
+ overrideRecallNotice: '내가 제출한 요청이 아닙니다. 계속하면 관리자 재정의가 사용되어 요청이 회수되고, 아직 처리하지 않은 승인자는 모두 더 이상 처리할 수 없으며, 레코드 잠금이 해제됩니다.',
3904
+ overrideRecallNoticeWho: '내가 제출한 요청이 아닙니다. 계속하면 관리자 재정의가 사용되어 요청이 회수되고 레코드 잠금이 해제되며, 아직 처리하지 않은 승인자 — {{who}} — 는 더 이상 처리할 수 없습니다.',
3636
3905
  viaOverrideChip: '관리자 재정의',
3637
3906
  viaOverrideHint: '실행자는 이 단계의 승인자 자리가 없으며 관리자 재정의 경로로 처리했습니다.',
3638
- rawData: '원본 데이터(JSON)',
3639
- copy: '복사',
3640
- copied: '복사됨',
3641
- copyFailed: '복사 실패',
3642
3907
  overrideActor: '다른 ID로 작업(관리자)',
3643
3908
  actor: '작업 ID',
3644
3909
  auto: '자동',
@@ -3720,6 +3985,9 @@ const ko = {
3720
3985
  publishing: '게시 중…',
3721
3986
  exit: '미리보기 종료',
3722
3987
  changes: '변경 사항',
3988
+ pendingHere: '초안 미리보기 · 이 페이지의 게시되지 않은 변경 {{count}}개',
3989
+ pendingHere_one: '초안 미리보기 · 이 페이지의 게시되지 않은 변경 {{count}}개',
3990
+ pendingHere_other: '초안 미리보기 · 이 페이지의 게시되지 않은 변경 {{count}}개',
3723
3991
  },
3724
3992
  changes: {
3725
3993
  title: '대기 중인 변경 사항',
@@ -3736,7 +4004,57 @@ const ko = {
3736
4004
  confirmNote: '게시하면 이 패키지의 대기 중인 초안 {{count}}개가 한 번에(원자적으로) 게시됩니다.',
3737
4005
  confirmNote_one: '게시하면 이 패키지의 대기 중인 초안 {{count}}개가 한 번에(원자적으로) 게시됩니다.',
3738
4006
  confirmNote_other: '게시하면 이 패키지의 대기 중인 초안 {{count}}개가 한 번에(원자적으로) 게시됩니다.',
4007
+ // objectui#11591 — the package-less sheet: no package to batch, so each
4008
+ // draft publishes by itself and one that fails stays pending.
4009
+ confirmNoteSeparate: '게시하면 대기 중인 초안 {{count}}개가 하나씩 따로 게시됩니다. 게시에 실패한 초안은 대기 상태로 남고, 나머지는 그대로 게시됩니다.',
4010
+ confirmNoteSeparate_one: '게시하면 대기 중인 초안 {{count}}개가 하나씩 따로 게시됩니다. 게시에 실패한 초안은 대기 상태로 남고, 나머지는 그대로 게시됩니다.',
4011
+ confirmNoteSeparate_other: '게시하면 대기 중인 초안 {{count}}개가 하나씩 따로 게시됩니다. 게시에 실패한 초안은 대기 상태로 남고, 나머지는 그대로 게시됩니다.',
3739
4012
  publishConfirm: '모두 게시',
4013
+ summaryItems: '{{count}}개 항목',
4014
+ summaryItems_one: '{{count}}개 항목',
4015
+ summaryItems_other: '{{count}}개 항목',
4016
+ summaryType: '{{type}} {{n}}',
4017
+ typeCount: {
4018
+ object: '객체 {{count}}',
4019
+ object_one: '객체 {{count}}',
4020
+ object_other: '객체 {{count}}',
4021
+ view: '뷰 {{count}}',
4022
+ view_one: '뷰 {{count}}',
4023
+ view_other: '뷰 {{count}}',
4024
+ page: '페이지 {{count}}',
4025
+ page_one: '페이지 {{count}}',
4026
+ page_other: '페이지 {{count}}',
4027
+ dashboard: '대시보드 {{count}}',
4028
+ dashboard_one: '대시보드 {{count}}',
4029
+ dashboard_other: '대시보드 {{count}}',
4030
+ app: '앱 {{count}}',
4031
+ app_one: '앱 {{count}}',
4032
+ app_other: '앱 {{count}}',
4033
+ action: '작업 {{count}}',
4034
+ action_one: '작업 {{count}}',
4035
+ action_other: '작업 {{count}}',
4036
+ report: '보고서 {{count}}',
4037
+ report_one: '보고서 {{count}}',
4038
+ report_other: '보고서 {{count}}',
4039
+ flow: '플로우 {{count}}',
4040
+ flow_one: '플로우 {{count}}',
4041
+ flow_other: '플로우 {{count}}',
4042
+ permission: '권한 세트 {{count}}',
4043
+ permission_one: '권한 세트 {{count}}',
4044
+ permission_other: '권한 세트 {{count}}',
4045
+ agent: '에이전트 {{count}}',
4046
+ agent_one: '에이전트 {{count}}',
4047
+ agent_other: '에이전트 {{count}}',
4048
+ email_template: '이메일 템플릿 {{count}}',
4049
+ email_template_one: '이메일 템플릿 {{count}}',
4050
+ email_template_other: '이메일 템플릿 {{count}}',
4051
+ },
4052
+ // objectui#12929 — the unchecked choice under an added object field whose
4053
+ // literal default the batch publish can write into the existing records.
4054
+ backfillOption: '기본값 채우기(기존 레코드 {{count}}개)',
4055
+ backfillOption_one: '기본값 채우기(기존 레코드 {{count}}개)',
4056
+ backfillOption_other: '기본값 채우기(기존 레코드 {{count}}개)',
4057
+ backfillOptionNoCount: '기본값 채우기',
3740
4058
  // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3741
4059
  // the confirm button so a refusal the door would issue is read BEFORE
3742
4060
  // the click rather than as a toast after the batch rolled back.
@@ -3818,6 +4136,10 @@ const ko = {
3818
4136
  exists: "설정됨",
3819
4137
  notExists: "설정되지 않음",
3820
4138
  },
4139
+ emptyCheckHint: {
4140
+ text: '"{{isEmpty}}"은(는) 빈 텍스트도 포함합니다. "{{isNull}}"은(는) 값이 없는 경우만 포함합니다.',
4141
+ list: '"{{isEmpty}}"은(는) 빈 목록도 포함합니다. "{{isNull}}"은(는) 값이 없는 경우만 포함합니다.',
4142
+ },
3821
4143
  },
3822
4144
  sortBuilder: {
3823
4145
  sortBy: "정렬 기준",
@@ -3928,6 +4250,8 @@ const ko = {
3928
4250
  setDefaultFailed: "기본 앱 설정 실패: {{reason}}",
3929
4251
  appDeleted: "{{name}}을(를) 삭제했습니다",
3930
4252
  deleteFailed: "앱 삭제 실패: {{reason}}",
4253
+ nothingToDelete: "{{name}}에 삭제할 항목이 없습니다: {{reason}}",
4254
+ alreadyAtDefault: "이미 패키지 기본 상태입니다",
3931
4255
  bulkEnabled: "앱 {{n}}개를 활성화했습니다",
3932
4256
  bulkDisabled: "앱 {{n}}개를 비활성화했습니다",
3933
4257
  bulkFailed: "{{n}}개 실패: {{details}}",
@@ -3951,6 +4275,7 @@ const ko = {
3951
4275
  toggleLabel: "{{label}}의 활성화 상태",
3952
4276
  on: "켜짐",
3953
4277
  off: "꺼짐",
4278
+ notRunning: "여기서 실행되지 않음",
3954
4279
  clone: "복제",
3955
4280
  cloneTitle: "패키지 플로우 복제",
3956
4281
  cloneBody: "사본은 정의 전체를 그대로 가져가며 새 머신 이름과 레이블이 필요합니다. 사본은 Studio에서 편집하세요.",
@@ -3959,6 +4284,9 @@ const ko = {
3959
4284
  cancel: "취소",
3960
4285
  cloneConfirm: "복제본 만들기",
3961
4286
  cloneCreated: "플로우 「{{name}}」을(를) 만들었습니다.",
4287
+ cloneSwitchSourceOff: "「{{label}}」 끄기",
4288
+ cloneSourceOff: "패키지 플로우 「{{label}}」이(가) 꺼져 있습니다.",
4289
+ cloneOpen: "Studio에서 복사본 열기",
3962
4290
  emptyTitle: "패키지 플로우 없음",
3963
4291
  emptyBody: "이 배포에는 자동화 플로우를 제공하는 설치된 패키지가 없습니다. 직접 작성한 플로우는 Studio에 있습니다.",
3964
4292
  loadFailed: "패키지 자동화를 불러오지 못했습니다.",
@@ -3966,6 +4294,7 @@ const ko = {
3966
4294
  toggleFailed: "활성화 상태를 변경하지 못했습니다.",
3967
4295
  cloneFailedHttp: "이 플로우를 복제하지 못했습니다 (HTTP {{status}}).",
3968
4296
  cloneFailed: "이 플로우를 복제하지 못했습니다.",
4297
+ reasonDetails: "세부 정보",
3969
4298
  actionsSubtitle: "설치된 패키지가 제공하는 액션입니다. 이 배포에서 끄면 액션이 제공되는 모든 곳에서 실행되지 않습니다. Studio에서 직접 액션을 따로 작성하는 것은 계속 가능합니다.",
3970
4299
  colAction: "액션",
3971
4300
  colObject: "오브젝트",
@@ -3976,7 +4305,84 @@ const ko = {
3976
4305
  },
3977
4306
  element: {
3978
4307
  number: {
3979
- noObject: "개체가 지정되지 않았습니다. object 또는 dataSource.object를 설정하세요.",
4308
+ noObject: "개체가 지정되지 않았습니다. dataSource.object를 설정하세요.",
4309
+ sourceUnresolved: "이 지표의 데이터 소스를 확인할 수 없습니다",
4310
+ },
4311
+ image: {
4312
+ noSource: "이미지 소스 없음",
4313
+ },
4314
+ recordPicker: {
4315
+ sourceUnresolved: "이 레코드 선택기의 데이터 소스를 확인할 수 없습니다",
4316
+ },
4317
+ calendar: {
4318
+ sourceUnresolved: "이 캘린더의 데이터 소스를 확인할 수 없습니다",
4319
+ },
4320
+ chart: {
4321
+ sourceUnresolved: "이 차트의 데이터 소스를 확인할 수 없습니다",
4322
+ },
4323
+ pivotTable: {
4324
+ sourceUnresolved: "이 피벗 테이블의 데이터 소스를 확인할 수 없습니다",
4325
+ },
4326
+ detailView: {
4327
+ sourceUnresolved: "이 상세 보기의 데이터 소스를 확인할 수 없습니다",
4328
+ },
4329
+ relatedList: {
4330
+ sourceUnresolved: "이 관련 목록의 데이터 소스를 확인할 수 없습니다",
4331
+ parentUnreadable: "이 관련 목록의 상위 레코드를 읽을 수 없습니다",
4332
+ },
4333
+ form: {
4334
+ sourceUnresolved: "이 양식의 데이터 소스를 확인할 수 없습니다",
4335
+ },
4336
+ lineItems: {
4337
+ sourceUnresolved: "이 품목 패널의 데이터 소스를 확인할 수 없습니다",
4338
+ },
4339
+ gantt: {
4340
+ sourceUnresolved: "이 간트 차트의 데이터 소스를 확인할 수 없습니다",
4341
+ },
4342
+ grid: {
4343
+ sourceUnresolved: "이 그리드의 데이터 소스를 확인할 수 없습니다",
4344
+ },
4345
+ board: {
4346
+ sourceUnresolved: "이 보드의 데이터 소스를 확인할 수 없습니다",
4347
+ },
4348
+ listView: {
4349
+ sourceUnresolved: "이 목록 보기의 데이터 소스를 확인할 수 없습니다",
4350
+ },
4351
+ map: {
4352
+ sourceUnresolved: "이 지도의 데이터 소스를 확인할 수 없습니다",
4353
+ },
4354
+ timeline: {
4355
+ sourceUnresolved: "이 타임라인의 데이터 소스를 확인할 수 없습니다",
4356
+ },
4357
+ component: {
4358
+ sourceUnresolved: "이 구성 요소의 데이터 소스를 확인할 수 없습니다",
4359
+ noDataSource: "확인된 데이터 소스가 없습니다",
4360
+ apiRefused: "이 구성 요소의 API 데이터 소스가 거부되었습니다",
4361
+ apiUnreadable: "이 구성 요소의 API 데이터 소스를 읽을 수 없습니다",
4362
+ },
4363
+ metadataViewer: {
4364
+ missingKey: "이 보기에 {{key}}이(가) 없습니다.",
4365
+ loading: "{{name}} 로딩 중…",
4366
+ loadFailed: "{{name}}을(를) 불러오지 못했습니다: {{message}}",
4367
+ notFound: "{{name}}을(를) 찾을 수 없습니다.",
4368
+ stateMachine: "상태 머신",
4369
+ flow: "플로우",
4370
+ permission: "권한",
4371
+ noStateMachine: "{{object}}에 상태 머신이 없습니다.",
4372
+ noStateMachineNamed: "{{object}}에 “{{name}}”(이)라는 상태 머신이 없습니다.",
4373
+ lifecycle: "{{object}}의 수명 주기",
4374
+ field: "필드 {{field}}",
4375
+ initial: "초기",
4376
+ final: "최종",
4377
+ steps: "단계: {{count}}",
4378
+ noSteps: "표시할 단계가 없습니다.",
4379
+ untitledStep: "(단계)",
4380
+ hiddenSteps: "숨겨진 기술 단계: {{count}} · 모두 표시하려면 {{setting}} 설정",
4381
+ objectAccess: "개체 액세스: {{count}}",
4382
+ noPermissions: "선언된 개체 권한이 없습니다.",
4383
+ object: "개체",
4384
+ unknownType: "알 수 없는 메타데이터 보기 유형입니다. {{a}}, {{b}} 또는 {{c}}이어야 합니다.",
4385
+ unknownTypeNamed: "알 수 없는 메타데이터 보기 유형 “{{type}}”입니다. {{a}}, {{b}} 또는 {{c}}이어야 합니다.",
3980
4386
  },
3981
4387
  },
3982
4388
  };