@objectstack/console 17.0.0 → 17.2.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.
- package/CHANGELOG.md +452 -0
- package/dist/.objectstack-injection.json +13 -0
- package/dist/.objectui-sha +1 -1
- package/dist/assets/AdapterProvider-gULVLpjV.js +3 -0
- package/dist/assets/AiPendingActionsPage-CyG11hX9.js +1 -0
- package/dist/assets/ApiConsolePage-DYuOp_W4.js +1 -0
- package/dist/assets/AppDocsIndex-BXkNskk1.js +1 -0
- package/dist/assets/AppManagementPage-BvSxDdA_.js +1 -0
- package/dist/assets/ApprovalsInboxPage-oep3a-Ek.js +1 -0
- package/dist/assets/AuditLogPage-BZZ6tzHu.js +1 -0
- package/dist/assets/ComponentNavView-Cq4wkNUa.js +1 -0
- package/dist/assets/DashboardView-C23ZCS2S.js +1 -0
- package/dist/assets/{DeveloperHubPage-DVKVm5k0.js → DeveloperHubPage-KEpKc45V.js} +1 -1
- package/dist/assets/DocPage-Y4rWCZ3E.js +1 -0
- package/dist/assets/{DocShell-C1VQpTIJ.js → DocShell-DMJHUgE5.js} +1 -1
- package/dist/assets/DocsIndex-Bb5OtPb3.js +1 -0
- package/dist/assets/DocsLayout-CoIVTMH_.js +1 -0
- package/dist/assets/DocsSlug-BARWHmXg.js +1 -0
- package/dist/assets/{ExpressionProvider-qmd0nVCn.js → ExpressionProvider-vGLngw8h.js} +1 -1
- package/dist/assets/FlowRunsPage-BeGa9_ge.js +1 -0
- package/dist/assets/{IntegrationsPage-Cq4mWRFh.js → IntegrationsPage-DTXA-Nne.js} +2 -2
- package/dist/assets/InterfaceListPage-BMvedZyV.js +1 -0
- package/dist/assets/{ManagedByBadge-DgsrLolr.js → ManagedByBadge-mKmG0hP7.js} +1 -1
- package/dist/assets/MarketplaceAccessDenied-BBMyNu2w.js +1 -0
- package/dist/assets/{MarketplaceInstalledPage-CRe2BiM2.js → MarketplaceInstalledPage-B4qrvb7w.js} +1 -1
- package/dist/assets/MarketplacePackagePage-BuVfVeBj.js +4 -0
- package/dist/assets/MarketplacePage-Cmltk5nG.js +1 -0
- package/dist/assets/{MetadataInspector-qQ85bFun.js → MetadataInspector-kVAu8vlh.js} +1 -1
- package/dist/assets/MetadataProvider-DyFZSNqq.js +1 -0
- package/dist/assets/{MonacoImpl-DStuouLX.js → MonacoImpl-Cu_-ISwm.js} +1 -1
- package/dist/assets/ObjectDataPage-BKHEYwXA.js +1 -0
- package/dist/assets/PageView-CTqS-VD9.js +1 -0
- package/dist/assets/ProfilePage-CBUxXn5a.js +1 -0
- package/dist/assets/PublicFormsPage-B8Dk8fky.js +1 -0
- package/dist/assets/RecordDetailView-BBNqsNy9.js +11 -0
- package/dist/assets/RecordFormPage-CeUmmc_n.js +1 -0
- package/dist/assets/ReportDefaultInspector-CRjDi2Er.js +3 -0
- package/dist/assets/ReportView-Cwi_Po4H.js +2 -0
- package/dist/assets/SearchResultsPage-Cg0oq2by.js +1 -0
- package/dist/assets/SettingsHub-B5_S9YgI.js +1 -0
- package/dist/assets/SettingsView-Csi1awf-.js +1 -0
- package/dist/assets/SystemHubPage-CnDri9oU.js +1 -0
- package/dist/assets/{abnfDiagram-N423BO3Z-Ck9FUrgJ.js → abnfDiagram-N423BO3Z-DfpQlDUF.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-DJbnVK1q.js → architectureDiagram-T3A2C74G-Ej_4n3NG.js} +1 -1
- package/dist/assets/{assistantBus-DNogw1P-.js → assistantBus-DNH-fDWN.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-Qtci47Jq.js → blockDiagram-VBNYF7ZC-l_P_W7_Y.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-DC9Uk9FW.js → c4Diagram-5PPSVZJV-CE82HAlO.js} +1 -1
- package/dist/assets/channel-DowAYf9b.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-C6KsYuNR.js → chunk-2GRJ4B5K-D1if-ThW.js} +1 -1
- package/dist/assets/chunk-3NCLNEKW-Z5ckM4mG.js +1 -0
- package/dist/assets/{chunk-4I5QYGJK-CPsvNPUx.js → chunk-4I5QYGJK-DlrWrdEa.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-CU_v2umt.js → chunk-5RXB4S5H-JwFhdddt.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-C_q0JPmG.js → chunk-6Q2QTUOP-C2vvuHlO.js} +1 -1
- package/dist/assets/{chunk-7Z6QIM7H-jM3JGv9o.js → chunk-7Z6QIM7H-m6s_oalL.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-Dp_0e4Vj.js → chunk-GF5L2VYU-Dgjjn2FR.js} +1 -1
- package/dist/assets/{chunk-I66GZJ75-CLtbCU_E.js → chunk-I66GZJ75-BsY3mBMx.js} +1 -1
- package/dist/assets/{chunk-J7OUQ5F2-C4uAdkrD.js → chunk-J7OUQ5F2-Cl4FNR_k.js} +1 -1
- package/dist/assets/{chunk-JQJVKLGR-BlTMFaN6.js → chunk-JQJVKLGR-BApWxqMA.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-BJzwVqKy.js → chunk-KBJHAD2P-DI4-lUt-.js} +1 -1
- package/dist/assets/{chunk-NSK5VX7P-B7tNpEbR.js → chunk-NSK5VX7P-BBTxIP6Z.js} +1 -1
- package/dist/assets/{chunk-QR6OTTB3-B3mQWEI2.js → chunk-QR6OTTB3-DJcD7xr-.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-B3DAS_Q-.js → chunk-RYQCIY6F-CnMsR_qh.js} +1 -1
- package/dist/assets/{chunk-UBXNYLIW-Cqb7MpFH.js → chunk-UBXNYLIW-B7z1tp3V.js} +1 -1
- package/dist/assets/{chunk-W5SLKNZC-DWOVkEVc.js → chunk-W5SLKNZC-BnMc5i0B.js} +1 -1
- package/dist/assets/{chunk-WRU74C26-DR5g8owc.js → chunk-WRU74C26-MrzCPX2E.js} +1 -1
- package/dist/assets/chunk-XXDRQBXY-NKBlW2Dm.js +1 -0
- package/dist/assets/classDiagram-JCYQIIEL-C4ADaKBz.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-C4ADaKBz.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-CcXrYRrs.js → cose-bilkent-JH36ORCC-XP-DnSP5.js} +1 -1
- package/dist/assets/{createDerive-C1PaRnFZ.js → createDerive-B3AGnDaY.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-DuPIOMPB.js → cynefinDiagram-MW4NZA55-B8MvpqXe.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-CHbs07zF.js → dagre-VZM6K2ZE-B5E8-xuM.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-sPS-Y-CP.js → diagram-7IWD3JNH-Xj62y5BF.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-C4Essr7L.js → diagram-B4RE2ZJO-mI-iOCGl.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-CluEJ_Yg.js → diagram-LBJQPF4R-BMTSoZch.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-D4lem9jQ.js → diagram-Q27KOJAE-B98Knrnh.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-Bfj6mHJD.js → diagram-UB23O5K3-bseKIzhv.js} +1 -1
- package/dist/assets/{dist-D3VfqzjO.js → dist-BK-OswHQ.js} +1 -1
- package/dist/assets/dist-Ck19TqqJ.js +5 -0
- package/dist/assets/{ebnfDiagram-BXEA7PRR-BKXyHLd_.js → ebnfDiagram-BXEA7PRR-Bgo10FP1.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-B6_uGYAF.js → erDiagram-JOGREHBK-BU4b8mUv.js} +1 -1
- package/dist/assets/flowDiagram-UKHOOZJN-BDHHPApJ.js +1 -0
- package/dist/assets/framework-BwfIhdyz.js +55 -0
- package/dist/assets/{ganttDiagram-PKOTCBZU-Cip5kKH4.js → ganttDiagram-PKOTCBZU-CrmKcYGt.js} +1 -1
- package/dist/assets/{getIcon-QmYxLBSb.js → getIcon-1ZXs1v-a.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-CF75OjHf.js → gitGraphDiagram-DS77QQ5N-COu0mOui.js} +1 -1
- package/dist/assets/{highlighted-body-OFNGDK62-BPV_Giyg.js → highlighted-body-OFNGDK62-CnGKNo0r.js} +1 -1
- package/dist/assets/i18n-rra-09wp.js +9 -0
- package/dist/assets/index-BLepsDd_.js +19 -0
- package/dist/assets/index-D26gl3rg.css +2 -0
- package/dist/assets/{infoDiagram-6WML65LV-IbyJxsv4.js → infoDiagram-6WML65LV-BT0Q6MIs.js} +1 -1
- package/dist/assets/infrastructure-BCTDJsqi.js +3 -0
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-D8FhFMwb.js → ishikawaDiagram-WSZJBQD7-kvPjMvBP.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-C1y_DqRe.js → journeyDiagram-NVQOT4AX-DhXy7wxt.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-DIUOavva.js → kanban-definition-27J2QSJJ-CFDavpZY.js} +1 -1
- package/dist/assets/maplibre-gl-CrDadnl3.js +801 -0
- package/dist/assets/maplibre-gl-shared.mjs +2 -2
- package/dist/assets/maplibre-gl-worker.mjs +2 -2
- package/dist/assets/mermaid-GHXKKRXX-CR9PcY0X.js +1 -0
- package/dist/assets/{mermaid-parser.core-BbBeSajF.js → mermaid-parser.core-Dd2B8Ckv.js} +1 -1
- package/dist/assets/{mermaid.core-Dc9p2r4P.js → mermaid.core-BwiBFu_S.js} +2 -2
- package/dist/assets/metadata-admin-BE9_-F_f.js +25 -0
- package/dist/assets/{mindmap-definition-FAOFIHXS-TIsZfgu-.js → mindmap-definition-FAOFIHXS-ITGoV4nW.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-BrUvPfjL.js → pegDiagram-VL7TDLO6-BoRu9yvl.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-BNPIri0N.js → pieDiagram-7S7Q4E2Y-DVsM9krU.js} +1 -1
- package/dist/assets/plugin-calendar-BfY9ZunQ.js +1 -0
- package/dist/assets/plugin-charts-CmWL7Og-.js +7 -0
- package/dist/assets/plugin-chatbot-mxoQfkdx.js +120 -0
- package/dist/assets/plugin-dashboard-CzbAW1Rz.js +6 -0
- package/dist/assets/plugin-form-ItAwTFz-.js +1 -0
- package/dist/assets/plugin-gantt-DF5W5xkN.js +64 -0
- package/dist/assets/plugin-grid-B42Photo.js +9 -0
- package/dist/assets/plugin-kanban-Dh3HIJIm.js +1 -0
- package/dist/assets/plugin-map-C1wSLqlB.js +1 -0
- package/dist/assets/plugin-map-DSnsEFKn.css +1 -0
- package/dist/assets/{plugin-markdown-CbQeAjXv.js → plugin-markdown-DNllWgPM.js} +1 -1
- package/dist/assets/plugin-report-yfOfZPQg.js +59 -0
- package/dist/assets/plugin-timeline-BpuaaqBd.js +1 -0
- package/dist/assets/plugin-tree-BrXE50se.js +1 -0
- package/dist/assets/plugin-view-Jc0rkk7A.js +1 -0
- package/dist/assets/plugins-views-cOiN-mPq.js +4 -0
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-BpL1Kl6d.js → quadrantDiagram-CIZ2JOQS-C4VzXHnp.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-CY1JovP6.js → railroadDiagram-AXF67PYL-DqZ3yKWv.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-TRTGy9-6.js → requirementDiagram-LRYGKXZP-BeH0P3vD.js} +1 -1
- package/dist/assets/{runtime-metadata-persistence-DDZN-tZg.js → runtime-metadata-persistence-DTOJpVmd.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-Hj-Un0bp.js → sankeyDiagram-W5VNT64P-Bu_tPh-A.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-iGYyf5AF.js → sequenceDiagram-SI44F4Z6-BWEuLn1a.js} +1 -1
- package/dist/assets/{skeletons-BWrJAbfN.js → skeletons-BwA1TSR2.js} +1 -1
- package/dist/assets/src-BLbFBP_B.js +1 -0
- package/dist/assets/{src-DwpgXgLE.js → src-CY2xhbXR.js} +1 -1
- package/dist/assets/{src-0qbDl74X.js → src-CvicUdp3.js} +1 -1
- package/dist/assets/src-DhAd4aY4.js +2 -0
- package/dist/assets/{stateDiagram-OKZ733FA-B-kn5M6g.js → stateDiagram-OKZ733FA-Cp7aDYsZ.js} +1 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-DaTg8C5m.js +1 -0
- package/dist/assets/{swimlanes-SLNWSIFB-sV1QkjXA.js → swimlanes-SLNWSIFB-wrx1JN6o.js} +1 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-Bqz9GVuM.js +8 -0
- package/dist/assets/{timeline-definition-Z64GVDOM-DMClsS2j.js → timeline-definition-Z64GVDOM-BcUiJfLU.js} +1 -1
- package/dist/assets/ui-components-Dwq5utCl.js +42 -0
- package/dist/assets/ui-layout-DPFlQaQp.js +1 -0
- package/dist/assets/use-book-data-CZc8MJsb.js +1 -0
- package/dist/assets/useActionModal-DYiSBx1G.js +1 -0
- package/dist/assets/useOpenRecordList-DOZu_JZX.js +1 -0
- package/dist/assets/usePackageL10n-D91-102Q.js +1 -0
- package/dist/assets/{useSettingsLabel-Bl5L3RqQ.js → useSettingsLabel-CeZ36S4g.js} +1 -1
- package/dist/assets/{utils-L-_x2yPF.js → utils-CJ4UwXMF.js} +1 -1
- package/dist/assets/{vendor-charts-DAI87uet.js → vendor-charts-BEGSmcjR.js} +3 -3
- package/dist/assets/{vendor-dndkit-CQdzTF9d.js → vendor-dndkit-CkJ59XFL.js} +1 -1
- package/dist/assets/{vendor-i18n-DeMInx63.js → vendor-i18n-Cpia2wlg.js} +1 -1
- package/dist/assets/{vendor-icons-core-B25E_7o5.js → vendor-icons-core-Bi9GWsvI.js} +1 -1
- package/dist/assets/{vendor-markdown-DjBjpmKk.js → vendor-markdown-C_Ip9E_I.js} +2 -2
- package/dist/assets/vendor-objectstack-B1R3ym-9.js +264 -0
- package/dist/assets/{vendor-radix-D1dussIM.js → vendor-radix-DFmVRiEf.js} +1 -1
- package/dist/assets/{vendor-react-BgOXCBVK.js → vendor-react-CsWFRkED.js} +1 -1
- package/dist/assets/vendor-sentry-B2ojA7qm.js +501 -0
- package/dist/assets/vendor-ui-utils-BFw4cGI6.js +1 -0
- package/dist/assets/vendor-zod-r9lyeyrU.js +64 -0
- package/dist/assets/{vennDiagram-T6HMQDX7-CrP23lgd.js → vennDiagram-T6HMQDX7-BKJsL5fS.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-DSw6poZ6.js → wardleyDiagram-T6FBY63Y-CZ0aMbYX.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-BVUFqBDL.js → xychartDiagram-ELKLHX3M-BpK2RmQ_.js} +1 -1
- package/dist/eager-closure.json +277 -0
- package/dist/index.html +56 -16
- package/package.json +1 -1
- package/dist/assets/AdapterProvider-BpWMSLQH.js +0 -3
- package/dist/assets/AiPendingActionsPage-DAJUEqyC.js +0 -1
- package/dist/assets/ApiConsolePage-CgXbOsFC.js +0 -1
- package/dist/assets/AppDocsIndex-BgaIthca.js +0 -1
- package/dist/assets/AppManagementPage-BvGPskyf.js +0 -1
- package/dist/assets/ApprovalsInboxPage-CxmrNrwP.js +0 -1
- package/dist/assets/AuditLogPage-JahfQFnX.js +0 -1
- package/dist/assets/ComponentNavView-DjiNAGys.js +0 -1
- package/dist/assets/CreateViewDialog-CUvjCA1o.js +0 -1
- package/dist/assets/DashboardView-Cr-Q-16_.js +0 -1
- package/dist/assets/FlowRunsPage-DL7MhL_U.js +0 -1
- package/dist/assets/InterfaceListPage-CfhSyYAw.js +0 -1
- package/dist/assets/MarketplaceAccessDenied-t8A0k9OX.js +0 -1
- package/dist/assets/MarketplacePackagePage-XSdk80Dd.js +0 -4
- package/dist/assets/MarketplacePage-CZjDbg5G.js +0 -1
- package/dist/assets/MetadataProvider-CnYsadFP.js +0 -1
- package/dist/assets/ObjectDataPage-D9kCSxvN.js +0 -1
- package/dist/assets/PageView-q1XSwpVo.js +0 -1
- package/dist/assets/ProfilePage-DeDhni58.js +0 -1
- package/dist/assets/PublicFormsPage-BX6YXY8w.js +0 -1
- package/dist/assets/RecordDetailView-DrVbrbaN.js +0 -9
- package/dist/assets/RecordFormPage-Bs9wX-M6.js +0 -1
- package/dist/assets/ReportDefaultInspector-BbbhDn34.js +0 -3
- package/dist/assets/ReportView-D_soBKL6.js +0 -2
- package/dist/assets/SearchResultsPage--Beqyte8.js +0 -1
- package/dist/assets/SettingsHub-BozLt7dt.js +0 -1
- package/dist/assets/SettingsView-CC3o9IGe.js +0 -1
- package/dist/assets/SystemHubPage-CBdrX4bx.js +0 -1
- package/dist/assets/channel-dlPH8oK4.js +0 -1
- package/dist/assets/chunk-3NCLNEKW-CHvXlKAW.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-BLRqgrvV.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-ghx-FrtR.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-ghx-FrtR.js +0 -1
- package/dist/assets/componentRegistry-ByxoJqMW.js +0 -1
- package/dist/assets/data-adapter-yS4exRPT.js +0 -24
- package/dist/assets/flowDiagram-UKHOOZJN-6YBsanbO.js +0 -1
- package/dist/assets/framework-B8ndNKrd.js +0 -38
- package/dist/assets/i18n-DLOdKEiB.js +0 -9
- package/dist/assets/index-DaeqUnH6.js +0 -2
- package/dist/assets/index-gaeYmjTV.css +0 -2
- package/dist/assets/infrastructure-ChmEYj6c.js +0 -3
- package/dist/assets/maplibre-gl-DPzMTNDD.js +0 -801
- package/dist/assets/mermaid-GHXKKRXX-BrwYiPsC.js +0 -1
- package/dist/assets/metadata-admin-DqAvOmNf.js +0 -25
- package/dist/assets/plugin-calendar-CQVTjox_.js +0 -1
- package/dist/assets/plugin-charts-CBUIhVeW.js +0 -7
- package/dist/assets/plugin-chatbot-DsLGdfGx.js +0 -120
- package/dist/assets/plugin-dashboard-fdM1jm2j.js +0 -6
- package/dist/assets/plugin-form-Bv0Hi0E6.js +0 -1
- package/dist/assets/plugin-gantt-CRJpVrrP.js +0 -63
- package/dist/assets/plugin-grid-gHcTrjs3.js +0 -8
- package/dist/assets/plugin-kanban-CNm7DssD.js +0 -1
- package/dist/assets/plugin-map-5lRITB8H.css +0 -1
- package/dist/assets/plugin-map-TrYBEx8q.js +0 -1
- package/dist/assets/plugin-report-Bg1oh9SG.js +0 -59
- package/dist/assets/plugin-timeline-B30kCAGi.js +0 -1
- package/dist/assets/plugin-tree-Br5XanqO.js +0 -1
- package/dist/assets/plugin-view-CgDs-8T5.js +0 -1
- package/dist/assets/plugins-views-BxwTmeut.js +0 -4
- package/dist/assets/src-BBKXMp-o.js +0 -19
- package/dist/assets/src-CVuJHohL.js +0 -1
- package/dist/assets/src-leh_hyM1.js +0 -2
- package/dist/assets/stateDiagram-v2-UEYNNEHI-CHYANMPw.js +0 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CBFvMN71.js +0 -8
- package/dist/assets/ui-components-mPgY5chB.js +0 -42
- package/dist/assets/ui-layout-CRcyxP_X.js +0 -1
- package/dist/assets/use-book-data-B2KPEJjv.js +0 -1
- package/dist/assets/useOpenRecordList-ovuRzPa2.js +0 -1
- package/dist/assets/usePackageL10n-9fP2GgDK.js +0 -1
- package/dist/assets/vendor-objectstack-DneBps14.js +0 -155
- package/dist/assets/vendor-sentry-DlmtNsBO.js +0 -501
- package/dist/assets/vendor-ui-utils-BGw4RtYu.js +0 -1
- package/dist/assets/vendor-zod-CBDIIwrA.js +0 -65
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import{i as e,o as t,t as n}from"./rolldown-runtime-C0FnF6B9.js";import{r,y as i}from"./vendor-react-BgOXCBVK.js";import{U as a,f as o,h as s,j as c,k as l,y as u}from"./vendor-objectstack-DneBps14.js";import{i as d,n as f,r as p,t as m}from"./vendor-i18n-DeMInx63.js";var h=`object-grid.list-view.object-form.embeddable-form.object-master-detail-form.object-kanban.object-calendar.object-gantt.object-timeline.object-map.object-metric.object-chart.dashboard.object-pivot.record:details.record:highlights.record:related_list.record:path.record:line_items.record:activity.record:discussion.record:history.record:quick_actions.record:reference_rail.record:alert.page:tabs.page:card.page:accordion.page:section.page:footer.page:sidebar.element:text.element:number.element:button.element:definition-list.element:repeater.action:button.action:group.action:menu.action:icon.flex.grid.stack.card.tabs.accordion.container.page:header.text.image.icon.markdown.element:divider.badge.alert.button.html`.split(`.`);new Set(h);var g=new class{components=new Map;lazyEntries=new Map;listeners=new Set;version=0;register(e,t,n){let r=n?.namespace?`${n.namespace}:${e}`:e;if(n?.namespace||console.warn(`Registering component "${e}" without a namespace is deprecated. Please provide a namespace in the meta parameter.\n\n Migration:\n // Before (deprecated):\n registry.register('${e}', MyComponent);\n\n // After:\n registry.register('${e}', MyComponent, { namespace: 'my-plugin' });\n\n See: https://github.com/objectstack-ai/objectui/blob/main/MIGRATION_GUIDE.md`),this.components.has(r),this.components.set(r,{type:r,component:t,...n}),n?.namespace&&!n?.skipFallback){let i=this.components.get(e);i&&i.component!==t&&i.type!==r&&console.warn(`Component "${e}" bare-name fallback is being overwritten by "${r}". If this is intentional keep going; otherwise register "${r}" with { skipFallback: true } so it doesn't claim the bare "${e}" key.`),this.components.set(e,{type:r,component:t,...n})}this.lazyEntries.delete(r),this.lazyEntries.delete(e),this.notify()}unregister(e,t){let n=t?`${t}:${e}`:e,r=this.components.delete(n);if(t){let t=this.components.get(e);t&&t.type===n&&this.components.delete(e)}return this.lazyEntries.delete(n),this.lazyEntries.delete(e),r&&this.notify(),r}registerLazy(e,t,n){let r=n?.namespace?`${n.namespace}:${e}`:e,i={loader:t,meta:n};this.lazyEntries.set(r,i),n?.namespace&&!n?.skipFallback&&this.lazyEntries.set(e,i),this.version++}hasLazy(e,t){return t?this.lazyEntries.has(`${t}:${e}`):this.lazyEntries.has(e)}loadLazy(e,t){let n=t?`${t}:${e}`:e,r=this.lazyEntries.get(n);if(r)return r.pending||=r.loader().catch(e=>{throw r.pending=void 0,e}),r.pending}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}notify(){this.version++;for(let e of this.listeners)try{e()}catch(e){console.error(`[Registry] listener error`,e)}}getVersion(){return this.version}get(e,t){if(t){let n=`${t}:${e}`;return this.components.get(n)?.component}return this.components.get(e)?.component}getConfig(e,t){if(t){let n=`${t}:${e}`;return this.components.get(n)}return this.components.get(e)}has(e,t){if(t){let n=`${t}:${e}`;return this.components.has(n)}return this.components.has(e)}getAllTypes(){return Array.from(this.components.keys())}getKnownTypes(){return Array.from(new Set([...this.components.keys(),...this.lazyEntries.keys()]))}getMeta(e,t){let n=t?`${t}:${e}`:e;return this.components.get(n)??this.lazyEntries.get(n)?.meta}getAllConfigs(){return Array.from(this.components.values())}getContractConfig(e){let t=this.components.get(e);if(t)return t;let n=this.lazyEntries.get(e);if(!n)return;let r=n.meta?.namespace,i=r&&!e.startsWith(`${r}:`)?`${r}:${e}`:e;return{...n.meta,type:i,lazy:!0}}getPublicConfigs(){let e=new Set,t=[],n=(n,r)=>{!r||e.has(r.type)||(e.add(r.type),t.push({...r,type:n}))};for(let e of h)n(e,this.getContractConfig(e));for(let[e,t]of this.components.entries())t.tier===`public`&&!e.includes(`:`)&&n(e,t);for(let[e,t]of this.lazyEntries.entries())t.meta?.tier===`public`&&!e.includes(`:`)&&n(e,this.getContractConfig(e));return t}getNamespaceComponents(e){return Array.from(this.components.values()).filter(t=>t.namespace===e)}};function _(e){return e==null||typeof e==`string`&&e.trim()===``||Array.isArray(e)&&e.length===0}var v={type:{required:!0,validate:e=>typeof e==`string`&&e.length>0,message:`type must be a non-empty string`},id:{required:!1,validate:e=>typeof e==`string`,message:`id must be a string`},className:{required:!1,validate:e=>typeof e==`string`,message:`className must be a string`},visible:{required:!1,validate:e=>typeof e==`boolean`,message:`visible must be a boolean`},disabled:{required:!1,validate:e=>typeof e==`boolean`,message:`disabled must be a boolean`}};function y(e,t=`schema`){let n=[];return!e||typeof e!=`object`?(n.push({path:t,message:`Schema must be an object`,type:`error`,code:`INVALID_SCHEMA`}),n):(Object.entries(v).forEach(([r,i])=>{let a=e[r];i.required&&a===void 0&&n.push({path:`${t}.${r}`,message:`${r} is required`,type:`error`,code:`MISSING_REQUIRED`}),a!==void 0&&!i.validate(a)&&n.push({path:`${t}.${r}`,message:i.message,type:`error`,code:`INVALID_TYPE`})}),n)}function b(e,t=`schema`){let n=[];return e.type===`crud`&&((!e.columns||!Array.isArray(e.columns))&&n.push({path:`${t}.columns`,message:`CRUD schema requires columns array`,type:`error`,code:`MISSING_COLUMNS`}),!e.api&&!e.dataSource&&n.push({path:`${t}.api`,message:`CRUD schema requires api or dataSource`,type:`warning`,code:`MISSING_DATA_SOURCE`}),e.columns&&Array.isArray(e.columns)&&e.columns.forEach((e,r)=>{e.name||n.push({path:`${t}.columns[${r}]`,message:`Column requires name property`,type:`error`,code:`MISSING_COLUMN_NAME`})}),e.fields&&Array.isArray(e.fields)&&e.fields.forEach((e,r)=>{e.name||n.push({path:`${t}.fields[${r}]`,message:`Field requires name property`,type:`error`,code:`MISSING_FIELD_NAME`})})),n}function x(e,t=`schema`){let n=[];return e.type===`form`&&e.fields&&Array.isArray(e.fields)&&e.fields.forEach((r,i)=>{r.name||n.push({path:`${t}.fields[${i}]`,message:`Form field requires name property`,type:`error`,code:`MISSING_FIELD_NAME`}),e.fields.filter(e=>e.name===r.name).length>1&&n.push({path:`${t}.fields[${i}]`,message:`Duplicate field name: ${r.name}`,type:`warning`,code:`DUPLICATE_FIELD_NAME`})}),n}function S(e,t=`schema`){let n=[],r=e.children||e.body;if(r){if(Array.isArray(r))r.forEach((e,r)=>{if(typeof e==`object`&&e){let i=C(e,`${t}.children[${r}]`);n.push(...i.errors,...i.warnings)}});else if(typeof r==`object`&&r){let e=C(r,`${t}.children`);n.push(...e.errors,...e.warnings)}}return n}function C(e,t=`schema`){let n=[];n.push(...y(e,t)),n.push(...b(e,t)),n.push(...x(e,t)),n.push(...S(e,t));let r=n.filter(e=>e.type===`error`),i=n.filter(e=>e.type===`warning`);return{valid:r.length===0,errors:r,warnings:i}}var ee=[`id`,`className`,`role`,`tabIndex`,`autoFocus`,`onClick`,`onBlur`,`onFocus`];function te(e){return e.startsWith(`data-`)||e.startsWith(`aria-`)}function ne(e,t){let n=new Set(t),r={};for(let t of Object.keys(e))(n.has(t)||te(t))&&(r[t]=e[t]);return r}function re(e){return ne(e,ee)}var ie=class extends Error{code=`INVALID_FILTER`;httpStatus=400;constructor(e){super(e),this.name=`FilterOperatorError`}};function ae(e){return{$eq:`=`,$ne:`!=`,$gt:`>`,$gte:`>=`,$lt:`<`,$lte:`<=`,$in:`in`,$nin:`nin`,$notin:`nin`,$between:`between`,$contains:`contains`,$notContains:`notcontains`,$notcontains:`notcontains`,$startsWith:`startswith`,$startswith:`startswith`,$endsWith:`endswith`,$endswith:`endswith`}[e]||null}function oe(e){let t=[];for(let[n,r]of Object.entries(e))if(r!=null){if(typeof r==`object`&&!Array.isArray(r))for(let[e,i]of Object.entries(r)){if(e===`$regex`)throw new ie(`[ObjectUI] The '\$regex' filter operator is not supported. It used to be converted to 'contains', which matches a literal substring rather than a pattern — a different result, not a degraded one. Field: '${n}', Value: ${JSON.stringify(i)}. Use $contains, $startsWith or $endsWith.`);if(e===`$null`){t.push([n,i?`is_null`:`is_not_null`,!0]);continue}if(e===`$exists`){t.push([n,i?`is_not_null`:`is_null`,!0]);continue}let r=ae(e);if(r)t.push([n,r,i]);else throw new ie(`[ObjectUI] Unknown filter operator '${e}' for field '${n}'. Supported operators: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, $between, $contains, $notContains, $startsWith, $endsWith, $null, $exists. If you need exact object matching, use the value directly without an operator.`)}else t.push([n,`=`,r])}return t.length===0?e:t.length===1?t[0]:[`and`,...t]}function se(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e.field;return typeof t==`string`&&t!==``}function ce(e){let t=a(e.operator);return e.value===void 0?[e.field,t]:[e.field,t,e.value]}function w(e){if(e==null)return;if(Array.isArray(e))return e.length===0?void 0:e.some(se)?e.map(e=>se(e)?ce(e):e):e;if(typeof e!=`object`)return;let t=e;if(Object.keys(t).length!==0)return oe(t)}function T(...e){let t=e.map(w).filter(e=>e!==void 0);if(t.length!==0)return t.length===1?t[0]:[`and`,...t]}function le(e,t){if(e==null)return{enabled:t};if(typeof e==`boolean`)return{enabled:e};let n=e.enabled??t;if(e.visibleWhen==null&&e.disabledWhen==null)return{enabled:n};let r={};return e.visibleWhen!=null&&(r.visibleWhen=e.visibleWhen),e.disabledWhen!=null&&(r.disabledWhen=e.disabledWhen),{enabled:n,predicates:r}}function ue(e){return le(e,!1).predicates}var de={create:`create`,import:`import`,edit:`update`,delete:`delete`,exportCsv:`export`};function E(e,t){let n=l({managedBy:e?.managedBy??void 0,userActions:e?.userActions??void 0});if(Array.isArray(t)){let e=new Set(t);for(let[t,r]of Object.entries(de))n[t]&&!e.has(r)&&(n[t]=!1)}return n}function D(e,t){return E(e,t).edit}function fe(e){if(Array.isArray(e))return e;if(e&&typeof e==`object`){if(Array.isArray(e.records))return e.records;if(Array.isArray(e.data))return e.data;if(Array.isArray(e.value))return e.value}return[]}var O=`field`,pe=[`name`,`fieldName`],me=e=>!!e&&typeof e==`object`&&!Array.isArray(e),he=e=>typeof e==`string`&&e.length>0?e:void 0;function ge(e){if(typeof e==`string`)return he(e);if(!me(e))return;let t=he(e[O]);if(t)return t;for(let t of pe){let n=he(e[t]);if(n)return n}}var _e=new Set,ve=()=>!1;function ye(e,t,n){if(!(!ve()||n.length===0))for(let r of n){let n=`${t}:${r}:${String(e[r])}`;_e.has(n)||(_e.add(n),console.warn(`[ObjectUI] Column carries two identities: \`${O}: '${t}'\` and \`${r}: '${String(e[r])}'\`. \`${O}\` wins — it is the only key \`ListColumnSchema\` declares — and \`${r}\` has been rewritten to match, so the rendered column and the requested field agree. Fix the producer: drop \`${r}\` and author \`${O}\` only. (objectui#3104)`))}}function be(e){if(typeof e==`string`||!me(e))return e;let t=ge(e);if(!t)return e;let n=e[O]!==t,r=pe.filter(n=>e[n]!==void 0&&e[n]!==t);if(!n&&r.length===0)return e;ye(e,t,r);let i={...e};i[O]=t;for(let e of r)i[e]=t;return i}function xe(e){if(!Array.isArray(e))return e;let t=!1,n=e.map(e=>{let n=be(e);return n!==e&&(t=!0),n});return t?n:e}var k=new Set([`lookup`,`master_detail`,`tree`,`user`]);function Se(e){return!!e&&typeof e==`object`&&k.has(e.type)}function Ce(e,t){if(!e||typeof e!=`object`)return[];let n=[];for(let[t,r]of Object.entries(e))Se(r)&&n.push(t);if(n.length===0)return[];if(t&&Array.isArray(t)&&t.length>0){let e=new Set;for(let n of t){let t=ge(n);t&&e.add(t)}return n.filter(t=>e.has(t))}return n}var A=`\0`,we=`[-\\u2013\\u2014|/·,:]`,Te=[`name`,`title`,`subject`,`label`,`full_name`,`display_name`],Ee=new Set([`date`,`datetime`,`time`,`number`,`currency`,`percent`,`boolean`,`file`,`image`,`attachment`,`json`,`geolocation`,`select`,`multiselect`,`picklist`,`multipicklist`,`lookup`,`master_detail`,`reference`,`autonumber`,`auto_number`,`phone`]),De=new Set([`text`,`string`,`textarea`,`html`]);function Oe(e){let t=e.name??e.full_name??e.display_name??e.label??e.title??e.subject??null;return t==null||typeof t==`string`&&!t.trim()?[e.salutation,e.first_name,e.last_name].filter(e=>typeof e==`string`&&e.trim()).map(e=>e.trim()).join(` `)||(typeof e.email==`string`&&e.email.trim()?e.email.trim():null):typeof t==`string`?t:String(t)}function ke(e,t){let n=typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:void 0;if(!n||!t||typeof t!=`object`)return``;n=n.replace(/\{\{\s*([^{}]+?)\s*\}\}/g,`{$1}`);let r=!1,i=n.replace(/\{([^{}]+)\}/g,(e,n)=>{let i=String(n).trim().split(`.`),a=t;for(let e of i){if(a==null)break;a=a[e]}return a&&typeof a==`object`&&(a=Oe(a)),a==null||a===``?A:(r=!0,String(a))});if(!r)return``;let a=RegExp(`\\s*${we}\\s*${A}`,`g`),o=RegExp(`${A}\\s*${we}\\s*`,`g`);return i=i.replace(a,``).replace(o,``).replace(new RegExp(A,`g`),``).replace(/\s+/g,` `).trim(),i}function Ae(e){if(!e||typeof e!=`object`)return!1;let t=typeof e.type==`string`?e.type.toLowerCase():void 0;if(!t)return!0;if(t===`formula`){let t=String(e.data_type??e.dataType??e.returnType??e.result_type??``).toLowerCase();return De.has(t)}return!Ee.has(t)}function je(e){return e?Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&typeof e.name==`string`).map(e=>[e.name,e]):typeof e==`object`?Object.keys(e).map(t=>[t,e[t]]):[]:[]}var Me=new WeakMap;function Ne(e){let t=je(e?.fields).filter(([,e])=>Ae(e));if(t.length===0)return;for(let e of Te){let n=t.find(([t])=>t.toLowerCase()===e);if(n)return n[0]}let n=t.find(([e])=>{let t=e.toLowerCase();return t.endsWith(`_name`)||t.endsWith(`_title`)||t.startsWith(`name_`)});return n?n[0]:t[0][0]}function Pe(e){if(typeof e!=`object`||!e)return Ne(e);if(Me.has(e))return Me.get(e);let t=Ne(e);return Me.set(e,t),t}var Fe=[`name`,`full_name`,`fullName`,`display_name`,`displayName`,`title`,`subject`,`label`];function j(e,t){if(!t||!e||typeof e!=`object`)return;let n=e[t];if(n&&typeof n==`object`&&(n=Oe(n)),n==null)return;let r=typeof n==`string`?n.trim():String(n);return r===``?void 0:r}function Ie(e,t,n){let r=j(t,n?.titleField)??j(t,e?.titleField);if(r)return r;let i=j(t,e?.nameField??e?.displayNameField??e?.NAME_FIELD_KEY);if(i)return i;if(e?.titleFormat){let n=ke(e.titleFormat,t);if(n)return n}let a=j(t,Pe(e));if(a)return a;if(n?.deriveFromRecordKeys!==!1&&t&&typeof t==`object`){for(let e of Fe){let n=j(t,e);if(n)return n}for(let e of Object.keys(t)){let n=e.toLowerCase();if(!(n===`id`||n===`_id`||n.endsWith(`_id`)||n.startsWith(`_`))&&(n.endsWith(`_name`)||n.endsWith(`_title`)||n.startsWith(`name_`))){let n=j(t,e);if(n)return n}}}let o=t?.id??t?._id;return o!=null&&String(o).trim()!==``?`Record #${o}`:n?.fallback??`Untitled`}function Le(e,t){if(e==null||e===``)return null;let n=t?.labels;if(typeof e==`string`)return n?.[e]??e;if(typeof e==`number`)return Number.isFinite(e)?n?.[String(e)]??e:null;if(typeof e==`boolean`)return e;if(e instanceof Date){let t=e.getTime();return Number.isNaN(t)?null:t}if(Array.isArray(e)){let n=e.map(e=>Le(e,t)).filter(e=>e!==null).map(e=>String(e));return n.length>0?n.join(`, `):null}if(typeof e==`object`){let t=e,r=t.id??t._id;if(r!=null){let e=n?.[String(r)];if(e)return e}let i=Ie(void 0,t,{fallback:``});return i===``?null:i}return String(e)}function Re(e,t){return e===null&&t===null?0:e===null?1:t===null?-1:typeof e==`boolean`&&typeof t==`boolean`?!!e-+!!t:typeof e==`number`&&typeof t==`number`?e-t:String(e).localeCompare(String(t),void 0,{numeric:!0})}function ze(e){if(e){if(typeof e==`string`){let[t,n]=e.trim().split(/\s+/);return t?{[t]:n?.toLowerCase()===`desc`?`desc`:`asc`}:void 0}if(Array.isArray(e)){let t={};for(let n of e)!n||typeof n.field!=`string`||n.field===``||(t[n.field]=n.order===`desc`?`desc`:`asc`);return Object.keys(t).length>0?t:void 0}}}function Be(e,t,n){if(!e)return;let r=e=>t.includes(e);if(r(e))return e;let i=`${n}.`;if(!e.includes(`.`)&&r(i+e))return i+e;if(e.startsWith(i)&&r(e.slice(i.length)))return e.slice(i.length)}var Ve=class e{scopes=[];constructor(e={}){this.scopes.push(new Map(Object.entries(e)))}pushScope(e){this.scopes.push(new Map(Object.entries(e)))}popScope(){this.scopes.length>1&&this.scopes.pop()}get(e){let t=e.split(`.`),n=t[0];for(let e=this.scopes.length-1;e>=0;e--)if(this.scopes[e].has(n)){let r=this.scopes[e].get(n);for(let e=1;e<t.length;e++)if(r&&typeof r==`object`)r=r[t[e]];else return;return r}}set(e,t){this.scopes.length>0&&this.scopes[this.scopes.length-1].set(e,t)}has(e){let t=e.split(`.`)[0];for(let e=this.scopes.length-1;e>=0;e--)if(this.scopes[e].has(t))return!0;return!1}toObject(){let e={};for(let t of this.scopes)for(let[n,r]of t.entries())e[n]=r;return e}createChild(t={}){let n=new e;return n.scopes=[...this.scopes,new Map(Object.entries(t))],n}},He={Math,JSON,parseInt,parseFloat,isNaN,isFinite},Ue=new Set([`constructor`,`__proto__`,`prototype`,`__defineGetter__`,`__defineSetter__`,`__lookupGetter__`,`__lookupSetter__`]),We=class e{source=``;pos=0;context={};_evaluating=!0;evaluate(e,t){this.source=e.trim(),this.pos=0,this.context={...He,...t};let n=this.parseTernary();if(this.skipWhitespace(),this.pos<this.source.length)throw SyntaxError(`Unexpected token "${this.source[this.pos]}" at position ${this.pos} in expression "${e}"`);return n}skipWhitespace(){for(;this.pos<this.source.length&&/\s/.test(this.source[this.pos]);)this.pos++}peek(e=0){return this.source[this.pos+e]??``}consume(){return this.source[this.pos++]??``}withEvaluation(e,t){let n=this._evaluating;this._evaluating=e;try{return t()}finally{this._evaluating=n}}assertSafeProp(e){if(typeof e==`string`&&Ue.has(e))throw TypeError(`Access to property "${e}" is not permitted in expressions`)}parseTernary(){let e=this.parseNullish();if(this.skipWhitespace(),this.peek()===`?`&&this.peek(1)!==`?`){if(this.pos++,this.skipWhitespace(),!this._evaluating){if(this.parseTernary(),this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);this.pos++,this.skipWhitespace(),this.parseTernary();return}if(e){let e=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);return this.pos++,this.skipWhitespace(),this.withEvaluation(!1,()=>this.parseTernary()),e}if(this.withEvaluation(!1,()=>this.parseTernary()),this.skipWhitespace(),this.peek()!==`:`)throw SyntaxError(`Expected ":" in ternary expression`);return this.pos++,this.skipWhitespace(),this.parseTernary()}return e}parseNullish(){let e=this.parseOr();for(this.skipWhitespace();this.peek()===`?`&&this.peek(1)===`?`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&e!=null)this.withEvaluation(!1,()=>this.parseOr());else{let t=this.parseOr();this._evaluating&&(e??=t)}this.skipWhitespace()}return e}parseOr(){let e=this.parseAnd();for(this.skipWhitespace();this.peek()===`|`&&this.peek(1)===`|`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&e)this.withEvaluation(!1,()=>this.parseAnd());else{let t=this.parseAnd();this._evaluating&&(e||=t)}this.skipWhitespace()}return e}parseAnd(){let e=this.parseEquality();for(this.skipWhitespace();this.peek()===`&`&&this.peek(1)===`&`;){if(this.pos+=2,this.skipWhitespace(),this._evaluating&&!e)this.withEvaluation(!1,()=>this.parseEquality());else{let t=this.parseEquality();this._evaluating&&(e&&=t)}this.skipWhitespace()}return e}parseEquality(){let e=this.parseAddition();for(this.skipWhitespace();;){let t;if(this.peek()===`=`&&this.peek(1)===`=`&&this.peek(2)===`=`)t=`===`,this.pos+=3;else if(this.peek()===`!`&&this.peek(1)===`=`&&this.peek(2)===`=`)t=`!==`,this.pos+=3;else if(this.peek()===`=`&&this.peek(1)===`=`)t=`==`,this.pos+=2;else if(this.peek()===`!`&&this.peek(1)===`=`)t=`!=`,this.pos+=2;else if(this.peek()===`>`&&this.peek(1)===`=`)t=`>=`,this.pos+=2;else if(this.peek()===`<`&&this.peek(1)===`=`)t=`<=`,this.pos+=2;else if(this.peek()===`>`&&this.peek(1)!==`>`)t=`>`,this.pos++;else if(this.peek()===`<`&&this.peek(1)!==`<`)t=`<`,this.pos++;else break;this.skipWhitespace();let n=this.parseAddition();switch(t){case`===`:e=e===n;break;case`!==`:e=e!==n;break;case`==`:e=e==n;break;case`!=`:e=e!=n;break;case`>`:e=e>n;break;case`<`:e=e<n;break;case`>=`:e=e>=n;break;case`<=`:e=e<=n}this.skipWhitespace()}return e}parseAddition(){let e=this.parseMultiplication();for(this.skipWhitespace();(this.peek()===`+`||this.peek()===`-`)&&this.peek(1)!==`=`;){let t=this.consume();this.skipWhitespace();let n=this.parseMultiplication();e=t===`+`?e+n:e-n,this.skipWhitespace()}return e}parseMultiplication(){let e=this.parseUnary();for(this.skipWhitespace();(this.peek()===`*`||this.peek()===`/`||this.peek()===`%`)&&this.peek(1)!==`=`;){let t=this.consume();this.skipWhitespace();let n=this.parseUnary();t===`*`?e*=n:t===`/`?e/=n:e%=n,this.skipWhitespace()}return e}parseUnary(){if(this.skipWhitespace(),this.source.startsWith(`typeof`,this.pos)&&!/[\w$]/.test(this.source[this.pos+6]??``)){this.pos+=6,this.skipWhitespace();try{return typeof this.parseUnary()}catch{return`undefined`}}return this.peek()===`!`?(this.pos++,!this.parseUnary()):this.peek()===`-`?(this.pos++,-this.parseUnary()):this.peek()===`+`?(this.pos++,+this.parseUnary()):this.parseMember()}parseMember(){let e=this.parsePrimary();for(;;){this.skipWhitespace();let t=this.peek()===`?`&&this.peek(1)===`.`;if(this.peek()===`.`&&this.peek(1)!==`.`||t){t&&this.pos++,this.pos++,this.skipWhitespace();let n=this.parseIdentifierName();if(!n)break;if(this.assertSafeProp(n),this.skipWhitespace(),this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating){e=void 0;continue}e=e!=null&&typeof e[n]==`function`?e[n](...t):void 0}else{if(!this._evaluating){e=void 0;continue}e=e?.[n]}continue}let n=this.peek()===`?`&&this.peek(1)===`[`;if(this.peek()===`[`||n){n&&this.pos++,this.pos++,this.skipWhitespace();let t=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`]`)throw SyntaxError(`Expected "]" after bracket expression at position ${this.pos}`);if(this.pos++,this.assertSafeProp(t),!this._evaluating){e=void 0;continue}e=e?.[t];continue}if(this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating){e=void 0;continue}if(typeof e==`function`)e=e(...t);else throw TypeError(`${String(e)} is not a function`);continue}break}return e}parsePrimary(){this.skipWhitespace();let e=this.peek();if(e===`(`){this.pos++;let e=this.parseTernary();if(this.skipWhitespace(),this.peek()!==`)`)throw SyntaxError(`Expected ")" to close "(" expression at position ${this.pos}`);return this.pos++,e}if(e===`[`)return this.parseArrayLiteral();if(e===`"`||e===`'`)return this.parseString(e);if(/\d/.test(e)||e===`.`&&/\d/.test(this.peek(1)))return this.parseNumber();if(/[a-zA-Z_$]/.test(e))return this.parseIdentifierOrKeyword();throw SyntaxError(`Unexpected character "${e}" at position ${this.pos}`)}parseArrayLiteral(){this.pos++;let e=[];for(this.skipWhitespace();this.peek()!==`]`&&this.pos<this.source.length;)e.push(this.parseTernary()),this.skipWhitespace(),this.peek()===`,`&&(this.pos++,this.skipWhitespace());if(this.peek()!==`]`)throw SyntaxError(`Expected "]" to close array literal at position ${this.pos}`);return this.pos++,e}parseString(e){this.pos++;let t=``;for(;this.pos<this.source.length;){let n=this.source[this.pos];if(n===`\\`){this.pos++;let e=this.source[this.pos++]??``;switch(e){case`n`:t+=`
|
|
2
|
-
`;break;case`t`:t+=` `;break;case`r`:t+=`\r`;break;case`\\`:t+=`\\`;break;case`"`:t+=`"`;break;case`'`:t+=`'`;break;case"`":t+="`";break;default:t+=e}}else if(n===e){this.pos++;break}else t+=n,this.pos++}return t}parseNumber(){let e=this.pos,t=!1;for(;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t=!0,this.pos++;if(this.source[this.pos]===`.`)for(this.pos++;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t=!0,this.pos++;if(/[eE]/.test(this.source[this.pos]??``)){this.pos++,/[+-]/.test(this.source[this.pos]??``)&&this.pos++;let t=0;for(;this.pos<this.source.length&&/\d/.test(this.source[this.pos]);)t++,this.pos++;if(t===0)throw SyntaxError(`Invalid numeric literal exponent at position ${e}`)}if(!t)throw SyntaxError(`Invalid numeric literal at position ${e}`);let n=this.source.slice(e,this.pos),r=Number(n);if(!Number.isFinite(r))throw SyntaxError(`Invalid numeric literal "${n}" at position ${e}`);return r}parseIdentifierName(){let e=this.pos;for(;this.pos<this.source.length&&/[\w$]/.test(this.source[this.pos]);)this.pos++;return this.source.slice(e,this.pos)}parseIdentifierOrKeyword(){let e=this.parseIdentifierName();switch(e){case`true`:return!0;case`false`:return!1;case`null`:return null;case`undefined`:return;case`NaN`:return NaN;case`Infinity`:return 1/0}if(e===`new`)return this.parseNewExpression();if(this.skipWhitespace(),this.peek()===`=`&&this.peek(1)===`>`)return this.parseArrowFunction(e);if(this.peek()===`(`){this.pos++;let t=this.parseArgList();if(this.peek()!==`)`)throw SyntaxError(`Expected ")" after argument list at position ${this.pos}`);if(this.pos++,!this._evaluating)return;let n=this.context[e];if(typeof n==`function`)return n(...t);throw TypeError(`"${e}" is not a function`)}if(this._evaluating){if(!(e in this.context))throw ReferenceError(`${e} is not defined`);return this.context[e]}}parseNewExpression(){this.skipWhitespace();let e=this.parseIdentifierName();this.skipWhitespace();let t=[];if(this.peek()===`(`){if(this.pos++,t=this.parseArgList(),this.peek()!==`)`)throw SyntaxError(`Expected ")" after new ${e}() at position ${this.pos}`);this.pos++}if(this._evaluating)switch(e){case`Date`:return new Date(...t);case`RegExp`:return new RegExp(t[0],t[1]);default:throw TypeError(`new ${e}() is not supported in expressions`)}}parseArrowFunction(t){this.pos+=2,this.skipWhitespace();let n=this.pos,r=this.scanExpressionEnd(),i=this.source.slice(n,r).trim();this.pos=r;let a=this.context;return n=>new e().evaluate(i,{...a,[t]:n})}scanExpressionEnd(){let e=this.pos,t=0,n=!1,r=``;for(;e<this.source.length;){let i=this.source[e];if(n){if(i===`\\`){e+=2;continue}i===r&&(n=!1),e++;continue}if(i===`"`||i===`'`){n=!0,r=i,e++;continue}if(i===`(`||i===`[`)t++;else if(i===`)`||i===`]`){if(t===0)break;t--}else if(i===`,`&&t===0)break;e++}return e}parseArgList(){let e=[];for(this.skipWhitespace();this.peek()!==`)`&&this.pos<this.source.length;)e.push(this.parseTernary()),this.skipWhitespace(),this.peek()===`,`&&(this.pos++,this.skipWhitespace());return e}},Ge=class{cache=new Map;maxSize;constructor(e=1e3){this.maxSize=e}compile(e,t){let n=`${e}::${t.join(`,`)}`;if(this.cache.has(n)){let e=this.cache.get(n);return e.hitCount++,e}this.cache.size>=this.maxSize&&this.evictLFU();let r={fn:this.compileExpression(e,t),varNames:[...t],expression:e,compiledAt:Date.now(),hitCount:1};return this.cache.set(n,r),r}compileExpression(e,t){let n=new We;return(...r)=>{let i={};for(let e=0;e<t.length;e++)i[t[e]]=r[e];return n.evaluate(e,i)}}evictLFU(){let e=null,t=1/0,n=1/0;for(let[r,i]of this.cache.entries())(i.hitCount<n||i.hitCount===n&&i.compiledAt<t)&&(e=r,t=i.compiledAt,n=i.hitCount);e&&this.cache.delete(e)}has(e,t){let n=`${e}::${t.join(`,`)}`;return this.cache.has(n)}clear(){this.cache.clear()}getStats(){let e=0,t=[];for(let n of this.cache.values())e+=n.hitCount,t.push({expression:n.expression,hitCount:n.hitCount});return{size:this.cache.size,maxSize:this.maxSize,totalHits:e,entries:t.sort((e,t)=>t.hitCount-e.hitCount)}}},Ke=class{functions=new Map;constructor(){this.registerDefaults()}register(e,t){this.functions.set(e.toUpperCase(),t)}get(e){return this.functions.get(e.toUpperCase())}has(e){return this.functions.has(e.toUpperCase())}getNames(){return Array.from(this.functions.keys())}toObject(){let e={};for(let[t,n]of this.functions)e[t]=n;return e}registerDefaults(){this.registerAggregationFunctions(),this.registerDateFunctions(),this.registerLogicFunctions(),this.registerStringFunctions(),this.registerStringSearchFunctions(),this.registerStatisticalFunctions()}registerAggregationFunctions(){this.register(`SUM`,(...e)=>M(e).reduce((e,t)=>e+t,0)),this.register(`AVG`,(...e)=>{let t=M(e);return t.length===0?0:t.reduce((e,t)=>e+t,0)/t.length}),this.register(`COUNT`,(...e)=>qe(e).filter(e=>e!=null).length),this.register(`MIN`,(...e)=>{let t=M(e);return t.length===0?0:Math.min(...t)}),this.register(`MAX`,(...e)=>{let t=M(e);return t.length===0?0:Math.max(...t)})}registerDateFunctions(){this.register(`TODAY`,()=>new Date().toISOString().split(`T`)[0]),this.register(`NOW`,()=>new Date().toISOString()),this.register(`DATEADD`,(e,t,n)=>{let r=new Date(e);if(isNaN(r.getTime()))throw Error(`DATEADD: Invalid date "${e}"`);switch(String(n).toLowerCase()){case`day`:case`days`:r.setDate(r.getDate()+t);break;case`month`:case`months`:r.setMonth(r.getMonth()+t);break;case`year`:case`years`:r.setFullYear(r.getFullYear()+t);break;case`hour`:case`hours`:r.setHours(r.getHours()+t);break;case`minute`:case`minutes`:r.setMinutes(r.getMinutes()+t);break;default:throw Error(`DATEADD: Unsupported unit "${n}"`)}return r.toISOString()}),this.register(`DATEDIFF`,(e,t,n)=>{let r=new Date(e),i=new Date(t);if(isNaN(r.getTime()))throw Error(`DATEDIFF: Invalid date "${e}"`);if(isNaN(i.getTime()))throw Error(`DATEDIFF: Invalid date "${t}"`);let a=i.getTime()-r.getTime();switch(String(n).toLowerCase()){case`day`:case`days`:return Math.floor(a/864e5);case`month`:case`months`:return(i.getFullYear()-r.getFullYear())*12+(i.getMonth()-r.getMonth());case`year`:case`years`:return i.getFullYear()-r.getFullYear();case`hour`:case`hours`:return Math.floor(a/36e5);case`minute`:case`minutes`:return Math.floor(a/6e4);default:throw Error(`DATEDIFF: Unsupported unit "${n}"`)}}),this.register(`DATEFORMAT`,(e,t)=>{let n=new Date(e);if(isNaN(n.getTime()))throw Error(`DATEFORMAT: Invalid date "${e}"`);let r=(e,t=2)=>String(e).padStart(t,`0`);return t.replace(`YYYY`,String(n.getFullYear())).replace(`YY`,String(n.getFullYear()).slice(-2)).replace(`MM`,r(n.getMonth()+1)).replace(`DD`,r(n.getDate())).replace(`HH`,r(n.getHours())).replace(`mm`,r(n.getMinutes())).replace(`ss`,r(n.getSeconds()))})}registerLogicFunctions(){this.register(`IF`,(e,t,n)=>e?t:n),this.register(`AND`,(...e)=>e.every(Boolean)),this.register(`OR`,(...e)=>e.some(Boolean)),this.register(`NOT`,e=>!e),this.register(`SWITCH`,(e,...t)=>{for(let n=0;n<t.length-1;n+=2)if(e===t[n])return t[n+1];if(t.length%2==1)return t[t.length-1]})}registerStringFunctions(){this.register(`CONCAT`,(...e)=>e.map(e=>String(e??``)).join(``)),this.register(`LEFT`,(e,t)=>String(e??``).substring(0,t)),this.register(`RIGHT`,(e,t)=>{let n=String(e??``);return n.substring(Math.max(0,n.length-t))}),this.register(`TRIM`,e=>String(e??``).trim()),this.register(`UPPER`,e=>String(e??``).toUpperCase()),this.register(`LOWER`,e=>String(e??``).toLowerCase())}registerStringSearchFunctions(){this.register(`FIND`,(e,t,n)=>String(t??``).indexOf(String(e??``),n??0)),this.register(`REPLACE`,(e,t,n)=>String(e??``).split(String(t??``)).join(String(n??``))),this.register(`SUBSTRING`,(e,t,n)=>{let r=String(e??``);return n===void 0?r.substring(t):r.substring(t,t+n)}),this.register(`REGEX`,(e,t,n)=>{let r=String(e??``);return new RegExp(t,n).test(r)}),this.register(`LEN`,e=>String(e??``).length)}registerStatisticalFunctions(){this.register(`MEDIAN`,(...e)=>{let t=M(e).sort((e,t)=>e-t);if(t.length===0)return 0;let n=Math.floor(t.length/2);return t.length%2==0?(t[n-1]+t[n])/2:t[n]}),this.register(`STDEV`,(...e)=>{let t=M(e);if(t.length<2)return 0;let n=t.reduce((e,t)=>e+t,0)/t.length,r=t.map(e=>(e-n)**2).reduce((e,t)=>e+t,0)/(t.length-1);return Math.sqrt(r)}),this.register(`VARIANCE`,(...e)=>{let t=M(e);if(t.length<2)return 0;let n=t.reduce((e,t)=>e+t,0)/t.length;return t.map(e=>(e-n)**2).reduce((e,t)=>e+t,0)/(t.length-1)}),this.register(`PERCENTILE`,(e,...t)=>{let n=M(t).sort((e,t)=>e-t);if(n.length===0)return 0;let r=Math.max(0,Math.min(100,e))/100*(n.length-1),i=Math.floor(r),a=Math.ceil(r);if(i===a)return n[i];let o=r-i;return n[i]+o*(n[a]-n[i])})}};function M(e){let t=[];for(let n of e)if(Array.isArray(n))t.push(...M(n));else{let e=Number(n);isNaN(e)||t.push(e)}return t}function qe(e){let t=[];for(let n of e)Array.isArray(n)?t.push(...qe(n)):t.push(n);return t}function Je(e){return typeof e==`string`?{dialect:`cel`,source:e}:{dialect:e.dialect??`cel`,source:e.source}}var Ye=new Set;function Xe(e,t,n,r){let i=JSON.stringify([e.dialect,e.source]);Ye.has(i)||(Ye.add(i),console.warn(`[object-ui] A conditional predicate failed to evaluate`+(r?` (${r})`:``)+` and was treated as its safe default (${String(t)}): `+JSON.stringify(e.source)+`. Reason: ${n}. Values are bound under 'record.' (e.g. record.status) — check the field names and CEL syntax.`))}function N(e,t,n,r,i,a){if(e==null||typeof e==`string`&&!e.trim())return n;let s=Je(e),c,l=n;try{let e=o.evaluate(s,{record:t,previous:r,...i?{extra:i}:{}});e.ok?l=e.value===!0:c=`[${e.error.kind}] ${e.error.message}`}catch(e){c=`[throw] ${e instanceof Error?e.message:String(e)}`}return c===void 0?l:(a?.warn!==!1&&Xe(s,n,c,a?.context),a?.onFault?.(c),n)}function Ze(e,t,n,r,i,a){let o=e=>({context:a?`${e} of ${a}`:e});return{visible:e.visibleWhen==null||N(e.visibleWhen,t,!0,r,i,o(`visibleWhen`)),readonly:n.readonly===!0||e.readonlyWhen!=null&&N(e.readonlyWhen,t,!1,r,i,o(`readonlyWhen`)),required:n.required===!0||e.requiredWhen!=null&&N(e.requiredWhen,t,!1,r,i,o(`requiredWhen`))}}var P=class e{context;cache;formulas;constructor(e,t,n){this.context=e instanceof Ve?e:new Ve(e||{}),this.cache=t||new Ge,this.formulas=n||new Ke}evaluate(e,t={}){if(e&&typeof e==`object`&&typeof e.source==`string`&&(e=e.source),typeof e!=`string`)return e;let{defaultValue:n,throwOnError:r=!1,sanitize:i=!0}=t;try{if(!e.includes("${"))return e;let t=e.match(/^\$\{([^}]+)\}$/);return t?this.evaluateExpression(t[1].trim(),{sanitize:i}):e.replace(/\$\{([^}]+)\}/g,(e,t)=>{try{let e=this.evaluateExpression(t.trim(),{sanitize:i});return String(e??``)}catch(n){if(r)throw n;return console.warn(`Expression evaluation failed for: ${t}`,n),e}})}catch(t){if(r)throw t;return console.warn(`Failed to evaluate expression: ${e}`,t),n??e}}evaluateExpression(e,t={}){let{sanitize:n=!0}=t;if(!(!e||e.trim()===``)){if(n&&this.isDangerous(e))throw Error(`Potentially dangerous expression detected: ${e}`);try{let t=this.context.toObject(),n={...this.formulas.toObject(),...t},r=Object.keys(n),i=Object.values(n);return this.cache.compile(e,r).fn(...i)}catch(t){throw Error(`Failed to evaluate expression "${e}": ${t.message}`)}}}isDangerous(e){return[/eval\s*\(/i,/Function\s*\(/i,/setTimeout\s*\(/i,/setInterval\s*\(/i,/import\s*\(/i,/require\s*\(/i,/process\./i,/global\./i,/window\./i,/document\./i,/__proto__/i,/constructor\s*\(/i,/prototype\./i].some(t=>t.test(e))}evaluateCondition(e,t={}){if(typeof e==`boolean`)return e;if(e&&typeof e==`object`&&e.dialect===`cel`&&typeof e.source==`string`)return this.evaluateCelCondition(e.source,t);if(e&&typeof e==`object`&&typeof e.source==`string`&&(e=e.source),!e)return!0;if(typeof e!=`string`)return!!e;let n=e.trim();if(!n)return!0;if(n.includes("${"))return!!this.evaluate(n,t);try{return!!this.evaluateExpression(n,{sanitize:t.sanitize!==!1})}catch(e){if(t.throwOnError)throw e;return!0}}evaluateCelCondition(e,t){if(!e.trim())return!0;let n=this.context.toObject(),r=n.record,i=r&&typeof r==`object`&&!Array.isArray(r)?r:n;if(!t.throwOnError)return N(e,i,!0,void 0,n);let a=N(e,i,!0,void 0,n,{warn:!1});if(a!==N(e,i,!1,void 0,n,{warn:!1}))throw Error(`CEL predicate failed to evaluate: ${e}`);return a}updateContext(e){Object.entries(e).forEach(([e,t])=>{this.context.set(e,t)})}getContext(){return this.context}withContext(t){return new e(this.context.createChild(t),this.cache,this.formulas)}getCacheStats(){return this.cache.getStats()}clearCache(){this.cache.clear()}getFormulas(){return this.formulas}registerFunction(e,t){this.formulas.register(e,t)}};new Ge,new Ke;function Qe(e){return e.includes("${")?e:`\${${e}}`}function $e(e){if(e!=null&&e!==``){if(typeof e==`boolean`)return e;if(typeof e==`string`)return Qe(e);if(typeof e==`object`&&typeof e.source==`string`){let t=e.source;return t?e.dialect===`cel`?{dialect:`cel`,source:t}:Qe(t):void 0}}}function et(e){if(typeof e==`string`)return e.trim()===``;if(typeof e==`object`&&e){let t=e.source;if(typeof t==`string`)return t.trim()===``}return!1}function F(e){return!et(e)&&$e(e)!==void 0}function tt(e){if(!e||typeof e!=`object`)return null;let t=new Set;if(Array.isArray(e))for(let n of e){let e=n?.name,r=n?.type;typeof e==`string`&&k.has(r)&&t.add(e)}else for(let[n,r]of Object.entries(e)){let e=r?.type;k.has(e)&&t.add(n)}return t.size>0?t:null}function nt(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=t.id??t._id;return typeof n==`string`||typeof n==`number`?String(n):void 0}function rt(e,t){if(!e||typeof e!=`object`)return e;let n=tt(t);if(!n)return e;let r=null,i=(t,n)=>{r||={...e},r[t]=n};for(let t of n){if(!(t in e))continue;let n=e[t];if(Array.isArray(n)){if(!n.some(e=>nt(e)!==void 0))continue;i(t,n.map(e=>nt(e)??e));continue}let r=nt(n);r!==void 0&&i(t,r)}return r??e}var it=/\$\{|===|!==|\?\.|\?\?|\.(?:includes|indexOf|toUpperCase|toLowerCase|startsWith|endsWith|trim|split|map|filter|reduce|find|some|every|join|slice|charAt|padStart|padEnd|replace|match|test)\s*\(/;function at(e){return it.test(e)}var ot=new Set;function st(e){ot.has(e)||(ot.add(e),console.warn(`[object-ui] A conditional predicate uses the legacy expression dialect and is not portable to the server CEL engine: `+JSON.stringify(e)+`. Rewrite it as CEL (use "==" not "===", "x in [..]" for membership, ".contains()" not ".includes()", and drop template interpolation).`))}var ct=new Set;function lt(e,t,n){let r=JSON.stringify([t??``,e]);ct.has(r)||(ct.add(r),console.warn(`[object-ui] A conditional predicate failed to evaluate`+(t?` (${t})`:``)+` and was treated as its safe default: `+JSON.stringify(e)+(n?`. Reason: ${n}`:``)+`. Check the field names and CEL syntax.`))}function ut(e,t,n){let r,i={warn:!1,onFault:e=>{r??=e}},a=N(e,t,!0,void 0,n,i);return a===N(e,t,!1,void 0,n,i)?{ok:!0,value:a}:{ok:!1,value:!1,reason:r}}function dt(e,t,n={}){let r=n.fallback??!1;if(e==null)return r;let i=typeof e==`string`?e:void 0;if(i!==void 0&&!i.trim())return r;let a=rt(t&&typeof t==`object`?t:{},n.fields),o={...n.scope??{},...a,data:a,record:a};if(i!==void 0&&at(i)){st(i);try{return new P(o).evaluateCondition(i,{throwOnError:!0})}catch(e){return n.warnOnError&<(i,n.label,`[legacy] ${e instanceof Error?e.message:String(e)}`),r}}if(!n.warnOnError)return N(e,a,r,void 0,o,{context:n.label});let s=ut(e,a,o);return s.ok?s.value:(lt(i??`(expression)`,n.label,s.reason),r)}function I(e){if(e==null)return`null`;let t=typeof e;return t===`string`?JSON.stringify(e):t===`number`||t===`boolean`?String(e):Array.isArray(e)?`[${e.map(I).join(`, `)}]`:JSON.stringify(String(e))}function ft(e){let{field:t,operator:n,value:r}=e;if(!t||!n)return null;let i=`record[${JSON.stringify(t)}]`;switch(n){case`equals`:return`${i} == ${I(r)}`;case`not_equals`:return`${i} != ${I(r)}`;case`greater_than`:return`${i} > ${I(r)}`;case`less_than`:return`${i} < ${I(r)}`;case`contains`:return`${i}.contains(${I(r)})`;case`in`:return`${i} in ${I(Array.isArray(r)?r:[r])}`;default:return null}}function pt(e){return e.condition==null?typeof e.expression==`string`&&e.expression.trim()?e.expression:ft(e):e.condition}function mt(e){let t={};if(e.style&&typeof e.style==`object`)for(let[n,r]of Object.entries(e.style))r!=null&&(t[n]=String(r));return e.backgroundColor&&(t.backgroundColor=String(e.backgroundColor)),e.textColor&&(t.color=String(e.textColor)),e.borderColor&&(t.borderColor=String(e.borderColor)),t}function ht(e,t,n,r){if(!t||t.length===0)return{};let i=e&&typeof e==`object`?e:{};for(let e=0;e<t.length;e++){let a=t[e];if(!a||typeof a!=`object`)continue;let o=pt(a);if(o!=null&&dt(o,i,{fallback:!1,scope:n,fields:r,label:`conditionalFormatting[${e}]`}))return mt(a)}return{}}function gt(e){return e?(Array.isArray(e)?e:[e]).map(e=>typeof e==`string`?e:e&&typeof e==`object`?e.field:null).filter(e=>typeof e==`string`&&e.length>0):[]}function _t(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function vt(e,t){return gt(e).some(e=>_t(t[e]))}function yt(e,t,n){return!e||e.length===0?[]:e.filter(e=>e?.visibleWhen==null||N(e.visibleWhen,t,!0,void 0,n,{context:`visibleWhen of option '${String(e.value)}'`}))}function bt(e,t){return _t(e)?!0:Array.isArray(e)?e.every(e=>t.some(t=>t.value===e)):t.some(t=>t.value===e)}function xt(e,t,n,r){let i=gt(n),a=i.length>0&&vt(n,t);return{options:a?[]:yt(e,t,r),gated:a,dependsOnFields:i}}function St(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&typeof t.type==`string`&&typeof t.objectName==`string`&&typeof t.recordId==`string`&&typeof t.timestamp==`number`}var L=new class e{undoStack=[];redoStack=[];maxHistory;listeners=new Set;constructor(e){this.maxHistory=e?.maxHistory??50}push(e){this.undoStack.push(e),this.undoStack.length>this.maxHistory&&this.undoStack.shift(),this.redoStack=[],this.notify()}peekUndo(){return this.undoStack[this.undoStack.length-1]}peekRedo(){return this.redoStack[this.redoStack.length-1]}popUndo(){let e=this.undoStack.pop();return e&&(this.redoStack.push(e),this.notify()),e}popRedo(){let e=this.redoStack.pop();return e&&(this.undoStack.push(e),this.notify()),e}clear(){this.undoStack=[],this.redoStack=[],this.notify()}get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}get undoCount(){return this.undoStack.length}get redoCount(){return this.redoStack.length}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}getHistory(){return[...this.undoStack]}getRedoHistory(){return[...this.redoStack]}pushBatch(e){e.length!==0&&(this.undoStack.push(...e),this.undoStack.length>this.maxHistory&&this.undoStack.splice(0,this.undoStack.length-this.maxHistory),this.redoStack=[],this.notify())}popUndoBatch(e){let t=Math.min(e,this.undoStack.length);if(t===0)return[];let n=this.undoStack.splice(this.undoStack.length-t,t);return this.redoStack.push(...n),this.notify(),n}popRedoBatch(e){let t=Math.min(e,this.redoStack.length);if(t===0)return[];let n=this.redoStack.splice(this.redoStack.length-t,t);return this.undoStack.push(...n),this.notify(),n}static STORAGE_KEY=`objectui:undo-history`;saveToStorage(){try{let t=JSON.stringify({undoStack:this.undoStack,redoStack:this.redoStack});localStorage.setItem(e.STORAGE_KEY,t)}catch{}}loadFromStorage(){try{if(typeof localStorage>`u`)return;let t=localStorage.getItem(e.STORAGE_KEY);if(!t)return;let n=JSON.parse(t);Array.isArray(n.undoStack)&&(this.undoStack=n.undoStack.filter(St)),Array.isArray(n.redoStack)&&(this.redoStack=n.redoStack.filter(St)),this.undoStack.length>this.maxHistory&&this.undoStack.splice(0,this.undoStack.length-this.maxHistory),this.notify()}catch{}}notify(){this.listeners.forEach(e=>e())}},Ct=`type.actionType.name.label.description.confirmText.confirm.condition.disabled.api.endpoint.method.navigate.to.external.newTab.replace.onClick.reload.close.redirect.toast.successMessage.errorMessage.refreshAfter.undoable.params.actionParams.resultDialog.target.body.openIn.modal.chain.chainMode.onSuccess.onFailure.opensInNewTab.newTabUrl.locations.visible.requiredPermissions.icon.variant.order.component.objectName.ai.aria.bodyExtra.bodyShape.mode.recordIdField.recordIdParam.requiresFeature.shortcut.bulkEnabled`.split(`.`),wt=`_lock._lockDocsUrl._lockReason._lockSource._packageId._packageVersion._provenance.ai.aria.body.bodyExtra.bodyShape.bulkEnabled.component.confirmText.description.disabled.errorMessage.execute.icon.label.locations.method.mode.name.newTabUrl.objectName.openIn.opensInNewTab.order.params.recordIdField.recordIdParam.refreshAfter.requiredPermissions.requiresFeature.resultDialog.shortcut.successMessage.target.type.undoable.variant.visible`.split(`.`),Tt=[`to`,`external`,`newTab`,`replace`],Et={execute:"`execute` was removed in @objectstack/spec 17 (#3855) — rename the key to `target`. The value (a script name or expression) is unchanged. Run `os migrate meta --from 16` to rewrite it automatically."},Dt=new Set([...Ct,...wt,...Tt].filter(e=>!(e in Et)));function Ot(e){let t=[],n=[];if(!e||typeof e!=`object`)return{unknown:t,retired:n};for(let r of Object.keys(e))r in Et?n.push(r):Dt.has(r)||t.push(r);return{unknown:t,retired:n}}var R=new Set,kt=()=>!1;function At(e,t=`ActionRunner`){if(!kt())return;let{unknown:n,retired:r}=Ot(e),i=e?.name??e?.type??`(unnamed)`;for(let e of r){let n=`retired:${String(i)}:${e}`;R.has(n)||(R.add(n),console.warn(`[${t}] action "${String(i)}" carries the retired key \`${e}\`. ${Et[e]}`))}if(n.length===0)return;let a=`unknown:${String(i)}:${n.slice().sort().join(`,`)}`;R.has(a)||(R.add(a),console.warn(`[${t}] action "${String(i)}" carries ${n.length===1?`a key`:`keys`} no reader recognizes: \`${n.join("`, `")}\`. Nothing will read ${n.length===1?`it`:`them`} — check for a typo, or promote the key to an explicit field on \`ActionDef\` (packages/core/src/actions/actionKeys.ts). Warned rather than rejected because \`ActionDef\` still carries \`[key: string]: any\`, so the compiler cannot see this (objectstack#4075).`))}var jt=new Set([`recordId`]),Mt=e=>!e.startsWith(`_`)&&!jt.has(e);function Nt(e){if(!e||typeof e!=`object`)return!1;let{type:t,actionType:n,params:r}=e;return(t??n)!==`api`||!r||typeof r!=`object`||Array.isArray(r)?!1:Object.keys(r).some(Mt)}function Pt(e,t=`ActionRunner`){if(!kt()||!Nt(e))return;let n=e?.name??`(unnamed)`,r=`deprecated-object-params:${String(n)}`;R.has(r)||(R.add(r),console.warn(`[${t}] action "${String(n)}" carries a static request payload in \`params\`. \`params\` is the parameter DEFINITION array (fields collected from the user before the action runs), never a payload map — put the payload in \`bodyExtra\` instead (objectstack#5777). Still read as the payload for one version window; the arm is removed at 18. \`bodyExtra\` is merged LAST, so it overrides anything left here.`))}function Ft(e){let t=e.user;if(t===void 0)return e;let n=e.os;return n&&typeof n==`object`&&n.user===t?e:{...e,os:{...n&&typeof n==`object`?n:{},user:t}}}var It=`recordId`,Lt=`recordObject`;function Rt(e){let t=e.objectName;return typeof t==`string`&&t.trim()!==``?t.trim():void 0}function zt(e,t){return!t||!e.includes(`.`)?!1:!e.startsWith(`${t}.`)}var z=class{handlers=new Map;scripts=new Map;evaluator;context;confirmHandler;toastHandler;modalHandler;navigationHandler;paramCollectionHandler;resultDialogHandler;builtinExecutors={script:e=>this.executeScript(e),url:e=>this.executeUrl(e),modal:e=>this.executeModal(e),flow:e=>this.executeFlow(e),api:e=>this.executeAPI(e),form:e=>this.executeForm(e),navigation:e=>this.executeNavigation(e)};constructor(e={}){this.context=Ft(e),this.evaluator=new P(this.context),this.confirmHandler=async e=>window.confirm(e),this.toastHandler=null,this.modalHandler=null,this.navigationHandler=null,this.paramCollectionHandler=null,this.resultDialogHandler=null}setConfirmHandler(e){this.confirmHandler=e}setToastHandler(e){this.toastHandler=e}setModalHandler(e){this.modalHandler=e}setNavigationHandler(e){this.navigationHandler=e}setParamCollectionHandler(e){this.paramCollectionHandler=e}setResultDialogHandler(e){this.resultDialogHandler=e}registerHandler(e,t){this.handlers.set(e,t)}unregisterHandler(e){this.handlers.delete(e)}registerScript(e,t){this.scripts.set(e,t)}unregisterScript(e){this.scripts.delete(e)}async execute(e){try{At(e),Pt(e);let t=e.type||e.actionType||e.name||``;if(F(e.condition)&&!this.evaluator.evaluateCondition(e.condition))return{success:!1,error:`Action condition not met`};if(F(e.disabled)){let t=!1;try{t=this.evaluator.evaluateCondition(e.disabled)}catch{t=!1}if(t)return{success:!1,error:`Action is disabled`}}let n=e.confirm?.message||e.confirmText;if(n&&!await this.confirmHandler(this.evaluator.evaluate(n),e.confirm?{title:e.confirm.title,confirmText:e.confirm.confirmText,cancelText:e.confirm.cancelText}:void 0))return{success:!1,error:`Action cancelled by user`};let r=e.actionParams&&Array.isArray(e.actionParams)?e.actionParams:Array.isArray(e.params)?e.params:void 0;if(r&&r.length>0&&this.paramCollectionHandler){let t=await this.paramCollectionHandler(r,e);if(t===null)return{success:!1,error:`Action cancelled by user (params)`};let n=Array.isArray(e.params)?{}:e.params||{},i=n._rowRecord;e.params={...n,...t},i!==void 0&&(e.params._rowRecord=i)}if(t&&this.handlers.has(t)){let n=await this.handlers.get(t)(e,this.context);return await this.handlePostExecution(e,n),n}let i,a=t?this.builtinExecutors[t]:void 0;return a?i=await a(e):e.navigate?i=await this.executeNavigation(e):e.api||e.endpoint?i=await this.executeAPI(e):e.onClick?(await e.onClick(),i={success:!0}):i=await this.executeActionSchema(e),await this.handlePostExecution(e,i),i}catch(t){let n={success:!1,error:t.message};return await this.handlePostExecution(e,n),n}}async executeChain(e,t=`sequential`){if(e.length===0)return{success:!0};if(t===`parallel`){let t=await Promise.allSettled(e.map(e=>this.execute(e)));if(t.filter(e=>e.status===`rejected`||e.status===`fulfilled`&&!e.value.success).length>0)return{success:!1,error:t.find(e=>e.status===`fulfilled`&&!e.value.success)?.value?.error||`One or more parallel actions failed`};let n=t[t.length-1];return n.status===`fulfilled`?n.value:{success:!1,error:`Action failed`}}let n={success:!0};for(let t of e)if(n=await this.execute(t),!n.success)return n;return n}async handlePostExecution(e,t){let n=!!(e.resultDialog&&t.success);if(this.toastHandler){let r=e.toast??{showOnSuccess:!0,showOnError:!0},i=e.toast?.duration;if(t.success&&!n&&!t.silent&&r.showOnSuccess!==!1){let n=(t.data&&typeof t.data==`object`&&typeof t.data.message==`string`?String(t.data.message).trim():``)||e.successMessage||`Action completed successfully`;if(t.undo)try{L.push(t.undo)}catch{}this.toastHandler(n,{type:`success`,duration:i,undo:t.undo?{}:void 0})}if(!t.success&&r.showOnError!==!1&&t.error){let n=e.errorMessage||t.error,r=typeof n==`string`?n:n&&typeof n.message==`string`?n.message:`Action failed`;this.toastHandler(r,{type:`error`,duration:i})}}if(n){if(this.resultDialogHandler)try{await this.resultDialogHandler(e.resultDialog,t.data,e)}catch(e){console.warn(`[ActionRunner] resultDialog handler rejected; treating as acknowledged`,e)}else console.warn(`[ActionRunner] action.resultDialog set but no resultDialogHandler registered — the response value will not be shown to the user.`,{action:e.name,data:t.data})}if(e.refreshAfter&&t.success&&(t.reload=!0),e.chain&&e.chain.length>0&&t.success){let n=await this.executeChain(e.chain,e.chainMode||`sequential`);n.success||(t.success=!1,t.error=n.error),n.data&&(t.data=n.data),n.redirect&&(t.redirect=n.redirect),n.reload&&(t.reload=!0)}if(t.success&&e.onSuccess){let t=Array.isArray(e.onSuccess)?e.onSuccess:[e.onSuccess];await this.executeChain(t,`sequential`)}if(!t.success&&e.onFailure){let t=Array.isArray(e.onFailure)?e.onFailure:[e.onFailure];await this.executeChain(t,`sequential`)}}async executeScript(e){let t=e.target;if(!t)return e.body==null?typeof e.execute==`string`?{success:!1,error:"`execute` was removed in @objectstack/spec 17 — rename the key to `target`. The value (a script name or expression) is unchanged. Run `os migrate meta --from 16` to rewrite it automatically."}:{success:!1,error:`No script provided for script action`}:{success:!1,error:"Action body must be executed server-side — this client runner does not interpret `body` (sandboxed JS needs an isolated VM; expression bodies use the formula engine). Register a `script` handler that POSTs to /api/v1/actions/{object}/{action} — build one with createServerActionHandler from @object-ui/core."};let n=this.scripts.get(t);if(n)try{return await n(e,this.context)}catch(e){return{success:!1,error:`Script execution failed: ${e.message}`}}try{let e=this.evaluator.evaluate(`\${${t}}`);return e!=null&&typeof e.then==`function`&&(e=await e),{success:!0,data:e}}catch(e){return{success:!1,error:`Script execution failed: ${e.message}`}}}async executeUrl(e){let t=e.target||e.redirect;return t?this.navigateTo(e,t,e):{success:!1,error:`No URL provided for url action`}}async navigateTo(e,t,n){let r=this.interpolateTarget(t,e),i=this.evaluator.evaluate(r);if(!this.isValidUrl(i))return{success:!1,error:`Invalid URL scheme. Only http://, https://, and relative URLs are allowed.`};let a=typeof this.context.apiBase==`string`?this.context.apiBase.replace(/\/+$/,``):``;a&&/^\/(api|_auth|_account)\//.test(i)&&(i=`${a}${i}`);let o=!!n.external||i.startsWith(`http://`)||i.startsWith(`https://`);if(/\/(api|_auth|_account)\//.test(i)&&(o||i.startsWith(`/`)))return window.location.href=i,{success:!0};let s=n.openIn??e.openIn,c=s===`new-tab`?!0:s===`self`?!1:n.newTab??o,l=n.replace??e.replace;if(this.navigationHandler)return this.navigationHandler(i,{external:o,newTab:c,...l===void 0?{}:{replace:!!l}}),{success:!0};if(c)window.open(i,`_blank`,`noopener,noreferrer`);else return{success:!0,redirect:i};return{success:!0}}async executeModal(e){let t=e.modal||e.target||e.params?.schema;return t?this.modalHandler?await this.modalHandler(t,this.context):{success:!0,modal:t}:{success:!1,error:`No modal schema or target provided for modal action`}}async executeFlow(e){let t=e.target||e.name;return t?this.handlers.has(`flow`)?await this.handlers.get(`flow`)(e,this.context):{success:!1,error:`Flow handler not registered. Cannot execute flow: ${t}`}:{success:!1,error:`No flow target provided for flow action`}}async executeActionSchema(e){let t=!!(e.api||e.endpoint);if(!(t||e.onClick||e.redirect||e.reload===!0||e.close===!0))return{success:!1,error:`Action "${e.name||e.type||e.actionType||`action`}" is not executable: no handler is registered under that name and it declares no api, endpoint, navigate, redirect or onClick.`};let n={success:!0};if(t){let t=await this.executeAPI(e);if(!t.success)return t;n.data=t.data}return e.onClick&&await e.onClick(),n.reload=e.reload!==!1,n.close=e.close!==!1,e.redirect&&(n.redirect=this.evaluator.evaluate(e.redirect)),n}async executeForm(e){let t=this.evaluator.evaluate(e.target);if(!t||typeof t!=`string`)return{success:!1,error:`No form target (FormView name) provided for form action`};let n=(this.context.record&&this.context.record.id)??(this.context.data&&this.context.data.id),r=`/forms/${t}`,i=Rt(this.context),a=n==null||zt(t,i)?r:`${r}?${It}=${encodeURIComponent(String(n))}`+(i?`&${Lt}=${encodeURIComponent(i)}`:``);return this.navigationHandler?(this.navigationHandler(a,{external:!1}),{success:!0}):{success:!0,redirect:a}}async executeNavigation(e){let t=e.navigate||e,n=t.to||t.target||t.redirect;return n?this.navigateTo(e,n,t):{success:!1,error:`No URL provided for navigation action`}}buildApiRequestBody(e){let t=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,n=t(e.bodyExtra),r=t(e.params)??this.context.data,i=e.bodyShape,a=i&&typeof i==`object`&&typeof i.wrap==`string`&&i.wrap?i.wrap:void 0;return a?{[a]:r??{},...n}:n?{...t(r),...n}:r??{}}async executeAPI(e){let t=e.api||e.endpoint||e.target;if(!t)return{success:!1,error:`No API endpoint provided`};try{let n,r,i={"Content-Type":`application/json`},a,o=`json`;if(typeof t==`string`)n=this.interpolateTarget(t,e),r=e.method||`POST`,a=JSON.stringify(this.buildApiRequestBody(e));else{let s=t;if(n=this.interpolateTarget(s.url,e),r=s.method||e.method||`POST`,i={...i,...s.headers},o=s.responseType||`json`,s.queryParams){let e=new URLSearchParams(s.queryParams);n=`${n}${n.includes(`?`)?`&`:`?`}${e.toString()}`}s.body?a=typeof s.body==`string`?s.body:JSON.stringify(s.body):r!==`GET`&&r!==`HEAD`&&(a=JSON.stringify(this.buildApiRequestBody(e)))}let s={method:r,headers:i};a&&r!==`GET`&&r!==`HEAD`&&(s.body=a);let c=await fetch(n,s);if(!c.ok)throw Error(`HTTP ${c.status}: ${c.statusText}`);let l;switch(o){case`text`:l=await c.text();break;case`blob`:l=await c.blob();break;default:l=await c.json()}return{success:!0,data:l}}catch(e){return{success:!1,error:e.message}}}isValidUrl(e){return typeof e==`string`&&(e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`/`)||e.startsWith(`./`))}interpolateTarget(e,t){if(typeof e!=`string`||e.indexOf("${")===-1)return e;let n=t.params&&typeof t.params==`object`&&!Array.isArray(t.params)?t.params:{},r=this.buildInterpolationContext();return e.replace(/\$\{(param|ctx)\.([\w.]+)\}/g,(e,t,i)=>{let a=Bt(t===`param`?n:r,i);return a==null?``:encodeURIComponent(String(a))})}buildInterpolationContext(){let e={origin:typeof window<`u`?window.location.origin:``,apiBase:typeof this.context.apiBase==`string`?this.context.apiBase.replace(/\/+$/,``):``,user:this.context.user??{},org:this.context.org??this.context.organization??{},recordId:this.context.record?.id??this.context.recordId,selection:{ids:Array.isArray(this.context.selectedRecords)?this.context.selectedRecords.map(e=>e?.id).filter(e=>e!=null).map(String):[],count:Array.isArray(this.context.selectedRecords)?this.context.selectedRecords.length:0}};return this.context.ctx&&typeof this.context.ctx==`object`&&Object.assign(e,this.context.ctx),e}updateContext(e){this.context=Ft({...this.context,...e}),this.evaluator.updateContext(this.context)}getContext(){return this.context}getEvaluator(){return this.evaluator}};function Bt(e,t){if(e!=null)return t.split(`.`).reduce((e,t)=>{if(e!=null)return e[t]},e)}function Vt(e,t=0){let n=`migrated_${t}`;return e.type===`separator`?{id:n,type:`separator`,label:e.label||``}:e.type===`group`?{id:n,type:`group`,label:e.label||``,icon:e.icon,children:(e.children||[]).map((e,n)=>Vt(e,t*100+n)),visible:e.hidden===void 0?void 0:!e.hidden,badge:e.badge,defaultOpen:!0}:e.href?{id:n,type:`url`,label:e.label||``,icon:e.icon,url:e.href,target:`_blank`,visible:e.hidden===void 0?void 0:!e.hidden,badge:e.badge}:{id:n,type:`page`,label:e.label||``,icon:e.icon,pageName:e.path||``,visible:e.hidden===void 0?void 0:!e.hidden,badge:e.badge}}function Ht(e){return/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/.test(e)}function Ut(e){return{type:`app`,name:e.name,title:e.title,label:e.title,description:e.description,icon:e.icon,logo:e.branding.logo,favicon:e.branding.favicon,branding:e.branding,layout:e.layout,navigation:e.navigation}}function Wt(e){if(!e)return null;let t=e.stageField;if(t===!1)return null;if(typeof t==`string`&&t)return t;let n=e.fields||{};for(let e of[`status`,`stage`,`state`,`phase`])if(e in n)return e;for(let[e,t]of Object.entries(n)){let n=(t?.type||``).toLowerCase();if(n===`status`||n===`stage`)return e}return null}function Gt(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=Object.keys(e);if(t.length!==1||t[0]!==`preset`)return!1;let n=e.preset;return typeof n==`string`&&n.length>0}function Kt(e){if(!e||typeof e!=`object`)return e;let t=e.defaultValue;return Gt(t)?{...e,defaultValue:t.preset}:e}function qt(e){if(!e||typeof e!=`object`)return e;let t=e.globalFilters;if(!Array.isArray(t))return e;let n=!1,r=t.map(e=>{let t=Kt(e);return t!==e&&(n=!0),t});return n?{...e,globalFilters:r}:e}var Jt=new Set(`id._id.__v._version._rev.created.created_at.createdAt.created_by.createdBy.modified.modified_by.updated_at.updatedAt.updated_by.updatedBy.deleted.deleted_at.deletedAt.is_deleted.instance_state.locked.owner_id.organization_id.tenant_id.company_id.space`.split(`.`)),Yt={createdAt:`created_at`,createdBy:`created_by`,updatedAt:`updated_at`,updatedBy:`updated_by`},Xt=new Set(Object.values(Yt));function Zt(e,t){return t?.system===!0||Jt.has(e)}var Qt=`text.textarea.number.boolean.date.datetime.time.select.email.phone.url.password.currency.percent.lookup.formula.autonumber.file.image.markdown.html.color.code.location.address.rating.slider`.split(`.`);function $t(e,t){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e.default;if(typeof t==`string`)return t}return t}function en(e){let t=e.type??`tabular`,n=t===`joined`||t===`tabular`?`tabular`:t,r=(e.values??[]).map(e=>({name:e,label:$t(void 0,e)})),i=(e.rows??[]).map(e=>({field:e,sort:`asc`}));return{type:`report`,title:$t(e.label,e.name),description:e.description?$t(e.description,``):void 0,reportType:n,fields:r,groupBy:i.length>0?i:void 0}}function tn(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.name!=`string`||t.type===`report`&&Array.isArray(t.fields)?!1:typeof t.dataset==`string`||Array.isArray(t.blocks)||typeof t.type==`string`&&[`tabular`,`summary`,`matrix`,`joined`].includes(t.type)}function nn(e,t){if(!t)return!0;let n=e?.locations;return Array.isArray(n)&&n.includes(t)}u.options;function rn(e,t){let n=e?.code;return typeof n!=`string`||n.length===0?!1:n.toUpperCase()===t.toUpperCase()}function an(e,t){return t.some(t=>rn(e,t))}var on=3e4,sn=new Set([408,425,429,502,503,504]),cn=class extends Error{status;retryAfterMs;constructor(e,t,n){super(n??`Endpoint returned ${e}`),this.status=e,this.retryAfterMs=t,this.name=`HttpFetchError`}};function ln(e){return e instanceof cn?sn.has(e.status):!0}function un(e,t){if(!e)return;let n=e.trim();if(!n)return;let r;if(/^\d+$/.test(n))r=Number(n)*1e3;else{let e=Date.parse(n);if(Number.isNaN(e))return;r=e-t}if(!(!Number.isFinite(r)||r<0))return Math.min(r,on)}function dn(e,t,n){return n===void 0?Math.min(t*2**e,on):n}var fn=e=>new Promise(t=>setTimeout(t,e));function pn(e){return un(e.headers?.get?.(`Retry-After`),Date.now())}function mn(e){return e.toLowerCase().split(`+`).map(e=>e.trim()).sort().join(`+`)}var hn=new Set;function gn(e,t,n){let r=typeof t==`string`?t:t&&typeof t==`object`&&typeof t.source==`string`?t.source:String(t),i=`${String(e)}::${r}`;if(hn.has(i))return;hn.add(i);let a=n instanceof Error?n.message:String(n);console.warn(`[ActionEngine] action "${String(e)}" hidden: its \`visible\` predicate threw — ${a}. Predicate: ${r}. Action predicates evaluate against { record, recordId, objectName, user, os.user, … }; use \`record.<field>\` (not a bare field).`)}var _n=class{actions=new Map;shortcuts=[];normalizedShortcutMap=new Map;runner;constructor(e={}){this.runner=e instanceof z?e:new z(e)}getRunner(){return this.runner}registerAction(e,t){let n=e.name||e.type||``;if(!n)throw Error(`Action must have a name or type`);this.actions.set(n,{action:e,locations:t?.locations||[],shortcut:t?.shortcut,bulkEnabled:t?.bulkEnabled??!1,priority:t?.priority??100}),t?.shortcut&&(this.shortcuts.push({keys:t.shortcut,actionName:n}),this.normalizedShortcutMap.set(mn(t.shortcut),n))}registerActions(e){for(let t of e)this.registerAction(t,{locations:t.locations})}unregisterAction(e){let t=this.actions.get(e);t?.shortcut&&this.normalizedShortcutMap.delete(mn(t.shortcut)),this.actions.delete(e),this.shortcuts=this.shortcuts.filter(t=>t.actionName!==e)}getActionsForLocation(e){let t=this.runner.getEvaluator();return Array.from(this.actions.values()).filter(t=>t.locations.includes(e)).filter(e=>{let t=e.action.requiredPermissions;if(!Array.isArray(t)||t.length===0)return!0;let n=this.runner.getContext()?.user?.systemPermissions;return!Array.isArray(n)||t.every(e=>n.includes(e))}).filter(e=>{let n=e.action.visible;if(!F(n))return!0;let r=$e(n);try{return t.evaluateCondition(r,{throwOnError:!0})}catch(t){return gn(e.action.name,n,t),!1}}).sort((e,t)=>(e.priority??100)-(t.priority??100)).map(e=>e.action)}getBulkActions(){return Array.from(this.actions.values()).filter(e=>e.bulkEnabled).sort((e,t)=>(e.priority??100)-(t.priority??100)).map(e=>e.action)}getShortcuts(){return[...this.shortcuts]}getAction(e){return this.actions.get(e)?.action}async executeAction(e,t){let n=this.actions.get(e);return n?(t&&this.runner.updateContext(t),this.runner.execute(n.action)):{success:!1,error:`Action not found: ${e}`}}async handleShortcut(e,t){let n=this.normalizedShortcutMap.get(mn(e));return n?this.executeAction(n,t):null}async executeBulk(e,t,n){let r=this.actions.get(e);if(!r)return{total:0,succeeded:0,failed:0,results:[{success:!1,error:`Action not found: ${e}`}]};if(!r.bulkEnabled)return{total:0,succeeded:0,failed:0,results:[{success:!1,error:`Action ${e} does not support bulk operations`}]};let i=[],a=0,o=0;if(n?.parallel){let e=t.map(e=>(this.runner.updateContext({record:e,selectedRecords:t}),this.runner.execute(r.action))),n=await Promise.allSettled(e);for(let e of n)e.status===`fulfilled`?(i.push(e.value),e.value.success?a++:o++):(i.push({success:!1,error:e.reason?.message||`Unknown error`}),o++)}else for(let e of t){this.runner.updateContext({record:e,selectedRecords:t});let s=await this.runner.execute(r.action);if(i.push(s),s.success)a++;else if(o++,!n?.continueOnError)break}return{total:t.length,succeeded:a,failed:o,results:i}}updateContext(e){this.runner.updateContext(e)}clear(){this.actions.clear(),this.shortcuts=[],this.normalizedShortcutMap.clear()}};async function vn(e,t){let{ids:n,allowBulk:r,offset:i,label:a=`bulk`}=e,o={succeeded:0,failed:0,errors:[]};if(r&&typeof t.bulkCall==`function`)try{let e=await t.bulkCall(n),r=Math.max(0,Math.min(e,n.length));o.succeeded+=r;let s=n.length-r;return s>0&&(o.failed+=s,o.errors.push({id:`batch_${i}`,error:`${s} record${s===1?``:`s`} failed in ${a}`})),o}catch{}return(await Promise.allSettled(n.map(e=>t.perRow(e)))).forEach((e,t)=>{e.status===`fulfilled`?o.succeeded+=1:(o.failed+=1,o.errors.push({id:n[t],error:e.reason instanceof Error?e.reason.message:String(e.reason)}))}),o}function yn(e,t){let n=e,r=n?.error;if(typeof r==`string`&&r.length>0)return r;let i=r?.message;return typeof i==`string`&&i.length>0?i:typeof n?.message==`string`&&n.message.length>0?n.message:t}function bn(e){return Sn(e)?e.data:e}var xn=new Set([`success`,`data`,`error`,`code`,`fields`]);function Sn(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.success==`boolean`&&Object.keys(e).every(e=>xn.has(e))}function Cn(e,t,n){let r=t?.data,i=Sn(r)&&r.success===!1;return!e.ok||t&&t.success===!1||i?{ok:!1,error:i?yn(r,`${n} failed`):yn(t,`${n} failed (HTTP ${e.status})`)}:{ok:!0,envelope:r,payload:bn(r)}}function wn(e){let t=e.locations;return Array.isArray(t)?t.some(e=>e===`list_item`||e===`record_header`||e===`record_more`||e===`record_section`):!1}function Tn(e,t){let n=e.params&&!Array.isArray(e.params)?e.params:{},r=n._rowRecord,i=e.recordIdField||`id`,a=n.recordId??r?.[i],o=Array.isArray(n._selectedIds);if(a==null&&!o){let n=Array.isArray(t?.selectedRecords)?t.selectedRecords:[];if(n.length===1)a=n[0]?.[i];else if(n.length>1)return{error:`This action runs on a single record — select exactly one row.`};else if(wn(e))return{error:`This action runs on a single record — select a row first.`}}return{recordId:a??void 0}}function En(e){let{fetch:t,resolveObject:n,onRefresh:r}=e,i=e.resolveRecordId??Tn,a=new Set;return async function(o,s){let c=o.name;if(!c)return{success:!1,error:`Action has no name — a server action must declare one`};let l=o.params&&!Array.isArray(o.params)?{...o.params}:{};delete l._rowRecord;let u=i(o,s);if(u.error)return{success:!1,error:u.error};let d=u.recordId,f=`${c}:${d??``}`;if(a.has(f))return{success:!1,error:`Action already in progress`};a.add(f);try{let i=typeof e.baseUrl==`function`?e.baseUrl():e.baseUrl??``,a=o.objectName||n?.(o,s)||`global`,u=await t(`${i}/api/v1/actions/${encodeURIComponent(a)}/${encodeURIComponent(c)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({recordId:d,params:l})}),f=Cn(u,await u.json().catch(()=>null),`Action "${c}"`);if(!f.ok)return{success:!1,error:f.error};let p=o.refreshAfter!==!1;return p&&r?.(),{success:!0,data:f.envelope,reload:p}}catch(e){return{success:!1,error:e.message}}finally{a.delete(f)}}}function Dn(e){if(e!=null)return e.id??e._id??e.recordId}function On(e,t){let n={};for(let[r,i]of Object.entries(e))if(i&&typeof i==`object`&&!Array.isArray(i)&&typeof i.$ref==`number`){let e=i.$ref,a=Dn(t[e]);if(a===void 0)throw Error(`batchTransaction: field "${r}" references operation ${e}, which has not produced an id (forward or invalid $ref)`);n[r]=a}else n[r]=i;return n}async function kn(e,t){let n=[],r=[];try{for(let i of t){let t=i.action??`create`;if(t===`create`){let t=await e.create(i.object,On(i.data??{},n));n.push(t);let a=Dn(t);a&&r.push({object:i.object,id:a})}else if(t===`update`){if(i.id==null)throw Error(`batchTransaction: update on "${i.object}" requires an id`);n.push(await e.update(i.object,i.id,On(i.data??{},n)))}else{if(i.id==null)throw Error(`batchTransaction: delete on "${i.object}" requires an id`);n.push(await e.delete(i.object,i.id))}}return{results:n}}catch(t){throw r.length>0&&await Promise.allSettled([...r].reverse().map(t=>e.delete(t.object,t.id))),t}}function An(e,t){return typeof e.batchTransaction==`function`?e.batchTransaction(t):kn(e,t)}function jn(e,t,n){let r=e;if(t&&(r=r.replace(/\/+$/,``)+`/`+t.replace(/^\/+/,``)),n&&Object.keys(n).length>0){let e=new URLSearchParams;for(let[t,r]of Object.entries(n))r!=null&&e.set(t,String(r));let t=e.toString();t&&(r+=(r.includes(`?`)?`&`:`?`)+t)}return r}function Mn(e){if(!e)return{};let t={};return e.$select?.length&&(t.$select=e.$select.join(`,`)),e.$filter&&Object.keys(e.$filter).length>0&&(t.$filter=JSON.stringify(e.$filter)),e.$orderby&&(t.$orderby=typeof e.$orderby==`string`?e.$orderby:Array.isArray(e.$orderby)?typeof e.$orderby[0]==`string`?e.$orderby.join(`,`):e.$orderby.map(e=>`${e.field} ${e.order||`asc`}`).join(`,`):Object.entries(e.$orderby).map(([e,t])=>`${e} ${t}`).join(`,`)),e.$skip!==void 0&&(t.$skip=e.$skip),e.$top!==void 0&&(t.$top=e.$top),e.$expand?.length&&(t.$expand=e.$expand.join(`,`)),e.$search&&(t.$search=e.$search),e.$count&&(t.$count=`true`),t}function Nn(e,t){return{...e,...t}}var Pn=class{readConfig;writeConfig;fetchFn;defaultHeaders;constructor(e){this.readConfig=e.read,this.writeConfig=e.write,this.fetchFn=e.fetch??globalThis.fetch.bind(globalThis),this.defaultHeaders=e.defaultHeaders??{}}async request(e,t={}){if(!e)throw Error(`ApiDataSource: No HTTP configuration provided for this operation. Ensure the ViewData has read/write configs.`);let n=t.method??e.method??`GET`,r={...e.params,...t.queryParams},i=jn(e.url,t.pathSuffix,r),a=Nn(Nn(this.defaultHeaders,e.headers),t.headers),o={method:n,headers:a};t.body!==void 0&&n!==`GET`&&(t.body instanceof FormData||t.body instanceof Blob?o.body=t.body:typeof t.body==`string`?(o.body=t.body,a[`Content-Type`]||=`text/plain`):(o.body=JSON.stringify(t.body),a[`Content-Type`]||=`application/json`));let s=await this.fetchFn(i,o);if(!s.ok){let e=await s.text().catch(()=>``);throw Error(`ApiDataSource: HTTP ${s.status} ${s.statusText} — ${e}`)}return(s.headers.get(`content-type`)??``).includes(`application/json`)?s.json():await s.text()}async find(e,t){let n=Mn(t),r=await this.request(this.readConfig,{method:`GET`,queryParams:n});return this.normalizeQueryResult(r)}async findOne(e,t,n){try{let e=Mn(n);return await this.request(this.readConfig,{pathSuffix:String(t),method:`GET`,queryParams:e})??null}catch{return null}}async create(e,t){let n=this.writeConfig??this.readConfig;return this.request(n,{method:`POST`,body:t})}async update(e,t,n,r){let i=this.writeConfig??this.readConfig;return this.request(i,{pathSuffix:String(t),method:`PATCH`,body:n,...r?.ifMatch?{headers:{"If-Match":String(r.ifMatch)}}:{}})}async delete(e,t,n){let r=this.writeConfig??this.readConfig;try{return await this.request(r,{pathSuffix:String(t),method:`DELETE`,...n?.ifMatch?{headers:{"If-Match":String(n.ifMatch)}}:{}}),!0}catch{return!1}}batchTransaction(e){return kn(this,e)}async getObjectSchema(e){return{name:e,fields:{}}}async getView(e,t){return null}async getApp(e){return null}async aggregate(e,t){let n={field:t.field,function:t.function,groupBy:t.groupBy};t.filter&&(n.filter=typeof t.filter==`string`?t.filter:JSON.stringify(t.filter));let r=await this.request(this.readConfig,{pathSuffix:`aggregate`,method:`GET`,queryParams:n});return Array.isArray(r)?r:r?.data&&Array.isArray(r.data)?r.data:r?.results&&Array.isArray(r.results)?r.results:[]}normalizeQueryResult(e){if(Array.isArray(e))return{data:e,total:e.length};if(e&&typeof e==`object`){if(Array.isArray(e.data)&&(`total`in e||`totalCount`in e))return{data:e.data,total:e.total??e.totalCount??e.data.length,hasMore:e.hasMore,cursor:e.cursor};for(let t of[`data`,`items`,`results`,`records`,`value`])if(Array.isArray(e[t]))return{data:e[t],total:e.total??e.totalCount??e.count??e[t].length,hasMore:e.hasMore??e.hasNextPage};return{data:[e],total:1}}return{data:[],total:0}}};function B(e,t){return t?e[t]:e.id??e._id}function Fn(e,t){if(!t||t.length===0)return!0;let n=t[0];if(n===`and`)return t.slice(1).every(t=>Fn(e,t));if(n===`or`)return t.slice(1).some(t=>Fn(e,t));if(t.length===3&&typeof n==`string`){let[n,r,i]=t,a=e[n];switch(r){case`=`:return a===i;case`!=`:return a!==i;case`>`:return a>i;case`>=`:return a>=i;case`<`:return a<i;case`<=`:return a<=i;case`in`:return Array.isArray(i)&&i.includes(a);case`not in`:case`not_in`:case`nin`:case`notin`:return Array.isArray(i)&&!i.includes(a);case`contains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.includes(String(i).toLowerCase())}case`notcontains`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&!e.includes(String(i).toLowerCase())}case`startswith`:{let e=typeof a==`string`?a.toLowerCase():``;return typeof a==`string`&&e.startsWith(String(i).toLowerCase())}case`between`:return Array.isArray(i)&&i.length===2&&a>=i[0]&&a<=i[1];default:return!0}}return!0}function In(e,t){for(let[n,r]of Object.entries(t)){let t=e[n];if(r&&typeof r==`object`&&!Array.isArray(r))for(let[e,n]of Object.entries(r))switch(e){case`$gt`:if(!(t>n))return!1;break;case`$gte`:if(!(t>=n))return!1;break;case`$lt`:if(!(t<n))return!1;break;case`$lte`:if(!(t<=n))return!1;break;case`$ne`:if(t===n)return!1;break;case`$in`:if(!Array.isArray(n)||!n.includes(t))return!1;break;case`$contains`:if(typeof t!=`string`||!t.toLowerCase().includes(String(n).toLowerCase()))return!1}else if(t!==r)return!1}return!0}function Ln(e,t){if(!t)return e;let n=[];return Array.isArray(t)?n=t.map(e=>typeof e==`string`?e.startsWith(`-`)?{field:e.slice(1),order:`desc`}:{field:e,order:`asc`}:{field:e.field,order:e.order??`asc`}):typeof t==`object`&&(n=Object.entries(t).map(([e,t])=>({field:e,order:t}))),n.length===0?e:[...e].sort((e,t)=>{for(let{field:r,order:i}of n){let n=e[r],a=t[r];if(n===a)continue;if(n==null)return i===`asc`?-1:1;if(a==null)return i===`asc`?1:-1;let o=n<a?-1:1;return i===`asc`?o:-o}return 0})}function Rn(e,t){if(!t||t.length===0)return e;let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}var zn=class{items;idField;mutationListeners=new Set;constructor(e){this.items=JSON.parse(JSON.stringify(e.items)),this.idField=e.idField}emitMutation(e){for(let t of this.mutationListeners)try{t(e)}catch(e){console.warn(`ValueDataSource: mutation listener error`,e)}}async find(e,t){let n=[...this.items];if(t?.$filter&&(Array.isArray(t.$filter)&&t.$filter.length>0?n=n.filter(e=>Fn(e,t.$filter)):!Array.isArray(t.$filter)&&Object.keys(t.$filter).length>0&&(n=n.filter(e=>In(e,t.$filter)))),t?.$search){let e=t.$search.toLowerCase();n=n.filter(t=>Object.values(t).some(t=>typeof t==`string`&&t.toLowerCase().includes(e)))}let r=n.length;n=Ln(n,t?.$orderby);let i=t?.$skip??0,a=t?.$top;return i>0&&(n=n.slice(i)),a!==void 0&&(n=n.slice(0,a)),t?.$select?.length&&(n=n.map(e=>Rn(e,t.$select))),{data:n,total:r,hasMore:i+(a??n.length)<r}}async findOne(e,t,n){let r=this.items.find(e=>String(B(e,this.idField))===String(t));return r?n?.$select?.length?Rn(r,n.$select):{...r}:null}async create(e,t){let n={...t};if(!B(n,this.idField)){let e=this.idField??`id`;n[e]=`auto_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}return this.items.push(n),this.emitMutation({type:`create`,resource:e,record:{...n}}),{...n}}async update(e,t,n){let r=this.items.findIndex(e=>String(B(e,this.idField))===String(t));if(r===-1)throw Error(`ValueDataSource: Record with id "${t}" not found`);return this.items[r]={...this.items[r],...n},this.emitMutation({type:`update`,resource:e,id:t,record:{...this.items[r]}}),{...this.items[r]}}async delete(e,t){let n=this.items.findIndex(e=>String(B(e,this.idField))===String(t));return n!==-1&&(this.items.splice(n,1),this.emitMutation({type:`delete`,resource:e,id:t}),!0)}async bulk(e,t,n){let r=[];for(let i of n)switch(t){case`create`:r.push(await this.create(e,i));break;case`update`:{let t=B(i,this.idField);t!==void 0&&r.push(await this.update(e,t,i));break}case`delete`:{let t=B(i,this.idField);t!==void 0&&await this.delete(e,t);break}}return r}batchTransaction(e){return kn(this,e)}async getObjectSchema(e){if(this.items.length===0)return{name:e,fields:{}};let t=this.items[0],n={};for(let[e,r]of Object.entries(t))n[e]={type:typeof r};return{name:e,fields:n}}async getView(e,t){return null}async getApp(e){return null}async aggregate(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let e of this.items){let t=String(e[i]??`Unknown`);a[t]||(a[t]=[]),a[t].push(e)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0)}return{[i]:e,[n]:o}})}onMutation(e){return this.mutationListeners.add(e),()=>{this.mutationListeners.delete(e)}}get count(){return this.items.length}getAll(){return JSON.parse(JSON.stringify(this.items))}};function Bn(e,t,n){if(!e)return t??null;switch(e.provider){case`object`:return t??null;case`api`:return new Pn({read:e.read,write:e.write,fetch:n?.fetch,defaultHeaders:n?.defaultHeaders});case`value`:return new zn({items:e.items??[],idField:n?.idField});default:return t??null}}var V=e=>!!e&&typeof e==`object`&&!Array.isArray(e);function Vn(e){if(!V(e)||typeof e.find==`function`)return!1;let t=e.object;return typeof t==`string`&&t.length>0}function Hn(...e){let t={};for(let n of e)if(Array.isArray(n))for(let e of n){if(!V(e))continue;let n=e.name??e.id;typeof n==`string`&&n&&(t[n]=e)}else if(V(n))for(let[e,r]of Object.entries(n))V(r)&&(t[e]=r);return t}function Un(e,t,n){let r=Be(t,Object.keys(e),n);return r===void 0?void 0:e[r]}function Wn(e){if(!e)return;let t=e.pagination;return V(t)&&typeof t.pageSize==`number`?t.pageSize:typeof e.limit==`number`?e.limit:void 0}function Gn(e){if(!e)return;let t=e.type??e.viewType;return typeof t==`string`&&t?t:void 0}function Kn(e){if(e){if(Array.isArray(e.columns))return e.columns;if(Array.isArray(e.fields))return e.fields}}function qn(e,t){let n={object:e.object},r=Kn(t);r!==void 0&&(n.columns=r);let i=t?.filter,a=i!==void 0&&e.filter!==void 0?T(i,e.filter):e.filter??i;a!==void 0&&(n.filter=a);let o=e.sort??t?.sort;o!==void 0&&(n.sort=o);let s=e.limit??Wn(t);s!==void 0&&(n.limit=s);let c=Gn(t);return c!==void 0&&(n.viewType=c),n}function Jn(e,t,n){return`dataSource.view "${t}" was not found on object "${e}". ${n.length?`Known views: ${[...n].sort().join(`, `)}.`:`This object has no saved views.`}`}var H=`https://objectui.dev/docs/errors`,Yn={"OBJUI-001":{code:`OBJUI-001`,message:'Unknown component type: "${type}"',suggestion:`Ensure the component is registered via registry.register() before rendering. Check for typos in the component type name.`,docUrl:`${H}/OBJUI-001`},"OBJUI-002":{code:`OBJUI-002`,message:"Schema validation failed: ${reason}",suggestion:`Verify the schema against the ObjectUI JSON spec. Run the built-in schema validator for details.`,docUrl:`${H}/OBJUI-002`},"OBJUI-003":{code:`OBJUI-003`,message:"Expression evaluation failed: ${expression}",suggestion:`Check the expression syntax and ensure all referenced variables exist in the current data scope.`,docUrl:`${H}/OBJUI-003`},"OBJUI-004":{code:`OBJUI-004`,message:'Plugin dependency missing: "${dependency}"',suggestion:`Install the required dependency and register it before loading this plugin.`,docUrl:`${H}/OBJUI-004`},"OBJUI-005":{code:`OBJUI-005`,message:'Plugin already loaded: "${plugin}"',suggestion:`A plugin with the same name is already registered. Remove the duplicate or use a unique plugin name.`,docUrl:`${H}/OBJUI-005`},"OBJUI-006":{code:`OBJUI-006`,message:'Plugin not found: "${plugin}"',suggestion:`Verify the plugin name and ensure it has been registered before access.`,docUrl:`${H}/OBJUI-006`},"OBJUI-007":{code:`OBJUI-007`,message:'Registry namespace deprecated: "${namespace}"',suggestion:`Migrate to the new namespace format. See the migration guide for details.`,docUrl:`${H}/OBJUI-007`},"OBJUI-008":{code:`OBJUI-008`,message:'Read-only scope violation: "${scope}"',suggestion:`You are trying to mutate a read-only data scope. Use a writable scope or clone the data before modifying.`,docUrl:`${H}/OBJUI-008`},"OBJUI-009":{code:`OBJUI-009`,message:'Invalid field configuration: "${field}"',suggestion:`Check the field schema for required properties (type, name). Ensure the field widget is registered.`,docUrl:`${H}/OBJUI-009`},"OBJUI-010":{code:`OBJUI-010`,message:'Action execution failed: "${action}"',suggestion:`Verify the action handler is registered and that all required parameters are provided.`,docUrl:`${H}/OBJUI-010`}},Xn=class extends Error{code;details;constructor(e,t,n){super(e),this.code=t,this.details=n,this.name=`ObjectUIError`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,details:this.details,stack:this.stack}}};function Zn(e){return e instanceof Xn}var U=`__debug`;function Qn(e){let t=e;if(t===void 0)try{t=typeof window<`u`?window.location.search:``}catch{t=``}let n=new URLSearchParams(t),r=n.has(U),i=n.has(`${U}_schema`),a=n.has(`${U}_perf`),o=n.has(`${U}_data`),s=n.has(`${U}_expr`),c=n.has(`${U}_events`),l=n.has(`${U}_registry`);return{enabled:r||i||a||o||s||c||l,...i&&{schema:i},...a&&{perf:a},...o&&{data:o},...s&&{expr:s},...c&&{events:c},...l&&{registry:l}}}function $n(){try{if(typeof window<`u`)try{if(Qn(window.location.search).enabled)return!0}catch{}let e=typeof globalThis<`u`&&globalThis.OBJECTUI_DEBUG;return e===!0||e===`true`||globalThis.process?.env?.OBJECTUI_DEBUG===`true`}catch{return!1}}function er(e,t,n){$n()&&(n===void 0?console.log(`[ObjectUI Debug][${e}] ${t}`):console.log(`[ObjectUI Debug][${e}] ${t}`,n))}var tr=new Map;function nr(e){$n()&&tr.set(e,performance.now())}function rr(e){if(!$n())return;let t=tr.get(e);if(t!==void 0){let n=(performance.now()-t).toFixed(2);console.log(`[ObjectUI Debug][perf] ${e}: ${n}ms`),tr.delete(e)}}var ir=200,ar=class e{static instance=null;entries=[];subscribers=new Set;static getInstance(){return e.instance||=new e,e.instance}static resetInstance(){e.instance=null}addPerf(e){this.push({kind:`perf`,data:e})}addExpr(e){this.push({kind:`expr`,data:e})}addEvent(e){this.push({kind:`event`,data:e})}getEntries(e){return e?this.entries.filter(t=>t.kind===e):this.entries.slice()}clear(){this.entries=[]}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}push(e){this.entries.push(e),this.entries.length>ir&&(this.entries=this.entries.slice(-200));for(let t of this.subscribers)try{t(e)}catch{}}},or={medium:991,small:640,xsmall:479},sr=e=>e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),cr=e=>Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>`${sr(e)}: ${typeof t==`number`?String(t):t} !important;`).join(` `);function lr(e){if(!e||typeof e!=`object`)return!1;let t=e;return!!(t.large||t.medium||t.small||t.xsmall)}function ur(e){return`os-s-${String(e).replace(/[^a-zA-Z0-9_-]/g,`-`)}`}function dr(e,t){let n=[];if(t.large){let r=cr(t.large);r&&n.push(`${e} { ${r} }`)}for(let r of[`medium`,`small`,`xsmall`]){let i=t[r];if(!i)continue;let a=cr(i);a&&n.push(`@media (max-width: ${or[r]}px) { ${e} { ${a} } }`)}return n.join(`
|
|
3
|
-
`)}var fr={"react-pages":!0},W=new Map,pr=!1;function mr(){if(pr)return;pr=!0;let e=globalThis;if(Array.isArray(e.__OBJECTUI_CAPABILITIES__))for(let t of e.__OBJECTUI_CAPABILITIES__)typeof t==`string`&&!W.has(t)&&W.set(t,!0);if(Array.isArray(e.__OBJECTUI_CAPABILITIES_DISABLED__))for(let t of e.__OBJECTUI_CAPABILITIES_DISABLED__)typeof t==`string`&&W.set(t,!1)}function hr(e){mr();let t=W.get(e);return t===void 0?fr[e]??!1:t}var gr=`react-pages`,_r=/\$\{event\.([a-zA-Z0-9_]+)\}/g;function vr(e,t){return typeof e!=`string`||e.indexOf("${event.")===-1?e:e.replace(_r,(e,n)=>{let r=t[n];return r==null?``:String(r)})}function yr(e,t){if(typeof e==`string`){let n=e.match(/^\$\{event\.([a-zA-Z0-9_]+)\}$/);if(n){let e=t[n[1]];return e===``||e===void 0?null:e}return vr(e,t)}if(Array.isArray(e))return e.map(e=>yr(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=yr(i,t);return n}return e}function br(e,t,n={}){if(e?.filter)return yr(e.filter,t);let r={},{rowField:i,columnField:a,groupByField:o}=n,s=t.scope??`cell`;return s===`total`?r:((s===`cell`||s===`row`)&&i&&`rowKey`in t&&(r[i]=t.rowKey===``?null:t.rowKey),(s===`cell`||s===`column`)&&a&&`colKey`in t&&(r[a]=t.colKey===``?null:t.colKey),o&&`category`in t&&(r[o]=t.category===``?null:t.category),r)}function xr(e,t,n=`Details`){if(e?.title){let n=vr(e.title,t).trim();if(n)return n}let r=[];return t.rowLabel&&r.push(t.rowLabel),t.colLabel&&r.push(t.colLabel),t.categoryLabel?r.push(t.categoryLabel):t.category&&r.push(t.category),t.series&&r.push(t.series),r.length>0?r.join(` × `):n}function Sr(e){return e?e.enabled!==!1:!1}function Cr(e,t=new Date){if(e==null)return e;let n=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t},r=e=>{let t=n(e);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`},i=e=>{let t=n(e),r=(t.getDay()+6)%7;return t.setDate(t.getDate()-r),t},a=e=>new Date(e.getFullYear(),e.getMonth(),1),o=e=>{let t=Math.floor(e.getMonth()/3);return new Date(e.getFullYear(),t*3,1)},s=e=>new Date(e.getFullYear(),0,1),c=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),l=(e,t)=>{let r=n(e);return r.setDate(r.getDate()+t),r},u=e=>l(c(a(e),1),-1),d=e=>l(i(e),6),f=e=>l(c(o(e),3),-1),p=e=>new Date(e.getFullYear(),11,31),m={today:()=>r(t),yesterday:()=>r(l(t,-1)),tomorrow:()=>r(l(t,1)),now:()=>t.toISOString(),current_week_start:()=>r(i(t)),current_week_end:()=>r(d(t)),current_month_start:()=>r(a(t)),current_month_end:()=>r(u(t)),current_quarter_start:()=>r(o(t)),current_quarter_end:()=>r(f(t)),current_year_start:()=>r(s(t)),current_year_end:()=>r(p(t)),last_week_start:()=>r(l(i(t),-7)),last_week_end:()=>r(l(i(t),-1)),last_month_start:()=>r(c(a(t),-1)),last_month_end:()=>r(l(a(t),-1)),last_quarter_start:()=>r(c(o(t),-3)),last_quarter_end:()=>r(l(o(t),-1)),last_year_start:()=>r(new Date(t.getFullYear()-1,0,1)),last_year_end:()=>r(new Date(t.getFullYear()-1,11,31)),next_week_start:()=>r(l(i(t),7)),next_month_start:()=>r(c(a(t),1)),next_quarter_start:()=>r(c(o(t),3)),next_year_start:()=>r(new Date(t.getFullYear()+1,0,1))};for(let[e,t]of Object.entries({week_start:`current_week_start`,week_end:`current_week_end`,month_start:`current_month_start`,month_end:`current_month_end`,quarter_start:`current_quarter_start`,quarter_end:`current_quarter_end`,year_start:`current_year_start`,year_end:`current_year_end`}))m[e]=m[t];let h=/^(\d+)_(minutes?|hours?|days?|weeks?|months?|years?)_(ago|from_now)$/,g=e=>{let n=e.match(h);if(!n)return null;let i=parseInt(n[1],10);if(!Number.isFinite(i))return null;let a=n[3]===`ago`?-1:1,o=n[2].replace(/s$/,``);if(o===`minute`)return new Date(t.getTime()+a*i*60*1e3).toISOString();if(o===`hour`)return new Date(t.getTime()+a*i*60*60*1e3).toISOString();if(o===`day`)return r(l(t,a*i));if(o===`week`)return r(l(t,a*i*7));if(o===`month`){let e=new Date(t.getFullYear(),t.getMonth()+a*i,t.getDate());return r(e)}if(o===`year`){let e=new Date(t.getFullYear()+a*i,t.getMonth(),t.getDate());return r(e)}return null},_=/\$?\{([a-zA-Z0-9_]+)\}/g,v=e=>{if(e==null)return e;if(typeof e==`string`){let t=e.match(/^\$?\{([a-zA-Z0-9_]+)\}$/);if(t){let e=t[1];if(m[e])return m[e]();let n=g(e);if(n!=null)return n}let n=!1,r=e.replace(_,(e,t)=>{if(m[t])return n=!0,m[t]();let r=g(t);return r==null?e:(n=!0,r)});return n?r:e}if(Array.isArray(e))return e.map(v);if(typeof e==`object`){let t={};for(let n of Object.keys(e))t[n]=v(e[n]);return t}return e};return v(e)}var wr={current_user:`current_user_id`,current_user_email:`current_user_id`,user_id:`current_user_id`,userid:`current_user_id`,me:`current_user_id`,current_organization_id:`current_org_id`,org_id:`current_org_id`,organization_id:`current_org_id`,current_tenant_id:`current_org_id`},Tr=/^\$?\{([a-zA-Z0-9_]+)\}$/;function Er(e){return s.includes(e)}function Dr(e,t={}){if(e==null)return e;let{currentUserId:n,currentOrgId:r}=t,i=t.onUnresolved===null?()=>{}:t.onUnresolved??(e=>{console.warn(`[object-ui] ${e}`)}),a={current_user_id:n,current_org_id:r},o=e=>{if(e==null)return e;if(typeof e==`string`){let t=e.match(Tr);if(!t)return e;let n=t[1];if(Er(n)){let t=a[n];return t!=null&&t!==``?t:(i(`Filter placeholder "{${n}}" could not be resolved — no ${n===`current_user_id`?`signed-in user`:`active organization`} in scope. The filter will match no records.`),e)}let r=wr[n.toLowerCase()];return r&&i(`Filter placeholder "{${n}}" is not a recognised token — did you mean "{${r}}"? It is sent to the server as a literal string and will match no records.`),e}if(Array.isArray(e))return e.map(o);if(typeof e==`object`){let t={};for(let n of Object.keys(e))t[n]=o(e[n]);return t}return e};return o(e)}function Or(e,t={},n=new Date){return e==null?e:Dr(Cr(e,n),t)}var kr=`dateRange`,Ar=`created_at`,jr={today:{from:`{today}`,to:`{today}`},yesterday:{from:`{yesterday}`,to:`{yesterday}`},this_week:{from:`{current_week_start}`,to:`{current_week_end}`},last_week:{from:`{last_week_start}`,to:`{last_week_end}`},this_month:{from:`{current_month_start}`,to:`{current_month_end}`},last_month:{from:`{last_month_start}`,to:`{last_month_end}`},this_quarter:{from:`{current_quarter_start}`,to:`{current_quarter_end}`},last_quarter:{from:`{last_quarter_start}`,to:`{last_quarter_end}`},this_year:{from:`{current_year_start}`,to:`{current_year_end}`},last_year:{from:`{last_year_start}`,to:`{last_year_end}`},last_7_days:{from:`{7_days_ago}`,to:`{today}`},last_30_days:{from:`{30_days_ago}`,to:`{today}`},last_90_days:{from:`{90_days_ago}`,to:`{today}`}};function Mr(e){return jr[e]}var Nr=/^\d{4}-\d{2}-\d{2}(?:[T ][\d:.]+(?:Z|[+-]\d{2}:?\d{2})?)?$/;function Pr(e){return Cr(e)!==e||Nr.test(e)&&!Number.isNaN(Date.parse(e))}function Fr(){return c.join(`, `)}function Ir(e){typeof console<`u`&&console.warn(`[dashboard-filters] ${e}`)}var Lr=()=>!1,Rr=new Set;function zr(e){let t=Kt(e);if(t===e)return e;let n=e?.name??e?.field??`?`,r=t?.defaultValue;return Ir(`filter "${n}": \`defaultValue: { preset: ${JSON.stringify(r)} }\` is a LEGACY spelling (objectui#4165) and was lifted to the canonical bare preset name ${JSON.stringify(r)}. Rewrite the stored dashboard — the object form is refused by @objectstack/spec and its acceptance here ends with @object-ui/types 18.`),t}function Br(e,t){return e!==`date`&&e!==`dateRange`||typeof t!=`string`?t:t in jr?{preset:t}:t}function Vr(e,t){if(!Array.isArray(e)||e.length===0)return;let n=[],r=[];for(let t of e)if(t!=null){if(typeof t==`object`){let e=t.value;if(e==null)continue;let r=t.label,i=typeof r==`object`&&!!r&&!Array.isArray(r);n.push({value:String(e),label:typeof r==`string`&&r||i?r:String(e)})}else r.push(String(t)),n.push({value:String(t),label:String(t)})}return r.length>0&&Hr(t,r),n.length>0?n:void 0}function Hr(e,t){if(!Lr())return;let n=`${e}:${t.join(`,`)}`;if(Rr.has(n))return;Rr.add(n);let r=t.map(e=>`{ value: ${JSON.stringify(e)}, label: ${JSON.stringify(e)} }`).join(`, `);Ir(`filter "${e}": \`options\` carries the bare-string shorthand (${t.map(e=>JSON.stringify(e)).join(`, `)}), which @objectstack/spec's \`GlobalFilterSchema\` REFUSES at publish — a dashboard authored this way renders here and is rejected the moment it reaches the platform (objectui#4356). Rewrite the stored dashboard to the canonical pair form: [${r}]. Still lifted here for already-persisted dashboards; the lift is removed on the objectstack#7917 schedule.`)}function Ur(e){let t=new Map;if(e.dateRange){let n=e.dateRange.defaultRange;t.set(kr,{name:kr,field:e.dateRange.field||Ar,type:`dateRange`,defaultValue:n&&n!==`custom`?{preset:n}:void 0,allowCustomRange:e.dateRange.allowCustomRange})}for(let n of e.globalFilters??[]){if(!n?.field)continue;let e=zr(n),r=e.name||e.field;t.has(r)&&typeof console<`u`&&console.warn(`[dashboard-filters] duplicate filter name "${r}" — the later definition wins`);let i=e.type??`text`;t.set(r,{name:r,field:e.field,label:e.label,type:i,options:Vr(e.options,r),optionsFrom:e.optionsFrom,defaultValue:Br(i,e.defaultValue),targetWidgets:e.targetWidgets})}return Array.from(t.values())}function Wr(e){return e.map(e=>({name:e.name,type:e.type===`dateRange`?`object`:`string`,defaultValue:e.defaultValue}))}function Gr(e,t){if(t==null||t===``)return!0;if(Array.isArray(t))return t.length===0;if(e.type===`dateRange`||e.type===`date`){let e=t;return typeof e==`object`&&!e.preset&&!e.from&&!e.to}return typeof t==`object`&&Object.keys(t).length===0}function Kr(e,t){if(!Gr(e,t)){if(e.type===`dateRange`||e.type===`date`){let n=t;if(typeof n==`object`){let t=typeof n.preset==`string`&&n.preset?n.preset:void 0,r=t?Mr(t):void 0,i=r?.from??n.from,a=r?.to??n.to;return t&&!r&&Ir(i||a?`filter "${e.name}": ignoring unknown date range preset "${t}" — using the explicit from/to bounds instead; known presets: ${Fr()}`:`skipping filter "${e.name}": unknown date range preset "${t}" — expected one of: ${Fr()}`),!i&&!a?void 0:{...i?{$gte:i}:{},...a?{$lte:a}:{}}}if(typeof n==`string`&&!Pr(n)){Ir(`skipping filter "${e.name}": value "${n}" is neither a known date range preset nor an ISO date — expected one of: ${Fr()}, an ISO date (YYYY-MM-DD), or a date macro such as {today}`);return}return t}return e.type===`select`||e.type===`lookup`?Array.isArray(t)?{$in:t}:t:e.type===`text`?{$contains:t}:t}}function qr(e,t){let n=e.filterBindings?.[t.name];if(n!==!1){if(typeof n==`string`&&n)return n;if(!(t.targetWidgets&&t.targetWidgets.length>0&&(!e.id||!t.targetWidgets.includes(e.id))))return t.field}}function Jr(e,t,n,r){let i=[];for(let a of t){let t=n[a.name];if(Gr(a,t))continue;let o=qr(e,a);if(!o)continue;if(typeof e.filterBindings?.[a.name]!=`string`&&r&&!r.has(o)){typeof console<`u`&&console.warn(`[dashboard-filters] skipping filter "${a.name}" on widget "${e.id??`?`}": default field "${o}" does not exist on the widget's object — map it with filterBindings: { "${a.name}": "<field>" } or opt out with false`);continue}let s=Kr(a,t);s!==void 0&&i.push({[o]:s})}if(i.length!==0)return i.length===1?i[0]:{$and:i}}function Yr(e,t){let n=e&&Object.keys(e).length>0,r=t&&Object.keys(t).length>0;if(n&&r)return{$and:[e,t]};if(n)return e;if(r)return t}var Xr={current_week_start:`last_week_start`,current_week_end:`last_week_end`,current_month_start:`last_month_start`,current_month_end:`last_month_end`,current_quarter_start:`last_quarter_start`,current_quarter_end:`last_quarter_end`,current_year_start:`last_year_start`,current_year_end:`last_year_end`,week_start:`last_week_start`,week_end:`last_week_end`,month_start:`last_month_start`,month_end:`last_month_end`,quarter_start:`last_quarter_start`,quarter_end:`last_quarter_end`,year_start:`last_year_start`,year_end:`last_year_end`,today:`yesterday`};function Zr(e,t){if(e==null)return e;if(typeof e==`string`)return e.replace(/\$?\{([a-zA-Z0-9_]+)\}/g,(e,n)=>{let r=t[n];return r?`{${r}}`:e});if(Array.isArray(e))return e.map(e=>Zr(e,t));if(typeof e==`object`){let n={};for(let r of Object.keys(e))n[r]=Zr(e[r],t);return n}return e}function Qr(e,t,n=new Date){return t.kind===`previousYear`?Cr(e,new Date(n.getFullYear()-1,n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds())):Cr(Zr(e,Xr),n)}function $r(e,t){if(e.kind===`previousYear`)return`vsLastYear`;let n=t?JSON.stringify(t):``;return/current_year_|year_start|year_end/.test(n)?`vsLastYear`:/current_quarter_|quarter_start|quarter_end/.test(n)?`vsLastQuarter`:/current_month_|month_start|month_end/.test(n)?`vsLastMonth`:/current_week_|week_start|week_end/.test(n)?`vsLastWeek`:/\btoday\b/.test(n)?`vsYesterday`:`vsPreviousPeriod`}function ei(e,t){return!!e&&typeof e==`object`&&t in e&&e[t]==null}function ti(e,t,n){let r=!1,i=e.map(e=>ei(e,t)?(r=!0,{...e,[t]:n}):e);return r?i:e}function ni(e,t,n,r,i){let a=(t??[]).filter(Boolean),o=(n??[]).filter(Boolean),s=Array.isArray(e)?e:[],c=e=>(r??[]).find(t=>t.name===e)?.label??e;if(a.length>=2&&o.length===1){let e=a[0],t=a[1],n=o[0],r=i?.nullCategoryLabel??`(None)`,c=[],l=new Map;for(let i of s){let a=i[e],o=String(a??``);l.has(o)||l.set(o,{[e]:ei(i,e)?r:a});let s=String(i[t]??``);s!==``&&!c.includes(s)&&c.push(s),l.get(o)[s]=i[n]}return{data:Array.from(l.values()),xAxisKey:e,series:c.map(e=>({dataKey:e,label:e}))}}let l=a[0];return{data:l?ti(s,l,i?.nullCategoryLabel??`(None)`):s,xAxisKey:l,series:o.map(e=>({dataKey:e,label:c(e)}))}}function ri(e,t){let n=Array.isArray(e)?e:[];if(!t)return n;let r=Object.keys(t).filter(e=>t[e]&&Object.keys(t[e]).length>0);return r.length===0?n:n.map(e=>{let n=null;for(let i of r){let r=e[i];if(r==null)continue;let a=t[i][String(r)];a!=null&&a!==r&&(n||={...e},n[i]=a)}return n??e})}function ii(e,t,n,r,i,a){let o=(t??[]).filter(Boolean),s=(n??[]).filter(Boolean),c=Array.isArray(e)?e:[],l=o[0];if(!l)return-1;let u=String(r??``),d=a?.nullCategoryLabel??`(None)`,f=e=>e[l]==null?u===d?d:``:String(e[l]);if(o.length>=2&&s.length===1){let e=o[1],t=String(i??``);return c.findIndex(n=>f(n)===u&&String(n[e]??``)===t)}return c.findIndex(e=>f(e)===u)}function ai(e){if(!Array.isArray(e)||e.length===0)return null;let t={};for(let n of e)if(n&&typeof n==`object`){let e=n;typeof e.color==`string`&&e.color&&(e.value!=null&&(t[String(e.value)]=e.color),e.label!=null&&(t[String(e.label)]=e.color))}return Object.keys(t).length>0?t:null}function oi(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let n of e){if(typeof n==`string`||typeof n==`number`||typeof n==`boolean`){t.push(String(n));continue}if(n&&typeof n==`object`){let e=n;e.value!=null&&t.push(String(e.value)),e.label!=null&&String(e.label)!==String(e.value)&&t.push(String(e.label))}}return t.length>0?t:null}function si(e){if(!Array.isArray(e)||e.length===0)return null;let t=new Map;return e.forEach((e,n)=>{t.has(e)||t.set(e,n)}),t.size>0?t:null}function ci(e){if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return{value:String(e),label:String(e)};if(e&&typeof e==`object`){let t=e;if(t.value!=null&&t.label!=null)return{value:String(t.value),label:String(t.label)}}return null}function li(e,t){if(!t||!Array.isArray(e)||e.length===0)return e;let n=!1,r=e.map(e=>{let r=ci(e);if(!r)return e;let i=t(r.value,r.label);return i===r.label?e:(n=!0,e&&typeof e==`object`?{...e,label:i}:{value:r.value,label:i})});return n?r:e}function ui(e,t){if(!Array.isArray(e)||e.length===0)return null;let n={},r={};for(let i of e){let e=ci(i);if(!e)continue;let a=t?t(e.value,e.label):e.label;a!==e.value&&(n[e.value]=a),a!==e.label&&(r[e.label]=a)}let i={...r,...n};return Object.keys(i).length>0?i:null}var di=new Set([`lookup`,`master_detail`,`masterdetail`,`master-detail`]);function fi(e){let t=e?.fields;return t&&typeof t==`object`&&!Array.isArray(t)?t:null}function pi(e){if(!e||typeof e!=`object`)return;let t=e,n=typeof t.type==`string`?t.type.toLowerCase():``;if(!di.has(n))return;let r=t.reference??t.reference_to??t.referenceTo??t.reference_to_object;if(typeof r==`string`&&r)return r;if(Array.isArray(r)&&typeof r[0]==`string`&&r[0])return r[0];if(r&&typeof r==`object`){let e=r.object;if(typeof e==`string`&&e)return e}}async function mi(e,t,n){let r={},i=Array.from(new Set((t??[]).filter(e=>!!e)));if(i.length===0)return r;let a=new Map,o=e?.name;typeof o==`string`&&o&&a.set(o,Promise.resolve(e));let s=e=>{let t=a.get(e);return t||(t=Promise.resolve().then(()=>n(e)).catch(()=>null),a.set(e,t)),t};for(let t of i){let n=t.split(`.`),i=e,a=typeof o==`string`&&o?o:void 0,c=!0;for(let e=0;e<n.length-1;e+=1){let t=pi(fi(i)?.[n[e]]);if(!t){c=!1;break}if(i=await s(t),!i){c=!1;break}let r=i.name;a=typeof r==`string`&&r?r:t}if(!c)continue;let l=n[n.length-1],u=fi(i)?.[l];u?.options!==void 0&&(r[t]={object:a,field:l,options:u.options})}return r}function hi(e,t){let n=e?.object;if(!n||!t)return;let r=e.field;return(e,i)=>t(n,r,e,i)}function gi(e,t,n){if(!e||!t||t.length===0)return null;let r={};for(let{dim:i,path:a}of t){let t=e[a],o=ui(t?.options,hi(t,n));o&&(r[i]=o)}return Object.keys(r).length>0?r:null}async function _i(e,t,n){return mi(await e(t),n,e)}function vi(e,t){return t?!0:e!==0}function yi(e,t={}){let{locale:n,currency:r,scale:i,style:a,...o}=t,s={...o};a===`percentPoints`?(s.style=`unit`,s.unit=`percent`,s.unitDisplay=`narrow`):a&&(s.style=a),r&&(s.style=`currency`,s.currency=r,delete s.unit,delete s.unitDisplay),vi(i,r)||(s.useGrouping=!1);try{return new Intl.NumberFormat(n,s).format(e)}catch{return new Intl.NumberFormat(void 0,s).format(e)}}function bi(e){return e>-1&&e<1?e*100:e}function xi(e,t,n){return yi(e,{...n,locale:t})}function Si(e,t,n,r,i){if(e==null)return`—`;if(typeof e!=`number`)return String(e);let a=t?t.split(`.`)[1]?.match(/0/g)?.length??0:void 0;if(n)try{return xi(e,i,{currency:n,minimumFractionDigits:a??0,maximumFractionDigits:a??2})}catch{}if(!t)return Number.isInteger(e)?String(e):xi(e,i,{maximumFractionDigits:2});let o=t.includes(`%`);return`${t.includes(`$`)?`$`:``}${xi(o?r?r===`fraction`?e*100:e:bi(e):e,i,{style:o?`percentPoints`:`decimal`,minimumFractionDigits:a??0,maximumFractionDigits:a??0})}`}function Ci(e,t){return e==null?`—`:typeof e==`number`?Number.isInteger(e)?String(e):xi(e,t,{maximumFractionDigits:2}):String(e)}function wi(e,t,n){let r=new Map((e??[]).map(e=>[e.name,e])),i=e=>r.get(e);return{measureField:i,headerLabel:e=>{let r=i(e)?.label??e;return t&&n?n(t,e,r):r}}}function Ti(e,t,n,r,i){let a={};for(let r of t){let t=e?.[r];a[n[r]]=t===``||t===void 0?null:t}if(i)for(let e of Object.values(i))e&&e.field&&(a[e.field]={$gte:e.gte,$lt:e.lt});return r?{...r,...a}:a}var Ei=e=>e==null?null:String(e),Di=e=>JSON.stringify(e),Oi=(e,t)=>JSON.stringify([e,t]),ki=/[\\/:*?"<>|\u0000-\u001f]+/g,Ai=80;function G(e){return e?String(e).replace(ki,`_`).replace(/\s+/g,` `).replace(/_{2,}/g,`_`).replace(/^[\s._-]+|[\s._-]+$/g,``).slice(0,Ai):``}function ji(e,t={},n=new Date){let r=G(t.prefix),i=r||G(t.label)||G(t.objectName)||`export`,a=G(t.viewLabel);!r&&a&&a.toLowerCase()!==i.toLowerCase()&&(i=`${i}-${a}`.slice(0,Ai));let o=e=>String(e).padStart(2,`0`),s=`${n.getFullYear()}${o(n.getMonth()+1)}${o(n.getDate())}-${o(n.getHours())}${o(n.getMinutes())}${o(n.getSeconds())}`;return`${i}-${s}.${e}`}function Mi(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.reference_to??t.reference??t.referenceTo;return n==null||n===``?e:(t.reference_to===void 0&&(t.reference_to=n),t.reference===void 0&&(t.reference=n),e)}function Ni(e){let t=e&&typeof e==`object`?e.fields:null;if(!t||typeof t!=`object`)return e;let n=Array.isArray(t)?t:Object.values(t);for(let e of n)Mi(e);return e}var Pi=new Set([`id`,`created_at`,`created_by`,`updated_at`,`updated_by`,`owner_id`,`organization_id`,`owning_business_unit_id`]);function Fi(e,t){return Pi.has(e)?!0:!!t&&typeof t==`object`&&e in t}var Ii=/\b(?:record|data)\.([A-Za-z_][A-Za-z0-9_]*)/g;function Li(e){if(typeof e==`string`)return e.trim()||null;if(e&&typeof e==`object`){let t=e.source;if(typeof t==`string`)return t.trim()||null}return null}function Ri(e){let t=[],n=new Set;for(let r of e){let e=Li(r);if(e){Ii.lastIndex=0;for(let r=Ii.exec(e);r;r=Ii.exec(e)){let e=r[1];n.has(e)||(n.add(e),t.push(e))}}}return t}function zi(e){let t=[];for(let n of e.conditionalFormatting??[]){if(!n||typeof n!=`object`)continue;let e=n;t.push(e.condition,e.expression),typeof e.field==`string`&&e.field&&t.push(`record.${e.field}`)}for(let n of[e.rowActionDefs,e.bulkActionDefs,e.objectActions])for(let e of n??[]){if(!e||typeof e!=`object`)continue;let n=e;t.push(n.visible,n.disabled)}for(let n of Object.values(e.userActions??{})){if(!n||typeof n!=`object`)continue;let e=n;t.push(e.visibleWhen,e.disabledWhen)}return t}var Bi={compact:`compact`,comfortable:`medium`,spacious:`tall`},Vi={compact:`compact`,short:`compact`,medium:`comfortable`,tall:`spacious`,extra_tall:`spacious`};function Hi(e){if(typeof e==`string`&&Object.prototype.hasOwnProperty.call(Vi,e))return Vi[e]}var Ui=e=>!!e&&typeof e==`object`&&!Array.isArray(e),Wi={showSearch:`search`,showSort:`sort`,showFilters:`filter`,showDensity:`rowHeight`,showGroup:`group`,showHideFields:`hideFields`,showColor:`rowColor`},Gi={private:`personal`,team:`collaborative`,organization:`collaborative`,public:`collaborative`},Ki={label:`ariaLabel`,describedBy:`ariaDescribedBy`};function qi(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.fields,r=Array.isArray(n),i=t.densityMode,a=typeof i==`string`&&i in Bi,o=t.filters,s=Array.isArray(o),c=Object.keys(Wi).filter(e=>typeof t[e]==`boolean`),l=typeof t.showDescription==`boolean`,u=Ui(t.aria)?t.aria:void 0,d=!!u&&Object.keys(Ki).some(e=>u[e]!==void 0),f=Ui(t.sharing)?t.sharing:void 0,p=!!f&&(f.visibility!==void 0||f.enabled!==void 0),m=t.viewType,h=!m||m===`list`,g=Array.isArray(t.columns)?t.columns:r?n:void 0,_=xe(g),v=_!==g;if(!r&&!a&&!s&&!c.length&&!l&&!d&&!p&&!h&&!v)return e;let y={...t};if(r&&(Array.isArray(y.columns)||(y.columns=n),delete y.fields),v&&(y.columns=_),a&&(typeof y.rowHeight!=`string`&&(y.rowHeight=Bi[i]),delete y.densityMode),s&&(Array.isArray(y.filter)||(y.filter=o),delete y.filters),c.length){let e={...Ui(y.userActions)?y.userActions:{}};for(let n of c){let r=Wi[n];typeof e[r]!=`boolean`&&(e[r]=t[n]),delete y[n]}y.userActions=e}if(l){let e={...Ui(y.appearance)?y.appearance:{}};typeof e.showDescription!=`boolean`&&(e.showDescription=t.showDescription),delete y.showDescription,y.appearance=e}if(d&&u){let e={...u};for(let[t,n]of Object.entries(Ki))e[n]===void 0&&u[t]!==void 0&&(e[n]=u[t]),delete e[t];y.aria=e}if(p&&f){let e={...f};if(e.type===void 0){let t=typeof f.visibility==`string`?f.visibility:void 0,n=t?Gi[t]:f.enabled===!0?`personal`:void 0;n&&(e.type=n)}delete e.visibility,delete e.enabled,y.sharing=e}return h&&(y.viewType=`grid`),y}var K=t(i(),1),q=r(),J=(0,K.createContext)(null),Ji=({children:e,dataSource:t,debug:n,debugFlags:r,apiFetch:i})=>{let a=(0,K.useContext)(J),o=i??a?.apiFetch,s=(0,K.useMemo)(()=>({dataSource:t,debug:n,debugFlags:r,apiFetch:o}),[t,n,r,o]);return(0,q.jsx)(J.Provider,{value:s,children:e})},Yi=()=>{let e=(0,K.useContext)(J);if(!e)throw Error(`useSchemaContext must be used within a SchemaRendererProvider`);return e},Xi=e=>{let t=(0,K.useContext)(J)?.dataSource;if(e&&t)return e.split(`.`).reduce((e,t)=>e&&e[t],t)},Zi=(0,K.createContext)({});function Qi({scope:e,children:t}){return(0,K.createElement)(Zi.Provider,{value:e},t)}function Y(){return(0,K.useContext)(Zi)}function $i(e){return(0,K.useMemo)(()=>{if(typeof e!=`object`||!e||Array.isArray(e))return{};let t=e;return{...t,record:t,data:t}},[e])}var ea=new Set;function ta(e,t={},n){let r=Y();return(0,K.useMemo)(()=>{let i=new P({...r,...t});if(n?.throwOnError)try{return i.evaluateCondition(e,{throwOnError:!0})}catch(t){let r=typeof e==`string`?e:String(e),i=`${n?.label??``}::${r}`;if(!ea.has(i)){ea.add(i);let e=t instanceof Error?t.message:String(t);console.warn(`[object-ui] ${n?.label??`a component`} was hidden/disabled: its predicate threw — ${e}. Predicate: ${r}.`)}return!1}return i.evaluateCondition(e)},[e,t,r,n?.throwOnError,n?.label])}function na(e,t,n){let r=Y(),i=n?.fallback??!0,a=n?.fields;return(0,K.useMemo)(()=>typeof e==`boolean`?e:e==null||e===``?i:dt(e,t??{},{fallback:i,scope:r,warnOnError:n?.warnOnError,label:n?.label,fields:a}),[e,t,r,i,n?.warnOnError,n?.label,a])}var ra=(0,K.createContext)(null);function ia(e){if(!e||e.length===0)return{};let t={};for(let n of e)if(n.defaultValue!==void 0)t[n.name]=n.defaultValue;else switch(n.type){case`number`:t[n.name]=0;break;case`boolean`:t[n.name]=!1;break;case`object`:t[n.name]={};break;case`array`:t[n.name]=[];break;default:t[n.name]=``}return t}var aa=({definitions:e,children:t})=>{let n=(0,K.useContext)(ra),[r,i]=(0,K.useState)(()=>ia(e)),a=(0,K.useMemo)(()=>e??[],[e]),o=(0,K.useMemo)(()=>new Set(a.map(e=>e.name)),[a]),s=(0,K.useCallback)((e,t)=>{if(!o.has(e)&&n&&n.definitions.some(t=>t.name===e)){n.setVariable(e,t);return}i(n=>({...n,[e]:t}))},[o,n]),c=(0,K.useCallback)(e=>{for(let[t,n]of Object.entries(e))s(t,n)},[s]),l=(0,K.useCallback)(()=>{i(ia(e))},[e]),u=(0,K.useMemo)(()=>n?{...n.variables,...r}:r,[n,r]),d=(0,K.useMemo)(()=>n?[...n.definitions.filter(e=>!o.has(e.name)),...a]:a,[n,a,o]),f=(0,K.useMemo)(()=>({variables:u,definitions:d,setVariable:s,setVariables:c,resetVariables:l}),[u,d,s,c,l]);return(0,q.jsx)(ra.Provider,{value:f,children:t})};aa.displayName=`PageVariablesProvider`;function oa(){return(0,K.useContext)(ra)??sa}var sa=Object.freeze({variables:Object.freeze({}),definitions:Object.freeze([]),setVariable:()=>{},setVariables:()=>{},resetVariables:()=>{}});function ca(e){let{variables:t,definitions:n,setVariable:r}=oa();return(0,K.useMemo)(()=>{if(!e)return null;let i=n.find(t=>t.source===e);return i?{name:i.name,value:t[i.name],setValue:e=>r(i.name,e)}:null},[e,n,t,r])}function la(e){if(e!=null)return typeof e==`string`?e:e.defaultValue||e.key}var ua=(()=>{try{return!1}catch{return!0}})(),da=typeof WeakMap<`u`?new WeakMap:{set(){},get(){},has(){return!1}},fa=typeof WeakSet<`u`?new WeakSet:{add(){},has(){return!1}};function pa(e){if(!ua||!e||typeof e!=`object`)return{valid:!0,messages:[]};let t=da.get(e);if(t)return t;let n={valid:!0,messages:[]};try{let t=C(e);if(!t.valid){let r=t.errors.map(e=>`${e.path}: ${e.message}`);n={valid:!1,messages:r},fa.has(e)||(fa.add(e),console.warn(`[ObjectUI] Invalid schema detected:
|
|
4
|
-
`+r.join(`
|
|
5
|
-
`),e))}}catch(t){fa.has(e)||(fa.add(e),console.warn(`[ObjectUI] Schema validator threw:`,t))}return da.set(e,n),n}function ma(e){let t={};return e.ariaLabel&&(t[`aria-label`]=la(e.ariaLabel)),e.ariaDescribedBy&&(t[`aria-describedby`]=e.ariaDescribedBy),e.role&&(t.role=e.role),t}var ha=class extends K.Component{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidUpdate(e){this.state.hasError&&(e.componentType!==this.props.componentType||e.resetKey!==this.props.resetKey)&&this.setState({hasError:!1,error:null})}handleRetry=()=>{this.setState({hasError:!1,error:null})};render(){if(this.state.hasError&&this.state.error){let e=this.state.error;return Zn(e),(0,q.jsxs)(`div`,{className:`p-4 border border-orange-400 rounded bg-orange-50 text-orange-700 my-2`,role:`alert`,children:[(0,q.jsxs)(`p`,{className:`font-medium`,children:[`Component`,this.props.componentType?` "${this.props.componentType}"`:``,` failed to render`]}),(0,q.jsx)(`p`,{className:`text-sm mt-1`,children:e.message}),!1,(0,q.jsx)(`button`,{type:`button`,onClick:this.handleRetry,className:`mt-2 text-sm underline hover:no-underline`,children:`Retry`})]})}return this.props.children}},ga={},_a=(0,K.forwardRef)(({schema:e,...t},n)=>{let r=(0,K.useContext)(J),i=r?.dataSource||ga,a=Y(),{variables:o}=oa(),[,s]=(0,K.useReducer)(e=>e+1,0);(0,K.useEffect)(()=>{let e=g.subscribe(s);return s(),e},[]);let[c,l]=(0,K.useState)(null),u=K.useId(),d=(0,K.useMemo)(()=>{if(!e||typeof e!=`object`)return e;let t=new P({...a,current_user:a?.user,data:i,page:o}),n={...e};if(n.properties){let e=n.type,t=n.id,r=n.properties;for(let[e,t]of Object.entries(r))e!==`type`&&e!==`id`&&(n[e]=t);e!==void 0&&(n.type=e),t!==void 0&&(n.id=t),n.properties=r}if(typeof n.content==`string`&&(n.content=t.evaluate(n.content)),n.props){let e={...n.props};for(let[n,r]of Object.entries(e))e[n]=t.evaluate(r);n.props=e}return(n.visible===void 0?n.visibleWhen===void 0?n.visibleOn===void 0?n.visibility===void 0?F(n.hidden)?t.evaluateCondition(n.hidden):F(n.hiddenOn)&&t.evaluateCondition(n.hiddenOn):!t.evaluateCondition(n.visibility):!t.evaluateCondition(n.visibleOn):!t.evaluateCondition(n.visibleWhen):!t.evaluateCondition(n.visible))&&(n._hidden=!0),(F(n.disabled)?t.evaluateCondition(n.disabled):F(n.disabledOn)&&t.evaluateCondition(n.disabledOn))&&(n._disabled=!0),n},[e,i,a,o]);if(!d)return null;if(typeof d==`string`)return(0,q.jsx)(q.Fragment,{children:d});if(typeof d!=`object`)return(0,q.jsx)(q.Fragment,{children:String(d)});if(d._hidden)return null;let f=ua?pa(e):{valid:!0,messages:[]};er(`schema`,`Rendering schema node`,{type:d.type,id:d.id});let p=g.get(d.type);if(!p){if(!c&&g.hasLazy(d.type)){let e=g.loadLazy(d.type);if(e)return e.catch(e=>{l(e instanceof Error?e:Error(String(e)))}),(0,q.jsxs)(`div`,{className:`p-2 text-sm text-muted-foreground animate-pulse`,role:`status`,"aria-live":`polite`,"data-lazy-loading":d.type,children:[`Loading `,(0,q.jsx)(`code`,{children:d.type}),`…`]})}return er(`schema`,`Component not found in registry`,{type:d.type}),Yn[`OBJUI-001`],(0,q.jsxs)(`div`,{className:`p-4 border border-red-500 rounded text-red-500 bg-red-50 my-2`,role:`alert`,children:[(0,q.jsxs)(`p`,{className:`font-medium`,children:[`Unknown component type: `,(0,q.jsx)(`strong`,{children:d.type})]}),c&&(0,q.jsxs)(`p`,{className:`text-xs mt-1`,children:[`Failed to load plugin: `,c.message]}),!1,(0,q.jsx)(`pre`,{className:`text-xs mt-2 overflow-auto`,children:JSON.stringify(d,null,2)})]})}let{type:m,children:h,body:_,schema:v,visible:y,visibleWhen:b,visibleOn:x,visibility:S,hidden:C,hiddenOn:ee,disabled:te,disabledOn:ne,dataSource:re,_hidden:ie,_disabled:ae,responsiveStyles:oe,...se}=d,ce=lr(oe),w=ce?ur(d.id??u):``,T=ce?dr(`.${w}`,oe):``,le=w?[d.className,w].filter(Boolean).join(` `):d.className,ue=w?{...d,className:le}:d,de=ma(d),E=r?.debug||r?.debugFlags?.enabled,D={};E&&(D[`data-debug-type`]=d.type,d.id&&(D[`data-debug-id`]=d.id)),nr(`render:${d.type}:${d.id??`anon`}`);let fe=E?performance.now():0,O=(0,q.jsxs)(ha,{componentType:d.type,resetKey:d.id??null,children:[T?(0,q.jsx)(`style`,{"data-os-scope":w,dangerouslySetInnerHTML:{__html:T}}):null,K.createElement(p,{schema:ue,...se,...d.props||{},...de,...D,disabled:ae||void 0,className:le,"data-obj-id":d.id,"data-obj-type":d.type,...ua&&!f.valid?{"data-obj-schema-invalid":`true`}:{},...t})]});if(rr(`render:${d.type}:${d.id??`anon`}`),E&&fe){let e=performance.now()-fe;ar.getInstance().addPerf({type:d.type,id:d.id,durationMs:e,timestamp:Date.now()})}return O});_a.displayName=`SchemaRenderer`;function va(e){return typeof e==`number`||typeof e==`boolean`?String(e):e}var ya=(0,K.createContext)({});function ba({currentUserId:e,currentOrgId:t,children:n}){let r=(0,K.useMemo)(()=>({currentUserId:e,currentOrgId:t}),[e,t]);return(0,K.createElement)(ya.Provider,{value:r},n)}function xa(){return(0,K.useContext)(ya)}function Sa(e={}){let{context:t={},onConfirm:n,onToast:r,onModal:i,onNavigate:a,onParamCollection:o,onResultDialog:s}=`context`in e?e:{context:e},[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(null),[f,p]=(0,K.useState)(null),m=(0,K.useMemo)(()=>{let e=new z(t);return n&&e.setConfirmHandler(n),r&&e.setToastHandler(r),i&&e.setModalHandler(i),a&&e.setNavigationHandler(a),o&&e.setParamCollectionHandler(o),s&&e.setResultDialogHandler(s),e},[JSON.stringify(t)]);return{execute:(0,K.useCallback)(async e=>{l(!0),d(null),p(null);try{let t=await m.execute(e);return p(t),t.success||d(t.error||`Action failed`),t}catch(e){let t=e.message;d(t);let n={success:!1,error:t};return p(n),n}finally{l(!1)}},[m]),loading:c,error:u,result:f,updateContext:(0,K.useCallback)(e=>{m.updateContext(e)},[m]),runner:m}}var Ca={sm:`min(92vw, 480px)`,md:`min(92vw, 720px)`,lg:`min(92vw, 960px)`,xl:`min(92vw, 1200px)`,full:`min(92vw, 1600px)`};function wa(e){if(!e)return;if(e.width!==void 0)return e.width;let t=e.size;if(t&&t!==`auto`)return Ca[t]}function Ta(e){let{navigation:t,objectName:n,onNavigate:r,onRowClick:i}=e,[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(null),l=t?.mode??`page`,u=wa(t),d=t?.view,f=l===`drawer`||l===`modal`||l===`split`||l===`popover`,p=(0,K.useCallback)(()=>{o(!1),c(null)},[]),m=(0,K.useCallback)(e=>{c(e),o(!0)},[]),h=(0,K.useCallback)((e,a)=>{if(i){i(e,a);return}if(a&&(a.metaKey||a.ctrlKey||a.button===1)){let t=e.id||e._id;if(r&&t!=null){r(t,`new_window`);return}}if(!t){let t=e.id||e._id;r&&t!=null&&r(t,d??`view`);return}if(!(l===`none`||t.preventNavigation)){if(l===`new_window`||t.openNewTab){let t=e.id||e._id;if(r&&t!=null){r(t,`new_window`);return}let i=encodeURIComponent(String(t)),a=n?`/${n}/record/${i}`:`/${i}`;window.open(a,`_blank`);return}if(l===`page`){let t=e.id||e._id;r&&t!=null&&r(t,d??`view`);return}if(f){c(e),o(!0);return}}},[i,t,l,n,r,f,d]);return(0,K.useMemo)(()=>({isOpen:a,selectedRecord:s,mode:l,close:p,open:m,setIsOpen:o,handleClick:h,width:u,view:d,isOverlay:f}),[a,s,l,p,m,h,u,d,f])}var Ea=(0,K.createContext)(!1),Da=({value:e=!0,children:t})=>(0,q.jsx)(Ea.Provider,{value:e,children:t}),Oa=()=>(0,K.useContext)(Ea),X=(0,K.createContext)(null),ka=({children:e,context:t={},onConfirm:n,onToast:r,onModal:i,onNavigate:a,onParamCollection:o,onResultDialog:s,handlers:c})=>{let[l,u]=(0,K.useState)(!1),[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(null),h=(0,K.useMemo)(()=>{let e=new z({...t,ctx:t&&typeof t.ctx==`object`?{...t,...t.ctx}:{...t}});return n&&e.setConfirmHandler(n),r&&e.setToastHandler(r),i&&e.setModalHandler(i),a&&e.setNavigationHandler(a),o&&e.setParamCollectionHandler(o),s&&e.setResultDialogHandler(s),c&&Object.entries(c).forEach(([t,n])=>{e.registerHandler(t,n)}),e},[JSON.stringify(t)]),g=(0,K.useCallback)(async e=>{u(!0),f(null),m(null);try{let t=await h.execute(e);return m(t),t.success||f(t.error||`Action failed`),t}catch(e){let t=e.message;f(t);let n={success:!1,error:t};return m(n),n}finally{u(!1)}},[h]),_=(0,K.useCallback)(async(e,t)=>{u(!0),f(null),m(null);try{let n=await h.executeChain(e,t);return m(n),n.success||f(n.error||`Chain failed`),n}catch(e){let t=e.message;f(t);let n={success:!1,error:t};return m(n),n}finally{u(!1)}},[h]),v=(0,K.useCallback)(e=>{h.updateContext(e)},[h]),y=(0,K.useMemo)(()=>({execute:g,executeChain:_,loading:l,error:d,result:p,runner:h,updateContext:v}),[g,_,l,d,p,h,v]);return(0,q.jsx)(X.Provider,{value:y,children:e})};ka.displayName=`ActionProvider`;function Aa(){let e=(0,K.useContext)(X);if(!e){let e=new z;return{execute:t=>e.execute(t),executeChain:(t,n)=>e.executeChain(t,n),loading:!1,error:null,result:null,runner:e,updateContext:t=>e.updateContext(t)}}return e}function ja(){return(0,K.useContext)(X)!==null}(0,K.createContext)(null);var Ma={toast:{surface:`delegate`,transient:!0},snackbar:{surface:`snackbar`,transient:!0},banner:{surface:`banner`,transient:!1},alert:{surface:`alert`,transient:!1},inline:{surface:`inline`,transient:!1}};function Na(e){return e===`modal`?`alert`:e&&e in Ma?e:`toast`}new Set(Object.keys(Ma));var Pa=new Set([`top_left`,`top_center`,`top_right`,`bottom_left`,`bottom_center`,`bottom_right`]);function Fa(e={}){return{defaultPosition:e.defaultPosition??e.position,defaultDuration:e.defaultDuration??5e3,maxVisible:e.stacking===!1?1:e.maxVisible??5,stackDirection:e.stackDirection??`down`,pauseOnHover:e.pauseOnHover??!0}}var Ia=0,La=(()=>{try{return!1}catch{return!0}})(),Ra={delegate:"pass `onToast` to <NotificationProvider>",snackbar:`mount <NotificationSnackbar /> from @object-ui/components`,banner:`mount <NotificationBanners /> from @object-ui/components`,alert:`mount <NotificationAlerts /> from @object-ui/components`,inline:`mount <NotificationInline /> from @object-ui/components at the raising surface`},za=(0,K.createContext)(null),Ba=({children:e,config:t={},onToast:n})=>{let r=(0,K.useMemo)(()=>Fa(t),[JSON.stringify(t)]),[i,a]=(0,K.useState)([]),o=(0,K.useRef)(new Map),s=(0,K.useRef)(new Map),c=(0,K.useCallback)((e,t)=>{let n=setTimeout(()=>{s.current.delete(e),a(t=>t.filter(t=>t.id!==e))},t);s.current.set(e,{handle:n,endsAt:Date.now()+t,left:t})},[]),l=(0,K.useCallback)(e=>{let t=s.current.get(e);t&&(clearTimeout(t.handle),s.current.set(e,{...t,left:Math.max(0,t.endsAt-Date.now())}))},[]),u=(0,K.useCallback)(e=>{let t=s.current.get(e);t&&(clearTimeout(t.handle),c(e,t.left))},[c]);(0,K.useEffect)(()=>()=>{for(let{handle:e}of s.current.values())clearTimeout(e);s.current.clear()},[]);let d=(0,K.useCallback)(e=>{let t=o.current;return t.set(e,(t.get(e)??0)+1),()=>{let n=(t.get(e)??1)-1;n>0?t.set(e,n):t.delete(e)}},[]),f=(0,K.useCallback)(e=>{let t=`notification-${++Ia}`,i=Na(e.displayType),{surface:s,transient:l}=Ma[i],u={...e,displayType:i,id:t,createdAt:new Date,read:!1};a(e=>[u,...e]),s===`delegate`&&n?.(u,r),La&&s!==`delegate`&&(o.current.get(s)??0)===0&&console.warn(`[NotificationProvider] "${u.title}" declares displayType '${i}' but no ${i} surface is mounted, so it will not be shown. To present it, ${Ra[s]}.`);let d=e.duration??(l?r.defaultDuration:0);return d>0&&c(t,d),t},[r,n,c]),p=(0,K.useCallback)((e,t)=>f({title:e,message:t,severity:`info`}),[f]),m=(0,K.useCallback)((e,t)=>f({title:e,message:t,severity:`success`}),[f]),h=(0,K.useCallback)((e,t)=>f({title:e,message:t,severity:`warning`}),[f]),g=(0,K.useCallback)((e,t)=>f({title:e,message:t,severity:`error`}),[f]),_=(0,K.useCallback)(e=>{a(t=>t.map(t=>t.id===e?{...t,read:!0}:t))},[]),v=(0,K.useCallback)(()=>{a(e=>e.map(e=>({...e,read:!0})))},[]),y=(0,K.useCallback)(e=>{let t=s.current.get(e);t&&(clearTimeout(t.handle),s.current.delete(e)),a(t=>t.filter(t=>t.id!==e))},[]),b=(0,K.useCallback)(()=>{a([])},[]),x=(0,K.useMemo)(()=>i.filter(e=>!e.read).length,[i]),S=(0,K.useMemo)(()=>({notifications:i,unreadCount:x,notify:f,info:p,success:m,warning:h,error:g,markAsRead:_,markAllAsRead:v,dismiss:y,clearAll:b,config:r,pauseAutoDismiss:l,resumeAutoDismiss:u,registerSurface:d}),[i,x,f,p,m,h,g,_,v,y,b,r,l,u,d]);return(0,q.jsx)(za.Provider,{value:S,children:e})};Ba.displayName=`NotificationProvider`;function Va(){let e=(0,K.useContext)(za);if(!e)throw Error(`useNotifications must be used within a <NotificationProvider>. Wrap your app with <NotificationProvider> to use the notification system.`);return e}function Ha(){return(0,K.useContext)(za)!==null}function Ua(e,t){let n=t.maxVisible>0?e.slice(0,t.maxVisible):e;return t.stackDirection===`up`?n:[...n].reverse()}function Wa(e,t){let n=e.position??t?.defaultPosition;if(!n)return;let r=n.replace(/-/g,`_`);return Pa.has(r)?r:void 0}function Ga(e,t){let{notifications:n,registerSurface:r}=Va(),{surface:i}=Ma[e];return(0,K.useEffect)(()=>r(i),[r,i]),(0,K.useMemo)(()=>n.filter(n=>Na(n.displayType)===e&&(e!==`inline`||(n.scope??void 0)===t)),[n,e,t])}var Ka=(0,K.createContext)(null);function qa(){let e=(0,K.useContext)(Ka);if(!e)throw Error(`useDnd must be used within a <DndProvider>. Wrap your app with <DndProvider> to use the drag and drop system.`);return e}function Ja(){return(0,K.useContext)(Ka)!==null}var Ya=(0,K.createContext)(null);function Xa(){return(0,K.useContext)(Ya)}var Za=(0,K.createContext)(null),Z=Object.freeze([]),Qa=Object.freeze({apps:Z,objects:Z,dashboards:Z,reports:Z,pages:Z,loading:!1,error:null,refresh:async()=>{},invalidate:()=>{},ensureType:async()=>[],getItem:async()=>null,getItemsByType:()=>[],getTypeStatus:()=>`ready`});function $a(){return(0,K.useContext)(Za)??Qa}function eo(e,t){let{getItem:n}=$a(),[r,i]=(0,K.useState)({item:null,loading:!!t,error:null});return(0,K.useEffect)(()=>{if(!t){i(e=>e.item===null&&!e.loading&&e.error===null?e:{item:null,loading:!1,error:null});return}let r=!1;return i(e=>({...e,loading:!0,error:null})),n(e,t).then(e=>{r||i({item:e,loading:!1,error:null})}).catch(e=>{r||i({item:null,loading:!1,error:e instanceof Error?e:Error(String(e))})}),()=>{r=!0}},[e,t,n]),r}var to=K.createContext(null),no=({children:e})=>{let t=K.useMemo(()=>{let e=new Map,t=so,n=new Set,r=()=>{let r=new Set;for(let t of e.values())for(let e of t)r.add(e);if(r.size===t.size){let e=!0;for(let n of r)if(!t.has(n)){e=!1;break}if(e)return}t=r,n.forEach(e=>e())};return{getNames:()=>t,subscribe:e=>(n.add(e),()=>{n.delete(e)}),register:(t,n)=>{let i=e.get(t);i&&i.length===n.length&&i.every((e,t)=>e===n[t])||(e.set(t,[...n]),r())},unregister:t=>{e.delete(t)&&r()}}},[]);return(0,q.jsx)(to.Provider,{value:t,children:e})};function ro(){let e=K.useContext(to);return K.useSyncExternalStore(e?e.subscribe:ao,e?e.getNames:oo,e?e.getNames:oo)}function io(e,t){let n=K.useContext(to),r=t.join(`|`);K.useEffect(()=>{if(n)return n.register(e,r.length===0?[]:r.split(`|`)),()=>n.unregister(e)},[n,e,r])}var ao=e=>()=>{},oo=()=>so,so=new Set,co=K.createContext(null),lo=({children:e,...t})=>{let n=K.useMemo(()=>t,[t.objectName,t.recordId,t.dataSource,t.data,t.objectSchema,t.refresh,t.embedded,t.headerSystemActions,t.isFavorite,t.onToggleFavorite]);return(0,q.jsx)(co.Provider,{value:n,children:e})};function uo(){return K.useContext(co)}var fo=K.createContext(null),po=({canEdit:e=!0,locked:t=!1,approvalPending:n,approvalProgress:r,lockedReason:i,children:a})=>{let o=n??t,[s,c]=K.useState(!1),[l,u]=K.useState({}),[d,f]=K.useState(null),[p,m]=K.useState(!1),[h,g]=K.useState(null),_=K.useCallback(t=>{e&&(f(t??null),c(!0),g(null))},[e]),v=K.useCallback((e,t)=>{u(n=>({...n,[e]:t}))},[]),y=K.useCallback(()=>{u({}),c(!1),f(null),m(!1),g(null)},[]),b=K.useMemo(()=>({editing:s,canEdit:e,locked:t,approvalPending:o,approvalProgress:r,lockedReason:i,draft:l,autoFocusField:d,saving:p,error:h,enter:_,setField:v,cancel:y,reset:y,setSaving:m,setError:g}),[s,e,t,o,r,i,l,d,p,h,_,v,y]);return(0,q.jsx)(fo.Provider,{value:b,children:a})};function mo(){return K.useContext(fo)}var ho=K.createContext(null),go=({children:e,...t})=>{let n=K.useMemo(()=>t,[t.items,t.onAddComment,t.onAddReply,t.onToggleReaction,t.mentionSuggestions,t.onUploadAttachments,t.loading,t.error]);return(0,q.jsx)(ho.Provider,{value:n,children:e})};function _o(){return K.useContext(ho)}var vo=(0,K.createContext)({}),yo=({value:e,children:t})=>(0,q.jsx)(vo.Provider,{value:e,children:t});function bo(){return(0,K.useContext)(vo)}var xo=(0,K.createContext)(null),So=({value:e,children:t})=>(0,q.jsx)(xo.Provider,{value:e,children:t});function Co(){return(0,K.useContext)(xo)}function wo(){let{variables:e}=oa(),{updateContext:t}=Aa();return K.useEffect(()=>(t({pageVariables:e}),()=>{t({pageVariables:{}})}),[e,t]),null}wo.displayName=`PageVariableActionBridge`;var To=e=>!!e&&typeof e==`object`;async function Eo(e,t){let n=typeof e?.getObjectSchema==`function`,r=typeof e?.listViews==`function`;if(!n&&!r)return{capable:!1,views:{}};let i=n?e.getObjectSchema(t).then(e=>To(e)?e.listViews??e.list_views:void 0,()=>void 0):Promise.resolve(void 0),a=r?e.listViews(t).then(e=>e,()=>void 0):Promise.resolve(void 0),[o,s]=await Promise.all([i,a]);return{capable:!0,views:Hn(o,s)}}function Do(e,t){let n=(0,K.useContext)(J),r=t??n?.dataSource??null,i=(0,K.useMemo)(()=>{let t=To(e)?e.dataSource:void 0;return Vn(t)?t:void 0},[e]),a=i?.object,o=i?.view,s=a&&o?JSON.stringify([a,o]):``,[c,l]=(0,K.useState)(null);return(0,K.useEffect)(()=>{if(!a||!o)return;let e=!1;return Eo(r,a).then(({capable:t,views:n})=>{if(e)return;if(!t){l({key:s,view:null,error:`dataSource.view "${o}" cannot be resolved: this data source cannot list the saved views of object "${a}".`});return}let r=Un(n,o,a);l(r?{key:s,view:r}:{key:s,view:null,error:Jn(a,o,Object.keys(n))})}),()=>{e=!0}},[r,a,o,s]),(0,K.useMemo)(()=>i?i.view?c?.key===s?c.view===null?{status:`missing`,config:i,error:c.error}:{status:`resolved`,config:i,view:c.view,composed:qn(i,c.view)}:{status:`loading`,config:i}:{status:`ready`,config:i,composed:qn(i)}:{status:`absent`},[i,c,s])}function Oo(e){return!e||e.enabled!==!1&&e.handlerReady!==!1&&e.status!==`stub`&&e.status!==`unavailable`}[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`, `);var ko={compact:32,comfortable:40,spacious:52},Ao={compact:`py-1 px-2`,comfortable:`py-2 px-3`,spacious:`py-3 px-4`},jo={compact:`text-xs`,comfortable:`text-sm`,spacious:`text-base`},Mo=[`compact`,`comfortable`,`spacious`];function No(e=`comfortable`,t){let[n,r]=(0,K.useState)(e),i=t?.rowHeights??ko,a=t?.paddingClasses??Ao,o=t?.fontSizeClasses??jo,s=(0,K.useRef)(t?.onChange);(0,K.useEffect)(()=>{s.current=t?.onChange},[t?.onChange]);let c=(0,K.useRef)(e);(0,K.useEffect)(()=>{e!==c.current&&(c.current=e,r(e))},[e]);let l=(0,K.useCallback)(e=>{r(t=>t===e?t:(queueMicrotask(()=>s.current?.(e)),e))},[]),u=(0,K.useCallback)(()=>{r(e=>{let t=Mo[(Mo.indexOf(e)+1)%Mo.length];return queueMicrotask(()=>s.current?.(t)),t})},[]);return(0,K.useMemo)(()=>({mode:n,setMode:l,cycle:u,rowHeight:i[n],paddingClass:a[n],fontSizeClass:o[n]}),[n,l,u,i,a,o])}function Po(e){return typeof window>`u`?()=>{}:(window.addEventListener(`online`,e),window.addEventListener(`offline`,e),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,e)})}function Fo(){return typeof navigator<`u`?navigator.onLine:!0}function Io(){return!0}var Lo=`objectui-offline-queue`;function Ro(){if(typeof localStorage>`u`)return[];try{let e=localStorage.getItem(Lo);return e?JSON.parse(e):[]}catch{return[]}}function zo(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(Lo,JSON.stringify(e))}catch{}}var Bo=0;function Vo(){return Bo+=1,`mut_${Date.now()}_${Bo}`}var Q={enabled:!0,strategy:`network_first`,offlineIndicator:!0,offlineMessage:`You are currently offline. Changes will be synced when reconnected.`,queueMaxSize:100};function Ho(e={}){let{enabled:t=Q.enabled,strategy:n=Q.strategy,offlineIndicator:r=Q.offlineIndicator,offlineMessage:i=Q.offlineMessage,queueMaxSize:a=Q.queueMaxSize,sync:o}=e,s=(0,K.useSyncExternalStore)(Po,Fo,Io),[c,l]=(0,K.useState)(Ro),[u,d]=(0,K.useState)(`idle`),f=(0,K.useRef)(o);f.current=o,(0,K.useEffect)(()=>{zo(c)},[c]),(0,K.useEffect)(()=>{t&&(s?u===`offline`&&d(`idle`):d(`offline`))},[s,t,u]);let p=(0,K.useCallback)(e=>{t&&l(t=>{let n={...e,id:Vo(),timestamp:Date.now()},r=[...t,n];return r.length>a?r.slice(r.length-a):r})},[t,a]),m=(0,K.useCallback)(()=>{l([])},[]),h=(0,K.useCallback)(async()=>{if(!(!t||c.length===0)){d(`syncing`);try{let e=f.current?.batchSize??c.length,t=c.slice(0,e);await new Promise(e=>setTimeout(e,0)),l(e=>e.filter(e=>!t.some(t=>t.id===e.id))),d(`idle`)}catch{d(`error`)}}},[t,c]);return(0,K.useEffect)(()=>{if(!t||!s||c.length===0)return;let e=setTimeout(()=>{h()},100);return()=>clearTimeout(e)},[s,t]),(0,K.useMemo)(()=>({isOnline:s,enabled:t,syncState:u,strategy:n,pendingCount:c.length,queueMutation:p,sync:h,clearQueue:m,showIndicator:r&&!s,offlineMessage:i}),[s,t,u,n,c.length,p,h,m,r,i])}function Uo(){return{canUndo:L.canUndo,canRedo:L.canRedo,undoDescription:L.peekUndo()?.description,redoDescription:L.peekRedo()?.description,history:L.getHistory()}}function Wo(){return{canUndo:!1,canRedo:!1,undoDescription:void 0,redoDescription:void 0,history:[]}}var Go=Uo();function Ko(e){return L.subscribe(()=>{Go=Uo(),e()})}function qo(){return Go}function Jo(e={}){let t=(0,K.useRef)(e);t.current=e;let n=(0,K.useSyncExternalStore)(Ko,qo,Wo),r=(0,K.useCallback)(async(e,n,r)=>{let i=t.current.dataSource;if(!i)return;let a=r===`undo`?{create:`delete`,update:`update`,delete:`create`}[e.type]:e.type;a===`delete`?await i.delete(e.objectName,e.recordId):a===`update`?await i.update(e.objectName,e.recordId,n):await i.create(e.objectName,n)},[]),i=(0,K.useCallback)(async()=>{let e=L.popUndo();e&&(await r(e,e.undoData,`undo`),t.current.onUndo?.(e))},[r]),a=(0,K.useCallback)(async()=>{let e=L.popRedo();e&&(await r(e,e.redoData,`redo`),t.current.onRedo?.(e))},[r]);return(0,K.useEffect)(()=>{let e=e=>{!(e.ctrlKey||e.metaKey)||e.key.toLowerCase()!==`z`||(e.preventDefault(),e.shiftKey?a():i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i,a]),(0,K.useMemo)(()=>({...n,undo:i,redo:a}),[n,i,a])}function Yo(e={}){let{actions:t=[],context:n={}}=e,r=(0,K.useContext)(X)?.runner??null,i=(0,K.useMemo)(()=>{let e=n&&Object.keys(n).length>0?{...n,ctx:n.ctx&&typeof n.ctx==`object`?{...n,...n.ctx}:{...n}}:n,i=r?new _n(r):new _n(e);if(r&&n&&Object.keys(n).length>0){let e=i.getRunner(),t=e.getEvaluator().getContext().toObject(),r=t&&typeof t.ctx==`object`?t.ctx:{},a=n.ctx&&typeof n.ctx==`object`?n.ctx:n,o={...n,ctx:{...r,...a}};e.updateContext(o)}return i.registerActions(t),i},[r,JSON.stringify(t),JSON.stringify(n)]);return{getActionsForLocation:(0,K.useCallback)(e=>i.getActionsForLocation(e),[i]),getBulkActions:(0,K.useCallback)(()=>i.getBulkActions(),[i]),executeAction:(0,K.useCallback)((e,t)=>i.executeAction(e,t),[i]),handleShortcut:(0,K.useCallback)(e=>i.handleShortcut(e),[i]),engine:i}}var Xo={impersonation:{banner:{message:`You are impersonating {{user}} — every action is recorded as them.`,startedBy:`Started by administrator {{admin}}.`,stop:`Stop impersonating`,stopping:`Stopping…`,stopFailed:`Could not stop impersonating: {{reason}}`,notRestored:`The server accepted the request but did not restore your administrator session — you are still impersonating {{user}}. Sign out and sign in again to end it.`}},capability:{group:{platform:`Platform`,org:`Organization`,other:`Other`},label:{manage_users:`Manage Users`,manage_org_users:`Manage Organization Users`,manage_metadata:`Manage Metadata`,manage_platform_settings:`Manage Platform Settings`,setup_access:`Setup Access`,setup_write:`Write Settings`,studio_access:`Studio Access`}},perm:{facet:{none:`None`,more:`+{{count}} more`,objects:`{{count}} objects`,objects_one:`{{count}} object`,fields:`{{count}} field rules`,fields_one:`{{count}} field rule`,rls:`{{count}} RLS policies`,rls_one:`{{count}} RLS policy`,tabs:`{{count}} tab rules`,tabs_one:`{{count}} tab rule`,adminScope:`Delegated admin configured`,designInStudio:`Design in Studio →`,designInStudioHint:`Design in Studio`}},lookup:{recentlyUsed:`Recently used`,allResults:`All results`,loading:`Loading…`,noOptions:`No options found`,noRecords:`No records found`,createNew:`Create new`,createNamed:`Create new "{{name}}"`,showingResults:`Showing {{shown}} of {{total}} results`,showAllResults:`Show all results ({{count}})`,selectedBadge:`Selected`,browseAll:`Browse all records`,remove:`Remove {{label}}`,selectFirst:`Select {{fields}} first`,selectRecord:`Select record`,recordCount:`{{count}} records`,recordCountOne:`1 record`,pageOf:`Page {{current}} of {{total}}`,filters:`Filters`,clear:`Clear`,yes:`Yes`,filterPlaceholder:`Filter {{label}}`,prevPage:`Previous page`,nextPage:`Next page`,jumpToPage:`Jump to page`,retry:`Retry`},common:{loading:`Loading…`,save:`Save`,cancel:`Cancel`,delete:`Delete`,edit:`Edit`,create:`Create`,filter:`Filter`,reset:`Reset`,confirm:`Confirm`,close:`Close`,back:`Back`,next:`Next`,previous:`Previous`,submit:`Submit`,refresh:`Refresh`,export:`Export`,import:`Import`,yes:`Yes`,no:`No`,ok:`OK`,actions:`Actions`,more:`More`,selectAll:`Select All`,clearAll:`Clear All`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,noData:`No data`,noResults:`No results found`,required:`Required`,optional:`Optional`,selectOption:`Select an option`,select:`Select…`,openChat:`Open chat`,closeChat:`Close chat`,closePanel:`Close panel`,resizeDrawer:`Resize drawer`,itemCount:`{{count}} items`,itemCountOne:`{{count}} item`,toggleSidebar:`Toggle sidebar`,package:`Package`,done:`Done`,editInStudio:`Edit in studio`,record:`Record`,retry:`Retry`,printDialogHint:`Opens your browser’s print dialog (not a PDF export)`},actions:{decisionOutput:{help:`Handed to the flow as a decision output.`,helpMultiValue:`Handed to the flow as a decision output. Comma-separate multiple values.`},resultDialog:{defaultTitle:`Save this value now`,acknowledge:`I have saved this`,copyAll:`Copy all`}},validation:{required:`{{field}} is required`,minLength:`{{field}} must be at least {{min}} characters`,maxLength:`{{field}} must be at most {{max}} characters`,min:`{{field}} must be at least {{min}}`,max:`{{field}} must be at most {{max}}`,email:`Please enter a valid email address`,url:`Please enter a valid URL`,pattern:`{{field}} format is invalid`,formInvalid:`Please check the highlighted fields: {{fields}}`,formInvalidJoiner:`, `,unique:`{{field}} must be unique`,type:`{{field}} must be a valid {{type}}`},form:{noPermissionToSave:`You don't have permission to save this record.`,submitFailed:`Could not save. Please try again.`,addItem:`Add item`,removeItem:`Remove item`,fieldRequired:`This field is required`,invalidFormat:`Invalid format`,saveSuccess:`Saved successfully`,saveError:`Failed to save`,unsavedChanges:`You have unsaved changes. Are you sure you want to leave?`,discardTitle:`Discard changes?`,discardMessage:`You have unsaved changes. If you close this form now, your edits will be lost.`,dialogDescriptionFallback:`Complete the form fields, then submit or cancel.`,keepEditing:`Keep editing`,discard:`Discard`,conflictTitle:`Save conflict`,conflictMessage:`This record was changed by someone else while you were editing. Overwriting will replace their changes with yours.`,conflictLatestVersion:`Their save: {{time}}`,conflictOverwrite:`Overwrite`,stepOf:`Step {{current}} of {{total}}`,createTitle:`Create {{object}}`,editTitle:`Edit {{object}}`,viewTitle:`View {{object}}`,createTargetOrg:`Creates in {{org}}`,saveRecord:`Save`,create:`Create`,update:`Update`,createSuccess:`{{object}} created successfully`,updateSuccess:`{{object}} updated successfully`,deleteSuccess:`{{object}} deleted successfully`,fullscreen:{title:`Edit text`,description:`Edit the full text value, then save or cancel your changes.`,done:`Done`,toggle:`Edit {{label}} fullscreen`,textFallback:`text`}},fields:{relativeDate:{overdue:`Overdue {{count}}d`},file:{dragDropHere:`Drag & drop files here`,dropFilesHere:`Drop files here`,browseHint:`or click to browse`,browseHintCamera:`or click to browse • use the camera button below`,takePhoto:`Take photo`,takeSelfie:`Take selfie`,cameraCapture:`Camera capture`,uploading:`Uploading…`,uploadingPct:`Uploading… ({{pct}}%)`,fileFallback:`File`,upload:`Upload`,remove:`Remove {{name}}`,exceedsMaxSize:`"{{name}}" exceeds max size ({{max}} MB)`,uploadFailed:`Failed to upload "{{name}}": {{error}}`},image:{upload:`Upload image`,addMore:`Add more images`,uploading:`Uploading…`,imageAlt:`Image {{index}}`,crop:`Crop image {{index}}`,remove:`Remove image {{index}}`,enlarge:`Enlarge {{name}}`,preview:`Image preview`,previous:`Previous image`,next:`Next image`,counter:`{{current}} / {{total}}`},richText:{format:`Format: {{format}}`,basicEditorHint:`Rich text editor (basic)`,placeholder:`Enter text…`},options:{empty:`No options available`,selectFirst:`Select {{fields}} first`},objectRef:{loading:`Loading objects…`,placeholder:`Select an object`,search:`Search objects…`,empty:`No objects found`},recipient:{selectTypeFirst:`Select a recipient type first.`,loading:`Loading…`,search:`Search…`,empty:`No matches`,select:`Select a recipient`,selectUser:`Select a user`,selectTeam:`Select a team`,selectBusinessUnit:`Select a business unit`,selectPosition:`Select a position`,selectUnitAndSubordinates:`Select a business unit`},filterCondition:{selectObjectFirst:`Select an object first.`,noCriteria:`No criteria — this rule shares nothing`,criteriaRequired:`Add at least one condition. A rule with no criteria would share every record, so it cannot be saved.`,invalidJson:`Invalid JSON — the rule will match no records until fixed.`,jsonOnly:`This criteria can only be edited as JSON`,editAsJson:`Edit as JSON`,useVisualBuilder:`Use visual builder`},tags:{placeholder:`Type and press Enter to add…`},textarea:{characterCount:`Character count: {{count}} of {{max}}`,charactersRemaining:`Characters remaining: {{count}}`}},table:{rowsPerPage:`Rows per page`,showing:`Showing {{from}} to {{to}} of {{total}}`,noRows:`No rows to display`,sortAsc:`Sort ascending`,sortDesc:`Sort descending`,filterColumn:`Filter {{column}}`,columns:`Columns`,exportCSV:`Export CSV`,exportExcel:`Export Excel`,selectRow:`Select row`,selectAllRows:`Select all rows`,expandRow:`Expand row`,collapseRow:`Collapse row`,hideColumn:`Hide column`,freezeColumn:`Freeze column`,unfreezeColumn:`Unfreeze column`,pageInfo:`Page {{current}} of {{total}}`,totalRecords:`{{count}} total`,noResults:`No results found`,noResultsHint:`Try adjusting your filters or search query.`,cancelAll:`Cancel All`,saveAll:`Save All ({{count}})`,addRecord:`Add record`,open:`Open`,search:`Search…`,modified:`{{count}} row modified`,saveFailed:`Save failed`,selected:`{{count}} selected`,edit:`Edit`,delete:`Delete`},grid:{actions:`Actions`,edit:`Edit`,delete:`Delete`,export:`Export`,exportAs:`Export as {{format}}`,loading:`Loading grid…`,errorLoading:`Error loading grid`,pullToRefresh:`Pull to refresh`,refreshing:`Refreshing…`,openRecord:`Open record`,openMenu:`Open menu`,bulkSelected:`{{count}} selected`,bulkSelectedAllMatches:`{{count}} selected (all matches)`,bulkClear:`Clear`,bulkAllOnPage:`All {{count}} on this page are selected.`,bulkSelectAllMatching:`Select all {{count}} matching`,bulkAllMatchingSelected:`All {{count}} matching records are selected.`,rowHeight:`Row height: {{mode}}`,empty:`Empty`,yes:`Yes`,no:`No`,systemFields:`System`,summary:{pattern:`{{label}}: {{value}}`,count:`Count`,countEmpty:`Empty`,countFilled:`Filled`,countUnique:`Unique`,percentEmpty:`Empty`,percentFilled:`Filled`,sum:`Sum`,avg:`Avg`,min:`Min`,max:`Max`},toolbar:{densityMode:`Density`,densityCompact:`Compact`,densityComfortable:`Comfortable`,densitySpacious:`Spacious`,densityCycleHint:`{{label}} (click to cycle)`,densityCycleShortHint:`Click to cycle`},import:{title:`Import {{object}}`,stepUpload:`Upload`,stepMapping:`Mapping`,stepPreview:`Preview`,uploadDescription:`Upload a CSV or Excel file, or paste from a spreadsheet to get started.`,mappingDescription:`Map columns to object fields.`,previewDescription:`Review data before importing.`,dragDrop:`Drag & drop a CSV or Excel file here, or click to browse`,browseFiles:`Browse Files`,downloadTemplate:`Download template`,downloadTemplateHint:`Get a CSV with the right columns (required fields marked *).`,templateFileName:`{{object}}-import-template`,parsing:`Parsing…`,pasteHint:`or paste (Ctrl/⌘+V) rows copied from Excel or Google Sheets`,legacyXls:`Legacy .xls files aren't supported — please re-save as .xlsx.`,unsupportedFile:`Unsupported file type. Use CSV, TSV, or Excel (.xlsx).`,parseFailed:`Could not read this file. Please check the format and try again.`,fileNeedsHeader:`File must contain a header row and at least one data row.`,mappingTemplate:`Mapping template:`,chooseTemplate:`Choose template…`,noSavedTemplates:`No saved templates`,noneOption:`— None —`,saveCurrent:`Save current`,templateName:`Template name`,save:`Save`,deleteTemplate:`Delete template`,savedMapping:`Saved mapping:`,chooseSavedMapping:`Choose a saved mapping…`,manualMapping:`— Map columns manually —`,transform:`Transform`,savedMappingHint:`Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.`,savedMappingPreviewNote:`The preview shows your source columns; on import, mapping “{{name}}” applies rename, transforms and type coercion on the server.`,csvColumn:`Column`,mapsTo:`Maps To`,typeMismatch:`Looks like {{type}}`,autoMatched:`Auto-matched`,autoMatchedSummary:`Auto-matched {{count}} column(s) — review and adjust below.`,confidence:{high:`High confidence`,medium:`Medium confidence`,low:`Low confidence`},type:{number:`Number`,boolean:`Boolean`,date:`Date`,datetime:`Date & time`,text:`Text`},status:`Status`,skipColumn:`Skip column`,skip:`— Skip —`,mapped:`Mapped`,skipped:`Skipped`,rowsWithErrors:`{{count}} row(s) with errors`,rowsCorrected:`{{count}} row(s) corrected`,clickToFix:`— click a highlighted cell to fix it inline.`,showingRows:`Showing {{shown}} of {{total}} rows`,importing:`Importing… {{progress}}%`,asyncQueued:`Queued — preparing to import…`,asyncProcessing:`Importing {{processed}} of {{total}} rows… {{progress}}%`,asyncLargeHint:`This file is large, so it will be imported in the background.`,largeSampleNotice:`Previewing the first {{shown}} of {{total}} rows.`,cancelImport:`Cancel import`,importCancelled:`Import cancelled`,resultsTruncated:`Showing the first {{count}} row results (of {{total}}).`,importComplete:`Import Complete`,imported:`{{count}} imported`,createdCount:`{{count}} created`,updatedCount:`{{count}} updated`,skippedCount:`{{count}} skipped`,moreErrors:`…and {{count}} more errors`,downloadFailed:`Download failed rows`,options:`Import options`,writeMode:`When a row matches an existing record`,writeModeOpt:{insert:`Always create new`,update:`Update existing (skip if no match)`,upsert:`Update if matched, else create`},matchFields:`Match on`,matchFieldsPlaceholder:`Choose match field(s)…`,matchFieldsHint:`Rows are matched to existing records by these field(s).`,needMatchFields:`Select at least one field to match on.`,matchOnlyField:`(match only)`,optCreateOptions:`Keep unknown option values`,optRunAutomations:`Run automations & triggers`,optTreatHistorical:`Import as historical data`,optTreatHistoricalHint:`(import completed records as-is — skip state-machine checks and keep their original timestamps & author instead of stamping now)`,optSkipBlankKey:`Skip rows with a blank match value`,optBackground:`Import in the background`,optBackgroundHint:`(runs as an undoable job)`,validate:`Validate data`,validating:`Validating…`,validateHint:`Check every row against the server before importing.`,validatePassed:`All {{ok}} rows are valid.`,validateFailed:`{{ok}} valid, {{errors}} with errors.`,errorRowPrefix:`Row {{row}}: `,referenceNotFound:`No matching record for "{{value}}"`,referenceAmbiguous:`"{{value}}" matches more than one record — use a unique value or the record id`,invalidBoolean:`"{{value}}" is not a valid true/false value`,invalidNumber:`"{{value}}" is not a valid number`,invalidDate:`"{{value}}" is not a valid date`,invalidOption:`"{{value}}" is not one of the allowed options`,requiredValue:`This field is required`,matchAmbiguous:`Matches more than one existing record — use a unique value or the record id`,history:`History`,historyBack:`Back to import`,historyDescription:`Recent imports for this object.`,historyHint:`Background import jobs, newest first.`,historyRefresh:`Refresh`,historyLoading:`Loading…`,historyEmpty:`No imports yet.`,historyUnsupported:`Import history isn’t available for this data source.`,historyColStatus:`Status`,historyColRows:`Rows`,historyColResult:`Result`,historyColTime:`When`,errorCount:`{{count}} errors`,undoImport:`Undo import`,undoing:`Undoing…`,undoConfirm:`Undo this import? Records it created will be deleted and records it updated will be restored to their previous values.`,reverted:`Undone`,jobStatus:{pending:`Pending`,running:`Running`,succeeded:`Succeeded`,failed:`Failed`,cancelled:`Cancelled`},cancel:`Cancel`,back:`Back`,next:`Next`,close:`Close`,importNRows:`Import {{count}} Rows`,importingProgress:`Importing…`,required:`Required`,invalidType:`Invalid {{type}}`,legacyReferenceBlocked:`Import blocked: {{fields}} are relation fields that need the server import route to resolve names into record IDs, and this connection doesn’t support it. Importing them as plain text would corrupt the data. Upgrade the backend/client, or unmap these columns and import them separately.`,missingRequiredHint:`Can’t continue — required field(s) not mapped: {{fields}}. Add a matching column to your file, or go back and upload one that includes it.`,legacyFallbackNotice:`Imported via a compatibility fallback: this connection doesn’t support the server import route, so values were saved as text without server-side type coercion. Upgrade the backend/client for full import support (type coercion and relation lookups).`,notAllowed:`This object is not open for import.`,requiredMark:`*`},bulk:{confirmDefault:`This will apply to {{count}} record(s).`,overLimit:`Selection ({{count}}) exceeds the action limit ({{limit}}). Reduce the selection to proceed.`,affectedRecords:`Affected records ({{count}}):`,skippedIneligible:`{{count}} selected record(s) are not eligible for this action and will be skipped.`,rowFallback:`Row {{index}}`,andMore:`… and {{count}} more`,processed:`{{count}} / {{total}} processed`,processedFailed:` · {{count}} failed`,undonePrefix:`Undone — `,succeeded:`Succeeded {{count}} / {{total}}`,resultFailed:` · Failed {{count}}`,retry:`Retry`,downloadErrorCsv:`Download error CSV`,cancel:`Cancel`,back:`Back`,next:`Next`,run:`Run`,running:`Running…`,undo:`Undo`,undoing:`Undoing…`,done:`Done`,selectPlaceholder:`Select…`,loading:`Loading…`}},calendar:{today:`Today`,month:`Month`,week:`Week`,day:`Day`,agenda:`Agenda`,allDay:`All Day`,noEvents:`No events`,newEvent:`New event`,moreEvents:`+{{count}} more`},list:{loading:`Loading records…`,recordCount:`{{count}} records`,recordCountOne:`{{count}} record`,addRecord:`Add record`,tabs:`Tabs`,allRecords:`All Records`,search:`Search`,filter:`Filter`,filterRecords:`Filter Records`,sort:`Sort`,sortRecords:`Sort Records`,sortByIdSuffix:`(by ID)`,sortRelationalHint:`Columns that link to another record are not listed: they can only be sorted by the stored ID, not by the name shown in the cell. To sort by that name, denormalize it onto this object as a stored field, written when the source changes, and sort by that. Not a formula field: it is virtual, so no column is stored for it and the server refuses to sort by one.`,resetSortToDefault:`Reset to view default`,group:`Group`,groupBy:`Group By`,export:`Export`,exportAs:`Export as {{format}}`,color:`Color`,rowColor:`Row Color`,colorByField:`Color by field`,clear:`Clear`,none:`None`,hideFields:`Hide fields`,noItems:`No items found`,noItemsMessage:`There are no records to display. Try adjusting your filters or adding new data.`,firstRunTitle:`Nothing here yet`,firstRunMessage:`Create your first record to get started.`,noMatches:`No matching records`,noMatchesMessage:`No records match your current filters or search. Try adjusting or clearing them.`,loadErrorTitle:`Couldn’t load records`,loadErrorMessage:`Something went wrong while loading this data. Check your connection and try again.`,loadErrorForbiddenTitle:`You don’t have access`,loadErrorForbiddenMessage:`You don’t have permission to view these records. Contact your administrator if you think you should have access.`,loadErrorUnauthorizedTitle:`Sign in required`,loadErrorUnauthorizedMessage:`Your session has expired or you are signed out. Sign in again to view these records.`,loadErrorRejectedTitle:`This view’s query was rejected`,loadErrorRejectedMessage:`The server could not process this view’s filter or query options. Clearing the filters usually fixes it; if the view is saved this way, an administrator needs to correct it.`,loadErrorApiDisabledTitle:`This object isn’t available through the API`,loadErrorApiDisabledMessage:`This page can’t load its records because the object is not exposed through the API. That is a setting on the object itself, not a permission — an administrator has to enable API access for it before this page can work.`,retry:`Retry`,managedBy:{system:{title:`Nothing here yet`,message:`Entries appear automatically when their source action runs (e.g. Submit for Approval, Share, Invite). Trigger one of those on a source record to create a row.`},appendOnly:{title:`No events recorded`,message:`This is an immutable audit log. Rows are written by the platform when events occur — you can export the history but cannot create entries from here.`},betterAuth:{title:`No identity records`,message:`These records are created by the authentication provider — through sign-in, provisioning, and security flows — not added by hand here.`},betterAuthUser:{title:`No users yet`,message:`User accounts are provisioned by the authentication provider, not created here. Invite teammates to your organization and they appear automatically on first sign-in (SSO just-in-time provisioning). App end-users arrive when they sign up through your app.`},betterAuthTeam:{title:`No teams yet`,message:`Teams group members within an organization. Create one with “Create Team”, or they arrive through your auth provider’s organization and SSO provisioning flows.`}},showAll:`Show all`,refresh:`Refresh`,pullToRefresh:`Pull to refresh`,refreshing:`Refreshing…`,share:`Share`,print:`Print`,hideFieldsTitle:`Hide Fields`,dataLimitReached:`Showing first {{limit}} records. More data may be available.`,viewSettings:`View settings`,viewSettingsHint:`Grouping, color, density, and visible fields.`,addGroup:`Add group field`,collapsedByDefault:`Collapsed by default`,removeGroup:`Remove`,inlineEditShort:`Edit inline`,inlineEditLabel:`Edit records inline (click a cell to edit)`,recordEditingTitle:`Record editing`},managedByBadge:{config:{short:`Admin config`,title:`Administrator configuration`,body:`These rows define how the platform behaves at runtime. Author them here; the runtime data they produce lives in a separate table.`},system:{short:`System-managed`,title:`Managed by the platform`,body:`Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.`},systemWritable:{short:`Platform schema`,title:`Platform-defined, admin-writable`,body:`This object's schema is defined by the platform, but its rows are yours to create and edit here. Who may write is governed by delegated administration and record-level security, not by this badge.`},appendOnly:{short:`Read-only · Audit log`,title:`Read-only historical record`,body:`Immutable audit log. Rows cannot be created, edited, or deleted from the UI — they're written by the platform when events occur. Use Export to download for compliance review.`},betterAuth:{short:`Identity`,title:`Managed by the identity provider`,body:`This object's schema is owned by {{provider}}. Direct edits bypass password hashing, session validation, two-factor checks, and audit hooks. Manage these records through your authentication provider's sign-in, invitation, and security flows instead.`}},kanban:{addCard:`Add card`,addColumn:`Add column`,moveCard:`Move card`,deleteCard:`Delete card`,deleteColumn:`Delete column`,noCards:`No cards`,cardTitlePlaceholder:`Enter card title…`,uncategorized:`Uncategorized`,columns:`columns`,requiredFieldsTitle:`Complete required fields`,requiredFieldsDescription:`This move makes the fields below required. Fill them in to continue.`},timeline:{bucket:{overdue:`Overdue`,today:`Today`,tomorrow:`Tomorrow`,thisWeek:`This week`,nextWeek:`Next week`,later:`Later`,noDate:`No date`,unassigned:`Unassigned`},scale:{week:`Week {{n}}`,quarter:`Q{{quarter}} {{year}}`},gantt:{rowLabel:`Items`}},gantt:{column:{taskName:`Task Name`,start:`Start`,end:`End`},toolbar:{prevPeriod:`Previous period`,nextPeriod:`Next period`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,jumpToToday:`Jump to today`,today:`Today`,thisWeek:`This week`,thisMonth:`This month`,showTaskList:`Show task list`,hideTaskList:`Hide task list`,viewMode:`Timeline granularity`,enterFullscreen:`Enter fullscreen`,exitFullscreen:`Exit fullscreen`,criticalPath:`Highlight critical path`,autoSchedule:`Auto-schedule dependencies`,exportPng:`Export as PNG`,exportPdf:`Export PDF`,saveLayout:`Save layout`,refresh:`Refresh`,undo:`Undo`,redo:`Redo`},viewMode:{day:`Day`,week:`Week`,month:`Month`,quarter:`Quarter`,year:`Year`},row:{expand:`Expand`,collapse:`Collapse`,open:`Open details`},aria:{taskList:`Task list`},tooltip:{days:`d`},menu:{view:`View details`,edit:`Edit inline`,delete:`Delete`,addPredecessor:`Add predecessor…`,addSuccessor:`Add successor…`,removeDependency:`Remove dependency`,noCandidates:`No available tasks`,searchTasks:`Search tasks…`},delete:{title:`Delete this task?`,body:`"{{title}}" will be permanently removed. This action cannot be undone.`,cancel:`Cancel`,confirm:`Delete`,deleting:`Deleting…`},drawer:{fallbackTitle:`Task Details`},linkType:{fs:`Finish → Start`,ss:`Start → Start`,ff:`Finish → Finish`,sf:`Start → Finish`},linkEnd:{start:`start`,end:`end`},link:{rejected:{self:`A task cannot depend on itself.`,locked:`This row is locked and cannot take a new dependency.`,group:`A summary row cannot take a dependency — link one of its tasks instead.`,cycle:`That link would create a circular dependency.`}},conflict:{title:`Schedule conflict`,body:`This move conflicts with dependency constraints. Auto-reschedule {{count}} affected task(s)?`,confirm:`Auto-reschedule`,cancel:`Keep as is`},autoScheduleDlg:{title:`Auto-schedule`,body:`Shift {{count}} task(s) later to satisfy dependency links?`,skipped:`{{count}} locked task(s) also violate links and were skipped.`,confirm:`Apply`,cancel:`Cancel`,none:`All dependencies satisfied — nothing to reschedule.`},resource:{header:`Resource`,peak:`Peak`,over:`overloaded`,empty:`No tasks to allocate.`},quickFilter:{all:`All`,clear:`Clear filters`,empty:`No options`,resultSummary:`Showing {shown} / {total} tasks`},readOnly:`Read-only`,readOnlyHint:`Editing is disabled for this view.`,lockedHint:`No edit permission`,writeFailed:`Save failed — the change was rolled back`},view:{editViewConfig:`Edit view config`,rename:`Rename`,duplicateView:`Duplicate View`,shareView:`Share View`,setAsDefault:`Set as Default`,pinView:`Pin View`,unpinView:`Unpin View`,changeViewType:`Change View Type`,deleteView:`Delete View`,addView:`Add View`,unsavedChanges:`Unsaved changes`,saveAsView:`Save as View`,moreViews:`{{count}} more`,activeFilters:`Active filters`,activeSort:`Active sort`,manageViews:`Manage views`,manageAllViews:`Manage all views…`,manageViewsDescription:`Reorder, rename, pin, or delete every view in this object.`,searchViews:`Search views`,addNewView:`Add new view`,done:`Done`,noViewsFound:`No views match your search.`,dragToReorder:`Drag to reorder`,defaultView:`Default view`,defaultBadge:`default`,tabActionsFor:`View actions for {{name}}`,readonlyAriaLabel:`Read-only view`,readonlyTooltip:`System view — defined in code, read-only.`},detail:{back:`Back`,edit:`Edit`,editInline:`Edit`,save:`Save`,saveChanges:`Save changes`,saving:`Saving…`,editFieldsInline:`Edit fields`,editInlineHint:`Double-click to edit`,lockedByApproval:`Locked for approval`,lockedTooltip:`This record has a pending approval request; editing is locked`,writeStrippedTitle:`Saved — but some fields did not take effect`,writeStrippedReadonly:`Read-only, so it did not take effect: {{fields}}`,writeStrippedByState:`Not editable in this record's current state, so it did not take effect: {{fields}}`,approvalPendingEditable:`In approval · editable`,approvalPendingTooltip:`This record has a pending approval request; this step still allows editing`,approvalProgress:`Approvals — {{got}} of {{need}}`,approvalProgressGroups:`Sign-off — {{got}} of {{need}} groups`,approvalProgressLabel:`Approval progress`,approvalsPanelTitle:`Approvals`,cancelApproval:`Recall approval`,cancelApprovalInFlight:`Recalling…`,cancelApprovalTooltip:`Recall the pending approval request to unlock this record`,cancelApprovalTooltipUnlocked:`Recall the pending approval request`,cancelApprovalFailed:`Failed to recall approval`,cancelApprovalUnavailable:`Recalling approvals is not supported on this data source`,linkCopied:`Link copied to clipboard`,linkCopyFailed:`Failed to copy link`,cancel:`Cancel`,cancelEdit:`Discard changes`,sectionMoreDetails:`More details`,concurrentUpdateTitle:`This record was modified by someone else`,concurrentUpdateDescription:`Another user saved a newer version of {{field}} while you were editing. To prevent silently overwriting their change, please choose how to resolve the conflict.`,concurrentUpdateYourEdit:`Your edit`,concurrentUpdateCurrentValue:`Current value`,concurrentUpdateUpdatedBy:`Updated by {{name}}`,concurrentUpdateUpdatedAt:`Updated at {{when}}`,concurrentUpdateReload:`Reload latest`,concurrentUpdateOverwrite:`Overwrite anyway`,concurrentUpdateCancel:`Cancel`,concurrentUpdateRecordLabel:`this record`,openInNewTab:`Open in new tab`,share:`Share`,duplicate:`Duplicate`,export:`Export`,viewHistory:`View history`,delete:`Delete`,moreActions:`More actions`,addReaction:`Add reaction`,pageHeaderActions:`Page header actions`,emojiPicker:`Emoji picker`,reactionCount:`{{emoji}} {{count}} reactions`,reactionCountOne:`{{emoji}} {{count}} reaction`,recordDetail:`Record Detail`,recordDetailWithLabel:`{{label}} Detail`,openAsFullPage:`Open as full page`,recordDetailOverlay:`Record detail overlay for {{title}}.`,addToFavorites:`Add to favorites`,removeFromFavorites:`Remove from favorites`,previousRecord:`Previous record`,nextRecord:`Next record`,recordOf:`{{current}} of {{total}}`,recordNotFound:`Record not found`,recordNotFoundDescription:`The record you are looking for does not exist or may have been deleted.`,goBack:`Go back`,details:`Details`,related:`Related`,relatedRecords:`{{count}} records`,relatedRecordOne:`{{count}} record`,noRelatedRecords:`No related records found`,loading:`Loading…`,copyToClipboard:`Copy to clipboard`,copied:`Copied!`,deleteConfirmation:`Are you sure you want to delete this record?`,deleted:`Record deleted`,editRecord:`Edit record`,viewAll:`View All`,new:`New`,add:`Add`,emptyValue:`—`,activity:`Activity`,history:`History`,historyEmpty:`No history yet`,editRow:`Edit`,deleteRow:`Delete`,deleteRowConfirmation:`Are you sure you want to delete this record?`,deleteRowTitle:`Delete record`,actions:`Actions`,previousPage:`Previous`,nextPage:`Next`,pageOf:`Page {{current}} of {{total}}`,sortBy:`Sort by`,filterPlaceholder:`Filter…`,highlightFields:`Key Fields`,comments:`Comments`,searchComments:`Search comments…`,addCommentPlaceholder:`Add a comment… (Ctrl+Enter to submit)`,noMatchingComments:`No matching comments`,noCommentsYet:`No comments yet`,pinned:`Pinned`,pin:`Pin`,unpin:`Unpin`,justNow:`just now`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`,systemActor:`System`,unknownUser:`Unknown`,createdBy:`Created by`,updatedBy:`Updated by`,created:`Created`,updated:`Updated`,dropFilesToUpload:`Drop files here or click to upload`,attachmentCount:`{{count}} attachment`,attachmentCountPlural:`{{count}} attachments`,removeAttachment:`Remove attachment`,attachments:`Attachments`,uploadAttachment:`Upload`,loadingAttachments:`Loading attachments…`,noAttachments:`No attachments yet. Upload a file to get started.`,downloadAttachment:`Download`,deleteAttachment:`Delete attachment`,attachmentDeleteDenied:`Only the uploader or someone who can edit this record may delete this attachment.`,attachmentParentAccessDenied:`You don't have access to attach files to this record.`,attachmentDownloadDenied:`You don't have access to download this attachment.`,attachmentAuthRequired:`Please sign in to download this attachment.`,attachmentPermissionDenied:`You don't have permission to do that.`,unifiedDiff:`Unified diff`,sideBySideDiff:`Side-by-side diff`,noChanges:`No changes`,previousVersion:`Previous`,currentVersion:`Current`,discussion:`Discussion`,showDiscussion:`Show Discussion ({{count}})`,hideDiscussion:`Hide discussion`,bold:`Bold (Ctrl+B)`,italic:`Italic (Ctrl+I)`,listFormat:`List`,inlineCode:`Inline code`,mentionSomeone:`Mention someone`,preview:`Preview`,submitComment:`Submit (Ctrl+Enter)`,sendComment:`Send`,writeComment:`Write a comment…`,subscribedTooltip:`Subscribed — click to unsubscribe`,unsubscribedTooltip:`Subscribe to notifications`,firstRecord:`First record (Home)`,previousRecordKey:`Previous record (←)`,nextRecordKey:`Next record (→)`,lastRecord:`Last record (End)`,noRecords:`No records`,showEmptyRelated:`+ {{count}} empty`,showEmptyRelated_one:`+ {{count}} empty`,showEmptyRelated_other:`+ {{count}} empty`,searchWhileNavigating:`Search while navigating`,searchRecords:`Search records…`,allActivity:`All Activity`,commentsOnly:`Comments Only`,fieldChangesFilter:`Field Changes`,tasksOnly:`Tasks Only`,leaveCommentPlaceholder:`Leave a comment… (Ctrl+Enter to submit)`,noActivity:`No activity recorded`,loadMore:`Load more`,edited:`(edited)`,via:`via {{source}}`,viewSource:`View source`,replyCount:`{{count}} reply`,replyCountPlural:`{{count}} replies`,replyPlaceholder:`Reply…`,filterActivity:`Filter activity`,openDiscussion:`Open discussion panel`,closeDiscussion:`Close discussion panel`,subscribeAriaLabel:`Subscribe to notifications`,unsubscribeAriaLabel:`Unsubscribe from notifications`,clearSearch:`Clear search`,copyEmail:`Copy email`,copyPhone:`Copy phone number`,copyRecordId:`Copy record ID`,showEmptyFields:`Show {{count}} empty fields`,hideEmptyFields:`Hide empty fields`,noValue:`No value`},chart:{noData:`No chart data available`,loading:`Loading chart…`,nullCategory:`(None)`},report:{total:`Total`,rowTotal:`Row Total`,columnTotal:`Column Total`,grandTotal:`Grand Total`,totals:`Totals`,rowsLabel:`Row`,columnsLabel:`Column`,allLabel:`(All)`,emptyLabel:`(Empty)`,loading:`Loading…`,failedToLoad:`Failed to load matrix: {{message}}`,needsAcross:"Matrix report requires at least one `groupingsAcross` field.",aggregate:{count:`Count`,countDistinct:`Distinct Count`,sum:`Sum`,avg:`Average`,min:`Min`,max:`Max`,first:`First`},editor:{panelTitle:`Edit report`}},map:{searchLocations:`Search locations…`,locationDetails:`Location Details`,markersCount:`{{count}} markers`,invalidCoordinates:`{{count}} record with missing or invalid coordinates excluded from the map.`,invalidCoordinatesPlural:`{{count}} records with missing or invalid coordinates excluded from the map.`},workflow:{draft:`Draft`,active:`Active`,paused:`Paused`,completed:`Completed`,cancelled:`Cancelled`,save:`Save`,publish:`Publish`,addNode:`Add Node`,workflowFlow:`Workflow Flow`,properties:`Properties`,connections:`Connections`,quickConnect:`Quick Connect`,fromPlaceholder:`From…`,toPlaceholder:`To…`,connect:`Connect`,label:`Label`,type:`Type`,description:`Description`,assignee:`Assignee`,assigneeType:`Assignee Type`,user:`User`,role:`Role`,group:`Group`,expression:`Expression`,timeoutMinutes:`Timeout (minutes)`,selectNodeToEdit:`Select a node to edit its properties`,workflowTitle:`Workflow Title`,newWorkflow:`New Workflow`,outConnections:`{{count}} out`,start:`Start`,end:`End`,task:`Task`,userTask:`User Task`,serviceTask:`Service Task`,scriptTask:`Script Task`,approval:`Approval`,condition:`Condition`,parallelGateway:`Parallel Gateway`,joinGateway:`Join Gateway`,boundaryEvent:`Boundary Event`,delay:`Delay`,notification:`Notification`,webhook:`Webhook`,allowConcurrency:`Allow (run concurrently)`,forbidConcurrency:`Forbid (skip new)`,replaceConcurrency:`Replace (cancel existing)`,queueConcurrency:`Queue (run after current)`,conditionEvent:`Condition`,manualEvent:`Manual`,webhookEvent:`Webhook`,timerEvent:`Timer`,signalEvent:`Signal`,versionHistory:`Version History`,importBpmn:`Import BPMN`,exportBpmn:`Export BPMN`,undo:`Undo`,redo:`Redo`,resetZoom:`Reset zoom`},designer:{undo:`Undo`,redo:`Redo`},dashboard:{addWidget:`Add widget`,removeWidget:`Remove widget`,editLayout:`Edit layout`,saveLayout:`Save layout`,resetLayout:`Reset layout`,total:`Total`,noDataAvailable:`No data available`,noDataSourceFor:`No data source available for`,noRows:`No rows`,loading:`Loading…`,pickMeasures:`Pick measures (values) for this dataset widget.`,datasetUnsupported:`This data source does not support dataset queries.`,details:`Details`,exportCsv:`Export CSV`,openInList:`Open in list`,trend:{vsLastQuarter:`vs last quarter`,vsLastMonth:`vs last month`,vsLastWeek:`vs last week`,vsLastYear:`vs last year`,vsYesterday:`vs yesterday`,vsPreviousPeriod:`vs previous period`},filters:{label:`Dashboard filters`,dateRange:`Date range`,allTime:`All time`,custom:`Custom…`,all:`All`,reset:`Reset`,range:{today:`Today`,yesterday:`Yesterday`,this_week:`This week`,last_week:`Last week`,this_month:`This month`,last_month:`Last month`,this_quarter:`This quarter`,last_quarter:`Last quarter`,this_year:`This year`,last_year:`Last year`,last_7_days:`Last 7 days`,last_30_days:`Last 30 days`,last_90_days:`Last 90 days`}}},configPanel:{save:`Save`,discard:`Discard`,close:`Close`,layout:`Layout`,columns:`Columns`,gap:`Gap`,rowHeight:`Row height`,data:`Data`,refreshInterval:`Refresh interval`,appearance:`Appearance`,title:`Title`,showDescription:`Show description`,theme:`Theme`,configuration:`Configuration`,general:`General`,advanced:`Advanced`},appDesigner:{createApp:`Create Application`,editApp:`Edit Application`,basicInfo:`Basic Info`,objects:`Objects`,navigation:`Navigation`,branding:`Branding`,appName:`App Name`,appTitle:`Title`,appDescription:`Description`,appIcon:`Icon`,template:`Template`,layout:`Layout`,layoutSidebar:`Sidebar`,layoutHeader:`Header`,layoutEmpty:`Empty`,selectObjects:`Select Objects`,searchObjects:`Search objects…`,selectAll:`Select All`,deselectAll:`Deselect All`,navBuilder:`Navigation Builder`,addGroup:`Add Group`,addUrl:`Add URL`,addSeparator:`Add Separator`,noNavItems:`No navigation items yet.`,logoUrl:`Logo URL`,primaryColor:`Primary Color`,faviconUrl:`Favicon URL`,preview:`Preview`,complete:`Complete`,snakeCaseHint:`Must be snake_case (e.g. my_app)`,modeEdit:`Edit`,modePreview:`Preview`,modeCode:`Code`,addWidget:`Add Widget`,widgetProperties:`Widget Properties`,dataSource:`Data Source`,valueField:`Value Field`,aggregate:`Aggregate`,colorVariant:`Color Variant`,addComponent:`Add Component`,componentProperties:`Component Properties`,viewType:`View Type`,fields:`Fields`,toolbar:`Toolbar`,showSearch:`Show Search`,showFilters:`Show Filters`,showSort:`Show Sort`,appearance:`Appearance`,rowHeight:`Row Height`,stripedRows:`Striped Rows`,bordered:`Bordered`,livePreview:`Live Preview`,stepBasicDesc:`Name, title, and layout`,stepObjectsDesc:`Select business objects`,stepNavigationDesc:`Build navigation tree`,stepBrandingDesc:`Logo, colors, and favicon`,noObjectsFound:`No objects found.`,noNavItemsHint:`No navigation items yet. Select objects in the previous step or add items manually.`,separator:`Separator`,separatorLabel:`— Separator —`,newGroup:`New Group`,newLink:`New Link`,saveDraft:`Save Draft`,cancelConfirmTitle:`Discard changes?`,cancelConfirmMessage:`You have unsaved changes. Are you sure you want to cancel?`,confirmDiscard:`Discard`,keepEditing:`Keep Editing`,navNoItems:`No navigation items. Click buttons above to add items.`,navNoPreviewItems:`No items`,navLivePreview:`Live Preview`,navCollapseGroup:`Collapse group`,navExpandGroup:`Expand group`,navAddChild:`Add child`,navMoveUp:`Move up`,navMoveDown:`Move down`,navRemove:`Remove`,navObjectPage:`Object Page`,navDashboard:`Dashboard`,navPage:`Page`,navReport:`Report`,navGroup:`Group`,navUrl:`URL`,navSeparator:`Separator`,navTypeObject:`Object`,navTypeDashboard:`Dashboard`,navTypePage:`Page`,navTypeReport:`Report`,navTypeUrl:`URL`,navTypeGroup:`Group`,navTypeSeparator:`Separator`,navTypeAction:`Action`,navTypeComponent:`Component`,navEditIcon:`Edit icon`,navToggleVisible:`Toggle visibility`,navHidden:`Hidden`,navExportSchema:`Export JSON`,navImportSchema:`Import JSON`,navExportSuccess:`Navigation schema exported`,navImportSuccess:`Navigation schema imported`,navImportError:`Invalid navigation JSON`,navIconPlaceholder:`Icon name (e.g. Users)`,dashboardEditor:`Dashboard Editor`,noWidgets:`No widgets. Click a button above to add one.`,widgetLayoutSize:`Layout Size`,widgetWidth:`Width`,widgetHeight:`Height`,dashboardPreview:`Dashboard Preview`,noWidgetsPreview:`No widgets to preview`,pageCanvasEditor:`Page Canvas Editor`,emptyPage:`Empty page. Click a button above to add a component.`,pagePreview:`Page Preview`,noComponentsPreview:`No components to preview`,modePage:`Page`,modeDashboard:`Dashboard`,undo:`Undo`,redo:`Redo`,brandingEditor:`Branding Editor`,brandingExport:`Export JSON`,brandingImport:`Import JSON`,brandingPreview:`Preview`,brandingSampleButton:`Sample Button`,brandingSampleText:`This is how your brand theme will look.`,colorPalette:`Color Palette`,fontFamily:`Font Family`,fontDefault:`Default (System)`,modeLight:`Light`,modeDark:`Dark`,mobilePreview:`Mobile Preview`,objectManager:{title:`Object Manager`,addObject:`New Object`,searchPlaceholder:`Search objects…`,noObjects:`No objects found.`,objectName:`API Name`,objectLabel:`Label`,pluralLabel:`Plural Label`,icon:`Icon`,selectIcon:`Select icon…`,group:`Group`,noGroup:`No Group`,sortOrder:`Sort Order`,enabled:`Enabled`,relationships:`Relationships`,systemBadge:`System`,fieldCount:`{{count}} fields`,ungrouped:`Ungrouped`,deleteConfirmTitle:`Delete Object?`,deleteConfirmMessage:`This will permanently delete the object and all its fields. This action cannot be undone.`},fieldDesigner:{title:`Field Designer`,addField:`New Field`,searchPlaceholder:`Search fields…`,allTypes:`All Types`,noFields:`No fields found.`,fieldName:`API Name`,fieldLabel:`Label`,fieldType:`Type`,fieldGroup:`Group`,description:`Description`,required:`Required`,unique:`Unique`,readOnly:`Read Only`,hidden:`Hidden`,indexed:`Indexed`,externalId:`External ID`,trackHistory:`Track History`,defaultValue:`Default Value`,placeholder:`Placeholder`,referenceTo:`Reference To`,formula:`Formula`,options:`Options`,addOption:`Add Option`,validationRules:`Validation Rules`,addRule:`Add Rule`,systemBadge:`System`,ungrouped:`General`,deleteConfirmTitle:`Delete Field?`,deleteConfirmMessage:`This will permanently delete the field. Existing data in this field will be lost.`,basicSection:`Basic`,typeSpecificSection:`Type Settings`,advancedSection:`Advanced`,typeCategory:{text:`Text`,number:`Number`,date:`Date & Time`,choice:`Choice`,relation:`Relation`,advanced:`Advanced`}}},console:{saveAdvisoryTitle:`Saved — the authoring check raised {{count}} advisory finding(s)`,title:`ObjectOS`,initializing:`Initializing application…`,search:`Search…`,breadcrumb:{dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,system:`System`},nav:{pinItem:`Pin {{name}}`,unpinItem:`Unpin {{name}}`,dragToReorder:`Drag to reorder`,favorites:`Favorites`},settingsHub:{title:`Settings`,subtitle:`Configure your workspace, integrations, and feature flags.`,loadError:`Failed to load settings`,empty:`No settings registered. Plugins can register settings manifests via the SettingsService.`,settingsCount:`{{n}} settings`,beta:`Beta`,categories:{Workspace:`Workspace`,Communication:`Communication`,Security:`Security`,Infrastructure:`Infrastructure`,Beta:`Beta`,Other:`Other`}},settingsView:{backToHub:`All settings`,back:`Back`,noNamespace:`No namespace selected.`,loadError:`Failed to load settings`,saved:`Settings saved`,saveFailed:`Save failed`,lockedByEnv:`Locked by environment: {{key}}`,lockedByEnvNoKey:`Locked by environment`,actionSucceeded:`Action succeeded`,actionFailed:`Action failed`,discard:`Discard`,saveChanges:`Save changes`,unsavedCount:`{{count}} unsaved changes`,unsavedCount_one:`{{count}} unsaved change`,unsavedCount_other:`{{count}} unsaved changes`,cryptoRefusalTitle:`This deployment cannot encrypt secrets`,cryptoRefusalSubjectSuffix:`is declared encrypted, so nothing was written.`,cryptoRefusalNoSubject:`The declared-encrypted value was refused, so nothing was written.`,cryptoRefusalToast:`Cannot encrypt secrets: {{subject}}`,cryptoRefusalToastNoSubject:`Cannot encrypt secrets`},loadingSteps:{connecting:`Connecting to data source`,loadingConfig:`Loading configuration`,preparingWorkspace:`Preparing workspace`},loadingHint:`Setting up a new environment can take a few moments.`,error:{connectionFailed:`Cannot connect to server`,serverUnreachable:`The server at {{url}} is unreachable.`,checkServer:`Please check your network connection or that the backend is running.`,timeout:`Connection timed out after 10 seconds.`},actions:{retry:`Retry`,retrying:`Retrying…`},serverAction:{openingTitle:`Opening…`,openingBody:`Opening… this may take a moment.`,popupBlockedTitle:`Popup blocked`,popupBlockedDescription:`Your browser blocked the new tab from opening.`,popupBlockedAction:`Open in new tab`},shortcuts:{title:`Keyboard Shortcuts`,description:`Quick reference for all available keyboard shortcuts.`,groups:{general:`General`,navigation:`Navigation`,dataViews:`Data Views`,aiChat:`AI assistant`,preferences:`Preferences`},openCommandPalette:`Open command palette`,showShortcuts:`Show keyboard shortcuts`,closeDialog:`Close dialog / panel`,toggleSidebar:`Toggle sidebar`,focusSearch:`Focus search`,createRecord:`Create new record`,refreshData:`Refresh data`,editRecord:`Edit selected record`,newChat:`New chat`,toggleChatsList:`Toggle conversations list`,toggleDarkMode:`Toggle dark mode`},commandPalette:{title:`Command palette`,placeholder:`Type a command or search…`,noResults:`No results found.`,searching:`Searching…`,records:`Records`,recentRecords:`Recently viewed`,objects:`Objects`,dashboards:`Dashboards`,pages:`Pages`,reports:`Reports`,switchApp:`Switch App`,current:`Current`,preferences:`Preferences`,lightTheme:`Light Theme`,darkTheme:`Dark Theme`,systemTheme:`System Theme`,actions:`Actions`,openFullSearch:`Open Full Search Page`,createApp:`Create New App`},ai:{usage:{title:`AI usage`,meterBuild:`Build`,meterAsk:`Ask`,statusOk:`Plenty left`,statusLow:`Running low`,statusFull:`Limit reached`,resetsDaily:`Resets tonight`,resetsMonthly:`Resets next cycle`,ctaUpgrade:`Upgrade to keep going`,ctaTopUp:`Add credits to continue`,ariaLabel:`AI usage: {{status}}`},workspaceTitle:`AI Workspace`,workspaceSubtitle:`Ask, inspect, and resume conversations`,openChats:`Open chats`,chats:`Chats`,chatsDescription:`Browse and manage AI conversations.`,share:`Share`,shareTitle:`Share this conversation`,shareDisabledTitle:`Start chatting to enable sharing`,newChat:`New`,searchChats:`Search chats…`,noChatsYet:`No chats yet`,noChatsDescription:`Start a new conversation to see it here.`,noMatchingChats:`No matching chats.`,newConversation:`New conversation`,renameConversation:`Rename conversation`,deleteConversation:`Delete conversation`,saveRename:`Save rename`,cancelRename:`Cancel rename`,loadingHistory:`Loading conversation history…`,conversationReady:`Conversation ready`,preparingConversation:`Preparing a new conversation`,offlineDemoMode:`Offline demo mode — agent list unavailable`,sendFailedRateLimited:`You're sending messages too quickly. Your message is kept below — wait a moment and try again.`,sendFailedGeneric:`Couldn't send your message. It's kept below — please try again.`,askAgent:`Ask {{agent}}…`,assistant:`Assistant`,liveCanvas:`Live preview — {{app}} (draft)`,liveCanvasUnlisted:`Live app — {{app}} (unlisted until published)`,loadingAgents:`Loading agents…`,askAnything:`Ask anything…`,emptyTitle:`Start a conversation`,emptyDescription:`Ask anything — the assistant has access to your current app context.`,switchAssistant:`Switch assistant`,chooseAgent:`Choose assistant…`,empty:{build:{title:`Build with AI`,description:`Describe an app or workflow in plain language — I draft the objects, screens and automations, then you review and publish.`},ask:{title:`Ask your data`,description:`Ask questions about your records — counts, lists, and summaries across the data you can access.`},editApp:{title:`Editing “{{app}}”`,titleGeneric:`Edit this app`,description:`What would you like to change? I’ll modify this app in place — add a field, object, view or automation, or adjust what’s already there.`}},clearConversation:`Clear`,sendHint:`to send`,agentActivity:`Agent activity`,toolCompleted:`Completed`,toolRunning:`Running`,toolAwaitingApproval:`Awaiting approval`,toolFailed:`Failed`,toolDetailsHidden:`Tool inputs and raw results are hidden in this view.`,copy:`Copy`,copied:`Copied`,regenerate:`Regenerate`,model:`Model`,submit:`Submit`,uploadFiles:`Upload files`,stopResponse:`Stop response`,trace:`trace`,viewTrace:`View trace`,nextSteps:`What's next`,publishDrafts:`Publish`,publishOk:`Published — objects are now live.`,seedWarn:`Published, but some sample data failed to load.`,openBuiltApp:`Open app`,designBuiltApp:`Design in Studio`,previewDraft:`Preview`,previewApp:`Preview app`,resizeSplit:`Resize chat and preview`,hideChats:`Hide chats`,showChats:`Show chats`,planTitle:`Proposed plan`,planQuestions:`Confirm before building`,planAssumptions:`Assumptions`,planApproveHint:`Reply to approve or adjust this plan.`,planApprove:`Build it`,planAdjust:`Adjust`,planApproveMessage:`Looks good — build it as proposed.`,planApproveDefaultsMessage:`Build it with your best assumptions; use sensible defaults for the open questions.`,planAnswerMessage:`For "{{question}}", go with: {{option}}.`,changesTitle:`Confirm changes`,changesConfirmed:`Confirmed`,changesConfirm:`Confirm`,changesConfirmHint:`Reply to confirm or adjust this change.`,changesConfirmMessage:`Confirm — apply the change you just proposed.`,changeVerb:{createObject:`Create object`,addField:`Add field`,modifyField:`Modify field`,deleteField:`Delete field`,createMetadata:`Create`,updateMetadata:`Modify`,createSeed:`Generate sample data`,createPackage:`Create app package`},justNow:`just now`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`,agentLabels:{ask:`Ask`,build:`Build`,dataChat:`Assistant`,metadataAssistant:`Metadata Assistant`},suggestions:{dataChat:{userCount:`How many users are in the system? List their emails.`,recentRecords:`List the 5 most recently created records.`,recordCounts:`Count records for each object.`},metadataAssistant:{buildCrm:`Build a sales CRM — customers, contacts, and a deal pipeline I can total by stage.`,buildApp:`Create a project tracker — projects, tasks with owners and due dates, and a board by status.`,buildFlow:`Design a support desk — tickets with priority, a status workflow, and customer links.`,buildInventory:`Build an inventory app — products, stock levels, suppliers, and low-stock visibility.`,buildRecruiting:`Make an applicant tracker — candidates, open roles, interview stages, and notes.`},generic:{help:`What can you help me with?`,availableObjects:`List the available data objects.`,recentActivity:`Summarize my recent activity.`},editApp:{addField:`Add a field to one of the objects.`,addObject:`Add a new object and relate it to an existing one.`,addDashboard:`Add a dashboard for the key metrics.`,addAutomation:`Add an automation — an approval, a status flow, or a notification.`}},collapseToDock:`Collapse to side panel`,switchApp:`Switch app`,switchAppLabel:`Build conversations by app`,newApp:`New app`,connectionWaiting:`Waiting for server…`,connectionStalled:`Still working…`,connectionOffline:`Connection lost — reconnecting…`,designingPlan:`Designing your app…`,designingPlanHint:{data:`Mapping out the data you’ll track…`,objects:`Shaping objects and their fields…`,relations:`Connecting related records…`,lookups:`Setting up relationships and lookups…`,views:`Planning the screens and views…`,forms:`Laying out forms and lists…`,defaults:`Adding sensible defaults and validations…`,dashboard:`Sketching a dashboard to track it…`,review:`Double-checking the structure hangs together…`,finalize:`Pulling the plan together…`},planBuilding:`Building…`,planBuilt:`Built`,planDeferred:`Not yet built`,planReady:`The plan is ready. Build it now, or tell me what to adjust.`,published:`Published`,publishFailed:`Publish failed`,unavailableTitle:`AI assistant unavailable`,unavailableDescription:`This deployment doesn't have an AI assistant enabled. Everything else works as usual.`,unavailableError:`Couldn't reach the AI service. It may be temporarily offline — try again, or head back home.`,unavailableRetry:`Try again`,unavailableHome:`Back to home`,dock:{title:`Assistant`,description:`AI assistant chat`,resize:`Resize chat`,collapse:`Collapse chat`,maximize:`Open full page`,open:`Open assistant`},group:{today:`Today`,yesterday:`Yesterday`,previous7Days:`Previous 7 days`,previous30Days:`Previous 30 days`,older:`Older`}},errors:{somethingWentWrong:`Something went wrong`,unexpectedError:`An unexpected error occurred while rendering this view.`,tryAgain:`Try Again`,goHome:`Go Home`,errorDetails:`Error Details (dev only)`},notFound:{title:`Page not found`,description:`The URL you followed does not match any view in this app.`,back:`Go back`},theme:{toggle:`Toggle theme`,light:`Light`,dark:`Dark`,system:`System`},objectData:{badge:`Data`,description:`URL-defined data slice — not bound to any saved view.`,filteredBy:`Filtered by`,removeFilter:`Remove filter {{field}}`,saveAsView:`Save as view`,noAccessTitle:`Access denied`,noAccess:`You do not have permission to view this data.`},identityImport:{policyTitle:`Sign-in setup for imported users`,policy:{auto:`Automatic (recommended)`,invite:`Send invitations`,temporary:`Temporary passwords`,none:`No password (identity only)`},policyHint:{auto:`Reachable users get an invitation (email or SMS); anyone we can't reach gets a one-time password, shown ONCE on the result screen. Works with or without an email/SMS service.`,invite:`Every created user gets a set-your-password email (or an invitation SMS for phone-only rows). Requires a configured email/SMS service — unreachable rows fail.`,temporary:`For deployments without email/SMS: every created user gets a one-time password, shown ONCE on the result screen. First sign-in forces a change.`,none:`Users first sign in with a phone OTP, magic link, or password-reset link, then set their own password.`},passwordsNote:`Temporary passwords — shown once, never stored. Save them now; each user must change theirs at first sign-in.`,passwordsMore:`More entries omitted — use the download.`,passwordsDownload:`Download CSV`},objectView:{objectNotFound:`Object Not Found`,objectNotFoundDescription:`The object "{{objectName}}" does not exist in the current configuration.`,objectNotFoundHint:`Check your app navigation settings or select a different object from the sidebar.`,filterOrNotSavable:`This filter uses OR between conditions, which a saved view cannot store yet. It still applies to this list — remove the OR grouping to save it to the view.`,filterNestedNotSavable:`This filter uses nested condition groups, which a saved view cannot store. Flatten it to a single list of conditions to save it to the view.`,systemViewReadonly:`System view defined in code — read-only.`,cannotEditMetaView:`This view is built in and defined in code — it cannot be changed.`,cannotDeleteMetaView:`This view is built in and defined in code — it cannot be deleted.`,expandToPage:`Open as full page`,allRecords:`All Records`,exitDesignMode:`Exit Design Mode`,enterDesignMode:`Enter Design Mode`,metadataInspector:`Metadata Inspector`,editView:`Edit View`,addView:`Add View`,designTools:`Design tools`,new:`New`,import:`Import`,importTitle:`Import from CSV`,importedToast:`Imported {{count}} row(s).`,importedWithSkipped:`Imported {{ok}} row(s); skipped {{skipped}}.`,configureView:`Configure View`,closePanel:`Close panel`,showAdvancedSettings:`Show advanced settings`,showFewerSettings:`Show fewer settings`,page:`Page`,pageConfigHint:`Toolbar, navigation & view shell settings`,listConfigHint:`Data rendering, columns & appearance for this list type`,general:`General`,generalHint:`View title, description, and type`,toolbar:`Toolbar`,toolbarHint:`Search, filter, sort, group, and density toggles`,toolbarEnabledCount:`{{count}} of {{total}} enabled`,navigationSection:`Navigation`,navigationHint:`Row click behavior and detail view settings`,records:`Records`,recordsHint:`Selection mode, add record, and inline editing`,exportPrint:`Export & Print`,exportPrintHint:`Export formats, printing, and record count display`,showAllFields:`Show All`,hideAllFields:`Hide All`,searchFields:`Search fields…`,title:`Title`,description:`Description`,data:`Data`,source:`Source`,columns:`Columns`,filterBy:`Filter by`,sortBy:`Sort by`,appearance:`Appearance`,showDescription:`Show description`,viewType:`View type`,userFilters:`User filters`,enableSearch:`Enable search`,enableFilter:`Enable filter`,enableSort:`Enable sort`,enableHideFields:`Enable hide fields`,enableGroup:`Enable group`,enableColor:`Enable color`,enableDensity:`Enable density`,userActions:`User actions`,addRecordViaForm:`Add records through a form`,advanced:`Advanced`,allowExport:`Allow export`,recordCount:`{{count}} records`,noDescription:`No description`,none:`None`,columnsConfigured:`{{count}} columns`,save:`Save`,discard:`Discard`,createView:`Create View`,createViewDesc:`Pick a view type, then give it a name. You can change every setting afterwards.`,cancel:`Cancel`,create:`Create`,delete:`Delete`,deleteViewTitle:`Delete view`,deleteViewConfirm:`Are you sure you want to delete the view "{{name}}"? This cannot be undone.`,bulkDeleteConfirm:`Delete {{count}} selected records? This cannot be undone.`,duplicateViewName:`A view with this name already exists.`,viewTypeGrid:`Grid`,viewTypeGridDesc:`A spreadsheet-style table of records.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Cards grouped into columns by a single-select field.`,viewTypeCalendar:`Calendar`,viewTypeCalendarDesc:`Records placed on a monthly calendar by date.`,viewTypeGallery:`Gallery`,viewTypeGalleryDesc:`Large image cards driven by an attachment field.`,viewTypeTimeline:`Timeline`,viewTypeTimelineDesc:`Records along a horizontal time axis.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Project bars with start / end and dependencies.`,viewTypeMap:`Map`,viewTypeMapDesc:`Geographic markers from latitude / longitude fields.`,viewTypeChart:`Chart`,viewTypeChartDesc:`Aggregated bar / line / pie visualisations.`,viewTypeTree:`Tree`,viewTypeTreeDesc:`Nest self-referencing records into a hierarchy by a parent field.`,parentField:`Parent field`,parentFieldHelp:`The field pointing to the parent record (same object) that defines the hierarchy. Only self-referencing fields qualify.`,newView:`New View`,viewName:`Name`,viewNameHelp:`Machine key (snake_case). Auto-filled from the title — edit if you like.`,viewNameRequired:`Enter a key (lowercase letters, numbers, underscore). Not auto-filled for non-Latin titles.`,viewNameInvalid:`Use lowercase letters, numbers and underscores; start with a letter or underscore.`,typeOptions:`Type Options`,groupByField:`Group by field`,groupByFieldHelp:`The kanban groups records into columns by this field's values.`,startDateField:`Start date field`,startDateFieldHelp:`The calendar places records on the cell matching this date.`,ganttStartDateFieldHelp:`The left edge of each Gantt bar uses this date.`,ganttEndDateFieldHelp:`The right edge of each Gantt bar uses this date.`,timelineDateFieldHelp:`Records are placed on the timeline by this date.`,titleField:`Title field`,latitudeField:`Latitude field`,latitudeFieldHelp:`Field providing the latitude coordinate (geo fields only).`,longitudeField:`Longitude field`,longitudeFieldHelp:`Field providing the longitude coordinate (geo fields only).`,imageField:`Image field`,imageFieldHelp:`The gallery cover comes from this image or attachment field.`,dateField:`Date field`,selectField:`Select field…`,selectOption:`Select…`,noEligibleFieldForType:`No eligible field of this type. Add one to the object first.`,viewTypeUnavailable:`This object has no field that can serve as "{{field}}".`,viewTypeUnavailableShort:`Not supported by this object.`,chartType:`Chart type`,chartTypeHelp:`Determines how the data is rendered.`,chartTypeBar:`Bar chart`,chartTypeLine:`Line chart`,chartTypePie:`Pie chart`,chartTypeArea:`Area chart`,chartTypeScatter:`Scatter chart`,xAxisField:`X-axis field`,xAxisFieldHelp:`The categorical or time dimension.`,yAxisField:`Y-axis field`,yAxisFieldHelp:`The numeric field to aggregate.`,gridOptionsHint:`Grid view uses the columns configured above.`,groupBy:`Group by`,prefixField:`Prefix field`,fields:`Fields`,fieldsVisible:`{{count}} visible`,sortsCount:`{{count}} sorts`,filtersCount:`{{count}} filters`,endDateField:`End date field`,color:`Color`,fieldTextColor:`Field text color`,rowHeight:`Row height`,wrapHeaders:`Wrap headers`,showFieldDescriptions:`Show field descriptions`,collapseAllByDefault:`Collapse all by default`,striped:`Striped rows`,bordered:`Bordered cells`,inlineEdit:`Edit records inline`,addDeleteRecordsInline:`Add/delete records inline`,clickIntoRecordDetails:`Click into record details`,navigationMode:`Navigation mode`,navigationWidth:`Navigation width`,navigationWidthHint:`Available for drawer, modal, and split navigation modes`,openNewTab:`Open in new tab`,openNewTabHint:`Available for page and new window navigation modes`,selectionMode:`Selection mode`,selectionNone:`None`,selectionSingle:`Single`,selectionMultiple:`Multiple`,pageSize:`Page size`,pageSizeOptions:`Page size options`,exportFormats:`Export formats`,exportMaxRecords:`Max records`,exportIncludeHeaders:`Include headers`,exportFileNamePrefix:`File name prefix`,searchableFields:`Searchable fields`,filterableFields:`Filterable fields`,resizableColumns:`Resizable columns`,densityCompact:`Compact`,densityComfortable:`Comfortable`,densitySpacious:`Spacious`,densityMode:`Density mode`,hiddenFields:`Hidden fields`,rowActions:`Row actions`,bulkActions:`Bulk actions`,sharing:`Sharing`,sharingEnabled:`Enable sharing`,sharingVisibility:`Visibility`,addRecordEnabled:`Enable add record`,addRecordPosition:`Position`,addRecordMode:`Mode`,addRecordFormView:`Form view`,conditionalFormatting:`Conditional formatting`,addRule:`Add rule`,quickFilters:`Quick filters`,addQuickFilter:`Add quick filter`,ufElements:`Elements`,ufDropdown:`Dropdown`,ufTabs:`Tabs`,ufToggle:`Toggle`,ufAddField:`+ Add filter field…`,ufNoFields:`No fields available`,ufAddTab:`+ Add tab`,ufTabLabel:`Label`,ufShowAllRecords:`Show "All records" tab`,ufAllowAddTab:`Allow adding tabs`,showRecordCount:`Show record count`,allowPrinting:`Allow printing`,virtualScroll:`Virtual scroll`,emptyStateTitle:`Empty state title`,emptyStateMessage:`Empty state message`,emptyStateIcon:`Empty state icon`,ariaLabel:`ARIA label`,ariaDescribedBy:`ARIA described by`,ariaLive:`ARIA live`,accessibility:`Accessibility`,viewTabs:`View Tabs`},localeSwitcher:{label:`Language`}},auth:{login:{title:`Sign in to your account`,description:`Enter your email and password to continue`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordPlaceholder:`Enter your password`,forgotPasswordText:`Forgot password?`,submitButton:`Sign In`,submittingButton:`Signing in…`,noAccountText:`Don't have an account?`,signUpText:`Sign up`,signingIn:`Signing you in…`,ssoHandoff:`Continue to {{target}}`,emailOrPhoneLabel:`Email or phone number`,emailOrPhonePlaceholder:`name@example.com or +1 555 000 0000`,phoneLabel:`Phone number`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Verification code`,otpCodePlaceholder:`6-digit code`,sendOtpButton:`Get code`,resendOtpCountdownText:`Resend in {seconds}s`,usePhoneOtpText:`Sign in with verification code`,usePasswordSignInText:`Sign in with password instead`,devAdminHint:{title:`Development instance`,body:`Sign in with the seeded dev admin:`,dismiss:`Dismiss`},errors:{invalidCredentials:`Invalid email or password. Please try again.`,emailNotVerified:`Please verify your email address before signing in.`,oauthCallbackFailed:`Single sign-on could not be completed — the sign-in link expired or was already used. Please try again.`}},register:{title:`Create an account`,description:`Create your account to start building.`,nameLabel:`Name`,namePlaceholder:`John Doe`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordPlaceholder:`Create a password (min. 8 characters)`,confirmPasswordLabel:`Confirm Password`,confirmPasswordPlaceholder:`Confirm your password`,passwordMismatchError:`Passwords do not match`,passwordTooShortError:`Password must be at least 8 characters`,submitButton:`Create Account`,submittingButton:`Creating account…`,hasAccountText:`Already have an account?`,signInText:`Sign in`,errors:{userExists:`An account with this email already exists. Try signing in instead.`},verifyInbox:{title:`Check your inbox`,description:`We've sent a verification link to {{email}}. Click the link to activate your account.`,resend:`Resend verification email`,resending:`Sending…`,resent:`Verification email sent.`,backToSignIn:`Back to sign in`}},forgotPassword:{title:`Reset your password`,description:`Enter your email address and we'll send you a link to reset your password`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,submitButton:`Send Reset Link`,submittingButton:`Sending…`,successTitle:`Check your email`,successDescription:`We've sent a password reset link to {{email}}. Please check your inbox.`,backToSignInText:`Back to sign in`,rememberPasswordText:`Remember your password?`,signInText:`Sign in`,phoneLabel:`Phone number`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Verification code`,otpCodePlaceholder:`6-digit code`,sendOtpButton:`Get code`,resendOtpCountdownText:`Resend in {seconds}s`,newPasswordLabel:`New password`,newPasswordPlaceholder:`Enter a new password`,resetButton:`Reset Password`,usePhoneResetText:`Reset via SMS code`,useEmailResetText:`Reset via email instead`,phoneSuccessTitle:`Password reset`,phoneSuccessDescription:`Your password has been reset. You can now sign in with your new password.`},resetPassword:{title:`Set a new password`,description:`Choose a password you have not used before.`,newPassword:`New password`,confirmPassword:`Confirm password`,submit:`Update password`,submitting:`Updating…`,success:`Password updated`,failed:`Reset failed`,invalidToken:`This reset link is invalid or has expired.`,missingToken:`Reset link is missing or expired`,passwordsMismatch:`Passwords do not match`,requestNewLink:`Request a new link`},verifyEmail:{title:`Verify your email address`,description:`We sent a verification link to your email address. Please click the link to verify your account.`,sentTo:`Sent to:`,verifyingTitle:`Verifying…`,verifyingDescription:`Hang tight while we confirm your email.`,successTitle:`Email verified`,successDescription:`Your email is confirmed. You can now sign in.`,errorTitle:`Verification failed`,errorDescription:`Verification failed. Please request a new link.`,missingToken:`Verification link is missing a token.`,emailMissing:`Email address is missing`,resendButton:`Resend verification email`,resending:`Sending…`,resent:`Email sent! Check your inbox`,resentSuccess:`Verification email sent!`,resentDescription:`Please check your inbox and click the verification link.`,resendFailed:`Cannot resend verification email`,resendUnavailable:`Email delivery may not be configured for this environment. Contact support if this persists.`,signInLink:`Go to sign in`,backToSignIn:`Back to sign in`,backToLogin:`Back to login`,checkSpam:`Didn't receive the email? Check your spam folder or contact support.`,or:`Or`},setup:{welcomeTitle:`Welcome to ObjectStack`,description:`Create the first owner account to finish setting up this deployment.`,yourName:`Your name`,orgName:`Organization name`,orgNamePlaceholder:`Acme Inc.`,emailLabel:`Email`,emailPlaceholder:`name@example.com`,passwordLabel:`Password`,passwordHint:`Minimum 8 characters`,submit:`Create owner account`,submitting:`Setting up…`,failed:`Setup failed`},device:{title:`Authorize new device`,subtitle:`Approve this device to sign in as {{email}}.`,userCodeLabel:`Device code`,requesterLabel:`Connection request from`,approveWarning:`Only approve if you started this connection yourself a moment ago. Once approved, this runtime can access your organization's private packages.`,loggedInAs:`Signed in as {{email}}`,approve:`Approve device`,approving:`Approving…`,approvedTitle:`Device authorized`,approvedDescription:`You can return to the device — it should sign in shortly.`,approveSuccess:`Device authorized`,approveSuccessDescription:`You can close this window.`,approveFailed:`Approval failed`,deny:`Deny request`,denying:`Denying…`,deniedTitle:`Access denied`,deniedDescription:`The device will not be granted access.`,denyFailed:`Failed to deny request`,invalidTitle:`Invalid device link`,invalidDescription:`No device code was provided in the URL.`,disabledTitle:`Device authorization not enabled`,disabledDescription:`This deployment does not have device authorization enabled, so this device cannot be approved here.`,loading:`Loading…`,cancel:`Cancel`},shell:{tenantHostHint:`You are signing in to this workspace`},setPassword:{title:`Set a recovery password`,description:`You signed in via single sign-on. Set a local password so you can still sign in to this environment directly if SSO ever becomes unavailable.`,email:`Email`,newPassword:`New password`,confirmPassword:`Confirm password`,submit:`Set password`,submitting:`Saving…`,success:`Local password set`,failed:`Could not set password`,passwordsMismatch:`Passwords do not match`,noSession:`Your session has expired.`,backToSignIn:`Sign in again`},layout:{headline:`Build powerful business applications, faster.`,subhead:`The universal platform for enterprise data management, workflows, and analytics.`},remediation:{signOut:`Sign out instead`,password:{title:`Your password has expired`,fallbackMessage:`Please set a new password to continue.`,current:`Current password`,next:`New password`,confirm:`Confirm new password`,submit:`Change password & continue`,submitting:`Updating…`,mismatch:`New passwords do not match.`,failed:`Could not change password.`},mfa:{title:`Set up two-factor authentication`,fallbackMessage:`Your organization requires an authenticator app to continue.`,confirmPassword:`Confirm your password`,continue:`Continue`,preparing:`Preparing…`,enrollFailed:`Could not start enrollment.`,scanTitle:`Scan with your authenticator`,scanBody:`Scan this QR code with Google Authenticator, 1Password, Authy, etc., then enter the 6-digit code.`,backupTitle:`Save your backup codes`,backupBody:`Store these somewhere safe — each can be used once if you lose your device.`,codeLabel:`6-digit code`,verify:`Verify & continue`,verifying:`Verifying…`,invalidCode:`Invalid code. Try again.`}}},oauth:{consent:{title:`{{appName}} wants to access your account`,request:`{{appName}} is requesting permission{{suffix}}.`,unknownApp:`an application`,willAllow:`This app will be able to:`,scope:{openid:`Confirm your identity`,profile:`Read your basic profile (name, picture)`,email:`Read your email address`,offlineAccess:`Stay signed in (refresh access)`},deny:`Deny`,authorize:`Authorize`,submitting:`Authorizing…`,granted:`Access granted`,denied:`Access denied`,noRedirect:`No redirect URL returned by the server.`,failed:`Consent failed`,footer:`You can revoke access at any time from your account settings.`}},profile:{title:`Profile`,subtitle:`Manage your account settings`,saving:`Saving…`,avatar:{upload:`Upload`,replace:`Replace`,remove:`Remove`},info:{title:`Personal Information`,description:`Update your name and view account details`,saved:`Profile updated successfully.`,name:`Name`,email:`Email`,emailImmutable:`Email cannot be changed.`,role:`Role`,save:`Save Changes`},password:{changeTitle:`Change Password`,setTitle:`Set Local Password`,changeDescription:`Update the password you use to sign in to this environment.`,setDescription:`You signed in via single sign-on. Set a local password to also sign in with email and password on this environment.`,current:`Current password`,new:`New password`,password:`Password`,confirm:`Confirm password`,tooShort:`Password must be at least 8 characters`,mismatch:`Passwords do not match`,enterCurrent:`Enter your current password`,changed:`Password changed.`,localSet:`Local password set. You can now sign in with email and password on this environment.`,changeAction:`Change password`,setAction:`Set password`}},errors:{networkError:`Network error. Please check your connection.`,serverError:`Server error. Please try again later.`,notFound:`Resource not found.`,unauthorized:`You are not authorized to perform this action.`,forbidden:`Access denied.`,timeout:`Request timed out. Please try again.`,unknown:`An unexpected error occurred.`},workspace:{label:`Workspaces`,default:`My Workspace`,switch:`Switch workspace`,create:`Create workspace`,createTitle:`Create a workspace`,createDescription:`A workspace is a shared space for your team to collaborate.`,createButton:`Create workspace`,nameLabel:`Workspace name`,namePlaceholder:`e.g., Acme Inc`,slugLabel:`URL slug`,slugHint:`Used in URLs. Only lowercase letters, numbers, and hyphens.`,invite:`Invite member`,members:`Members`,settings:`Workspace settings`,multiOrgDisabled:`Creating new organizations is disabled on this instance.`,createFailed:`Failed to create workspace`},help:{onThisPage:`On this page`,appDocs:`This app's docs`,allDocs:`All documentation`,keyboardShortcuts:`Keyboard shortcuts`,onlineDocs:`Online documentation`},sidebar:{settings:`Settings`,help:`Help`,helpTooltip:`Help & Documentation`,activityFeed:`Activity feed`,notifications:`Notifications`,approvals:`Approvals`,inbox:`Inbox`,inboxAriaLabel:`Open inbox`,area:`Area`,scope:`Scope`,packageManagement:`Package management`,searchNavigation:`Search navigation…`,recent:`Recent`,favorites:`Favorites`,starred:`Starred`,removeFromFavorites:`Remove {{name}} from favorites`},topbar:{aiAssistant:`AI Assistant`,designInStudio:`Design in Studio`,openAssistant:`Open {{name}} assistant`,offline:`Offline`,usersOnline:`Users currently online`,switchView:`Switch view`,switchObject:`Switch Object`,connection:{connected:`Connected`,connecting:`Connecting…`,reconnecting:`Reconnecting…`,disconnected:`Disconnected`,error:`Connection Error`},stage:{preview:`Preview`,beta:`Beta`,tooltip:`This platform is in preview — features may change.`}},home:{title:`Home`,subtitle:`Your workspace dashboard`,nav:`Home`,allApps:`All Applications`,yourApps:`Your apps`,showMoreApps:`More`,showLess:`Show less`,continueEmpty:`Items you open will show up here.`,actionCenter:{title:`Needs your attention`,empty:`You're all caught up`},greetingMorning:`Good morning`,greetingAfternoon:`Good afternoon`,greetingEvening:`Good evening`,greetingNight:`Working late`,heroTagline:`Pick up where you left off, or explore something new.`,build:{title:`Build an app`,subtitle:`Start from scratch — design objects, forms, automations and interfaces.`},template:{title:`Start with a template`,subtitle:`Install a template app from the marketplace and customize it.`},open:`Open`,stats:{apps:`Applications`,starred:`Starred`,recent:`Recent items`},loading:`Loading workspace…`,recent:`Recent`,starred:`Starred`,welcome:`Build your business system with AI`,welcomeDescription:`Describe your business in one sentence — AI generates the objects, screens, APIs and agent tools. Or start from scratch.`,welcomeAdminDescription:`Describe your business in one sentence — AI generates the objects, screens, APIs and agent tools. Or set things up yourself from the menu on the left.`,welcomeAdminDescriptionNoBuild:`Set up your first application from the Administration menu on the left. Once you have data, the AI assistant can help you explore it.`,welcomeAdminDescriptionNoAi:`Set up your first application from the Administration menu on the left.`,noAppsTitle:`No applications yet`,noAppsDescription:`Your workspace is being set up — apps your admin shares with you will show up here.`,buildWithAI:`Build with AI`,askAI:`Ask AI`,recoveryReminder:{message:`Set a recovery password so you can still sign in if single sign-on is ever unavailable.`,cta:`Set password`,dismiss:`Dismiss`},pendingDrafts:{message:`You have {{count}} unpublished change(s) — publish to make them live.`,cta:`Publish`,publishing:`Publishing…`,published:`Published! Your changes are live.`,publishFailed:`Publish failed`,nothing:`Nothing to publish.`,probeWarn:`Published, but verification found problems.`,seedWarn:`Published, but some sample data failed to load.`,publishedVerified:`Published & verified — {{count}} sample row(s) live.`,capabilityWarn:`Authoring check: {{count}} capability reference(s) resolve nowhere.`},createFirstApp:`Create app manually`,systemSettings:`System Settings`,browseMarketplace:`Browse App Marketplace`,quickActions:{title:`Quick Actions`,createApp:`Create App`,createAppDesc:`Start with a new application`,manageObjects:`Manage Objects`,manageObjectsDesc:`Configure data models`,systemSettings:`System Settings`,systemSettingsDesc:`Configure your workspace`},recentApps:{title:`Recently Accessed`,itemType:{object:`Object`,dashboard:`Dashboard`,page:`Page`,record:`Record`}},starredApps:{title:`Starred`},gettingStarted:{title:`Make this home yours`,description:`Star an app to pin it here for one-click access. Anything you open will show up under Recently Accessed automatically.`,cta:`Browse all applications`},appCard:{noDescription:`No description`,default:`Default`}},layout:{appSwitcher:{home:`Home`,switchApplication:`Switch Application`,appsAvailable:`{{count}} apps available`,addApp:`Add App`,editApp:`Edit App`,editNavigation:`Edit Navigation`,manageAllApps:`Manage All Apps`,systemConsole:`System Console`,noAppsConfigured:`No apps configured`},systemNav:{systemSettings:`System Settings`,applications:`Applications`,appMarketplace:`App Marketplace`,objectManager:`Object Manager`,users:`Users`,organizations:`Organizations`,roles:`Roles`,configuration:`Configuration`,createApp:`Create App`,administration:`Administration`,datasources:`Datasources`,documentation:`Documentation`},activityFeed:{title:`Recent Activity`,filter:`Filter`,empty:`No recent activity`,viewAll:`View all activity`,ariaLabel:`Activity feed`,typeCreate:`Create`,typeUpdate:`Update`,typeDelete:`Delete`,typeComment:`Comment`,relativeJustNow:`just now`,relativeSecondsAgo:`{{count}}s ago`,relativeMinutesAgo:`{{count}}m ago`,relativeHoursAgo:`{{count}}h ago`,relativeDaysAgo:`{{count}}d ago`},metadata:{label:`Metadata`,toggleTitle:`Toggle Metadata Inspector`,panelTitle:`Metadata Inspector`,jsonBadge:`JSON`,copyJson:`Copy JSON`}},search:{title:`Search`,back:`Back`,placeholder:`Search objects, dashboards, pages, reports…`,inputAriaLabel:`Search objects, dashboards, pages, reports`,resultsCount:`{{count}} result for "{{query}}"`,resultsCountPlural:`{{count}} results for "{{query}}"`,itemsAvailable:`{{count}} items available`,noResults:`No results found`,noResultsHint:`Try adjusting your search terms`,typeObjects:`Objects`,typeDashboards:`Dashboards`,typePages:`Pages`,typeReports:`Reports`,badgeObject:`object`,badgeDashboard:`dashboard`,badgePage:`page`,badgeReport:`report`},empty:{objectNotFound:`Object Not Found`,objectNotFoundDescription:`Object "{{name}}" definition missing. Check your configuration or navigate back to select a valid object.`,interfacePageSourceMissing:`This interface page references "{{name}}", which is not available.`,recordNotFound:`Record not found`,recordNotFoundDescription:`The record you are looking for does not exist or may have been deleted.`,pageNotFound:`Page Not Found`,pageNotFoundDescription:`The page "{{name}}" could not be found. It may have been removed or renamed.`,dashboardNotFound:`Dashboard Not Found`,dashboardNotFoundDescription:`The dashboard "{{name}}" could not be found. It may have been removed or renamed.`,reportNotFound:`Report Not Found`,reportNotFoundDescription:`The report "{{name}}" could not be found. It may have been removed or renamed.`,noAppsConfigured:`No Apps Configured`,noAppsConfiguredDescription:`No applications have been registered. Create your first app or visit System Settings to configure your environment.`,appNotAvailable:`App not available`,appNotAvailableDescription:`This app is not available yet — it may still be publishing. Try again in a moment.`,appAccessDenied:`You don't have access to this app`,appAccessDeniedDescription:`This app exists, but your account is not authorized to open it. Ask an administrator to grant you access.`,appAccessDeniedHome:`Back to home`,createFirstApp:`Create Your First App`,systemSettings:`System Settings`,back:`Back`},preview:{empty:{loadFailedTitle:`Draft preview failed to load`,loadFailedDescription:`The draft overlay could not be read. Retry, or check your connection.`,notReadyTitle:`“{{app}}” isn’t in the draft yet`,notReadyDescription:`The build may still be running, or it may have failed before this app was staged. Check the conversation for the build status — this pane refreshes as drafts land.`,nothingTitle:`Nothing to preview yet`,retry:`Retry`},draftBar:{message:`Draft preview — you are seeing unpublished changes. Nothing here is live until you publish.`,messageClean:`Draft preview — no unpublished changes; everything here is already live.`,publish:`Publish`,publishing:`Publishing…`,exit:`Exit preview`,changes:`Changes`,sampleDataTitle:`Sample data appears once you publish`,sampleDataBody:`You’re previewing your app’s structure. Publish to load example records and make it live.`,publishCta:`Publish to see it live`},changes:{title:`Pending changes`,description:`What publishing will change. New items are added; updates overwrite the live version.`,loading:`Loading pending changes…`,loadFailed:`Could not load pending changes:`,empty:`Nothing pending — every draft has been published.`,kindNew:`New`,kindUpdate:`Update`,detailLoading:`Loading detail…`,detailLoadFailed:`Could not load change detail:`,detailNone:`No differences detected — the draft matches the published version.`,detailChangedKeys:`Also changed:`,confirmNote:`Publishing releases all {{count}} pending drafts of this package atomically.`,publishConfirm:`Publish all`},unpublishedBar:{message:`Unpublished app — fully functional, but only builders can see it. Publish to make it visible to your users.`,publish:`Publish`,publishing:`Publishing…`,published:`Published! The app is now visible to your users.`,publishFailed:`Publish failed`},history:{button:`History`,title:`Build history`,description:`Every change to this app, newest first. Revert any step to undo it — no publish confirmation needed.`,loadFailed:`Could not load history:`,loadFailedUnavailable:`Commit store temporarily unreachable — this read did not happen, so no history is shown. Retry in a moment.`,loading:`Loading history…`,empty:`No history yet for this app.`,revertLabel:`Reverted a change`,applyLabel:`Build change`,revert:`revert`,items:`item(s)`,revertAction:`Revert`,reverted:`Reverted — the change has been undone.`,revertFailed:`Revert failed`,revertUnavailable:`Commit store temporarily unreachable — the revert may not have been applied. Reopen this history to check before retrying.`}},renderer:{noPageSchema:`No page schema provided`,noFormSchema:`No form schema provided`,noDashboardSchema:`No dashboard schema provided`,pageRendering:`Page rendering: {{name}}`,dashboardRendering:`Dashboard rendering: {{name}}`,formRenderingMode:`Form rendering in {{mode}} mode`,formRenderingFor:`for record {{id}}`,createRecord:`Create Record`,editRecord:`Edit Record`,page:`Page`,dashboard:`Dashboard`,save:`Save`,cancel:`Cancel`},actionDialog:{title:`Action Parameters`,description:`Please provide the required information to continue.`,selectPlaceholder:`Select {{label}}`,requiredError:`{{label}} is required`,lookupPlaceholder:`Record id for {{label}}`,lookupHelpText:`No reference object is configured for this parameter, so the record picker is unavailable. Enter a record id, or ask an administrator to fix the action parameter.`,cancel:`Cancel`,confirm:`Confirm`,uploading:`Uploading…`,defaultActionTitle:`Action`,ok:`OK`},actionConfirm:{title:`Confirm Action`,confirm:`Continue`,cancel:`Cancel`},rowAction:{openMenu:`Open menu`,edit:`Edit`,delete:`Delete`},navigationSync:{addedPage:`Navigation updated: added page "{{name}}"`,addedDashboard:`Navigation updated: added dashboard "{{name}}"`,removedPage:`Navigation updated: removed page "{{name}}"`,removedDashboard:`Navigation updated: removed dashboard "{{name}}"`,renamedPage:`Navigation updated: renamed page "{{oldName}}" → "{{newName}}"`,renamedDashboard:`Navigation updated: renamed dashboard "{{oldName}}" → "{{newName}}"`,undoLabel:`Undo`,undone:`Navigation change undone`,undoFailed:`Failed to undo navigation change`,updateFailed:`Failed to update navigation`},objectActions:{deleteSuccess:`{{label}} deleted successfully`,deleteFailed:`Failed to delete {{label}}`,noRecordId:`No record ID provided`,deleteConfirm:`Are you sure you want to delete this record?`,resetPackageSetConfirm:`This permission set ships with an installed package and cannot be removed. Deleting resets it to the shipped baseline and discards your environment customization. Continue?`,resetPackageSetSuccess:`Permission set reset to its shipped baseline`,bulkDeleteSuccess:`Deleted {{count}} {{label}} records`,bulkDeletePartial:`{{succeeded}} deleted, {{failed}} failed`},objectViewActions:{renameFailed:`Failed to rename view`,deleteFailed:`Failed to delete view`},dashboardActions:{printDialogOpening:`Opening your browser’s print dialog (not a PDF export)`,exportFailed:`Export failed: {{message}}`,forecastSoon:`Forecast view coming soon`},recordDetail:{viewersTooltip:`Users viewing this record`},cellRender:{empty:`Empty`,yes:`Yes`,no:`No`,systemFields:`System`},user:{profile:`Profile`,settings:`Settings`,logout:`Log out`,preferences:`Preferences`,theme:`Theme`,language:`Language`},organizations:{mine:`My Workspaces`,create:`Create workspace`,title:`Workspaces`,heading:`Your Workspaces`,subtitle:`Select a workspace to continue, or create a new one.`,searchPlaceholder:`Search for a workspace`,new:`New workspace`,current:`Current workspace`,manage:`Manage`,emptyTitle:`No workspaces yet`,emptyDescription:`Create your first workspace to get started.`,noMatches:`No workspaces match your search.`},organization:{roles:{owner:`Owner`,admin:`Admin`,delegatedAdmin:`Delegated Admin`,member:`Member`},errors:{notAllowedToInvite:`You are not allowed to invite users to this organization`,notAllowedToInviteWithRole:`You are not allowed to invite a user with this role`,alreadyInvited:`This user has already been invited to this organization`,organizationExists:`Organization already exists`,slugTaken:`That URL slug is already taken`,notAllowedToCreate:`You are not allowed to create a new organization`,notTheRecipient:`You are not the recipient of the invitation`,invitationNotFound:`This invitation no longer exists or has expired`,unknown:`Something went wrong. Please try again.`},backToList:`Back to organizations`,notFound:`Organization not found`,notFoundDescription:`This organization does not exist or you do not have access.`,tabs:{members:`Members`,invitations:`Invitations`,settings:`Settings`},members:{title:`Members`,inviteMember:`Invite member`,inviteRestrictedNote:`Only organization admins can invite members.`,removeMember:`Remove member`,removeConfirmTitle:`Remove member?`,removeConfirmDescription:`This will remove {{name}} from the organization. They will lose access immediately.`,removeConfirmAction:`Remove`,memberRemoved:`Member removed`,removeFailed:`Failed to remove member`,roleUpdated:`Role updated`,roleUpdateFailed:`Failed to update role`,memberActions:`Member actions`,loadFailed:`Failed to load members`},invitations:{title:`Invitations`,empty:`No invitations found.`,expiresAt:`Expires`,linkCopied:`Invitation link copied`,copyFailed:`Failed to copy link`,canceled:`Invitation canceled`,cancelFailed:`Failed to cancel invitation`,cancelTitle:`Cancel invitation?`,cancelDescription:`The invitation for {{email}} will be revoked.`,cancelAction:`Cancel invitation`,inviteTitle:`Invite a member`,inviteDescription:`They will receive an invitation to join this organization.`,emailLabel:`Email`,roleLabel:`Role`,placementLabel:`Placement (optional)`,placementDescription:`Applied when the invitation is accepted. Only units and positions you may delegate are listed.`,businessUnitLabel:`Business unit`,businessUnitPlaceholder:`No placement`,positionsLabel:`Positions`,sendInvite:`Send invite`,sentTitle:`Invitation created`,sentDescription:`Share the link below with the invitee. They will need to sign in to accept.`,linkLabel:`Accept link`,invitedAs:`{{email}} invited as {{role}}`,copyLinkLabel:`Copy invitation link`,loadFailed:`Failed to load invitations`,inviteFailed:`Failed to invite member`,status:{all:`All`,pending:`Pending`,accepted:`Accepted`,rejected:`Rejected`,canceled:`Canceled`}},settings:{generalTitle:`General`,generalDescription:`Update your organization information.`,readOnlyNote:`Only owners can change settings.`,nameLabel:`Organization name`,slugLabel:`Slug`,logoLabel:`Logo`,logoUpload:`Upload`,logoReplace:`Replace`,logoClear:`Remove`,logoUploaded:`Logo uploaded — save to apply`,logoUploadFailed:`Failed to upload logo`,save:`Save changes`,saved:`Settings saved`,saveFailed:`Failed to save settings`,leaveTitle:`Leave organization`,leaveDescription:`You will lose access to this organization.`,leaveAction:`Leave`,leaveConfirmTitle:`Leave organization?`,leaveConfirmDescription:`Are you sure you want to leave {{name}}? You will lose access immediately.`,leaveConfirmAction:`Leave`,leftOrg:`You have left the organization`,leaveFailed:`Failed to leave organization`,dangerZone:`Danger zone`,deleteTitle:`Delete organization`,deleteDescription:`Permanently delete this organization and all its data.`,deleteAction:`Delete`,deleteConfirmTitle:`Delete organization?`,deleteConfirmDescription:`This action is irreversible. All data will be permanently deleted. Type the organization slug to confirm.`,deleteConfirmSlugLabel:`Type "{{slug}}" to confirm`,deleteConfirmAction:`Delete organization`,deleted:`Organization deleted`,deleteFailed:`Failed to delete organization`},accept:{title:`You have been invited`,description:`You have been invited to join {{orgName}} as {{role}}.`,errorTitle:`Invitation unavailable`,goToOrgs:`Go to organizations`,loading:`Loading invitation…`,organization:`Organization`,role:`Role`,expiresAt:`Expires`,accept:`Accept invitation`,accepted:`Invitation accepted`,acceptFailed:`Failed to accept invitation`,decline:`Decline`,declined:`Invitation declined`,declineFailed:`Failed to decline invitation`},switcher:{label:`Switch organization`,groupLabel:`Working organization`,groupHint:`New records are created here. Views show data from all your organizations.`,manageMembers:`Manage members`}},notifications:{regionLabel:`Notifications`,empty:`No notifications`,emptyUnread:`You're all caught up`,filterUnread:`Unread`,filterAll:`All`,markAllRead:`Mark all read`,viewAll:`View all notifications`,groupCount:`{{count}} notifications`,groupUnread:`{{count}} unread`,groupMarkRead:`Mark read`,groupMarkReadTitle:`Mark all of this type read`,approvalsPending:`{{count}} pending approvals`,viewApprovals:`View approvals`,noPendingApprovals:`No pending approvals`,openApprovalsInbox:`Open Approvals Inbox`,badgeTotal:`{{total}} total`,badgeNotifications:`{{unread}} notifications`,badgeApprovals:`{{approvals}} pending approvals`},publicForm:{submit:`Submit`,submitting:`Submitting…`,submitAnother:`Submit another response`,poweredBy:`Powered by ObjectStack`,secureNotice:`Your information is transmitted securely and only used to respond to your request.`,thankYouTitle:`Thank you!`,thankYouMessage:`Your submission has been received successfully.`,redirecting:`Redirecting in {{seconds}} seconds…`,unavailableTitle:`Form unavailable`,unavailableDescription:`No public form is available at this URL. Make sure the underlying view has anonymous sharing enabled and matches this slug.`,tryDemo:`Try the demo`,retry:`Retry`,loading:`Loading form…`,requiredHint:`* Required field`,consentLabelDefault:`I agree to the privacy policy and consent to my data being processed for this request.`,consentLink:`Privacy policy`,consentRequired:`Please accept the privacy policy to continue.`,rateLimited:`Please take a moment to review your answers before submitting.`,redirectBlocked:`Submission accepted, but the redirect URL was blocked for security.`,demo:{contactTitle:`Contact us`,contactDescription:`Tell us about your project and a sales representative will get back to you within one business day.`,supportTitle:`Submit a support request`,supportDescription:`Tell us what is going wrong — our team responds within one business day.`,thankYouSalesTitle:`Thanks — we received your message!`,thankYouSalesMessage:`A sales representative will be in touch within one business day.`,thankYouSupportTitle:`Got it — your request is in the queue.`,thankYouSupportMessage:`A support engineer will follow up shortly. Save this page if you have more screenshots to add.`,field:{firstName:`First name`,lastName:`Last name`,email:`Work email`,phone:`Phone`,jobTitle:`Job title`,company:`Company`,website:`Website`,industry:`Industry`,companySize:`Company size`,howCanWeHelp:`How can we help?`,subject:`Subject`,description:`Description`,issueType:`Issue type`,priority:`Priority`},industry:{technology:`Technology`,software:`Software / SaaS`,finance:`Finance`,healthcare:`Healthcare`,retail:`Retail`,other:`Other`},issueType:{question:`Question`,problem:`Problem`,bug:`Bug`,feature_request:`Feature request`},priority:{low:`Low`,medium:`Medium`,high:`High`,critical:`Critical`}}},connectAgent:{disabled:{title:`MCP is disabled on this deployment`,body:`The MCP surface is off (OS_MCP_SERVER_ENABLED=false), so there is nothing to connect. Ask your operator to re-enable it.`},url:{title:`This environment's MCP endpoint`,body:`Any MCP-capable AI client connects with this URL. Identity is self-serve: the deployment is its own OAuth 2.1 authorization server, so interactive clients just open a browser login — you connect as yourself, and every call runs under your own permissions and row-level security.`,downloadSkill:`Download SKILL.md`,skillHint:`The portable agent skill: teaches any skills-capable agent how to work with this environment.`},claude:{body:`Settings → Connectors → Add custom connector, then paste this URL. Sign in through the browser when prompted.`,reachability:`claude.ai (web) connects from Anthropic's servers — the deployment must be reachable over public HTTPS. Claude Desktop and local clients also reach intranet deployments.`},claudeCode:{body:`One command — the OAuth login opens automatically on first use:`,plugin:`Or install the official plugin (adds the ObjectStack skill and a guided /objectstack:connect command):`},cursor:{addButton:`Add to Cursor`,body:`Use the one-click button, or add this to .cursor/mcp.json:`},vscode:{body:`Add to .vscode/mcp.json (or via the MCP: Add Server command):`},codex:{body:`Add to ~/.codex/config.toml. If your Codex version lacks the OAuth flow, use an API key header instead (see below):`},apiKey:{title:`API keys`,badge:`headless`,body:`For CI, scripts, and agents without a browser. The key acts as you — treat it like a password. It is shown ONCE.`,namePlaceholder:`Key name (e.g. ci-agent)`,mint:`Create key`,minting:`Creating…`,showOnce:`Key "{{name}}" created — copy it now, it will not be shown again:`,done:`Done — hide it`}},excelImport:{noImportableFields:`That object has no importable fields.`,schemaReadFailed:`Could not read the object schema.`,imported:`Imported {{count}} row(s) into {{object}}.`,importFrom:`Import the real rows from`,into:`into`,opening:`Opening…`,importAction:`Import`,dismiss:`Dismiss`},cloudOnboarding:{hintCreate:`Spin up your first environment — a private workspace with its own URL, database, and plan. Building happens inside it.`,hintReady:`Your production environment is ready. Open it to build and run your apps — that all happens inside the environment.`,createEnvironment:`Create your environment`,openProduction:`Open Production`,manageEnvironments:`Manage environments`},aiModelStatus:{summary:`Build / Ask uses {{conversational}} ({{conversationalSource}}); structured uses {{structured}} ({{structuredSource}}).`,summaryRouting:`Routing policy: free plans → {{free}}, paid plans → {{paid}}.`,modelUnknown:`unknown`,sourceUnknown:`not reported by the adapter`,rowConversational:`Build / Ask model`,rowStructured:`Structured (blueprint / seed)`,rowReasoning:`Reasoning effort`,readFailed:`Couldn't read the effective AI model. This environment may not run an AI service, or you may lack the ai:read permission.`,readFailedWithStatus:`Couldn't read the effective AI model (HTTP {{status}}). This environment may not run an AI service, or you may lack the ai:read permission.`,overridesInEffect:`Overrides in effect: `,noOverrides:`none — running the deployed code defaults.`,adapter:`Adapter: `,sourceCodeDefault:`code default (no env override)`,sourceInherits:`same as build/ask`,sourcePinned:`pinned by {{source}}`},chatbotError:{title:`Response failed`,fallbackDetail:`Something went wrong. Please try again.`,details:`Details`,hide:`Hide`,retry:`Retry`},chatbotQuota:{title:`Upgrade needed`,fallbackMessage:`You have reached your AI quota.`,buyCredits:`Buy a credit pack`,upgradePlan:`Upgrade plan`},environment:{addEnvironment:`Add environment`,setUpProduction:`Set up your production environment`,addDevelopment:`Add development environment`,entitlement:{productionLimitTitle:`You already have your production environment`,productionLimitBody:`Each organization includes exactly one production environment. Create a separate organization for another, or contact us about an Enterprise arrangement.`,planLockedTitle:`Development environments are a paid feature`,planLockedBody:`Your {{plan}} includes one production environment. Upgrade to add development environments — build in dev, then publish to production.`,limitTitle:`Development environment limit reached`,limitBody:`Capacity scales with AI seats. Add an AI seat, or archive an unused development environment to free one up.`,limitBodyWithCount:`You are using {{used}} of {{limit}} development environments. Capacity scales with AI seats — add an AI seat, or archive an unused development environment to free one up.`,freePlan:`free plan`,namedPlan:`{{plan}} plan`,upgradeCta:`Upgrade plan`,contactSalesCta:`Contact sales`}},cloudConnection:{checking:`Checking connection…`,retry:`Try again`,errors:{expired:`The request expired before it was approved. Start again.`,bindFailed:`Binding failed.`,deviceCodeFailed:`Device code request failed.`},waiting:{popupOpened:`Approve the connection in the window that just opened — this page updates by itself.`,polling:`Waiting for approval in the cloud console…`,openApproval:`Open the approval page`,copy:`Copy`,copied:`Copied`,codePrefilled:`The code is pre-filled on the approval page.`,openItHere:`Window did not appear? Open it here`,cancel:`Cancel`},bound:{title:`Connected to ObjectStack Cloud`,runtime:`Runtime`,organization:`Organization`,approvedBy:`Approved by`,runtimeId:`Runtime ID`,environment:`Environment`,since:`Since`,privatePackages:`Your organization's private packages now appear in the Marketplace under “Your organization”.`,disconnect:`Disconnect`},unbound:{title:`Not connected`,body:`Connect this runtime to an ObjectStack control plane to browse your organization's private packages and install them here. Approval is a single click in your cloud account — no ids or credentials are typed into this page.`,connect:`Connect`}},marketplace:{title:`App Marketplace`,subtitle:`Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.`,searchPlaceholder:`Search apps by name or manifest ID…`,searchAria:`Search marketplace apps`,installed:`Installed`,installedCount:`Installed ({{count}})`,refresh:`Refresh`,all:`All`,noApprovedYet:`No apps have been approved for the marketplace yet.`,noMatchFilters:`No apps match your filters.`,noDescription:`No description provided.`,back:`Back to marketplace`,installedTitle:`Installed Apps`,installedSubtitle:`Marketplace packages currently installed into this runtime's kernel. Cached manifests live in <code>.objectstack/installed-packages/</code> and survive restarts.`,installedEmpty:`No marketplace apps installed in this runtime yet.`,browseLink:`Browse the marketplace →`,installedAdditiveNote:`<strong>Note:</strong> The kernel API is additive only — uninstall removes the on-disk manifest so the package won't load on next boot, but the running kernel keeps the app registered until you restart the runtime.`,installedAt:`Installed {{when}}`,installedBy:`by {{user}}`,installedPackageId:`package`,cachedAs:`Cached as <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Installed v{{version}}`,load:{failed:`Failed to load marketplace`,failedHint:`By default this runtime points at the public ObjectStack cloud. Check the runtime is online, or override <code>OS_CLOUD_URL</code> to point at a self-hosted control plane.`,packageFailed:`Failed to load package`,notFound:`Not found.`},detail:{homepage:`Homepage`,installedV:`Installed · v{{version}}`,about:`About`,noReadme:`No readme provided.`,versions:`Versions`,noApprovedVersions:`No approved versions.`,prerelease:`pre`,moreOptions:`More install options`,uninstallFromRuntime:`Uninstall from this runtime`,addSampleData:`Add sample data`,reseedAgain:`Re-seed sample data`,purgeSampleData:`Purge sample data`,purgeConfirm:`Delete all sample records seeded by this package? User-added records will NOT be touched.`,purgeSuccess:`Removed {{count}} sample record(s).`,purgeNoData:`No sample records found to purge.`,reseedQueued:`Sample data will be re-seeded on next environment access.`,reseedLocalSuccess:`Re-seeded sample data: {{inserted}} inserted, {{updated}} updated.`,reseedPartialErrors:`({{count}} record(s) failed to write)`,updateAvailable:`Update available`},action:{install:`Install`,reinstall:`Reinstall`,working:`Working…`,installToCloud:`Install to cloud…`,installed:`Installed`,installing:`Installing…`,uninstall:`Uninstall`,uninstalling:`Uninstalling…`,details:`Details`,close:`Close`,dismiss:`Dismiss`,openOnCloud:`Open on cloud`,backHome:`Back to home`,updateTo:`Update`},install:{dialogTitle:`Install {{name}}`,dialogDescCurrent:`Install into this environment ({{host}}).`,dialogDescPicker:`Choose an environment to install this app into. You need to be signed into ObjectStack Cloud.`,environment:`Environment`,environmentPlaceholder:`Pick an environment`,includeSampleData:`Include sample data`,noEnvs:`No environments found in your active organization.`,noPermission:`You do not have permission to install apps in any environment. Only organization owners and admins can install — ask your workspace admin.`,signInFirst:`You need to sign into ObjectStack Cloud first. Click "Open on cloud" below.`,success:`Installed successfully. Open the environment to see the new app.`,localSuccess:`Installed v{{version}} to this runtime. "{{name}}" should now appear in the app switcher.`,localManifestConflict:`{{message}}
|
|
6
|
-
Tip: a local app already owns this manifest_id. Remove it from objectstack.config.ts first.`,localUnauthorized:`Sign in to this runtime first, then try again.`,localMarketplaceUnavailable:`This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.`,updateTo:`Update → v{{version}}`,installedVersion:`Installed v{{version}}`},org:{heading:`Your organization`,install:`Install`,installed:`Installed {{name}}`,installedBadge:`Installed`,installing:`Installing…`},disclosure:{containsCode:`This package contains code`,reviewed:`Reviewed & approved`,unreviewed:`Not yet reviewed`,signed:`Signed`,grantsIntro:`On install, this package will be granted:`,services:`Platform services`,hooks:`Lifecycle hooks`,network:`Network access`,fs:`Filesystem access`,noPermissions:`Requests no special permissions.`,acknowledge:`I understand this package runs code and grants the permissions above.`,runtime:{node:`In-process · full trust`,sandbox:`Sandboxed`,worker:`Out-of-process`}},suggestedBindings:{promptEveryone:`This app suggests granting "{{set}}" to all signed-in users (the Everyone position).`,promptGuest:`This app suggests granting "{{set}}" to unauthenticated visitors (the Guest position).`,confirm:`Grant`,confirming:`Granting…`,dismiss:`Dismiss`,confirmedToast:`"{{set}}" is now granted to {{anchor}}.`,dismissedToast:`Suggestion for "{{set}}" dismissed.`},uninstall:{confirm:`Uninstall {{manifestId}} v{{version}} from this runtime?
|
|
7
|
-
|
|
8
|
-
The cached manifest will be removed. The app will remain loaded in the running kernel until the next restart.`,successInList:`Removed {{manifestId}}. Restart the runtime to fully unload it from the running kernel.`,successInDetail:`Removed cached manifest for {{manifestId}}. Restart the runtime to fully unload the app from the running kernel.`},accessDenied:{title:`App Marketplace is admin-only`,description:`You don't have permission to install apps in this environment. Ask an owner or admin of this organization for access.`},category:{crm:`CRM`,erp:`ERP`,hr:`Human Resources`,finance:`Finance`,project:`Project Management`,collaboration:`Collaboration`,analytics:`Analytics`,integration:`Integration`,automation:`Automation`,ai:`AI`,security:`Security`,"developer-tools":`Developer Tools`,"ui-theme":`UI Theme`,storage:`Storage`,other:`Other`},pricing:{free:`Free`,freemium:`Freemium`,paid:`Paid`,subscription:`Subscription`,"usage-based":`Usage-based`,"contact-sales":`Contact Sales`},relativeTime:{today:`today`,daysAgo:`{{count}}d ago`,monthsAgo:`{{count}}mo ago`,yearsAgo:`{{count}}y ago`}},approvals:{approve:`Approve`,reject:`Reject`,comment:`Comment (optional)`,approveSuccess:`Approved`,rejectSuccess:`Rejected`,rejectConfirm:`Reject this approval request?`},approvalsInbox:{loadMore:`Load more`,loadingMore:`Loading…`,loadedOf:`Loaded {{loaded}} of {{total}}`,actEscalate:`SLA escalated`,systemSlaActor:`System (SLA)`,reassignBtn:`Reassign`,reassignTitle:`Hand this approval to someone else?`,reassignBody:`Your approver slot moves to the person you pick — they are notified and can act immediately.`,reassignTo:`New approver`,reassignToPlaceholder:`Pick a user or type an email / role:<name>`,reassignSuccess:`Handed to {{to}}`,requestInfoBtn:`Request info`,requestInfoTitle:`Ask the requester for more information?`,requestInfoBody:`The request stays pending; the requester is notified and can reply on the thread.`,requestInfoPlaceholder:`What do you need from the requester?`,requestInfoSent:`Sent back to the requester for more information`,remindBtn:`Send reminder`,remindSuccess:`Reminder sent to {{count}} approver(s)`,remindThrottled:`A reminder was sent recently — try again later.`,replyPlaceholder:`Reply on this request…`,slaRemaining:`SLA {{dur}} left`,slaOverdue:`SLA overdue {{dur}}`,actReassign:`Reassigned`,reassignFromTo:`from {{from}} to {{to}}`,actRemind:`Reminder sent`,actRequestInfo:`Requested more info`,actComment:`Commented`,stepProgress:`Approval steps`,prevRequest:`Previous`,nextRequest:`Next`,positionOf:`Request {{index}} of {{total}}`,progressApprovals:`Approvals — {{got}} of {{need}}`,progressGroups:`Sign-off progress — {{got}} of {{need}} groups`,progressEligible:`{{count}} eligible approver(s)`,progressBar:`Decision progress`,declaredActions:`Actions`,attachmentChip:`Attachment`,attachmentOpenFailed:`Could not open the attachment — please try again`,approveOneTitle:`Approve "{{title}}"?`,approveOneBody:`This approves the request with your identity. To add a comment or attachment, open the request instead.`,flowOrigin:`Flow-initiated`,sortBy:`Sort`,sortRecent:`Newest first`,sortOldest:`Oldest first`,sortAmount:`Amount (high→low)`,quickPhrase1:`Approved — meets requirements.`,quickPhrase2:`Approved with conditions — please monitor execution.`,quickPhrase3:`Please add supporting material and resubmit.`,title:`Approvals Inbox`,subtitle:`Review and act on approval requests.`,refresh:`Refresh`,tabMyPending:`My Pending`,tabSubmitted:`Submitted by me`,tabAll:`All`,searchPlaceholder:`Search record, process, requester…`,clearSearch:`Clear search`,statusFilter:`Status`,allStatuses:`All statuses`,processFilter:`Process`,allProcesses:`All processes`,objectFilter:`Object`,allObjects:`All objects`,filterCount:`{{shown}} of {{total}}`,selected:`selected`,actionableCount:`({{count}} actionable)`,selectAll:`Select all`,selectRow:`Select request`,colRequest:`Request`,colRecord:`Record`,colRequester:`Requester`,colStatus:`Status`,colWaiting:`Submitted`,colActions:`Actions`,statusPending:`Pending`,statusApproved:`Approved`,statusRejected:`Rejected`,statusRecalled:`Recalled`,statusReturned:`Returned for revision`,sendBackBtn:`Send back`,sendBackTitle:`Send this request back for revision?`,sendBackBody:`This round ends and the record unlocks so the requester can fix the data. When they resubmit, a fresh approval round opens for all approvers.`,sendBackPlaceholder:`What needs to be fixed before this can be approved?`,sendBackSuccess:`Sent back for revision — the requester can now edit and resubmit`,sendBackAutoRejected:`Revision limit reached — the request was auto-rejected`,actRevise:`Sent back for revision`,actResubmit:`Resubmitted`,roundChip:`Round {{n}}`,returnedHint:`An approver sent this back to you. The record is unlocked — fix the data, then resubmit to start a new approval round.`,resubmitBtn:`Resubmit`,resubmitting:`Resubmitting…`,resubmitSuccess:`Resubmitted — a new approval round has opened`,resubmitPlaceholder:`What did you change?`,editRecordBtn:`Edit record`,abandonTitle:`Abandon this revision?`,abandonBody:`This withdraws the request instead of resubmitting it. The approval ends here.`,emptyTitle:`No requests`,emptyPending:`You're all caught up — nothing is waiting on you.`,emptyOther:`Nothing here yet.`,emptyViewAll:`Browse all requests`,noMatches:`No matches for current filters.`,keyboardHint:`Keyboard: j/k move · Enter open · x select · a approve · r reject`,drawerTitle:`Approval Request`,submittedAgo:`Submitted {{when}}`,completedAt:`Completed {{when}}`,waitingOn:`Waiting on`,history:`Activity`,noActions:`No actions yet.`,actSubmit:`Submitted`,actApprove:`Approved`,actReject:`Rejected`,actRecall:`Recalled`,rawData:`Raw data (JSON)`,copy:`Copy`,copied:`Copied`,copyFailed:`Copy failed`,overrideActor:`Act as another identity (admin)`,actor:`Actor`,auto:`Auto`,overrideHint:`e.g. role:sales_manager. Leave blank to use the auto-detected identity.`,comment:`Comment (optional)`,approve:`Approve`,approving:`Approving…`,reject:`Reject`,rejecting:`Rejecting…`,recall:`Recall`,recalling:`Recalling…`,cancel:`Cancel`,clear:`Clear`,approveN:`Approve {{count}}`,rejectN:`Reject {{count}}`,bulkApproveTitle:`Approve {{count}} requests?`,bulkApproveBody:`Each request is approved with your identity and its flow continues down the approve branch.`,bulkRejectTitle:`Reject {{count}} requests?`,bulkRejectBody:`This rejects the selected requests and notifies their submitters.`,bulkApproved:`Approved {{count}} requests`,bulkRejected:`Rejected {{count}} requests`,bulkPartial:`{{ok}} succeeded, {{fail}} failed: {{which}}`,rejectOneTitle:`Reject "{{title}}"?`,rejectOneBody:`This rejects the request and notifies the submitter.`,rejectTitle:`Reject this request?`,rejectBody:`This marks the request as rejected and notifies the submitter.`,recallTitle:`Recall this request?`,recallBody:`This withdraws your request. Approvers can no longer act on it, and the record is unlocked.`,inlineApproved:`Approved "{{title}}"`,inlineRejected:`Rejected "{{title}}"`,approvedFinal:`Approved`,approvedWaiting:`Approved — waiting on the remaining approvers`,rejectedToast:`Rejected`,recalledToast:`Request recalled`,whyDisabled:`Only the assigned approvers can act on this request. It is waiting on: {{who}}.`,whyDisabledSubmitter:`You submitted this request, so you can recall it — but only the assigned approvers can approve or reject.`,noActor:`Cannot determine the acting identity`,actionFailed:`Action failed`,loadFailed:`Failed to load request`,recallUnavailable:`Recall is not available on this deployment.`,requestGone:`This request no longer exists. Refresh the list.`,notAllowed:`You are not allowed to perform this action.`,alreadyDecided:`This request was already decided. Refresh the list.`,justNow:`just now`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`},filterBuilder:{where:`Where`,and:`AND`,or:`OR`,clearAll:`Clear all`,selectField:`Select field`,operator:`Operator`,selectValue:`Select value`,value:`Value`,addFilter:`Add filter`,removeCondition:`Remove condition`,trueLabel:`True`,falseLabel:`False`,noResults:`No results`,searchField:`Search {{label}}…`,enterId:`Enter {{label}} id`,operators:{equals:`Equals`,notEquals:`Does not equal`,contains:`Contains`,notContains:`Does not contain`,isEmpty:`Is empty`,isNotEmpty:`Is not empty`,greaterThan:`Greater than`,lessThan:`Less than`,greaterOrEqual:`Greater than or equal`,lessOrEqual:`Less than or equal`,before:`Before`,after:`After`,between:`Between`,in:`In`,notIn:`Not in`}},sortBuilder:{sortBy:`Sort by`,thenBy:`Then by`,selectField:`Select field`,ascending:`A → Z`,descending:`Z → A`,addSort:`Add sort`,removeSort:`Remove sort`},collaboration:{commentCount:`{{count}} comments`,commentCountOne:`{{count}} comment`,resolvedSuffix:` · Resolved`,sortComments:`Sort comments`,sortOldest:`Oldest`,sortNewest:`Newest`,resolve:`Resolve`,reopen:`Reopen`,justNow:`just now`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`,edited:`(edited)`,reactionCount:`{{count}} reactions`,reactionCountOne:`{{count}} reaction`,addThumbsUp:`Add thumbs up`,reply:`Reply`,reactThumbsUp:`React with thumbs up`,reactHeart:`React with heart`,cancelReply:`Cancel reply`,replyingTo:`Replying to {{name}}…`,replyingToComment:`Replying to comment…`,commentPlaceholder:`Add a comment… (use @ to mention)`,send:`Send`,presentUserCount:`{{count}} users present`,presentUserCountOne:`{{count}} user present`,moreUserCount:`{{count}} more users`,moreUserCountOne:`{{count}} more user`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`active`,statusIdle:`idle`,statusAway:`away`},wizard:{missingRequired:`Please complete the required fields: {{fields}}`},appManagement:{title:`Applications`,subtitle:`Manage all configured applications`,newApp:`New App`,searchLabel:`Search apps`,searchPlaceholder:`Search apps…`,selectedCount:`{{n}} selected`,bulkEnable:`Enable`,bulkDisable:`Disable`,selectAll:`Select all ({{n}})`,empty:`No apps found.`,defaultBadge:`Default`,active:`Active`,inactive:`Inactive`,selectApp:`Select {{name}}`,openApp:`Open app`,openAppNamed:`Open {{name}}`,editApp:`Edit app`,editAppNamed:`Edit {{name}}`,editWithAi:`Edit with AI`,editWithAiNamed:`Edit {{name}} with AI`,enableApp:`Enable app`,disableApp:`Disable app`,enableAppNamed:`Enable {{name}}`,disableAppNamed:`Disable {{name}}`,setDefault:`Set as default`,setDefaultNamed:`Set {{name}} as default`,deleteApp:`Delete app`,deleteAppNamed:`Delete {{name}}`,confirmDelete:`Click again to confirm delete`,confirmDeleteNamed:`Confirm delete {{name}}`,toast:{noClient:`Cannot reach the metadata service`,unknownError:`unknown error`,appEnabled:`{{name}} enabled`,appDisabled:`{{name}} disabled`,toggleFailed:`Failed to toggle app status: {{reason}}`,setDefaultDone:`{{name}} set as default`,setDefaultFailed:`Failed to set default app: {{reason}}`,appDeleted:`{{name}} deleted`,deleteFailed:`Failed to delete app: {{reason}}`,bulkEnabled:`{{n}} apps enabled`,bulkDisabled:`{{n}} apps disabled`,bulkFailed:`Failed for {{n}}: {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:`; `,bulkOperationFailed:`Bulk operation failed: {{reason}}`}}},Zo={impersonation:{banner:{message:`您正在以 {{user}} 的身份操作 —— 所有操作都会记录为该用户。`,startedBy:`由管理员 {{admin}} 发起。`,stop:`结束模拟登录`,stopping:`正在结束…`,stopFailed:`无法结束模拟登录:{{reason}}`,notRestored:`服务器接受了请求,但没有恢复您的管理员会话 —— 您仍在以 {{user}} 的身份操作。请退出登录后重新登录以结束。`}},capability:{group:{platform:`平台`,org:`组织`,other:`其他`},label:{manage_users:`管理用户`,manage_org_users:`管理组织用户`,manage_metadata:`管理元数据`,manage_platform_settings:`管理平台设置`,setup_access:`访问 Setup`,setup_write:`保存设置`,studio_access:`访问 Studio`}},perm:{facet:{none:`无`,more:`+{{count}} 更多`,objects:`{{count}} 个对象`,objects_one:`{{count}} 个对象`,fields:`{{count}} 条字段规则`,fields_one:`{{count}} 条字段规则`,rls:`{{count}} 条 RLS 策略`,rls_one:`{{count}} 条 RLS 策略`,tabs:`{{count}} 条标签页规则`,tabs_one:`{{count}} 条标签页规则`,adminScope:`已配置委派管理范围`,designInStudio:`在 Studio 中设计 →`,designInStudioHint:`在 Studio 中设计`}},lookup:{recentlyUsed:`最近使用`,allResults:`全部结果`,loading:`加载中…`,noOptions:`未找到选项`,noRecords:`未找到记录`,createNew:`新建`,createNamed:`新建“{{name}}”`,showingResults:`显示 {{total}} 条结果中的 {{shown}} 条`,showAllResults:`查看全部结果({{count}})`,selectedBadge:`已选`,browseAll:`浏览全部记录`,remove:`移除 {{label}}`,selectFirst:`请先选择{{fields}}`,selectRecord:`选择记录`,recordCount:`{{count}} 条记录`,recordCountOne:`1 条记录`,pageOf:`第 {{current}}/{{total}} 页`,filters:`筛选`,clear:`清除`,yes:`是`,filterPlaceholder:`筛选{{label}}`,prevPage:`上一页`,nextPage:`下一页`,jumpToPage:`跳转到指定页`,retry:`重试`},common:{loading:`加载中…`,save:`保存`,cancel:`取消`,delete:`删除`,edit:`编辑`,create:`新建`,filter:`筛选`,reset:`重置`,confirm:`确认`,close:`关闭`,back:`返回`,next:`下一步`,previous:`上一步`,submit:`提交`,refresh:`刷新`,export:`导出`,import:`导入`,yes:`是`,no:`否`,ok:`确定`,actions:`操作`,more:`更多`,selectAll:`全选`,clearAll:`清除全部`,addToFavorites:`添加到收藏`,removeFromFavorites:`从收藏中移除`,noData:`暂无数据`,noResults:`未找到结果`,required:`必填`,optional:`选填`,selectOption:`请选择`,select:`选择…`,openChat:`打开聊天`,closeChat:`关闭聊天`,closePanel:`关闭面板`,resizeDrawer:`调整面板宽度`,itemCount:`{{count}} 项`,itemCountOne:`{{count}} 项`,toggleSidebar:`切换侧边栏`,package:`软件包`,done:`完成`,editInStudio:`在 Studio 中编辑`,record:`记录`,retry:`重试`,printDialogHint:`打开浏览器打印对话框(不是导出 PDF)`},actions:{decisionOutput:{help:`作为决策输出传递给流程。`,helpMultiValue:`作为决策输出传递给流程。多个值请用逗号分隔。`},resultDialog:{defaultTitle:`请立即保存此值`,acknowledge:`我已保存`,copyAll:`全部复制`}},validation:{required:`{{field}}不能为空`,minLength:`{{field}}至少需要{{min}}个字符`,maxLength:`{{field}}最多{{max}}个字符`,min:`{{field}}不能小于{{min}}`,max:`{{field}}不能大于{{max}}`,email:`请输入有效的邮箱地址`,url:`请输入有效的URL`,pattern:`{{field}}格式不正确`,formInvalid:`请检查表单中标记的字段:{{fields}}`,formInvalidJoiner:`、`,unique:`{{field}}必须唯一`,type:`{{field}}必须是有效的{{type}}`},form:{noPermissionToSave:`您没有权限保存这条记录。`,submitFailed:`保存失败,请重试。`,addItem:`添加项目`,removeItem:`移除项目`,fieldRequired:`此字段为必填项`,invalidFormat:`格式不正确`,saveSuccess:`保存成功`,saveError:`保存失败`,unsavedChanges:`您有未保存的更改,确定要离开吗?`,discardTitle:`放弃更改?`,discardMessage:`您有未保存的更改。如果现在关闭此表单,您的编辑将会丢失。`,dialogDescriptionFallback:`填写表单字段,然后提交或取消。`,keepEditing:`继续编辑`,discard:`放弃`,conflictTitle:`保存冲突`,conflictMessage:`您编辑期间,这条记录已被其他人修改。覆盖保存将用您的内容替换对方的修改。`,conflictLatestVersion:`对方保存时间:{{time}}`,conflictOverwrite:`覆盖保存`,stepOf:`第{{current}}步,共{{total}}步`,createTitle:`新建{{object}}`,editTitle:`编辑{{object}}`,viewTitle:`查看{{object}}`,createTargetOrg:`创建到{{org}}`,saveRecord:`保存`,create:`创建`,update:`更新`,createSuccess:`{{object}}创建成功`,updateSuccess:`{{object}}更新成功`,deleteSuccess:`{{object}}删除成功`,fullscreen:{title:`编辑文本`,description:`编辑完整的文本内容,然后保存或取消更改。`,done:`完成`,toggle:`全屏编辑{{label}}`,textFallback:`文本`}},fields:{relativeDate:{overdue:`逾期 {{count}} 天`},file:{dragDropHere:`拖拽文件到此处`,dropFilesHere:`松开以上传`,browseHint:`或点击浏览`,browseHintCamera:`或点击浏览 • 使用下方相机按钮`,takePhoto:`拍照`,takeSelfie:`自拍`,cameraCapture:`拍摄`,uploading:`上传中…`,uploadingPct:`上传中…({{pct}}%)`,fileFallback:`文件`,upload:`上传`,remove:`移除 {{name}}`,exceedsMaxSize:`“{{name}}” 超过大小上限({{max}} MB)`,uploadFailed:`上传 “{{name}}” 失败:{{error}}`},image:{upload:`上传图片`,addMore:`添加更多图片`,uploading:`上传中…`,imageAlt:`图片 {{index}}`,crop:`裁剪图片 {{index}}`,remove:`移除图片 {{index}}`,enlarge:`放大 {{name}}`,preview:`图片预览`,previous:`上一张`,next:`下一张`,counter:`{{current}} / {{total}}`},richText:{format:`格式: {{format}}`,basicEditorHint:`富文本编辑器(基础)`,placeholder:`请输入文字…`},options:{empty:`暂无可选项`,selectFirst:`请先选择{{fields}}`},objectRef:{loading:`正在加载对象…`,placeholder:`请选择对象`,search:`搜索对象…`,empty:`未找到对象`},recipient:{selectTypeFirst:`请先选择接收方类型。`,loading:`加载中…`,search:`搜索…`,empty:`无匹配项`,select:`请选择接收方`,selectUser:`请选择用户`,selectTeam:`请选择团队`,selectBusinessUnit:`请选择业务单元`,selectPosition:`请选择岗位`,selectUnitAndSubordinates:`请选择业务单元`},filterCondition:{selectObjectFirst:`请先选择对象。`,noCriteria:`未设置条件 —— 该规则不共享任何记录`,criteriaRequired:`请至少添加一个条件。没有条件的规则会共享该对象的全部记录,因此无法保存。`,invalidJson:`JSON 无效 —— 修正之前该规则不会匹配任何记录。`,jsonOnly:`该条件只能以 JSON 方式编辑`,editAsJson:`以 JSON 编辑`,useVisualBuilder:`使用可视化构建器`},tags:{placeholder:`输入后回车添加…`},textarea:{characterCount:`已输入 {{count}} 个字符,最多 {{max}} 个`,charactersRemaining:`还可输入 {{count}} 个字符`}},table:{rowsPerPage:`每页行数`,showing:`显示第{{from}}到{{to}}条,共{{total}}条`,noRows:`暂无数据`,sortAsc:`升序排列`,sortDesc:`降序排列`,filterColumn:`筛选{{column}}`,columns:`列`,exportCSV:`导出CSV`,exportExcel:`导出Excel`,selectRow:`选择行`,selectAllRows:`选择所有行`,expandRow:`展开行`,collapseRow:`折叠行`,hideColumn:`隐藏列`,freezeColumn:`冻结列`,unfreezeColumn:`取消冻结列`,pageInfo:`第 {{current}} 页,共 {{total}} 页`,totalRecords:`共 {{count}} 条`,noResults:`未找到结果`,noResultsHint:`请尝试调整筛选条件或搜索关键词。`,cancelAll:`全部取消`,saveAll:`全部保存 ({{count}})`,addRecord:`添加记录`,open:`打开`,search:`搜索…`,modified:`{{count}} 行已修改`,saveFailed:`保存失败`,selected:`已选择 {{count}} 项`,edit:`编辑`,delete:`删除`},grid:{actions:`操作`,edit:`编辑`,delete:`删除`,export:`导出`,exportAs:`导出为 {{format}}`,loading:`加载数据中…`,errorLoading:`数据加载失败`,pullToRefresh:`下拉刷新`,refreshing:`刷新中…`,openRecord:`打开记录`,openMenu:`更多操作`,bulkSelected:`已选择 {{count}} 项`,bulkSelectedAllMatches:`已选择全部 {{count}} 项(全部匹配)`,bulkClear:`清除`,bulkAllOnPage:`本页 {{count}} 项已全选。`,bulkSelectAllMatching:`选择全部 {{count}} 项匹配记录`,bulkAllMatchingSelected:`已选择全部 {{count}} 项匹配记录。`,rowHeight:`行高: {{mode}}`,empty:`空`,yes:`是`,no:`否`,systemFields:`系统字段`,summary:{pattern:`{{label}}:{{value}}`,count:`计数`,countEmpty:`空值`,countFilled:`非空`,countUnique:`去重`,percentEmpty:`空值`,percentFilled:`非空`,sum:`合计`,avg:`平均值`,min:`最小值`,max:`最大值`},toolbar:{densityMode:`密度`,densityCompact:`紧凑`,densityComfortable:`舒适`,densitySpacious:`宽松`,densityCycleHint:`{{label}}(点击切换)`,densityCycleShortHint:`点击切换`},import:{title:`导入{{object}}`,notAllowed:`该对象未开放导入。`,stepUpload:`上传`,stepMapping:`字段映射`,stepPreview:`预览`,uploadDescription:`上传 CSV 或 Excel 文件,或直接粘贴表格数据以开始导入。`,mappingDescription:`将列映射到对象字段。`,previewDescription:`导入前预览数据。`,dragDrop:`拖拽 CSV 或 Excel 文件到此处,或点击选择文件`,browseFiles:`选择文件`,parsing:`解析中…`,pasteHint:`或粘贴(Ctrl/⌘+V)从 Excel、Google 表格复制的数据`,legacyXls:`不支持旧版 .xls 文件,请另存为 .xlsx 后重试。`,unsupportedFile:`不支持的文件类型。请使用 CSV、TSV 或 Excel(.xlsx)。`,parseFailed:`无法读取该文件,请检查格式后重试。`,fileNeedsHeader:`文件必须包含表头行和至少一行数据。`,mappingTemplate:`映射模板:`,chooseTemplate:`选择模板…`,noSavedTemplates:`暂无保存的模板`,noneOption:`— 无 —`,saveCurrent:`保存当前映射`,templateName:`模板名称`,save:`保存`,deleteTemplate:`删除模板`,savedMapping:`已保存的映射:`,chooseSavedMapping:`选择已保存的映射…`,manualMapping:`— 手动映射列 —`,transform:`转换`,savedMappingHint:`映射“{{name}}”将在服务端应用重命名 + 转换 + 类型强转,列映射为只读。`,savedMappingPreviewNote:`预览显示的是原始列;导入时,映射“{{name}}”将在服务端应用重命名、转换与类型强转。`,csvColumn:`列`,mapsTo:`映射到`,typeMismatch:`疑似{{type}}`,type:{number:`数字`,boolean:`布尔值`,date:`日期`,datetime:`日期时间`,text:`文本`},status:`状态`,skipColumn:`跳过此列`,skip:`— 跳过 —`,mapped:`已映射`,skipped:`已跳过`,rowsWithErrors:`{{count}} 行有错误`,rowsCorrected:`已修正 {{count}} 行`,clickToFix:`— 点击高亮单元格可直接修改。`,showingRows:`显示第 {{shown}} 行,共 {{total}} 行`,importing:`导入中… {{progress}}%`,importComplete:`导入完成`,imported:`已导入 {{count}} 条`,skippedCount:`已跳过 {{count}} 条`,moreErrors:`…还有 {{count}} 个错误`,cancel:`取消`,back:`上一步`,next:`下一步`,close:`关闭`,importNRows:`导入 {{count}} 行`,importingProgress:`导入中…`,requiredMark:`*`,optTreatHistorical:`作为历史数据导入`,optTreatHistoricalHint:`(按原样导入已完结的记录——跳过状态机校验,保留原始时间戳与作者,而不是记为当前时间)`,missingRequiredHint:`无法继续——以下必填字段未映射:{{fields}}。请在文件中添加对应的列,或返回上一步重新上传包含该列的文件。`,legacyFallbackNotice:`已通过兼容模式导入:当前连接不支持服务端导入接口,因此所有值均以文本写入,未做服务端类型转换。请升级后端/客户端以获得完整的导入支持(类型转换与关联查找)。`,required:`必填`,invalidType:`{{type}} 格式无效`,legacyReferenceBlocked:`导入已阻止:{{fields}} 是关联字段,需要服务端导入接口把名称解析为记录 ID,而当前连接不支持。按纯文本导入会写坏数据。请升级后端/客户端,或取消这些列的映射后再导入。`,autoMatched:`自动匹配`,autoMatchedSummary:`已自动匹配 {{count}} 列 — 请在下方检查并调整。`,confidence:{high:`高置信度`,medium:`中置信度`,low:`低置信度`},downloadTemplate:`下载模板`,downloadTemplateHint:`获取带正确列的 CSV(必填字段标 *)。`,templateFileName:`{{object}}-导入模板`,validate:`校验数据`,validateHint:`导入前在服务端逐行校验。`,validating:`校验中…`,validatePassed:`全部 {{ok}} 行均有效。`,validateFailed:`{{ok}} 条有效,{{errors}} 条有错误。`,errorCount:`{{count}} 个错误`,errorRowPrefix:`第 {{row}} 行:`,referenceNotFound:`找不到匹配 "{{value}}" 的记录`,referenceAmbiguous:`"{{value}}" 匹配到多条记录,请使用唯一值或记录 ID`,invalidBoolean:`"{{value}}" 不是有效的是/否值`,invalidNumber:`"{{value}}" 不是有效的数字`,invalidDate:`"{{value}}" 不是有效的日期`,invalidOption:`"{{value}}" 不在允许的选项范围内`,requiredValue:`此字段为必填项`,matchAmbiguous:`匹配到多条已有记录,请使用唯一值或记录 ID`,options:`导入选项`,writeMode:`当某行匹配到已有记录时`,writeModeOpt:{insert:`始终新建`,update:`更新已有(无匹配则跳过)`,upsert:`匹配则更新,否则新建`},matchFields:`匹配字段`,matchFieldsPlaceholder:`选择匹配字段…`,matchFieldsHint:`按这些字段将行匹配到已有记录。`,needMatchFields:`请至少选择一个匹配字段。`,matchOnlyField:`(仅匹配)`,optRunAutomations:`运行自动化与触发器`,optCreateOptions:`保留未知选项值`,optSkipBlankKey:`跳过匹配值为空的行`,optBackground:`后台导入`,optBackgroundHint:`(作为可撤销任务运行)`,createdCount:`新建 {{count}} 条`,updatedCount:`更新 {{count}} 条`,resultsTruncated:`显示前 {{count}} 行结果(共 {{total}} 行)。`,downloadFailed:`下载失败行`,cancelImport:`取消导入`,importCancelled:`导入已取消`,largeSampleNotice:`正在预览前 {{shown}}/{{total}} 行。`,asyncLargeHint:`文件较大,将在后台导入。`,asyncQueued:`已排队 — 正在准备导入…`,asyncProcessing:`正在导入第 {{processed}}/{{total}} 行… {{progress}}%`,history:`历史`,historyBack:`返回导入`,historyDescription:`此对象的近期导入记录。`,historyHint:`后台导入任务,最新在前。`,historyRefresh:`刷新`,historyLoading:`加载中…`,historyEmpty:`暂无导入记录。`,historyUnsupported:`此数据源不支持导入历史。`,historyColStatus:`状态`,historyColRows:`行数`,historyColResult:`结果`,historyColTime:`时间`,jobStatus:{pending:`等待中`,running:`进行中`,succeeded:`成功`,failed:`失败`,cancelled:`已取消`},undoImport:`撤销导入`,undoing:`撤销中…`,reverted:`已撤销`,undoConfirm:`撤销此次导入?它新建的记录将被删除,它更新的记录将恢复为之前的值。`},bulk:{confirmDefault:`此操作将应用于 {{count}} 条记录。`,overLimit:`所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。`,affectedRecords:`受影响的记录({{count}}):`,skippedIneligible:`{{count}} 条所选记录不符合该动作的条件,将被跳过。`,rowFallback:`第 {{index}} 行`,andMore:`……以及另外 {{count}} 条`,processed:`已处理 {{count}} / {{total}}`,processedFailed:` · {{count}} 条失败`,undonePrefix:`已撤销 — `,succeeded:`成功 {{count}} / {{total}}`,resultFailed:` · 失败 {{count}}`,retry:`重试`,downloadErrorCsv:`下载错误 CSV`,cancel:`取消`,back:`上一步`,next:`下一步`,run:`执行`,running:`执行中…`,undo:`撤销`,undoing:`撤销中…`,done:`完成`,selectPlaceholder:`请选择…`,loading:`加载中…`}},calendar:{today:`今天`,month:`月`,week:`周`,day:`日`,agenda:`日程`,allDay:`全天`,noEvents:`暂无事件`,newEvent:`新建事件`,moreEvents:`+{{count}} 更多`},list:{loading:`正在加载记录…`,recordCount:`{{count}} 条记录`,recordCountOne:`{{count}} 条记录`,addRecord:`添加记录`,tabs:`标签页`,allRecords:`全部记录`,search:`搜索`,filter:`筛选`,filterRecords:`筛选记录`,sort:`排序`,sortRecords:`排序记录`,sortByIdSuffix:`(按 ID)`,sortRelationalHint:`指向其他记录的列未列出:它们只能按存储的 ID 排序,而不是单元格中显示的名称。若要按该名称排序,请把该名称反规范化到本对象上,做成一个在来源变更时写入的存储字段,再按它排序。不要用公式字段:公式字段是虚拟的,不会为它存储任何列,服务端会拒绝按它排序。`,resetSortToDefault:`恢复视图默认排序`,group:`分组`,groupBy:`分组依据`,export:`导出`,exportAs:`导出为 {{format}}`,color:`颜色`,rowColor:`行颜色`,colorByField:`按字段着色`,clear:`清除`,none:`无`,hideFields:`隐藏字段`,noItems:`暂无数据`,noItemsMessage:`当前没有可显示的记录。请尝试调整筛选条件或新建一条数据。`,firstRunTitle:`这里还没有数据`,firstRunMessage:`创建第一条记录即可开始。`,noMatches:`没有匹配的记录`,noMatchesMessage:`没有符合当前筛选或搜索条件的记录,试试调整或清除它们。`,loadErrorTitle:`无法加载记录`,loadErrorMessage:`加载数据时出错。请检查网络连接后重试。`,loadErrorForbiddenTitle:`无权访问`,loadErrorForbiddenMessage:`你没有查看这些记录的权限。如需访问,请联系管理员。`,loadErrorUnauthorizedTitle:`需要登录`,loadErrorUnauthorizedMessage:`登录状态已过期或已退出。请重新登录后查看这些记录。`,loadErrorRejectedTitle:`该视图的查询被拒绝`,loadErrorRejectedMessage:`服务器无法处理该视图的筛选条件或查询参数。清除筛选条件通常即可恢复;如果视图本身就是这样保存的,需要管理员修正。`,loadErrorApiDisabledTitle:`该对象未开放 API 访问`,loadErrorApiDisabledMessage:`此页面无法加载记录,因为该对象未通过 API 开放。这是对象自身的设置,而不是权限问题 —— 需要管理员为其启用 API 访问,此页面才能正常工作。`,retry:`重试`,managedBy:{system:{title:`这里还没有数据`,message:`当其来源操作运行时(例如提交审批、共享、邀请),记录会自动出现。请在来源记录上触发其中一个操作来创建数据。`},appendOnly:{title:`暂无事件记录`,message:`这是一份不可变更的审计日志。记录由平台在事件发生时写入——你可以导出历史,但无法在此处创建条目。`},betterAuth:{title:`暂无身份记录`,message:`这些记录由认证提供方创建——通过登录、预置和安全流程自动写入,无法在此处手动添加。`},betterAuthUser:{title:`暂无用户`,message:`用户账号由认证提供方预置,无法在此处手动创建。邀请团队成员加入你的组织,他们首次登录时会自动出现(SSO 即时预置)。应用的终端用户会在通过你的应用注册时出现。`},betterAuthTeam:{title:`暂无团队`,message:`团队用于在组织内对成员分组。可用「创建团队」新建,或通过认证提供方的组织与 SSO 预置流程自动出现。`}},showAll:`显示全部`,refresh:`刷新`,pullToRefresh:`下拉刷新`,refreshing:`刷新中…`,share:`分享`,print:`打印`,hideFieldsTitle:`隐藏字段`,dataLimitReached:`显示前 {{limit}} 条记录。可能有更多数据。`,viewSettings:`视图设置`,viewSettingsHint:`分组、行颜色、密度与可见字段。`,addGroup:`添加分组字段`,collapsedByDefault:`默认折叠`,removeGroup:`删除`,inlineEditShort:`行内编辑`,inlineEditLabel:`行内编辑记录(点击单元格进行编辑)`,recordEditingTitle:`记录编辑`},managedByBadge:{config:{short:`管理配置`,title:`管理员配置`,body:`这些记录定义平台的运行时行为。请在此处编写配置;其产生的运行时数据存放在单独的表中。`},system:{short:`系统管理`,title:`由平台管理`,body:`当源记录上的操作运行时,这里的行会自动创建。下方列表是只读监控界面——行级操作(批准、撤回、重发等)在每一行上。`},systemWritable:{short:`平台架构`,title:`平台定义,管理员可写`,body:`此对象的架构由平台定义,但其数据行可在此处创建和编辑。谁可以写入由委派管理和记录级安全控制,而非此标记。`},appendOnly:{short:`只读 · 审计日志`,title:`只读历史记录`,body:`不可变审计日志。行由平台在事件发生时写入,不能在界面上创建、编辑或删除。可使用导出功能下载以供合规审查。`},betterAuth:{short:`身份`,title:`由身份提供方管理`,body:`此对象的架构由 {{provider}} 管理。直接编辑会绕过密码哈希、会话校验、两步验证检查和审计钩子。请通过身份认证提供方的登录、邀请和安全流程管理这些记录。`}},kanban:{addCard:`添加卡片`,addColumn:`添加列`,moveCard:`移动卡片`,deleteCard:`删除卡片`,deleteColumn:`删除列`,noCards:`暂无卡片`,cardTitlePlaceholder:`输入卡片标题…`,uncategorized:`未分类`,columns:`列`,requiredFieldsTitle:`填写必填字段`,requiredFieldsDescription:`此次移动会使以下字段成为必填项。填写后即可继续。`},timeline:{bucket:{overdue:`已逾期`,today:`今天`,tomorrow:`明天`,thisWeek:`本周`,nextWeek:`下周`,later:`更晚`,noDate:`无日期`,unassigned:`未分配`},scale:{week:`第 {{n}} 周`,quarter:`{{year}}年第{{quarter}}季度`},gantt:{rowLabel:`条目`}},gantt:{column:{taskName:`任务名称`,start:`开始`,end:`结束`},toolbar:{prevPeriod:`上一周期`,nextPeriod:`下一周期`,zoomIn:`放大`,zoomOut:`缩小`,jumpToToday:`跳到今天`,today:`今天`,thisWeek:`本周`,thisMonth:`本月`,showTaskList:`展开任务列表`,hideTaskList:`收起任务列表`,viewMode:`时间粒度`,enterFullscreen:`进入全屏`,exitFullscreen:`退出全屏`,criticalPath:`高亮关键路径`,autoSchedule:`自动排程依赖`,exportPng:`导出 PNG`,exportPdf:`导出 PDF`,saveLayout:`保存布局`,refresh:`刷新`,undo:`撤销`,redo:`重做`},viewMode:{day:`日`,week:`周`,month:`月`,quarter:`季度`,year:`年`},row:{expand:`展开`,collapse:`收起`,open:`打开详情`},aria:{taskList:`任务列表`},tooltip:{days:`天`},menu:{view:`查看详情`,edit:`行内编辑`,delete:`删除`,addPredecessor:`添加前置任务…`,addSuccessor:`添加后置任务…`,removeDependency:`移除依赖`,noCandidates:`无可用任务`,searchTasks:`搜索任务…`},delete:{title:`删除此任务?`,body:`"{{title}}" 将被永久删除,此操作无法撤销。`,cancel:`取消`,confirm:`删除`,deleting:`删除中…`},drawer:{fallbackTitle:`任务详情`},linkType:{fs:`完成 → 开始`,ss:`开始 → 开始`,ff:`完成 → 完成`,sf:`开始 → 完成`},linkEnd:{start:`开始`,end:`结束`},link:{rejected:{self:`任务不能依赖自身。`,locked:`该行已锁定,无法新增依赖。`,group:`汇总行不能作为依赖目标,请改为连接其下的具体任务。`,cycle:`该连接会形成循环依赖。`}},conflict:{title:`排程冲突`,body:`此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?`,confirm:`自动重新排程`,cancel:`保持不变`},autoScheduleDlg:{title:`自动排程`,body:`将顺延 {{count}} 个任务以满足依赖约束,是否执行?`,skipped:`另有 {{count}} 项因锁定/无权限跳过。`,confirm:`执行`,cancel:`取消`,none:`依赖均满足,无需排程`},resource:{header:`资源`,peak:`峰值`,over:`超载`,empty:`没有可分配的任务。`},quickFilter:{all:`全部`,clear:`清除筛选`,empty:`无可选项`,resultSummary:`显示 {shown} / {total} 项任务`},readOnly:`只读`,readOnlyHint:`此视图已禁用编辑。`,lockedHint:`无编辑权限`,writeFailed:`保存失败,已恢复修改前状态`},view:{editViewConfig:`编辑视图配置`,rename:`重命名`,duplicateView:`复制视图`,shareView:`共享视图`,setAsDefault:`设为默认`,pinView:`固定视图`,unpinView:`取消固定`,changeViewType:`更改视图类型`,deleteView:`删除视图`,addView:`添加视图`,unsavedChanges:`未保存的更改`,saveAsView:`另存为视图`,moreViews:`还有 {{count}} 个`,activeFilters:`筛选条件生效中`,activeSort:`排序生效中`,manageViews:`管理视图`,manageAllViews:`管理所有视图…`,manageViewsDescription:`对该对象的所有视图进行重新排序、重命名、固定或删除。`,searchViews:`搜索视图`,addNewView:`新建视图`,done:`完成`,noViewsFound:`没有匹配的视图。`,dragToReorder:`拖动排序`,defaultView:`默认视图`,defaultBadge:`默认`,tabActionsFor:`{{name}} 的视图操作`,readonlyAriaLabel:`只读视图`,readonlyTooltip:`系统视图 — 由代码定义,只读。`},designer:{undo:`撤销`,redo:`重做`},detail:{back:`返回`,edit:`编辑`,editInline:`编辑`,save:`保存`,saveChanges:`保存更改`,saving:`保存中…`,editFieldsInline:`编辑字段`,editInlineHint:`双击编辑`,lockedByApproval:`审批中已锁定`,lockedTooltip:`该记录有待审批的请求,编辑已被锁定`,writeStrippedTitle:`已保存,但部分字段未生效`,writeStrippedReadonly:`以下字段为只读,未生效:{{fields}}`,writeStrippedByState:`以下字段在记录当前状态下不可编辑,未生效:{{fields}}`,approvalPendingEditable:`审批中 · 可编辑`,approvalPendingTooltip:`该记录有待审批的请求,但当前审批节点仍允许编辑`,approvalProgress:`审批 — 已通过 {{got}} / 共需 {{need}}`,approvalProgressGroups:`会签 — 已完成 {{got}} / 共 {{need}} 个组`,approvalProgressLabel:`审批进度`,approvalsPanelTitle:`审批`,cancelApproval:`撤回审批`,cancelApprovalInFlight:`撤回中…`,cancelApprovalTooltip:`撤回当前的待审批请求以解除记录锁定`,cancelApprovalTooltipUnlocked:`撤回当前的待审批请求`,cancelApprovalFailed:`撤回审批失败`,cancelApprovalUnavailable:`当前数据源不支持撤回审批`,linkCopied:`链接已复制到剪贴板`,linkCopyFailed:`复制链接失败`,cancel:`取消`,cancelEdit:`放弃更改`,sectionMoreDetails:`更多详情`,concurrentUpdateTitle:`该记录已被他人修改`,concurrentUpdateDescription:`在你编辑期间,另一位用户保存了 {{field}} 的新版本。为避免无声覆盖对方的改动,请选择如何处理该冲突。`,concurrentUpdateYourEdit:`你的修改`,concurrentUpdateCurrentValue:`当前值`,concurrentUpdateUpdatedBy:`由 {{name}} 更新`,concurrentUpdateUpdatedAt:`更新于 {{when}}`,concurrentUpdateReload:`加载最新`,concurrentUpdateOverwrite:`仍然覆盖`,concurrentUpdateCancel:`取消`,concurrentUpdateRecordLabel:`此记录`,openInNewTab:`在新标签页打开`,share:`分享`,duplicate:`复制`,export:`导出`,viewHistory:`查看历史`,delete:`删除`,moreActions:`更多操作`,addReaction:`添加表情回应`,pageHeaderActions:`页面标题栏操作`,emojiPicker:`表情选择器`,reactionCount:`{{emoji}} {{count}} 个回应`,reactionCountOne:`{{emoji}} {{count}} 个回应`,recordDetail:`记录详情`,recordDetailWithLabel:`{{label}}详情`,openAsFullPage:`以完整页面打开`,recordDetailOverlay:`{{title}} 的记录详情浮层。`,addToFavorites:`添加到收藏`,removeFromFavorites:`从收藏中移除`,previousRecord:`上一条记录`,nextRecord:`下一条记录`,recordOf:`第 {{current}} 条,共 {{total}} 条`,recordNotFound:`未找到记录`,recordNotFoundDescription:`您查找的记录不存在或已被删除。`,goBack:`返回`,details:`详情`,related:`相关`,relatedRecords:`{{count}} 条记录`,relatedRecordOne:`{{count}} 条记录`,noRelatedRecords:`暂无相关记录`,loading:`加载中…`,copyToClipboard:`复制到剪贴板`,copied:`已复制!`,deleteConfirmation:`确定要删除此记录吗?`,deleted:`记录已删除`,editRecord:`编辑记录`,viewAll:`查看全部`,new:`新建`,add:`添加`,emptyValue:`—`,activity:`活动`,history:`历史`,historyEmpty:`暂无历史记录`,editRow:`编辑`,deleteRow:`删除`,deleteRowConfirmation:`确定要删除此记录吗?`,deleteRowTitle:`删除记录`,actions:`操作`,previousPage:`上一页`,nextPage:`下一页`,pageOf:`第 {{current}} 页,共 {{total}} 页`,sortBy:`排序`,filterPlaceholder:`筛选…`,highlightFields:`关键字段`,comments:`评论`,searchComments:`搜索评论…`,addCommentPlaceholder:`添加评论… (Ctrl+Enter 提交)`,noMatchingComments:`没有匹配的评论`,noCommentsYet:`暂无评论`,pinned:`已置顶`,pin:`置顶`,unpin:`取消置顶`,justNow:`刚刚`,minutesAgo:`{{count}}分钟前`,hoursAgo:`{{count}}小时前`,daysAgo:`{{count}}天前`,systemActor:`系统`,unknownUser:`未知用户`,createdBy:`创建人`,updatedBy:`更新人`,created:`创建于`,updated:`更新于`,dropFilesToUpload:`拖拽文件到此处或点击上传`,attachmentCount:`{{count}} 个附件`,attachmentCountPlural:`{{count}} 个附件`,removeAttachment:`移除附件`,attachments:`附件`,uploadAttachment:`上传`,loadingAttachments:`正在加载附件…`,noAttachments:`暂无附件。上传一个文件开始吧。`,downloadAttachment:`下载`,deleteAttachment:`删除附件`,attachmentDeleteDenied:`只有上传者或可编辑此记录的用户才能删除此附件。`,attachmentParentAccessDenied:`您无权为此记录添加附件。`,attachmentDownloadDenied:`您无权下载此附件。`,attachmentAuthRequired:`请登录后再下载此附件。`,attachmentPermissionDenied:`您没有执行此操作的权限。`,unifiedDiff:`统一视图`,sideBySideDiff:`并排视图`,noChanges:`无变更`,previousVersion:`旧版本`,currentVersion:`新版本`,discussion:`讨论`,showDiscussion:`显示讨论 ({{count}})`,hideDiscussion:`隐藏讨论`,bold:`粗体 (Ctrl+B)`,italic:`斜体 (Ctrl+I)`,listFormat:`列表`,inlineCode:`行内代码`,mentionSomeone:`提及某人`,preview:`预览`,submitComment:`提交 (Ctrl+Enter)`,sendComment:`发送`,writeComment:`写评论…`,subscribedTooltip:`已订阅 — 点击取消订阅`,unsubscribedTooltip:`订阅通知`,firstRecord:`第一条记录 (Home)`,previousRecordKey:`上一条记录 (←)`,nextRecordKey:`下一条记录 (→)`,lastRecord:`最后一条记录 (End)`,noRecords:`无记录`,showEmptyRelated:`+ {{count}} 个为空`,showEmptyRelated_one:`+ {{count}} 个为空`,showEmptyRelated_other:`+ {{count}} 个为空`,searchWhileNavigating:`导航时搜索`,searchRecords:`搜索记录…`,allActivity:`全部动态`,commentsOnly:`仅评论`,fieldChangesFilter:`字段变更`,tasksOnly:`仅任务`,leaveCommentPlaceholder:`留下评论… (Ctrl+Enter 提交)`,noActivity:`暂无活动记录`,loadMore:`加载更多`,edited:`(已编辑)`,via:`通过 {{source}}`,viewSource:`查看来源`,replyCount:`{{count}} 条回复`,replyCountPlural:`{{count}} 条回复`,replyPlaceholder:`回复…`,filterActivity:`筛选活动`,openDiscussion:`打开讨论面板`,closeDiscussion:`关闭讨论面板`,subscribeAriaLabel:`订阅通知`,unsubscribeAriaLabel:`取消订阅通知`,clearSearch:`清除搜索`,copyEmail:`复制邮箱`,copyPhone:`复制电话号码`,copyRecordId:`复制记录 ID`,showEmptyFields:`显示 {{count}} 个空字段`,hideEmptyFields:`隐藏空字段`,noValue:`无`},chart:{noData:`暂无图表数据`,loading:`图表加载中…`,nullCategory:`(未指定)`},report:{total:`总计`,rowTotal:`行合计`,columnTotal:`列合计`,grandTotal:`总计`,totals:`汇总`,rowsLabel:`行`,columnsLabel:`列`,allLabel:`(全部)`,emptyLabel:`(空)`,loading:`加载中…`,failedToLoad:`矩阵报表加载失败:{{message}}`,needsAcross:"矩阵报表至少需要一个 `groupingsAcross` 字段。",aggregate:{count:`计数`,countDistinct:`去重计数`,sum:`求和`,avg:`平均`,min:`最小值`,max:`最大值`,first:`首个`},editor:{panelTitle:`编辑报表`}},map:{searchLocations:`搜索位置…`,locationDetails:`位置详情`,markersCount:`{{count}} 个标记`,invalidCoordinates:`{{count}} 条记录因坐标缺失或无效已从地图中排除。`,invalidCoordinatesPlural:`{{count}} 条记录因坐标缺失或无效已从地图中排除。`},workflow:{draft:`草稿`,active:`活跃`,paused:`已暂停`,completed:`已完成`,cancelled:`已取消`,save:`保存`,publish:`发布`,addNode:`添加节点`,workflowFlow:`工作流程`,properties:`属性`,connections:`连接`,quickConnect:`快速连接`,fromPlaceholder:`从…`,toPlaceholder:`到…`,connect:`连接`,label:`标签`,type:`类型`,description:`描述`,assignee:`负责人`,assigneeType:`负责人类型`,user:`用户`,role:`角色`,group:`组`,expression:`表达式`,timeoutMinutes:`超时时间(分钟)`,selectNodeToEdit:`选择节点以编辑其属性`,workflowTitle:`工作流标题`,newWorkflow:`新工作流`,outConnections:`{{count}} 个输出`,start:`开始`,end:`结束`,task:`任务`,userTask:`用户任务`,serviceTask:`服务任务`,scriptTask:`脚本任务`,approval:`审批`,condition:`条件`,parallelGateway:`并行网关`,joinGateway:`合并网关`,boundaryEvent:`边界事件`,delay:`延迟`,notification:`通知`,webhook:`Webhook`,allowConcurrency:`允许(并发执行)`,forbidConcurrency:`禁止(跳过新任务)`,replaceConcurrency:`替换(取消现有任务)`,queueConcurrency:`排队(等待当前完成)`,conditionEvent:`条件`,manualEvent:`手动`,webhookEvent:`Webhook`,timerEvent:`定时器`,signalEvent:`信号`,versionHistory:`版本历史`,importBpmn:`导入 BPMN`,exportBpmn:`导出 BPMN`,undo:`撤销`,redo:`重做`,resetZoom:`重置缩放`},dashboard:{addWidget:`添加组件`,removeWidget:`移除组件`,editLayout:`编辑布局`,saveLayout:`保存布局`,resetLayout:`重置布局`,total:`总计`,noDataAvailable:`暂无数据`,noDataSourceFor:`没有可用的数据源:`,noRows:`暂无数据行`,loading:`加载中…`,pickMeasures:`请为该数据集组件选择度量(值)。`,datasetUnsupported:`当前数据源不支持数据集查询。`,details:`明细`,exportCsv:`导出 CSV`,openInList:`在列表中打开`,trend:{vsLastQuarter:`较上季度`,vsLastMonth:`较上月`,vsLastWeek:`较上周`,vsLastYear:`较去年`,vsYesterday:`较昨日`,vsPreviousPeriod:`较上期`},filters:{label:`仪表盘过滤器`,dateRange:`日期范围`,allTime:`全部时间`,custom:`自定义…`,all:`全部`,reset:`重置`,range:{today:`今天`,yesterday:`昨天`,this_week:`本周`,last_week:`上周`,this_month:`本月`,last_month:`上月`,this_quarter:`本季度`,last_quarter:`上季度`,this_year:`今年`,last_year:`去年`,last_7_days:`近 7 天`,last_30_days:`近 30 天`,last_90_days:`近 90 天`}}},configPanel:{save:`保存`,discard:`丢弃`,close:`关闭`,layout:`布局`,columns:`列数`,gap:`间距`,rowHeight:`行高`,data:`数据`,refreshInterval:`刷新间隔`,appearance:`外观`,title:`标题`,showDescription:`显示描述`,theme:`主题`,configuration:`配置`,general:`基本`,advanced:`高级`},appDesigner:{createApp:`创建应用`,editApp:`编辑应用`,basicInfo:`基本信息`,objects:`业务对象`,navigation:`导航`,branding:`品牌`,appName:`应用名称`,appTitle:`标题`,appDescription:`描述`,appIcon:`图标`,template:`模板`,layout:`布局`,layoutSidebar:`侧边栏`,layoutHeader:`顶部导航`,layoutEmpty:`空白`,selectObjects:`选择对象`,searchObjects:`搜索对象…`,selectAll:`全选`,deselectAll:`取消全选`,navBuilder:`导航构建器`,addGroup:`添加分组`,addUrl:`添加链接`,addSeparator:`添加分隔线`,noNavItems:`暂无导航项。`,logoUrl:`Logo 链接`,primaryColor:`主色调`,faviconUrl:`网站图标链接`,preview:`预览`,complete:`完成`,snakeCaseHint:`必须使用 snake_case 格式(如 my_app)`,modeEdit:`编辑`,modePreview:`预览`,modeCode:`代码`,addWidget:`添加组件`,widgetProperties:`组件属性`,dataSource:`数据源`,valueField:`数值字段`,aggregate:`聚合`,colorVariant:`颜色`,addComponent:`添加组件`,componentProperties:`组件属性`,viewType:`视图类型`,fields:`字段`,toolbar:`工具栏`,showSearch:`显示搜索`,showFilters:`显示筛选`,showSort:`显示排序`,appearance:`外观`,rowHeight:`行高`,stripedRows:`斑马纹`,bordered:`边框`,livePreview:`实时预览`,stepBasicDesc:`名称、标题和布局`,stepObjectsDesc:`选择业务对象`,stepNavigationDesc:`构建导航树`,stepBrandingDesc:`Logo、颜色和图标`,noObjectsFound:`未找到对象。`,noNavItemsHint:`暂无导航项。请在上一步选择对象或手动添加项目。`,separator:`分隔线`,separatorLabel:`— 分隔线 —`,newGroup:`新建分组`,newLink:`新建链接`,saveDraft:`保存草稿`,cancelConfirmTitle:`放弃更改?`,cancelConfirmMessage:`您有未保存的更改。确定要取消吗?`,confirmDiscard:`放弃`,keepEditing:`继续编辑`,navNoItems:`暂无导航项。点击上方按钮添加项目。`,navNoPreviewItems:`无项目`,navLivePreview:`实时预览`,navCollapseGroup:`折叠分组`,navExpandGroup:`展开分组`,navAddChild:`添加子项`,navMoveUp:`上移`,navMoveDown:`下移`,navRemove:`移除`,navObjectPage:`对象页面`,navDashboard:`仪表盘`,navPage:`页面`,navReport:`报表`,navGroup:`分组`,navUrl:`链接`,navSeparator:`分隔线`,navTypeObject:`对象`,navTypeDashboard:`仪表盘`,navTypePage:`页面`,navTypeReport:`报表`,navTypeUrl:`链接`,navTypeGroup:`分组`,navTypeSeparator:`分隔线`,navTypeAction:`操作`,navTypeComponent:`组件`,navEditIcon:`编辑图标`,navToggleVisible:`切换可见性`,navHidden:`已隐藏`,navExportSchema:`导出 JSON`,navImportSchema:`导入 JSON`,navExportSuccess:`导航结构已导出`,navImportSuccess:`导航结构已导入`,navImportError:`无效的导航 JSON`,navIconPlaceholder:`图标名称(如 Users)`,dashboardEditor:`仪表盘编辑器`,noWidgets:`暂无小组件。点击上方按钮添加。`,widgetLayoutSize:`布局尺寸`,widgetWidth:`宽度`,widgetHeight:`高度`,dashboardPreview:`仪表盘预览`,noWidgetsPreview:`暂无可预览的小组件`,pageCanvasEditor:`页面画布编辑器`,emptyPage:`空白页面。点击上方按钮添加组件。`,pagePreview:`页面预览`,noComponentsPreview:`暂无可预览的组件`,modePage:`页面`,modeDashboard:`仪表盘`,undo:`撤销`,redo:`重做`,brandingEditor:`品牌编辑器`,brandingExport:`导出 JSON`,brandingImport:`导入 JSON`,brandingPreview:`预览`,brandingSampleButton:`示例按钮`,brandingSampleText:`这是您的品牌主题效果预览。`,colorPalette:`颜色面板`,fontFamily:`字体`,fontDefault:`默认(系统)`,modeLight:`浅色`,modeDark:`深色`,mobilePreview:`移动端预览`,objectManager:{title:`对象管理器`,addObject:`新建对象`,searchPlaceholder:`搜索对象…`,noObjects:`未找到对象。`,objectName:`API 名称`,objectLabel:`标签`,pluralLabel:`复数标签`,icon:`图标`,selectIcon:`选择图标…`,group:`分组`,noGroup:`无分组`,sortOrder:`排序`,enabled:`启用`,relationships:`关系`,systemBadge:`系统`,fieldCount:`{{count}} 个字段`,ungrouped:`未分组`,deleteConfirmTitle:`删除对象?`,deleteConfirmMessage:`这将永久删除该对象及其所有字段。此操作无法撤销。`},fieldDesigner:{title:`字段设计器`,addField:`新建字段`,searchPlaceholder:`搜索字段…`,allTypes:`所有类型`,noFields:`未找到字段。`,fieldName:`API 名称`,fieldLabel:`标签`,fieldType:`类型`,fieldGroup:`分组`,description:`描述`,required:`必填`,unique:`唯一`,readOnly:`只读`,hidden:`隐藏`,indexed:`索引`,externalId:`外部 ID`,trackHistory:`追踪历史`,defaultValue:`默认值`,placeholder:`占位文本`,referenceTo:`引用对象`,formula:`公式`,options:`选项`,addOption:`添加选项`,validationRules:`验证规则`,addRule:`添加规则`,systemBadge:`系统`,ungrouped:`通用`,deleteConfirmTitle:`删除字段?`,deleteConfirmMessage:`这将永久删除该字段。此字段中的现有数据将丢失。`,basicSection:`基础`,typeSpecificSection:`类型设置`,advancedSection:`高级`,typeCategory:{text:`文本`,number:`数字`,date:`日期时间`,choice:`选择`,relation:`关联`,advanced:`高级`}}},console:{saveAdvisoryTitle:`已保存 — 编辑检查提出了 {{count}} 条建议`,title:`ObjectStack 控制台`,initializing:`正在初始化应用程序…`,search:`搜索…`,breadcrumb:{dashboards:`仪表盘`,pages:`页面`,reports:`报告`,system:`系统`},nav:{pinItem:`固定 {{name}}`,unpinItem:`取消固定 {{name}}`,dragToReorder:`拖动以重新排序`,favorites:`收藏`},settingsHub:{title:`设置`,subtitle:`配置工作区、集成与功能开关。`,loadError:`加载设置失败`,empty:`尚未注册任何设置。插件可通过 SettingsService 注册设置清单。`,settingsCount:`{{n}} 项设置`,beta:`Beta`,categories:{Workspace:`工作区`,Communication:`通讯`,Security:`安全`,Infrastructure:`基础设施`,Beta:`Beta`,Other:`其他`}},settingsView:{backToHub:`全部设置`,back:`返回`,noNamespace:`未选择命名空间。`,loadError:`加载设置失败`,saved:`设置已保存`,saveFailed:`保存失败`,lockedByEnv:`已被环境变量锁定:{{key}}`,lockedByEnvNoKey:`已被环境变量锁定`,actionSucceeded:`操作成功`,actionFailed:`操作失败`,discard:`放弃`,saveChanges:`保存更改`,unsavedCount:`{{count}} 项未保存的更改`,unsavedCount_one:`{{count}} 项未保存的更改`,unsavedCount_other:`{{count}} 项未保存的更改`,cryptoRefusalTitle:`此部署无法加密机密信息`,cryptoRefusalSubjectSuffix:`被声明为加密字段,因此未写入任何内容。`,cryptoRefusalNoSubject:`声明为加密的值被拒绝,因此未写入任何内容。`,cryptoRefusalToast:`无法加密机密信息:{{subject}}`,cryptoRefusalToastNoSubject:`无法加密机密信息`},loadingSteps:{connecting:`正在连接数据源`,loadingConfig:`正在加载配置`,preparingWorkspace:`正在准备工作区`},loadingHint:`初始化新环境可能需要几秒钟。`,error:{connectionFailed:`无法连接到服务器`,serverUnreachable:`无法访问服务器 {{url}}。`,checkServer:`请检查网络连接,或确认后端服务正在运行。`,timeout:`连接超时(10 秒)。`},actions:{retry:`重试`,retrying:`正在重试…`},serverAction:{openingTitle:`正在打开…`,openingBody:`正在打开…可能需要一点时间。`,popupBlockedTitle:`浏览器拦截了弹窗`,popupBlockedDescription:`浏览器阻止了新标签页的打开。`,popupBlockedAction:`在新标签页打开`},shortcuts:{title:`键盘快捷键`,description:`所有可用键盘快捷键的快速参考。`,groups:{general:`通用`,navigation:`导航`,dataViews:`数据视图`,aiChat:`AI 助手`,preferences:`偏好设置`},openCommandPalette:`打开命令面板`,showShortcuts:`显示键盘快捷键`,closeDialog:`关闭对话框/面板`,toggleSidebar:`切换侧边栏`,focusSearch:`聚焦搜索`,createRecord:`新建记录`,refreshData:`刷新数据`,editRecord:`编辑选中记录`,newChat:`新建对话`,toggleChatsList:`切换对话列表`,toggleDarkMode:`切换深色模式`},commandPalette:{title:`命令面板`,placeholder:`输入命令或搜索…`,noResults:`未找到结果。`,searching:`搜索中…`,records:`记录`,recentRecords:`最近访问`,objects:`对象`,dashboards:`仪表盘`,pages:`页面`,reports:`报表`,switchApp:`切换应用`,current:`当前`,preferences:`偏好设置`,lightTheme:`浅色主题`,darkTheme:`深色主题`,systemTheme:`系统主题`,actions:`操作`,openFullSearch:`打开完整搜索页面`,createApp:`创建新应用`},ai:{usage:{title:`AI 用量`,meterBuild:`AI 搭建`,meterAsk:`数据问询`,statusOk:`额度充足`,statusLow:`即将用完`,statusFull:`额度已用完`,resetsDaily:`今晚重置`,resetsMonthly:`下个周期重置`,ctaUpgrade:`升级以继续使用`,ctaTopUp:`购买额度包以继续`,ariaLabel:`AI 用量:{{status}}`},workspaceTitle:`AI 工作区`,workspaceSubtitle:`提问、查看并继续历史对话`,openChats:`打开对话列表`,chats:`对话`,chatsDescription:`浏览和管理 AI 对话。`,share:`分享`,shareTitle:`分享此对话`,shareDisabledTitle:`开始对话后即可分享`,newChat:`新对话`,searchChats:`搜索对话…`,noChatsYet:`暂无对话`,noChatsDescription:`开始新的对话后会显示在这里。`,noMatchingChats:`没有匹配的对话。`,newConversation:`新对话`,renameConversation:`重命名对话`,deleteConversation:`删除对话`,saveRename:`保存重命名`,cancelRename:`取消重命名`,loadingHistory:`正在加载对话历史…`,conversationReady:`对话已就绪`,preparingConversation:`正在准备新对话`,offlineDemoMode:`离线演示模式 — 无法获取助手列表`,sendFailedRateLimited:`发送过于频繁,请稍候再试。你的消息已保留在输入框中。`,sendFailedGeneric:`消息发送失败,请重试。你的消息已保留在输入框中。`,askAgent:`向 {{agent}} 提问…`,assistant:`助手`,liveCanvas:`草稿预览 · {{app}}`,liveCanvasUnlisted:`运行预览 · {{app}}(未发布 · 仅自己可见)`,loadingAgents:`正在加载助手…`,askAnything:`输入你的问题…`,emptyTitle:`开始对话`,emptyDescription:`可以直接提问,助手会结合当前应用上下文提供帮助。`,switchAssistant:`切换助手`,chooseAgent:`选择助手…`,empty:{build:{title:`用 AI 搭建`,description:`用自然语言描述一个应用或流程 —— 我会起草对象、界面和自动化,随后你审阅并发布。`},ask:{title:`向你的数据提问`,description:`针对你的记录提问 —— 在你有权访问的数据范围内进行计数、列举和汇总。`},editApp:{title:`正在编辑「{{app}}」`,titleGeneric:`编辑此应用`,description:`想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或自动化,或调整已有内容。`}},clearConversation:`清空`,sendHint:`发送`,agentActivity:`执行过程`,toolCompleted:`已完成`,toolRunning:`运行中`,toolAwaitingApproval:`等待确认`,toolFailed:`失败`,toolDetailsHidden:`已隐藏工具参数和原始结果,仅保留过程摘要。`,copy:`复制`,copied:`已复制`,regenerate:`重新生成`,model:`模型`,submit:`发送`,uploadFiles:`上传文件`,stopResponse:`停止生成`,trace:`调试 trace`,viewTrace:`查看调试 trace`,nextSteps:`下一步`,publishDrafts:`发布`,publishOk:`已发布,对象已生效。`,seedWarn:`已发布,但部分示例数据未能载入。`,openBuiltApp:`打开应用`,designBuiltApp:`进入 Studio 继续完善`,previewDraft:`预览`,previewApp:`预览应用`,resizeSplit:`调整对话与预览的宽度`,hideChats:`隐藏对话列表`,showChats:`显示对话列表`,planTitle:`方案预览`,planQuestions:`搭建前请确认`,planAssumptions:`假设`,planApproveHint:`回复以确认或调整该方案。`,planApprove:`开始搭建`,planAdjust:`调整方案`,planApproveMessage:`确认,开始搭建。`,planApproveDefaultsMessage:`确认搭建,未决问题按你的合理假设和默认处理。`,planAnswerMessage:`关于「{{question}}」,我选择「{{option}}」。`,changesTitle:`确认改动`,changesConfirmed:`已确认`,changesConfirm:`确认修改`,changesConfirmHint:`回复以确认或调整该改动。`,changesConfirmMessage:`确认修改,应用你刚才提议的改动。`,changeVerb:{createObject:`新建对象`,addField:`新增字段`,modifyField:`修改字段`,deleteField:`删除字段`,createMetadata:`新建`,updateMetadata:`修改`,createSeed:`生成示例数据`,createPackage:`新建应用包`},justNow:`刚刚`,minutesAgo:`{{count}} 分钟前`,hoursAgo:`{{count}} 小时前`,daysAgo:`{{count}} 天前`,agentLabels:{ask:`提问`,build:`构建`,dataChat:`智能助手`,metadataAssistant:`元数据开发助手`},suggestions:{dataChat:{userCount:`系统里有多少个用户?列出他们的邮箱。`,recentRecords:`帮我列出最近创建的 5 条记录。`,recordCounts:`统计每个对象的记录数。`},metadataAssistant:{buildCrm:`帮我搭建一个 CRM:客户、联系人、商机,并建立它们之间的关系。`,buildApp:`做一个项目管理应用:项目、任务、成员。`,buildFlow:`设计一个工单系统:工单、优先级、状态流转。`,buildInventory:`做一个库存管理应用:商品、库存量、供应商,以及低库存预警。`,buildRecruiting:`做一个招聘跟踪应用:候选人、在招岗位、面试阶段和面试记录。`},generic:{help:`你可以帮我做什么?`,availableObjects:`列出可用的数据对象。`,recentActivity:`总结我的最近动态。`},editApp:{addField:`给某个对象加一个字段。`,addObject:`新增一个对象,并关联到已有对象。`,addDashboard:`加一个展示关键指标的仪表盘。`,addAutomation:`加一个自动化 —— 审批、状态流转或通知。`}},collapseToDock:`收起到侧边栏`,switchApp:`切换应用`,switchAppLabel:`按应用查看搭建对话`,newApp:`新建应用`,connectionWaiting:`正在等待服务器…`,connectionStalled:`仍在处理…`,connectionOffline:`连接已断开 — 正在重新连接…`,designingPlan:`正在设计你的应用…`,designingPlanHint:{data:`正在梳理你要跟踪的数据…`,objects:`正在设计对象及其字段…`,relations:`正在关联相关记录…`,lookups:`正在设置关系与关联查找…`,views:`正在规划界面与视图…`,forms:`正在排布表单与列表…`,defaults:`正在添加合理的默认值与校验…`,dashboard:`正在勾画用于跟踪的仪表盘…`,review:`正在复核整体结构是否自洽…`,finalize:`正在汇总方案…`},planBuilding:`正在搭建…`,planBuilt:`已搭建`,planDeferred:`尚未搭建`,planReady:`方案已就绪。现在就开始搭建,或者告诉我需要调整什么。`,published:`已发布`,publishFailed:`发布失败`,unavailableTitle:`AI 助手不可用`,unavailableDescription:`当前部署未启用 AI 助手。其他功能一切正常。`,unavailableError:`无法连接 AI 服务。它可能暂时离线 — 请重试,或返回首页。`,unavailableRetry:`重试`,unavailableHome:`返回首页`,dock:{title:`助手`,description:`AI 助手对话`,resize:`调整对话宽度`,collapse:`收起对话`,maximize:`以完整页面打开`,open:`打开助手`},group:{today:`今天`,yesterday:`昨天`,previous7Days:`过去 7 天`,previous30Days:`过去 30 天`,older:`更早`}},errors:{somethingWentWrong:`出错了`,unexpectedError:`渲染此视图时发生意外错误。`,tryAgain:`重试`,goHome:`返回首页`,errorDetails:`错误详情(仅开发模式)`},notFound:{title:`页面不存在`,description:`你访问的链接与该应用中的任何视图都不匹配。`,back:`返回`},theme:{toggle:`切换主题`,light:`浅色`,dark:`深色`,system:`系统`},objectData:{badge:`数据`,description:`由 URL 定义的数据切面——不绑定任何已保存视图。`,filteredBy:`筛选条件`,removeFilter:`移除筛选 {{field}}`,saveAsView:`另存为视图`,noAccessTitle:`无访问权限`,noAccess:`您没有权限查看此数据。`},identityImport:{policyTitle:`导入用户的登录方式`,policy:{auto:`自动(推荐)`,invite:`发送邀请`,temporary:`临时密码`,none:`不设密码(仅身份)`},policyHint:{auto:`可触达的用户收到邀请(邮件或短信);无法触达的行生成一次性密码,仅在结果页显示一次。无论是否配置邮件/短信服务都可用。`,invite:`为每个新建用户发送"设置密码"邮件(仅手机号的行发送邀请短信)。需要已配置邮件/短信服务——无法触达的行会失败。`,temporary:`适用于未配置邮件/短信的部署:为每个新建用户生成一次性密码,仅在结果页显示一次,首次登录强制修改。`,none:`用户通过手机验证码、魔法链接或重置链接首次登录,之后自行设置密码。`},passwordsNote:`临时密码——仅显示一次,不会被保存。请立即保存;用户首次登录时必须修改。`,passwordsMore:`更多条目已省略——请使用下载。`,passwordsDownload:`下载 CSV`},objectView:{systemViewReadonly:`系统视图由代码定义,只读。`,cannotEditMetaView:`该视图为内置视图,由代码定义,无法修改。`,cannotDeleteMetaView:`该视图为内置视图,由代码定义,无法删除。`,expandToPage:`以完整页面打开`,objectNotFound:`未找到对象`,objectNotFoundDescription:`对象"{{objectName}}"在当前配置中不存在。`,objectNotFoundHint:`请检查您的应用导航设置或从侧边栏选择其他对象。`,filterOrNotSavable:`该筛选条件之间使用「或」,保存到视图暂不支持这种结构。它仍会作用于当前列表 —— 取消「或」分组后才能保存到视图。`,filterNestedNotSavable:`该筛选使用了嵌套条件分组,保存到视图不支持这种结构。请改为单层条件列表后再保存到视图。`,allRecords:`所有记录`,exitDesignMode:`退出设计模式`,enterDesignMode:`进入设计模式`,metadataInspector:`元数据检查器`,editView:`编辑视图`,addView:`添加视图`,designTools:`设计工具`,new:`新建`,import:`导入`,importTitle:`从 CSV 文件导入`,importedToast:`成功导入 {{count}} 行。`,importedWithSkipped:`已导入 {{ok}} 行;跳过 {{skipped}} 行。`,configureView:`配置视图`,closePanel:`关闭面板`,showAdvancedSettings:`显示高级设置`,showFewerSettings:`显示精简设置`,page:`页面`,pageConfigHint:`工具栏、导航与视图外壳设置`,listConfigHint:`此列表类型的数据渲染、列与外观`,general:`常规`,generalHint:`视图标题、描述和类型`,toolbar:`工具栏`,toolbarHint:`搜索、筛选、排序、分组和密度切换`,toolbarEnabledCount:`已启用 {{count}}/{{total}} 项`,navigationSection:`导航`,navigationHint:`行点击行为和详情视图设置`,records:`记录`,recordsHint:`选择模式、添加记录和内联编辑`,exportPrint:`导出与打印`,exportPrintHint:`导出格式、打印和记录数显示`,showAllFields:`全部显示`,hideAllFields:`全部隐藏`,searchFields:`搜索字段…`,title:`标题`,description:`描述`,data:`数据`,source:`数据源`,columns:`列`,filterBy:`筛选条件`,sortBy:`排序条件`,appearance:`外观`,showDescription:`显示描述`,viewType:`视图类型`,userFilters:`用户筛选器`,enableSearch:`启用搜索`,enableFilter:`启用筛选`,enableSort:`启用排序`,enableHideFields:`启用隐藏字段`,enableGroup:`启用分组`,enableColor:`启用颜色`,enableDensity:`启用密度`,userActions:`用户操作`,addRecordViaForm:`通过表单添加记录`,advanced:`高级`,allowExport:`允许导出`,recordCount:`{{count}} 条记录`,noDescription:`无描述`,none:`无`,columnsConfigured:`{{count}} 列`,save:`保存`,discard:`丢弃`,createView:`创建视图`,createViewDesc:`先选择视图类型,再为它命名。所有设置之后都可以修改。`,cancel:`取消`,create:`创建`,delete:`删除`,deleteViewTitle:`删除视图`,deleteViewConfirm:`确定要删除视图 "{{name}}" 吗?此操作无法撤销。`,bulkDeleteConfirm:`确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。`,duplicateViewName:`已存在同名视图。`,viewTypeGrid:`表格`,viewTypeGridDesc:`电子表格风格的记录表格。`,viewTypeKanban:`看板`,viewTypeKanbanDesc:`按单选字段分列的卡片视图。`,viewTypeCalendar:`日历`,viewTypeCalendarDesc:`按日期把记录放到月历上。`,viewTypeGallery:`画廊`,viewTypeGalleryDesc:`由附件字段驱动的大图卡片。`,viewTypeTimeline:`时间线`,viewTypeTimelineDesc:`记录按横向时间轴展开。`,viewTypeGantt:`甘特图`,viewTypeGanttDesc:`展示项目起止时间和依赖。`,viewTypeMap:`地图`,viewTypeMapDesc:`根据经纬度字段显示地理标记。`,viewTypeChart:`图表`,viewTypeChartDesc:`聚合的柱状/折线/饼状图。`,viewTypeTree:`树形`,viewTypeTreeDesc:`按父级字段把自引用记录嵌套成层级树。`,parentField:`父级字段`,parentFieldHelp:`指向同一对象的父级字段,决定树的层级(仅自引用字段可选)。`,newView:`新视图`,viewName:`名称`,viewNameHelp:`机器标识(snake_case),根据标题自动生成,可自行修改。`,viewNameRequired:`请输入标识(小写字母、数字、下划线)。非拉丁标题不会自动生成。`,viewNameInvalid:`仅限小写字母、数字和下划线,且以字母或下划线开头。`,typeOptions:`类型选项`,groupByField:`分组字段`,groupByFieldHelp:`看板会按该字段的不同取值分列。`,startDateField:`开始日期字段`,startDateFieldHelp:`日历将按该日期把记录放到对应日期格。`,ganttStartDateFieldHelp:`甘特条形图的左端使用该日期。`,ganttEndDateFieldHelp:`甘特条形图的右端使用该日期。`,timelineDateFieldHelp:`记录在时间轴上按该日期定位。`,titleField:`标题字段`,latitudeField:`纬度字段`,latitudeFieldHelp:`提供纬度坐标的字段(仅地理坐标字段可选)。`,longitudeField:`经度字段`,longitudeFieldHelp:`提供经度坐标的字段(仅地理坐标字段可选)。`,imageField:`图片字段`,imageFieldHelp:`画廊封面来自该图片或附件字段。`,dateField:`日期字段`,selectField:`选择字段…`,selectOption:`选择…`,noEligibleFieldForType:`没有符合条件的字段。请先在对象上添加该类型字段。`,viewTypeUnavailable:`该对象缺少所需的“{{field}}”字段。`,viewTypeUnavailableShort:`当前对象不支持。`,chartType:`图表类型`,chartTypeHelp:`决定数据如何呈现。`,chartTypeBar:`柱状图`,chartTypeLine:`折线图`,chartTypePie:`饼图`,chartTypeArea:`面积图`,chartTypeScatter:`散点图`,xAxisField:`X 轴字段`,xAxisFieldHelp:`用于分类或时间维度的字段。`,yAxisField:`Y 轴字段`,yAxisFieldHelp:`用于数值聚合的字段。`,gridOptionsHint:`网格视图使用上方配置的列。`,groupBy:`分组依据`,prefixField:`前缀字段`,fields:`字段`,fieldsVisible:`{{count}} 个可见`,sortsCount:`{{count}} 个排序`,filtersCount:`{{count}} 个筛选`,endDateField:`结束日期字段`,color:`颜色`,fieldTextColor:`字段文字颜色`,rowHeight:`行高`,wrapHeaders:`自动换行标题`,showFieldDescriptions:`显示字段描述`,collapseAllByDefault:`默认全部折叠`,striped:`斑马纹行`,bordered:`边框单元格`,inlineEdit:`内联编辑记录`,addDeleteRecordsInline:`内联添加/删除记录`,clickIntoRecordDetails:`点击进入记录详情`,navigationMode:`导航模式`,navigationWidth:`导航宽度`,navigationWidthHint:`适用于抽屉、弹窗和分屏导航模式`,openNewTab:`在新标签页打开`,openNewTabHint:`适用于页面和新窗口导航模式`,selectionMode:`选择模式`,selectionNone:`无`,selectionSingle:`单选`,selectionMultiple:`多选`,pageSize:`每页记录数`,pageSizeOptions:`每页选项`,exportFormats:`导出格式`,exportMaxRecords:`最大记录数`,exportIncludeHeaders:`包含表头`,exportFileNamePrefix:`文件名前缀`,searchableFields:`可搜索字段`,filterableFields:`可筛选字段`,resizableColumns:`可调整列宽`,densityCompact:`紧凑`,densityComfortable:`舒适`,densitySpacious:`宽松`,densityMode:`密度模式`,hiddenFields:`隐藏字段`,rowActions:`行操作`,bulkActions:`批量操作`,sharing:`共享`,sharingEnabled:`启用共享`,sharingVisibility:`可见性`,addRecordEnabled:`启用添加记录`,addRecordPosition:`位置`,addRecordMode:`模式`,addRecordFormView:`表单视图`,conditionalFormatting:`条件格式`,addRule:`添加规则`,quickFilters:`快速筛选`,addQuickFilter:`添加快速筛选`,ufElements:`元素类型`,ufDropdown:`下拉菜单`,ufTabs:`标签页`,ufToggle:`开关`,ufAddField:`+ 添加筛选字段…`,ufNoFields:`无可用字段`,ufAddTab:`+ 添加标签页`,ufTabLabel:`标签`,ufShowAllRecords:`显示"全部记录"标签页`,ufAllowAddTab:`允许添加标签页`,showRecordCount:`显示记录计数`,allowPrinting:`允许打印`,virtualScroll:`虚拟滚动`,emptyStateTitle:`空状态标题`,emptyStateMessage:`空状态消息`,emptyStateIcon:`空状态图标`,ariaLabel:`ARIA 标签`,ariaDescribedBy:`ARIA 描述`,ariaLive:`ARIA 实时区域`,accessibility:`无障碍`,viewTabs:`视图标签`},localeSwitcher:{label:`语言`}},auth:{login:{title:`登录您的账户`,description:`输入您的邮箱和密码以继续`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordPlaceholder:`输入您的密码`,forgotPasswordText:`忘记密码?`,submitButton:`登录`,submittingButton:`登录中…`,noAccountText:`还没有账户?`,signUpText:`注册`,signingIn:`正在登录…`,ssoHandoff:`继续前往 {{target}}`,devAdminHint:{title:`开发实例`,body:`可使用内置的开发管理员登录:`,dismiss:`关闭`},errors:{invalidCredentials:`邮箱或密码错误,请重试。`,emailNotVerified:`请先验证您的邮箱后再登录。`,oauthCallbackFailed:`单点登录未能完成——登录链接已过期或已被使用,请重新发起登录。`},emailOrPhoneLabel:`邮箱或手机号`,emailOrPhonePlaceholder:`name@example.com 或 +1 555 000 0000`,phoneLabel:`手机号`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`验证码`,otpCodePlaceholder:`6 位验证码`,sendOtpButton:`获取验证码`,resendOtpCountdownText:`{seconds} 秒后可重新发送`,usePhoneOtpText:`使用验证码登录`,usePasswordSignInText:`改用密码登录`},register:{title:`创建账户`,description:`创建账号,开始搭建。`,nameLabel:`姓名`,namePlaceholder:`张三`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordPlaceholder:`创建密码(至少8个字符)`,confirmPasswordLabel:`确认密码`,confirmPasswordPlaceholder:`确认您的密码`,passwordMismatchError:`两次输入的密码不一致`,passwordTooShortError:`密码至少需要8个字符`,submitButton:`创建账户`,submittingButton:`创建中…`,hasAccountText:`已有账户?`,signInText:`登录`,errors:{userExists:`该邮箱已被注册,请直接登录或更换邮箱。`},verifyInbox:{title:`请检查您的邮箱`,description:`我们已向 {{email}} 发送了一封验证邮件,请点击邮件中的链接激活账户。`,resend:`重新发送验证邮件`,resending:`发送中…`,resent:`验证邮件已发送。`,backToSignIn:`返回登录`}},forgotPassword:{title:`重置密码`,description:`输入您的邮箱地址,我们将发送重置密码链接`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,submitButton:`发送重置链接`,submittingButton:`发送中…`,successTitle:`请查看您的邮箱`,successDescription:`我们已将密码重置链接发送至 {{email}},请检查您的收件箱。`,backToSignInText:`返回登录`,rememberPasswordText:`记住密码了?`,signInText:`登录`,phoneLabel:`手机号`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`验证码`,otpCodePlaceholder:`6 位验证码`,sendOtpButton:`获取验证码`,resendOtpCountdownText:`{seconds} 秒后可重新发送`,newPasswordLabel:`新密码`,newPasswordPlaceholder:`输入新密码`,resetButton:`重置密码`,usePhoneResetText:`通过短信验证码重置`,useEmailResetText:`改用邮箱重置`,phoneSuccessTitle:`密码已重置`,phoneSuccessDescription:`您的密码已重置,现在可以使用新密码登录了。`},setPassword:{title:`设置一个备用密码`,description:`您是通过单点登录进入的。设置一个本地密码,这样即使单点登录不可用,您仍能直接登录此环境。`,email:`邮箱`,newPassword:`新密码`,confirmPassword:`确认密码`,submit:`设置密码`,submitting:`保存中…`,success:`本地密码已设置`,failed:`无法设置密码`,passwordsMismatch:`两次输入的密码不一致`,noSession:`您的会话已过期。`,backToSignIn:`重新登录`},resetPassword:{title:`设置新密码`,description:`请选择一个您未使用过的密码。`,newPassword:`新密码`,confirmPassword:`确认密码`,submit:`更新密码`,submitting:`更新中…`,success:`密码已更新`,failed:`重置失败`,invalidToken:`此重置链接无效或已过期。`,missingToken:`重置链接缺失或已过期`,passwordsMismatch:`两次输入的密码不一致`,requestNewLink:`获取新链接`},verifyEmail:{title:`验证您的邮箱地址`,description:`我们已向您的邮箱发送了一封验证邮件,请点击邮件中的链接以验证您的账户。`,sentTo:`发送至:`,verifyingTitle:`验证中…`,verifyingDescription:`正在确认您的邮箱,请稍候。`,successTitle:`邮箱已验证`,successDescription:`您的邮箱已确认,现在可以登录了。`,errorTitle:`验证失败`,errorDescription:`验证失败,请重新获取验证链接。`,missingToken:`验证链接缺少令牌。`,emailMissing:`缺少邮箱地址`,resendButton:`重新发送验证邮件`,resending:`发送中…`,resent:`邮件已发送!请查看收件箱`,resentSuccess:`验证邮件已发送!`,resentDescription:`请查看收件箱并点击验证链接。`,resendFailed:`无法重新发送验证邮件`,signInLink:`前往登录`,backToSignIn:`返回登录`,backToLogin:`返回登录`,checkSpam:`没有收到邮件?请检查垃圾邮件文件夹或联系支持。`,or:`或`,resendUnavailable:`此环境可能未配置邮件发送服务。如果问题持续存在,请联系支持。`},setup:{welcomeTitle:`欢迎使用 ObjectStack`,description:`创建第一个所有者账户以完成本次部署的初始化。`,yourName:`您的姓名`,orgName:`组织名称`,orgNamePlaceholder:`Acme Inc.`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordHint:`至少 8 个字符`,submit:`创建所有者账户`,submitting:`设置中…`,failed:`设置失败`},device:{title:`授权新设备`,subtitle:`批准此设备以 {{email}} 的身份登录。`,userCodeLabel:`设备代码`,requesterLabel:`连接请求来自`,approveWarning:`仅当这是你刚刚自己发起的连接时才批准。批准后,该运行时将能访问你所在组织的私有软件包。`,loggedInAs:`已以 {{email}} 身份登录`,approve:`批准设备`,approving:`批准中…`,approvedTitle:`设备已授权`,approvedDescription:`您可以返回该设备,它应该很快就会登录。`,approveSuccess:`设备已授权`,approveSuccessDescription:`您可以关闭此窗口。`,approveFailed:`批准失败`,deny:`拒绝请求`,denying:`拒绝中…`,deniedTitle:`访问被拒绝`,deniedDescription:`该设备将不会被授予访问权限。`,denyFailed:`拒绝请求失败`,invalidTitle:`无效的设备链接`,invalidDescription:`URL 中未提供设备代码。`,loading:`加载中…`,cancel:`取消`,disabledTitle:`未启用设备授权`,disabledDescription:`此部署未启用设备授权,因此无法在此批准该设备。`},shell:{tenantHostHint:`您正在登录此工作区`},layout:{headline:`更快地构建强大的业务应用。`,subhead:`面向企业数据管理、工作流与分析的统一平台。`},remediation:{signOut:`改为退出登录`,password:{title:`您的密码已过期`,fallbackMessage:`请设置新密码后继续。`,current:`当前密码`,next:`新密码`,confirm:`确认新密码`,submit:`修改密码并继续`,submitting:`正在更新…`,mismatch:`两次输入的新密码不一致。`,failed:`无法修改密码。`},mfa:{title:`设置双重验证`,fallbackMessage:`您的组织要求使用身份验证器应用后方可继续。`,confirmPassword:`确认您的密码`,continue:`继续`,preparing:`正在准备…`,enrollFailed:`无法开始绑定。`,scanTitle:`使用身份验证器扫码`,scanBody:`使用 Google Authenticator、1Password、Authy 等应用扫描此二维码,然后输入 6 位验证码。`,backupTitle:`保存您的备用码`,backupBody:`请妥善保管——设备丢失时每个备用码可使用一次。`,codeLabel:`6 位验证码`,verify:`验证并继续`,verifying:`正在验证…`,invalidCode:`验证码无效,请重试。`}}},oauth:{consent:{title:`{{appName}} 请求访问您的账户`,request:`{{appName}} 正在请求授权{{suffix}}。`,unknownApp:`某个应用`,willAllow:`此应用将能够:`,scope:{openid:`确认您的身份`,profile:`读取您的基本资料(姓名、头像)`,email:`读取您的邮箱地址`,offlineAccess:`保持登录状态(刷新访问权限)`},deny:`拒绝`,authorize:`授权`,submitting:`授权中…`,granted:`已授予访问权限`,denied:`访问被拒绝`,noRedirect:`服务器未返回跳转地址。`,failed:`授权失败`,footer:`您可以随时在账户设置中撤销访问权限。`}},profile:{title:`个人资料`,subtitle:`管理您的账户设置`,saving:`保存中…`,avatar:{upload:`上传`,replace:`更换`,remove:`移除`},info:{title:`个人信息`,description:`更新您的姓名并查看账户详情`,saved:`个人资料已更新。`,name:`姓名`,email:`邮箱`,emailImmutable:`邮箱不可修改。`,role:`角色`,save:`保存更改`},password:{changeTitle:`修改密码`,setTitle:`设置本地密码`,changeDescription:`更新您在此环境登录所用的密码。`,setDescription:`您通过单点登录进入。设置本地密码后,也可以在此环境使用邮箱和密码登录。`,current:`当前密码`,new:`新密码`,password:`密码`,confirm:`确认密码`,tooShort:`密码长度至少为 8 个字符`,mismatch:`两次输入的密码不一致`,enterCurrent:`请输入当前密码`,changed:`密码已修改。`,localSet:`本地密码已设置。现在您可以在此环境使用邮箱和密码登录。`,changeAction:`修改密码`,setAction:`设置密码`}},errors:{networkError:`网络错误,请检查网络连接。`,serverError:`服务器错误,请稍后重试。`,notFound:`资源未找到。`,unauthorized:`您没有权限执行此操作。`,forbidden:`访问被拒绝。`,timeout:`请求超时,请重试。`,unknown:`发生未知错误。`},workspace:{label:`工作区`,default:`我的工作区`,switch:`切换工作区`,create:`创建工作区`,createTitle:`创建工作区`,createDescription:`工作区是团队协作的共享空间。`,createButton:`创建工作区`,nameLabel:`工作区名称`,namePlaceholder:`例如:极客科技`,slugLabel:`URL 标识`,slugHint:`用于 URL 中,仅支持小写字母、数字和连字符。`,invite:`邀请成员`,members:`成员`,settings:`工作区设置`,multiOrgDisabled:`此实例已禁用创建新组织。`,createFailed:`创建工作区失败`},help:{keyboardShortcuts:`键盘快捷键`,onThisPage:`本页目录`,appDocs:`本应用文档`,allDocs:`全部文档`,onlineDocs:`在线文档`},sidebar:{settings:`设置`,help:`帮助`,helpTooltip:`帮助与文档`,activityFeed:`活动动态`,notifications:`通知`,approvals:`审批`,inbox:`消息中心`,inboxAriaLabel:`打开消息中心`,area:`区域`,scope:`范围`,packageManagement:`软件包管理`,searchNavigation:`搜索导航…`,recent:`最近使用`,favorites:`收藏`,starred:`已收藏`,removeFromFavorites:`从收藏中移除 {{name}}`},topbar:{aiAssistant:`AI 助手`,designInStudio:`在 Studio 中设计`,openAssistant:`打开{{name}}助手`,offline:`离线`,usersOnline:`当前在线用户`,switchView:`切换视图`,switchObject:`切换对象`,connection:{connected:`已连接`,connecting:`连接中…`,reconnecting:`正在重新连接…`,disconnected:`已断开连接`,error:`连接错误`},stage:{preview:`预览版`,beta:`测试版`,tooltip:`本平台处于预览版,功能可能调整。`}},home:{title:`首页`,subtitle:`您的工作区仪表盘`,nav:`首页`,allApps:`全部应用`,yourApps:`我的应用`,showMoreApps:`更多`,showLess:`收起`,continueEmpty:`你打开过的内容会显示在这里。`,actionCenter:{title:`待办事项`,empty:`全部处理完毕`},greetingMorning:`早上好`,greetingAfternoon:`下午好`,greetingEvening:`晚上好`,greetingNight:`夜深了`,heroTagline:`从上次离开的地方继续,或者探索新的内容。`,build:{title:`构建应用`,subtitle:`从零开始 — 设计对象、表单、自动化与界面。`},template:{title:`从模板开始`,subtitle:`从应用市场安装模板应用并按需定制。`},open:`打开`,stats:{apps:`应用`,starred:`收藏`,recent:`最近访问`},loading:`正在加载工作区…`,recent:`最近使用`,starred:`收藏`,welcome:`用 AI 搭建你的业务系统`,welcomeDescription:`用一句话描述你的业务,AI 帮你生成对象、界面、API 和 agent 工具。也可以手动从零开始。`,welcomeAdminDescription:`用一句话描述你的业务,AI 会为你生成对象、界面、API 和智能体工具;也可以从左侧菜单自行搭建。`,welcomeAdminDescriptionNoBuild:`从左侧的「管理」菜单创建你的第一个应用。有了数据后,AI 助手可以帮你查询和分析。`,welcomeAdminDescriptionNoAi:`从左侧的「管理」菜单创建你的第一个应用。`,noAppsTitle:`还没有应用`,noAppsDescription:`工作区正在准备中——管理员共享给你的应用会显示在这里。`,buildWithAI:`用 AI 搭建`,askAI:`问 AI`,recoveryReminder:{message:`建议设置一个备用密码,这样即使单点登录不可用,你仍能直接登录此环境。`,cta:`设置密码`,dismiss:`关闭`},pendingDrafts:{message:`你有 {{count}} 项未发布的更改 —— 点击发布即可生效。`,cta:`发布`,publishing:`发布中…`,published:`已发布!更改已生效。`,publishFailed:`发布失败`,nothing:`没有需要发布的内容。`,probeWarn:`已发布,但验证发现了问题。`,seedWarn:`已发布,但部分示例数据未能载入。`,publishedVerified:`已发布并验证 —— {{count}} 行示例数据已生效。`,capabilityWarn:`编写检查:{{count}} 个能力引用无法解析。`},createFirstApp:`手动创建应用`,systemSettings:`系统设置`,browseMarketplace:`浏览应用市场`,quickActions:{title:`快捷操作`,createApp:`创建应用`,createAppDesc:`从新应用开始`,manageObjects:`管理对象`,manageObjectsDesc:`配置数据模型`,systemSettings:`系统设置`,systemSettingsDesc:`配置您的工作区`},recentApps:{title:`最近访问`,itemType:{object:`对象`,dashboard:`仪表盘`,page:`页面`,record:`记录`}},starredApps:{title:`收藏`},gettingStarted:{title:`把首页布置成你喜欢的样子`,description:`收藏一个应用即可固定到此处,一键直达。打开过的内容会自动出现在「最近访问」中。`,cta:`浏览全部应用`},appCard:{noDescription:`暂无描述`,default:`默认`}},layout:{appSwitcher:{home:`首页`,switchApplication:`切换应用`,appsAvailable:`共 {{count}} 个可用应用`,addApp:`新增应用`,editApp:`编辑应用`,editNavigation:`编辑导航`,manageAllApps:`管理所有应用`,systemConsole:`系统控制台`,noAppsConfigured:`尚未配置任何应用`},systemNav:{systemSettings:`系统设置`,applications:`应用`,appMarketplace:`应用市场`,objectManager:`对象管理器`,users:`用户`,organizations:`组织`,roles:`角色`,configuration:`配置`,createApp:`创建应用`,administration:`管理`,datasources:`数据源`,documentation:`文档`},activityFeed:{title:`最近动态`,filter:`筛选`,empty:`暂无最近动态`,viewAll:`查看全部动态`,ariaLabel:`动态消息`,typeCreate:`创建`,typeUpdate:`更新`,typeDelete:`删除`,typeComment:`评论`,relativeJustNow:`刚刚`,relativeSecondsAgo:`{{count}} 秒前`,relativeMinutesAgo:`{{count}} 分钟前`,relativeHoursAgo:`{{count}} 小时前`,relativeDaysAgo:`{{count}} 天前`},metadata:{label:`元数据`,toggleTitle:`切换元数据检视器`,panelTitle:`元数据检视器`,jsonBadge:`JSON`,copyJson:`复制 JSON`}},search:{title:`搜索`,back:`返回`,placeholder:`搜索对象、仪表板、页面、报表…`,inputAriaLabel:`搜索对象、仪表板、页面、报表`,resultsCount:`找到 {{count}} 条与“{{query}}”相关的结果`,resultsCountPlural:`找到 {{count}} 条与“{{query}}”相关的结果`,itemsAvailable:`共 {{count}} 项可搜索`,noResults:`未找到结果`,noResultsHint:`请尝试调整搜索关键字`,typeObjects:`对象`,typeDashboards:`仪表板`,typePages:`页面`,typeReports:`报表`,badgeObject:`对象`,badgeDashboard:`仪表板`,badgePage:`页面`,badgeReport:`报表`},empty:{objectNotFound:`未找到对象`,objectNotFoundDescription:`对象 “{{name}}” 的定义不存在。请检查配置或返回选择有效的对象。`,interfacePageSourceMissing:`此界面页引用了 “{{name}}”,但该来源不可用。`,recordNotFound:`未找到记录`,recordNotFoundDescription:`您查找的记录不存在或已被删除。`,pageNotFound:`未找到页面`,pageNotFoundDescription:`未找到页面 “{{name}}”,可能已被删除或重命名。`,dashboardNotFound:`未找到仪表板`,dashboardNotFoundDescription:`未找到仪表板 “{{name}}”,可能已被删除或重命名。`,reportNotFound:`未找到报表`,reportNotFoundDescription:`未找到报表 “{{name}}”,可能已被删除或重命名。`,noAppsConfigured:`尚未配置应用`,noAppsConfiguredDescription:`当前没有任何已注册的应用。请创建您的第一个应用,或前往系统设置进行配置。`,appNotAvailable:`应用不可用`,appNotAvailableDescription:`此应用尚不可用 —— 可能仍在发布中。请稍后重试。`,appAccessDenied:`你没有访问此应用的权限`,appAccessDeniedDescription:`此应用存在,但你的账号未获授权打开它。请联系管理员为你开通访问权限。`,appAccessDeniedHome:`返回首页`,createFirstApp:`创建您的第一个应用`,systemSettings:`系统设置`,back:`返回`},preview:{empty:{loadFailedTitle:`草稿预览加载失败`,loadFailedDescription:`无法读取草稿数据。请重试,或检查网络连接。`,notReadyTitle:`“{{app}}” 尚未进入草稿`,notReadyDescription:`构建可能仍在进行,或在该应用落稿前失败了。请回到对话查看构建状态 —— 草稿就绪后此窗口会自动刷新。`,nothingTitle:`暂无可预览的内容`,retry:`重试`},draftBar:{message:`草稿预览 —— 您看到的是未发布的更改,发布前不会生效。`,messageClean:`草稿预览 —— 没有未发布的更改,此处内容均已生效。`,publish:`发布`,publishing:`发布中…`,exit:`退出预览`,changes:`变更`,sampleDataTitle:`示例数据将在发布后出现`,sampleDataBody:`您正在预览应用的结构。发布后即可载入示例数据并正式上线。`,publishCta:`发布以查看实际效果`},changes:{title:`待发布的变更`,description:`发布将带来以下变更。“新增”为全新内容,“更新”将覆盖线上版本。`,loading:`正在加载待发布变更…`,loadFailed:`无法加载待发布变更:`,empty:`没有待发布的内容 —— 所有草稿均已发布。`,kindNew:`新增`,kindUpdate:`更新`,detailLoading:`正在加载详情…`,detailLoadFailed:`无法加载变更详情:`,detailNone:`未检测到差异 —— 草稿与已发布版本一致。`,detailChangedKeys:`其他变更:`,confirmNote:`发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。`,publishConfirm:`全部发布`},unpublishedBar:{message:`未发布的应用 —— 功能完整,但只有构建者能看到。发布后即可让您的用户看到。`,publish:`发布`,publishing:`发布中…`,published:`已发布!应用现在对您的用户可见。`,publishFailed:`发布失败`},history:{button:`历史`,title:`构建历史`,description:`此应用的每一次变更,最新的在最前。撤销任一步骤即可回退 —— 无需确认发布。`,loadFailed:`无法加载历史记录:`,loadFailedUnavailable:`提交存储暂时不可达 —— 本次读取并未发生,因此不显示任何历史记录。请稍后重试。`,loading:`正在加载历史记录…`,empty:`此应用暂无历史记录。`,revertLabel:`已撤销一处变更`,applyLabel:`构建变更`,revert:`撤销`,items:`项`,revertAction:`撤销`,reverted:`已撤销 —— 该变更已还原。`,revertFailed:`撤销失败`,revertUnavailable:`提交存储暂时不可达 —— 此次撤销可能尚未生效。请重新打开历史记录确认后再重试。`}},renderer:{noPageSchema:`未提供页面 schema`,noFormSchema:`未提供表单 schema`,noDashboardSchema:`未提供仪表板 schema`,pageRendering:`页面渲染中:{{name}}`,dashboardRendering:`仪表板渲染中:{{name}}`,formRenderingMode:`正在以 {{mode}} 模式渲染表单`,formRenderingFor:`记录 {{id}}`,createRecord:`新建记录`,editRecord:`编辑记录`,page:`页面`,dashboard:`仪表板`,save:`保存`,cancel:`取消`},actionDialog:{title:`操作参数`,description:`请填写以下信息以继续操作。`,selectPlaceholder:`请选择 {{label}}`,requiredError:`{{label}} 为必填项`,lookupPlaceholder:`{{label}} 的记录 ID`,lookupHelpText:`该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。`,cancel:`取消`,confirm:`确认`,uploading:`上传中…`,defaultActionTitle:`操作`,ok:`确定`},actionConfirm:{title:`确认操作`,confirm:`继续`,cancel:`取消`},rowAction:{openMenu:`更多操作`,edit:`编辑`,delete:`删除`},navigationSync:{addedPage:`导航已更新:已添加页面 “{{name}}”`,addedDashboard:`导航已更新:已添加仪表板 “{{name}}”`,removedPage:`导航已更新:已移除页面 “{{name}}”`,removedDashboard:`导航已更新:已移除仪表板 “{{name}}”`,renamedPage:`导航已更新:页面 “{{oldName}}” 已重命名为 “{{newName}}”`,renamedDashboard:`导航已更新:仪表板 “{{oldName}}” 已重命名为 “{{newName}}”`,undoLabel:`撤销`,undone:`已撤销导航变更`,undoFailed:`撤销导航变更失败`,updateFailed:`更新导航失败`},objectActions:{deleteSuccess:`{{label}} 删除成功`,deleteFailed:`删除 {{label}} 失败`,noRecordId:`未提供记录 ID`,deleteConfirm:`确定要删除此记录吗?`,resetPackageSetConfirm:`该权限集随已安装的软件包发布,无法删除。删除操作将丢弃环境定制并把它重置为发布基线。是否继续?`,resetPackageSetSuccess:`权限集已重置为发布基线`,bulkDeleteSuccess:`已删除 {{count}} 条 {{label}} 记录`,bulkDeletePartial:`成功 {{succeeded}} 条,失败 {{failed}} 条`},objectViewActions:{renameFailed:`重命名视图失败`,deleteFailed:`删除视图失败`},dashboardActions:{printDialogOpening:`正在打开浏览器打印对话框(不是导出 PDF)`,exportFailed:`导出失败:{{message}}`,forecastSoon:`预测视图即将上线`},recordDetail:{viewersTooltip:`正在查看此记录的用户`},cellRender:{empty:`空`,yes:`是`,no:`否`,systemFields:`系统字段`},user:{profile:`个人资料`,settings:`设置`,logout:`注销`,preferences:`偏好设置`,theme:`主题`,language:`语言`},organizations:{mine:`我的工作区`,create:`创建工作区`,title:`工作区`,heading:`您的工作区`,subtitle:`选择一个工作区以继续,或新建一个。`,searchPlaceholder:`搜索工作区`,new:`新建工作区`,current:`当前工作区`,manage:`管理`,emptyTitle:`尚无工作区`,emptyDescription:`创建您的第一个工作区以开始使用。`,noMatches:`没有匹配的工作区。`},organization:{roles:{owner:`所有者`,admin:`管理员`,delegatedAdmin:`受托管理员`,member:`成员`},errors:{notAllowedToInvite:`您无权邀请用户加入该组织。`,notAllowedToInviteWithRole:`您无权以该角色邀请用户。`,alreadyInvited:`该用户已被邀请加入本组织。`,organizationExists:`该组织已存在。`,slugTaken:`该标识已被占用。`,notAllowedToCreate:`您无权创建新组织。`,notTheRecipient:`您不是该邀请的收件人。`,invitationNotFound:`该邀请已失效或已过期。`,unknown:`出了点问题,请重试。`},backToList:`返回组织列表`,notFound:`未找到组织`,notFoundDescription:`该组织不存在,或您没有访问权限。`,tabs:{members:`成员`,invitations:`邀请`,settings:`设置`},members:{title:`成员`,inviteMember:`邀请成员`,inviteRestrictedNote:`只有组织管理员可以邀请成员。`,removeMember:`移除成员`,removeConfirmTitle:`移除成员?`,removeConfirmDescription:`将把 {{name}} 从该组织中移除,其访问权限会立即失效。`,removeConfirmAction:`移除`,memberRemoved:`成员已移除`,removeFailed:`移除成员失败`,roleUpdated:`角色已更新`,roleUpdateFailed:`更新角色失败`,memberActions:`成员操作`,loadFailed:`加载成员失败`},invitations:{title:`邀请`,empty:`暂无邀请。`,expiresAt:`过期时间`,linkCopied:`邀请链接已复制`,copyFailed:`复制链接失败`,canceled:`邀请已取消`,cancelFailed:`取消邀请失败`,cancelTitle:`取消邀请?`,cancelDescription:`将撤销发给 {{email}} 的邀请。`,cancelAction:`取消邀请`,inviteTitle:`邀请成员`,inviteDescription:`对方将收到加入该组织的邀请。`,emailLabel:`邮箱`,roleLabel:`角色`,placementLabel:`任职安排(可选)`,placementDescription:`在邀请被接受时生效。仅列出您有权分派的业务单元和岗位。`,businessUnitLabel:`业务单元`,businessUnitPlaceholder:`不指定任职`,positionsLabel:`岗位`,sendInvite:`发送邀请`,sentTitle:`邀请已创建`,sentDescription:`请将下方链接发送给受邀人。对方需要登录后才能接受。`,linkLabel:`接受链接`,invitedAs:`{{email}} 已以 {{role}} 身份受邀`,copyLinkLabel:`复制邀请链接`,loadFailed:`加载邀请失败`,inviteFailed:`邀请成员失败`,status:{all:`全部`,pending:`等待中`,accepted:`已接受`,rejected:`已拒绝`,canceled:`已取消`}},settings:{generalTitle:`常规`,generalDescription:`更新组织信息。`,readOnlyNote:`只有所有者可以修改设置。`,nameLabel:`组织名称`,slugLabel:`标识`,logoLabel:`Logo`,logoUpload:`上传`,logoReplace:`更换`,logoClear:`移除`,logoUploaded:`Logo 已上传,保存后生效`,logoUploadFailed:`上传 Logo 失败`,save:`保存更改`,saved:`设置已保存`,saveFailed:`保存设置失败`,leaveTitle:`退出组织`,leaveDescription:`退出后您将失去对该组织的访问权限。`,leaveAction:`退出`,leaveConfirmTitle:`退出组织?`,leaveConfirmDescription:`确定要退出 {{name}} 吗?您的访问权限会立即失效。`,leaveConfirmAction:`退出`,leftOrg:`您已退出该组织`,leaveFailed:`退出组织失败`,dangerZone:`危险操作`,deleteTitle:`删除组织`,deleteDescription:`永久删除该组织及其全部数据。`,deleteAction:`删除`,deleteConfirmTitle:`删除组织?`,deleteConfirmDescription:`此操作不可撤销,所有数据将被永久删除。请输入组织标识以确认。`,deleteConfirmSlugLabel:`输入“{{slug}}”以确认`,deleteConfirmAction:`删除组织`,deleted:`组织已删除`,deleteFailed:`删除组织失败`},accept:{title:`您收到一份邀请`,description:`您受邀以 {{role}} 身份加入 {{orgName}}。`,errorTitle:`邀请不可用`,goToOrgs:`前往组织列表`,loading:`正在加载邀请…`,organization:`组织`,role:`角色`,expiresAt:`过期时间`,accept:`接受邀请`,accepted:`邀请已接受`,acceptFailed:`接受邀请失败`,decline:`拒绝`,declined:`邀请已拒绝`,declineFailed:`拒绝邀请失败`},switcher:{label:`切换组织`,groupLabel:`当前工作组织`,groupHint:`新建记录将归属该组织。视图会显示您所有组织的数据。`,manageMembers:`管理成员`}},notifications:{regionLabel:`通知`,empty:`暂无通知`,emptyUnread:`已读完所有通知`,filterUnread:`未读`,filterAll:`全部`,markAllRead:`全部标记为已读`,viewAll:`查看全部通知`,groupCount:`{{count}} 条通知`,groupUnread:`{{count}} 条未读`,groupMarkRead:`标记已读`,groupMarkReadTitle:`将此类通知全部标记为已读`,approvalsPending:`{{count}} 条待审批`,viewApprovals:`查看审批`,noPendingApprovals:`暂无待审批事项`,openApprovalsInbox:`打开审批中心`,badgeTotal:`共 {{total}} 项`,badgeNotifications:`{{unread}} 条通知`,badgeApprovals:`{{approvals}} 条待审批`},publicForm:{submit:`提交`,submitting:`提交中…`,submitAnother:`再填一份`,poweredBy:`由 ObjectStack 提供技术支持`,secureNotice:`您的信息将通过安全通道传输,仅用于回复您本次请求。`,thankYouTitle:`感谢您的提交!`,thankYouMessage:`我们已成功收到您的信息。`,redirecting:`将在 {{seconds}} 秒后跳转…`,unavailableTitle:`表单不可用`,unavailableDescription:`该链接当前没有可用的公开表单。请确认对应视图已启用匿名分享并匹配此 slug。`,tryDemo:`试用演示`,retry:`重试`,loading:`正在加载表单…`,requiredHint:`* 为必填项`,consentLabelDefault:`我已阅读并同意隐私政策,授权对本次请求所提供的信息进行处理。`,consentLink:`隐私政策`,consentRequired:`请先勾选同意隐私政策。`,rateLimited:`请再花点时间核对一下您的填写内容,再点击提交。`,redirectBlocked:`提交成功,但出于安全考虑,跳转链接已被阻止。`,demo:{contactTitle:`联系我们`,contactDescription:`告诉我们您的项目需求,销售代表将在一个工作日内与您联系。`,supportTitle:`提交支持请求`,supportDescription:`描述您遇到的问题,我们的团队会在一个工作日内回复。`,thankYouSalesTitle:`已收到您的信息,感谢联系!`,thankYouSalesMessage:`我们的销售代表将在一个工作日内与您取得联系。`,thankYouSupportTitle:`您的请求已进入处理队列。`,thankYouSupportMessage:`支持工程师将尽快跟进。如需补充截图,请保留此页面。`,field:{firstName:`名字`,lastName:`姓氏`,email:`工作邮箱`,phone:`电话`,jobTitle:`职位`,company:`公司`,website:`官网`,industry:`行业`,companySize:`公司规模`,howCanWeHelp:`我们可以为您做些什么?`,subject:`主题`,description:`问题描述`,issueType:`问题类型`,priority:`优先级`},industry:{technology:`科技`,software:`软件 / SaaS`,finance:`金融`,healthcare:`医疗健康`,retail:`零售`,other:`其他`},issueType:{question:`咨询`,problem:`问题`,bug:`缺陷`,feature_request:`功能建议`},priority:{low:`低`,medium:`中`,high:`高`,critical:`紧急`}}},connectAgent:{disabled:{title:`此部署已停用 MCP`,body:`MCP 服务已关闭(OS_MCP_SERVER_ENABLED=false),暂无可连接的端点。请联系运维人员重新启用。`},url:{title:`本环境的 MCP 端点`,body:`任何支持 MCP 的 AI 客户端都用这个 URL 连接。身份是自助的:部署自身就是 OAuth 2.1 授权服务器,交互式客户端只需在浏览器登录——以你自己的身份连接,每次调用都受你的权限和行级安全约束。`,downloadSkill:`下载 SKILL.md`,skillHint:`可移植的智能体技能文件:教会任何支持技能的智能体如何使用本环境。`},claude:{body:`设置 → 连接器 → 添加自定义连接器,粘贴此 URL,按提示在浏览器登录。`,reachability:`claude.ai(网页版)由 Anthropic 服务器发起连接——部署需公网 HTTPS 可达。Claude Desktop 等本地客户端可直连内网部署。`},claudeCode:{body:`一条命令,首次使用时自动弹出 OAuth 登录:`,plugin:`或安装官方插件(附带 ObjectStack 技能和引导式 /objectstack:connect 命令):`},cursor:{addButton:`添加到 Cursor`,body:`点击一键按钮,或将以下内容加入 .cursor/mcp.json:`},vscode:{body:`加入 .vscode/mcp.json(或使用 MCP: Add Server 命令):`},codex:{body:`加入 ~/.codex/config.toml。如果你的 Codex 版本不支持 OAuth 流程,请改用 API 密钥请求头(见下):`},apiKey:{title:`API 密钥`,badge:`无头场景`,body:`用于 CI、脚本和无浏览器的智能体。密钥等同于你的身份,请像密码一样保管,且仅显示一次。`,namePlaceholder:`密钥名称(如 ci-agent)`,mint:`创建密钥`,minting:`创建中…`,showOnce:`密钥「{{name}}」已创建——请立即复制,之后不再显示:`,done:`完成——隐藏`}},excelImport:{noImportableFields:`该对象没有可导入的字段。`,schemaReadFailed:`无法读取对象结构。`,imported:`已把 {{count}} 行真实数据导入「{{object}}」。`,importFrom:`把真实数据导入自`,into:`到`,opening:`打开中…`,importAction:`导入`,dismiss:`忽略`},cloudOnboarding:{hintCreate:`创建你的第一个环境——一个独立的工作区,有自己的网址、数据库和套餐。应用的搭建在里面进行。`,hintReady:`你的生产环境已就绪。打开它来搭建和运行应用——这些都在环境内部进行。`,createEnvironment:`创建你的环境`,openProduction:`打开生产环境`,manageEnvironments:`管理环境`},aiModelStatus:{summary:`构建 / 提问使用 {{conversational}}({{conversationalSource}});结构化使用 {{structured}}({{structuredSource}})。`,summaryRouting:`路由策略:免费方案 → {{free}},付费方案 → {{paid}}。`,modelUnknown:`未知`,sourceUnknown:`适配器未上报`,rowConversational:`Build / Ask 模型`,rowStructured:`结构化(蓝图 / 种子)`,rowReasoning:`推理强度`,readFailed:`无法读取有效 AI 模型。该环境可能未运行 AI 服务,或你没有 ai:read 权限。`,readFailedWithStatus:`无法读取有效 AI 模型(HTTP {{status}})。该环境可能未运行 AI 服务,或你没有 ai:read 权限。`,overridesInEffect:`生效的 env 覆盖:`,noOverrides:`无 —— 跑的是部署代码的默认值。`,adapter:`适配器:`,sourceCodeDefault:`代码默认(无 env 覆盖)`,sourceInherits:`与 build/ask 相同`,sourcePinned:`被 {{source}} 钉住`},chatbotError:{title:`响应失败`,fallbackDetail:`出了点问题,请重试。`,details:`详情`,hide:`隐藏`,retry:`重试`},chatbotQuota:{title:`需要升级`,fallbackMessage:`AI 额度已用完。`,buyCredits:`购买额度包`,upgradePlan:`升级方案`},environment:{addEnvironment:`新建环境`,setUpProduction:`创建你的生产环境`,addDevelopment:`新建开发环境`,entitlement:{productionLimitTitle:`你已经有生产环境了`,productionLimitBody:`每个组织只包含一个生产环境。如果还需要,可以新建一个组织,或者联系我们了解企业版方案。`,planLockedTitle:`开发环境是付费功能`,planLockedBody:`{{plan}}包含一个生产环境。升级后即可添加开发环境 —— 先在开发环境里搭建,确认无误再发布到生产环境。`,limitTitle:`开发环境数量已达上限`,limitBody:`容量随 AI 席位增长。增加一个 AI 席位,或归档一个不再使用的开发环境来腾出名额。`,limitBodyWithCount:`开发环境已使用 {{used}}/{{limit}} 个。容量随 AI 席位增长 —— 增加一个 AI 席位,或归档一个不再使用的开发环境来腾出名额。`,freePlan:`免费版`,namedPlan:`{{plan}} 版`,upgradeCta:`升级套餐`,contactSalesCta:`联系销售`}},cloudConnection:{checking:`正在检查连接…`,retry:`重试`,errors:{expired:`请求在获批前已过期,请重新开始。`,bindFailed:`绑定失败。`,deviceCodeFailed:`设备码请求失败。`},waiting:{popupOpened:`请在刚打开的窗口中批准此连接——本页面会自动更新。`,polling:`正在等待云端控制台批准…`,openApproval:`打开批准页面`,copy:`复制`,copied:`已复制`,codePrefilled:`批准页面已自动填入该代码。`,openItHere:`窗口没有出现?点此打开`,cancel:`取消`},bound:{title:`已连接到 ObjectStack 云`,runtime:`运行时`,organization:`组织`,approvedBy:`批准人`,runtimeId:`运行时 ID`,environment:`环境`,since:`连接于`,privatePackages:`组织的私有包现已显示在应用市场的「你的组织」分类下。`,disconnect:`断开连接`},unbound:{title:`未连接`,body:`将此运行时连接到 ObjectStack 控制平面,即可浏览并安装组织的私有包。只需在云账户中点击一次批准——无需在本页面输入任何 ID 或凭据。`,connect:`连接`}},marketplace:{title:`应用市场`,subtitle:`浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。`,searchPlaceholder:`按名称或 manifest ID 搜索应用…`,searchAria:`搜索市场应用`,installed:`已安装`,installedCount:`已安装({{count}})`,refresh:`刷新`,all:`全部`,noApprovedYet:`应用市场暂无已通过审核的应用。`,noMatchFilters:`没有应用匹配当前筛选条件。`,noDescription:`未提供描述。`,back:`返回应用市场`,installedTitle:`已安装的应用`,installedSubtitle:`当前已安装到本运行时内核的应用市场软件包。缓存的清单文件位于 <code>.objectstack/installed-packages/</code>,重启后仍然保留。`,installedEmpty:`本运行时尚未安装任何应用市场应用。`,browseLink:`去应用市场看看 →`,installedAdditiveNote:`<strong>说明:</strong>内核 API 仅支持新增 — 卸载会移除磁盘上的清单,下次启动时不再加载;但运行中的内核仍会保留该应用,直到下次重启运行时才会真正卸载。`,installedAt:`安装于 {{when}}`,installedBy:`由 {{user}}`,installedPackageId:`包`,cachedAs:`缓存为 <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`已安装 v{{version}}`,load:{failed:`应用市场加载失败`,failedHint:`本运行时默认指向公共 ObjectStack 云端。请检查运行时是否在线,或通过 <code>OS_CLOUD_URL</code> 指向自托管控制面。`,packageFailed:`应用加载失败`,notFound:`未找到。`},detail:{homepage:`主页`,installedV:`已安装 · v{{version}}`,about:`简介`,noReadme:`未提供 README。`,versions:`版本`,noApprovedVersions:`暂无已审核版本。`,prerelease:`预发布`,moreOptions:`更多安装选项`,uninstallFromRuntime:`从本运行时卸载`,addSampleData:`添加示例数据`,reseedAgain:`重新加载示例数据`,purgeSampleData:`清除示例数据`,purgeConfirm:`删除此应用预置的所有示例记录?用户自行添加的记录不会被删除。`,purgeSuccess:`已删除 {{count}} 条示例记录。`,purgeNoData:`没有可清除的示例记录。`,reseedQueued:`示例数据将在下次访问该环境时重新加载。`,reseedLocalSuccess:`已重新加载示例数据:新增 {{inserted}} 条,更新 {{updated}} 条。`,reseedPartialErrors:`(有 {{count}} 条记录写入失败)`,updateAvailable:`有可用更新`},action:{install:`安装`,reinstall:`重新安装`,working:`处理中…`,installToCloud:`安装到云端…`,installed:`已安装`,installing:`安装中…`,uninstall:`卸载`,uninstalling:`卸载中…`,details:`详情`,close:`关闭`,dismiss:`关闭`,openOnCloud:`在云端打开`,backHome:`返回首页`,updateTo:`更新`},install:{dialogTitle:`安装 {{name}}`,dialogDescCurrent:`安装到当前环境({{host}})。`,dialogDescPicker:`选择要将此应用安装到的环境。需要先登录 ObjectStack Cloud。`,environment:`环境`,environmentPlaceholder:`选择一个环境`,includeSampleData:`包含示例数据`,noEnvs:`当前组织没有可用的环境。`,noPermission:`你没有权限在任何环境中安装应用。仅组织所有者和管理员可以安装 — 请联系你的工作区管理员。`,signInFirst:`请先登录 ObjectStack Cloud,然后点击下方"在云端打开"。`,success:`安装成功。打开环境即可看到新应用。`,localSuccess:`已将 v{{version}} 安装到本运行时。"{{name}}" 应该已经出现在应用切换器中。`,localManifestConflict:`{{message}}
|
|
9
|
-
提示:本地已有应用占用此 manifest_id,请先从 objectstack.config.ts 中移除。`,localUnauthorized:`请先登录本运行时再试。`,localMarketplaceUnavailable:`本运行时未配置 OS_CLOUD_URL,无法访问应用市场目录。`,updateTo:`更新 → v{{version}}`,installedVersion:`已安装 v{{version}}`},org:{heading:`你的组织`,install:`安装`,installed:`已安装 {{name}}`,installedBadge:`已安装`,installing:`安装中…`},disclosure:{containsCode:`此软件包包含代码`,reviewed:`已审核并批准`,unreviewed:`尚未审核`,signed:`已签名`,grantsIntro:`安装后,此软件包将获得以下权限:`,services:`平台服务`,hooks:`生命周期钩子`,network:`网络访问`,fs:`文件系统访问`,noPermissions:`不请求任何特殊权限。`,acknowledge:`我了解此软件包会运行代码,并将获得上述权限。`,runtime:{node:`进程内 · 完全信任`,sandbox:`沙箱隔离`,worker:`进程外`}},suggestedBindings:{promptEveryone:`此应用建议将「{{set}}」授予所有已登录用户(Everyone 岗位)。`,promptGuest:`此应用建议将「{{set}}」授予未登录访客(Guest 岗位)。`,confirm:`授予`,confirming:`授予中…`,dismiss:`忽略`,confirmedToast:`「{{set}}」已授予 {{anchor}}。`,dismissedToast:`已忽略「{{set}}」的建议。`},uninstall:{confirm:`从本运行时卸载 {{manifestId}} v{{version}}?
|
|
10
|
-
|
|
11
|
-
磁盘上的清单缓存将被移除。运行中的内核仍会保留该应用,直到下次重启运行时才会真正卸载。`,successInList:`已移除 {{manifestId}}。重启运行时即可从内核中彻底卸载。`,successInDetail:`已移除 {{manifestId}} 的清单缓存。重启运行时即可从内核中彻底卸载该应用。`},accessDenied:{title:`应用市场仅限管理员使用`,description:`你没有权限在本环境中安装应用。请联系组织的所有者或管理员申请权限。`},category:{crm:`客户关系`,erp:`企业资源`,hr:`人力资源`,finance:`财务`,project:`项目管理`,collaboration:`协作`,analytics:`分析`,integration:`集成`,automation:`自动化`,ai:`人工智能`,security:`安全`,"developer-tools":`开发者工具`,"ui-theme":`界面主题`,storage:`存储`,other:`其他`},pricing:{free:`免费`,freemium:`免费增值`,paid:`付费`,subscription:`订阅`,"usage-based":`按用量计费`,"contact-sales":`联系销售`},relativeTime:{today:`今天`,daysAgo:`{{count}} 天前`,monthsAgo:`{{count}} 个月前`,yearsAgo:`{{count}} 年前`}},approvals:{approve:`批准`,reject:`驳回`,comment:`审批意见(可选)`,approveSuccess:`已批准`,rejectSuccess:`已驳回`,rejectConfirm:`确定驳回该审批请求吗?`},approvalsInbox:{loadMore:`加载更多`,loadingMore:`加载中…`,loadedOf:`已加载 {{loaded}} / 共 {{total}} 条`,actEscalate:`SLA 升级`,systemSlaActor:`系统(SLA)`,reassignBtn:`转签`,reassignTitle:`将该审批转签给其他人?`,reassignBody:`你的审批席位将转移给所选人员,对方会收到通知并可立即处理。`,reassignTo:`新审批人`,reassignToPlaceholder:`选择用户,或输入邮箱 / role:<角色名>`,reassignSuccess:`已转签给 {{to}}`,requestInfoBtn:`退回补充`,requestInfoTitle:`请申请人补充材料?`,requestInfoBody:`请求保持待审批状态;申请人会收到通知并可在动态中回复。`,requestInfoPlaceholder:`需要申请人补充什么?`,requestInfoSent:`已退回给申请人补充材料`,remindBtn:`催办`,remindSuccess:`已提醒 {{count}} 位审批人`,remindThrottled:`刚刚已发送过催办,请稍后再试。`,replyPlaceholder:`在此回复…`,slaRemaining:`SLA 剩余 {{dur}}`,slaOverdue:`SLA 已超期 {{dur}}`,actReassign:`转签`,reassignFromTo:`从 {{from}} 转给 {{to}}`,actRemind:`催办`,actRequestInfo:`要求补充材料`,actComment:`评论`,stepProgress:`审批步骤`,prevRequest:`上一条`,nextRequest:`下一条`,positionOf:`第 {{index}} / {{total}} 条请求`,progressApprovals:`审批进度 — {{got}} / {{need}}`,progressGroups:`会签进度 — {{got}} / {{need}} 组`,progressEligible:`{{count}} 位可审批人`,progressBar:`决策进度`,declaredActions:`操作`,attachmentChip:`附件`,attachmentOpenFailed:`无法打开附件,请重试`,approveOneTitle:`通过“{{title}}”?`,approveOneBody:`将以你的身份通过该请求。如需填写审批意见或附件,请打开该请求处理。`,flowOrigin:`流程发起`,sortBy:`排序`,sortRecent:`最新优先`,sortOldest:`最早优先`,sortAmount:`金额(从高到低)`,quickPhrase1:`同意,符合要求。`,quickPhrase2:`有条件同意,请关注执行情况。`,quickPhrase3:`请补充相关材料后重新提交。`,title:`审批中心`,subtitle:`查看并处理审批请求。`,refresh:`刷新`,tabMyPending:`待我审批`,tabSubmitted:`我发起的`,tabAll:`全部`,searchPlaceholder:`搜索记录、流程、申请人…`,clearSearch:`清除搜索`,statusFilter:`状态`,allStatuses:`全部状态`,processFilter:`流程`,allProcesses:`全部流程`,objectFilter:`对象`,allObjects:`全部对象`,filterCount:`{{shown}} / {{total}} 条`,selected:`已选择`,actionableCount:`({{count}} 条可操作)`,selectAll:`全选`,selectRow:`选择该请求`,colRequest:`审批事项`,colRecord:`记录`,colRequester:`申请人`,colStatus:`状态`,colWaiting:`提交时间`,colActions:`操作`,statusPending:`待审批`,statusApproved:`已通过`,statusRejected:`已拒绝`,statusRecalled:`已撤回`,statusReturned:`已退回修改`,sendBackBtn:`退回修改`,sendBackTitle:`将该申请退回修改?`,sendBackBody:`本轮审批结束,记录解锁,申请人可修改数据。重新提交后将为所有审批人开启新一轮审批。`,sendBackPlaceholder:`需要修改什么才能通过审批?`,sendBackSuccess:`已退回修改——申请人现在可以编辑并重新提交`,sendBackAutoRejected:`已达退回次数上限——申请已被自动拒绝`,actRevise:`退回修改`,actResubmit:`重新提交`,roundChip:`第 {{n}} 轮`,returnedHint:`审批人将申请退回给你。记录已解锁——修改数据后重新提交,将开启新一轮审批。`,resubmitBtn:`重新提交`,resubmitting:`正在重新提交…`,resubmitSuccess:`已重新提交——新一轮审批已开启`,resubmitPlaceholder:`你修改了什么?`,editRecordBtn:`编辑记录`,abandonTitle:`放弃本次修改?`,abandonBody:`撤回申请而不重新提交,审批到此结束。`,emptyTitle:`暂无请求`,emptyPending:`全部处理完毕,没有等待你审批的请求。`,emptyOther:`这里还没有内容。`,emptyViewAll:`查看全部请求`,noMatches:`没有符合当前筛选条件的请求。`,keyboardHint:`快捷键:j/k 移动 · Enter 打开 · x 选择 · a 通过 · r 拒绝`,drawerTitle:`审批请求`,submittedAgo:`提交于{{when}}`,completedAt:`完成于{{when}}`,waitingOn:`等待以下审批人`,history:`审批动态`,noActions:`暂无操作记录。`,actSubmit:`提交`,actApprove:`通过`,actReject:`拒绝`,actRecall:`撤回`,rawData:`原始数据(JSON)`,copy:`复制`,copied:`已复制`,copyFailed:`复制失败`,overrideActor:`以其他身份操作(管理员)`,actor:`操作身份`,auto:`自动`,overrideHint:`例如 role:sales_manager。留空则使用自动识别的身份。`,comment:`审批意见(可选)`,approve:`通过`,approving:`正在通过…`,reject:`拒绝`,rejecting:`正在拒绝…`,recall:`撤回`,recalling:`正在撤回…`,cancel:`取消`,clear:`清除`,approveN:`通过 {{count}} 条`,rejectN:`拒绝 {{count}} 条`,bulkApproveTitle:`通过这 {{count}} 条请求?`,bulkApproveBody:`每条请求都将以你的身份通过,对应流程沿“通过”分支继续。`,bulkRejectTitle:`拒绝这 {{count}} 条请求?`,bulkRejectBody:`将拒绝所选请求并通知各申请人。`,bulkApproved:`已通过 {{count}} 条请求`,bulkRejected:`已拒绝 {{count}} 条请求`,bulkPartial:`{{ok}} 条成功,{{fail}} 条失败:{{which}}`,rejectOneTitle:`拒绝“{{title}}”?`,rejectOneBody:`将拒绝该请求并通知申请人。`,rejectTitle:`拒绝该请求?`,rejectBody:`将把该请求标记为已拒绝,并通知申请人。`,recallTitle:`撤回该请求?`,recallBody:`撤回后审批人将无法继续处理,记录随即解锁。`,inlineApproved:`已通过“{{title}}”`,inlineRejected:`已拒绝“{{title}}”`,approvedFinal:`已通过`,approvedWaiting:`已通过——等待其余审批人`,rejectedToast:`已拒绝`,recalledToast:`请求已撤回`,whyDisabled:`只有指定的审批人才能处理该请求。当前等待:{{who}}。`,whyDisabledSubmitter:`这是你发起的请求,你可以撤回;但只有指定审批人才能通过或拒绝。`,noActor:`无法确定操作身份`,actionFailed:`操作失败`,loadFailed:`加载请求失败`,recallUnavailable:`当前部署暂不支持撤回。`,requestGone:`该请求已不存在,请刷新列表。`,notAllowed:`你没有权限执行此操作。`,alreadyDecided:`该请求已被处理,请刷新列表。`,justNow:`刚刚`,minutesAgo:`{{count}} 分钟前`,hoursAgo:`{{count}} 小时前`,daysAgo:`{{count}} 天前`},filterBuilder:{where:`其中`,and:`且`,or:`或`,clearAll:`清除全部`,selectField:`选择字段`,operator:`运算符`,selectValue:`选择值`,value:`值`,addFilter:`添加筛选`,removeCondition:`移除条件`,trueLabel:`是`,falseLabel:`否`,noResults:`无结果`,searchField:`搜索 {{label}}…`,enterId:`输入 {{label}} ID`,operators:{equals:`等于`,notEquals:`不等于`,contains:`包含`,notContains:`不包含`,isEmpty:`为空`,isNotEmpty:`不为空`,greaterThan:`大于`,lessThan:`小于`,greaterOrEqual:`大于或等于`,lessOrEqual:`小于或等于`,before:`早于`,after:`晚于`,between:`介于`,in:`属于`,notIn:`不属于`}},sortBuilder:{sortBy:`排序依据`,thenBy:`然后按`,selectField:`选择字段`,ascending:`A → Z`,descending:`Z → A`,addSort:`添加排序`,removeSort:`删除排序`},collaboration:{commentCount:`{{count}} 条评论`,commentCountOne:`{{count}} 条评论`,resolvedSuffix:` · 已解决`,sortComments:`评论排序`,sortOldest:`最早优先`,sortNewest:`最新优先`,resolve:`标记已解决`,reopen:`重新打开`,justNow:`刚刚`,minutesAgo:`{{count}} 分钟前`,hoursAgo:`{{count}} 小时前`,daysAgo:`{{count}} 天前`,edited:`(已编辑)`,reactionCount:`{{count}} 个回应`,reactionCountOne:`{{count}} 个回应`,addThumbsUp:`点赞`,reply:`回复`,reactThumbsUp:`以点赞回应`,reactHeart:`以爱心回应`,cancelReply:`取消回复`,replyingTo:`正在回复 {{name}}…`,replyingToComment:`正在回复该评论…`,commentPlaceholder:`添加评论…(输入 @ 提及他人)`,send:`发送`,presentUserCount:`{{count}} 人在线`,presentUserCountOne:`{{count}} 人在线`,moreUserCount:`另有 {{count}} 人`,moreUserCountOne:`另有 {{count}} 人`,userStatusTitle:`{{name}}({{status}})`,statusActive:`活跃`,statusIdle:`空闲`,statusAway:`离开`},wizard:{missingRequired:`请填写以下必填字段:{{fields}}`},appManagement:{title:`应用`,subtitle:`管理所有已配置的应用`,newApp:`新建应用`,searchLabel:`搜索应用`,searchPlaceholder:`搜索应用…`,selectedCount:`已选择 {{n}} 个`,bulkEnable:`启用`,bulkDisable:`停用`,selectAll:`全选({{n}})`,empty:`未找到应用。`,defaultBadge:`默认`,active:`已启用`,inactive:`已停用`,selectApp:`选择 {{name}}`,openApp:`打开应用`,openAppNamed:`打开 {{name}}`,editApp:`编辑应用`,editAppNamed:`编辑 {{name}}`,editWithAi:`用 AI 编辑`,editWithAiNamed:`用 AI 编辑 {{name}}`,enableApp:`启用应用`,disableApp:`停用应用`,enableAppNamed:`启用 {{name}}`,disableAppNamed:`停用 {{name}}`,setDefault:`设为默认`,setDefaultNamed:`将 {{name}} 设为默认`,deleteApp:`删除应用`,deleteAppNamed:`删除 {{name}}`,confirmDelete:`再次点击以确认删除`,confirmDeleteNamed:`确认删除 {{name}}`,toast:{noClient:`无法连接到元数据服务`,unknownError:`未知错误`,appEnabled:`{{name}} 已启用`,appDisabled:`{{name}} 已停用`,toggleFailed:`切换应用状态失败:{{reason}}`,setDefaultDone:`{{name}} 已设为默认`,setDefaultFailed:`设置默认应用失败:{{reason}}`,appDeleted:`{{name}} 已删除`,deleteFailed:`删除应用失败:{{reason}}`,bulkEnabled:`已启用 {{n}} 个应用`,bulkDisabled:`已停用 {{n}} 个应用`,bulkFailed:`{{n}} 个失败:{{details}}`,bulkFailureEntry:`{{name}}({{reason}})`,bulkFailureJoiner:`;`,bulkOperationFailed:`批量操作失败:{{reason}}`}}},Qo={en:Xo,zh:Zo,ja:{impersonation:{banner:{message:`{{user}} になりすまして操作しています。すべての操作はこのユーザーとして記録されます。`,startedBy:`管理者 {{admin}} が開始しました。`,stop:`なりすましを終了`,stopping:`終了しています…`,stopFailed:`なりすましを終了できませんでした: {{reason}}`,notRestored:`サーバーはリクエストを受け付けましたが、管理者セッションを復元しませんでした。まだ {{user}} として操作しています。サインアウトして再度サインインして終了してください。`}},capability:{label:{manage_users:`ユーザー管理`,manage_org_users:`組織ユーザーの管理`,manage_metadata:`メタデータ管理`,manage_platform_settings:`プラットフォーム設定の管理`,setup_access:`設定へのアクセス`,setup_write:`設定の書き込み`,studio_access:`Studio へのアクセス`},group:{platform:`プラットフォーム`,org:`組織`,other:`その他`}},perm:{facet:{none:`なし`,more:`+{{count}} 件`,objects:`{{count}} オブジェクト`,objects_one:`{{count}} オブジェクト`,fields:`{{count}} フィールドルール`,fields_one:`{{count}} フィールドルール`,rls:`{{count}} RLS ポリシー`,rls_one:`{{count}} RLS ポリシー`,tabs:`{{count}} タブルール`,tabs_one:`{{count}} タブルール`,adminScope:`委任管理を設定済み`,designInStudio:`Studio でデザイン →`,designInStudioHint:`Studio でデザイン`}},lookup:{recentlyUsed:`最近使用したもの`,allResults:`すべての結果`,createNew:`新規作成`,createNamed:`「{{name}}」を新規作成`,showingResults:`{{total}} 件中 {{shown}} 件を表示`,showAllResults:`すべての結果を表示 ({{count}})`,selectedBadge:`選択済み`,browseAll:`すべてのレコードを参照`,remove:`{{label}} を削除`,selectFirst:`まず {{fields}} を選択してください`,selectRecord:`レコードを選択`,recordCount:`{{count}} 件のレコード`,recordCountOne:`1 件のレコード`,pageOf:`{{total}} ページ中 {{current}} ページ`,filters:`フィルター`,clear:`クリア`,yes:`はい`,filterPlaceholder:`{{label}} で絞り込み`,prevPage:`前のページ`,nextPage:`次のページ`,jumpToPage:`ページへ移動`,retry:`再試行`,loading:`読み込み中…`,noOptions:`オプションが見つかりません`,noRecords:`レコードが見つかりません`},common:{addToFavorites:`お気に入りに追加`,removeFromFavorites:`お気に入りから削除`,loading:`読み込み中…`,save:`保存`,cancel:`キャンセル`,delete:`削除`,edit:`編集`,create:`作成`,filter:`フィルター`,reset:`リセット`,confirm:`確認`,close:`閉じる`,back:`戻る`,next:`次へ`,previous:`前へ`,submit:`送信`,refresh:`更新`,export:`エクスポート`,import:`インポート`,yes:`はい`,no:`いいえ`,ok:`OK`,actions:`操作`,more:`もっと見る`,selectAll:`すべて選択`,clearAll:`すべてクリア`,noData:`データがありません`,noResults:`結果が見つかりません`,required:`必須`,optional:`任意`,selectOption:`選択してください`,select:`選択…`,openChat:`チャットを開く`,closeChat:`チャットを閉じる`,closePanel:`パネルを閉じる`,resizeDrawer:`パネル幅を調整`,itemCount:`{{count}} 件`,itemCountOne:`{{count}} 件`,toggleSidebar:`サイドバーを切り替え`,package:`パッケージ`,done:`完了`,editInStudio:`Studio で編集`,record:`レコード`,retry:`再試行`,printDialogHint:`ブラウザーの印刷ダイアログを開きます(PDF エクスポートではありません)`},actions:{decisionOutput:{help:`決定の出力としてフローに渡されます。`,helpMultiValue:`決定の出力としてフローに渡されます。複数の値はカンマで区切ってください。`},resultDialog:{defaultTitle:`この値を今すぐ保存してください`,acknowledge:`保存しました`,copyAll:`すべてコピー`}},validation:{required:`{{field}}は必須です`,minLength:`{{field}}は{{min}}文字以上で入力してください`,maxLength:`{{field}}は{{max}}文字以下で入力してください`,min:`{{field}}は{{min}}以上にしてください`,max:`{{field}}は{{max}}以下にしてください`,email:`有効なメールアドレスを入力してください`,url:`有効なURLを入力してください`,pattern:`{{field}}の形式が正しくありません`,formInvalid:`ハイライトされた項目を確認してください: {{fields}}`,formInvalidJoiner:`、`,unique:`{{field}}は一意である必要があります`,type:`{{field}}は有効な{{type}}である必要があります`},form:{noPermissionToSave:`このレコードを保存する権限がありません。`,submitFailed:`保存できませんでした。もう一度お試しください。`,discardTitle:`変更を破棄しますか?`,discardMessage:`保存されていない変更があります。このままフォームを閉じると編集内容は失われます。`,dialogDescriptionFallback:`フォームの項目を入力してから、送信またはキャンセルしてください。`,keepEditing:`編集を続ける`,discard:`破棄`,conflictTitle:`保存の競合`,conflictMessage:`編集中にこのレコードが他のユーザーによって変更されました。上書きすると、相手の変更はあなたの内容で置き換えられます。`,conflictLatestVersion:`相手の保存時刻: {{time}}`,conflictOverwrite:`上書き`,addItem:`項目を追加`,removeItem:`項目を削除`,fieldRequired:`この項目は必須です`,invalidFormat:`形式が正しくありません`,saveSuccess:`保存しました`,saveError:`保存に失敗しました`,unsavedChanges:`保存されていない変更があります。このページを離れますか?`,stepOf:`ステップ {{current}} / {{total}}`,createTitle:`{{object}}を作成`,editTitle:`{{object}}を編集`,viewTitle:`{{object}}を表示`,createTargetOrg:`作成先: {{org}}`,saveRecord:`レコードを保存`,create:`作成`,update:`更新`,createSuccess:`{{object}}が作成されました`,updateSuccess:`{{object}}が更新されました`,deleteSuccess:`{{object}}が削除されました`,fullscreen:{title:`テキストを編集`,description:`テキスト全体を編集してから、変更を保存またはキャンセルしてください。`,done:`完了`,toggle:`{{label}}を全画面で編集`,textFallback:`テキスト`}},fields:{image:{upload:`画像をアップロード`,addMore:`画像を追加`,uploading:`アップロード中…`,imageAlt:`画像 {{index}}`,crop:`画像 {{index}} を切り抜く`,remove:`画像 {{index}} を削除`,enlarge:`{{name}} を拡大`,preview:`画像プレビュー`,previous:`前の画像`,next:`次の画像`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`期限超過 {{count}}日`},file:{dragDropHere:`ファイルをここにドラッグ&ドロップ`,dropFilesHere:`ここにドロップ`,browseHint:`またはクリックして選択`,browseHintCamera:`またはクリックして選択 • 下のカメラボタンを使用`,takePhoto:`写真を撮る`,takeSelfie:`自撮り`,cameraCapture:`カメラ撮影`,uploading:`アップロード中…`,uploadingPct:`アップロード中…({{pct}}%)`,fileFallback:`ファイル`,upload:`アップロード`,remove:`{{name}} を削除`,exceedsMaxSize:`「{{name}}」は最大サイズ({{max}} MB)を超えています`,uploadFailed:`「{{name}}」のアップロードに失敗しました:{{error}}`},richText:{format:`フォーマット: {{format}}`,basicEditorHint:`リッチテキストエディター(基本)`,placeholder:`テキストを入力…`},options:{empty:`選択できる項目がありません`,selectFirst:`まず {{fields}} を選択してください`},objectRef:{loading:`オブジェクトを読み込み中…`,placeholder:`オブジェクトを選択`,search:`オブジェクトを検索…`,empty:`オブジェクトが見つかりません`},recipient:{selectTypeFirst:`先に受信者タイプを選択してください。`,loading:`読み込み中…`,search:`検索…`,empty:`一致する項目がありません`,select:`受信者を選択`,selectUser:`ユーザーを選択`,selectTeam:`チームを選択`,selectBusinessUnit:`事業単位を選択`,selectPosition:`役職を選択`,selectUnitAndSubordinates:`事業単位を選択`},filterCondition:{selectObjectFirst:`先にオブジェクトを選択してください。`,noCriteria:`条件が未設定です — このルールは何も共有しません`,criteriaRequired:`条件を1つ以上追加してください。条件のないルールは全レコードを共有してしまうため、保存できません。`,invalidJson:`JSON が不正です — 修正するまでこのルールはどのレコードにも一致しません。`,jsonOnly:`この条件は JSON でのみ編集できます`,editAsJson:`JSON で編集`,useVisualBuilder:`ビジュアルビルダーを使用`},tags:{placeholder:`入力してEnterキーで追加…`},textarea:{characterCount:`文字数: {{max}} 文字中 {{count}} 文字`,charactersRemaining:`残り {{count}} 文字`}},table:{rowsPerPage:`1ページの行数`,showing:`{{total}}件中{{from}}〜{{to}}件を表示`,noRows:`表示するデータがありません`,sortAsc:`昇順`,sortDesc:`降順`,filterColumn:`{{column}}でフィルター`,columns:`列`,exportCSV:`CSVエクスポート`,exportExcel:`Excelエクスポート`,selectRow:`行を選択`,selectAllRows:`すべての行を選択`,expandRow:`行を展開`,collapseRow:`行を折りたたむ`,hideColumn:`列を非表示`,freezeColumn:`列を固定`,unfreezeColumn:`列の固定を解除`,pageInfo:`{{total}}ページ中{{current}}ページ`,totalRecords:`合計{{count}}件`,noResults:`結果が見つかりません`,noResultsHint:`フィルターや検索クエリを調整してみてください。`,cancelAll:`すべてキャンセル`,saveAll:`すべて保存 ({{count}})`,addRecord:`レコードを追加`,open:`開く`,search:`検索…`,modified:`{{count}} 行が変更されました`,saveFailed:`保存に失敗しました`,selected:`{{count}} 件選択中`,edit:`編集`,delete:`削除`},grid:{bulkSelected:`{{count}} 件を選択中`,bulkSelectedAllMatches:`{{count}} 件を選択中(該当すべて)`,bulkClear:`選択解除`,bulkAllOnPage:`このページの {{count}} 件がすべて選択されています。`,bulkSelectAllMatching:`該当する {{count}} 件すべてを選択`,bulkAllMatchingSelected:`該当する {{count}} 件のレコードがすべて選択されています。`,bulk:{confirmDefault:`{{count}} 件のレコードに適用されます。`,overLimit:`選択件数({{count}})がアクションの上限({{limit}})を超えています。選択を減らしてください。`,affectedRecords:`対象レコード({{count}}):`,skippedIneligible:`選択したレコードのうち {{count}} 件はこのアクションの対象外のため、スキップされます。`,rowFallback:`{{index}} 行目`,andMore:`… 他 {{count}} 件`,processed:`{{count}} / {{total}} 件を処理`,processedFailed:` · 失敗 {{count}} 件`,undonePrefix:`取り消し済み — `,succeeded:`成功 {{count}} / {{total}}`,resultFailed:` · 失敗 {{count}}`,retry:`再試行`,downloadErrorCsv:`エラー CSV をダウンロード`,cancel:`キャンセル`,back:`戻る`,next:`次へ`,run:`実行`,running:`実行中…`,undo:`取り消す`,undoing:`取り消し中…`,done:`完了`,selectPlaceholder:`選択…`,loading:`読み込み中…`},actions:`アクション`,edit:`編集`,delete:`削除`,export:`エクスポート`,exportAs:`{{format}}でエクスポート`,loading:`グリッドを読み込み中…`,errorLoading:`グリッドの読み込みエラー`,pullToRefresh:`引っ張って更新`,refreshing:`更新中…`,openRecord:`レコードを開く`,rowHeight:`行の高さ: {{mode}}`,openMenu:`メニューを開く`,empty:`空`,yes:`はい`,no:`いいえ`,systemFields:`システム`,summary:{pattern:`{{label}}: {{value}}`,count:`件数`,countEmpty:`空欄`,countFilled:`入力済み`,countUnique:`一意`,percentEmpty:`空欄`,percentFilled:`入力済み`,sum:`合計`,avg:`平均`,min:`最小`,max:`最大`},toolbar:{densityMode:`密度`,densityCompact:`コンパクト`,densityComfortable:`標準`,densitySpacious:`広め`,densityCycleHint:`{{label}}(クリックで切り替え)`,densityCycleShortHint:`クリックで切り替え`},import:{downloadTemplate:`テンプレートをダウンロード`,downloadTemplateHint:`正しい列を備えた CSV を取得します(必須項目には * が付きます)。`,templateFileName:`{{object}}-import-template`,autoMatched:`自動マッピング済み`,autoMatchedSummary:`{{count}} 列を自動マッピングしました — 下で確認・調整してください。`,confidence:{high:`確度: 高`,medium:`確度: 中`,low:`確度: 低`},asyncQueued:`待機中 — インポートを準備しています…`,asyncProcessing:`{{total}} 行中 {{processed}} 行をインポート中… {{progress}}%`,asyncLargeHint:`このファイルは大きいため、バックグラウンドでインポートされます。`,largeSampleNotice:`{{total}} 行のうち先頭 {{shown}} 行をプレビューしています。`,cancelImport:`インポートを中止`,importCancelled:`インポートを中止しました`,resultsTruncated:`{{total}} 行のうち先頭 {{count}} 行の結果を表示しています。`,createdCount:`{{count}} 件を作成`,updatedCount:`{{count}} 件を更新`,downloadFailed:`失敗した行をダウンロード`,options:`インポート設定`,writeMode:`既存レコードに一致した行の扱い`,writeModeOpt:{insert:`常に新規作成`,update:`既存を更新(一致しなければスキップ)`,upsert:`一致すれば更新、なければ作成`},matchFields:`照合キー`,matchFieldsPlaceholder:`照合する項目を選択…`,matchFieldsHint:`これらの項目で既存レコードと照合します。`,needMatchFields:`照合する項目を 1 つ以上選択してください。`,matchOnlyField:`(照合のみ)`,optCreateOptions:`未知の選択肢の値を保持する`,optRunAutomations:`自動化とトリガーを実行する`,optTreatHistorical:`過去データとしてインポートする`,optTreatHistoricalHint:`(完了済みレコードをそのまま取り込みます — ステートマシンの検査を省略し、現在時刻を打刻せずに元のタイムスタンプと作成者を保持します)`,optSkipBlankKey:`照合値が空の行をスキップする`,optBackground:`バックグラウンドでインポートする`,optBackgroundHint:`(取り消し可能なジョブとして実行されます)`,validate:`データを検証`,validating:`検証中…`,validateHint:`インポート前に全行をサーバーで検査します。`,validatePassed:`{{ok}} 行すべてが有効です。`,validateFailed:`有効 {{ok}} 行、エラー {{errors}} 行。`,errorRowPrefix:`{{row}} 行目: `,referenceNotFound:`「{{value}}」に一致するレコードがありません`,referenceAmbiguous:`「{{value}}」は複数のレコードに一致します — 一意の値かレコード ID を使用してください`,invalidBoolean:`「{{value}}」は有効な true/false の値ではありません`,invalidNumber:`「{{value}}」は有効な数値ではありません`,invalidDate:`「{{value}}」は有効な日付ではありません`,invalidOption:`「{{value}}」は許可された選択肢に含まれていません`,requiredValue:`この項目は必須です`,matchAmbiguous:`既存の複数レコードに一致します — 一意の値かレコード ID を使用してください`,history:`履歴`,historyBack:`インポートに戻る`,historyDescription:`このオブジェクトの最近のインポート。`,historyHint:`バックグラウンドのインポートジョブ、新しい順。`,historyRefresh:`更新`,historyLoading:`読み込み中…`,historyEmpty:`インポートはまだありません。`,historyUnsupported:`このデータソースではインポート履歴を利用できません。`,historyColStatus:`ステータス`,historyColRows:`行数`,historyColResult:`結果`,historyColTime:`日時`,errorCount:`エラー {{count}} 件`,undoImport:`インポートを取り消す`,undoing:`取り消し中…`,undoConfirm:`このインポートを取り消しますか?作成されたレコードは削除され、更新されたレコードは以前の値に戻されます。`,reverted:`取り消し済み`,jobStatus:{pending:`待機中`,running:`実行中`,succeeded:`成功`,failed:`失敗`,cancelled:`中止`},legacyReferenceBlocked:`インポートを中止しました: {{fields}} は関連項目で、名前をレコード ID に解決するためサーバー側のインポート経路が必要ですが、この接続では対応していません。プレーンテキストとして取り込むとデータが壊れます。バックエンド/クライアントを更新するか、これらの列のマッピングを外して別途インポートしてください。`,missingRequiredHint:`続行できません — 必須項目が未マッピングです: {{fields}}。対応する列をファイルに追加するか、戻ってその列を含むファイルをアップロードしてください。`,legacyFallbackNotice:`互換フォールバックでインポートしました: この接続はサーバー側のインポート経路に対応していないため、値はサーバー側の型変換なしでテキストとして保存されました。完全なインポート機能(型変換と関連レコードの解決)にはバックエンド/クライアントの更新が必要です。`,title:`{{object}}をインポート`,notAllowed:`このオブジェクトはインポートに対応していません。`,stepUpload:`アップロード`,stepMapping:`マッピング`,stepPreview:`プレビュー`,uploadDescription:`CSVまたはExcelファイルをアップロードするか、表計算アプリから貼り付けて開始してください。`,mappingDescription:`列をオブジェクトフィールドにマッピングします。`,previewDescription:`インポート前にデータを確認してください。`,dragDrop:`CSVまたはExcelファイルをここにドラッグ&ドロップするか、クリックして参照`,browseFiles:`ファイルを参照`,parsing:`解析中…`,pasteHint:`または Excel・Google スプレッドシートからコピーした行を貼り付け(Ctrl/⌘+V)`,legacyXls:`旧形式の .xls ファイルはサポートされていません。.xlsx として保存し直してください。`,unsupportedFile:`サポートされていないファイル形式です。CSV、TSV、または Excel(.xlsx)を使用してください。`,parseFailed:`このファイルを読み取れませんでした。形式を確認して再度お試しください。`,fileNeedsHeader:`ファイルにはヘッダー行と少なくとも1行のデータが必要です。`,mappingTemplate:`マッピングテンプレート:`,chooseTemplate:`テンプレートを選択…`,noSavedTemplates:`保存されたテンプレートはありません`,noneOption:`— なし —`,saveCurrent:`現在を保存`,templateName:`テンプレート名`,save:`保存`,deleteTemplate:`テンプレートを削除`,savedMapping:`保存済みマッピング:`,chooseSavedMapping:`保存済みマッピングを選択…`,manualMapping:`— 列を手動でマッピング —`,transform:`変換`,savedMappingHint:`マッピング「{{name}}」はサーバー側でリネーム+変換+型変換を適用します。列マッピングは読み取り専用です。`,savedMappingPreviewNote:`プレビューは元の列を表示しています。インポート時、マッピング「{{name}}」がサーバー側でリネーム・変換・型変換を適用します。`,csvColumn:`列`,mapsTo:`マッピング先`,typeMismatch:`{{type}}のようです`,type:{number:`数値`,boolean:`ブール値`,date:`日付`,datetime:`日時`,text:`テキスト`},status:`ステータス`,skipColumn:`列をスキップ`,skip:`— スキップ —`,mapped:`マッピング済み`,skipped:`スキップ済み`,rowsWithErrors:`{{count}} 行にエラー`,rowsCorrected:`{{count}} 行が修正されました`,clickToFix:`— ハイライトされたセルをクリックしてインラインで修正。`,showingRows:`{{total}} 行中 {{shown}} 行を表示`,importing:`インポート中… {{progress}}%`,importComplete:`インポート完了`,imported:`{{count}} 件インポートされました`,skippedCount:`{{count}} 件スキップされました`,moreErrors:`…他 {{count}} 件のエラー`,cancel:`キャンセル`,back:`戻る`,next:`次へ`,close:`閉じる`,importNRows:`{{count}} 行をインポート`,importingProgress:`インポート中…`,requiredMark:`*`,required:`必須`,invalidType:`無効な{{type}}`}},calendar:{today:`今日`,month:`月`,week:`週`,day:`日`,agenda:`予定表`,allDay:`終日`,noEvents:`予定はありません`,newEvent:`新しい予定`,moreEvents:`+{{count}} 件`},list:{firstRunTitle:`まだ何もありません`,firstRunMessage:`最初のレコードを作成して始めましょう。`,noMatches:`該当するレコードがありません`,noMatchesMessage:`現在のフィルターや検索条件に一致するレコードはありません。条件を調整するか解除してください。`,loadErrorTitle:`レコードを読み込めませんでした`,loadErrorMessage:`データの読み込み中に問題が発生しました。接続を確認して再試行してください。`,loadErrorForbiddenTitle:`アクセス権がありません`,loadErrorForbiddenMessage:`これらのレコードを表示する権限がありません。必要な場合は管理者にお問い合わせください。`,loadErrorUnauthorizedTitle:`サインインが必要です`,loadErrorUnauthorizedMessage:`セッションの有効期限が切れたか、サインアウトしています。再度サインインしてください。`,loadErrorRejectedTitle:`このビューのクエリは拒否されました`,loadErrorRejectedMessage:`サーバーはこのビューのフィルターまたはクエリ設定を処理できませんでした。フィルターを解除すると解消することがほとんどです。ビューがこの状態で保存されている場合は、管理者による修正が必要です。`,loadErrorApiDisabledTitle:`このオブジェクトは API から利用できません`,loadErrorApiDisabledMessage:`このオブジェクトが API に公開されていないため、このページはレコードを読み込めません。これは権限ではなくオブジェクト自体の設定です。管理者が API アクセスを有効にするまで、このページは動作しません。`,retry:`再試行`,managedBy:{system:{title:`まだ何もありません`,message:`元となるアクション(承認申請、共有、招待など)が実行されると自動的に登録されます。元のレコードでいずれかを実行すると行が作成されます。`},appendOnly:{title:`記録されたイベントはありません`,message:`これは変更不可の監査ログです。行はイベント発生時にプラットフォームが書き込みます — 履歴のエクスポートはできますが、ここから作成することはできません。`},betterAuth:{title:`ID レコードがありません`,message:`これらのレコードは認証プロバイダーがサインイン・プロビジョニング・セキュリティ処理を通じて作成するもので、ここで手動追加するものではありません。`},betterAuthUser:{title:`ユーザーがまだいません`,message:`ユーザーアカウントは認証プロバイダーがプロビジョニングするもので、ここで作成するものではありません。組織にメンバーを招待すると、初回サインイン時に自動的に表示されます(SSO のジャストインタイム プロビジョニング)。アプリのエンドユーザーは、アプリ経由でサインアップした時点で追加されます。`},betterAuthTeam:{title:`チームがまだありません`,message:`チームは組織内のメンバーをまとめるものです。「チームを作成」から作成するか、認証プロバイダーの組織・SSO プロビジョニングを通じて追加されます。`}},refresh:`更新`,loading:`レコードを読み込み中…`,recordCount:`{{count}} 件のレコード`,recordCountOne:`{{count}} 件のレコード`,addRecord:`レコードを追加`,tabs:`タブ`,allRecords:`すべてのレコード`,search:`検索`,filter:`フィルター`,filterRecords:`レコードをフィルター`,sort:`並べ替え`,sortRecords:`レコードを並べ替え`,sortByIdSuffix:`(ID順)`,sortRelationalHint:`他のレコードを参照する列は表示されていません。保存されている ID でしか並べ替えられず、セルに表示される名称では並べ替えできません。その名称で並べ替えるには、名称をこのオブジェクトに非正規化し、参照元が変更されたときに書き込まれる保存項目として持たせたうえで、その項目で並べ替えてください。数式項目は使えません。数式は仮想的で、対応する列が保存されないため、サーバーは並べ替えを拒否します。`,resetSortToDefault:`ビューの既定の並び順に戻す`,group:`グループ`,groupBy:`グループ化`,export:`エクスポート`,exportAs:`{{format}}としてエクスポート`,color:`色`,rowColor:`行の色`,colorByField:`フィールドで色分け`,clear:`クリア`,none:`なし`,hideFields:`フィールドを非表示`,noItems:`項目が見つかりません`,noItemsMessage:`表示するレコードがありません。フィルターを調整するか、新しいデータを追加してください。`,showAll:`すべて表示`,pullToRefresh:`引っ張って更新`,refreshing:`更新中…`,share:`共有`,print:`印刷`,hideFieldsTitle:`フィールドを非表示`,dataLimitReached:`最初の {{limit}} 件のレコードを表示しています。さらにデータがある場合があります。`,viewSettings:`ビュー設定`,viewSettingsHint:`グループ化、色、密度、表示フィールド。`,addGroup:`グループフィールドを追加`,collapsedByDefault:`デフォルトで折りたたむ`,removeGroup:`削除`,inlineEditShort:`インライン編集`,inlineEditLabel:`レコードをインラインで編集(セルをクリックして編集)`,recordEditingTitle:`レコード編集`},managedByBadge:{systemWritable:{short:`プラットフォーム スキーマ`,title:`プラットフォーム定義・管理者が編集可能`,body:`このオブジェクトのスキーマはプラットフォームが定義しますが、行の作成・編集はここで行えます。誰が書き込めるかはこのバッジではなく、委任管理とレコードレベルのセキュリティで決まります。`},config:{short:`管理設定`,title:`管理者設定`,body:`これらの行はプラットフォームの実行時の動作を定義します。ここで設定を作成してください。生成される実行時データは別のテーブルに保存されます。`},system:{short:`システム管理`,title:`プラットフォームが管理`,body:`ソースレコードでアクションが実行されると、行が自動的に作成されます。以下のリストは読み取り専用の監視画面です。行レベルのアクション(承認、取り消し、再送など)は各行にあります。`},appendOnly:{short:`読み取り専用 · 監査ログ`,title:`読み取り専用の履歴レコード`,body:`変更不可の監査ログです。行はイベント発生時にプラットフォームによって書き込まれ、UI から作成・編集・削除はできません。コンプライアンスレビューにはエクスポートをご利用ください。`},betterAuth:{short:`アイデンティティ`,title:`ID プロバイダーが管理`,body:`このオブジェクトのスキーマは {{provider}} が所有しています。直接編集するとパスワードハッシュ、セッション検証、二要素チェック、監査フックがバイパスされます。認証プロバイダーのサインイン、招待、セキュリティフローで管理してください。`}},kanban:{uncategorized:`未分類`,columns:`カラム`,addCard:`カードを追加`,addColumn:`カラムを追加`,moveCard:`カードを移動`,deleteCard:`カードを削除`,deleteColumn:`カラムを削除`,noCards:`カードがありません`,cardTitlePlaceholder:`カードのタイトルを入力…`,requiredFieldsTitle:`必須項目を入力してください`,requiredFieldsDescription:`この移動により以下の項目が必須になります。入力して続行してください。`},timeline:{bucket:{overdue:`期限超過`,today:`今日`,tomorrow:`明日`,thisWeek:`今週`,nextWeek:`来週`,later:`後ほど`,noDate:`日付なし`,unassigned:`未割当`},scale:{week:`第{{n}}週`,quarter:`{{year}}年第{{quarter}}四半期`},gantt:{rowLabel:`項目`}},gantt:{viewMode:{day:`日`,week:`週`,month:`月`,quarter:`四半期`,year:`年`},row:{expand:`展開`,collapse:`折りたたむ`,open:`詳細を開く`},aria:{taskList:`タスク一覧`},tooltip:{days:`日`},menu:{view:`詳細を表示`,edit:`インライン編集`,delete:`削除`,addPredecessor:`先行タスクを追加…`,addSuccessor:`後続タスクを追加…`,removeDependency:`依存関係を削除`,noCandidates:`利用できるタスクがありません`,searchTasks:`タスクを検索…`},delete:{title:`このタスクを削除しますか?`,body:`「{{title}}」は完全に削除されます。この操作は取り消せません。`,cancel:`キャンセル`,confirm:`削除`,deleting:`削除中…`},drawer:{fallbackTitle:`タスクの詳細`},linkType:{fs:`終了 → 開始`,ss:`開始 → 開始`,ff:`終了 → 終了`,sf:`開始 → 終了`},linkEnd:{start:`開始`,end:`終了`},link:{rejected:{self:`タスクを自分自身に依存させることはできません。`,locked:`この行はロックされているため、依存関係を追加できません。`,group:`サマリー行は依存先にできません。配下のタスクに接続してください。`,cycle:`この接続は循環依存になります。`}},conflict:{title:`スケジュールの競合`,body:`この移動は依存関係の制約と競合します。影響を受ける {{count}} 件のタスクを自動で再スケジュールしますか?`,confirm:`自動で再スケジュール`,cancel:`そのままにする`},autoScheduleDlg:{title:`自動スケジュール`,body:`依存リンクを満たすため {{count}} 件のタスクを後ろにずらしますか?`,skipped:`ロックされた {{count}} 件のタスクもリンクに違反していますが、スキップされました。`,confirm:`適用`,cancel:`キャンセル`,none:`依存関係はすべて満たされています — 再スケジュールの必要はありません。`},resource:{header:`リソース`,peak:`ピーク`,over:`過負荷`,empty:`割り当てるタスクがありません。`},quickFilter:{all:`すべて`,clear:`フィルターをクリア`,empty:`選択肢がありません`,resultSummary:`{shown} / {total} 件のタスクを表示`},readOnly:`読み取り専用`,readOnlyHint:`このビューでは編集できません。`,lockedHint:`編集権限がありません`,writeFailed:`保存に失敗しました — 変更は取り消されました`,column:{taskName:`タスク名`,start:`開始`,end:`終了`},toolbar:{thisWeek:`今週`,thisMonth:`今月`,viewMode:`タイムラインの粒度`,enterFullscreen:`全画面表示`,exitFullscreen:`全画面表示を終了`,criticalPath:`クリティカルパスを強調`,autoSchedule:`依存関係を自動スケジュール`,exportPng:`PNG で書き出す`,exportPdf:`PDF で書き出す`,saveLayout:`レイアウトを保存`,refresh:`更新`,undo:`元に戻す`,redo:`やり直す`,prevPeriod:`前の期間`,nextPeriod:`次の期間`,zoomIn:`拡大`,zoomOut:`縮小`,jumpToToday:`今日に移動`,today:`今日`,showTaskList:`タスクリストを表示`,hideTaskList:`タスクリストを非表示`}},view:{editViewConfig:`ビュー設定を編集`,rename:`名前を変更`,duplicateView:`ビューを複製`,shareView:`ビューを共有`,setAsDefault:`デフォルトに設定`,pinView:`ビューをピン留め`,unpinView:`ピン解除`,changeViewType:`ビュータイプを変更`,deleteView:`ビューを削除`,addView:`ビューを追加`,unsavedChanges:`未保存の変更`,saveAsView:`ビューとして保存`,moreViews:`あと {{count}} 件`,activeFilters:`フィルター適用中`,activeSort:`ソート適用中`,manageViews:`ビューを管理`,manageAllViews:`すべてのビューを管理…`,manageViewsDescription:`このオブジェクトのすべてのビューを並べ替え、名前変更、固定、削除できます。`,searchViews:`ビューを検索`,addNewView:`新しいビューを追加`,done:`完了`,noViewsFound:`検索に一致するビューはありません。`,dragToReorder:`ドラッグして並べ替え`,defaultView:`デフォルトビュー`,defaultBadge:`デフォルト`,tabActionsFor:`{{name}} のビュー操作`,readonlyAriaLabel:`読み取り専用ビュー`,readonlyTooltip:`システムビュー — コードで定義され、読み取り専用です。`},designer:{undo:`元に戻す`,redo:`やり直す`},detail:{editInlineHint:`ダブルクリックで編集`,systemActor:`システム`,unknownUser:`不明`,back:`戻る`,edit:`編集`,editInline:`編集`,save:`保存`,saveChanges:`変更を保存`,editFieldsInline:`フィールドを編集`,share:`共有`,duplicate:`複製`,export:`エクスポート`,viewHistory:`履歴を表示`,delete:`削除`,moreActions:`その他の操作`,addReaction:`リアクションを追加`,pageHeaderActions:`ページヘッダーの操作`,emojiPicker:`絵文字ピッカー`,reactionCount:`{{emoji}} {{count}} 件のリアクション`,reactionCountOne:`{{emoji}} {{count}} 件のリアクション`,recordDetail:`レコード詳細`,recordDetailWithLabel:`{{label}}の詳細`,openAsFullPage:`フルページで開く`,recordDetailOverlay:`{{title}} のレコード詳細オーバーレイ。`,addToFavorites:`お気に入りに追加`,removeFromFavorites:`お気に入りから削除`,previousRecord:`前のレコード`,nextRecord:`次のレコード`,recordOf:`{{current}} / {{total}}`,recordNotFound:`レコードが見つかりません`,recordNotFoundDescription:`お探しのレコードは存在しないか、削除された可能性があります。`,goBack:`戻る`,details:`詳細`,related:`関連`,relatedRecords:`{{count}} 件のレコード`,relatedRecordOne:`{{count}} 件のレコード`,noRelatedRecords:`関連レコードが見つかりません`,loading:`読み込み中…`,copyToClipboard:`クリップボードにコピー`,copied:`コピーしました!`,deleteConfirmation:`このレコードを削除してもよろしいですか?`,deleted:`レコードを削除しました`,editRecord:`レコードを編集`,viewAll:`すべて表示`,new:`新規`,add:`追加`,emptyValue:`—`,activity:`アクティビティ`,editRow:`編集`,deleteRow:`削除`,deleteRowConfirmation:`このレコードを削除してもよろしいですか?`,actions:`操作`,previousPage:`前へ`,nextPage:`次へ`,pageOf:`ページ {{current}} / {{total}}`,sortBy:`並べ替え`,filterPlaceholder:`フィルター…`,highlightFields:`主要フィールド`,comments:`コメント`,searchComments:`コメントを検索…`,addCommentPlaceholder:`コメントを追加… (Ctrl+Enterで送信)`,noMatchingComments:`一致するコメントがありません`,noCommentsYet:`コメントはまだありません`,pinned:`ピン留め`,pin:`ピン留め`,unpin:`ピン解除`,justNow:`たった今`,minutesAgo:`{{count}}分前`,hoursAgo:`{{count}}時間前`,daysAgo:`{{count}}日前`,dropFilesToUpload:`ファイルをここにドロップまたはクリックしてアップロード`,attachmentCount:`{{count}} 件の添付ファイル`,attachmentCountPlural:`{{count}} 件の添付ファイル`,removeAttachment:`添付ファイルを削除`,attachments:`添付ファイル`,uploadAttachment:`アップロード`,loadingAttachments:`添付ファイルを読み込み中…`,noAttachments:`添付ファイルはまだありません。ファイルをアップロードして始めましょう。`,downloadAttachment:`ダウンロード`,deleteAttachment:`添付ファイルを削除`,attachmentDeleteDenied:`この添付ファイルを削除できるのは、アップロードした本人またはこのレコードを編集できるユーザーのみです。`,attachmentParentAccessDenied:`このレコードにファイルを添付する権限がありません。`,attachmentDownloadDenied:`この添付ファイルをダウンロードする権限がありません。`,attachmentAuthRequired:`この添付ファイルをダウンロードするにはサインインしてください。`,attachmentPermissionDenied:`この操作を行う権限がありません。`,unifiedDiff:`統合差分`,sideBySideDiff:`横並び差分`,noChanges:`変更なし`,previousVersion:`前のバージョン`,currentVersion:`現在のバージョン`,discussion:`ディスカッション`,showDiscussion:`ディスカッションを表示 ({{count}})`,hideDiscussion:`ディスカッションを非表示`,bold:`太字 (Ctrl+B)`,italic:`斜体 (Ctrl+I)`,listFormat:`リスト`,inlineCode:`インラインコード`,mentionSomeone:`メンションする`,preview:`プレビュー`,submitComment:`送信 (Ctrl+Enter)`,sendComment:`送信`,writeComment:`コメントを入力…`,subscribedTooltip:`購読中 — クリックで解除`,unsubscribedTooltip:`通知を購読`,firstRecord:`最初のレコード (Home)`,previousRecordKey:`前のレコード (←)`,nextRecordKey:`次のレコード (→)`,lastRecord:`最後のレコード (End)`,noRecords:`レコードなし`,searchWhileNavigating:`ナビゲーション中に検索`,searchRecords:`レコードを検索…`,allActivity:`すべてのアクティビティ`,commentsOnly:`コメントのみ`,fieldChangesFilter:`フィールド変更`,tasksOnly:`タスクのみ`,leaveCommentPlaceholder:`コメントを入力… (Ctrl+Enterで送信)`,noActivity:`アクティビティの記録なし`,loadMore:`さらに読み込む`,edited:`(編集済み)`,via:`{{source}} 経由`,viewSource:`ソースを表示`,replyCount:`{{count}} 件の返信`,replyCountPlural:`{{count}} 件の返信`,replyPlaceholder:`返信…`,filterActivity:`アクティビティをフィルター`,openDiscussion:`ディスカッションパネルを開く`,closeDiscussion:`ディスカッションパネルを閉じる`,subscribeAriaLabel:`通知を購読`,unsubscribeAriaLabel:`通知の購読を解除`,clearSearch:`検索をクリア`,saving:`保存中…`,lockedByApproval:`承認のためロック中`,lockedTooltip:`このレコードには承認待ちのリクエストがあります。編集はロックされています`,writeStrippedTitle:`保存しました(一部の項目は反映されていません)`,writeStrippedReadonly:`次の項目は読み取り専用のため反映されませんでした: {{fields}}`,writeStrippedByState:`次の項目はこのレコードの現在の状態では編集できないため反映されませんでした: {{fields}}`,approvalPendingEditable:`承認中 · 編集可能`,approvalPendingTooltip:`このレコードには承認待ちのリクエストがありますが、このステップでは編集できます`,approvalProgress:`承認 — {{need}} 件中 {{got}} 件`,approvalProgressGroups:`合議 — {{need}} グループ中 {{got}} グループ`,approvalProgressLabel:`承認の進捗`,approvalsPanelTitle:`承認`,cancelApproval:`承認を取り消す`,cancelApprovalInFlight:`取り消し中…`,cancelApprovalTooltip:`承認待ちリクエストを取り消してレコードのロックを解除する`,cancelApprovalTooltipUnlocked:`承認待ちリクエストを取り消す`,cancelApprovalFailed:`承認の取り消しに失敗しました`,cancelApprovalUnavailable:`このデータソースでは承認の取り消しはサポートされていません`,linkCopied:`リンクをクリップボードにコピーしました`,linkCopyFailed:`リンクのコピーに失敗しました`,cancel:`キャンセル`,cancelEdit:`変更を破棄`,sectionMoreDetails:`詳細情報`,concurrentUpdateTitle:`このレコードは他のユーザーによって変更されました`,concurrentUpdateDescription:`編集中に他のユーザーが {{field}} の新しいバージョンを保存しました。変更を上書きしないよう、競合の解決方法を選択してください。`,concurrentUpdateYourEdit:`自分の編集`,concurrentUpdateCurrentValue:`現在の値`,concurrentUpdateUpdatedBy:`{{name}} が更新`,concurrentUpdateUpdatedAt:`{{when}} に更新`,concurrentUpdateReload:`最新を読み込む`,concurrentUpdateOverwrite:`上書きする`,concurrentUpdateCancel:`キャンセル`,concurrentUpdateRecordLabel:`このレコード`,openInNewTab:`新しいタブで開く`,history:`履歴`,historyEmpty:`履歴はまだありません`,deleteRowTitle:`レコードを削除`,createdBy:`作成者`,updatedBy:`更新者`,created:`作成`,updated:`更新`,showEmptyRelated:`+ {{count}} 件(空)`,showEmptyRelated_one:`+ {{count}} 件(空)`,showEmptyRelated_other:`+ {{count}} 件(空)`,copyEmail:`メールをコピー`,copyPhone:`電話番号をコピー`,copyRecordId:`レコードIDをコピー`,showEmptyFields:`{{count}} 件の空フィールドを表示`,hideEmptyFields:`空フィールドを非表示`,noValue:`値なし`},chart:{noData:`チャートデータがありません`,loading:`チャート読み込み中…`,nullCategory:`(未設定)`},map:{searchLocations:`場所を検索…`,locationDetails:`場所の詳細`,markersCount:`{{count}} 個のマーカー`,invalidCoordinates:`座標が欠落または無効なため、{{count}} 件のレコードが地図から除外されました。`,invalidCoordinatesPlural:`座標が欠落または無効なため、{{count}} 件のレコードが地図から除外されました。`},workflow:{draft:`下書き`,active:`アクティブ`,paused:`一時停止`,completed:`完了`,cancelled:`キャンセル`,save:`保存`,publish:`公開`,addNode:`ノードを追加`,workflowFlow:`ワークフロー`,properties:`プロパティ`,connections:`接続`,quickConnect:`クイック接続`,fromPlaceholder:`開始…`,toPlaceholder:`終了…`,connect:`接続`,label:`ラベル`,type:`タイプ`,description:`説明`,assignee:`担当者`,assigneeType:`担当者タイプ`,user:`ユーザー`,role:`ロール`,group:`グループ`,expression:`式`,timeoutMinutes:`タイムアウト(分)`,selectNodeToEdit:`ノードを選択してプロパティを編集`,workflowTitle:`ワークフロータイトル`,newWorkflow:`新規ワークフロー`,outConnections:`{{count}} 個の出力`,start:`開始`,end:`終了`,task:`タスク`,userTask:`ユーザータスク`,serviceTask:`サービスタスク`,scriptTask:`スクリプトタスク`,approval:`承認`,condition:`条件`,parallelGateway:`並列ゲートウェイ`,joinGateway:`結合ゲートウェイ`,boundaryEvent:`境界イベント`,delay:`遅延`,notification:`通知`,webhook:`Webhook`,allowConcurrency:`許可(並行実行)`,forbidConcurrency:`禁止(新規スキップ)`,replaceConcurrency:`置換(既存キャンセル)`,queueConcurrency:`キュー(完了後に実行)`,conditionEvent:`条件`,manualEvent:`手動`,webhookEvent:`Webhook`,timerEvent:`タイマー`,signalEvent:`シグナル`,versionHistory:`バージョン履歴`,importBpmn:`BPMNをインポート`,exportBpmn:`BPMNをエクスポート`,undo:`元に戻す`,redo:`やり直す`,resetZoom:`ズームをリセット`},dashboard:{noRows:`行がありません`,loading:`読み込み中…`,pickMeasures:`このデータセットウィジェットの指標(値)を選択してください。`,datasetUnsupported:`このデータソースはデータセットクエリに対応していません。`,details:`詳細`,exportCsv:`CSV で書き出す`,openInList:`リストで開く`,filters:{label:`ダッシュボードのフィルター`,dateRange:`期間`,allTime:`全期間`,custom:`カスタム…`,all:`すべて`,reset:`リセット`,range:{today:`今日`,yesterday:`昨日`,this_week:`今週`,last_week:`先週`,this_month:`今月`,last_month:`先月`,this_quarter:`今四半期`,last_quarter:`前四半期`,this_year:`今年`,last_year:`昨年`,last_7_days:`過去 7 日間`,last_30_days:`過去 30 日間`,last_90_days:`過去 90 日間`}},addWidget:`ウィジェットを追加`,removeWidget:`ウィジェットを削除`,editLayout:`レイアウトを編集`,saveLayout:`レイアウトを保存`,resetLayout:`レイアウトをリセット`,total:`合計`,noDataAvailable:`データがありません`,noDataSourceFor:`データソースが利用できません:`,trend:{vsLastQuarter:`前四半期比`,vsLastMonth:`先月比`,vsLastWeek:`先週比`,vsLastYear:`前年比`,vsYesterday:`昨日比`,vsPreviousPeriod:`前期比`}},configPanel:{save:`保存`,discard:`破棄`,close:`閉じる`,layout:`レイアウト`,columns:`列数`,gap:`間隔`,rowHeight:`行の高さ`,data:`データ`,refreshInterval:`更新間隔`,appearance:`外観`,title:`タイトル`,showDescription:`説明を表示`,theme:`テーマ`,configuration:`設定`,general:`基本`,advanced:`詳細`},appDesigner:{createApp:`アプリケーション作成`,editApp:`アプリケーション編集`,basicInfo:`基本情報`,objects:`オブジェクト`,navigation:`ナビゲーション`,branding:`ブランディング`,appName:`アプリ名`,appTitle:`タイトル`,appDescription:`説明`,appIcon:`アイコン`,template:`テンプレート`,layout:`レイアウト`,layoutSidebar:`サイドバー`,layoutHeader:`ヘッダー`,layoutEmpty:`空`,selectObjects:`オブジェクトを選択`,searchObjects:`オブジェクトを検索…`,selectAll:`すべて選択`,deselectAll:`すべて解除`,navBuilder:`ナビゲーションビルダー`,addGroup:`グループを追加`,addUrl:`URLを追加`,addSeparator:`区切りを追加`,noNavItems:`ナビゲーション項目がありません。`,logoUrl:`ロゴURL`,primaryColor:`プライマリカラー`,faviconUrl:`ファビコンURL`,preview:`プレビュー`,complete:`完了`,snakeCaseHint:`snake_case形式が必要です(例: my_app)`,modeEdit:`編集`,modePreview:`プレビュー`,modeCode:`コード`,addWidget:`ウィジェットを追加`,widgetProperties:`ウィジェットプロパティ`,dataSource:`データソース`,valueField:`値フィールド`,aggregate:`集計`,colorVariant:`カラーバリアント`,addComponent:`コンポーネントを追加`,componentProperties:`コンポーネントプロパティ`,viewType:`ビュータイプ`,fields:`フィールド`,toolbar:`ツールバー`,showSearch:`検索を表示`,showFilters:`フィルターを表示`,showSort:`ソートを表示`,appearance:`外観`,rowHeight:`行高さ`,stripedRows:`ストライプ行`,bordered:`枠線`,livePreview:`リアルタイムプレビュー`,stepBasicDesc:`名前、タイトル、レイアウト`,stepObjectsDesc:`ビジネスオブジェクトを選択`,stepNavigationDesc:`ナビゲーションツリーを構築`,stepBrandingDesc:`ロゴ、色、ファビコン`,noObjectsFound:`オブジェクトが見つかりません。`,noNavItemsHint:`ナビゲーション項目がありません。前のステップでオブジェクトを選択するか、手動で追加してください。`,separator:`セパレーター`,separatorLabel:`— セパレーター —`,newGroup:`新しいグループ`,newLink:`新しいリンク`,saveDraft:`下書き保存`,cancelConfirmTitle:`変更を破棄しますか?`,cancelConfirmMessage:`保存されていない変更があります。キャンセルしてもよろしいですか?`,confirmDiscard:`破棄`,keepEditing:`編集を続ける`,navNoItems:`ナビゲーション項目がありません。上のボタンをクリックして追加してください。`,navNoPreviewItems:`項目なし`,navLivePreview:`ライブプレビュー`,navCollapseGroup:`グループを折りたたむ`,navExpandGroup:`グループを展開`,navAddChild:`子項目を追加`,navMoveUp:`上に移動`,navMoveDown:`下に移動`,navRemove:`削除`,navObjectPage:`オブジェクトページ`,navDashboard:`ダッシュボード`,navPage:`ページ`,navReport:`レポート`,navGroup:`グループ`,navUrl:`URL`,navSeparator:`区切り`,navTypeObject:`オブジェクト`,navTypeDashboard:`ダッシュボード`,navTypePage:`ページ`,navTypeReport:`レポート`,navTypeUrl:`URL`,navTypeGroup:`グループ`,navTypeSeparator:`区切り`,navTypeAction:`アクション`,navTypeComponent:`コンポーネント`,navEditIcon:`アイコンを編集`,navToggleVisible:`表示を切り替え`,navHidden:`非表示`,navExportSchema:`JSON エクスポート`,navImportSchema:`JSON インポート`,navExportSuccess:`ナビゲーションスキーマをエクスポートしました`,navImportSuccess:`ナビゲーションスキーマをインポートしました`,navImportError:`無効なナビゲーションJSON`,navIconPlaceholder:`アイコン名(例:Users)`,dashboardEditor:`ダッシュボードエディター`,noWidgets:`ウィジェットがありません。上のボタンをクリックして追加してください。`,widgetLayoutSize:`レイアウトサイズ`,widgetWidth:`幅`,widgetHeight:`高さ`,dashboardPreview:`ダッシュボードプレビュー`,noWidgetsPreview:`プレビューするウィジェットがありません`,pageCanvasEditor:`ページキャンバスエディター`,emptyPage:`空のページ。上のボタンをクリックしてコンポーネントを追加してください。`,pagePreview:`ページプレビュー`,noComponentsPreview:`プレビューするコンポーネントがありません`,modePage:`ページ`,modeDashboard:`ダッシュボード`,undo:`元に戻す`,redo:`やり直す`,brandingEditor:`ブランディングエディター`,brandingExport:`JSON エクスポート`,brandingImport:`JSON インポート`,brandingPreview:`プレビュー`,brandingSampleButton:`サンプルボタン`,brandingSampleText:`ブランドテーマの外観です。`,colorPalette:`カラーパレット`,fontFamily:`フォントファミリー`,fontDefault:`デフォルト(システム)`,modeLight:`ライト`,modeDark:`ダーク`,mobilePreview:`モバイルプレビュー`,objectManager:{title:`オブジェクトマネージャー`,addObject:`新しいオブジェクト`,searchPlaceholder:`オブジェクトを検索…`,noObjects:`オブジェクトが見つかりません。`,objectName:`API名`,objectLabel:`ラベル`,pluralLabel:`複数ラベル`,icon:`アイコン`,selectIcon:`アイコンを選択…`,group:`グループ`,noGroup:`グループなし`,sortOrder:`並べ替え順`,enabled:`有効`,relationships:`リレーション`,systemBadge:`システム`,fieldCount:`{{count}} フィールド`,ungrouped:`グループなし`,deleteConfirmTitle:`オブジェクトを削除しますか?`,deleteConfirmMessage:`このオブジェクトとそのすべてのフィールドが永久に削除されます。この操作は元に戻せません。`},fieldDesigner:{title:`フィールドデザイナー`,addField:`新しいフィールド`,searchPlaceholder:`フィールドを検索…`,allTypes:`すべてのタイプ`,noFields:`フィールドが見つかりません。`,fieldName:`API名`,fieldLabel:`ラベル`,fieldType:`タイプ`,fieldGroup:`グループ`,description:`説明`,required:`必須`,unique:`ユニーク`,readOnly:`読み取り専用`,hidden:`非表示`,indexed:`インデックス`,externalId:`外部ID`,trackHistory:`履歴追跡`,defaultValue:`デフォルト値`,placeholder:`プレースホルダー`,referenceTo:`参照先`,formula:`数式`,options:`オプション`,addOption:`オプションを追加`,validationRules:`検証ルール`,addRule:`ルールを追加`,systemBadge:`システム`,ungrouped:`一般`,deleteConfirmTitle:`フィールドを削除しますか?`,deleteConfirmMessage:`このフィールドは永久に削除されます。このフィールドの既存データは失われます。`,basicSection:`基本`,typeSpecificSection:`タイプ設定`,advancedSection:`詳細設定`,typeCategory:{text:`テキスト`,number:`数値`,date:`日付と時刻`,choice:`選択`,relation:`リレーション`,advanced:`詳細`}}},console:{saveAdvisoryTitle:`保存しました — 編集チェックで {{count}} 件の推奨事項が見つかりました`,settingsHub:{title:`設定`,subtitle:`ワークスペース、連携、機能フラグを設定します。`,loadError:`設定の読み込みに失敗しました`,empty:`登録された設定はありません。プラグインは SettingsService 経由で設定マニフェストを登録できます。`,settingsCount:`{{n}} 件の設定`,beta:`ベータ`,categories:{Workspace:`ワークスペース`,Communication:`コミュニケーション`,Security:`セキュリティ`,Infrastructure:`インフラストラクチャ`,Beta:`ベータ`,Other:`その他`}},objectData:{badge:`データ`,description:`URL で定義されたデータの断面 — 保存済みビューには紐づいていません。`,filteredBy:`絞り込み条件`,removeFilter:`絞り込み {{field}} を解除`,saveAsView:`ビューとして保存`,noAccessTitle:`アクセスが拒否されました`,noAccess:`このデータを閲覧する権限がありません。`},identityImport:{policyTitle:`インポートしたユーザーのサインイン設定`,policy:{auto:`自動(推奨)`,invite:`招待を送信`,temporary:`仮パスワード`,none:`パスワードなし(ID のみ)`},policyHint:{auto:`連絡可能なユーザーには招待(メールまたは SMS)を送信し、連絡できないユーザーにはワンタイムパスワードを発行して結果画面に一度だけ表示します。メール/SMS サービスの有無にかかわらず利用できます。`,invite:`作成された全ユーザーにパスワード設定メール(電話番号のみの行には招待 SMS)を送信します。メール/SMS サービスの設定が必要で、連絡できない行は失敗します。`,temporary:`メール/SMS のない環境向け: 作成された全ユーザーにワンタイムパスワードを発行し、結果画面に一度だけ表示します。初回サインイン時に変更が必須です。`,none:`ユーザーはまず電話 OTP、マジックリンク、またはパスワード再設定リンクでサインインし、その後自分でパスワードを設定します。`},passwordsNote:`仮パスワード — 一度だけ表示され、保存されません。今すぐ保存してください。各ユーザーは初回サインイン時に変更する必要があります。`,passwordsMore:`以降のエントリは省略されました — ダウンロードをご利用ください。`,passwordsDownload:`CSV をダウンロード`},ai:{usage:{title:`AI 使用状況`,meterBuild:`ビルド`,meterAsk:`質問`,statusOk:`残量に余裕があります`,statusLow:`残りわずかです`,statusFull:`上限に達しました`,resetsDaily:`今夜リセットされます`,resetsMonthly:`次のサイクルでリセットされます`,ctaUpgrade:`アップグレードして続行`,ctaTopUp:`クレジットを追加して続行`,ariaLabel:`AI 使用状況: {{status}}`},workspaceTitle:`AI ワークスペース`,workspaceSubtitle:`質問し、確認し、会話を再開します`,openChats:`チャットを開く`,chats:`チャット`,chatsDescription:`AI の会話を閲覧・管理します。`,share:`共有`,shareTitle:`この会話を共有`,shareDisabledTitle:`共有するにはチャットを開始してください`,newChat:`新規`,searchChats:`チャットを検索…`,noChatsYet:`チャットはまだありません`,noChatsDescription:`新しい会話を開始するとここに表示されます。`,noMatchingChats:`一致するチャットはありません。`,newConversation:`新しい会話`,renameConversation:`会話の名前を変更`,deleteConversation:`会話を削除`,saveRename:`名前を保存`,cancelRename:`名前の変更をキャンセル`,loadingHistory:`会話履歴を読み込んでいます…`,conversationReady:`会話の準備ができました`,preparingConversation:`新しい会話を準備しています`,offlineDemoMode:`オフラインデモモード — エージェント一覧は利用できません`,sendFailedRateLimited:`送信の間隔が短すぎます。メッセージは下に保持されています — 少し待ってから再試行してください。`,sendFailedGeneric:`メッセージを送信できませんでした。下に保持されています — もう一度お試しください。`,askAgent:`{{agent}} に質問…`,assistant:`アシスタント`,liveCanvas:`ライブプレビュー — {{app}}(ドラフト)`,liveCanvasUnlisted:`ライブアプリ — {{app}}(公開するまで非掲載)`,loadingAgents:`エージェントを読み込んでいます…`,askAnything:`何でも質問してください…`,emptyTitle:`会話を始める`,emptyDescription:`何でも質問してください — アシスタントは現在のアプリのコンテキストを参照できます。`,switchAssistant:`アシスタントを切り替え`,chooseAgent:`アシスタントを選択…`,empty:{build:{title:`AI でビルド`,description:`アプリやワークフローを普通の言葉で説明してください — オブジェクト、画面、自動化を下書きしますので、確認して公開してください。`},ask:{title:`データに質問`,description:`レコードについて質問してください — アクセスできるデータの件数、一覧、要約をお答えします。`},editApp:{title:`「{{app}}」を編集中`,titleGeneric:`このアプリを編集`,description:`何を変更しますか?このアプリをその場で変更します — 項目、オブジェクト、ビュー、自動化の追加や、既存部分の調整ができます。`}},clearConversation:`クリア`,sendHint:`で送信`,agentActivity:`エージェントの動作`,toolCompleted:`完了`,toolRunning:`実行中`,toolAwaitingApproval:`承認待ち`,toolFailed:`失敗`,toolDetailsHidden:`このビューではツールの入力と生の結果は非表示です。`,copy:`コピー`,copied:`コピーしました`,regenerate:`再生成`,model:`モデル`,submit:`送信`,uploadFiles:`ファイルをアップロード`,stopResponse:`応答を停止`,trace:`トレース`,viewTrace:`トレースを表示`,nextSteps:`次のステップ`,publishDrafts:`公開`,publishOk:`公開しました — オブジェクトが有効になりました。`,seedWarn:`公開しましたが、一部のサンプルデータを読み込めませんでした。`,openBuiltApp:`アプリを開く`,designBuiltApp:`Studio でデザイン`,previewDraft:`プレビュー`,previewApp:`アプリをプレビュー`,resizeSplit:`チャットとプレビューのサイズを変更`,hideChats:`チャットを隠す`,showChats:`チャットを表示`,planTitle:`提案されたプラン`,planQuestions:`ビルド前に確認`,planAssumptions:`前提`,planApproveHint:`返信してこのプランを承認または調整してください。`,planApprove:`ビルドする`,planAdjust:`調整`,justNow:`たった今`,minutesAgo:`{{count}} 分前`,hoursAgo:`{{count}} 時間前`,daysAgo:`{{count}} 日前`,agentLabels:{ask:`質問`,build:`ビルド`,dataChat:`アシスタント`,metadataAssistant:`メタデータアシスタント`},suggestions:{dataChat:{userCount:`システムには何人のユーザーがいますか?メールアドレスも一覧にしてください。`,recentRecords:`最近作成されたレコードを 5 件表示してください。`,recordCounts:`オブジェクトごとのレコード数を数えてください。`},metadataAssistant:{buildCrm:`営業 CRM を作って — 顧客、担当者、ステージ別に集計できる商談パイプライン。`,buildApp:`プロジェクト管理を作って — プロジェクト、担当者と期日つきのタスク、ステータス別ボード。`,buildFlow:`サポートデスクを設計して — 優先度つきチケット、ステータスのワークフロー、顧客との紐付け。`,buildInventory:`在庫管理アプリを作って — 商品、在庫数、仕入先、在庫僅少の可視化。`,buildRecruiting:`採用管理を作って — 候補者、募集職種、面接ステージ、メモ。`},generic:{help:`どんなことを手伝ってもらえますか?`,availableObjects:`利用できるデータオブジェクトを一覧にしてください。`,recentActivity:`最近の自分の活動を要約してください。`},editApp:{addField:`いずれかのオブジェクトに項目を追加してください。`,addObject:`新しいオブジェクトを追加し、既存のものと関連づけてください。`,addDashboard:`主要指標のダッシュボードを追加してください。`,addAutomation:`自動化を追加してください — 承認、ステータスフロー、または通知。`}},changesTitle:`変更の確認`,changesConfirmed:`確認済み`,changesConfirm:`変更を確定`,changesConfirmHint:`返信してこの変更を確定または調整してください。`,changeVerb:{createObject:`オブジェクトを作成`,addField:`項目を追加`,modifyField:`項目を変更`,deleteField:`項目を削除`,createMetadata:`作成`,updateMetadata:`変更`,createSeed:`サンプルデータを生成`,createPackage:`アプリパッケージを作成`},collapseToDock:`サイドパネルに収める`,switchApp:`アプリを切り替え`,switchAppLabel:`アプリ別のビルド会話`,newApp:`新しいアプリ`,connectionWaiting:`サーバーを待っています…`,connectionStalled:`まだ処理しています…`,connectionOffline:`接続が切断されました — 再接続しています…`,designingPlan:`アプリを設計しています…`,designingPlanHint:{data:`追跡するデータを整理しています…`,objects:`オブジェクトとそのフィールドを形にしています…`,relations:`関連レコードを接続しています…`,lookups:`リレーションと参照フィールドを設定しています…`,views:`画面とビューを計画しています…`,forms:`フォームとリストを配置しています…`,defaults:`妥当な既定値と検証を追加しています…`,dashboard:`追跡用のダッシュボードを描いています…`,review:`構造全体に矛盾がないか再確認しています…`,finalize:`プランをまとめています…`},planBuilding:`ビルド中…`,planBuilt:`ビルド済み`,planDeferred:`まだビルドされていません`,planReady:`プランの準備ができました。今すぐビルドするか、調整したい点を教えてください。`,published:`公開しました`,publishFailed:`公開に失敗しました`,unavailableTitle:`AI アシスタントを利用できません`,unavailableDescription:`このデプロイでは AI アシスタントが有効になっていません。それ以外の機能は通常どおり動作します。`,unavailableError:`AI サービスに接続できませんでした。一時的にオフラインの可能性があります — 再試行するか、ホームに戻ってください。`,unavailableRetry:`再試行`,unavailableHome:`ホームに戻る`,dock:{title:`アシスタント`,description:`AI アシスタントのチャット`,resize:`チャットのサイズを変更`,collapse:`チャットを折りたたむ`,maximize:`フルページで開く`,open:`アシスタントを開く`},group:{today:`今日`,yesterday:`昨日`,previous7Days:`過去 7 日間`,previous30Days:`過去 30 日間`,older:`それ以前`}},title:`ObjectStack コンソール`,initializing:`アプリケーションを初期化中…`,loadingHint:`新しい環境のセットアップには少し時間がかかることがあります。`,breadcrumb:{dashboards:`ダッシュボード`,pages:`ページ`,reports:`レポート`,system:`システム`},settingsView:{backToHub:`すべての設定`,back:`戻る`,noNamespace:`名前空間が選択されていません。`,loadError:`設定の読み込みに失敗しました`,saved:`設定を保存しました`,saveFailed:`保存に失敗しました`,lockedByEnv:`環境によりロックされています: {{key}}`,lockedByEnvNoKey:`環境によりロックされています`,actionSucceeded:`操作に成功しました`,actionFailed:`操作に失敗しました`,discard:`破棄`,saveChanges:`変更を保存`,unsavedCount:`未保存の変更 {{count}} 件`,unsavedCount_one:`未保存の変更 {{count}} 件`,unsavedCount_other:`未保存の変更 {{count}} 件`,cryptoRefusalTitle:`このデプロイメントはシークレットを暗号化できません`,cryptoRefusalSubjectSuffix:`は暗号化対象として宣言されているため、何も書き込まれませんでした。`,cryptoRefusalNoSubject:`暗号化対象として宣言された値は拒否され、何も書き込まれませんでした。`,cryptoRefusalToast:`シークレットを暗号化できません: {{subject}}`,cryptoRefusalToastNoSubject:`シークレットを暗号化できません`},loadingSteps:{connecting:`データソースに接続中`,loadingConfig:`設定を読み込み中`,preparingWorkspace:`ワークスペースを準備中`},error:{connectionFailed:`サーバーに接続できません`,serverUnreachable:`サーバー {{url}} に接続できません。`,checkServer:`ネットワーク接続、またはバックエンドが稼働していることを確認してください。`,timeout:`接続がタイムアウトしました(10秒)。`},actions:{retry:`再試行`,retrying:`再試行中…`},serverAction:{openingTitle:`開いています…`,openingBody:`開いています…しばらくお待ちください。`,popupBlockedTitle:`ポップアップがブロックされました`,popupBlockedDescription:`ブラウザが新しいタブを開くのをブロックしました。`,popupBlockedAction:`新しいタブで開く`},shortcuts:{title:`キーボードショートカット`,description:`利用可能なすべてのキーボードショートカットのクイックリファレンス。`,groups:{general:`一般`,navigation:`ナビゲーション`,dataViews:`データビュー`,aiChat:`AI アシスタント`,preferences:`設定`},openCommandPalette:`コマンドパレットを開く`,showShortcuts:`キーボードショートカットを表示`,closeDialog:`ダイアログ / パネルを閉じる`,toggleSidebar:`サイドバーを切り替え`,focusSearch:`検索にフォーカス`,createRecord:`新しいレコードを作成`,refreshData:`データを更新`,editRecord:`選択したレコードを編集`,newChat:`新しいチャット`,toggleChatsList:`チャット一覧を切り替え`,toggleDarkMode:`ダークモードを切り替え`},commandPalette:{title:`コマンドパレット`,placeholder:`コマンドを入力または検索…`,noResults:`結果が見つかりません。`,objects:`オブジェクト`,dashboards:`ダッシュボード`,pages:`ページ`,reports:`レポート`,switchApp:`アプリを切り替え`,current:`現在`,preferences:`設定`,lightTheme:`ライトテーマ`,darkTheme:`ダークテーマ`,systemTheme:`システムテーマ`,actions:`アクション`,openFullSearch:`完全な検索ページを開く`,createApp:`新しいアプリを作成`,searching:`検索中…`,records:`レコード`,recentRecords:`最近閲覧`},errors:{somethingWentWrong:`問題が発生しました`,unexpectedError:`このビューのレンダリング中に予期しないエラーが発生しました。`,tryAgain:`再試行`,goHome:`ホームに戻る`,errorDetails:`エラー詳細(開発モードのみ)`},notFound:{title:`ページが見つかりません`,description:`アクセスした URL は、このアプリのどのビューにも一致しません。`,back:`戻る`},theme:{toggle:`テーマを切り替え`,light:`ライト`,dark:`ダーク`,system:`システム`},objectView:{viewTypeTree:`ツリー`,viewTypeTreeDesc:`親項目によって自己参照レコードを階層に入れ子にします。`,parentField:`親項目`,parentFieldHelp:`階層を定義する親レコード(同一オブジェクト)を指す項目です。自己参照の項目のみ指定できます。`,viewName:`名前`,viewNameHelp:`マシンキー(snake_case)。タイトルから自動入力されます — 必要に応じて編集してください。`,viewNameRequired:`キーを入力してください(英小文字、数字、アンダースコア)。ラテン文字以外のタイトルでは自動入力されません。`,viewNameInvalid:`英小文字、数字、アンダースコアを使用し、先頭は文字かアンダースコアにしてください。`,systemViewReadonly:`システムビューはコードで定義されており、読み取り専用です。`,cannotEditMetaView:`このビューはコードで定義された組み込みビューのため、変更できません。`,cannotDeleteMetaView:`このビューはコードで定義された組み込みビューのため、削除できません。`,expandToPage:`フルページで開く`,objectNotFound:`オブジェクトが見つかりません`,objectNotFoundDescription:`オブジェクト「{{objectName}}」は現在の設定に存在しません。`,objectNotFoundHint:`アプリのナビゲーション設定を確認するか、サイドバーから別のオブジェクトを選択してください。`,filterOrNotSavable:`このフィルターは条件間に OR を使用しており、保存済みビューにはまだ保存できません。現在のリストには適用されています。ビューに保存するには OR グループを解除してください。`,filterNestedNotSavable:`このフィルターはネストされた条件グループを使用しており、保存済みビューには保存できません。ビューに保存するには単一の条件リストに展開してください。`,allRecords:`すべてのレコード`,exitDesignMode:`デザインモードを終了`,enterDesignMode:`デザインモードに入る`,metadataInspector:`メタデータインスペクター`,editView:`ビューを編集`,addView:`ビューを追加`,designTools:`デザインツール`,new:`新規`,configureView:`ビューを設定`,closePanel:`パネルを閉じる`,page:`ページ`,pageConfigHint:`ツールバー、ナビゲーション、ビューシェル設定`,listConfigHint:`このリストタイプのデータレンダリング、列、外観`,general:`一般`,generalHint:`ビューのタイトル、説明、タイプ`,toolbar:`ツールバー`,toolbarHint:`検索、フィルター、ソート、グループ、密度の切り替え`,toolbarEnabledCount:`{{total}} 件中 {{count}} 件有効`,navigationSection:`ナビゲーション`,navigationHint:`行クリック時の動作と詳細ビューの設定`,records:`レコード`,recordsHint:`選択モード、レコード追加、インライン編集`,exportPrint:`エクスポートと印刷`,exportPrintHint:`エクスポート形式、印刷、レコード数の表示`,showAllFields:`すべて表示`,hideAllFields:`すべて非表示`,searchFields:`フィールドを検索…`,title:`タイトル`,description:`説明`,data:`データ`,source:`ソース`,columns:`列`,filterBy:`フィルター条件`,sortBy:`並べ替え条件`,appearance:`外観`,showDescription:`説明を表示`,viewType:`ビュータイプ`,userFilters:`ユーザーフィルター`,enableSearch:`検索を有効化`,enableFilter:`フィルターを有効化`,enableSort:`並べ替えを有効化`,enableHideFields:`フィールド非表示を有効化`,enableGroup:`グループを有効化`,enableColor:`カラーを有効化`,enableDensity:`密度を有効化`,userActions:`ユーザーアクション`,addRecordViaForm:`フォームからレコードを追加`,advanced:`詳細設定`,allowExport:`エクスポートを許可`,recordCount:`{{count}} 件のレコード`,noDescription:`説明なし`,none:`なし`,columnsConfigured:`{{count}} 列`,save:`保存`,discard:`破棄`,createView:`ビューを作成`,newView:`新しいビュー`,typeOptions:`タイプオプション`,groupByField:`グループ化フィールド`,startDateField:`開始日フィールド`,titleField:`タイトルフィールド`,latitudeField:`緯度フィールド`,longitudeField:`経度フィールド`,imageField:`画像フィールド`,dateField:`日付フィールド`,selectField:`フィールドを選択…`,gridOptionsHint:`グリッドビューは上記で設定された列を使用します。`,groupBy:`グループ化`,prefixField:`プレフィックスフィールド`,fields:`フィールド`,fieldsVisible:`{{count}} 件表示`,sortsCount:`{{count}} 件の並べ替え`,filtersCount:`{{count}} 件のフィルター`,endDateField:`終了日フィールド`,color:`カラー`,fieldTextColor:`フィールドテキストカラー`,rowHeight:`行の高さ`,wrapHeaders:`ヘッダーの折り返し`,showFieldDescriptions:`フィールド説明を表示`,collapseAllByDefault:`デフォルトですべて折りたたむ`,striped:`ストライプ行`,bordered:`ボーダーセル`,inlineEdit:`インラインでレコードを編集`,addDeleteRecordsInline:`インラインでレコードを追加/削除`,clickIntoRecordDetails:`レコード詳細をクリックで表示`,navigationMode:`ナビゲーションモード`,navigationWidth:`ナビゲーション幅`,navigationWidthHint:`ドロワー、モーダル、スプリットナビゲーションモードで使用可能`,openNewTab:`新しいタブで開く`,openNewTabHint:`ページおよび新しいウィンドウナビゲーションモードで使用可能`,import:`インポート`,importTitle:`CSVからインポート`,importedToast:`{{count}} 行をインポートしました。`,importedWithSkipped:`{{ok}} 行をインポートしました。{{skipped}} 行をスキップしました。`,showAdvancedSettings:`詳細設定を表示`,showFewerSettings:`設定を減らす`,createViewDesc:`ビュータイプを選択して名前を付けてください。設定は後で変更できます。`,cancel:`キャンセル`,create:`作成`,delete:`削除`,deleteViewTitle:`ビューを削除`,deleteViewConfirm:`ビュー「{{name}}」を削除してもよろしいですか?この操作は元に戻せません。`,bulkDeleteConfirm:`選択した {{count}} 件のレコードを削除しますか?この操作は元に戻せません。`,duplicateViewName:`この名前のビューはすでに存在します。`,viewTypeGrid:`グリッド`,viewTypeGridDesc:`スプレッドシート形式のレコード一覧。`,viewTypeKanban:`かんばん`,viewTypeKanbanDesc:`単一選択フィールドでカードをカラムにグループ化。`,viewTypeCalendar:`カレンダー`,viewTypeCalendarDesc:`日付でレコードを月次カレンダーに配置。`,viewTypeGallery:`ギャラリー`,viewTypeGalleryDesc:`添付フィールドで大きな画像カードを表示。`,viewTypeTimeline:`タイムライン`,viewTypeTimelineDesc:`水平時間軸にレコードを配置。`,viewTypeGantt:`ガントチャート`,viewTypeGanttDesc:`開始/終了と依存関係のあるプロジェクトバー。`,viewTypeMap:`マップ`,viewTypeMapDesc:`緯度/経度フィールドから地理マーカーを表示。`,viewTypeChart:`チャート`,viewTypeChartDesc:`集計された棒グラフ/折れ線グラフ/円グラフ。`,groupByFieldHelp:`かんばんはこのフィールドの値でレコードをカラムにグループ化します。`,startDateFieldHelp:`カレンダーはこの日付に一致するセルにレコードを配置します。`,ganttStartDateFieldHelp:`各ガントバーの左端はこの日付を使用します。`,ganttEndDateFieldHelp:`各ガントバーの右端はこの日付を使用します。`,timelineDateFieldHelp:`レコードはこの日付でタイムラインに配置されます。`,latitudeFieldHelp:`緯度座標を提供するフィールド(地理フィールドのみ)。`,longitudeFieldHelp:`経度座標を提供するフィールド(地理フィールドのみ)。`,imageFieldHelp:`ギャラリーのカバーはこの画像または添付フィールドから取得されます。`,selectOption:`選択…`,noEligibleFieldForType:`このタイプに適したフィールドがありません。最初にオブジェクトに追加してください。`,viewTypeUnavailable:`このオブジェクトには「{{field}}」として機能するフィールドがありません。`,viewTypeUnavailableShort:`このオブジェクトではサポートされていません。`,chartType:`チャートタイプ`,chartTypeHelp:`データのレンダリング方法を決定します。`,chartTypeBar:`棒グラフ`,chartTypeLine:`折れ線グラフ`,chartTypePie:`円グラフ`,chartTypeArea:`面積グラフ`,chartTypeScatter:`散布図`,xAxisField:`X軸フィールド`,xAxisFieldHelp:`カテゴリまたは時間の次元。`,yAxisField:`Y軸フィールド`,yAxisFieldHelp:`集計する数値フィールド。`,selectionMode:`選択モード`,selectionNone:`なし`,selectionSingle:`単一`,selectionMultiple:`複数`,pageSize:`ページサイズ`,pageSizeOptions:`ページサイズのオプション`,exportFormats:`エクスポート形式`,exportMaxRecords:`最大レコード数`,exportIncludeHeaders:`ヘッダーを含む`,exportFileNamePrefix:`ファイル名プレフィックス`,searchableFields:`検索可能フィールド`,filterableFields:`フィルター可能フィールド`,resizableColumns:`サイズ変更可能な列`,densityCompact:`コンパクト`,densityComfortable:`標準`,densitySpacious:`広め`,densityMode:`密度モード`,hiddenFields:`非表示フィールド`,rowActions:`行アクション`,bulkActions:`一括アクション`,sharing:`共有`,sharingEnabled:`共有を有効にする`,sharingVisibility:`表示設定`,addRecordEnabled:`レコード追加を有効にする`,addRecordPosition:`位置`,addRecordMode:`モード`,addRecordFormView:`フォームビュー`,conditionalFormatting:`条件付き書式`,addRule:`ルールを追加`,quickFilters:`クイックフィルター`,addQuickFilter:`クイックフィルターを追加`,ufElements:`要素`,ufDropdown:`ドロップダウン`,ufTabs:`タブ`,ufToggle:`トグル`,ufAddField:`+ フィルターフィールドを追加…`,ufNoFields:`利用可能なフィールドがありません`,ufAddTab:`+ タブを追加`,ufTabLabel:`ラベル`,ufShowAllRecords:`「すべてのレコード」タブを表示`,ufAllowAddTab:`タブの追加を許可`,showRecordCount:`レコード数を表示`,allowPrinting:`印刷を許可`,virtualScroll:`仮想スクロール`,emptyStateTitle:`空の状態のタイトル`,emptyStateMessage:`空の状態のメッセージ`,emptyStateIcon:`空の状態のアイコン`,ariaLabel:`ARIAラベル`,ariaDescribedBy:`ARIA説明`,ariaLive:`ARIAライブ`,accessibility:`アクセシビリティ`,viewTabs:`ビュータブ`},localeSwitcher:{label:`言語`},search:`検索…`,nav:{pinItem:`{{name}} をピン留め`,unpinItem:`{{name}} のピンを外す`,dragToReorder:`ドラッグして並べ替え`,favorites:`お気に入り`}},auth:{setPassword:{title:`リカバリー用パスワードを設定`,description:`シングルサインオンでサインインしました。SSO が利用できなくなったときにもこの環境へ直接サインインできるよう、ローカルパスワードを設定してください。`,email:`メールアドレス`,newPassword:`新しいパスワード`,confirmPassword:`パスワードの確認`,submit:`パスワードを設定`,submitting:`保存中…`,success:`ローカルパスワードを設定しました`,failed:`パスワードを設定できませんでした`,passwordsMismatch:`パスワードが一致しません`,noSession:`セッションの有効期限が切れました。`,backToSignIn:`もう一度サインイン`},login:{signingIn:`サインインしています…`,ssoHandoff:`{{target}} に進む`,devAdminHint:{title:`開発用インスタンス`,body:`初期設定の開発用管理者でサインインします:`,dismiss:`閉じる`},title:`アカウントにサインイン`,description:`メールアドレスとパスワードを入力してください`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,passwordLabel:`パスワード`,passwordPlaceholder:`パスワードを入力`,forgotPasswordText:`パスワードをお忘れですか?`,submitButton:`サインイン`,submittingButton:`サインイン中…`,noAccountText:`アカウントをお持ちでないですか?`,signUpText:`新規登録`,errors:{oauthCallbackFailed:`シングルサインオンを完了できませんでした — サインインリンクの有効期限が切れたか、すでに使用されています。もう一度お試しください。`,invalidCredentials:`メールアドレスまたはパスワードが正しくありません。再試行してください。`,emailNotVerified:`サインインする前にメールアドレスを確認してください。`},emailOrPhoneLabel:`メールアドレスまたは電話番号`,emailOrPhonePlaceholder:`name@example.com または +1 555 000 0000`,phoneLabel:`電話番号`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`確認コード`,otpCodePlaceholder:`6 桁のコード`,sendOtpButton:`コードを取得`,resendOtpCountdownText:`{seconds} 秒後に再送信`,usePhoneOtpText:`確認コードでサインイン`,usePasswordSignInText:`パスワードでサインインする`},register:{title:`アカウントを作成`,description:`情報を入力して始めましょう`,nameLabel:`名前`,namePlaceholder:`田中太郎`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,passwordLabel:`パスワード`,passwordPlaceholder:`パスワードを作成(8文字以上)`,confirmPasswordLabel:`パスワード確認`,confirmPasswordPlaceholder:`パスワードを再入力`,passwordMismatchError:`パスワードが一致しません`,passwordTooShortError:`パスワードは8文字以上必要です`,submitButton:`アカウント作成`,submittingButton:`アカウント作成中…`,hasAccountText:`すでにアカウントをお持ちですか?`,signInText:`サインイン`,errors:{userExists:`このメールアドレスのアカウントはすでに存在します。代わりにサインインしてください。`},verifyInbox:{title:`受信箱を確認してください`,description:`{{email}} に確認リンクを送信しました。リンクをクリックしてアカウントを有効にしてください。`,resend:`確認メールを再送信`,resending:`送信中…`,resent:`確認メールが送信されました。`,backToSignIn:`サインインに戻る`}},forgotPassword:{title:`パスワードをリセット`,description:`メールアドレスを入力してください。パスワードリセットリンクをお送りします`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,submitButton:`リセットリンクを送信`,submittingButton:`送信中…`,successTitle:`メールをご確認ください`,successDescription:`{{email}} にパスワードリセットリンクを送信しました。受信箱をご確認ください。`,backToSignInText:`サインインに戻る`,rememberPasswordText:`パスワードを覚えていますか?`,signInText:`サインイン`,phoneLabel:`電話番号`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`確認コード`,otpCodePlaceholder:`6 桁のコード`,sendOtpButton:`コードを取得`,resendOtpCountdownText:`{seconds} 秒後に再送信`,newPasswordLabel:`新しいパスワード`,newPasswordPlaceholder:`新しいパスワードを入力`,resetButton:`パスワードをリセット`,usePhoneResetText:`SMS コードでリセット`,useEmailResetText:`メールでリセットする`,phoneSuccessTitle:`パスワードをリセットしました`,phoneSuccessDescription:`パスワードをリセットしました。新しいパスワードでサインインできます。`},resetPassword:{title:`新しいパスワードを設定`,description:`以前に使用していないパスワードを選択してください。`,newPassword:`新しいパスワード`,confirmPassword:`パスワードの確認`,submit:`パスワードを更新`,submitting:`更新中…`,success:`パスワードが更新されました`,failed:`リセットに失敗しました`,invalidToken:`このリセットリンクは無効か期限切れです。`,missingToken:`リセットリンクが見つからないか期限切れです`,passwordsMismatch:`パスワードが一致しません`,requestNewLink:`新しいリンクをリクエスト`},verifyEmail:{title:`メールアドレスを確認してください`,description:`メールアドレスに確認リンクを送信しました。リンクをクリックしてアカウントを確認してください。`,sentTo:`送信先:`,verifyingTitle:`確認中…`,verifyingDescription:`メールを確認中です。少々お待ちください。`,successTitle:`メールが確認されました`,successDescription:`メールが確認されました。サインインできます。`,errorTitle:`確認に失敗しました`,errorDescription:`確認に失敗しました。新しいリンクをリクエストしてください。`,missingToken:`確認リンクにトークンがありません。`,emailMissing:`メールアドレスがありません`,resendButton:`確認メールを再送信`,resending:`送信中…`,resent:`メールが送信されました!受信箱を確認してください`,resentSuccess:`確認メールが送信されました!`,resentDescription:`受信箱を確認して確認リンクをクリックしてください。`,resendFailed:`確認メールを再送信できません`,signInLink:`サインインへ`,backToSignIn:`サインインに戻る`,backToLogin:`ログインに戻る`,checkSpam:`メールが届きませんか?スパムフォルダーを確認するか、サポートに連絡してください。`,or:`または`,resendUnavailable:`この環境ではメール配信が設定されていない可能性があります。問題が続く場合はサポートに連絡してください。`},setup:{welcomeTitle:`ObjectStackへようこそ`,description:`このデプロイメントの設定を完了するために、最初のオーナーアカウントを作成してください。`,yourName:`お名前`,orgName:`組織名`,orgNamePlaceholder:`Acme Inc.`,emailLabel:`メールアドレス`,emailPlaceholder:`name@example.com`,passwordLabel:`パスワード`,passwordHint:`最低8文字`,submit:`オーナーアカウントを作成`,submitting:`設定中…`,failed:`設定に失敗しました`},device:{title:`新しいデバイスを認証`,subtitle:`{{email}} としてサインインするためにこのデバイスを承認します。`,userCodeLabel:`デバイスコード`,requesterLabel:`接続リクエスト元`,approveWarning:`この接続を直前にご自身で開始した場合にのみ承認してください。承認すると、このランタイムは組織のプライベートパッケージにアクセスできます。`,loggedInAs:`{{email}} としてサインイン中`,approve:`デバイスを承認`,approving:`承認中…`,approvedTitle:`デバイスが認証されました`,approvedDescription:`デバイスに戻ることができます。まもなくサインインするはずです。`,approveSuccess:`デバイスが認証されました`,approveSuccessDescription:`このウィンドウを閉じることができます。`,approveFailed:`承認に失敗しました`,deny:`リクエストを拒否`,denying:`拒否中…`,deniedTitle:`アクセスが拒否されました`,deniedDescription:`このデバイスはアクセスを許可されません。`,denyFailed:`リクエストの拒否に失敗しました`,invalidTitle:`無効なデバイスリンク`,invalidDescription:`URLにデバイスコードが指定されていません。`,loading:`読み込み中…`,cancel:`キャンセル`,disabledTitle:`デバイス認証が有効になっていません`,disabledDescription:`このデプロイメントではデバイス認証が有効になっていないため、ここでこのデバイスを承認できません。`},shell:{tenantHostHint:`このワークスペースにサインインしています`},layout:{headline:`強力なビジネスアプリを、より速く。`,subhead:`エンタープライズのデータ管理・ワークフロー・分析のための統合プラットフォーム。`},remediation:{signOut:`代わりにサインアウト`,password:{title:`パスワードの有効期限が切れました`,fallbackMessage:`続行するには新しいパスワードを設定してください。`,current:`現在のパスワード`,next:`新しいパスワード`,confirm:`新しいパスワード(確認)`,submit:`パスワードを変更して続行`,submitting:`更新しています…`,mismatch:`新しいパスワードが一致しません。`,failed:`パスワードを変更できませんでした。`},mfa:{title:`二要素認証を設定`,fallbackMessage:`続行するには、組織の要件により認証アプリが必要です。`,confirmPassword:`パスワードを確認`,continue:`続行`,preparing:`準備しています…`,enrollFailed:`登録を開始できませんでした。`,scanTitle:`認証アプリでスキャン`,scanBody:`Google Authenticator、1Password、Authy などでこの QR コードをスキャンし、6 桁のコードを入力してください。`,backupTitle:`バックアップコードを保存`,backupBody:`安全な場所に保管してください。デバイスを紛失した場合、各コードは 1 回だけ使用できます。`,codeLabel:`6 桁のコード`,verify:`確認して続行`,verifying:`確認しています…`,invalidCode:`コードが無効です。もう一度お試しください。`}}},oauth:{consent:{title:`{{appName}} がアカウントへのアクセスを求めています`,request:`{{appName}} が許可を求めています{{suffix}}。`,unknownApp:`あるアプリケーション`,willAllow:`このアプリは次のことができます:`,scope:{openid:`本人確認を行う`,profile:`基本プロフィール(名前、画像)を読み取る`,email:`メールアドレスを読み取る`,offlineAccess:`サインインしたままにする(アクセスの更新)`},deny:`拒否`,authorize:`許可`,submitting:`許可中…`,granted:`アクセスを許可しました`,denied:`アクセスが拒否されました`,noRedirect:`サーバーからリダイレクト URL が返されませんでした。`,failed:`同意に失敗しました`,footer:`アクセス権はアカウント設定からいつでも取り消せます。`}},profile:{title:`プロフィール`,subtitle:`アカウント設定を管理します`,saving:`保存中…`,avatar:{upload:`アップロード`,replace:`変更`,remove:`削除`},info:{title:`個人情報`,description:`名前を更新し、アカウントの詳細を確認します`,saved:`プロフィールを更新しました。`,name:`名前`,email:`メールアドレス`,emailImmutable:`メールアドレスは変更できません。`,role:`ロール`,save:`変更を保存`},password:{changeTitle:`パスワードを変更`,setTitle:`ローカルパスワードを設定`,changeDescription:`この環境へのサインインに使用するパスワードを更新します。`,setDescription:`シングルサインオンでサインインしています。ローカルパスワードを設定すると、この環境でメールアドレスとパスワードでもサインインできます。`,current:`現在のパスワード`,new:`新しいパスワード`,password:`パスワード`,confirm:`パスワードの確認`,tooShort:`パスワードは 8 文字以上で入力してください`,mismatch:`パスワードが一致しません`,enterCurrent:`現在のパスワードを入力してください`,changed:`パスワードを変更しました。`,localSet:`ローカルパスワードを設定しました。この環境でメールアドレスとパスワードでサインインできます。`,changeAction:`パスワードを変更`,setAction:`パスワードを設定`}},errors:{networkError:`ネットワークエラーです。接続を確認してください。`,serverError:`サーバーエラーです。後でもう一度お試しください。`,notFound:`リソースが見つかりません。`,unauthorized:`この操作を実行する権限がありません。`,forbidden:`アクセスが拒否されました。`,timeout:`リクエストがタイムアウトしました。もう一度お試しください。`,unknown:`予期しないエラーが発生しました。`},workspace:{label:`ワークスペース`,default:`マイワークスペース`,switch:`ワークスペースを切り替え`,create:`ワークスペースを作成`,createTitle:`ワークスペースの作成`,createDescription:`ワークスペースはチームで協力するための共有スペースです。`,createButton:`ワークスペースを作成`,nameLabel:`ワークスペース名`,namePlaceholder:`例: Acme Inc`,slugLabel:`URL スラッグ`,slugHint:`URL に使用されます。小文字、数字、ハイフンのみ。`,invite:`メンバーを招待`,members:`メンバー`,settings:`ワークスペース設定`,multiOrgDisabled:`このインスタンスでは新しい組織の作成が無効です。`,createFailed:`ワークスペースの作成に失敗しました`},help:{onThisPage:`このページの内容`,keyboardShortcuts:`キーボードショートカット`,appDocs:`このアプリのドキュメント`,allDocs:`すべてのドキュメント`,onlineDocs:`オンラインドキュメント`},sidebar:{packageManagement:`パッケージ管理`,searchNavigation:`ナビゲーションを検索…`,settings:`設定`,help:`ヘルプ`,helpTooltip:`ヘルプとドキュメント`,activityFeed:`アクティビティフィード`,notifications:`通知`,approvals:`承認`,inbox:`受信箱`,inboxAriaLabel:`受信箱を開く`,area:`エリア`,scope:`スコープ`,recent:`最近`,favorites:`お気に入り`,starred:`スター付き`,removeFromFavorites:`お気に入りから {{name}} を削除`},topbar:{openAssistant:`{{name}} アシスタントを開く`,offline:`オフライン`,usersOnline:`現在オンラインのユーザー`,switchView:`ビューを切り替え`,switchObject:`オブジェクトを切り替え`,connection:{connected:`接続済み`,connecting:`接続中…`,reconnecting:`再接続中…`,disconnected:`切断されました`,error:`接続エラー`},stage:{preview:`プレビュー`,beta:`ベータ`,tooltip:`このプラットフォームはプレビュー版です — 機能は変更される可能性があります。`},aiAssistant:`AI アシスタント`,designInStudio:`Studio でデザイン`},home:{build:{title:`アプリを作る`,subtitle:`ゼロから始める — オブジェクト、フォーム、自動化、画面を設計します。`},template:{title:`テンプレートから始める`,subtitle:`マーケットプレイスからテンプレートアプリをインストールしてカスタマイズします。`},welcomeAdminDescription:`ビジネスを一文で説明してください — AI がオブジェクト、画面、API、エージェントツールを生成します。左のメニューから自分で設定することもできます。`,welcomeAdminDescriptionNoBuild:`左の管理メニューから最初のアプリケーションを設定してください。データが入ると、AI アシスタントが分析を手伝えます。`,welcomeAdminDescriptionNoAi:`左の管理メニューから最初のアプリケーションを設定してください。`,noAppsTitle:`アプリケーションがまだありません`,noAppsDescription:`ワークスペースを準備中です — 管理者が共有したアプリがここに表示されます。`,buildWithAI:`AI でビルド`,askAI:`AI に質問`,recoveryReminder:{message:`シングルサインオンが利用できないときでもサインインできるよう、リカバリーパスワードを設定してください。`,cta:`パスワードを設定`,dismiss:`閉じる`},pendingDrafts:{message:`未公開の変更が {{count}} 件あります — 公開すると反映されます。`,cta:`公開`,publishing:`公開しています…`,published:`公開しました。変更が反映されています。`,publishFailed:`公開に失敗しました`,nothing:`公開するものはありません。`,probeWarn:`公開しましたが、検証で問題が見つかりました。`,seedWarn:`公開しましたが、一部のサンプルデータを読み込めませんでした。`,publishedVerified:`公開して検証しました — サンプルデータ {{count}} 行が反映されています。`,capabilityWarn:`作成時チェック:{{count}} 件のケイパビリティ参照が解決できません。`},title:`ホーム`,subtitle:`ワークスペースのダッシュボード`,nav:`ホーム`,allApps:`すべてのアプリケーション`,yourApps:`あなたのアプリ`,showMoreApps:`もっと見る`,showLess:`折りたたむ`,continueEmpty:`開いた項目がここに表示されます。`,actionCenter:{title:`対応が必要な項目`,empty:`すべて対応済みです`},loading:`ワークスペースを読み込み中…`,recent:`最近`,starred:`スター付き`,welcome:`ObjectUI へようこそ`,welcomeDescription:`最初のアプリケーションを作成するか、システム設定を行ってください。`,createFirstApp:`最初のアプリを作成`,systemSettings:`システム設定`,browseMarketplace:`アプリマーケットプレイスを参照`,quickActions:{title:`クイックアクション`,createApp:`アプリを作成`,createAppDesc:`新しいアプリケーションを開始`,manageObjects:`オブジェクトを管理`,manageObjectsDesc:`データモデルを設定`,systemSettings:`システム設定`,systemSettingsDesc:`ワークスペースを設定`},appCard:{noDescription:`説明なし`,default:`デフォルト`},greetingMorning:`おはようございます`,greetingAfternoon:`こんにちは`,greetingEvening:`こんばんは`,greetingNight:`夜遅くまで作業中`,heroTagline:`前回の続きを始めるか、新しいものを探索してください。`,open:`開く`,stats:{apps:`アプリケーション`,starred:`スター付き`,recent:`最近のアイテム`},recentApps:{title:`最近アクセスしたもの`,itemType:{object:`オブジェクト`,dashboard:`ダッシュボード`,page:`ページ`,record:`レコード`}},starredApps:{title:`スター付き`},gettingStarted:{title:`ホームをカスタマイズ`,description:`アプリにスターを付けてここにピン留めし、ワンクリックでアクセスできます。開いたものはすべて「最近アクセスしたもの」に自動的に表示されます。`,cta:`すべてのアプリを参照`}},layout:{systemNav:{systemSettings:`システム設定`,applications:`アプリケーション`,appMarketplace:`アプリマーケットプレイス`,objectManager:`オブジェクトマネージャー`,users:`ユーザー`,organizations:`組織`,roles:`ロール`,configuration:`構成`,createApp:`アプリを作成`,administration:`管理`,datasources:`データソース`,documentation:`ドキュメント`},appSwitcher:{switchApplication:`アプリケーションを切り替え`,appsAvailable:`{{count}} 個のアプリが利用可能`,editNavigation:`ナビゲーションを編集`,home:`ホーム`,addApp:`アプリを追加`,editApp:`アプリを編集`,manageAllApps:`すべてのアプリを管理`,systemConsole:`システムコンソール`,noAppsConfigured:`アプリが設定されていません`},activityFeed:{title:`最近の活動`,filter:`フィルター`,empty:`最近の活動はありません`,ariaLabel:`アクティビティフィード`,typeCreate:`作成`,typeUpdate:`更新`,typeDelete:`削除`,typeComment:`コメント`,relativeJustNow:`たった今`,relativeSecondsAgo:`{{count}}秒前`,relativeMinutesAgo:`{{count}}分前`,relativeHoursAgo:`{{count}}時間前`,relativeDaysAgo:`{{count}}日前`,viewAll:`すべての活動を表示`},metadata:{label:`メタデータ`,toggleTitle:`メタデータインスペクターを切り替え`,panelTitle:`メタデータインスペクター`,jsonBadge:`JSON`,copyJson:`JSONをコピー`}},search:{title:`検索`,back:`戻る`,placeholder:`オブジェクト、ダッシュボード、ページ、レポートを検索…`,inputAriaLabel:`オブジェクト、ダッシュボード、ページ、レポートを検索`,resultsCount:`"{{query}}" の結果 {{count}} 件`,resultsCountPlural:`"{{query}}" の結果 {{count}} 件`,itemsAvailable:`{{count}} 件利用可能`,noResults:`結果が見つかりません`,noResultsHint:`検索語句を調整してみてください`,typeObjects:`オブジェクト`,typeDashboards:`ダッシュボード`,typePages:`ページ`,typeReports:`レポート`,badgeObject:`オブジェクト`,badgeDashboard:`ダッシュボード`,badgePage:`ページ`,badgeReport:`レポート`},empty:{objectNotFound:`オブジェクトが見つかりません`,objectNotFoundDescription:`オブジェクト「{{name}}」の定義が見つかりません。設定を確認するか、有効なオブジェクトを選択してください。`,interfacePageSourceMissing:`このインターフェースページは「{{name}}」を参照していますが、利用できません。`,pageNotFound:`ページが見つかりません`,pageNotFoundDescription:`ページ「{{name}}」が見つかりません。削除または名前変更された可能性があります。`,dashboardNotFound:`ダッシュボードが見つかりません`,dashboardNotFoundDescription:`ダッシュボード「{{name}}」が見つかりません。削除または名前変更された可能性があります。`,reportNotFound:`レポートが見つかりません`,reportNotFoundDescription:`レポート「{{name}}」が見つかりません。削除または名前変更された可能性があります。`,noAppsConfigured:`アプリが設定されていません`,noAppsConfiguredDescription:`登録されているアプリケーションがありません。最初のアプリを作成するか、システム設定を参照してください。`,appNotAvailable:`アプリを利用できません`,appNotAvailableDescription:`このアプリはまだ利用できません — まだ公開処理中の可能性があります。しばらくしてからもう一度お試しください。`,appAccessDenied:`このアプリへのアクセス権限がありません`,appAccessDeniedDescription:`このアプリは存在しますが、お使いのアカウントには開く権限がありません。管理者にアクセス権の付与を依頼してください。`,appAccessDeniedHome:`ホームに戻る`,createFirstApp:`最初のアプリを作成`,systemSettings:`システム設定`,back:`戻る`,recordNotFound:`レコードが見つかりません`,recordNotFoundDescription:`お探しのレコードは存在しないか、削除された可能性があります。`},renderer:{noPageSchema:`ページスキーマが指定されていません`,noFormSchema:`フォームスキーマが指定されていません`,noDashboardSchema:`ダッシュボードスキーマが指定されていません`,pageRendering:`ページレンダリング中:{{name}}`,dashboardRendering:`ダッシュボードレンダリング中:{{name}}`,formRenderingMode:`{{mode}} モードでフォームをレンダリング中`,formRenderingFor:`レコード {{id}} 用`,createRecord:`レコードを作成`,editRecord:`レコードを編集`,page:`ページ`,dashboard:`ダッシュボード`,save:`保存`,cancel:`キャンセル`},actionDialog:{title:`アクションパラメーター`,description:`続行するために必要な情報を入力してください。`,selectPlaceholder:`{{label}} を選択`,requiredError:`{{label}} は必須です`,cancel:`キャンセル`,confirm:`確認`,uploading:`アップロード中…`,defaultActionTitle:`アクション`,ok:`OK`,lookupPlaceholder:`{{label}} のレコードID`,lookupHelpText:`このパラメータには参照オブジェクトが設定されていないため、レコードピッカーを利用できません。レコードIDを直接入力するか、管理者にアクションパラメータの修正を依頼してください。`},actionConfirm:{title:`操作の確認`,confirm:`続行`,cancel:`キャンセル`},rowAction:{openMenu:`メニューを開く`,edit:`編集`,delete:`削除`},navigationSync:{addedPage:`ナビゲーション更新:ページ「{{name}}」を追加しました`,addedDashboard:`ナビゲーション更新:ダッシュボード「{{name}}」を追加しました`,removedPage:`ナビゲーション更新:ページ「{{name}}」を削除しました`,removedDashboard:`ナビゲーション更新:ダッシュボード「{{name}}」を削除しました`,renamedPage:`ナビゲーション更新:ページ「{{oldName}}」を「{{newName}}」に名前変更しました`,renamedDashboard:`ナビゲーション更新:ダッシュボード「{{oldName}}」を「{{newName}}」に名前変更しました`,undoLabel:`元に戻す`,undone:`ナビゲーションの変更を元に戻しました`,undoFailed:`ナビゲーションの変更を元に戻せませんでした`,updateFailed:`ナビゲーションの更新に失敗しました`},objectActions:{resetPackageSetConfirm:`この権限セットはインストール済みパッケージに含まれているため削除できません。削除を実行すると、パッケージ同梱の初期状態に戻り、この環境でのカスタマイズは破棄されます。続行しますか?`,resetPackageSetSuccess:`権限セットをパッケージ同梱の初期状態に戻しました`,deleteSuccess:`{{label}} を削除しました`,deleteFailed:`{{label}} の削除に失敗しました`,noRecordId:`レコードIDが指定されていません`,deleteConfirm:`このレコードを削除してもよろしいですか?`,bulkDeleteSuccess:`{{count}} 件の {{label}} レコードを削除しました`,bulkDeletePartial:`{{succeeded}} 件削除、{{failed}} 件失敗`},objectViewActions:{renameFailed:`ビューの名前変更に失敗しました`,deleteFailed:`ビューの削除に失敗しました`},dashboardActions:{printDialogOpening:`ブラウザーの印刷ダイアログを開いています(PDF エクスポートではありません)`,exportFailed:`エクスポートに失敗しました:{{message}}`,forecastSoon:`予測ビューは近日公開予定`},recordDetail:{viewersTooltip:`このレコードを閲覧中のユーザー`},cellRender:{empty:`空`,yes:`はい`,no:`いいえ`,systemFields:`システム`},user:{profile:`プロフィール`,settings:`設定`,logout:`ログアウト`,preferences:`設定`,theme:`テーマ`,language:`言語`},report:{total:`合計`,rowTotal:`行合計`,columnTotal:`列合計`,grandTotal:`総合計`,totals:`合計`,rowsLabel:`行`,columnsLabel:`列`,allLabel:`(すべて)`,emptyLabel:`(空)`,loading:`読み込み中…`,failedToLoad:`マトリックスの読み込みに失敗しました:{{message}}`,needsAcross:"マトリックスレポートには少なくとも1つの `groupingsAcross` フィールドが必要です。",aggregate:{count:`件数`,countDistinct:`ユニーク件数`,sum:`合計`,avg:`平均`,min:`最小`,max:`最大`,first:`最初`},editor:{panelTitle:`レポートを編集`}},organizations:{create:`ワークスペースを作成`,mine:`マイ組織`,title:`組織`,heading:`あなたの組織`,subtitle:`続行する組織を選択するか、新しい組織を作成してください。`,searchPlaceholder:`組織を検索`,new:`新しい組織`,current:`現在の組織`,manage:`管理`,emptyTitle:`まだ組織がありません`,emptyDescription:`最初の組織を作成して開始してください。`,noMatches:`検索条件に一致する組織がありません。`},organization:{roles:{owner:`オーナー`,admin:`管理者`,delegatedAdmin:`委任管理者`,member:`メンバー`},errors:{notAllowedToInvite:`この組織にユーザーを招待する権限がありません。`,notAllowedToInviteWithRole:`このロールでユーザーを招待する権限がありません。`,alreadyInvited:`このユーザーはすでにこの組織に招待されています。`,organizationExists:`その組織はすでに存在します。`,slugTaken:`そのスラッグはすでに使用されています。`,notAllowedToCreate:`新しい組織を作成する権限がありません。`,notTheRecipient:`この招待の宛先はあなたではありません。`,invitationNotFound:`この招待は存在しないか、有効期限が切れています。`,unknown:`問題が発生しました。もう一度お試しください。`},backToList:`組織一覧に戻る`,notFound:`組織が見つかりません`,notFoundDescription:`この組織は存在しないか、アクセス権がありません。`,tabs:{members:`メンバー`,invitations:`招待`,settings:`設定`},members:{title:`メンバー`,inviteMember:`メンバーを招待`,inviteRestrictedNote:`組織の管理者のみがメンバーを招待できます。`,removeMember:`メンバーを削除`,removeConfirmTitle:`メンバーを削除しますか?`,removeConfirmDescription:`{{name}} を組織から削除します。アクセス権は直ちに失われます。`,removeConfirmAction:`削除`,memberRemoved:`メンバーを削除しました`,removeFailed:`メンバーの削除に失敗しました`,roleUpdated:`ロールを更新しました`,roleUpdateFailed:`ロールの更新に失敗しました`,memberActions:`メンバーの操作`,loadFailed:`メンバーの読み込みに失敗しました`},invitations:{title:`招待`,empty:`招待はありません。`,expiresAt:`有効期限`,linkCopied:`招待リンクをコピーしました`,copyFailed:`リンクのコピーに失敗しました`,canceled:`招待を取り消しました`,cancelFailed:`招待の取り消しに失敗しました`,cancelTitle:`招待を取り消しますか?`,cancelDescription:`{{email}} 宛ての招待が無効になります。`,cancelAction:`招待を取り消す`,inviteTitle:`メンバーを招待`,inviteDescription:`この組織への招待が相手に送信されます。`,emailLabel:`メールアドレス`,roleLabel:`ロール`,placementLabel:`配属(任意)`,placementDescription:`招待が承諾されたときに適用されます。委任できる事業単位と役職のみが表示されます。`,businessUnitLabel:`事業単位`,businessUnitPlaceholder:`配属なし`,positionsLabel:`役職`,sendInvite:`招待を送信`,sentTitle:`招待を作成しました`,sentDescription:`以下のリンクを招待相手に共有してください。承諾にはサインインが必要です。`,linkLabel:`承諾リンク`,invitedAs:`{{email}} を {{role}} として招待しました`,copyLinkLabel:`招待リンクをコピー`,loadFailed:`招待の読み込みに失敗しました`,inviteFailed:`メンバーの招待に失敗しました`,status:{all:`すべて`,pending:`待機中`,accepted:`承諾済み`,rejected:`辞退済み`,canceled:`取消済み`}},settings:{generalTitle:`一般`,generalDescription:`組織の情報を更新します。`,readOnlyNote:`設定を変更できるのはオーナーのみです。`,nameLabel:`組織名`,slugLabel:`スラッグ`,logoLabel:`ロゴ`,logoUpload:`アップロード`,logoReplace:`変更`,logoClear:`削除`,logoUploaded:`ロゴをアップロードしました。保存すると反映されます`,logoUploadFailed:`ロゴのアップロードに失敗しました`,save:`変更を保存`,saved:`設定を保存しました`,saveFailed:`設定の保存に失敗しました`,leaveTitle:`組織から脱退`,leaveDescription:`この組織へのアクセス権を失います。`,leaveAction:`脱退`,leaveConfirmTitle:`組織から脱退しますか?`,leaveConfirmDescription:`{{name}} から脱退してもよろしいですか?アクセス権は直ちに失われます。`,leaveConfirmAction:`脱退`,leftOrg:`組織から脱退しました`,leaveFailed:`組織からの脱退に失敗しました`,dangerZone:`危険な操作`,deleteTitle:`組織を削除`,deleteDescription:`この組織とすべてのデータを完全に削除します。`,deleteAction:`削除`,deleteConfirmTitle:`組織を削除しますか?`,deleteConfirmDescription:`この操作は取り消せません。すべてのデータが完全に削除されます。確認のため組織のスラッグを入力してください。`,deleteConfirmSlugLabel:`確認のため「{{slug}}」と入力してください`,deleteConfirmAction:`組織を削除`,deleted:`組織を削除しました`,deleteFailed:`組織の削除に失敗しました`},accept:{title:`招待が届いています`,description:`{{orgName}} に {{role}} として招待されています。`,errorTitle:`招待を利用できません`,goToOrgs:`組織一覧へ`,loading:`招待を読み込んでいます…`,organization:`組織`,role:`ロール`,expiresAt:`有効期限`,accept:`招待を承諾`,accepted:`招待を承諾しました`,acceptFailed:`招待の承諾に失敗しました`,decline:`辞退`,declined:`招待を辞退しました`,declineFailed:`招待の辞退に失敗しました`},switcher:{label:`組織を切り替え`,groupLabel:`作業中の組織`,groupHint:`新しいレコードはここに作成されます。ビューにはすべての組織のデータが表示されます。`,manageMembers:`メンバーを管理`}},notifications:{regionLabel:`通知`,groupCount:`通知 {{count}} 件`,groupUnread:`未読 {{count}} 件`,groupMarkRead:`既読にする`,groupMarkReadTitle:`この種類をすべて既読にする`,empty:`通知はありません`,markAllRead:`すべて既読にする`,viewAll:`すべての通知を表示`,approvalsPending:`{{count}} 件の承認待ち`,viewApprovals:`承認を表示`,noPendingApprovals:`承認待ちはありません`,openApprovalsInbox:`承認ボックスを開く`,badgeTotal:`合計 {{total}} 件`,badgeNotifications:`通知 {{unread}} 件`,badgeApprovals:`承認待ち {{approvals}} 件`,emptyUnread:`既読にしました`,filterUnread:`未読`,filterAll:`すべて`},publicForm:{submit:`送信`,submitting:`送信中…`,submitAnother:`別の回答を送信`,poweredBy:`Powered by ObjectStack`,secureNotice:`お客様の情報は安全に転送され、リクエストへの対応にのみ使用されます。`,thankYouTitle:`ありがとうございます!`,thankYouMessage:`送信が正常に受信されました。`,redirecting:`{{seconds}} 秒後にリダイレクトします…`,unavailableTitle:`フォームが利用できません`,unavailableDescription:`このURLで利用できる公開フォームはありません。基になるビューが匿名共有を有効にし、このスラグに一致することを確認してください。`,tryDemo:`デモを試す`,retry:`再試行`,loading:`フォームを読み込み中…`,requiredHint:`* 必須項目`,consentLabelDefault:`プライバシーポリシーに同意し、このリクエストのためにデータを処理することに同意します。`,consentLink:`プライバシーポリシー`,consentRequired:`続行するにはプライバシーポリシーに同意してください。`,rateLimited:`送信前に回答を確認してください。`,redirectBlocked:`送信は受理されましたが、リダイレクトURLはセキュリティのためブロックされました。`,demo:{contactTitle:`お問い合わせ`,contactDescription:`プロジェクトについてお聞かせください。1営業日以内に営業担当者がご連絡します。`,supportTitle:`サポートリクエストを送信`,supportDescription:`問題をお知らせください。チームが1営業日以内に対応します。`,thankYouSalesTitle:`メッセージを受信しました!ありがとうございます。`,thankYouSalesMessage:`1営業日以内に営業担当者がご連絡します。`,thankYouSupportTitle:`リクエストを受け付けました。`,thankYouSupportMessage:`サポートエンジニアがまもなくフォローアップします。追加のスクリーンショットがある場合は、このページを保存してください。`,field:{firstName:`名`,lastName:`姓`,email:`仕事用メール`,phone:`電話番号`,jobTitle:`役職`,company:`会社`,website:`ウェブサイト`,industry:`業界`,companySize:`会社規模`,howCanWeHelp:`どのようなお手伝いができますか?`,subject:`件名`,description:`説明`,issueType:`問題の種類`,priority:`優先度`},industry:{technology:`テクノロジー`,software:`ソフトウェア / SaaS`,finance:`金融`,healthcare:`ヘルスケア`,retail:`小売`,other:`その他`},issueType:{question:`質問`,problem:`問題`,bug:`バグ`,feature_request:`機能リクエスト`},priority:{low:`低`,medium:`中`,high:`高`,critical:`緊急`}}},connectAgent:{disabled:{title:`このデプロイメントでは MCP が無効です`,body:`MCP サーフェスがオフになっています(OS_MCP_SERVER_ENABLED=false)。運用担当者に再有効化を依頼してください。`},url:{title:`この環境の MCP エンドポイント`,body:`MCP 対応の AI クライアントはこの URL で接続します。認証はセルフサービスです:デプロイメント自体が OAuth 2.1 認可サーバーなので、ブラウザでログインするだけ。すべての呼び出しはあなたの権限と行レベルセキュリティの下で実行されます。`,downloadSkill:`SKILL.md をダウンロード`,skillHint:`ポータブルなエージェントスキル:スキル対応エージェントにこの環境の使い方を教えます。`},claude:{body:`設定 → コネクタ → カスタムコネクタを追加で、この URL を貼り付け、ブラウザでログインしてください。`,reachability:`claude.ai(Web)は Anthropic のサーバーから接続するため、デプロイメントはパブリック HTTPS で到達可能である必要があります。Claude Desktop などのローカルクライアントはイントラネット環境にも接続できます。`},claudeCode:{body:`コマンド一つ — 初回利用時に OAuth ログインが自動で開きます:`,plugin:`または公式プラグインをインストール(ObjectStack スキルとガイド付き /objectstack:connect コマンドを追加):`},cursor:{addButton:`Cursor に追加`,body:`ワンクリックボタンを使うか、以下を .cursor/mcp.json に追加してください:`},vscode:{body:`.vscode/mcp.json に追加(または MCP: Add Server コマンドで):`},codex:{body:`~/.codex/config.toml に追加してください。Codex が OAuth フロー未対応の場合は API キーのヘッダーをご利用ください(下記参照):`},apiKey:{title:`API キー`,badge:`ヘッドレス`,body:`CI・スクリプト・ブラウザのないエージェント向け。キーはあなたとして動作します — パスワードと同様に扱ってください。表示は一度きりです。`,namePlaceholder:`キー名(例:ci-agent)`,mint:`キーを作成`,minting:`作成中…`,showOnce:`キー「{{name}}」を作成しました — 今すぐコピーしてください。再表示されません:`,done:`完了 — 非表示にする`}},excelImport:{noImportableFields:`そのオブジェクトにはインポート可能なフィールドがありません。`,schemaReadFailed:`オブジェクトのスキーマを読み取れませんでした。`,imported:`{{count}} 行を {{object}} にインポートしました。`,importFrom:`実データのインポート元`,into:`→`,opening:`開いています…`,importAction:`インポート`,dismiss:`閉じる`},cloudOnboarding:{hintCreate:`最初の環境を作成しましょう。独自の URL・データベース・プランを持つ専用ワークスペースで、アプリの構築はその中で行います。`,hintReady:`本番環境の準備が整いました。開いてアプリの構築と実行を行ってください。すべて環境の中で行われます。`,createEnvironment:`環境を作成`,openProduction:`本番環境を開く`,manageEnvironments:`環境を管理`},aiModelStatus:{summary:`ビルド / 質問は {{conversational}}({{conversationalSource}})、構造化出力は {{structured}}({{structuredSource}})を使用します。`,summaryRouting:`ルーティングポリシー: 無料プラン → {{free}}、有料プラン → {{paid}}。`,modelUnknown:`不明`,sourceUnknown:`アダプターから報告なし`,rowConversational:`Build / Ask モデル`,rowStructured:`構造化(ブループリント / シード)`,rowReasoning:`推論の強度`,readFailed:`有効な AI モデルを読み取れませんでした。この環境は AI サービスを実行していないか、ai:read 権限がない可能性があります。`,readFailedWithStatus:`有効な AI モデルを読み取れませんでした(HTTP {{status}})。この環境は AI サービスを実行していないか、ai:read 権限がない可能性があります。`,overridesInEffect:`有効なオーバーライド: `,noOverrides:`なし — デプロイ済みコードの既定値で動作しています。`,adapter:`アダプター: `,sourceCodeDefault:`コード既定値(env オーバーライドなし)`,sourceInherits:`build/ask と同じ`,sourcePinned:`{{source}} で固定`},chatbotError:{title:`応答に失敗しました`,fallbackDetail:`問題が発生しました。もう一度お試しください。`,details:`詳細`,hide:`非表示`,retry:`再試行`},chatbotQuota:{title:`アップグレードが必要です`,fallbackMessage:`AI の利用上限に達しました。`,buyCredits:`クレジットパックを購入`,upgradePlan:`プランをアップグレード`},environment:{addEnvironment:`環境を追加`,setUpProduction:`本番環境をセットアップ`,addDevelopment:`開発環境を追加`,entitlement:{productionLimitTitle:`本番環境はすでに作成済みです`,productionLimitBody:`各組織に含まれる本番環境は 1 つだけです。もう 1 つ必要な場合は別の組織を作成するか、エンタープライズ契約についてお問い合わせください。`,planLockedTitle:`開発環境は有料機能です`,planLockedBody:`{{plan}}には本番環境が 1 つ含まれます。アップグレードすると開発環境を追加できます(開発環境で構築し、本番環境に公開します)。`,limitTitle:`開発環境の上限に達しました`,limitBody:`上限は AI シート数に応じて増えます。AI シートを追加するか、使用していない開発環境をアーカイブして空きを作ってください。`,limitBodyWithCount:`開発環境を {{used}}/{{limit}} 使用中です。上限は AI シート数に応じて増えます。AI シートを追加するか、使用していない開発環境をアーカイブしてください。`,freePlan:`無料プラン`,namedPlan:`{{plan}} プラン`,upgradeCta:`プランをアップグレード`,contactSalesCta:`営業に問い合わせる`}},cloudConnection:{checking:`接続を確認しています…`,retry:`再試行`,errors:{expired:`承認される前にリクエストの有効期限が切れました。もう一度やり直してください。`,bindFailed:`バインドに失敗しました。`,deviceCodeFailed:`デバイスコードのリクエストに失敗しました。`},waiting:{popupOpened:`今開いたウィンドウで接続を承認してください。このページは自動的に更新されます。`,polling:`クラウドコンソールでの承認を待っています…`,openApproval:`承認ページを開く`,copy:`コピー`,copied:`コピーしました`,codePrefilled:`承認ページにはコードが自動入力されています。`,openItHere:`ウィンドウが表示されませんか? こちらから開く`,cancel:`キャンセル`},bound:{title:`ObjectStack Cloud に接続済み`,runtime:`ランタイム`,organization:`組織`,approvedBy:`承認者`,runtimeId:`ランタイム ID`,environment:`環境`,since:`接続日時`,privatePackages:`組織のプライベートパッケージが、マーケットプレイスの「自分の組織」に表示されるようになりました。`,disconnect:`接続を解除`},unbound:{title:`未接続`,body:`このランタイムを ObjectStack コントロールプレーンに接続すると、組織のプライベートパッケージを閲覧してここにインストールできます。承認はクラウドアカウントでワンクリック。ID や認証情報をこのページに入力する必要はありません。`,connect:`接続`}},marketplace:{suggestedBindings:{promptEveryone:`このアプリは、サインイン済みの全ユーザー(Everyone ポジション)に「{{set}}」を付与することを推奨しています。`,promptGuest:`このアプリは、未認証の訪問者(Guest ポジション)に「{{set}}」を付与することを推奨しています。`,confirm:`付与`,confirming:`付与しています…`,dismiss:`閉じる`,confirmedToast:`「{{set}}」を {{anchor}} に付与しました。`,dismissedToast:`「{{set}}」の提案を閉じました。`},title:`アプリマーケットプレイス`,subtitle:`ObjectStackカタログに公開された承認済みアプリを参照します。アプリをクリックして詳細を表示し、環境にインストールしてください。`,searchPlaceholder:`名前またはマニフェストIDでアプリを検索…`,searchAria:`マーケットプレイスアプリを検索`,installed:`インストール済み`,installedCount:`インストール済み({{count}})`,refresh:`更新`,all:`すべて`,noApprovedYet:`マーケットプレイスにはまだ承認されたアプリがありません。`,noMatchFilters:`フィルターに一致するアプリがありません。`,noDescription:`説明がありません。`,back:`マーケットプレイスに戻る`,installedTitle:`インストール済みアプリ`,installedSubtitle:`このランタイムのカーネルにインストールされているマーケットプレイスパッケージ。`,installedEmpty:`このランタイムにはまだマーケットプレイスアプリがインストールされていません。`,browseLink:`マーケットプレイスを参照 →`,installedAdditiveNote:`<strong>注意:</strong>カーネルAPIは追加のみです。アンインストールするとディスク上のマニフェストが削除され、次回起動時にパッケージは読み込まれませんが、実行中のカーネルはランタイムを再起動するまでアプリを登録したままにします。`,installedAt:`{{when}} にインストール`,installedBy:`{{user}} による`,installedPackageId:`パッケージ`,cachedAs:`<code>{{path}}</code> としてキャッシュ`,versionBadge:`v{{version}}`,installedBadge:`インストール済み v{{version}}`,load:{failed:`マーケットプレイスの読み込みに失敗しました`,failedHint:`このランタイムはデフォルトでパブリックObjectStackクラウドを指しています。ランタイムがオンラインであることを確認するか、<code>OS_CLOUD_URL</code> で自己ホスト型コントロールプレーンを指定してください。`,packageFailed:`パッケージの読み込みに失敗しました`,notFound:`見つかりません。`},detail:{homepage:`ホームページ`,installedV:`インストール済み · v{{version}}`,about:`概要`,noReadme:`READMEがありません。`,versions:`バージョン`,noApprovedVersions:`承認済みバージョンがありません。`,prerelease:`プレ`,moreOptions:`その他のインストールオプション`,uninstallFromRuntime:`このランタイムからアンインストール`,addSampleData:`サンプルデータを追加`,reseedAgain:`サンプルデータを再投入`,purgeSampleData:`サンプルデータを削除`,purgeConfirm:`このパッケージが投入したサンプルレコードをすべて削除しますか?ユーザーが追加したレコードは削除されません。`,purgeSuccess:`{{count}} 件のサンプルレコードを削除しました。`,purgeNoData:`削除するサンプルレコードがありません。`,reseedQueued:`サンプルデータは次回の環境アクセス時に再投入されます。`,reseedLocalSuccess:`サンプルデータを再投入しました:{{inserted}} 件追加、{{updated}} 件更新。`,reseedPartialErrors:`({{count}} 件のレコードの書き込みに失敗しました)`,updateAvailable:`アップデートあり`},action:{installed:`インストール済み`,install:`インストール`,reinstall:`再インストール`,working:`処理中…`,installToCloud:`クラウドにインストール…`,installing:`インストール中…`,uninstall:`アンインストール`,uninstalling:`アンインストール中…`,details:`詳細`,close:`閉じる`,dismiss:`閉じる`,openOnCloud:`クラウドで開く`,backHome:`ホームに戻る`,updateTo:`更新`},install:{dialogTitle:`{{name}} をインストール`,dialogDescCurrent:`この環境({{host}})にインストールします。`,dialogDescPicker:`このアプリをインストールする環境を選択します。ObjectStack Cloudにサインインする必要があります。`,environment:`環境`,environmentPlaceholder:`環境を選択`,includeSampleData:`サンプルデータを含む`,noEnvs:`アクティブな組織に環境が見つかりません。`,noPermission:`どの環境にもアプリをインストールする権限がありません。組織のオーナーと管理者のみインストールできます。`,signInFirst:`最初にObjectStack Cloudにサインインしてください。`,success:`インストールが完了しました。環境を開いて新しいアプリを確認してください。`,localSuccess:`このランタイムに v{{version}} をインストールしました。「{{name}}」がアプリスイッチャーに表示されます。`,localManifestConflict:`{{message}}
|
|
12
|
-
ヒント:ローカルアプリがすでにこのmanifest_idを使用しています。最初にobjectstack.config.tsから削除してください。`,localUnauthorized:`最初にこのランタイムにサインインしてから再試行してください。`,localMarketplaceUnavailable:`このランタイムにはOS_CLOUD_URLが設定されていないため、マーケットプレイスカタログにアクセスできません。`,updateTo:`更新 → v{{version}}`,installedVersion:`インストール済み v{{version}}`},org:{heading:`組織`,install:`インストール`,installed:`{{name}} をインストールしました`,installedBadge:`インストール済み`,installing:`インストール中…`},disclosure:{containsCode:`このパッケージにはコードが含まれています`,reviewed:`審査・承認済み`,unreviewed:`未審査`,signed:`署名済み`,grantsIntro:`インストール時に、このパッケージには次の権限が付与されます:`,services:`プラットフォームサービス`,hooks:`ライフサイクルフック`,network:`ネットワークアクセス`,fs:`ファイルシステムアクセス`,noPermissions:`特別な権限は要求しません。`,acknowledge:`このパッケージがコードを実行し、上記の権限を取得することを理解しました。`,runtime:{node:`プロセス内 · 完全信頼`,sandbox:`サンドボックス`,worker:`プロセス外`}},uninstall:{confirm:`このランタイムから {{manifestId}} v{{version}} をアンインストールしますか?
|
|
13
|
-
|
|
14
|
-
キャッシュされたマニフェストが削除されます。アプリは次の再起動まで実行中のカーネルに読み込まれたままになります。`,successInList:`{{manifestId}} を削除しました。ランタイムを再起動して実行中のカーネルから完全にアンロードしてください。`,successInDetail:`{{manifestId}} のキャッシュされたマニフェストを削除しました。ランタイムを再起動してアプリを完全にアンロードしてください。`},accessDenied:{title:`アプリマーケットプレイスは管理者専用です`,description:`この環境にアプリをインストールする権限がありません。アクセスのために組織のオーナーまたは管理者に連絡してください。`},category:{crm:`CRM`,erp:`ERP`,hr:`人事`,finance:`財務`,project:`プロジェクト管理`,collaboration:`コラボレーション`,analytics:`分析`,integration:`統合`,automation:`自動化`,ai:`AI`,security:`セキュリティ`,"developer-tools":`開発者ツール`,"ui-theme":`UIテーマ`,storage:`ストレージ`,other:`その他`},pricing:{free:`無料`,freemium:`フリーミアム`,paid:`有料`,subscription:`サブスクリプション`,"usage-based":`使用量ベース`,"contact-sales":`営業に問い合わせ`},relativeTime:{today:`今日`,daysAgo:`{{count}}日前`,monthsAgo:`{{count}}ヶ月前`,yearsAgo:`{{count}}年前`}},approvals:{approve:`承認`,reject:`却下`,comment:`コメント(任意)`,approveSuccess:`承認しました`,rejectSuccess:`却下しました`,rejectConfirm:`この承認リクエストを却下しますか?`},approvalsInbox:{loadMore:`さらに読み込む`,loadingMore:`読み込み中…`,loadedOf:`{{total}} 件中 {{loaded}} 件を表示`,actEscalate:`SLAエスカレーション`,systemSlaActor:`システム(SLA)`,reassignBtn:`引き継ぎ`,reassignTitle:`この承認を他の人に引き継ぎますか?`,reassignBody:`あなたの承認枠は選択した相手に移ります。相手に通知され、すぐに対応できます。`,reassignTo:`新しい承認者`,reassignToPlaceholder:`ユーザーを選択、またはメール / role:<名前> を入力`,reassignSuccess:`{{to}} に引き継ぎました`,requestInfoBtn:`差し戻し`,requestInfoTitle:`申請者に追加情報を求めますか?`,requestInfoBody:`リクエストは承認待ちのまま。申請者に通知され、スレッドで返信できます。`,requestInfoPlaceholder:`申請者に何を求めますか?`,requestInfoSent:`追加情報を求めて差し戻しました`,remindBtn:`リマインド`,remindSuccess:`{{count}} 名の承認者に通知しました`,remindThrottled:`リマインドは送信済みです。しばらくしてからお試しください。`,replyPlaceholder:`このリクエストに返信…`,slaRemaining:`SLA 残り {{dur}}`,slaOverdue:`SLA 超過 {{dur}}`,actReassign:`引き継ぎ`,reassignFromTo:`{{from}} から {{to}} へ`,actRemind:`リマインド`,actRequestInfo:`追加情報を要求`,actComment:`コメント`,stepProgress:`承認ステップ`,prevRequest:`前へ`,nextRequest:`次へ`,positionOf:`リクエスト {{index}} / {{total}} 件`,progressApprovals:`承認 — {{got}} / {{need}}`,progressGroups:`グループ承認 — {{got}} / {{need}} グループ`,progressEligible:`承認可能者 {{count}} 名`,progressBar:`承認の進捗`,declaredActions:`アクション`,attachmentChip:`添付ファイル`,attachmentOpenFailed:`添付ファイルを開けませんでした。もう一度お試しください`,approveOneTitle:`「{{title}}」を承認しますか?`,approveOneBody:`あなたの名義でこのリクエストを承認します。コメントや添付を付ける場合は、リクエストを開いて操作してください。`,flowOrigin:`フロー起動`,sortBy:`並び替え`,sortRecent:`新しい順`,sortOldest:`古い順`,sortAmount:`金額(高い順)`,quickPhrase1:`承認します。要件を満たしています。`,quickPhrase2:`条件付きで承認します。実行状況にご注意ください。`,quickPhrase3:`資料を追加のうえ再提出してください。`,title:`承認センター`,subtitle:`承認リクエストを確認して処理します。`,refresh:`更新`,tabMyPending:`自分の承認待ち`,tabSubmitted:`自分が申請`,tabAll:`すべて`,searchPlaceholder:`レコード、プロセス、申請者を検索…`,clearSearch:`検索をクリア`,statusFilter:`ステータス`,allStatuses:`すべてのステータス`,processFilter:`プロセス`,allProcesses:`すべてのプロセス`,objectFilter:`オブジェクト`,allObjects:`すべてのオブジェクト`,filterCount:`{{shown}} / {{total}} 件`,selected:`選択中`,actionableCount:`({{count}} 件操作可能)`,selectAll:`すべて選択`,selectRow:`このリクエストを選択`,colRequest:`承認事項`,colRecord:`レコード`,colRequester:`申請者`,colStatus:`ステータス`,colWaiting:`申請日時`,colActions:`操作`,statusPending:`承認待ち`,statusApproved:`承認済み`,statusRejected:`却下`,statusRecalled:`取り下げ`,statusReturned:`差し戻し`,sendBackBtn:`差し戻す`,sendBackTitle:`このリクエストを差し戻しますか?`,sendBackBody:`このラウンドは終了し、レコードのロックが解除され、申請者がデータを修正できます。再提出されると、全承認者に新しい承認ラウンドが開始されます。`,sendBackPlaceholder:`承認するには何を修正する必要がありますか?`,sendBackSuccess:`差し戻しました——申請者は編集して再提出できます`,sendBackAutoRejected:`差し戻し回数の上限に達したため、リクエストは自動的に却下されました`,actRevise:`差し戻し`,actResubmit:`再提出`,roundChip:`第{{n}}ラウンド`,returnedHint:`承認者がこのリクエストを差し戻しました。レコードのロックは解除されています。データを修正して再提出すると、新しい承認ラウンドが開始されます。`,resubmitBtn:`再提出`,resubmitting:`再提出中…`,resubmitSuccess:`再提出しました——新しい承認ラウンドが開始されました`,resubmitPlaceholder:`何を変更しましたか?`,editRecordBtn:`レコードを編集`,abandonTitle:`この修正を中止しますか?`,abandonBody:`再提出せずにリクエストを取り下げます。承認はここで終了します。`,emptyTitle:`リクエストはありません`,emptyPending:`すべて処理済みです。あなたの承認待ちはありません。`,emptyOther:`まだ何もありません。`,emptyViewAll:`すべてのリクエストを見る`,noMatches:`現在のフィルターに一致するものはありません。`,keyboardHint:`ショートカット:j/k 移動 · Enter 開く · x 選択 · a 承認 · r 却下`,drawerTitle:`承認リクエスト`,submittedAgo:`{{when}}に申請`,completedAt:`{{when}}に完了`,waitingOn:`承認待ちの担当者`,history:`承認履歴`,noActions:`まだ操作はありません。`,actSubmit:`申請`,actApprove:`承認`,actReject:`却下`,actRecall:`取り下げ`,rawData:`生データ(JSON)`,copy:`コピー`,copied:`コピーしました`,copyFailed:`コピーに失敗しました`,overrideActor:`別のIDで操作(管理者)`,actor:`操作ID`,auto:`自動`,overrideHint:`例:role:sales_manager。空欄の場合は自動検出されたIDを使用します。`,comment:`コメント(任意)`,approve:`承認`,approving:`承認中…`,reject:`却下`,rejecting:`却下中…`,recall:`取り下げ`,recalling:`取り下げ中…`,cancel:`キャンセル`,clear:`クリア`,approveN:`{{count}} 件を承認`,rejectN:`{{count}} 件を却下`,bulkApproveTitle:`この {{count}} 件を承認しますか?`,bulkApproveBody:`各リクエストはあなたのIDで承認され、フローは承認ブランチに進みます。`,bulkRejectTitle:`この {{count}} 件を却下しますか?`,bulkRejectBody:`選択したリクエストを却下し、各申請者に通知します。`,bulkApproved:`{{count}} 件を承認しました`,bulkRejected:`{{count}} 件を却下しました`,bulkPartial:`{{ok}} 件成功、{{fail}} 件失敗:{{which}}`,rejectOneTitle:`「{{title}}」を却下しますか?`,rejectOneBody:`リクエストを却下し、申請者に通知します。`,rejectTitle:`このリクエストを却下しますか?`,rejectBody:`リクエストを却下済みにして、申請者に通知します。`,recallTitle:`このリクエストを取り下げますか?`,recallBody:`取り下げ後、承認者は処理できなくなり、レコードはロック解除されます。`,inlineApproved:`「{{title}}」を承認しました`,inlineRejected:`「{{title}}」を却下しました`,approvedFinal:`承認しました`,approvedWaiting:`承認しました——残りの承認者を待っています`,rejectedToast:`却下しました`,recalledToast:`リクエストを取り下げました`,whyDisabled:`指定された承認者のみが処理できます。現在の承認待ち:{{who}}。`,whyDisabledSubmitter:`あなたが申請したリクエストのため取り下げは可能ですが、承認・却下は指定された承認者のみ行えます。`,noActor:`操作IDを特定できません`,actionFailed:`操作に失敗しました`,loadFailed:`リクエストの読み込みに失敗しました`,recallUnavailable:`この環境では取り下げはサポートされていません。`,requestGone:`このリクエストは存在しません。一覧を更新してください。`,notAllowed:`この操作を行う権限がありません。`,alreadyDecided:`このリクエストは処理済みです。一覧を更新してください。`,justNow:`たった今`,minutesAgo:`{{count}} 分前`,hoursAgo:`{{count}} 時間前`,daysAgo:`{{count}} 日前`},preview:{empty:{loadFailedTitle:`ドラフトプレビューを読み込めませんでした`,loadFailedDescription:`ドラフトオーバーレイを読み取れませんでした。再試行するか、接続を確認してください。`,notReadyTitle:`「{{app}}」はまだドラフトにありません`,notReadyDescription:`ビルドが実行中か、このアプリがステージされる前に失敗した可能性があります。会話でビルド状況を確認してください — ドラフトが届くとこのペインは更新されます。`,nothingTitle:`プレビューするものはまだありません`,retry:`再試行`},draftBar:{messageClean:`ドラフトプレビュー — 未公開の変更はありません。ここに表示されている内容はすべて公開済みです。`,sampleDataTitle:`サンプルデータは公開後に表示されます`,sampleDataBody:`アプリの構造をプレビューしています。公開するとサンプルレコードが読み込まれ、アプリが有効になります。`,publishCta:`公開して確認する`,message:`ドラフトプレビュー — 未公開の変更を表示しています。公開するまで本番には反映されません。`,publish:`公開`,publishing:`公開中…`,exit:`プレビューを終了`,changes:`変更`},changes:{title:`保留中の変更`,description:`公開で何が変わるか。新規項目は追加され、更新は公開中のバージョンを上書きします。`,loading:`保留中の変更を読み込み中…`,loadFailed:`保留中の変更を読み込めませんでした:`,empty:`保留中の変更はありません — すべてのドラフトが公開済みです。`,kindNew:`新規`,kindUpdate:`更新`,detailLoading:`詳細を読み込み中…`,detailLoadFailed:`変更の詳細を読み込めませんでした:`,detailNone:`差分は検出されませんでした — ドラフトは公開版と一致しています。`,detailChangedKeys:`その他の変更:`,confirmNote:`公開すると、このパッケージの保留中ドラフト {{count}} 件がまとめて(アトミックに)公開されます。`,publishConfirm:`すべて公開`},unpublishedBar:{message:`未公開のアプリ — 機能はすべて使えますが、ビルダーにしか表示されません。公開するとユーザーに表示されます。`,publish:`公開`,publishing:`公開中…`,published:`公開しました。アプリがユーザーに表示されます。`,publishFailed:`公開に失敗しました`},history:{button:`履歴`,title:`ビルド履歴`,description:`このアプリのすべての変更を新しい順に表示します。任意のステップを取り消して元に戻せます — 公開の確認は不要です。`,loadFailed:`履歴を読み込めませんでした:`,loadFailedUnavailable:`コミットストアに一時的に接続できません — この読み取りは実行されなかったため、履歴は表示されません。しばらくしてから再試行してください。`,loading:`履歴を読み込み中…`,empty:`このアプリの履歴はまだありません。`,revertLabel:`変更を取り消しました`,applyLabel:`ビルドによる変更`,revert:`取り消し`,items:`件`,revertAction:`取り消す`,reverted:`取り消しました — 変更を元に戻しました。`,revertFailed:`取り消しに失敗しました`,revertUnavailable:`コミットストアに一時的に接続できません — この取り消しは適用されていない可能性があります。履歴を開き直して確認してから再試行してください。`}},filterBuilder:{where:`条件`,and:`かつ`,or:`または`,clearAll:`すべてクリア`,selectField:`フィールドを選択`,operator:`演算子`,selectValue:`値を選択`,value:`値`,addFilter:`フィルターを追加`,removeCondition:`条件を削除`,trueLabel:`はい`,falseLabel:`いいえ`,noResults:`結果なし`,searchField:`{{label}}を検索…`,enterId:`{{label}} IDを入力`,operators:{equals:`等しい`,notEquals:`等しくない`,contains:`含む`,notContains:`含まない`,isEmpty:`空である`,isNotEmpty:`空でない`,greaterThan:`より大きい`,lessThan:`より小さい`,greaterOrEqual:`以上`,lessOrEqual:`以下`,before:`より前`,after:`より後`,between:`範囲内`,in:`いずれか`,notIn:`いずれでもない`}},sortBuilder:{sortBy:`並べ替え`,thenBy:`次に`,selectField:`フィールドを選択`,ascending:`A → Z`,descending:`Z → A`,addSort:`並べ替えを追加`,removeSort:`並べ替えを削除`},collaboration:{commentCount:`コメント {{count}} 件`,commentCountOne:`コメント {{count}} 件`,resolvedSuffix:` · 解決済み`,sortComments:`コメントの並べ替え`,sortOldest:`古い順`,sortNewest:`新しい順`,resolve:`解決済みにする`,reopen:`再オープン`,justNow:`たった今`,minutesAgo:`{{count}} 分前`,hoursAgo:`{{count}} 時間前`,daysAgo:`{{count}} 日前`,edited:`(編集済み)`,reactionCount:`リアクション {{count}} 件`,reactionCountOne:`リアクション {{count}} 件`,addThumbsUp:`いいねを追加`,reply:`返信`,reactThumbsUp:`いいねでリアクション`,reactHeart:`ハートでリアクション`,cancelReply:`返信をキャンセル`,replyingTo:`{{name}} に返信中…`,replyingToComment:`このコメントに返信中…`,commentPlaceholder:`コメントを追加…(@ でメンション)`,send:`送信`,presentUserCount:`オンライン {{count}} 人`,presentUserCountOne:`オンライン {{count}} 人`,moreUserCount:`他 {{count}} 人`,moreUserCountOne:`他 {{count}} 人`,userStatusTitle:`{{name}}({{status}})`,statusActive:`アクティブ`,statusIdle:`アイドル`,statusAway:`離席中`},wizard:{missingRequired:`必須項目を入力してください: {{fields}}`},appManagement:{title:`アプリケーション`,subtitle:`設定済みのアプリケーションをすべて管理します`,newApp:`新しいアプリ`,searchLabel:`アプリを検索`,searchPlaceholder:`アプリを検索…`,selectedCount:`{{n}} 件選択中`,bulkEnable:`有効化`,bulkDisable:`無効化`,selectAll:`すべて選択({{n}})`,empty:`アプリが見つかりません。`,defaultBadge:`デフォルト`,active:`有効`,inactive:`無効`,selectApp:`{{name}} を選択`,openApp:`アプリを開く`,openAppNamed:`{{name}} を開く`,editApp:`アプリを編集`,editAppNamed:`{{name}} を編集`,editWithAi:`AI で編集`,editWithAiNamed:`{{name}} を AI で編集`,enableApp:`アプリを有効化`,disableApp:`アプリを無効化`,enableAppNamed:`{{name}} を有効化`,disableAppNamed:`{{name}} を無効化`,setDefault:`デフォルトに設定`,setDefaultNamed:`{{name}} をデフォルトに設定`,deleteApp:`アプリを削除`,deleteAppNamed:`{{name}} を削除`,confirmDelete:`もう一度クリックすると削除します`,confirmDeleteNamed:`{{name}} の削除を確認`,toast:{noClient:`メタデータサービスに接続できません`,unknownError:`不明なエラー`,appEnabled:`{{name}} を有効化しました`,appDisabled:`{{name}} を無効化しました`,toggleFailed:`アプリの状態の切り替えに失敗しました:{{reason}}`,setDefaultDone:`{{name}} をデフォルトに設定しました`,setDefaultFailed:`デフォルトアプリの設定に失敗しました:{{reason}}`,appDeleted:`{{name}} を削除しました`,deleteFailed:`アプリの削除に失敗しました:{{reason}}`,bulkEnabled:`{{n}} 件のアプリを有効化しました`,bulkDisabled:`{{n}} 件のアプリを無効化しました`,bulkFailed:`{{n}} 件失敗しました:{{details}}`,bulkFailureEntry:`{{name}}({{reason}})`,bulkFailureJoiner:`、`,bulkOperationFailed:`一括操作に失敗しました:{{reason}}`}}},ko:{impersonation:{banner:{message:`{{user}} 계정을 대행하고 있습니다. 모든 작업이 해당 사용자로 기록됩니다.`,startedBy:`관리자 {{admin}}이(가) 시작했습니다.`,stop:`대행 종료`,stopping:`종료하는 중…`,stopFailed:`대행을 종료할 수 없습니다: {{reason}}`,notRestored:`서버가 요청을 받았지만 관리자 세션을 복원하지 않았습니다. 여전히 {{user}} 계정을 대행하고 있습니다. 로그아웃 후 다시 로그인하여 종료하세요.`}},capability:{label:{manage_users:`사용자 관리`,manage_org_users:`조직 사용자 관리`,manage_metadata:`메타데이터 관리`,manage_platform_settings:`플랫폼 설정 관리`,setup_access:`설정 접근`,setup_write:`설정 쓰기`,studio_access:`Studio 접근`},group:{platform:`플랫폼`,org:`조직`,other:`기타`}},perm:{facet:{none:`없음`,more:`+{{count}} 더보기`,objects:`{{count}}개 오브젝트`,objects_one:`{{count}}개 오브젝트`,fields:`{{count}}개 필드 규칙`,fields_one:`{{count}}개 필드 규칙`,rls:`{{count}}개 RLS 정책`,rls_one:`{{count}}개 RLS 정책`,tabs:`{{count}}개 탭 규칙`,tabs_one:`{{count}}개 탭 규칙`,adminScope:`위임 관리가 구성됨`,designInStudio:`Studio에서 디자인 →`,designInStudioHint:`Studio에서 디자인`}},lookup:{recentlyUsed:`최근 사용`,allResults:`모든 결과`,createNew:`새로 만들기`,createNamed:`“{{name}}” 새로 만들기`,showingResults:`{{total}}개 중 {{shown}}개 표시`,showAllResults:`모든 결과 보기 ({{count}})`,selectedBadge:`선택됨`,browseAll:`모든 레코드 찾아보기`,remove:`{{label}} 제거`,selectFirst:`먼저 {{fields}}을(를) 선택하세요`,selectRecord:`레코드 선택`,recordCount:`레코드 {{count}}개`,recordCountOne:`레코드 1개`,pageOf:`{{total}}페이지 중 {{current}}페이지`,filters:`필터`,clear:`지우기`,yes:`예`,filterPlaceholder:`{{label}} 필터`,prevPage:`이전 페이지`,nextPage:`다음 페이지`,jumpToPage:`페이지 이동`,retry:`다시 시도`,loading:`로딩 중…`,noOptions:`옵션을 찾을 수 없습니다`,noRecords:`레코드를 찾을 수 없습니다`},common:{addToFavorites:`즐겨찾기에 추가`,removeFromFavorites:`즐겨찾기에서 제거`,loading:`로딩 중…`,save:`저장`,cancel:`취소`,delete:`삭제`,edit:`편집`,create:`생성`,filter:`필터`,reset:`초기화`,confirm:`확인`,close:`닫기`,back:`뒤로`,next:`다음`,previous:`이전`,submit:`제출`,refresh:`새로고침`,export:`내보내기`,import:`가져오기`,yes:`예`,no:`아니오`,ok:`확인`,actions:`작업`,more:`더보기`,selectAll:`모두 선택`,clearAll:`모두 지우기`,noData:`데이터 없음`,noResults:`결과를 찾을 수 없습니다`,required:`필수`,optional:`선택`,selectOption:`옵션을 선택하세요`,select:`선택…`,openChat:`채팅 열기`,closeChat:`채팅 닫기`,closePanel:`패널 닫기`,resizeDrawer:`패널 너비 조정`,itemCount:`{{count}}개 항목`,itemCountOne:`{{count}}개 항목`,toggleSidebar:`사이드바 전환`,package:`패키지`,done:`완료`,editInStudio:`Studio에서 편집`,record:`레코드`,retry:`다시 시도`,printDialogHint:`브라우저의 인쇄 대화 상자를 엽니다(PDF 내보내기가 아닙니다)`},actions:{decisionOutput:{help:`결정 출력으로 플로우에 전달됩니다.`,helpMultiValue:`결정 출력으로 플로우에 전달됩니다. 여러 값은 쉼표로 구분하세요.`},resultDialog:{defaultTitle:`이 값을 지금 저장하세요`,acknowledge:`저장했습니다`,copyAll:`모두 복사`}},validation:{required:`{{field}}은(는) 필수입니다`,minLength:`{{field}}은(는) 최소 {{min}}자 이상이어야 합니다`,maxLength:`{{field}}은(는) 최대 {{max}}자까지 가능합니다`,min:`{{field}}은(는) {{min}} 이상이어야 합니다`,max:`{{field}}은(는) {{max}} 이하여야 합니다`,email:`유효한 이메일 주소를 입력해주세요`,url:`유효한 URL을 입력해주세요`,pattern:`{{field}} 형식이 올바르지 않습니다`,formInvalid:`표시된 필드를 확인해 주세요: {{fields}}`,formInvalidJoiner:`, `,unique:`{{field}}은(는) 고유해야 합니다`,type:`{{field}}은(는) 유효한 {{type}}이어야 합니다`},form:{noPermissionToSave:`이 레코드를 저장할 권한이 없습니다.`,submitFailed:`저장하지 못했습니다. 다시 시도해 주세요.`,discardTitle:`변경 내용을 버릴까요?`,discardMessage:`저장하지 않은 변경 내용이 있습니다. 지금 이 양식을 닫으면 편집 내용이 사라집니다.`,dialogDescriptionFallback:`양식 필드를 작성한 다음 제출하거나 취소하세요.`,keepEditing:`계속 편집`,discard:`버리기`,conflictTitle:`저장 충돌`,conflictMessage:`편집하는 동안 다른 사용자가 이 레코드를 변경했습니다. 덮어쓰면 상대방의 변경 내용이 내 내용으로 대체됩니다.`,conflictLatestVersion:`상대방 저장 시각: {{time}}`,conflictOverwrite:`덮어쓰기`,addItem:`항목 추가`,removeItem:`항목 제거`,fieldRequired:`이 필드는 필수입니다`,invalidFormat:`형식이 올바르지 않습니다`,saveSuccess:`저장되었습니다`,saveError:`저장에 실패했습니다`,unsavedChanges:`저장하지 않은 변경사항이 있습니다. 페이지를 떠나시겠습니까?`,stepOf:`{{total}}단계 중 {{current}}단계`,createTitle:`{{object}} 생성`,editTitle:`{{object}} 편집`,viewTitle:`{{object}} 보기`,createTargetOrg:`{{org}}에 생성`,saveRecord:`레코드 저장`,create:`생성`,update:`업데이트`,createSuccess:`{{object}} 생성됨`,updateSuccess:`{{object}} 업데이트됨`,deleteSuccess:`{{object}} 삭제됨`,fullscreen:{title:`텍스트 편집`,description:`전체 텍스트 값을 편집한 다음 변경 사항을 저장하거나 취소하세요.`,done:`완료`,toggle:`{{label}} 전체 화면으로 편집`,textFallback:`텍스트`}},fields:{image:{upload:`이미지 업로드`,addMore:`이미지 더 추가`,uploading:`업로드 중…`,imageAlt:`이미지 {{index}}`,crop:`이미지 {{index}} 자르기`,remove:`이미지 {{index}} 삭제`,enlarge:`{{name}} 확대`,preview:`이미지 미리보기`,previous:`이전 이미지`,next:`다음 이미지`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`기한 초과 {{count}}일`},file:{dragDropHere:`파일을 여기로 끌어다 놓기`,dropFilesHere:`여기에 놓기`,browseHint:`또는 클릭하여 찾아보기`,browseHintCamera:`또는 클릭하여 찾아보기 • 아래 카메라 버튼 사용`,takePhoto:`사진 촬영`,takeSelfie:`셀피 촬영`,cameraCapture:`카메라 촬영`,uploading:`업로드 중…`,uploadingPct:`업로드 중…({{pct}}%)`,fileFallback:`파일`,upload:`업로드`,remove:`{{name}} 제거`,exceedsMaxSize:`"{{name}}"이(가) 최대 크기({{max}} MB)를 초과합니다`,uploadFailed:`"{{name}}" 업로드 실패: {{error}}`},richText:{format:`형식: {{format}}`,basicEditorHint:`서식 있는 텍스트 편집기 (기본)`,placeholder:`내용을 입력하세요…`},options:{empty:`선택할 수 있는 옵션이 없습니다`,selectFirst:`먼저 {{fields}}을(를) 선택하세요`},objectRef:{loading:`객체를 불러오는 중…`,placeholder:`객체 선택`,search:`객체 검색…`,empty:`객체를 찾을 수 없습니다`},recipient:{selectTypeFirst:`먼저 수신자 유형을 선택하세요.`,loading:`불러오는 중…`,search:`검색…`,empty:`일치하는 항목 없음`,select:`수신자 선택`,selectUser:`사용자 선택`,selectTeam:`팀 선택`,selectBusinessUnit:`사업 단위 선택`,selectPosition:`직위 선택`,selectUnitAndSubordinates:`사업 단위 선택`},filterCondition:{selectObjectFirst:`먼저 객체를 선택하세요.`,noCriteria:`조건 없음 — 이 규칙은 아무것도 공유하지 않습니다`,criteriaRequired:`조건을 하나 이상 추가하세요. 조건이 없는 규칙은 모든 레코드를 공유하게 되므로 저장할 수 없습니다.`,invalidJson:`잘못된 JSON — 수정하기 전까지 이 규칙은 어떤 레코드와도 일치하지 않습니다.`,jsonOnly:`이 조건은 JSON으로만 편집할 수 있습니다`,editAsJson:`JSON으로 편집`,useVisualBuilder:`비주얼 빌더 사용`},tags:{placeholder:`입력 후 Enter 키로 추가…`},textarea:{characterCount:`글자 수: {{max}}자 중 {{count}}자`,charactersRemaining:`{{count}}자 남음`}},table:{rowsPerPage:`페이지당 행 수`,showing:`{{total}}개 중 {{from}}~{{to}} 표시`,noRows:`표시할 데이터가 없습니다`,sortAsc:`오름차순 정렬`,sortDesc:`내림차순 정렬`,filterColumn:`{{column}} 필터`,columns:`열`,exportCSV:`CSV 내보내기`,exportExcel:`Excel 내보내기`,selectRow:`행 선택`,selectAllRows:`모든 행 선택`,expandRow:`행 펼치기`,collapseRow:`행 접기`,hideColumn:`열 숨기기`,freezeColumn:`열 고정`,unfreezeColumn:`열 고정 해제`,pageInfo:`{{total}} 페이지 중 {{current}} 페이지`,totalRecords:`총 {{count}}개`,noResults:`결과 없음`,noResultsHint:`필터 또는 검색어를 조정해 보세요.`,cancelAll:`모두 취소`,saveAll:`모두 저장 ({{count}})`,addRecord:`레코드 추가`,open:`열기`,search:`검색…`,modified:`{{count}}개 행 수정됨`,saveFailed:`저장 실패`,selected:`{{count}}개 선택됨`,edit:`편집`,delete:`삭제`},grid:{bulkSelected:`{{count}}건 선택됨`,bulkSelectedAllMatches:`{{count}}건 선택됨(일치 항목 전체)`,bulkClear:`선택 해제`,bulkAllOnPage:`이 페이지의 {{count}}건이 모두 선택되었습니다.`,bulkSelectAllMatching:`일치하는 {{count}}건 모두 선택`,bulkAllMatchingSelected:`일치하는 레코드 {{count}}건이 모두 선택되었습니다.`,bulk:{confirmDefault:`레코드 {{count}}건에 적용됩니다.`,overLimit:`선택 건수({{count}})가 작업 한도({{limit}})를 초과합니다. 선택을 줄여 주세요.`,affectedRecords:`영향을 받는 레코드({{count}}):`,skippedIneligible:`선택한 레코드 중 {{count}}건은 이 작업의 대상이 아니므로 건너뜁니다.`,rowFallback:`{{index}}행`,andMore:`… 외 {{count}}건`,processed:`{{count}} / {{total}} 처리됨`,processedFailed:` · 실패 {{count}}건`,undonePrefix:`되돌림 — `,succeeded:`성공 {{count}} / {{total}}`,resultFailed:` · 실패 {{count}}`,retry:`다시 시도`,downloadErrorCsv:`오류 CSV 다운로드`,cancel:`취소`,back:`뒤로`,next:`다음`,run:`실행`,running:`실행 중…`,undo:`되돌리기`,undoing:`되돌리는 중…`,done:`완료`,selectPlaceholder:`선택…`,loading:`불러오는 중…`},actions:`작업`,edit:`편집`,delete:`삭제`,export:`내보내기`,exportAs:`{{format}}으로 내보내기`,loading:`그리드 로딩 중…`,errorLoading:`그리드 로딩 오류`,pullToRefresh:`당겨서 새로고침`,refreshing:`새로고침 중…`,openRecord:`레코드 열기`,rowHeight:`행 높이: {{mode}}`,openMenu:`메뉴 열기`,empty:`비어 있음`,yes:`예`,no:`아니요`,systemFields:`시스템`,summary:{pattern:`{{label}}: {{value}}`,count:`개수`,countEmpty:`빈 값`,countFilled:`채워짐`,countUnique:`고유`,percentEmpty:`빈 값`,percentFilled:`채워짐`,sum:`합계`,avg:`평균`,min:`최소`,max:`최대`},toolbar:{densityMode:`밀도`,densityCompact:`컴팩트`,densityComfortable:`보통`,densitySpacious:`넓음`,densityCycleHint:`{{label}} (클릭하여 변경)`,densityCycleShortHint:`클릭하여 변경`},import:{downloadTemplate:`템플릿 다운로드`,downloadTemplateHint:`올바른 열이 포함된 CSV를 받습니다(필수 필드에는 * 표시).`,templateFileName:`{{object}}-import-template`,autoMatched:`자동 매핑됨`,autoMatchedSummary:`{{count}}개 열을 자동 매핑했습니다 — 아래에서 확인하고 조정하세요.`,confidence:{high:`신뢰도 높음`,medium:`신뢰도 보통`,low:`신뢰도 낮음`},asyncQueued:`대기 중 — 가져오기를 준비하고 있습니다…`,asyncProcessing:`{{total}}행 중 {{processed}}행 가져오는 중… {{progress}}%`,asyncLargeHint:`파일이 커서 백그라운드에서 가져옵니다.`,largeSampleNotice:`{{total}}행 중 처음 {{shown}}행을 미리 보고 있습니다.`,cancelImport:`가져오기 취소`,importCancelled:`가져오기를 취소했습니다`,resultsTruncated:`{{total}}행 중 처음 {{count}}행의 결과를 표시합니다.`,createdCount:`{{count}}건 생성`,updatedCount:`{{count}}건 업데이트`,downloadFailed:`실패한 행 다운로드`,options:`가져오기 옵션`,writeMode:`기존 레코드와 일치하는 행의 처리`,writeModeOpt:{insert:`항상 새로 생성`,update:`기존 항목 업데이트(일치하지 않으면 건너뜀)`,upsert:`일치하면 업데이트, 없으면 생성`},matchFields:`일치 기준`,matchFieldsPlaceholder:`일치 기준 필드 선택…`,matchFieldsHint:`이 필드를 기준으로 기존 레코드와 대조합니다.`,needMatchFields:`일치 기준 필드를 하나 이상 선택하세요.`,matchOnlyField:`(일치 전용)`,optCreateOptions:`알 수 없는 선택 값 유지`,optRunAutomations:`자동화 및 트리거 실행`,optTreatHistorical:`과거 데이터로 가져오기`,optTreatHistoricalHint:`(완료된 레코드를 그대로 가져옵니다 — 상태 머신 검사를 건너뛰고 현재 시각을 찍는 대신 원래 타임스탬프와 작성자를 유지합니다)`,optSkipBlankKey:`일치 값이 비어 있는 행 건너뛰기`,optBackground:`백그라운드에서 가져오기`,optBackgroundHint:`(되돌릴 수 있는 작업으로 실행됩니다)`,validate:`데이터 검증`,validating:`검증 중…`,validateHint:`가져오기 전에 모든 행을 서버에서 검사합니다.`,validatePassed:`{{ok}}행 모두 유효합니다.`,validateFailed:`유효 {{ok}}행, 오류 {{errors}}행.`,errorRowPrefix:`{{row}}행: `,referenceNotFound:`"{{value}}"과(와) 일치하는 레코드가 없습니다`,referenceAmbiguous:`"{{value}}"이(가) 여러 레코드와 일치합니다 — 고유한 값이나 레코드 ID를 사용하세요`,invalidBoolean:`"{{value}}"은(는) 유효한 true/false 값이 아닙니다`,invalidNumber:`"{{value}}"은(는) 유효한 숫자가 아닙니다`,invalidDate:`"{{value}}"은(는) 유효한 날짜가 아닙니다`,invalidOption:`"{{value}}"은(는) 허용된 선택지에 없습니다`,requiredValue:`필수 필드입니다`,matchAmbiguous:`기존 레코드 여러 건과 일치합니다 — 고유한 값이나 레코드 ID를 사용하세요`,history:`기록`,historyBack:`가져오기로 돌아가기`,historyDescription:`이 객체의 최근 가져오기입니다.`,historyHint:`백그라운드 가져오기 작업, 최신순.`,historyRefresh:`새로고침`,historyLoading:`불러오는 중…`,historyEmpty:`아직 가져오기가 없습니다.`,historyUnsupported:`이 데이터 소스는 가져오기 기록을 지원하지 않습니다.`,historyColStatus:`상태`,historyColRows:`행 수`,historyColResult:`결과`,historyColTime:`시각`,errorCount:`오류 {{count}}건`,undoImport:`가져오기 되돌리기`,undoing:`되돌리는 중…`,undoConfirm:`이 가져오기를 되돌릴까요? 생성된 레코드는 삭제되고 업데이트된 레코드는 이전 값으로 복원됩니다.`,reverted:`되돌림`,jobStatus:{pending:`대기 중`,running:`실행 중`,succeeded:`성공`,failed:`실패`,cancelled:`취소됨`},legacyReferenceBlocked:`가져오기가 차단되었습니다: {{fields}}은(는) 이름을 레코드 ID로 변환하기 위해 서버 가져오기 경로가 필요한 관계 필드인데, 이 연결은 이를 지원하지 않습니다. 일반 텍스트로 가져오면 데이터가 손상됩니다. 백엔드/클라이언트를 업그레이드하거나, 이 열들의 매핑을 해제하고 별도로 가져오세요.`,missingRequiredHint:`계속할 수 없습니다 — 매핑되지 않은 필수 필드: {{fields}}. 파일에 해당 열을 추가하거나, 뒤로 돌아가 그 열이 포함된 파일을 업로드하세요.`,legacyFallbackNotice:`호환 폴백으로 가져왔습니다: 이 연결은 서버 가져오기 경로를 지원하지 않아 값이 서버 측 형 변환 없이 텍스트로 저장되었습니다. 완전한 가져오기 기능(형 변환 및 관계 조회)을 사용하려면 백엔드/클라이언트를 업그레이드하세요.`,title:`{{object}} 가져오기`,notAllowed:`이 객체는 가져오기가 허용되지 않습니다.`,stepUpload:`업로드`,stepMapping:`매핑`,stepPreview:`미리보기`,uploadDescription:`CSV 또는 Excel 파일을 업로드하거나 스프레드시트에서 붙여넣어 시작하세요.`,mappingDescription:`열을 개체 필드에 매핑합니다.`,previewDescription:`가져오기 전에 데이터를 검토하세요.`,dragDrop:`CSV 또는 Excel 파일을 여기로 드래그하거나 클릭하여 찾아보기`,browseFiles:`파일 찾아보기`,parsing:`분석 중…`,pasteHint:`또는 Excel, Google 스프레드시트에서 복사한 행을 붙여넣기(Ctrl/⌘+V)`,legacyXls:`구버전 .xls 파일은 지원되지 않습니다. .xlsx로 다시 저장하세요.`,unsupportedFile:`지원되지 않는 파일 형식입니다. CSV, TSV 또는 Excel(.xlsx)을 사용하세요.`,parseFailed:`이 파일을 읽을 수 없습니다. 형식을 확인하고 다시 시도하세요.`,fileNeedsHeader:`파일에 헤더 행과 데이터 행이 하나 이상 있어야 합니다.`,mappingTemplate:`매핑 템플릿:`,chooseTemplate:`템플릿 선택…`,noSavedTemplates:`저장된 템플릿 없음`,noneOption:`— 없음 —`,saveCurrent:`현재 저장`,templateName:`템플릿 이름`,save:`저장`,deleteTemplate:`템플릿 삭제`,savedMapping:`저장된 매핑:`,chooseSavedMapping:`저장된 매핑 선택…`,manualMapping:`— 열 수동 매핑 —`,transform:`변환`,savedMappingHint:`매핑 "{{name}}"은(는) 서버에서 이름 변경 + 변환 + 형 변환을 적용합니다. 열 매핑은 읽기 전용입니다.`,savedMappingPreviewNote:`미리보기에는 원본 열이 표시됩니다. 가져올 때 매핑 "{{name}}"이(가) 서버에서 이름 변경, 변환, 형 변환을 적용합니다.`,csvColumn:`열`,mapsTo:`매핑 대상`,typeMismatch:`{{type}}인 것 같습니다`,type:{number:`숫자`,boolean:`부울`,date:`날짜`,datetime:`날짜 및 시간`,text:`텍스트`},status:`상태`,skipColumn:`열 건너뛰기`,skip:`— 건너뛰기 —`,mapped:`매핑됨`,skipped:`건너뜀`,rowsWithErrors:`오류가 있는 {{count}}개 행`,rowsCorrected:`{{count}}개 행 수정됨`,clickToFix:`— 강조 표시된 셀을 클릭하여 인라인 편집.`,showingRows:`{{total}}개 중 {{shown}}개 행 표시`,importing:`가져오는 중… {{progress}}%`,importComplete:`가져오기 완료`,imported:`{{count}}개 가져옴`,skippedCount:`{{count}}개 건너뜀`,moreErrors:`…{{count}}개 오류 더`,cancel:`취소`,back:`뒤로`,next:`다음`,close:`닫기`,importNRows:`{{count}}개 행 가져오기`,importingProgress:`가져오는 중…`,requiredMark:`*`,required:`필수`,invalidType:`잘못된 {{type}}`}},calendar:{today:`오늘`,month:`월`,week:`주`,day:`일`,agenda:`일정`,allDay:`종일`,noEvents:`일정이 없습니다`,newEvent:`새 일정`,moreEvents:`+{{count}} 더보기`},list:{firstRunTitle:`아직 아무것도 없습니다`,firstRunMessage:`첫 레코드를 만들어 시작하세요.`,noMatches:`일치하는 레코드가 없습니다`,noMatchesMessage:`현재 필터나 검색어와 일치하는 레코드가 없습니다. 조건을 조정하거나 지워 보세요.`,loadErrorTitle:`레코드를 불러오지 못했습니다`,loadErrorMessage:`이 데이터를 불러오는 중 문제가 발생했습니다. 연결을 확인하고 다시 시도하세요.`,loadErrorForbiddenTitle:`접근 권한이 없습니다`,loadErrorForbiddenMessage:`이 레코드를 볼 권한이 없습니다. 접근이 필요하면 관리자에게 문의하세요.`,loadErrorUnauthorizedTitle:`로그인이 필요합니다`,loadErrorUnauthorizedMessage:`세션이 만료되었거나 로그아웃되었습니다. 다시 로그인한 후 확인하세요.`,loadErrorRejectedTitle:`이 뷰의 쿼리가 거부되었습니다`,loadErrorRejectedMessage:`서버가 이 뷰의 필터 또는 쿼리 옵션을 처리하지 못했습니다. 필터를 지우면 대부분 해결됩니다. 뷰가 이 상태로 저장되어 있다면 관리자가 수정해야 합니다.`,loadErrorApiDisabledTitle:`이 객체는 API로 제공되지 않습니다`,loadErrorApiDisabledMessage:`객체가 API에 공개되어 있지 않아 이 페이지는 레코드를 불러올 수 없습니다. 이는 권한이 아니라 객체 자체의 설정입니다. 관리자가 API 액세스를 활성화해야 이 페이지가 동작합니다.`,retry:`다시 시도`,managedBy:{system:{title:`아직 아무것도 없습니다`,message:`원본 작업(승인 요청, 공유, 초대 등)이 실행되면 항목이 자동으로 나타납니다. 원본 레코드에서 그중 하나를 실행하면 행이 생성됩니다.`},appendOnly:{title:`기록된 이벤트가 없습니다`,message:`변경할 수 없는 감사 로그입니다. 행은 이벤트 발생 시 플랫폼이 기록합니다 — 기록을 내보낼 수는 있지만 여기서 항목을 만들 수는 없습니다.`},betterAuth:{title:`ID 레코드가 없습니다`,message:`이 레코드들은 인증 공급자가 로그인·프로비저닝·보안 절차를 통해 생성하며, 여기서 직접 추가하는 것이 아닙니다.`},betterAuthUser:{title:`아직 사용자가 없습니다`,message:`사용자 계정은 인증 공급자가 프로비저닝하며 여기서 생성하지 않습니다. 조직에 동료를 초대하면 첫 로그인 시 자동으로 표시됩니다(SSO 적시 프로비저닝). 앱 사용자는 앱을 통해 가입할 때 추가됩니다.`},betterAuthTeam:{title:`아직 팀이 없습니다`,message:`팀은 조직 내 구성원을 묶습니다. "팀 만들기"로 생성하거나, 인증 공급자의 조직 및 SSO 프로비저닝 절차를 통해 추가됩니다.`}},refresh:`새로고침`,loading:`레코드 로딩 중…`,recordCount:`{{count}}개 레코드`,recordCountOne:`{{count}}개 레코드`,addRecord:`레코드 추가`,tabs:`탭`,allRecords:`전체 레코드`,search:`검색`,filter:`필터`,filterRecords:`레코드 필터`,sort:`정렬`,sortRecords:`레코드 정렬`,sortByIdSuffix:`(ID 기준)`,sortRelationalHint:`다른 레코드를 참조하는 열은 목록에 없습니다. 저장된 ID로만 정렬할 수 있고 셀에 표시되는 이름으로는 정렬할 수 없습니다. 그 이름으로 정렬하려면 이름을 이 오브젝트에 비정규화하여 원본이 변경될 때 기록되는 저장 필드로 만든 다음, 그 필드로 정렬하세요. 수식 필드는 안 됩니다. 수식은 가상이라 저장되는 열이 없어 서버가 정렬을 거부합니다.`,resetSortToDefault:`뷰 기본 정렬로 재설정`,group:`그룹`,groupBy:`그룹 기준`,export:`내보내기`,exportAs:`{{format}}으로 내보내기`,color:`색상`,rowColor:`행 색상`,colorByField:`필드별 색상`,clear:`지우기`,none:`없음`,hideFields:`필드 숨기기`,noItems:`항목을 찾을 수 없습니다`,noItemsMessage:`표시할 레코드가 없습니다. 필터를 조정하거나 새 데이터를 추가해 보세요.`,showAll:`모두 표시`,pullToRefresh:`당겨서 새로고침`,refreshing:`새로고침 중…`,share:`공유`,print:`인쇄`,hideFieldsTitle:`필드 숨기기`,dataLimitReached:`처음 {{limit}}개 레코드를 표시합니다. 더 많은 데이터가 있을 수 있습니다.`,viewSettings:`보기 설정`,viewSettingsHint:`그룹화, 색상, 밀도 및 표시 필드.`,addGroup:`그룹 필드 추가`,collapsedByDefault:`기본적으로 접힘`,removeGroup:`제거`,inlineEditShort:`인라인 편집`,inlineEditLabel:`레코드를 인라인으로 편집(셀을 클릭하여 편집)`,recordEditingTitle:`레코드 편집`},managedByBadge:{systemWritable:{short:`플랫폼 스키마`,title:`플랫폼 정의, 관리자 쓰기 가능`,body:`이 객체의 스키마는 플랫폼이 정의하지만, 행은 여기서 직접 만들고 편집할 수 있습니다. 누가 쓸 수 있는지는 이 배지가 아니라 위임 관리와 레코드 수준 보안이 결정합니다.`},config:{short:`관리 구성`,title:`관리자 구성`,body:`이 행들은 플랫폼의 런타임 동작을 정의합니다. 여기에서 작성하세요. 생성되는 런타임 데이터는 별도의 테이블에 저장됩니다.`},system:{short:`시스템 관리`,title:`플랫폼에서 관리`,body:`원본 레코드에서 작업이 실행되면 행이 자동으로 생성됩니다. 아래 목록은 읽기 전용 모니터링 화면이며, 행 수준 작업(승인, 회수, 재전송 등)은 각 행에 있습니다.`},appendOnly:{short:`읽기 전용 · 감사 로그`,title:`읽기 전용 기록`,body:`변경할 수 없는 감사 로그입니다. 행은 이벤트 발생 시 플랫폼이 기록하며 UI에서 생성·편집·삭제할 수 없습니다. 규정 준수 검토를 위해 내보내기를 사용하세요.`},betterAuth:{short:`아이덴티티`,title:`ID 공급자가 관리`,body:`이 개체의 스키마는 {{provider}}가 소유합니다. 직접 편집하면 비밀번호 해싱, 세션 검증, 2단계 인증 확인 및 감사 후크를 우회하게 됩니다. 인증 공급자의 로그인, 초대, 보안 흐름을 통해 이 레코드를 관리하세요.`}},kanban:{uncategorized:`미분류`,columns:`열`,addCard:`카드 추가`,addColumn:`열 추가`,moveCard:`카드 이동`,deleteCard:`카드 삭제`,deleteColumn:`열 삭제`,noCards:`카드 없음`,cardTitlePlaceholder:`카드 제목 입력…`,requiredFieldsTitle:`필수 항목 입력`,requiredFieldsDescription:`이 이동으로 아래 항목이 필수가 됩니다. 입력한 후 계속하세요.`},timeline:{bucket:{overdue:`기한 초과`,today:`오늘`,tomorrow:`내일`,thisWeek:`이번 주`,nextWeek:`다음 주`,later:`나중`,noDate:`날짜 없음`,unassigned:`미할당`},scale:{week:`{{n}}주차`,quarter:`{{year}}년 {{quarter}}분기`},gantt:{rowLabel:`항목`}},gantt:{viewMode:{day:`일`,week:`주`,month:`월`,quarter:`분기`,year:`년`},row:{expand:`펼치기`,collapse:`접기`,open:`세부 정보 열기`},aria:{taskList:`작업 목록`},tooltip:{days:`일`},menu:{view:`세부 정보 보기`,edit:`인라인 편집`,delete:`삭제`,addPredecessor:`선행 작업 추가…`,addSuccessor:`후행 작업 추가…`,removeDependency:`종속성 제거`,noCandidates:`사용할 수 있는 작업이 없습니다`,searchTasks:`작업 검색…`},delete:{title:`이 작업을 삭제할까요?`,body:`"{{title}}"이(가) 영구히 삭제됩니다. 이 작업은 되돌릴 수 없습니다.`,cancel:`취소`,confirm:`삭제`,deleting:`삭제 중…`},drawer:{fallbackTitle:`작업 세부 정보`},linkType:{fs:`종료 → 시작`,ss:`시작 → 시작`,ff:`종료 → 종료`,sf:`시작 → 종료`},linkEnd:{start:`시작`,end:`종료`},link:{rejected:{self:`작업은 자기 자신에 종속될 수 없습니다.`,locked:`이 행은 잠겨 있어 새 종속성을 추가할 수 없습니다.`,group:`요약 행은 종속 대상이 될 수 없습니다. 하위 작업에 연결하세요.`,cycle:`이 연결은 순환 종속성을 만듭니다.`}},conflict:{title:`일정 충돌`,body:`이 이동은 종속성 제약과 충돌합니다. 영향을 받는 작업 {{count}}건의 일정을 자동으로 조정할까요?`,confirm:`자동 일정 조정`,cancel:`그대로 두기`},autoScheduleDlg:{title:`자동 일정 조정`,body:`종속성 연결을 충족하도록 작업 {{count}}건을 뒤로 미룰까요?`,skipped:`잠긴 작업 {{count}}건도 연결을 위반하지만 건너뛰었습니다.`,confirm:`적용`,cancel:`취소`,none:`모든 종속성이 충족되었습니다 — 조정할 일정이 없습니다.`},resource:{header:`리소스`,peak:`최대`,over:`과부하`,empty:`배정할 작업이 없습니다.`},quickFilter:{all:`전체`,clear:`필터 지우기`,empty:`옵션 없음`,resultSummary:`작업 {shown} / {total}건 표시`},readOnly:`읽기 전용`,readOnlyHint:`이 보기에서는 편집할 수 없습니다.`,lockedHint:`편집 권한 없음`,writeFailed:`저장 실패 — 변경이 취소되었습니다`,column:{taskName:`작업 이름`,start:`시작`,end:`종료`},toolbar:{thisWeek:`이번 주`,thisMonth:`이번 달`,viewMode:`타임라인 단위`,enterFullscreen:`전체 화면`,exitFullscreen:`전체 화면 종료`,criticalPath:`주 공정 경로 강조`,autoSchedule:`종속성 자동 일정 조정`,exportPng:`PNG로 내보내기`,exportPdf:`PDF로 내보내기`,saveLayout:`레이아웃 저장`,refresh:`새로 고침`,undo:`실행 취소`,redo:`다시 실행`,prevPeriod:`이전 기간`,nextPeriod:`다음 기간`,zoomIn:`확대`,zoomOut:`축소`,jumpToToday:`오늘로 이동`,today:`오늘`,showTaskList:`작업 목록 표시`,hideTaskList:`작업 목록 숨기기`}},view:{editViewConfig:`보기 구성 편집`,rename:`이름 변경`,duplicateView:`뷰 복제`,shareView:`뷰 공유`,setAsDefault:`기본값으로 설정`,pinView:`뷰 고정`,unpinView:`고정 해제`,changeViewType:`뷰 유형 변경`,deleteView:`뷰 삭제`,addView:`뷰 추가`,unsavedChanges:`저장되지 않은 변경`,saveAsView:`뷰로 저장`,moreViews:`{{count}}개 더`,activeFilters:`필터 적용 중`,activeSort:`정렬 적용 중`,manageViews:`보기 관리`,manageAllViews:`모든 보기 관리…`,manageViewsDescription:`이 객체의 모든 보기를 재정렬, 이름 변경, 고정 또는 삭제합니다.`,searchViews:`보기 검색`,addNewView:`새 보기 추가`,done:`완료`,noViewsFound:`검색과 일치하는 보기가 없습니다.`,dragToReorder:`드래그하여 순서 변경`,defaultView:`기본 보기`,defaultBadge:`기본`,tabActionsFor:`{{name}}의 보기 작업`,readonlyAriaLabel:`읽기 전용 보기`,readonlyTooltip:`시스템 보기 — 코드에 정의되어 있으며 읽기 전용입니다.`},designer:{undo:`실행 취소`,redo:`다시 실행`},detail:{editInlineHint:`더블클릭하여 편집`,systemActor:`시스템`,unknownUser:`알 수 없음`,back:`뒤로`,edit:`편집`,editInline:`편집`,save:`저장`,saveChanges:`변경사항 저장`,editFieldsInline:`필드 편집`,share:`공유`,duplicate:`복제`,export:`내보내기`,viewHistory:`기록 보기`,delete:`삭제`,moreActions:`더 많은 작업`,addReaction:`반응 추가`,pageHeaderActions:`페이지 헤더 작업`,emojiPicker:`이모지 선택기`,reactionCount:`{{emoji}} 반응 {{count}}개`,reactionCountOne:`{{emoji}} 반응 {{count}}개`,recordDetail:`레코드 세부 정보`,recordDetailWithLabel:`{{label}} 세부 정보`,openAsFullPage:`전체 페이지로 열기`,recordDetailOverlay:`{{title}}의 레코드 세부 정보 오버레이입니다.`,addToFavorites:`즐겨찾기에 추가`,removeFromFavorites:`즐겨찾기에서 제거`,previousRecord:`이전 레코드`,nextRecord:`다음 레코드`,recordOf:`{{current}} / {{total}}`,recordNotFound:`레코드를 찾을 수 없음`,recordNotFoundDescription:`찾으시는 레코드가 존재하지 않거나 삭제되었을 수 있습니다.`,goBack:`뒤로`,details:`상세정보`,related:`관련`,relatedRecords:`{{count}}개 레코드`,relatedRecordOne:`{{count}}개 레코드`,noRelatedRecords:`관련 레코드를 찾을 수 없습니다`,loading:`로딩 중…`,copyToClipboard:`클립보드에 복사`,copied:`복사됨!`,deleteConfirmation:`이 레코드를 삭제하시겠습니까?`,deleted:`레코드가 삭제됨`,editRecord:`레코드 편집`,viewAll:`모두 보기`,new:`새로 만들기`,add:`추가`,emptyValue:`—`,comments:`댓글`,searchComments:`댓글 검색…`,addCommentPlaceholder:`댓글 추가… (Ctrl+Enter로 제출)`,noMatchingComments:`일치하는 댓글이 없습니다`,noCommentsYet:`아직 댓글이 없습니다`,pinned:`고정됨`,pin:`고정`,unpin:`고정 해제`,justNow:`방금`,minutesAgo:`{{count}}분 전`,hoursAgo:`{{count}}시간 전`,daysAgo:`{{count}}일 전`,dropFilesToUpload:`파일을 여기에 끌어놓거나 클릭하여 업로드`,attachmentCount:`첨부파일 {{count}}개`,attachmentCountPlural:`첨부파일 {{count}}개`,removeAttachment:`첨부파일 제거`,attachments:`첨부파일`,uploadAttachment:`업로드`,loadingAttachments:`첨부파일 불러오는 중…`,noAttachments:`아직 첨부파일이 없습니다. 파일을 업로드해 시작하세요.`,downloadAttachment:`다운로드`,deleteAttachment:`첨부파일 삭제`,attachmentDeleteDenied:`업로드한 사용자 또는 이 레코드를 편집할 수 있는 사용자만 이 첨부파일을 삭제할 수 있습니다.`,attachmentParentAccessDenied:`이 레코드에 파일을 첨부할 권한이 없습니다.`,attachmentDownloadDenied:`이 첨부파일을 다운로드할 권한이 없습니다.`,attachmentAuthRequired:`이 첨부파일을 다운로드하려면 로그인하세요.`,attachmentPermissionDenied:`이 작업을 수행할 권한이 없습니다.`,unifiedDiff:`통합 보기`,sideBySideDiff:`나란히 보기`,noChanges:`변경 없음`,previousVersion:`이전 버전`,currentVersion:`현재 버전`,discussion:`토론`,showDiscussion:`토론 보기 ({{count}})`,hideDiscussion:`토론 숨기기`,bold:`굵게 (Ctrl+B)`,italic:`기울임 (Ctrl+I)`,listFormat:`목록`,inlineCode:`인라인 코드`,mentionSomeone:`멘션하기`,preview:`미리보기`,submitComment:`제출 (Ctrl+Enter)`,sendComment:`보내기`,writeComment:`댓글 작성…`,subscribedTooltip:`구독 중 — 클릭하여 구독 취소`,unsubscribedTooltip:`알림 구독`,firstRecord:`첫 번째 레코드 (Home)`,previousRecordKey:`이전 레코드 (←)`,nextRecordKey:`다음 레코드 (→)`,lastRecord:`마지막 레코드 (End)`,noRecords:`레코드 없음`,searchWhileNavigating:`탐색 중 검색`,searchRecords:`레코드 검색…`,allActivity:`모든 활동`,commentsOnly:`댓글만`,fieldChangesFilter:`필드 변경`,tasksOnly:`작업만`,leaveCommentPlaceholder:`댓글 남기기… (Ctrl+Enter로 제출)`,noActivity:`기록된 활동 없음`,loadMore:`더 보기`,edited:`(수정됨)`,via:`{{source}} 통해`,viewSource:`원본 보기`,replyCount:`답글 {{count}}개`,replyCountPlural:`답글 {{count}}개`,replyPlaceholder:`답글…`,filterActivity:`활동 필터`,openDiscussion:`토론 패널 열기`,closeDiscussion:`토론 패널 닫기`,subscribeAriaLabel:`알림 구독`,unsubscribeAriaLabel:`알림 구독 취소`,clearSearch:`검색 지우기`,saving:`저장 중…`,lockedByApproval:`승인을 위해 잠김`,lockedTooltip:`이 레코드에 대기 중인 승인 요청이 있습니다. 편집이 잠겨 있습니다`,writeStrippedTitle:`저장되었지만 일부 필드는 적용되지 않았습니다`,writeStrippedReadonly:`다음 필드는 읽기 전용이므로 적용되지 않았습니다: {{fields}}`,writeStrippedByState:`다음 필드는 이 레코드의 현재 상태에서 편집할 수 없으므로 적용되지 않았습니다: {{fields}}`,approvalPendingEditable:`승인 진행 중 · 편집 가능`,approvalPendingTooltip:`이 레코드에 대기 중인 승인 요청이 있지만 이 단계에서는 편집할 수 있습니다`,approvalProgress:`승인 — {{need}}건 중 {{got}}건`,approvalProgressGroups:`합의 — {{need}}개 그룹 중 {{got}}개`,approvalProgressLabel:`승인 진행 상황`,approvalsPanelTitle:`승인`,cancelApproval:`승인 취소`,cancelApprovalInFlight:`취소 중…`,cancelApprovalTooltip:`대기 중인 승인 요청을 취소하여 레코드 잠금 해제`,cancelApprovalTooltipUnlocked:`대기 중인 승인 요청 취소`,cancelApprovalFailed:`승인 취소 실패`,cancelApprovalUnavailable:`이 데이터 소스에서는 승인 취소가 지원되지 않습니다`,linkCopied:`링크가 클립보드에 복사됨`,linkCopyFailed:`링크 복사 실패`,cancel:`취소`,cancelEdit:`변경 사항 취소`,sectionMoreDetails:`추가 세부 정보`,concurrentUpdateTitle:`이 레코드가 다른 사람에 의해 수정되었습니다`,concurrentUpdateDescription:`다른 사용자가 편집하는 동안 {{field}}의 최신 버전을 저장했습니다. 충돌 해결 방법을 선택하세요.`,concurrentUpdateYourEdit:`내 편집`,concurrentUpdateCurrentValue:`현재 값`,concurrentUpdateUpdatedBy:`{{name}}이(가) 업데이트`,concurrentUpdateUpdatedAt:`{{when}}에 업데이트`,concurrentUpdateReload:`현재 버전 로드`,concurrentUpdateOverwrite:`그래도 덮어쓰기`,concurrentUpdateCancel:`취소`,concurrentUpdateRecordLabel:`이 레코드`,openInNewTab:`새 탭에서 열기`,activity:`활동`,history:`기록`,historyEmpty:`아직 기록이 없습니다`,editRow:`편집`,deleteRow:`삭제`,deleteRowConfirmation:`이 레코드를 삭제하시겠습니까?`,deleteRowTitle:`레코드 삭제`,actions:`작업`,previousPage:`이전`,nextPage:`다음`,pageOf:`{{total}}페이지 중 {{current}}페이지`,sortBy:`정렬 기준`,filterPlaceholder:`필터…`,highlightFields:`주요 필드`,createdBy:`작성자`,updatedBy:`업데이트한 사람`,created:`작성됨`,updated:`업데이트됨`,showEmptyRelated:`+ {{count}}개 비어 있음`,showEmptyRelated_one:`+ {{count}}개 비어 있음`,showEmptyRelated_other:`+ {{count}}개 비어 있음`,copyEmail:`이메일 복사`,copyPhone:`전화번호 복사`,copyRecordId:`레코드 ID 복사`,showEmptyFields:`{{count}}개의 빈 필드 표시`,hideEmptyFields:`빈 필드 숨기기`,noValue:`값 없음`},chart:{noData:`차트 데이터가 없습니다`,loading:`차트 로딩 중…`,nullCategory:`(미지정)`},map:{searchLocations:`위치 검색…`,locationDetails:`위치 상세`,markersCount:`마커 {{count}}개`,invalidCoordinates:`좌표가 누락되었거나 유효하지 않아 {{count}}개 레코드가 지도에서 제외되었습니다.`,invalidCoordinatesPlural:`좌표가 누락되었거나 유효하지 않아 {{count}}개 레코드가 지도에서 제외되었습니다.`},workflow:{draft:`초안`,active:`활성`,paused:`일시 중지`,completed:`완료`,cancelled:`취소됨`,save:`저장`,publish:`게시`,addNode:`노드 추가`,workflowFlow:`워크플로우`,properties:`속성`,connections:`연결`,quickConnect:`빠른 연결`,fromPlaceholder:`시작…`,toPlaceholder:`종료…`,connect:`연결`,label:`라벨`,type:`유형`,description:`설명`,assignee:`담당자`,assigneeType:`담당자 유형`,user:`사용자`,role:`역할`,group:`그룹`,expression:`수식`,timeoutMinutes:`제한 시간(분)`,selectNodeToEdit:`속성을 편집할 노드를 선택하세요`,workflowTitle:`워크플로우 제목`,newWorkflow:`새 워크플로우`,outConnections:`{{count}}개 출력`,start:`시작`,end:`종료`,task:`작업`,userTask:`사용자 작업`,serviceTask:`서비스 작업`,scriptTask:`스크립트 작업`,approval:`승인`,condition:`조건`,parallelGateway:`병렬 게이트웨이`,joinGateway:`합류 게이트웨이`,boundaryEvent:`경계 이벤트`,delay:`지연`,notification:`알림`,webhook:`Webhook`,allowConcurrency:`허용 (동시 실행)`,forbidConcurrency:`금지 (새 작업 건너뛰기)`,replaceConcurrency:`대체 (기존 취소)`,queueConcurrency:`대기열 (현재 완료 후 실행)`,conditionEvent:`조건`,manualEvent:`수동`,webhookEvent:`Webhook`,timerEvent:`타이머`,signalEvent:`시그널`,versionHistory:`버전 기록`,importBpmn:`BPMN 가져오기`,exportBpmn:`BPMN 내보내기`,undo:`실행 취소`,redo:`다시 실행`,resetZoom:`확대/축소 초기화`},dashboard:{noRows:`행 없음`,loading:`로딩 중…`,pickMeasures:`이 데이터셋 위젯의 측정값(값)을 선택하세요.`,datasetUnsupported:`이 데이터 소스는 데이터셋 쿼리를 지원하지 않습니다.`,details:`세부 정보`,exportCsv:`CSV 내보내기`,openInList:`목록에서 열기`,filters:{label:`대시보드 필터`,dateRange:`기간`,allTime:`전체 기간`,custom:`사용자 지정…`,all:`전체`,reset:`초기화`,range:{today:`오늘`,yesterday:`어제`,this_week:`이번 주`,last_week:`지난주`,this_month:`이번 달`,last_month:`지난달`,this_quarter:`이번 분기`,last_quarter:`지난 분기`,this_year:`올해`,last_year:`작년`,last_7_days:`최근 7일`,last_30_days:`최근 30일`,last_90_days:`최근 90일`}},addWidget:`위젯 추가`,removeWidget:`위젯 제거`,editLayout:`레이아웃 편집`,saveLayout:`레이아웃 저장`,resetLayout:`레이아웃 초기화`,total:`합계`,noDataAvailable:`사용 가능한 데이터 없음`,noDataSourceFor:`데이터 소스 없음:`,trend:{vsLastQuarter:`전분기 대비`,vsLastMonth:`전월 대비`,vsLastWeek:`전주 대비`,vsLastYear:`전년 대비`,vsYesterday:`어제 대비`,vsPreviousPeriod:`이전 기간 대비`}},configPanel:{save:`저장`,discard:`취소`,close:`닫기`,layout:`레이아웃`,columns:`열`,gap:`간격`,rowHeight:`행 높이`,data:`데이터`,refreshInterval:`새로고침 간격`,appearance:`모양`,title:`제목`,showDescription:`설명 표시`,theme:`테마`,configuration:`구성`,general:`일반`,advanced:`고급`},appDesigner:{createApp:`앱 만들기`,editApp:`앱 편집`,basicInfo:`기본 정보`,objects:`오브젝트`,navigation:`탐색`,branding:`브랜딩`,appName:`앱 이름`,appTitle:`제목`,appDescription:`설명`,appIcon:`아이콘`,template:`템플릿`,layout:`레이아웃`,layoutSidebar:`사이드바`,layoutHeader:`헤더`,layoutEmpty:`비어 있음`,selectObjects:`오브젝트 선택`,searchObjects:`오브젝트 검색…`,selectAll:`모두 선택`,deselectAll:`모두 해제`,navBuilder:`탐색 빌더`,addGroup:`그룹 추가`,addUrl:`URL 추가`,addSeparator:`구분선 추가`,noNavItems:`탐색 항목이 아직 없습니다.`,logoUrl:`Logo URL`,primaryColor:`기본 색상`,faviconUrl:`Favicon URL`,preview:`미리보기`,complete:`완료`,snakeCaseHint:`snake_case 형식이어야 합니다 (예: my_app)`,modeEdit:`편집`,modePreview:`미리보기`,modeCode:`코드`,addWidget:`위젯 추가`,widgetProperties:`위젯 속성`,dataSource:`데이터 소스`,valueField:`값 필드`,aggregate:`집계`,colorVariant:`색상 변형`,addComponent:`컴포넌트 추가`,componentProperties:`컴포넌트 속성`,viewType:`보기 유형`,fields:`필드`,toolbar:`도구 모음`,showSearch:`검색 표시`,showFilters:`필터 표시`,showSort:`정렬 표시`,appearance:`외관`,rowHeight:`행 높이`,stripedRows:`줄무늬 행`,bordered:`테두리`,livePreview:`실시간 미리보기`,stepBasicDesc:`이름, 제목 및 레이아웃`,stepObjectsDesc:`비즈니스 객체 선택`,stepNavigationDesc:`네비게이션 트리 구성`,stepBrandingDesc:`로고, 색상 및 파비콘`,noObjectsFound:`객체를 찾을 수 없습니다.`,noNavItemsHint:`네비게이션 항목이 없습니다. 이전 단계에서 객체를 선택하거나 수동으로 추가하세요.`,separator:`구분선`,separatorLabel:`— 구분선 —`,newGroup:`새 그룹`,newLink:`새 링크`,saveDraft:`임시 저장`,cancelConfirmTitle:`변경 사항을 폐기하시겠습니까?`,cancelConfirmMessage:`저장되지 않은 변경 사항이 있습니다. 취소하시겠습니까?`,confirmDiscard:`폐기`,keepEditing:`편집 계속`,navNoItems:`네비게이션 항목이 없습니다. 위 버튼을 클릭하여 항목을 추가하세요.`,navNoPreviewItems:`항목 없음`,navLivePreview:`실시간 미리보기`,navCollapseGroup:`그룹 접기`,navExpandGroup:`그룹 펼치기`,navAddChild:`하위 항목 추가`,navMoveUp:`위로 이동`,navMoveDown:`아래로 이동`,navRemove:`제거`,navObjectPage:`객체 페이지`,navDashboard:`대시보드`,navPage:`페이지`,navReport:`보고서`,navGroup:`그룹`,navUrl:`URL`,navSeparator:`구분선`,navTypeObject:`오브젝트`,navTypeDashboard:`대시보드`,navTypePage:`페이지`,navTypeReport:`보고서`,navTypeUrl:`URL`,navTypeGroup:`그룹`,navTypeSeparator:`구분선`,navTypeAction:`작업`,navTypeComponent:`컴포넌트`,navEditIcon:`아이콘 편집`,navToggleVisible:`가시성 토글`,navHidden:`숨김`,navExportSchema:`JSON 내보내기`,navImportSchema:`JSON 가져오기`,navExportSuccess:`탐색 스키마 내보냄`,navImportSuccess:`탐색 스키마 가져옴`,navImportError:`잘못된 탐색 JSON`,navIconPlaceholder:`아이콘 이름 (예: Users)`,dashboardEditor:`대시보드 편집기`,noWidgets:`위젯 없음. 위의 버튼을 클릭하여 추가하세요.`,widgetLayoutSize:`레이아웃 크기`,widgetWidth:`너비`,widgetHeight:`높이`,dashboardPreview:`대시보드 미리보기`,noWidgetsPreview:`미리 볼 위젯이 없습니다`,pageCanvasEditor:`페이지 캔버스 편집기`,emptyPage:`빈 페이지. 위의 버튼을 클릭하여 컴포넌트를 추가하세요.`,pagePreview:`페이지 미리보기`,noComponentsPreview:`미리 볼 컴포넌트가 없습니다`,modePage:`페이지`,modeDashboard:`대시보드`,undo:`실행 취소`,redo:`다시 실행`,brandingEditor:`브랜딩 편집기`,brandingExport:`JSON 내보내기`,brandingImport:`JSON 가져오기`,brandingPreview:`미리보기`,brandingSampleButton:`샘플 버튼`,brandingSampleText:`브랜드 테마의 외관입니다.`,colorPalette:`색상 팔레트`,fontFamily:`글꼴 패밀리`,fontDefault:`기본값 (시스템)`,modeLight:`밝음`,modeDark:`어두움`,mobilePreview:`모바일 미리보기`,objectManager:{title:`오브젝트 관리자`,addObject:`새 오브젝트`,searchPlaceholder:`오브젝트 검색…`,noObjects:`오브젝트를 찾을 수 없습니다.`,objectName:`API 이름`,objectLabel:`레이블`,pluralLabel:`복수 레이블`,icon:`아이콘`,selectIcon:`아이콘 선택…`,group:`그룹`,noGroup:`그룹 없음`,sortOrder:`정렬 순서`,enabled:`활성화됨`,relationships:`관계`,systemBadge:`시스템`,fieldCount:`{{count}}개 필드`,ungrouped:`그룹 없음`,deleteConfirmTitle:`오브젝트를 삭제하시겠습니까?`,deleteConfirmMessage:`이 오브젝트와 모든 필드가 영구적으로 삭제됩니다. 이 작업은 취소할 수 없습니다.`},fieldDesigner:{title:`필드 디자이너`,addField:`새 필드`,searchPlaceholder:`필드 검색…`,allTypes:`모든 유형`,noFields:`필드를 찾을 수 없습니다.`,fieldName:`API 이름`,fieldLabel:`레이블`,fieldType:`유형`,fieldGroup:`그룹`,description:`설명`,required:`필수`,unique:`고유`,readOnly:`읽기 전용`,hidden:`숨김`,indexed:`인덱스됨`,externalId:`외부 ID`,trackHistory:`기록 추적`,defaultValue:`기본값`,placeholder:`자리 표시자`,referenceTo:`참조 대상`,formula:`수식`,options:`옵션`,addOption:`옵션 추가`,validationRules:`유효성 검사 규칙`,addRule:`규칙 추가`,systemBadge:`시스템`,ungrouped:`일반`,deleteConfirmTitle:`필드를 삭제하시겠습니까?`,deleteConfirmMessage:`필드가 영구적으로 삭제됩니다. 이 필드의 기존 데이터는 손실됩니다.`,basicSection:`기본`,typeSpecificSection:`유형 설정`,advancedSection:`고급`,typeCategory:{text:`텍스트`,number:`숫자`,date:`날짜 및 시간`,choice:`선택`,relation:`관계`,advanced:`고급`}}},console:{saveAdvisoryTitle:`저장되었습니다 — 작성 검사에서 {{count}}건의 권장 사항이 발견되었습니다`,settingsHub:{title:`설정`,subtitle:`워크스페이스, 연동, 기능 플래그를 구성합니다.`,loadError:`설정을 불러오지 못했습니다`,empty:`등록된 설정이 없습니다. 플러그인은 SettingsService를 통해 설정 매니페스트를 등록할 수 있습니다.`,settingsCount:`설정 {{n}}개`,beta:`베타`,categories:{Workspace:`워크스페이스`,Communication:`커뮤니케이션`,Security:`보안`,Infrastructure:`인프라`,Beta:`베타`,Other:`기타`}},objectData:{badge:`데이터`,description:`URL로 정의된 데이터 구간 — 저장된 뷰에 연결되어 있지 않습니다.`,filteredBy:`필터 조건`,removeFilter:`필터 {{field}} 제거`,saveAsView:`뷰로 저장`,noAccessTitle:`접근이 거부되었습니다`,noAccess:`이 데이터를 볼 권한이 없습니다.`},identityImport:{policyTitle:`가져온 사용자의 로그인 설정`,policy:{auto:`자동(권장)`,invite:`초대 보내기`,temporary:`임시 비밀번호`,none:`비밀번호 없음(ID만)`},policyHint:{auto:`연락 가능한 사용자에게는 초대(이메일 또는 SMS)를 보내고, 연락할 수 없는 사용자에게는 일회용 비밀번호를 발급해 결과 화면에 한 번만 표시합니다. 이메일/SMS 서비스 유무와 관계없이 동작합니다.`,invite:`생성된 모든 사용자에게 비밀번호 설정 이메일(전화번호만 있는 행에는 초대 SMS)을 보냅니다. 이메일/SMS 서비스 구성이 필요하며, 연락할 수 없는 행은 실패합니다.`,temporary:`이메일/SMS가 없는 환경용: 생성된 모든 사용자에게 일회용 비밀번호를 발급해 결과 화면에 한 번만 표시합니다. 첫 로그인 시 변경해야 합니다.`,none:`사용자는 먼저 전화 OTP, 매직 링크 또는 비밀번호 재설정 링크로 로그인한 뒤 직접 비밀번호를 설정합니다.`},passwordsNote:`임시 비밀번호 — 한 번만 표시되며 저장되지 않습니다. 지금 저장하세요. 각 사용자는 첫 로그인 시 변경해야 합니다.`,passwordsMore:`이후 항목은 생략되었습니다 — 다운로드를 이용하세요.`,passwordsDownload:`CSV 다운로드`},ai:{usage:{title:`AI 사용량`,meterBuild:`빌드`,meterAsk:`질문`,statusOk:`여유가 충분합니다`,statusLow:`얼마 남지 않았습니다`,statusFull:`한도에 도달했습니다`,resetsDaily:`오늘 밤 초기화됩니다`,resetsMonthly:`다음 주기에 초기화됩니다`,ctaUpgrade:`업그레이드하고 계속하기`,ctaTopUp:`크레딧을 추가하고 계속하기`,ariaLabel:`AI 사용량: {{status}}`},workspaceTitle:`AI 워크스페이스`,workspaceSubtitle:`질문하고, 살펴보고, 대화를 이어가세요`,openChats:`채팅 열기`,chats:`채팅`,chatsDescription:`AI 대화를 살펴보고 관리합니다.`,share:`공유`,shareTitle:`이 대화 공유`,shareDisabledTitle:`공유하려면 먼저 대화를 시작하세요`,newChat:`새로 만들기`,searchChats:`채팅 검색…`,noChatsYet:`아직 채팅이 없습니다`,noChatsDescription:`새 대화를 시작하면 여기에 표시됩니다.`,noMatchingChats:`일치하는 채팅이 없습니다.`,newConversation:`새 대화`,renameConversation:`대화 이름 변경`,deleteConversation:`대화 삭제`,saveRename:`이름 저장`,cancelRename:`이름 변경 취소`,loadingHistory:`대화 기록을 불러오는 중…`,conversationReady:`대화 준비 완료`,preparingConversation:`새 대화를 준비하는 중`,offlineDemoMode:`오프라인 데모 모드 — 에이전트 목록을 사용할 수 없습니다`,sendFailedRateLimited:`메시지를 너무 빠르게 보내고 있습니다. 메시지는 아래에 보관되어 있습니다 — 잠시 후 다시 시도하세요.`,sendFailedGeneric:`메시지를 보내지 못했습니다. 아래에 보관되어 있습니다 — 다시 시도해 주세요.`,askAgent:`{{agent}}에게 질문…`,assistant:`어시스턴트`,liveCanvas:`실시간 미리보기 — {{app}}(초안)`,liveCanvasUnlisted:`실시간 앱 — {{app}}(게시 전까지 비공개)`,loadingAgents:`에이전트를 불러오는 중…`,askAnything:`무엇이든 물어보세요…`,emptyTitle:`대화 시작하기`,emptyDescription:`무엇이든 물어보세요 — 어시스턴트는 현재 앱 컨텍스트에 접근할 수 있습니다.`,switchAssistant:`어시스턴트 전환`,chooseAgent:`어시스턴트 선택…`,empty:{build:{title:`AI로 빌드`,description:`앱이나 워크플로를 일상 언어로 설명해 주세요 — 객체, 화면, 자동화를 초안으로 만들어 드리면 검토 후 게시하시면 됩니다.`},ask:{title:`데이터에 질문하기`,description:`레코드에 대해 질문하세요 — 접근 가능한 데이터의 개수, 목록, 요약을 알려 드립니다.`},editApp:{title:`“{{app}}” 편집 중`,titleGeneric:`이 앱 편집`,description:`무엇을 바꿀까요? 이 앱을 그 자리에서 수정합니다 — 필드, 객체, 뷰, 자동화를 추가하거나 기존 내용을 조정할 수 있습니다.`}},clearConversation:`지우기`,sendHint:`눌러 전송`,agentActivity:`에이전트 활동`,toolCompleted:`완료됨`,toolRunning:`실행 중`,toolAwaitingApproval:`승인 대기 중`,toolFailed:`실패`,toolDetailsHidden:`이 보기에서는 도구 입력과 원본 결과가 숨겨집니다.`,copy:`복사`,copied:`복사됨`,regenerate:`다시 생성`,model:`모델`,submit:`보내기`,uploadFiles:`파일 업로드`,stopResponse:`응답 중지`,trace:`추적`,viewTrace:`추적 보기`,nextSteps:`다음 단계`,publishDrafts:`게시`,publishOk:`게시했습니다 — 객체가 이제 활성화되었습니다.`,seedWarn:`게시했지만 일부 샘플 데이터를 불러오지 못했습니다.`,openBuiltApp:`앱 열기`,designBuiltApp:`Studio에서 디자인`,previewDraft:`미리보기`,previewApp:`앱 미리보기`,resizeSplit:`채팅과 미리보기 크기 조정`,hideChats:`채팅 숨기기`,showChats:`채팅 표시`,planTitle:`제안된 계획`,planQuestions:`빌드 전에 확인`,planAssumptions:`가정`,planApproveHint:`회신하여 이 계획을 승인하거나 조정하세요.`,planApprove:`빌드하기`,planAdjust:`조정`,justNow:`방금`,minutesAgo:`{{count}}분 전`,hoursAgo:`{{count}}시간 전`,daysAgo:`{{count}}일 전`,agentLabels:{ask:`질문`,build:`빌드`,dataChat:`어시스턴트`,metadataAssistant:`메타데이터 어시스턴트`},suggestions:{dataChat:{userCount:`시스템에 사용자가 몇 명인가요? 이메일도 나열해 주세요.`,recentRecords:`가장 최근에 생성된 레코드 5건을 보여 주세요.`,recordCounts:`객체별 레코드 수를 세어 주세요.`},metadataAssistant:{buildCrm:`영업 CRM을 만들어 줘 — 고객, 담당자, 단계별로 합계를 낼 수 있는 거래 파이프라인.`,buildApp:`프로젝트 트래커를 만들어 줘 — 프로젝트, 담당자와 마감일이 있는 작업, 상태별 보드.`,buildFlow:`고객 지원 데스크를 설계해 줘 — 우선순위가 있는 티켓, 상태 워크플로, 고객 연결.`,buildInventory:`재고 앱을 만들어 줘 — 제품, 재고 수량, 공급업체, 재고 부족 표시.`,buildRecruiting:`채용 트래커를 만들어 줘 — 지원자, 채용 중인 직무, 면접 단계, 메모.`},generic:{help:`무엇을 도와줄 수 있나요?`,availableObjects:`사용 가능한 데이터 객체를 나열해 주세요.`,recentActivity:`내 최근 활동을 요약해 주세요.`},editApp:{addField:`객체 중 하나에 필드를 추가해 주세요.`,addObject:`새 객체를 추가하고 기존 객체와 연결해 주세요.`,addDashboard:`핵심 지표를 위한 대시보드를 추가해 주세요.`,addAutomation:`자동화를 추가해 주세요 — 승인, 상태 흐름 또는 알림.`}},changesTitle:`변경 확인`,changesConfirmed:`확인됨`,changesConfirm:`변경 확정`,changesConfirmHint:`회신하여 이 변경을 확정하거나 조정하세요.`,changeVerb:{createObject:`객체 생성`,addField:`필드 추가`,modifyField:`필드 수정`,deleteField:`필드 삭제`,createMetadata:`생성`,updateMetadata:`수정`,createSeed:`샘플 데이터 생성`,createPackage:`앱 패키지 생성`},collapseToDock:`사이드 패널로 접기`,switchApp:`앱 전환`,switchAppLabel:`앱별 빌드 대화`,newApp:`새 앱`,connectionWaiting:`서버를 기다리는 중…`,connectionStalled:`계속 처리하는 중…`,connectionOffline:`연결이 끊어졌습니다 — 다시 연결하는 중…`,designingPlan:`앱을 설계하는 중…`,designingPlanHint:{data:`추적할 데이터를 정리하는 중…`,objects:`객체와 필드를 구성하는 중…`,relations:`관련 레코드를 연결하는 중…`,lookups:`관계와 조회 필드를 설정하는 중…`,views:`화면과 뷰를 계획하는 중…`,forms:`양식과 목록을 배치하는 중…`,defaults:`합리적인 기본값과 검증을 추가하는 중…`,dashboard:`추적용 대시보드를 스케치하는 중…`,review:`구조가 잘 맞물리는지 다시 확인하는 중…`,finalize:`계획을 정리하는 중…`},planBuilding:`빌드 중…`,planBuilt:`빌드 완료`,planDeferred:`아직 빌드하지 않음`,planReady:`계획이 준비되었습니다. 지금 빌드하거나 조정할 부분을 알려주세요.`,published:`게시했습니다`,publishFailed:`게시에 실패했습니다`,unavailableTitle:`AI 어시스턴트를 사용할 수 없습니다`,unavailableDescription:`이 배포에는 AI 어시스턴트가 활성화되어 있지 않습니다. 나머지 기능은 정상적으로 작동합니다.`,unavailableError:`AI 서비스에 연결할 수 없습니다. 일시적으로 오프라인일 수 있습니다 — 다시 시도하거나 홈으로 돌아가세요.`,unavailableRetry:`다시 시도`,unavailableHome:`홈으로 돌아가기`,dock:{title:`어시스턴트`,description:`AI 어시스턴트 채팅`,resize:`채팅 크기 조정`,collapse:`채팅 접기`,maximize:`전체 페이지로 열기`,open:`어시스턴트 열기`},group:{today:`오늘`,yesterday:`어제`,previous7Days:`지난 7일`,previous30Days:`지난 30일`,older:`이전`}},title:`ObjectStack 콘솔`,initializing:`애플리케이션 초기화 중…`,loadingHint:`새 환경을 설정하는 데 시간이 조금 걸릴 수 있습니다.`,breadcrumb:{dashboards:`대시보드`,pages:`페이지`,reports:`보고서`,system:`시스템`},settingsView:{backToHub:`전체 설정`,back:`뒤로`,noNamespace:`선택된 네임스페이스가 없습니다.`,loadError:`설정을 불러오지 못했습니다`,saved:`설정이 저장되었습니다`,saveFailed:`저장에 실패했습니다`,lockedByEnv:`환경에 의해 잠김: {{key}}`,lockedByEnvNoKey:`환경에 의해 잠김`,actionSucceeded:`작업 성공`,actionFailed:`작업 실패`,discard:`버리기`,saveChanges:`변경사항 저장`,unsavedCount:`저장되지 않은 변경 {{count}}개`,unsavedCount_one:`저장되지 않은 변경 {{count}}개`,unsavedCount_other:`저장되지 않은 변경 {{count}}개`,cryptoRefusalTitle:`이 배포는 시크릿을 암호화할 수 없습니다`,cryptoRefusalSubjectSuffix:`은(는) 암호화 대상으로 선언되어 아무것도 기록되지 않았습니다.`,cryptoRefusalNoSubject:`암호화 대상으로 선언된 값이 거부되어 아무것도 기록되지 않았습니다.`,cryptoRefusalToast:`시크릿을 암호화할 수 없습니다: {{subject}}`,cryptoRefusalToastNoSubject:`시크릿을 암호화할 수 없습니다`},loadingSteps:{connecting:`데이터 소스에 연결 중`,loadingConfig:`설정 로드 중`,preparingWorkspace:`워크스페이스 준비 중`},error:{connectionFailed:`서버에 연결할 수 없습니다`,serverUnreachable:`서버 {{url}}에 연결할 수 없습니다.`,checkServer:`네트워크 연결을 확인하거나 백엔드가 실행 중인지 확인하세요.`,timeout:`연결 시간이 초과되었습니다 (10초).`},actions:{retry:`재시도`,retrying:`재시도 중…`},serverAction:{openingTitle:`여는 중…`,openingBody:`여는 중… 잠시 기다려 주세요.`,popupBlockedTitle:`팝업이 차단되었습니다`,popupBlockedDescription:`브라우저가 새 탭 열기를 차단했습니다.`,popupBlockedAction:`새 탭에서 열기`},shortcuts:{title:`키보드 단축키`,description:`사용 가능한 모든 키보드 단축키 빠른 참조.`,groups:{general:`일반`,navigation:`탐색`,dataViews:`데이터 뷰`,aiChat:`AI 어시스턴트`,preferences:`환경설정`},openCommandPalette:`명령 팔레트 열기`,showShortcuts:`키보드 단축키 표시`,closeDialog:`대화상자 / 패널 닫기`,toggleSidebar:`사이드바 전환`,focusSearch:`검색에 포커스`,createRecord:`새 레코드 생성`,refreshData:`데이터 새로고침`,editRecord:`선택한 레코드 편집`,newChat:`새 채팅`,toggleChatsList:`채팅 목록 전환`,toggleDarkMode:`다크 모드 전환`},commandPalette:{title:`명령 팔레트`,placeholder:`명령어를 입력하거나 검색…`,noResults:`결과를 찾을 수 없습니다.`,objects:`객체`,dashboards:`대시보드`,pages:`페이지`,reports:`보고서`,switchApp:`앱 전환`,current:`현재`,preferences:`환경설정`,lightTheme:`라이트 테마`,darkTheme:`다크 테마`,systemTheme:`시스템 테마`,actions:`작업`,openFullSearch:`전체 검색 페이지 열기`,createApp:`새 앱 만들기`,searching:`검색 중…`,records:`레코드`,recentRecords:`최근 본 항목`},errors:{somethingWentWrong:`문제가 발생했습니다`,unexpectedError:`이 뷰를 렌더링하는 중 예기치 않은 오류가 발생했습니다.`,tryAgain:`다시 시도`,goHome:`홈으로 이동`,errorDetails:`오류 상세정보 (개발 모드 전용)`},notFound:{title:`페이지를 찾을 수 없습니다`,description:`접속한 URL이 이 앱의 어떤 뷰와도 일치하지 않습니다.`,back:`뒤로`},theme:{toggle:`테마 전환`,light:`라이트`,dark:`다크`,system:`시스템`},objectView:{viewTypeTree:`트리`,viewTypeTreeDesc:`상위 필드를 기준으로 자기 참조 레코드를 계층 구조로 중첩합니다.`,parentField:`상위 필드`,parentFieldHelp:`계층 구조를 정의하는 상위 레코드(같은 객체)를 가리키는 필드입니다. 자기 참조 필드만 사용할 수 있습니다.`,viewName:`이름`,viewNameHelp:`머신 키(snake_case)입니다. 제목에서 자동으로 채워집니다 — 원하면 수정하세요.`,viewNameRequired:`키를 입력하세요(소문자, 숫자, 밑줄). 비라틴 문자 제목에서는 자동으로 채워지지 않습니다.`,viewNameInvalid:`소문자, 숫자, 밑줄을 사용하고 문자 또는 밑줄로 시작하세요.`,systemViewReadonly:`시스템 보기는 코드에 정의되어 있어 읽기 전용입니다.`,cannotEditMetaView:`이 보기는 코드에 정의된 기본 제공 보기이므로 변경할 수 없습니다.`,cannotDeleteMetaView:`이 보기는 코드에 정의된 기본 제공 보기이므로 삭제할 수 없습니다.`,expandToPage:`전체 페이지로 열기`,objectNotFound:`객체를 찾을 수 없음`,objectNotFoundDescription:`객체 "{{objectName}}"이(가) 현재 구성에 존재하지 않습니다.`,objectNotFoundHint:`앱 탐색 설정을 확인하거나 사이드바에서 다른 객체를 선택하세요.`,filterOrNotSavable:`이 필터는 조건 사이에 OR을 사용하며, 저장된 뷰에는 아직 저장할 수 없습니다. 현재 목록에는 계속 적용됩니다. 뷰에 저장하려면 OR 그룹을 해제하세요.`,filterNestedNotSavable:`이 필터는 중첩된 조건 그룹을 사용하며, 저장된 뷰에는 저장할 수 없습니다. 뷰에 저장하려면 단일 조건 목록으로 펼치세요.`,allRecords:`모든 레코드`,exitDesignMode:`디자인 모드 종료`,enterDesignMode:`디자인 모드 시작`,metadataInspector:`메타데이터 인스펙터`,editView:`뷰 편집`,addView:`뷰 추가`,designTools:`디자인 도구`,new:`새로 만들기`,configureView:`뷰 구성`,closePanel:`패널 닫기`,page:`페이지`,pageConfigHint:`도구 모음, 탐색 및 뷰 셸 설정`,listConfigHint:`이 목록 유형의 데이터 렌더링, 열 및 모양`,general:`일반`,generalHint:`보기 제목, 설명 및 유형`,toolbar:`도구 모음`,toolbarHint:`검색, 필터, 정렬, 그룹화 및 밀도 전환`,toolbarEnabledCount:`{{total}}개 중 {{count}}개 활성화`,navigationSection:`탐색`,navigationHint:`행 클릭 동작 및 상세 보기 설정`,records:`레코드`,recordsHint:`선택 모드, 레코드 추가 및 인라인 편집`,exportPrint:`내보내기 및 인쇄`,exportPrintHint:`내보내기 형식, 인쇄 및 레코드 수 표시`,showAllFields:`모두 표시`,hideAllFields:`모두 숨기기`,searchFields:`필드 검색…`,title:`제목`,description:`설명`,data:`데이터`,source:`소스`,columns:`열`,filterBy:`필터 기준`,sortBy:`정렬 기준`,appearance:`외관`,showDescription:`설명 표시`,viewType:`뷰 유형`,userFilters:`사용자 필터`,enableSearch:`검색 활성화`,enableFilter:`필터 활성화`,enableSort:`정렬 활성화`,enableHideFields:`필드 숨기기 활성화`,enableGroup:`그룹 활성화`,enableColor:`색상 활성화`,enableDensity:`밀도 활성화`,userActions:`사용자 작업`,addRecordViaForm:`양식으로 레코드 추가`,advanced:`고급`,allowExport:`내보내기 허용`,recordCount:`{{count}}개 레코드`,noDescription:`설명 없음`,none:`없음`,columnsConfigured:`{{count}}개 열`,save:`저장`,discard:`취소`,createView:`뷰 생성`,newView:`새 뷰`,typeOptions:`유형 옵션`,groupByField:`그룹화 필드`,startDateField:`시작 날짜 필드`,titleField:`제목 필드`,latitudeField:`위도 필드`,longitudeField:`경도 필드`,imageField:`이미지 필드`,dateField:`날짜 필드`,selectField:`필드 선택…`,gridOptionsHint:`그리드 뷰는 위에서 구성된 열을 사용합니다.`,groupBy:`그룹화 기준`,prefixField:`접두사 필드`,fields:`필드`,fieldsVisible:`{{count}}개 표시`,sortsCount:`{{count}}개 정렬`,filtersCount:`{{count}}개 필터`,endDateField:`종료 날짜 필드`,color:`색상`,fieldTextColor:`필드 텍스트 색상`,rowHeight:`행 높이`,wrapHeaders:`헤더 줄바꿈`,showFieldDescriptions:`필드 설명 표시`,collapseAllByDefault:`기본적으로 모두 접기`,striped:`줄무늬 행`,bordered:`테두리 셀`,inlineEdit:`인라인으로 레코드 편집`,addDeleteRecordsInline:`인라인으로 레코드 추가/삭제`,clickIntoRecordDetails:`레코드 상세 보기 클릭`,navigationMode:`탐색 모드`,navigationWidth:`탐색 너비`,navigationWidthHint:`서랍, 모달, 분할 탐색 모드에서 사용 가능`,openNewTab:`새 탭에서 열기`,openNewTabHint:`페이지 및 새 창 탐색 모드에서 사용 가능`,import:`가져오기`,importTitle:`CSV에서 가져오기`,importedToast:`{{count}}개 행 가져옴.`,importedWithSkipped:`{{ok}}개 행 가져옴; {{skipped}}개 건너뜀.`,showAdvancedSettings:`고급 설정 표시`,showFewerSettings:`설정 줄이기`,createViewDesc:`보기 유형을 선택하고 이름을 지정하세요. 모든 설정은 나중에 변경할 수 있습니다.`,cancel:`취소`,create:`생성`,delete:`삭제`,deleteViewTitle:`보기 삭제`,deleteViewConfirm:`"{{name}}" 보기를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.`,bulkDeleteConfirm:`선택한 {{count}}개 레코드를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.`,duplicateViewName:`해당 이름의 보기가 이미 존재합니다.`,viewTypeGrid:`그리드`,viewTypeGridDesc:`레코드의 스프레드시트 형식 테이블.`,viewTypeKanban:`칸반`,viewTypeKanbanDesc:`단일 선택 필드로 열에 그룹화된 카드.`,viewTypeCalendar:`캘린더`,viewTypeCalendarDesc:`월별 캘린더에 날짜로 배치된 레코드.`,viewTypeGallery:`갤러리`,viewTypeGalleryDesc:`첨부 파일 필드의 대형 이미지 카드.`,viewTypeTimeline:`타임라인`,viewTypeTimelineDesc:`수평 시간 축을 따른 레코드.`,viewTypeGantt:`간트`,viewTypeGanttDesc:`시작/종료 및 종속성이 있는 프로젝트 막대.`,viewTypeMap:`지도`,viewTypeMapDesc:`위도/경도 필드의 지리적 마커.`,viewTypeChart:`차트`,viewTypeChartDesc:`집계된 막대형/꺾은선형/원형 차트.`,groupByFieldHelp:`칸반 보드는 필드 값에 따라 레코드를 열로 그룹화합니다.`,startDateFieldHelp:`캘린더는 이 날짜에 해당하는 셀에 레코드를 배치합니다.`,ganttStartDateFieldHelp:`각 간트 막대의 왼쪽 가장자리는 이 날짜를 사용합니다.`,ganttEndDateFieldHelp:`각 간트 막대의 오른쪽 가장자리는 이 날짜를 사용합니다.`,timelineDateFieldHelp:`레코드는 이 날짜를 기반으로 타임라인에 배치됩니다.`,latitudeFieldHelp:`위도를 포함하는 필드 (지리 필드만 해당).`,longitudeFieldHelp:`경도를 포함하는 필드 (지리 필드만 해당).`,imageFieldHelp:`갤러리 표지는 이 이미지 또는 첨부 파일 필드에서 가져옵니다.`,selectOption:`선택…`,noEligibleFieldForType:`해당 유형의 적합한 필드가 없습니다. 먼저 개체에 추가하세요.`,viewTypeUnavailable:`이 개체에는 "{{field}}"로 사용할 수 있는 필드가 없습니다.`,viewTypeUnavailableShort:`이 개체에서 지원되지 않습니다.`,chartType:`차트 유형`,chartTypeHelp:`데이터 렌더링 방식을 결정합니다.`,chartTypeBar:`막대 차트`,chartTypeLine:`꺾은선형 차트`,chartTypePie:`원형 차트`,chartTypeArea:`영역 차트`,chartTypeScatter:`분산형 차트`,xAxisField:`X축 필드`,xAxisFieldHelp:`범주형 또는 시간 차원.`,yAxisField:`Y축 필드`,yAxisFieldHelp:`집계할 숫자 필드.`,selectionMode:`선택 모드`,selectionNone:`없음`,selectionSingle:`단일`,selectionMultiple:`다중`,pageSize:`페이지 크기`,pageSizeOptions:`페이지 크기 옵션`,exportFormats:`내보내기 형식`,exportMaxRecords:`최대 레코드 수`,exportIncludeHeaders:`헤더 포함`,exportFileNamePrefix:`파일 이름 접두사`,searchableFields:`검색 가능한 필드`,filterableFields:`필터링 가능한 필드`,resizableColumns:`크기 조절 가능한 열`,densityCompact:`컴팩트`,densityComfortable:`보통`,densitySpacious:`넓음`,densityMode:`밀도 모드`,hiddenFields:`숨겨진 필드`,rowActions:`행 작업`,bulkActions:`일괄 작업`,sharing:`공유`,sharingEnabled:`공유 활성화`,sharingVisibility:`가시성`,addRecordEnabled:`레코드 추가 활성화`,addRecordPosition:`위치`,addRecordMode:`모드`,addRecordFormView:`양식 보기`,conditionalFormatting:`조건부 서식`,addRule:`규칙 추가`,quickFilters:`빠른 필터`,addQuickFilter:`빠른 필터 추가`,ufElements:`요소`,ufDropdown:`드롭다운`,ufTabs:`탭`,ufToggle:`토글`,ufAddField:`+ 필터 필드 추가…`,ufNoFields:`사용 가능한 필드 없음`,ufAddTab:`+ 탭 추가`,ufTabLabel:`레이블`,ufShowAllRecords:`"모든 레코드" 탭 표시`,ufAllowAddTab:`탭 추가 허용`,showRecordCount:`레코드 수 표시`,allowPrinting:`인쇄 허용`,virtualScroll:`가상 스크롤`,emptyStateTitle:`빈 상태 제목`,emptyStateMessage:`빈 상태 메시지`,emptyStateIcon:`빈 상태 아이콘`,ariaLabel:`ARIA 레이블`,ariaDescribedBy:`ARIA 설명`,ariaLive:`ARIA 라이브`,accessibility:`접근성`,viewTabs:`보기 탭`},localeSwitcher:{label:`언어`},search:`검색…`,nav:{pinItem:`{{name}} 고정`,unpinItem:`{{name}} 고정 해제`,dragToReorder:`드래그하여 순서 변경`,favorites:`즐겨찾기`}},auth:{setPassword:{title:`복구 비밀번호 설정`,description:`싱글 사인온으로 로그인했습니다. SSO를 사용할 수 없게 되더라도 이 환경에 직접 로그인할 수 있도록 로컬 비밀번호를 설정하세요.`,email:`이메일`,newPassword:`새 비밀번호`,confirmPassword:`비밀번호 확인`,submit:`비밀번호 설정`,submitting:`저장 중…`,success:`로컬 비밀번호가 설정되었습니다`,failed:`비밀번호를 설정하지 못했습니다`,passwordsMismatch:`비밀번호가 일치하지 않습니다`,noSession:`세션이 만료되었습니다.`,backToSignIn:`다시 로그인`},login:{signingIn:`로그인하는 중…`,ssoHandoff:`{{target}}(으)로 계속`,devAdminHint:{title:`개발 인스턴스`,body:`시드된 개발용 관리자 계정으로 로그인하세요:`,dismiss:`닫기`},title:`계정에 로그인`,description:`이메일과 비밀번호를 입력하세요`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,passwordLabel:`비밀번호`,passwordPlaceholder:`비밀번호를 입력하세요`,forgotPasswordText:`비밀번호를 잊으셨나요?`,submitButton:`로그인`,submittingButton:`로그인 중…`,noAccountText:`계정이 없으신가요?`,signUpText:`회원가입`,errors:{oauthCallbackFailed:`싱글 사인온을 완료하지 못했습니다 — 로그인 링크가 만료되었거나 이미 사용되었습니다. 다시 시도해 주세요.`,invalidCredentials:`잘못된 이메일 또는 비밀번호입니다. 다시 시도하세요.`,emailNotVerified:`로그인하기 전에 이메일을 확인하세요.`},emailOrPhoneLabel:`이메일 또는 전화번호`,emailOrPhonePlaceholder:`name@example.com 또는 +1 555 000 0000`,phoneLabel:`전화번호`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`인증 코드`,otpCodePlaceholder:`6자리 코드`,sendOtpButton:`코드 받기`,resendOtpCountdownText:`{seconds}초 후 재전송`,usePhoneOtpText:`인증 코드로 로그인`,usePasswordSignInText:`비밀번호로 로그인하기`},register:{title:`계정 만들기`,description:`정보를 입력하여 시작하세요`,nameLabel:`이름`,namePlaceholder:`홍길동`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,passwordLabel:`비밀번호`,passwordPlaceholder:`비밀번호 생성 (최소 8자)`,confirmPasswordLabel:`비밀번호 확인`,confirmPasswordPlaceholder:`비밀번호를 다시 입력하세요`,passwordMismatchError:`비밀번호가 일치하지 않습니다`,passwordTooShortError:`비밀번호는 최소 8자 이상이어야 합니다`,submitButton:`계정 만들기`,submittingButton:`계정 생성 중…`,hasAccountText:`이미 계정이 있으신가요?`,signInText:`로그인`,errors:{userExists:`해당 이메일로 이미 계정이 존재합니다. 로그인해 보세요.`},verifyInbox:{title:`받은 편지함을 확인하세요`,description:`{{email}}에 확인 링크를 보냈습니다. 링크를 클릭하여 계정을 활성화하세요.`,resend:`확인 이메일 다시 보내기`,resending:`전송 중…`,resent:`확인 이메일이 전송되었습니다.`,backToSignIn:`로그인으로 돌아가기`}},forgotPassword:{title:`비밀번호 재설정`,description:`이메일 주소를 입력하시면 비밀번호 재설정 링크를 보내드립니다`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,submitButton:`재설정 링크 보내기`,submittingButton:`전송 중…`,successTitle:`이메일을 확인하세요`,successDescription:`{{email}}(으)로 비밀번호 재설정 링크를 전송했습니다. 수신함을 확인해주세요.`,backToSignInText:`로그인으로 돌아가기`,rememberPasswordText:`비밀번호가 기억나시나요?`,signInText:`로그인`,phoneLabel:`전화번호`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`인증 코드`,otpCodePlaceholder:`6자리 코드`,sendOtpButton:`코드 받기`,resendOtpCountdownText:`{seconds}초 후 재전송`,newPasswordLabel:`새 비밀번호`,newPasswordPlaceholder:`새 비밀번호를 입력하세요`,resetButton:`비밀번호 재설정`,usePhoneResetText:`SMS 코드로 재설정`,useEmailResetText:`이메일로 재설정하기`,phoneSuccessTitle:`비밀번호가 재설정되었습니다`,phoneSuccessDescription:`비밀번호가 재설정되었습니다. 이제 새 비밀번호로 로그인할 수 있습니다.`},resetPassword:{title:`새 비밀번호 설정`,description:`이전에 사용하지 않은 비밀번호를 선택하세요.`,newPassword:`새 비밀번호`,confirmPassword:`비밀번호 확인`,submit:`비밀번호 업데이트`,submitting:`업데이트 중…`,success:`비밀번호가 업데이트되었습니다`,failed:`재설정 실패`,invalidToken:`이 재설정 링크는 유효하지 않거나 만료되었습니다.`,missingToken:`재설정 링크가 없거나 만료되었습니다`,passwordsMismatch:`비밀번호가 일치하지 않습니다`,requestNewLink:`새 링크 요청`},verifyEmail:{title:`이메일 주소 확인`,description:`이메일 주소로 확인 링크를 보냈습니다. 링크를 클릭하여 계정을 확인하세요.`,sentTo:`전송 대상:`,verifyingTitle:`확인 중…`,verifyingDescription:`이메일을 확인하고 있습니다. 잠시 기다리세요.`,successTitle:`이메일 확인됨`,successDescription:`이메일이 확인되었습니다. 이제 로그인할 수 있습니다.`,errorTitle:`확인 실패`,errorDescription:`확인에 실패했습니다. 새 링크를 요청하세요.`,missingToken:`확인 링크에 토큰이 없습니다.`,emailMissing:`이메일 주소 누락`,resendButton:`확인 이메일 다시 보내기`,resending:`전송 중…`,resent:`이메일이 전송되었습니다! 받은 편지함을 확인하세요`,resentSuccess:`확인 이메일이 전송되었습니다!`,resentDescription:`받은 편지함을 확인하고 확인 링크를 클릭하세요.`,resendFailed:`확인 이메일을 다시 보낼 수 없습니다`,signInLink:`로그인으로 이동`,backToSignIn:`로그인으로 돌아가기`,backToLogin:`로그인으로 돌아가기`,checkSpam:`이메일을 받지 못하셨나요? 스팸 폴더를 확인하거나 지원팀에 문의하세요.`,or:`또는`,resendUnavailable:`이 환경에서는 이메일 발송이 구성되지 않았을 수 있습니다. 문제가 계속되면 지원팀에 문의하세요.`},setup:{welcomeTitle:`ObjectStack에 오신 것을 환영합니다`,description:`설정을 완료하려면 첫 번째 소유자 계정을 만드세요.`,yourName:`이름`,orgName:`조직 이름`,orgNamePlaceholder:`예시 회사`,emailLabel:`이메일`,emailPlaceholder:`name@example.com`,passwordLabel:`비밀번호`,passwordHint:`최소 8자`,submit:`소유자 계정 만들기`,submitting:`설정 중…`,failed:`설정 실패`},device:{title:`새 장치 승인`,subtitle:`{{email}}으로 로그인하기 위해 이 장치를 승인하세요.`,userCodeLabel:`장치 코드`,requesterLabel:`연결 요청 출처`,approveWarning:`방금 직접 시작한 연결인 경우에만 승인하세요. 승인하면 이 런타임이 조직의 비공개 패키지에 액세스할 수 있습니다.`,loggedInAs:`{{email}}으로 로그인됨`,approve:`장치 승인`,approving:`승인 중…`,approvedTitle:`장치가 승인되었습니다`,approvedDescription:`장치로 돌아갈 수 있습니다 — 곧 로그인될 것입니다.`,approveSuccess:`장치가 승인되었습니다`,approveSuccessDescription:`이 창을 닫을 수 있습니다.`,approveFailed:`승인 실패`,deny:`요청 거부`,denying:`거부 중…`,deniedTitle:`액세스 거부됨`,deniedDescription:`장치에 액세스 권한이 부여되지 않습니다.`,denyFailed:`요청을 거부할 수 없습니다`,invalidTitle:`잘못된 장치 링크`,invalidDescription:`URL에 장치 코드가 제공되지 않았습니다.`,loading:`로딩 중…`,cancel:`취소`,disabledTitle:`장치 승인이 활성화되지 않았습니다`,disabledDescription:`이 배포에는 장치 승인이 활성화되어 있지 않으므로 여기에서 이 장치를 승인할 수 없습니다.`},shell:{tenantHostHint:`이 작업 공간에 로그인하는 중입니다`},layout:{headline:`강력한 비즈니스 애플리케이션을 더 빠르게.`,subhead:`엔터프라이즈 데이터 관리, 워크플로, 분석을 위한 통합 플랫폼.`},remediation:{signOut:`대신 로그아웃`,password:{title:`비밀번호가 만료되었습니다`,fallbackMessage:`계속하려면 새 비밀번호를 설정하세요.`,current:`현재 비밀번호`,next:`새 비밀번호`,confirm:`새 비밀번호 확인`,submit:`비밀번호 변경 후 계속`,submitting:`업데이트 중…`,mismatch:`새 비밀번호가 일치하지 않습니다.`,failed:`비밀번호를 변경할 수 없습니다.`},mfa:{title:`2단계 인증 설정`,fallbackMessage:`계속하려면 조직 정책에 따라 인증 앱이 필요합니다.`,confirmPassword:`비밀번호 확인`,continue:`계속`,preparing:`준비 중…`,enrollFailed:`등록을 시작할 수 없습니다.`,scanTitle:`인증 앱으로 스캔`,scanBody:`Google Authenticator, 1Password, Authy 등으로 이 QR 코드를 스캔한 다음 6자리 코드를 입력하세요.`,backupTitle:`백업 코드 저장`,backupBody:`안전한 곳에 보관하세요. 기기를 분실한 경우 각 코드는 한 번씩 사용할 수 있습니다.`,codeLabel:`6자리 코드`,verify:`확인 후 계속`,verifying:`확인 중…`,invalidCode:`코드가 올바르지 않습니다. 다시 시도하세요.`}}},oauth:{consent:{title:`{{appName}}이(가) 계정에 액세스하려고 합니다`,request:`{{appName}}이(가) 권한을 요청합니다{{suffix}}.`,unknownApp:`어떤 애플리케이션`,willAllow:`이 앱은 다음을 할 수 있습니다:`,scope:{openid:`본인 확인`,profile:`기본 프로필(이름, 사진) 읽기`,email:`이메일 주소 읽기`,offlineAccess:`로그인 상태 유지(액세스 갱신)`},deny:`거부`,authorize:`허용`,submitting:`허용 중…`,granted:`액세스가 허용되었습니다`,denied:`액세스 거부됨`,noRedirect:`서버가 리디렉션 URL을 반환하지 않았습니다.`,failed:`동의 실패`,footer:`계정 설정에서 언제든지 액세스를 취소할 수 있습니다.`}},profile:{title:`프로필`,subtitle:`계정 설정을 관리하세요`,saving:`저장 중…`,avatar:{upload:`업로드`,replace:`변경`,remove:`제거`},info:{title:`개인 정보`,description:`이름을 업데이트하고 계정 정보를 확인하세요`,saved:`프로필이 성공적으로 업데이트되었습니다.`,name:`이름`,email:`이메일`,emailImmutable:`이메일은 변경할 수 없습니다.`,role:`역할`,save:`변경 사항 저장`},password:{changeTitle:`비밀번호 변경`,setTitle:`로컬 비밀번호 설정`,changeDescription:`이 환경에 로그인할 때 사용하는 비밀번호를 업데이트하세요.`,setDescription:`통합 인증(SSO)으로 로그인하셨습니다. 로컬 비밀번호를 설정하면 이 환경에서 이메일과 비밀번호로도 로그인할 수 있습니다.`,current:`현재 비밀번호`,new:`새 비밀번호`,password:`비밀번호`,confirm:`비밀번호 확인`,tooShort:`비밀번호는 8자 이상이어야 합니다`,mismatch:`비밀번호가 일치하지 않습니다`,enterCurrent:`현재 비밀번호를 입력하세요`,changed:`비밀번호가 변경되었습니다.`,localSet:`로컬 비밀번호가 설정되었습니다. 이제 이 환경에서 이메일과 비밀번호로 로그인할 수 있습니다.`,changeAction:`비밀번호 변경`,setAction:`비밀번호 설정`}},errors:{networkError:`네트워크 오류입니다. 연결을 확인해주세요.`,serverError:`서버 오류입니다. 나중에 다시 시도해주세요.`,notFound:`리소스를 찾을 수 없습니다.`,unauthorized:`이 작업을 수행할 권한이 없습니다.`,forbidden:`접근이 거부되었습니다.`,timeout:`요청 시간이 초과되었습니다. 다시 시도해주세요.`,unknown:`예기치 않은 오류가 발생했습니다.`},workspace:{label:`워크스페이스`,default:`내 워크스페이스`,switch:`워크스페이스 전환`,create:`워크스페이스 생성`,createTitle:`워크스페이스 만들기`,createDescription:`워크스페이스는 팀이 협업할 수 있는 공유 공간입니다.`,createButton:`워크스페이스 생성`,nameLabel:`워크스페이스 이름`,namePlaceholder:`예: Acme Inc`,slugLabel:`URL 슬러그`,slugHint:`URL에 사용됩니다. 소문자, 숫자, 하이픈만 사용 가능합니다.`,invite:`구성원 초대`,members:`구성원`,settings:`워크스페이스 설정`,multiOrgDisabled:`이 인스턴스에서는 새 조직을 만들 수 없습니다.`,createFailed:`워크스페이스를 만들지 못했습니다`},help:{onThisPage:`이 페이지에서`,keyboardShortcuts:`키보드 단축키`,appDocs:`이 앱의 문서`,allDocs:`전체 문서`,onlineDocs:`온라인 문서`},sidebar:{packageManagement:`패키지 관리`,searchNavigation:`내비게이션 검색…`,settings:`설정`,help:`도움말`,helpTooltip:`도움말 및 문서`,activityFeed:`활동 피드`,notifications:`알림`,approvals:`승인`,inbox:`받은 편지함`,inboxAriaLabel:`받은 편지함 열기`,area:`영역`,scope:`범위`,recent:`최근`,favorites:`즐겨찾기`,starred:`즐겨찾기`,removeFromFavorites:`즐겨찾기에서 {{name}} 제거`},topbar:{openAssistant:`{{name}} 어시스턴트 열기`,offline:`오프라인`,usersOnline:`현재 접속 중인 사용자`,switchView:`뷰 전환`,switchObject:`객체 전환`,connection:{connected:`연결됨`,connecting:`연결 중…`,reconnecting:`다시 연결 중…`,disconnected:`연결 끊김`,error:`연결 오류`},stage:{preview:`미리보기`,beta:`베타`,tooltip:`이 플랫폼은 미리보기 단계입니다 — 기능이 변경될 수 있습니다.`},aiAssistant:`AI 어시스턴트`,designInStudio:`Studio에서 디자인`},home:{build:{title:`앱 만들기`,subtitle:`처음부터 시작 — 객체, 폼, 자동화, 인터페이스를 설계합니다.`},template:{title:`템플릿으로 시작`,subtitle:`마켓플레이스에서 템플릿 앱을 설치하고 원하는 대로 바꾸세요.`},welcomeAdminDescription:`비즈니스를 한 문장으로 설명해 주세요 — AI가 객체, 화면, API, 에이전트 도구를 생성합니다. 왼쪽 메뉴에서 직접 설정할 수도 있습니다.`,welcomeAdminDescriptionNoBuild:`왼쪽 관리 메뉴에서 첫 애플리케이션을 설정하세요. 데이터가 쌓이면 AI 어시스턴트가 살펴보는 것을 도와줍니다.`,welcomeAdminDescriptionNoAi:`왼쪽 관리 메뉴에서 첫 애플리케이션을 설정하세요.`,noAppsTitle:`아직 애플리케이션이 없습니다`,noAppsDescription:`워크스페이스를 준비하고 있습니다 — 관리자가 공유한 앱이 여기에 표시됩니다.`,buildWithAI:`AI로 빌드`,askAI:`AI에게 질문`,recoveryReminder:{message:`싱글 사인온을 사용할 수 없을 때도 로그인할 수 있도록 복구 비밀번호를 설정하세요.`,cta:`비밀번호 설정`,dismiss:`닫기`},pendingDrafts:{message:`게시되지 않은 변경이 {{count}}건 있습니다 — 게시하면 반영됩니다.`,cta:`게시`,publishing:`게시하는 중…`,published:`게시했습니다! 변경 사항이 반영되었습니다.`,publishFailed:`게시에 실패했습니다`,nothing:`게시할 내용이 없습니다.`,probeWarn:`게시했지만 검증에서 문제를 발견했습니다.`,seedWarn:`게시했지만 일부 샘플 데이터를 불러오지 못했습니다.`,publishedVerified:`게시 및 검증 완료 — 샘플 데이터 {{count}}개 행이 반영되었습니다.`,capabilityWarn:`작성 검사: 기능 권한 참조 {{count}}개가 아무것도 가리키지 않습니다.`},title:`홈`,subtitle:`워크스페이스 대시보드`,nav:`홈`,allApps:`모든 애플리케이션`,yourApps:`내 앱`,showMoreApps:`더 보기`,showLess:`간략히`,continueEmpty:`열어본 항목이 여기에 표시됩니다.`,actionCenter:{title:`확인이 필요한 항목`,empty:`모두 처리했습니다`},loading:`워크스페이스 로드 중…`,recent:`최근`,starred:`즐겨찾기`,welcome:`ObjectUI에 오신 것을 환영합니다`,welcomeDescription:`첫 애플리케이션을 만들거나 시스템 설정을 구성하여 시작하세요.`,createFirstApp:`첫 앱 만들기`,systemSettings:`시스템 설정`,browseMarketplace:`앱 마켓플레이스 탐색`,quickActions:{title:`빠른 작업`,createApp:`앱 생성`,createAppDesc:`새 애플리케이션으로 시작`,manageObjects:`객체 관리`,manageObjectsDesc:`데이터 모델 구성`,systemSettings:`시스템 설정`,systemSettingsDesc:`워크스페이스 구성`},appCard:{noDescription:`설명 없음`,default:`기본값`},greetingMorning:`좋은 아침이에요`,greetingAfternoon:`좋은 오후에요`,greetingEvening:`좋은 저녁이에요`,greetingNight:`야간 작업 중`,heroTagline:`마지막으로 중단한 곳에서 이어서 하거나 새로운 것을 발견해 보세요.`,open:`열기`,stats:{apps:`앱`,starred:`즐겨찾기`,recent:`최근`},recentApps:{title:`최근 열린 항목`,itemType:{object:`오브젝트`,dashboard:`대시보드`,page:`페이지`,record:`레코드`}},starredApps:{title:`즐겨찾기`},gettingStarted:{title:`홈 화면 맞춤설정`,description:`앱을 즐겨찾기에 추가하면 여기에 고정되어 한 번의 클릭으로 접근할 수 있습니다. 열리는 모든 항목은 "최근 열린 항목"에 자동으로 표시됩니다.`,cta:`모든 앱 탐색`}},layout:{systemNav:{systemSettings:`시스템 설정`,applications:`애플리케이션`,appMarketplace:`앱 마켓플레이스`,objectManager:`객체 관리자`,users:`사용자`,organizations:`조직`,roles:`역할`,configuration:`구성`,createApp:`앱 만들기`,administration:`관리`,datasources:`데이터 소스`,documentation:`문서`},appSwitcher:{switchApplication:`애플리케이션 전환`,appsAvailable:`사용 가능한 앱 {{count}}개`,editNavigation:`내비게이션 편집`,home:`홈`,addApp:`앱 추가`,editApp:`앱 편집`,manageAllApps:`모든 앱 관리`,systemConsole:`시스템 콘솔`,noAppsConfigured:`구성된 앱 없음`},activityFeed:{title:`최근 활동`,filter:`필터`,empty:`최근 활동 없음`,ariaLabel:`활동 피드`,typeCreate:`생성`,typeUpdate:`업데이트`,typeDelete:`삭제`,typeComment:`댓글`,relativeJustNow:`방금 전`,relativeSecondsAgo:`{{count}}초 전`,relativeMinutesAgo:`{{count}}분 전`,relativeHoursAgo:`{{count}}시간 전`,relativeDaysAgo:`{{count}}일 전`,viewAll:`모든 활동 보기`},metadata:{label:`메타데이터`,toggleTitle:`메타데이터 검사기 토글`,panelTitle:`메타데이터 검사기`,jsonBadge:`JSON`,copyJson:`JSON 복사`}},search:{title:`검색`,back:`뒤로`,placeholder:`오브젝트, 대시보드, 페이지, 보고서 검색…`,inputAriaLabel:`오브젝트, 대시보드, 페이지, 보고서 검색`,resultsCount:`"{{query}}"에 대한 {{count}}개 결과`,resultsCountPlural:`"{{query}}"에 대한 {{count}}개 결과`,itemsAvailable:`{{count}}개 항목 사용 가능`,noResults:`결과를 찾을 수 없습니다`,noResultsHint:`검색어를 조정해 보세요`,typeObjects:`오브젝트`,typeDashboards:`대시보드`,typePages:`페이지`,typeReports:`보고서`,badgeObject:`오브젝트`,badgeDashboard:`대시보드`,badgePage:`페이지`,badgeReport:`보고서`},empty:{objectNotFound:`오브젝트를 찾을 수 없습니다`,objectNotFoundDescription:`"{{name}}" 오브젝트 정의가 없습니다. 구성을 확인하거나 뒤로 이동하세요.`,interfacePageSourceMissing:`이 인터페이스 페이지는 "{{name}}"을(를) 참조하지만 사용할 수 없습니다.`,pageNotFound:`페이지를 찾을 수 없습니다`,pageNotFoundDescription:`"{{name}}" 페이지를 찾을 수 없습니다. 삭제되거나 이름이 변경되었을 수 있습니다.`,dashboardNotFound:`대시보드를 찾을 수 없습니다`,dashboardNotFoundDescription:`"{{name}}" 대시보드를 찾을 수 없습니다. 삭제되거나 이름이 변경되었을 수 있습니다.`,reportNotFound:`보고서를 찾을 수 없습니다`,reportNotFoundDescription:`"{{name}}" 보고서를 찾을 수 없습니다. 삭제되거나 이름이 변경되었을 수 있습니다.`,noAppsConfigured:`구성된 앱 없음`,noAppsConfiguredDescription:`등록된 앱이 없습니다. 첫 번째 앱을 만들거나 시스템 설정을 방문하세요.`,appNotAvailable:`앱을 사용할 수 없습니다`,appNotAvailableDescription:`이 앱을 아직 사용할 수 없습니다 — 아직 게시 중일 수 있습니다. 잠시 후 다시 시도하세요.`,appAccessDenied:`이 앱에 접근할 권한이 없습니다`,appAccessDeniedDescription:`이 앱은 존재하지만 계정에 여는 권한이 없습니다. 관리자에게 접근 권한을 요청하세요.`,appAccessDeniedHome:`홈으로 돌아가기`,createFirstApp:`첫 번째 앱 만들기`,systemSettings:`시스템 설정`,back:`뒤로`,recordNotFound:`레코드를 찾을 수 없습니다`,recordNotFoundDescription:`찾고 있는 레코드가 존재하지 않거나 삭제되었을 수 있습니다.`},renderer:{noPageSchema:`페이지 스키마가 없습니다`,noFormSchema:`양식 스키마가 없습니다`,noDashboardSchema:`대시보드 스키마가 없습니다`,pageRendering:`페이지 렌더링: {{name}}`,dashboardRendering:`대시보드 렌더링: {{name}}`,formRenderingMode:`{{mode}} 모드로 양식 렌더링`,formRenderingFor:`레코드 {{id}}에 대해`,createRecord:`레코드 만들기`,editRecord:`레코드 편집`,page:`페이지`,dashboard:`대시보드`,save:`저장`,cancel:`취소`},actionDialog:{title:`작업 매개변수`,description:`계속하려면 필요한 정보를 입력하세요.`,selectPlaceholder:`{{label}} 선택`,requiredError:`{{label}}은(는) 필수입니다`,cancel:`취소`,confirm:`확인`,uploading:`업로드 중…`,defaultActionTitle:`작업`,ok:`확인`,lookupPlaceholder:`{{label}}의 레코드 ID`,lookupHelpText:`이 매개변수에 참조 개체가 설정되어 있지 않아 레코드 선택기를 사용할 수 없습니다. 레코드 ID를 직접 입력하거나 관리자에게 작업 매개변수 수정을 요청하세요.`},actionConfirm:{title:`작업 확인`,confirm:`계속`,cancel:`취소`},rowAction:{openMenu:`메뉴 열기`,edit:`편집`,delete:`삭제`},navigationSync:{addedPage:`탐색 업데이트: 페이지 "{{name}}" 추가됨`,addedDashboard:`탐색 업데이트: 대시보드 "{{name}}" 추가됨`,removedPage:`탐색 업데이트: 페이지 "{{name}}" 제거됨`,removedDashboard:`탐색 업데이트: 대시보드 "{{name}}" 제거됨`,renamedPage:`탐색 업데이트: 페이지 "{{oldName}}"이(가) "{{newName}}"으로 이름 변경됨`,renamedDashboard:`탐색 업데이트: 대시보드 "{{oldName}}"이(가) "{{newName}}"으로 이름 변경됨`,undoLabel:`실행 취소`,undone:`탐색 변경 실행 취소됨`,undoFailed:`탐색 변경을 실행 취소할 수 없습니다`,updateFailed:`탐색을 업데이트할 수 없습니다`},objectActions:{resetPackageSetConfirm:`이 권한 세트는 설치된 패키지에 포함되어 있어 제거할 수 없습니다. 삭제하면 패키지 기본 상태로 초기화되며 이 환경의 커스터마이징은 폐기됩니다. 계속할까요?`,resetPackageSetSuccess:`권한 세트를 패키지 기본 상태로 초기화했습니다`,deleteSuccess:`{{label}} 삭제 성공`,deleteFailed:`{{label}} 삭제 실패`,noRecordId:`레코드 ID가 없습니다`,deleteConfirm:`이 레코드를 삭제하시겠습니까?`,bulkDeleteSuccess:`{{count}}개의 {{label}} 레코드 삭제됨`,bulkDeletePartial:`{{succeeded}}개 삭제됨, {{failed}}개 실패`},objectViewActions:{renameFailed:`보기 이름 변경 실패`,deleteFailed:`보기 삭제 실패`},dashboardActions:{printDialogOpening:`브라우저의 인쇄 대화 상자를 여는 중입니다(PDF 내보내기가 아닙니다)`,exportFailed:`내보내기 실패: {{message}}`,forecastSoon:`예측 보기가 곧 출시됩니다`},recordDetail:{viewersTooltip:`현재 이 레코드를 보고 있는 사용자`},cellRender:{empty:`비어 있음`,yes:`예`,no:`아니요`,systemFields:`시스템`},user:{profile:`프로필`,settings:`설정`,logout:`로그아웃`,preferences:`환경설정`,theme:`테마`,language:`언어`},report:{total:`합계`,rowTotal:`행 합계`,columnTotal:`열 합계`,grandTotal:`총합계`,totals:`합계`,rowsLabel:`행`,columnsLabel:`열`,allLabel:`(전체)`,emptyLabel:`(비어 있음)`,loading:`로딩 중…`,failedToLoad:`매트릭스 로드 실패: {{message}}`,needsAcross:"매트릭스 보고서에는 하나 이상의 `groupingsAcross` 필드가 필요합니다.",aggregate:{count:`개수`,countDistinct:`고유 개수`,sum:`합계`,avg:`평균`,min:`최소`,max:`최대`,first:`첫 번째`},editor:{panelTitle:`보고서 편집`}},organizations:{create:`워크스페이스 만들기`,mine:`내 조직`,title:`조직`,heading:`내 조직`,subtitle:`계속할 조직을 선택하거나 새 조직을 만드세요.`,searchPlaceholder:`조직 검색`,new:`새 조직`,current:`현재 조직`,manage:`관리`,emptyTitle:`아직 조직이 없습니다`,emptyDescription:`시작하려면 첫 번째 조직을 만드세요.`,noMatches:`검색과 일치하는 조직이 없습니다.`},organization:{roles:{owner:`소유자`,admin:`관리자`,delegatedAdmin:`위임 관리자`,member:`멤버`},errors:{notAllowedToInvite:`이 조직에 사용자를 초대할 권한이 없습니다.`,notAllowedToInviteWithRole:`이 역할로 사용자를 초대할 권한이 없습니다.`,alreadyInvited:`이 사용자는 이미 이 조직에 초대되었습니다.`,organizationExists:`해당 조직이 이미 존재합니다.`,slugTaken:`해당 슬러그는 이미 사용 중입니다.`,notAllowedToCreate:`새 조직을 만들 권한이 없습니다.`,notTheRecipient:`이 초대의 수신자가 아닙니다.`,invitationNotFound:`이 초대는 더 이상 존재하지 않거나 만료되었습니다.`,unknown:`문제가 발생했습니다. 다시 시도해 주세요.`},backToList:`조직 목록으로 돌아가기`,notFound:`조직을 찾을 수 없음`,notFoundDescription:`이 조직이 존재하지 않거나 접근 권한이 없습니다.`,tabs:{members:`구성원`,invitations:`초대`,settings:`설정`},members:{title:`구성원`,inviteMember:`구성원 초대`,inviteRestrictedNote:`조직 관리자만 구성원을 초대할 수 있습니다.`,removeMember:`구성원 제거`,removeConfirmTitle:`구성원을 제거할까요?`,removeConfirmDescription:`{{name}}을(를) 조직에서 제거합니다. 접근 권한이 즉시 사라집니다.`,removeConfirmAction:`제거`,memberRemoved:`구성원이 제거됨`,removeFailed:`구성원 제거 실패`,roleUpdated:`역할이 업데이트됨`,roleUpdateFailed:`역할 업데이트 실패`,memberActions:`멤버 작업`,loadFailed:`멤버를 불러오지 못했습니다`},invitations:{title:`초대`,empty:`초대가 없습니다.`,expiresAt:`만료`,linkCopied:`초대 링크가 복사됨`,copyFailed:`링크 복사 실패`,canceled:`초대가 취소됨`,cancelFailed:`초대 취소 실패`,cancelTitle:`초대를 취소할까요?`,cancelDescription:`{{email}}에 대한 초대가 철회됩니다.`,cancelAction:`초대 취소`,inviteTitle:`구성원 초대`,inviteDescription:`이 조직에 참여하라는 초대를 받게 됩니다.`,emailLabel:`이메일`,roleLabel:`역할`,placementLabel:`배치(선택 사항)`,placementDescription:`초대를 수락하면 적용됩니다. 위임할 수 있는 단위와 직위만 표시됩니다.`,businessUnitLabel:`사업 단위`,businessUnitPlaceholder:`배치 없음`,positionsLabel:`직위`,sendInvite:`초대 보내기`,sentTitle:`초대가 생성됨`,sentDescription:`아래 링크를 초대 대상자와 공유하세요. 수락하려면 로그인해야 합니다.`,linkLabel:`수락 링크`,invitedAs:`{{email}}을(를) {{role}}(으)로 초대함`,copyLinkLabel:`초대 링크 복사`,loadFailed:`초대를 불러오지 못했습니다`,inviteFailed:`멤버를 초대하지 못했습니다`,status:{all:`전체`,pending:`대기 중`,accepted:`수락됨`,rejected:`거절됨`,canceled:`취소됨`}},settings:{generalTitle:`일반`,generalDescription:`조직 정보를 업데이트하세요.`,readOnlyNote:`소유자만 설정을 변경할 수 있습니다.`,nameLabel:`조직 이름`,slugLabel:`슬러그`,logoLabel:`로고`,logoUpload:`업로드`,logoReplace:`변경`,logoClear:`제거`,logoUploaded:`로고가 업로드됨 — 저장해야 적용됩니다`,logoUploadFailed:`로고 업로드 실패`,save:`변경사항 저장`,saved:`설정이 저장됨`,saveFailed:`설정 저장 실패`,leaveTitle:`조직 나가기`,leaveDescription:`이 조직에 대한 접근 권한을 잃게 됩니다.`,leaveAction:`나가기`,leaveConfirmTitle:`조직에서 나갈까요?`,leaveConfirmDescription:`{{name}}에서 나가시겠습니까? 접근 권한이 즉시 사라집니다.`,leaveConfirmAction:`나가기`,leftOrg:`조직에서 나갔습니다`,leaveFailed:`조직 나가기 실패`,dangerZone:`위험 구역`,deleteTitle:`조직 삭제`,deleteDescription:`이 조직과 모든 데이터를 영구적으로 삭제합니다.`,deleteAction:`삭제`,deleteConfirmTitle:`조직을 삭제할까요?`,deleteConfirmDescription:`이 작업은 되돌릴 수 없습니다. 모든 데이터가 영구적으로 삭제됩니다. 확인하려면 조직 슬러그를 입력하세요.`,deleteConfirmSlugLabel:`확인하려면 “{{slug}}”을(를) 입력하세요`,deleteConfirmAction:`조직 삭제`,deleted:`조직이 삭제됨`,deleteFailed:`조직 삭제 실패`},accept:{title:`초대를 받았습니다`,description:`{{orgName}}에 {{role}}(으)로 초대되었습니다.`,errorTitle:`초대를 사용할 수 없음`,goToOrgs:`조직 목록으로 이동`,loading:`초대를 불러오는 중…`,organization:`조직`,role:`역할`,expiresAt:`만료`,accept:`초대 수락`,accepted:`초대를 수락함`,acceptFailed:`초대 수락 실패`,decline:`거절`,declined:`초대를 거절함`,declineFailed:`초대 거절 실패`},switcher:{label:`조직 전환`,groupLabel:`작업 중인 조직`,groupHint:`새 레코드는 여기에 생성됩니다. 보기에는 모든 조직의 데이터가 표시됩니다.`,manageMembers:`구성원 관리`}},notifications:{regionLabel:`알림`,groupCount:`알림 {{count}}건`,groupUnread:`읽지 않음 {{count}}건`,groupMarkRead:`읽음 표시`,groupMarkReadTitle:`이 유형 전체를 읽음으로 표시`,empty:`알림 없음`,markAllRead:`모두 읽음으로 표시`,viewAll:`모든 알림 보기`,approvalsPending:`{{count}}건의 승인 대기 중`,viewApprovals:`승인 보기`,noPendingApprovals:`대기 중인 승인 없음`,openApprovalsInbox:`승인 보관함 열기`,badgeTotal:`총 {{total}}건`,badgeNotifications:`알림 {{unread}}건`,badgeApprovals:`승인 대기 {{approvals}}건`,emptyUnread:`모두 읽음`,filterUnread:`읽지 않음`,filterAll:`전체`},publicForm:{submit:`제출`,submitting:`제출 중…`,submitAnother:`다른 답변 제출`,poweredBy:`ObjectStack 제공`,secureNotice:`귀하의 정보는 안전하게 전송되며 요청 처리에만 사용됩니다.`,thankYouTitle:`감사합니다!`,thankYouMessage:`제출이 성공적으로 수신되었습니다.`,redirecting:`{{seconds}}초 후 리디렉션됩니다…`,unavailableTitle:`양식을 사용할 수 없습니다`,unavailableDescription:`이 URL에서 사용 가능한 공개 양식이 없습니다. 기본 보기에서 익명 공유가 활성화되어 있는지 확인하세요.`,tryDemo:`데모 시도`,retry:`다시 시도`,loading:`양식 로딩 중…`,requiredHint:`* 필수 필드`,consentLabelDefault:`개인정보 처리방침에 동의하며 이 요청을 위해 내 데이터 처리에 동의합니다.`,consentLink:`개인정보 처리방침`,consentRequired:`계속하려면 개인정보 처리방침에 동의하세요.`,rateLimited:`제출하기 전에 잠시 답변을 검토하세요.`,redirectBlocked:`제출이 수락되었지만 보안상의 이유로 리디렉션 URL이 차단되었습니다.`,demo:{contactTitle:`문의하기`,contactDescription:`프로젝트에 대해 알려주시면 영업 담당자가 1 영업일 이내에 연락드립니다.`,supportTitle:`지원 요청 제출`,supportDescription:`문제를 설명해 주세요 — 팀이 1 영업일 이내에 답변 드립니다.`,thankYouSalesTitle:`감사합니다 — 메시지를 받았습니다!`,thankYouSalesMessage:`영업 담당자가 1 영업일 이내에 연락드립니다.`,thankYouSupportTitle:`접수되었습니다 — 요청이 대기 중입니다.`,thankYouSupportMessage:`지원 엔지니어가 곧 후속 조치를 취할 것입니다. 추가 스크린샷이 있으면 이 페이지를 저장하세요.`,field:{firstName:`이름`,lastName:`성`,email:`업무용 이메일`,phone:`전화번호`,jobTitle:`직함`,company:`회사`,website:`웹사이트`,industry:`업종`,companySize:`회사 규모`,howCanWeHelp:`어떻게 도와드릴까요?`,subject:`제목`,description:`설명`,issueType:`문제 유형`,priority:`우선순위`},industry:{technology:`기술`,software:`소프트웨어 / SaaS`,finance:`금융`,healthcare:`의료`,retail:`리테일`,other:`기타`},issueType:{question:`질문`,problem:`문제`,bug:`버그`,feature_request:`기능 요청`},priority:{low:`낮음`,medium:`보통`,high:`높음`,critical:`긴급`}}},connectAgent:{disabled:{title:`이 배포에서는 MCP가 비활성화되어 있습니다`,body:`MCP 서비스가 꺼져 있습니다(OS_MCP_SERVER_ENABLED=false). 운영자에게 다시 활성화를 요청하세요.`},url:{title:`이 환경의 MCP 엔드포인트`,body:`MCP를 지원하는 모든 AI 클라이언트가 이 URL로 연결합니다. 인증은 셀프서비스입니다. 배포 자체가 OAuth 2.1 인가 서버이므로 브라우저 로그인만 하면 되고, 모든 호출은 본인의 권한과 행 수준 보안 아래 실행됩니다.`,downloadSkill:`SKILL.md 다운로드`,skillHint:`이식 가능한 에이전트 스킬: 스킬을 지원하는 에이전트에게 이 환경 사용법을 알려줍니다.`},claude:{body:`설정 → 커넥터 → 사용자 지정 커넥터 추가에서 이 URL을 붙여넣고 브라우저에서 로그인하세요.`,reachability:`claude.ai(웹)는 Anthropic 서버에서 연결하므로 배포가 공용 HTTPS로 접근 가능해야 합니다. Claude Desktop 등 로컬 클라이언트는 인트라넷 배포에도 연결할 수 있습니다.`},claudeCode:{body:`명령 하나 — 처음 사용할 때 OAuth 로그인이 자동으로 열립니다:`,plugin:`또는 공식 플러그인을 설치하세요(ObjectStack 스킬과 안내형 /objectstack:connect 명령 포함):`},cursor:{addButton:`Cursor에 추가`,body:`원클릭 버튼을 사용하거나 아래 내용을 .cursor/mcp.json에 추가하세요:`},vscode:{body:`.vscode/mcp.json에 추가(또는 MCP: Add Server 명령 사용):`},codex:{body:`~/.codex/config.toml에 추가하세요. Codex 버전이 OAuth 흐름을 지원하지 않으면 API 키 헤더를 사용하세요(아래 참조):`},apiKey:{title:`API 키`,badge:`헤드리스`,body:`CI, 스크립트, 브라우저 없는 에이전트용. 키는 본인 권한으로 동작합니다 — 비밀번호처럼 다루세요. 한 번만 표시됩니다.`,namePlaceholder:`키 이름(예: ci-agent)`,mint:`키 생성`,minting:`생성 중…`,showOnce:`키 "{{name}}"가 생성되었습니다 — 지금 복사하세요. 다시 표시되지 않습니다:`,done:`완료 — 숨기기`}},excelImport:{noImportableFields:`해당 오브젝트에는 가져올 수 있는 필드가 없습니다.`,schemaReadFailed:`오브젝트 스키마를 읽을 수 없습니다.`,imported:`{{count}}개 행을 {{object}}(으)로 가져왔습니다.`,importFrom:`실제 데이터 가져오기 원본`,into:`→`,opening:`여는 중…`,importAction:`가져오기`,dismiss:`닫기`},cloudOnboarding:{hintCreate:`첫 환경을 만들어 보세요. 고유한 URL과 데이터베이스, 요금제를 갖춘 전용 작업 공간이며 앱 구축은 그 안에서 이루어집니다.`,hintReady:`프로덕션 환경이 준비되었습니다. 열어서 앱을 만들고 실행하세요. 모두 환경 안에서 이루어집니다.`,createEnvironment:`환경 만들기`,openProduction:`프로덕션 열기`,manageEnvironments:`환경 관리`},aiModelStatus:{summary:`빌드 / 질문은 {{conversational}}({{conversationalSource}}), 구조화 출력은 {{structured}}({{structuredSource}})을(를) 사용합니다.`,summaryRouting:`라우팅 정책: 무료 요금제 → {{free}}, 유료 요금제 → {{paid}}.`,modelUnknown:`알 수 없음`,sourceUnknown:`어댑터가 보고하지 않음`,rowConversational:`Build / Ask 모델`,rowStructured:`구조화(블루프린트 / 시드)`,rowReasoning:`추론 강도`,readFailed:`유효한 AI 모델을 읽을 수 없습니다. 이 환경에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다.`,readFailedWithStatus:`유효한 AI 모델을 읽을 수 없습니다(HTTP {{status}}). 이 환경에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다.`,overridesInEffect:`적용 중인 재정의: `,noOverrides:`없음 — 배포된 코드의 기본값으로 실행 중입니다.`,adapter:`어댑터: `,sourceCodeDefault:`코드 기본값(env 재정의 없음)`,sourceInherits:`build/ask와 동일`,sourcePinned:`{{source}}에 의해 고정됨`},chatbotError:{title:`응답 실패`,fallbackDetail:`문제가 발생했습니다. 다시 시도해 주세요.`,details:`세부 정보`,hide:`숨기기`,retry:`다시 시도`},chatbotQuota:{title:`업그레이드 필요`,fallbackMessage:`AI 사용 한도에 도달했습니다.`,buyCredits:`크레딧 팩 구매`,upgradePlan:`요금제 업그레이드`},environment:{addEnvironment:`환경 추가`,setUpProduction:`프로덕션 환경 설정`,addDevelopment:`개발 환경 추가`,entitlement:{productionLimitTitle:`이미 프로덕션 환경이 있습니다`,productionLimitBody:`조직마다 프로덕션 환경은 하나만 포함됩니다. 하나 더 필요하면 별도의 조직을 만들거나 엔터프라이즈 계약에 대해 문의해 주세요.`,planLockedTitle:`개발 환경은 유료 기능입니다`,planLockedBody:`{{plan}}에는 프로덕션 환경 하나가 포함됩니다. 업그레이드하면 개발 환경을 추가할 수 있습니다 — 개발 환경에서 만들고 프로덕션에 게시하세요.`,limitTitle:`개발 환경 한도에 도달했습니다`,limitBody:`한도는 AI 좌석 수에 따라 늘어납니다. AI 좌석을 추가하거나 사용하지 않는 개발 환경을 보관하여 자리를 확보하세요.`,limitBodyWithCount:`개발 환경을 {{used}}/{{limit}}개 사용 중입니다. 한도는 AI 좌석 수에 따라 늘어납니다 — AI 좌석을 추가하거나 사용하지 않는 개발 환경을 보관하세요.`,freePlan:`무료 요금제`,namedPlan:`{{plan}} 요금제`,upgradeCta:`요금제 업그레이드`,contactSalesCta:`영업팀 문의`}},cloudConnection:{checking:`연결을 확인하는 중…`,retry:`다시 시도`,errors:{expired:`승인되기 전에 요청이 만료되었습니다. 다시 시작하세요.`,bindFailed:`바인딩에 실패했습니다.`,deviceCodeFailed:`장치 코드 요청에 실패했습니다.`},waiting:{popupOpened:`방금 열린 창에서 연결을 승인하세요. 이 페이지는 자동으로 업데이트됩니다.`,polling:`클라우드 콘솔에서의 승인을 기다리는 중…`,openApproval:`승인 페이지 열기`,copy:`복사`,copied:`복사됨`,codePrefilled:`승인 페이지에 코드가 미리 입력되어 있습니다.`,openItHere:`창이 나타나지 않았나요? 여기에서 열기`,cancel:`취소`},bound:{title:`ObjectStack Cloud에 연결됨`,runtime:`런타임`,organization:`조직`,approvedBy:`승인자`,runtimeId:`런타임 ID`,environment:`환경`,since:`연결 시각`,privatePackages:`조직의 비공개 패키지가 이제 마켓플레이스의 '내 조직'에 표시됩니다.`,disconnect:`연결 해제`},unbound:{title:`연결되지 않음`,body:`이 런타임을 ObjectStack 컨트롤 플레인에 연결하면 조직의 비공개 패키지를 탐색하고 여기에 설치할 수 있습니다. 승인은 클라우드 계정에서 한 번만 클릭하면 되며, 이 페이지에 ID나 자격 증명을 입력할 필요가 없습니다.`,connect:`연결`}},marketplace:{suggestedBindings:{promptEveryone:`이 앱은 로그인한 모든 사용자(Everyone 위치)에게 "{{set}}"을(를) 부여할 것을 제안합니다.`,promptGuest:`이 앱은 인증되지 않은 방문자(Guest 위치)에게 "{{set}}"을(를) 부여할 것을 제안합니다.`,confirm:`부여`,confirming:`부여하는 중…`,dismiss:`닫기`,confirmedToast:`"{{set}}"이(가) 이제 {{anchor}}에 부여되었습니다.`,dismissedToast:`"{{set}}" 제안을 닫았습니다.`},title:`앱 마켓플레이스`,subtitle:`ObjectStack 카탈로그에 게시된 승인된 앱을 탐색하세요. 앱을 클릭하여 세부 정보를 보고 환경 중 하나에 설치하세요.`,searchPlaceholder:`이름 또는 매니페스트 ID로 앱 검색…`,searchAria:`마켓플레이스 앱 검색`,installed:`설치됨`,installedCount:`설치됨 ({{count}})`,refresh:`새로고침`,all:`전체`,noApprovedYet:`아직 마켓플레이스에 승인된 앱이 없습니다.`,noMatchFilters:`필터와 일치하는 앱이 없습니다.`,noDescription:`사용 가능한 설명이 없습니다.`,back:`마켓플레이스로 돌아가기`,installedTitle:`설치된 앱`,installedSubtitle:`이 런타임의 커널에 현재 설치된 마켓플레이스 패키지.`,installedEmpty:`아직 이 런타임에 마켓플레이스 앱이 설치되지 않았습니다.`,browseLink:`마켓플레이스 탐색 →`,installedAdditiveNote:`<strong>참고:</strong> 커널 API는 추가 전용입니다 — 제거하면 디스크에서 매니페스트가 삭제되어 다음 시작 시 패키지가 로드되지 않지만, 실행 중인 커널은 재시작될 때까지 앱을 등록된 상태로 유지합니다.`,installedAt:`{{when}} 설치됨`,installedBy:`{{user}}에 의해`,installedPackageId:`패키지`,cachedAs:`<code>{{path}}</code>로 캐시됨`,versionBadge:`v{{version}}`,installedBadge:`v{{version}} 설치됨`,load:{failed:`마켓플레이스를 로드할 수 없습니다`,failedHint:`기본적으로 이 런타임은 ObjectStack 퍼블릭 클라우드를 가리킵니다. 런타임이 온라인인지 확인하세요.`,packageFailed:`패키지를 로드할 수 없습니다`,notFound:`찾을 수 없습니다.`},detail:{homepage:`홈페이지`,installedV:`설치됨 · v{{version}}`,about:`정보`,noReadme:`사용 가능한 README 없음.`,versions:`버전`,noApprovedVersions:`승인된 버전 없음.`,prerelease:`프리릴리즈`,moreOptions:`추가 설치 옵션`,uninstallFromRuntime:`이 런타임에서 제거`,addSampleData:`샘플 데이터 추가`,reseedAgain:`샘플 데이터 다시 적재`,purgeSampleData:`샘플 데이터 삭제`,purgeConfirm:`이 패키지가 생성한 모든 샘플 레코드를 삭제하시겠습니까? 사용자가 추가한 레코드는 삭제되지 않습니다.`,purgeSuccess:`샘플 레코드 {{count}}개를 삭제했습니다.`,purgeNoData:`삭제할 샘플 레코드가 없습니다.`,reseedQueued:`샘플 데이터는 다음 환경 접속 시 다시 적재됩니다.`,reseedLocalSuccess:`샘플 데이터를 다시 적재했습니다: {{inserted}}개 추가, {{updated}}개 업데이트.`,reseedPartialErrors:`({{count}}개 레코드 쓰기 실패)`,updateAvailable:`업데이트 가능`},action:{installed:`설치됨`,install:`설치`,reinstall:`재설치`,working:`처리 중…`,installToCloud:`클라우드에 설치…`,installing:`설치 중…`,uninstall:`제거`,uninstalling:`제거 중…`,details:`세부 정보`,close:`닫기`,dismiss:`닫기`,openOnCloud:`클라우드에서 열기`,backHome:`홈으로 돌아가기`,updateTo:`업데이트`},install:{dialogTitle:`{{name}} 설치`,dialogDescCurrent:`이 환경에 설치 ({{host}}).`,dialogDescPicker:`이 앱을 설치할 환경을 선택하세요. ObjectStack Cloud에 로그인되어 있어야 합니다.`,environment:`환경`,environmentPlaceholder:`환경 선택`,includeSampleData:`샘플 데이터 포함`,noEnvs:`활성 조직에서 환경을 찾을 수 없습니다.`,noPermission:`환경에 앱을 설치할 권한이 없습니다. 조직 소유자 및 관리자만 설치할 수 있습니다.`,signInFirst:`먼저 ObjectStack Cloud에 로그인해야 합니다.`,success:`설치 성공. 환경을 열어 새 앱을 확인하세요.`,localSuccess:`이 런타임에 v{{version}} 설치됨. "{{name}}"이(가) 이제 앱 전환기에 표시됩니다.`,localManifestConflict:`{{message}}
|
|
15
|
-
참고: 로컬 앱이 이미 이 manifest_id를 가지고 있습니다. 먼저 objectstack.config.ts에서 제거하세요.`,localUnauthorized:`먼저 이 런타임에 로그인하세요.`,localMarketplaceUnavailable:`이 런타임에 OS_CLOUD_URL이 구성되지 않았습니다.`,updateTo:`업데이트 → v{{version}}`,installedVersion:`v{{version}} 설치됨`},org:{heading:`조직`,install:`설치`,installed:`{{name}} 설치됨`,installedBadge:`설치됨`,installing:`설치 중…`},disclosure:{containsCode:`이 패키지에는 코드가 포함되어 있습니다`,reviewed:`검토 및 승인됨`,unreviewed:`아직 검토되지 않음`,signed:`서명됨`,grantsIntro:`설치하면 이 패키지에 다음 권한이 부여됩니다:`,services:`플랫폼 서비스`,hooks:`라이프사이클 후크`,network:`네트워크 액세스`,fs:`파일 시스템 액세스`,noPermissions:`특별한 권한을 요청하지 않습니다.`,acknowledge:`이 패키지가 코드를 실행하고 위 권한을 부여받는다는 점을 이해합니다.`,runtime:{node:`프로세스 내 · 완전 신뢰`,sandbox:`샌드박스`,worker:`프로세스 외부`}},uninstall:{confirm:`이 런타임에서 {{manifestId}} v{{version}}을(를) 제거하시겠습니까?
|
|
16
|
-
|
|
17
|
-
캐시된 매니페스트가 삭제됩니다.`,successInList:`{{manifestId}} 제거됨. 완전히 언로드하려면 런타임을 재시작하세요.`,successInDetail:`{{manifestId}}의 캐시된 매니페스트 제거됨.`},accessDenied:{title:`관리자 전용 앱 마켓플레이스`,description:`이 환경에 앱을 설치할 권한이 없습니다.`},category:{crm:`CRM`,erp:`ERP`,hr:`인사`,finance:`재무`,project:`프로젝트 관리`,collaboration:`협업`,analytics:`분석`,integration:`통합`,automation:`자동화`,ai:`AI`,security:`보안`,"developer-tools":`개발자 도구`,"ui-theme":`UI 테마`,storage:`스토리지`,other:`기타`},pricing:{free:`무료`,freemium:`프리미엄`,paid:`유료`,subscription:`구독`,"usage-based":`사용량 기반`,"contact-sales":`영업팀 문의`},relativeTime:{today:`오늘`,daysAgo:`{{count}}일 전`,monthsAgo:`{{count}}개월 전`,yearsAgo:`{{count}}년 전`}},approvals:{approve:`승인`,reject:`반려`,comment:`의견(선택 사항)`,approveSuccess:`승인됨`,rejectSuccess:`반려됨`,rejectConfirm:`이 승인 요청을 반려하시겠습니까?`},approvalsInbox:{loadMore:`더 보기`,loadingMore:`불러오는 중…`,loadedOf:`{{total}}개 중 {{loaded}}개 로드됨`,actEscalate:`SLA 에스컬레이션`,systemSlaActor:`시스템(SLA)`,reassignBtn:`재할당`,reassignTitle:`이 승인을 다른 사람에게 넘길까요?`,reassignBody:`승인 슬롯이 선택한 사람에게 이동하며, 상대는 알림을 받고 즉시 처리할 수 있습니다.`,reassignTo:`새 승인자`,reassignToPlaceholder:`사용자를 선택하거나 이메일 / role:<이름> 입력`,reassignSuccess:`{{to}}에게 넘겼습니다`,requestInfoBtn:`보완 요청`,requestInfoTitle:`신청자에게 추가 정보를 요청할까요?`,requestInfoBody:`요청은 대기 상태로 유지되며, 신청자는 알림을 받고 스레드에서 답할 수 있습니다.`,requestInfoPlaceholder:`신청자에게 무엇이 필요한가요?`,requestInfoSent:`추가 정보 요청을 보냈습니다`,remindBtn:`독촉`,remindSuccess:`승인자 {{count}}명에게 알렸습니다`,remindThrottled:`최근에 이미 독촉했습니다. 잠시 후 다시 시도하세요.`,replyPlaceholder:`이 요청에 답하기…`,slaRemaining:`SLA {{dur}} 남음`,slaOverdue:`SLA {{dur}} 초과`,actReassign:`재할당`,reassignFromTo:`{{from}} 님에서 {{to}} 님으로`,actRemind:`독촉`,actRequestInfo:`보완 요청`,actComment:`댓글`,stepProgress:`승인 단계`,prevRequest:`이전`,nextRequest:`다음`,positionOf:`요청 {{total}}개 중 {{index}}번째`,progressApprovals:`승인 — {{got}} / {{need}}`,progressGroups:`그룹 승인 — {{got}} / {{need}} 그룹`,progressEligible:`승인 가능자 {{count}}명`,progressBar:`결정 진행 상황`,declaredActions:`작업`,attachmentChip:`첨부 파일`,attachmentOpenFailed:`첨부 파일을 열 수 없습니다. 다시 시도해 주세요`,approveOneTitle:`"{{title}}"을(를) 승인할까요?`,approveOneBody:`내 이름으로 이 요청을 승인합니다. 의견이나 첨부 파일을 추가하려면 요청을 열어 처리하세요.`,flowOrigin:`플로우 시작`,sortBy:`정렬`,sortRecent:`최신순`,sortOldest:`오래된순`,sortAmount:`금액(높은순)`,quickPhrase1:`승인합니다. 요건을 충족합니다.`,quickPhrase2:`조건부 승인합니다. 실행 상황을 확인해 주세요.`,quickPhrase3:`자료를 보완하여 다시 제출해 주세요.`,title:`승인 센터`,subtitle:`승인 요청을 확인하고 처리합니다.`,refresh:`새로고침`,tabMyPending:`내 승인 대기`,tabSubmitted:`내가 제출함`,tabAll:`전체`,searchPlaceholder:`레코드, 프로세스, 신청자 검색…`,clearSearch:`검색 지우기`,statusFilter:`상태`,allStatuses:`모든 상태`,processFilter:`프로세스`,allProcesses:`모든 프로세스`,objectFilter:`오브젝트`,allObjects:`모든 오브젝트`,filterCount:`{{total}}개 중 {{shown}}개`,selected:`선택됨`,actionableCount:`({{count}}개 처리 가능)`,selectAll:`전체 선택`,selectRow:`이 요청 선택`,colRequest:`승인 항목`,colRecord:`레코드`,colRequester:`신청자`,colStatus:`상태`,colWaiting:`제출 시각`,colActions:`작업`,statusPending:`대기 중`,statusApproved:`승인됨`,statusRejected:`거부됨`,statusRecalled:`회수됨`,statusReturned:`수정 요청 반려`,sendBackBtn:`반려`,sendBackTitle:`이 요청을 수정하도록 반려하시겠습니까?`,sendBackBody:`이번 라운드가 종료되고 레코드 잠금이 해제되어 신청자가 데이터를 수정할 수 있습니다. 다시 제출하면 모든 승인자에게 새로운 승인 라운드가 시작됩니다.`,sendBackPlaceholder:`승인되려면 무엇을 수정해야 합니까?`,sendBackSuccess:`반려했습니다 — 신청자가 수정 후 다시 제출할 수 있습니다`,sendBackAutoRejected:`반려 횟수 한도에 도달하여 요청이 자동 거부되었습니다`,actRevise:`수정 요청 반려`,actResubmit:`재제출`,roundChip:`{{n}}라운드`,returnedHint:`승인자가 이 요청을 반려했습니다. 레코드 잠금이 해제되었습니다 — 데이터를 수정한 후 다시 제출하면 새로운 승인 라운드가 시작됩니다.`,resubmitBtn:`재제출`,resubmitting:`재제출 중…`,resubmitSuccess:`재제출했습니다 — 새로운 승인 라운드가 시작되었습니다`,resubmitPlaceholder:`무엇을 변경했습니까?`,editRecordBtn:`레코드 편집`,abandonTitle:`이 수정을 포기하시겠습니까?`,abandonBody:`다시 제출하지 않고 요청을 철회합니다. 승인은 여기서 종료됩니다.`,emptyTitle:`요청 없음`,emptyPending:`모두 처리했습니다. 승인 대기 항목이 없습니다.`,emptyOther:`아직 아무것도 없습니다.`,emptyViewAll:`전체 요청 보기`,noMatches:`현재 필터와 일치하는 항목이 없습니다.`,keyboardHint:`단축키: j/k 이동 · Enter 열기 · x 선택 · a 승인 · r 거부`,drawerTitle:`승인 요청`,submittedAgo:`{{when}} 제출됨`,completedAt:`{{when}} 완료됨`,waitingOn:`대기 중인 승인자`,history:`승인 활동`,noActions:`아직 작업이 없습니다.`,actSubmit:`제출`,actApprove:`승인`,actReject:`거부`,actRecall:`회수`,rawData:`원본 데이터(JSON)`,copy:`복사`,copied:`복사됨`,copyFailed:`복사 실패`,overrideActor:`다른 ID로 작업(관리자)`,actor:`작업 ID`,auto:`자동`,overrideHint:`예: role:sales_manager. 비워 두면 자동 감지된 ID를 사용합니다.`,comment:`의견(선택)`,approve:`승인`,approving:`승인 중…`,reject:`거부`,rejecting:`거부 중…`,recall:`회수`,recalling:`회수 중…`,cancel:`취소`,clear:`지우기`,approveN:`{{count}}개 승인`,rejectN:`{{count}}개 거부`,bulkApproveTitle:`{{count}}개 요청을 승인할까요?`,bulkApproveBody:`각 요청은 내 ID로 승인되며 해당 플로우는 승인 분기로 진행됩니다.`,bulkRejectTitle:`{{count}}개 요청을 거부할까요?`,bulkRejectBody:`선택한 요청을 거부하고 신청자에게 알립니다.`,bulkApproved:`{{count}}개 요청을 승인했습니다`,bulkRejected:`{{count}}개 요청을 거부했습니다`,bulkPartial:`{{ok}}개 성공, {{fail}}개 실패: {{which}}`,rejectOneTitle:`"{{title}}"을(를) 거부할까요?`,rejectOneBody:`요청을 거부하고 신청자에게 알립니다.`,rejectTitle:`이 요청을 거부할까요?`,rejectBody:`요청을 거부됨으로 표시하고 신청자에게 알립니다.`,recallTitle:`이 요청을 회수할까요?`,recallBody:`회수하면 승인자는 더 이상 처리할 수 없으며 레코드 잠금이 해제됩니다.`,inlineApproved:`"{{title}}" 승인됨`,inlineRejected:`"{{title}}" 거부됨`,approvedFinal:`승인됨`,approvedWaiting:`승인됨 — 나머지 승인자를 기다리는 중`,rejectedToast:`거부됨`,recalledToast:`요청이 회수되었습니다`,whyDisabled:`지정된 승인자만 이 요청을 처리할 수 있습니다. 현재 대기: {{who}}.`,whyDisabledSubmitter:`내가 제출한 요청이므로 회수할 수 있지만, 승인/거부는 지정된 승인자만 가능합니다.`,noActor:`작업 ID를 확인할 수 없습니다`,actionFailed:`작업 실패`,loadFailed:`요청을 불러오지 못했습니다`,recallUnavailable:`이 배포에서는 회수를 지원하지 않습니다.`,requestGone:`이 요청은 더 이상 존재하지 않습니다. 목록을 새로고침하세요.`,notAllowed:`이 작업을 수행할 권한이 없습니다.`,alreadyDecided:`이미 처리된 요청입니다. 목록을 새로고침하세요.`,justNow:`방금 전`,minutesAgo:`{{count}}분 전`,hoursAgo:`{{count}}시간 전`,daysAgo:`{{count}}일 전`},preview:{empty:{loadFailedTitle:`드래프트 미리보기를 불러오지 못했습니다`,loadFailedDescription:`드래프트 오버레이를 읽을 수 없습니다. 다시 시도하거나 연결을 확인하세요.`,notReadyTitle:`"{{app}}"이(가) 아직 드래프트에 없습니다`,notReadyDescription:`빌드가 아직 실행 중이거나 이 앱이 스테이징되기 전에 실패했을 수 있습니다. 대화에서 빌드 상태를 확인하세요 — 드래프트가 도착하면 이 창이 새로고침됩니다.`,nothingTitle:`아직 미리볼 내용이 없습니다`,retry:`다시 시도`},draftBar:{messageClean:`초안 미리보기 — 게시되지 않은 변경이 없습니다. 여기 있는 내용은 모두 이미 반영되어 있습니다.`,sampleDataTitle:`샘플 데이터는 게시 후에 표시됩니다`,sampleDataBody:`앱의 구조를 미리 보고 있습니다. 게시하면 예시 레코드가 로드되고 앱이 활성화됩니다.`,publishCta:`게시하고 확인하기`,message:`드래프트 미리보기 — 게시되지 않은 변경 사항을 보고 있습니다. 게시 전에는 실제로 반영되지 않습니다.`,publish:`게시`,publishing:`게시 중…`,exit:`미리보기 종료`,changes:`변경 사항`},changes:{title:`대기 중인 변경 사항`,description:`게시 시 변경되는 내용입니다. 새 항목은 추가되고 업데이트는 게시된 버전을 덮어씁니다.`,loading:`대기 중인 변경 사항 불러오는 중…`,loadFailed:`대기 중인 변경 사항을 불러오지 못했습니다:`,empty:`대기 중인 항목 없음 — 모든 드래프트가 게시되었습니다.`,kindNew:`신규`,kindUpdate:`업데이트`,detailLoading:`상세 정보 로드 중…`,detailLoadFailed:`변경 상세 정보를 불러오지 못했습니다:`,detailNone:`차이가 감지되지 않았습니다 — 초안이 게시된 버전과 일치합니다.`,detailChangedKeys:`기타 변경:`,confirmNote:`게시하면 이 패키지의 대기 중인 초안 {{count}}개가 한 번에(원자적으로) 게시됩니다.`,publishConfirm:`모두 게시`},unpublishedBar:{message:`게시되지 않은 앱 — 기능은 모두 작동하지만 빌더만 볼 수 있습니다. 게시하면 사용자에게 표시됩니다.`,publish:`게시`,publishing:`게시 중…`,published:`게시했습니다! 이제 사용자에게 앱이 표시됩니다.`,publishFailed:`게시에 실패했습니다`},history:{button:`기록`,title:`빌드 기록`,description:`이 앱의 모든 변경을 최신순으로 표시합니다. 어떤 단계든 되돌려 취소할 수 있습니다 — 게시 확인은 필요하지 않습니다.`,loadFailed:`기록을 불러올 수 없습니다:`,loadFailedUnavailable:`커밋 저장소에 일시적으로 연결할 수 없습니다 — 이번 읽기는 수행되지 않았으므로 기록이 표시되지 않습니다. 잠시 후 다시 시도하세요.`,loading:`기록을 불러오는 중…`,empty:`이 앱의 기록이 아직 없습니다.`,revertLabel:`변경을 되돌렸습니다`,applyLabel:`빌드 변경`,revert:`되돌림`,items:`항목`,revertAction:`되돌리기`,reverted:`되돌렸습니다 — 변경이 취소되었습니다.`,revertFailed:`되돌리기 실패`,revertUnavailable:`커밋 저장소에 일시적으로 연결할 수 없습니다 — 되돌리기가 적용되지 않았을 수 있습니다. 이 기록을 다시 열어 확인한 후 재시도하세요.`}},filterBuilder:{where:`조건`,and:`그리고`,or:`또는`,clearAll:`모두 지우기`,selectField:`필드 선택`,operator:`연산자`,selectValue:`값 선택`,value:`값`,addFilter:`필터 추가`,removeCondition:`조건 삭제`,trueLabel:`예`,falseLabel:`아니요`,noResults:`결과 없음`,searchField:`{{label}} 검색…`,enterId:`{{label}} ID 입력`,operators:{equals:`같음`,notEquals:`같지 않음`,contains:`포함`,notContains:`포함하지 않음`,isEmpty:`비어 있음`,isNotEmpty:`비어 있지 않음`,greaterThan:`보다 큼`,lessThan:`보다 작음`,greaterOrEqual:`크거나 같음`,lessOrEqual:`작거나 같음`,before:`이전`,after:`이후`,between:`사이`,in:`포함됨`,notIn:`포함되지 않음`}},sortBuilder:{sortBy:`정렬 기준`,thenBy:`그다음`,selectField:`필드 선택`,ascending:`A → Z`,descending:`Z → A`,addSort:`정렬 추가`,removeSort:`정렬 삭제`},collaboration:{commentCount:`댓글 {{count}}개`,commentCountOne:`댓글 {{count}}개`,resolvedSuffix:` · 해결됨`,sortComments:`댓글 정렬`,sortOldest:`오래된 순`,sortNewest:`최신 순`,resolve:`해결됨으로 표시`,reopen:`다시 열기`,justNow:`방금`,minutesAgo:`{{count}}분 전`,hoursAgo:`{{count}}시간 전`,daysAgo:`{{count}}일 전`,edited:`(수정됨)`,reactionCount:`반응 {{count}}개`,reactionCountOne:`반응 {{count}}개`,addThumbsUp:`좋아요 추가`,reply:`답글`,reactThumbsUp:`좋아요로 반응`,reactHeart:`하트로 반응`,cancelReply:`답글 취소`,replyingTo:`{{name}}님에게 답글 작성 중…`,replyingToComment:`이 댓글에 답글 작성 중…`,commentPlaceholder:`댓글 추가…(@로 멘션)`,send:`보내기`,presentUserCount:`{{count}}명 접속 중`,presentUserCountOne:`{{count}}명 접속 중`,moreUserCount:`외 {{count}}명`,moreUserCountOne:`외 {{count}}명`,userStatusTitle:`{{name}}({{status}})`,statusActive:`활성`,statusIdle:`유휴`,statusAway:`자리 비움`},wizard:{missingRequired:`필수 항목을 입력하세요: {{fields}}`},appManagement:{title:`애플리케이션`,subtitle:`구성된 모든 애플리케이션을 관리합니다`,newApp:`새 앱`,searchLabel:`앱 검색`,searchPlaceholder:`앱 검색…`,selectedCount:`{{n}}개 선택됨`,bulkEnable:`활성화`,bulkDisable:`비활성화`,selectAll:`전체 선택({{n}})`,empty:`앱을 찾을 수 없습니다.`,defaultBadge:`기본값`,active:`활성`,inactive:`비활성`,selectApp:`{{name}} 선택`,openApp:`앱 열기`,openAppNamed:`{{name}} 열기`,editApp:`앱 편집`,editAppNamed:`{{name}} 편집`,editWithAi:`AI로 편집`,editWithAiNamed:`AI로 {{name}} 편집`,enableApp:`앱 활성화`,disableApp:`앱 비활성화`,enableAppNamed:`{{name}} 활성화`,disableAppNamed:`{{name}} 비활성화`,setDefault:`기본값으로 설정`,setDefaultNamed:`{{name}}을(를) 기본값으로 설정`,deleteApp:`앱 삭제`,deleteAppNamed:`{{name}} 삭제`,confirmDelete:`삭제하려면 다시 클릭하세요`,confirmDeleteNamed:`{{name}} 삭제 확인`,toast:{noClient:`메타데이터 서비스에 연결할 수 없습니다`,unknownError:`알 수 없는 오류`,appEnabled:`{{name}}을(를) 활성화했습니다`,appDisabled:`{{name}}을(를) 비활성화했습니다`,toggleFailed:`앱 상태 전환 실패: {{reason}}`,setDefaultDone:`{{name}}을(를) 기본값으로 설정했습니다`,setDefaultFailed:`기본 앱 설정 실패: {{reason}}`,appDeleted:`{{name}}을(를) 삭제했습니다`,deleteFailed:`앱 삭제 실패: {{reason}}`,bulkEnabled:`앱 {{n}}개를 활성화했습니다`,bulkDisabled:`앱 {{n}}개를 비활성화했습니다`,bulkFailed:`{{n}}개 실패: {{details}}`,bulkFailureEntry:`{{name}}({{reason}})`,bulkFailureJoiner:`; `,bulkOperationFailed:`일괄 작업 실패: {{reason}}`}}},de:{impersonation:{banner:{message:`Sie handeln als {{user}} — jede Aktion wird dieser Person zugeschrieben.`,startedBy:`Gestartet von Administrator {{admin}}.`,stop:`Identitätswechsel beenden`,stopping:`Wird beendet…`,stopFailed:`Identitätswechsel konnte nicht beendet werden: {{reason}}`,notRestored:`Der Server hat die Anfrage angenommen, aber Ihre Administratorsitzung nicht wiederhergestellt — Sie handeln weiterhin als {{user}}. Melden Sie sich ab und erneut an, um dies zu beenden.`}},capability:{label:{manage_users:`Benutzer verwalten`,manage_org_users:`Organisationsbenutzer verwalten`,manage_metadata:`Metadaten verwalten`,manage_platform_settings:`Plattformeinstellungen verwalten`,setup_access:`Zugriff auf die Einrichtung`,setup_write:`Einstellungen schreiben`,studio_access:`Studio-Zugriff`},group:{platform:`Plattform`,org:`Organisation`,other:`Andere`}},perm:{facet:{none:`Keine`,more:`+{{count}} weitere`,objects:`{{count}} Objekte`,objects_one:`{{count}} Objekt`,fields:`{{count}} Feldregeln`,fields_one:`{{count}} Feldregel`,rls:`{{count}} RLS-Richtlinien`,rls_one:`{{count}} RLS-Richtlinie`,tabs:`{{count}} Registerkarten-Regeln`,tabs_one:`{{count}} Registerkarten-Regel`,adminScope:`Delegierte Administration konfiguriert`,designInStudio:`Im Studio gestalten →`,designInStudioHint:`Im Studio gestalten`}},lookup:{recentlyUsed:`Zuletzt verwendet`,allResults:`Alle Ergebnisse`,createNew:`Neu erstellen`,createNamed:`„{{name}}“ erstellen`,showingResults:`{{shown}} von {{total}} Ergebnissen`,showAllResults:`Alle Ergebnisse anzeigen ({{count}})`,selectedBadge:`Ausgewählt`,browseAll:`Alle Datensätze durchsuchen`,remove:`{{label}} entfernen`,selectFirst:`Zuerst {{fields}} auswählen`,selectRecord:`Datensatz auswählen`,recordCount:`{{count}} Datensätze`,recordCountOne:`1 Datensatz`,pageOf:`Seite {{current}} von {{total}}`,filters:`Filter`,clear:`Zurücksetzen`,yes:`Ja`,filterPlaceholder:`{{label}} filtern`,prevPage:`Vorherige Seite`,nextPage:`Nächste Seite`,jumpToPage:`Zur Seite springen`,retry:`Erneut versuchen`,loading:`Wird geladen…`,noOptions:`Keine Optionen gefunden`,noRecords:`Keine Datensätze gefunden`},common:{addToFavorites:`Zu Favoriten hinzufügen`,removeFromFavorites:`Aus Favoriten entfernen`,loading:`Wird geladen…`,save:`Speichern`,cancel:`Abbrechen`,delete:`Löschen`,edit:`Bearbeiten`,create:`Erstellen`,filter:`Filtern`,reset:`Zurücksetzen`,confirm:`Bestätigen`,close:`Schließen`,back:`Zurück`,next:`Weiter`,previous:`Zurück`,submit:`Absenden`,refresh:`Aktualisieren`,export:`Exportieren`,import:`Importieren`,yes:`Ja`,no:`Nein`,ok:`OK`,actions:`Aktionen`,more:`Mehr`,selectAll:`Alle auswählen`,clearAll:`Alle löschen`,noData:`Keine Daten`,noResults:`Keine Ergebnisse gefunden`,required:`Erforderlich`,optional:`Optional`,selectOption:`Option auswählen`,select:`Auswählen…`,openChat:`Chat öffnen`,closeChat:`Chat schließen`,closePanel:`Panel schließen`,resizeDrawer:`Panelbreite anpassen`,itemCount:`{{count}} Elemente`,itemCountOne:`{{count}} Element`,toggleSidebar:`Seitenleiste umschalten`,package:`Paket`,done:`Fertig`,editInStudio:`Im Studio bearbeiten`,record:`Datensatz`,retry:`Erneut versuchen`,printDialogHint:`Öffnet den Druckdialog Ihres Browsers (kein PDF-Export)`},actions:{decisionOutput:{help:`Wird dem Flow als Entscheidungsausgabe übergeben.`,helpMultiValue:`Wird dem Flow als Entscheidungsausgabe übergeben. Mehrere Werte durch Komma trennen.`},resultDialog:{defaultTitle:`Diesen Wert jetzt speichern`,acknowledge:`Ich habe ihn gespeichert`,copyAll:`Alle kopieren`}},validation:{required:`{{field}} ist erforderlich`,minLength:`{{field}} muss mindestens {{min}} Zeichen lang sein`,maxLength:`{{field}} darf höchstens {{max}} Zeichen lang sein`,min:`{{field}} muss mindestens {{min}} sein`,max:`{{field}} darf höchstens {{max}} sein`,email:`Bitte geben Sie eine gültige E-Mail-Adresse ein`,url:`Bitte geben Sie eine gültige URL ein`,pattern:`{{field}} hat ein ungültiges Format`,formInvalid:`Bitte überprüfen Sie die markierten Felder: {{fields}}`,formInvalidJoiner:`, `,unique:`{{field}} muss eindeutig sein`,type:`{{field}} muss ein gültiger {{type}} sein`},form:{noPermissionToSave:`Sie haben keine Berechtigung, diesen Datensatz zu speichern.`,submitFailed:`Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.`,discardTitle:`Änderungen verwerfen?`,discardMessage:`Sie haben ungespeicherte Änderungen. Wenn Sie dieses Formular jetzt schließen, gehen Ihre Bearbeitungen verloren.`,dialogDescriptionFallback:`Füllen Sie die Formularfelder aus und senden Sie ab oder brechen Sie ab.`,keepEditing:`Weiter bearbeiten`,discard:`Verwerfen`,conflictTitle:`Speicherkonflikt`,conflictMessage:`Dieser Datensatz wurde während Ihrer Bearbeitung von jemand anderem geändert. Beim Überschreiben werden dessen Änderungen durch Ihre ersetzt.`,conflictLatestVersion:`Deren Speicherung: {{time}}`,conflictOverwrite:`Überschreiben`,addItem:`Element hinzufügen`,removeItem:`Element entfernen`,fieldRequired:`Dieses Feld ist erforderlich`,invalidFormat:`Ungültiges Format`,saveSuccess:`Erfolgreich gespeichert`,saveError:`Speichern fehlgeschlagen`,unsavedChanges:`Sie haben nicht gespeicherte Änderungen. Möchten Sie die Seite wirklich verlassen?`,stepOf:`Schritt {{current}} von {{total}}`,createTitle:`{{object}} erstellen`,editTitle:`{{object}} bearbeiten`,viewTitle:`{{object}} anzeigen`,createTargetOrg:`Wird in {{org}} erstellt`,saveRecord:`Datensatz speichern`,create:`Erstellen`,update:`Aktualisieren`,createSuccess:`{{object}} erfolgreich erstellt`,updateSuccess:`{{object}} erfolgreich aktualisiert`,deleteSuccess:`{{object}} erfolgreich gelöscht`,fullscreen:{title:`Text bearbeiten`,description:`Bearbeiten Sie den vollständigen Textwert und speichern oder verwerfen Sie dann Ihre Änderungen.`,done:`Fertig`,toggle:`{{label}} im Vollbild bearbeiten`,textFallback:`Text`}},fields:{image:{upload:`Bild hochladen`,addMore:`Weitere Bilder hinzufügen`,uploading:`Wird hochgeladen…`,imageAlt:`Bild {{index}}`,crop:`Bild {{index}} zuschneiden`,remove:`Bild {{index}} entfernen`,enlarge:`{{name}} vergrößern`,preview:`Bildvorschau`,previous:`Vorheriges Bild`,next:`Nächstes Bild`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`{{count}} T. überfällig`},file:{dragDropHere:`Dateien hierher ziehen und ablegen`,dropFilesHere:`Dateien hier ablegen`,browseHint:`oder zum Durchsuchen klicken`,browseHintCamera:`oder zum Durchsuchen klicken • Kamera-Schaltfläche unten verwenden`,takePhoto:`Foto aufnehmen`,takeSelfie:`Selfie aufnehmen`,cameraCapture:`Kameraaufnahme`,uploading:`Wird hochgeladen…`,uploadingPct:`Wird hochgeladen… ({{pct}} %)`,fileFallback:`Datei`,upload:`Hochladen`,remove:`{{name}} entfernen`,exceedsMaxSize:`„{{name}}“ überschreitet die maximale Größe ({{max}} MB)`,uploadFailed:`Hochladen von „{{name}}“ fehlgeschlagen: {{error}}`},richText:{format:`Format: {{format}}`,basicEditorHint:`Rich-Text-Editor (einfach)`,placeholder:`Text eingeben…`},options:{empty:`Keine Optionen verfügbar`,selectFirst:`Zuerst {{fields}} auswählen`},objectRef:{loading:`Objekte werden geladen…`,placeholder:`Objekt auswählen`,search:`Objekte suchen…`,empty:`Keine Objekte gefunden`},recipient:{selectTypeFirst:`Wählen Sie zuerst einen Empfängertyp.`,loading:`Wird geladen…`,search:`Suchen…`,empty:`Keine Treffer`,select:`Empfänger auswählen`,selectUser:`Benutzer auswählen`,selectTeam:`Team auswählen`,selectBusinessUnit:`Geschäftseinheit auswählen`,selectPosition:`Position auswählen`,selectUnitAndSubordinates:`Geschäftseinheit auswählen`},filterCondition:{selectObjectFirst:`Wählen Sie zuerst ein Objekt.`,noCriteria:`Keine Kriterien – diese Regel teilt nichts`,criteriaRequired:`Fügen Sie mindestens eine Bedingung hinzu. Eine Regel ohne Kriterien würde jeden Datensatz teilen und kann daher nicht gespeichert werden.`,invalidJson:`Ungültiges JSON — die Regel trifft auf keinen Datensatz zu, bis dies behoben ist.`,jsonOnly:`Dieses Kriterium kann nur als JSON bearbeitet werden`,editAsJson:`Als JSON bearbeiten`,useVisualBuilder:`Visuellen Builder verwenden`},tags:{placeholder:`Tippen und mit der Eingabetaste hinzufügen…`},textarea:{characterCount:`Zeichenanzahl: {{count}} von {{max}}`,charactersRemaining:`Verbleibende Zeichen: {{count}}`}},table:{rowsPerPage:`Zeilen pro Seite`,showing:`{{from}} bis {{to}} von {{total}} angezeigt`,noRows:`Keine Zeilen vorhanden`,sortAsc:`Aufsteigend sortieren`,sortDesc:`Absteigend sortieren`,filterColumn:`{{column}} filtern`,columns:`Spalten`,exportCSV:`CSV exportieren`,exportExcel:`Excel exportieren`,selectRow:`Zeile auswählen`,selectAllRows:`Alle Zeilen auswählen`,expandRow:`Zeile erweitern`,collapseRow:`Zeile reduzieren`,hideColumn:`Spalte ausblenden`,freezeColumn:`Spalte fixieren`,unfreezeColumn:`Spalte lösen`,pageInfo:`Seite {{current}} von {{total}}`,totalRecords:`{{count}} gesamt`,noResults:`Keine Ergebnisse gefunden`,noResultsHint:`Versuchen Sie, Ihre Filter oder Suchanfrage anzupassen.`,cancelAll:`Alle abbrechen`,saveAll:`Alle speichern ({{count}})`,addRecord:`Datensatz hinzufügen`,open:`Öffnen`,search:`Suchen…`,modified:`{{count}} Zeile geändert`,saveFailed:`Speichern fehlgeschlagen`,selected:`{{count}} ausgewählt`,edit:`Bearbeiten`,delete:`Löschen`},grid:{bulkSelected:`{{count}} ausgewählt`,bulkSelectedAllMatches:`{{count}} ausgewählt (alle Treffer)`,bulkClear:`Auswahl aufheben`,bulkAllOnPage:`Alle {{count}} auf dieser Seite sind ausgewählt.`,bulkSelectAllMatching:`Alle {{count}} Treffer auswählen`,bulkAllMatchingSelected:`Alle {{count}} übereinstimmenden Datensätze sind ausgewählt.`,bulk:{confirmDefault:`Dies wird auf {{count}} Datensätze angewendet.`,overLimit:`Die Auswahl ({{count}}) überschreitet das Aktionslimit ({{limit}}). Verkleinern Sie die Auswahl, um fortzufahren.`,affectedRecords:`Betroffene Datensätze ({{count}}):`,skippedIneligible:`{{count}} der ausgewählten Datensätze sind für diese Aktion nicht zulässig und werden übersprungen.`,rowFallback:`Zeile {{index}}`,andMore:`… und {{count}} weitere`,processed:`{{count}} / {{total}} verarbeitet`,processedFailed:` · {{count}} fehlgeschlagen`,undonePrefix:`Rückgängig gemacht — `,succeeded:`Erfolgreich {{count}} / {{total}}`,resultFailed:` · Fehlgeschlagen {{count}}`,retry:`Erneut versuchen`,downloadErrorCsv:`Fehler-CSV herunterladen`,cancel:`Abbrechen`,back:`Zurück`,next:`Weiter`,run:`Ausführen`,running:`Wird ausgeführt…`,undo:`Rückgängig`,undoing:`Wird rückgängig gemacht…`,done:`Fertig`,selectPlaceholder:`Auswählen…`,loading:`Wird geladen…`},actions:`Aktionen`,edit:`Bearbeiten`,delete:`Löschen`,export:`Exportieren`,exportAs:`Exportieren als {{format}}`,loading:`Raster wird geladen…`,errorLoading:`Fehler beim Laden des Rasters`,pullToRefresh:`Zum Aktualisieren ziehen`,refreshing:`Wird aktualisiert…`,openRecord:`Datensatz öffnen`,rowHeight:`Zeilenhöhe: {{mode}}`,openMenu:`Menü öffnen`,empty:`Leer`,yes:`Ja`,no:`Nein`,systemFields:`System`,summary:{pattern:`{{label}}: {{value}}`,count:`Anzahl`,countEmpty:`Leer`,countFilled:`Ausgefüllt`,countUnique:`Eindeutig`,percentEmpty:`Leer`,percentFilled:`Ausgefüllt`,sum:`Summe`,avg:`Mittelwert`,min:`Min.`,max:`Max.`},toolbar:{densityMode:`Dichte`,densityCompact:`Kompakt`,densityComfortable:`Normal`,densitySpacious:`Großzügig`,densityCycleHint:`{{label}} (klicken zum Wechseln)`,densityCycleShortHint:`Klicken zum Wechseln`},import:{downloadTemplate:`Vorlage herunterladen`,downloadTemplateHint:`Laden Sie eine CSV mit den richtigen Spalten herunter (Pflichtfelder sind mit * markiert).`,templateFileName:`{{object}}-import-template`,autoMatched:`Automatisch zugeordnet`,autoMatchedSummary:`{{count}} Spalte(n) automatisch zugeordnet — unten prüfen und anpassen.`,confidence:{high:`Hohe Konfidenz`,medium:`Mittlere Konfidenz`,low:`Geringe Konfidenz`},asyncQueued:`In Warteschlange — Import wird vorbereitet…`,asyncProcessing:`{{processed}} von {{total}} Zeilen werden importiert… {{progress}} %`,asyncLargeHint:`Diese Datei ist groß und wird daher im Hintergrund importiert.`,largeSampleNotice:`Vorschau der ersten {{shown}} von {{total}} Zeilen.`,cancelImport:`Import abbrechen`,importCancelled:`Import abgebrochen`,resultsTruncated:`Es werden die ersten {{count}} Zeilenergebnisse (von {{total}}) angezeigt.`,createdCount:`{{count}} erstellt`,updatedCount:`{{count}} aktualisiert`,downloadFailed:`Fehlgeschlagene Zeilen herunterladen`,options:`Importoptionen`,writeMode:`Wenn eine Zeile zu einem vorhandenen Datensatz passt`,writeModeOpt:{insert:`Immer neu anlegen`,update:`Vorhandene aktualisieren (ohne Treffer überspringen)`,upsert:`Bei Treffer aktualisieren, sonst anlegen`},matchFields:`Abgleich über`,matchFieldsPlaceholder:`Abgleichsfeld(er) wählen…`,matchFieldsHint:`Zeilen werden über diese Felder vorhandenen Datensätzen zugeordnet.`,needMatchFields:`Wählen Sie mindestens ein Feld für den Abgleich aus.`,matchOnlyField:`(nur Abgleich)`,optCreateOptions:`Unbekannte Optionswerte beibehalten`,optRunAutomations:`Automatisierungen und Trigger ausführen`,optTreatHistorical:`Als historische Daten importieren`,optTreatHistoricalHint:`(abgeschlossene Datensätze unverändert importieren — Zustandsautomat-Prüfungen überspringen und die ursprünglichen Zeitstempel und Autoren beibehalten, statt jetzt zu stempeln)`,optSkipBlankKey:`Zeilen mit leerem Abgleichswert überspringen`,optBackground:`Im Hintergrund importieren`,optBackgroundHint:`(läuft als rückgängig machbarer Auftrag)`,validate:`Daten prüfen`,validating:`Wird geprüft…`,validateHint:`Jede Zeile vor dem Import auf dem Server prüfen.`,validatePassed:`Alle {{ok}} Zeilen sind gültig.`,validateFailed:`{{ok}} gültig, {{errors}} mit Fehlern.`,errorRowPrefix:`Zeile {{row}}: `,referenceNotFound:`Kein passender Datensatz für „{{value}}“`,referenceAmbiguous:`„{{value}}“ passt zu mehreren Datensätzen — verwenden Sie einen eindeutigen Wert oder die Datensatz-ID`,invalidBoolean:`„{{value}}“ ist kein gültiger Wahr/Falsch-Wert`,invalidNumber:`„{{value}}“ ist keine gültige Zahl`,invalidDate:`„{{value}}“ ist kein gültiges Datum`,invalidOption:`„{{value}}“ gehört nicht zu den zulässigen Optionen`,requiredValue:`Dieses Feld ist erforderlich`,matchAmbiguous:`Passt zu mehreren vorhandenen Datensätzen — verwenden Sie einen eindeutigen Wert oder die Datensatz-ID`,history:`Verlauf`,historyBack:`Zurück zum Import`,historyDescription:`Letzte Importe für dieses Objekt.`,historyHint:`Hintergrund-Importaufträge, neueste zuerst.`,historyRefresh:`Aktualisieren`,historyLoading:`Wird geladen…`,historyEmpty:`Noch keine Importe.`,historyUnsupported:`Für diese Datenquelle ist kein Importverlauf verfügbar.`,historyColStatus:`Status`,historyColRows:`Zeilen`,historyColResult:`Ergebnis`,historyColTime:`Wann`,errorCount:`{{count}} Fehler`,undoImport:`Import rückgängig machen`,undoing:`Wird rückgängig gemacht…`,undoConfirm:`Diesen Import rückgängig machen? Dabei erstellte Datensätze werden gelöscht und aktualisierte Datensätze auf ihre vorherigen Werte zurückgesetzt.`,reverted:`Rückgängig gemacht`,jobStatus:{pending:`Ausstehend`,running:`Läuft`,succeeded:`Erfolgreich`,failed:`Fehlgeschlagen`,cancelled:`Abgebrochen`},legacyReferenceBlocked:`Import blockiert: {{fields}} sind Beziehungsfelder, die den Server-Importweg benötigen, um Namen in Datensatz-IDs aufzulösen — diese Verbindung unterstützt das nicht. Ein Import als reiner Text würde die Daten beschädigen. Aktualisieren Sie Backend/Client, oder heben Sie die Zuordnung dieser Spalten auf und importieren Sie sie separat.`,missingRequiredHint:`Fortfahren nicht möglich — nicht zugeordnete Pflichtfelder: {{fields}}. Fügen Sie Ihrer Datei eine passende Spalte hinzu oder gehen Sie zurück und laden Sie eine Datei hoch, die sie enthält.`,legacyFallbackNotice:`Über einen Kompatibilitäts-Fallback importiert: Diese Verbindung unterstützt den Server-Importweg nicht, daher wurden die Werte ohne serverseitige Typkonvertierung als Text gespeichert. Aktualisieren Sie Backend/Client für vollständige Importunterstützung (Typkonvertierung und Beziehungssuche).`,title:`{{object}} importieren`,notAllowed:`Dieses Objekt ist nicht für den Import freigegeben.`,stepUpload:`Hochladen`,stepMapping:`Zuordnung`,stepPreview:`Vorschau`,uploadDescription:`Laden Sie eine CSV- oder Excel-Datei hoch oder fügen Sie Daten aus einer Tabelle ein, um zu beginnen.`,mappingDescription:`Ordnen Sie Spalten den Objektfeldern zu.`,previewDescription:`Daten vor dem Import prüfen.`,dragDrop:`CSV- oder Excel-Datei hierher ziehen oder klicken zum Durchsuchen`,browseFiles:`Dateien durchsuchen`,parsing:`Wird verarbeitet…`,pasteHint:`oder aus Excel oder Google Tabellen kopierte Zeilen einfügen (Strg/⌘+V)`,legacyXls:`Alte .xls-Dateien werden nicht unterstützt – bitte als .xlsx neu speichern.`,unsupportedFile:`Nicht unterstützter Dateityp. Verwenden Sie CSV, TSV oder Excel (.xlsx).`,parseFailed:`Diese Datei konnte nicht gelesen werden. Bitte prüfen Sie das Format und versuchen Sie es erneut.`,fileNeedsHeader:`Datei muss eine Kopfzeile und mindestens eine Datenzeile enthalten.`,mappingTemplate:`Zuordnungsvorlage:`,chooseTemplate:`Vorlage auswählen…`,noSavedTemplates:`Keine gespeicherten Vorlagen`,noneOption:`— Keine —`,saveCurrent:`Aktuelle speichern`,templateName:`Vorlagenname`,save:`Speichern`,deleteTemplate:`Vorlage löschen`,savedMapping:`Gespeicherte Zuordnung:`,chooseSavedMapping:`Gespeicherte Zuordnung auswählen…`,manualMapping:`— Spalten manuell zuordnen —`,transform:`Transformation`,savedMappingHint:`Die Zuordnung „{{name}}“ wendet auf dem Server Umbenennung + Transformationen + Typkonvertierung an. Die Spaltenzuordnung ist schreibgeschützt.`,savedMappingPreviewNote:`Die Vorschau zeigt Ihre Quellspalten; beim Import wendet die Zuordnung „{{name}}“ auf dem Server Umbenennung, Transformationen und Typkonvertierung an.`,csvColumn:`Spalte`,mapsTo:`Zugeordnet zu`,typeMismatch:`Sieht aus wie {{type}}`,type:{number:`Zahl`,boolean:`Boolescher Wert`,date:`Datum`,datetime:`Datum & Uhrzeit`,text:`Text`},status:`Status`,skipColumn:`Spalte überspringen`,skip:`— Überspringen —`,mapped:`Zugeordnet`,skipped:`Übersprungen`,rowsWithErrors:`{{count}} Zeile(n) mit Fehlern`,rowsCorrected:`{{count}} Zeile(n) korrigiert`,clickToFix:`— klicken Sie auf eine hervorgehobene Zelle, um sie zu bearbeiten.`,showingRows:`{{shown}} von {{total}} Zeilen angezeigt`,importing:`Importiere… {{progress}}%`,importComplete:`Import abgeschlossen`,imported:`{{count}} importiert`,skippedCount:`{{count}} übersprungen`,moreErrors:`…und {{count}} weitere Fehler`,cancel:`Abbrechen`,back:`Zurück`,next:`Weiter`,close:`Schließen`,importNRows:`{{count}} Zeilen importieren`,importingProgress:`Importiere…`,requiredMark:`*`,required:`Erforderlich`,invalidType:`Ungültiger {{type}}`}},calendar:{today:`Heute`,month:`Monat`,week:`Woche`,day:`Tag`,agenda:`Agenda`,allDay:`Ganztägig`,noEvents:`Keine Termine`,newEvent:`Neuer Termin`,moreEvents:`+{{count}} weitere`},list:{firstRunTitle:`Hier ist noch nichts`,firstRunMessage:`Legen Sie Ihren ersten Datensatz an, um loszulegen.`,noMatches:`Keine passenden Datensätze`,noMatchesMessage:`Keine Datensätze entsprechen Ihren aktuellen Filtern oder Ihrer Suche. Passen Sie sie an oder setzen Sie sie zurück.`,loadErrorTitle:`Datensätze konnten nicht geladen werden`,loadErrorMessage:`Beim Laden dieser Daten ist etwas schiefgelaufen. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.`,loadErrorForbiddenTitle:`Kein Zugriff`,loadErrorForbiddenMessage:`Sie haben keine Berechtigung, diese Datensätze anzuzeigen. Wenden Sie sich an Ihren Administrator, wenn Sie Zugriff benötigen.`,loadErrorUnauthorizedTitle:`Anmeldung erforderlich`,loadErrorUnauthorizedMessage:`Ihre Sitzung ist abgelaufen oder Sie sind abgemeldet. Melden Sie sich erneut an, um diese Datensätze anzuzeigen.`,loadErrorRejectedTitle:`Die Abfrage dieser Ansicht wurde abgelehnt`,loadErrorRejectedMessage:`Der Server konnte den Filter oder die Abfrageoptionen dieser Ansicht nicht verarbeiten. Das Zurücksetzen der Filter behebt das meist; ist die Ansicht so gespeichert, muss ein Administrator sie korrigieren.`,loadErrorApiDisabledTitle:`Dieses Objekt ist über die API nicht verfügbar`,loadErrorApiDisabledMessage:`Diese Seite kann ihre Datensätze nicht laden, weil das Objekt nicht über die API bereitgestellt wird. Das ist eine Einstellung am Objekt selbst und keine Berechtigung – ein Administrator muss den API-Zugriff dafür aktivieren, damit diese Seite funktioniert.`,retry:`Erneut versuchen`,managedBy:{system:{title:`Hier ist noch nichts`,message:`Einträge erscheinen automatisch, wenn die zugehörige Aktion ausgeführt wird (z. B. Zur Genehmigung einreichen, Teilen, Einladen). Lösen Sie eine davon an einem Quelldatensatz aus, um eine Zeile zu erzeugen.`},appendOnly:{title:`Keine Ereignisse erfasst`,message:`Dies ist ein unveränderliches Audit-Protokoll. Zeilen werden von der Plattform geschrieben, wenn Ereignisse eintreten — Sie können den Verlauf exportieren, aber hier keine Einträge anlegen.`},betterAuth:{title:`Keine Identitätsdatensätze`,message:`Diese Datensätze werden vom Authentifizierungsanbieter erstellt — durch Anmeldung, Bereitstellung und Sicherheitsabläufe — und nicht hier von Hand hinzugefügt.`},betterAuthUser:{title:`Noch keine Benutzer`,message:`Benutzerkonten werden vom Authentifizierungsanbieter bereitgestellt und nicht hier erstellt. Laden Sie Kolleginnen und Kollegen in Ihre Organisation ein — sie erscheinen bei der ersten Anmeldung automatisch (SSO Just-in-time-Provisionierung). Endnutzer Ihrer App kommen hinzu, sobald sie sich über Ihre App registrieren.`},betterAuthTeam:{title:`Noch keine Teams`,message:`Teams fassen Mitglieder innerhalb einer Organisation zusammen. Legen Sie eines über „Team erstellen“ an, oder sie entstehen über die Organisations- und SSO-Provisionierung Ihres Authentifizierungsanbieters.`}},refresh:`Aktualisieren`,loading:`Datensätze werden geladen…`,recordCount:`{{count}} Datensätze`,recordCountOne:`{{count}} Datensatz`,addRecord:`Datensatz hinzufügen`,tabs:`Tabs`,allRecords:`Alle Datensätze`,search:`Suche`,filter:`Filtern`,filterRecords:`Datensätze filtern`,sort:`Sortieren`,sortRecords:`Datensätze sortieren`,sortByIdSuffix:`(nach ID)`,sortRelationalHint:`Spalten, die auf einen anderen Datensatz verweisen, werden nicht aufgeführt: Sie lassen sich nur nach der gespeicherten ID sortieren, nicht nach dem in der Zelle angezeigten Namen. Um nach diesem Namen zu sortieren, denormalisieren Sie ihn auf dieses Objekt — als gespeichertes Feld, das bei einer Änderung der Quelle geschrieben wird — und sortieren Sie danach. Kein Formelfeld: Es ist virtuell, es wird keine Spalte dafür gespeichert, und der Server verweigert die Sortierung danach.`,resetSortToDefault:`Auf Standard der Ansicht zurücksetzen`,group:`Gruppieren`,groupBy:`Gruppieren nach`,export:`Exportieren`,exportAs:`Exportieren als {{format}}`,color:`Farbe`,rowColor:`Zeilenfarbe`,colorByField:`Nach Feld einfärben`,clear:`Löschen`,none:`Keine`,hideFields:`Felder ausblenden`,noItems:`Keine Einträge gefunden`,noItemsMessage:`Es gibt keine Datensätze. Versuchen Sie, die Filter anzupassen oder neue Daten hinzuzufügen.`,showAll:`Alle anzeigen`,pullToRefresh:`Zum Aktualisieren ziehen`,refreshing:`Aktualisiere…`,share:`Teilen`,print:`Drucken`,hideFieldsTitle:`Felder ausblenden`,dataLimitReached:`Die ersten {{limit}} Datensätze werden angezeigt. Möglicherweise sind weitere Daten verfügbar.`,viewSettings:`Ansichtseinstellungen`,viewSettingsHint:`Gruppierung, Farbe, Dichte und sichtbare Felder.`,addGroup:`Gruppenfeld hinzufügen`,collapsedByDefault:`Standardmäßig eingeklappt`,removeGroup:`Entfernen`,inlineEditShort:`Inline bearbeiten`,inlineEditLabel:`Datensätze inline bearbeiten (Zelle anklicken zum Bearbeiten)`,recordEditingTitle:`Datensatzbearbeitung`},managedByBadge:{systemWritable:{short:`Plattform-Schema`,title:`Plattformdefiniert, für Admins beschreibbar`,body:`Das Schema dieses Objekts wird von der Plattform definiert, seine Zeilen können Sie hier jedoch selbst anlegen und bearbeiten. Wer schreiben darf, regeln die delegierte Administration und die Datensatzsicherheit — nicht dieses Abzeichen.`},config:{short:`Admin-Konfiguration`,title:`Administrator-Konfiguration`,body:`Diese Zeilen definieren das Laufzeitverhalten der Plattform. Erstellen Sie sie hier; die erzeugten Laufzeitdaten liegen in einer separaten Tabelle.`},system:{short:`Systemverwaltet`,title:`Von der Plattform verwaltet`,body:`Zeilen werden automatisch erstellt, wenn Aktionen auf dem Quelldatensatz ausgeführt werden. Die Liste ist eine schreibgeschützte Überwachungsansicht – Aktionen auf Zeilenebene (Genehmigen, Zurückrufen, Erneut senden, …) befinden sich an jeder Zeile.`},appendOnly:{short:`Schreibgeschützt · Audit-Log`,title:`Schreibgeschützter Verlauf`,body:`Unveränderliches Audit-Log. Zeilen können in der UI nicht erstellt, bearbeitet oder gelöscht werden – die Plattform schreibt sie bei Ereignissen. Nutzen Sie Export für Compliance-Prüfungen.`},betterAuth:{short:`Identität`,title:`Vom Identitätsanbieter verwaltet`,body:`Das Schema dieses Objekts gehört {{provider}}. Direkte Änderungen umgehen Passwort-Hashing, Sitzungsvalidierung, Zwei-Faktor-Prüfungen und Audit-Hooks. Verwalten Sie diese Datensätze über die Anmelde-, Einladungs- und Sicherheitsabläufe Ihres Authentifizierungsanbieters.`}},kanban:{uncategorized:`Nicht kategorisiert`,columns:`Spalten`,addCard:`Karte hinzufügen`,addColumn:`Spalte hinzufügen`,moveCard:`Karte verschieben`,deleteCard:`Karte löschen`,deleteColumn:`Spalte löschen`,noCards:`Keine Karten`,cardTitlePlaceholder:`Kartentitel eingeben…`,requiredFieldsTitle:`Erforderliche Felder ausfüllen`,requiredFieldsDescription:`Durch diese Verschiebung werden die folgenden Felder zu Pflichtfeldern. Füllen Sie sie aus, um fortzufahren.`},timeline:{bucket:{overdue:`Überfällig`,today:`Heute`,tomorrow:`Morgen`,thisWeek:`Diese Woche`,nextWeek:`Nächste Woche`,later:`Später`,noDate:`Kein Datum`,unassigned:`Nicht zugewiesen`},scale:{week:`Woche {{n}}`,quarter:`Q{{quarter}} {{year}}`},gantt:{rowLabel:`Elemente`}},gantt:{viewMode:{day:`Tag`,week:`Woche`,month:`Monat`,quarter:`Quartal`,year:`Jahr`},row:{expand:`Aufklappen`,collapse:`Zuklappen`,open:`Details öffnen`},aria:{taskList:`Vorgangsliste`},tooltip:{days:`T`},menu:{view:`Details anzeigen`,edit:`Inline bearbeiten`,delete:`Löschen`,addPredecessor:`Vorgänger hinzufügen…`,addSuccessor:`Nachfolger hinzufügen…`,removeDependency:`Abhängigkeit entfernen`,noCandidates:`Keine verfügbaren Vorgänge`,searchTasks:`Vorgänge suchen…`},delete:{title:`Diesen Vorgang löschen?`,body:`„{{title}}“ wird dauerhaft entfernt. Diese Aktion kann nicht rückgängig gemacht werden.`,cancel:`Abbrechen`,confirm:`Löschen`,deleting:`Wird gelöscht…`},drawer:{fallbackTitle:`Vorgangsdetails`},linkType:{fs:`Ende → Anfang`,ss:`Anfang → Anfang`,ff:`Ende → Ende`,sf:`Anfang → Ende`},linkEnd:{start:`Anfang`,end:`Ende`},link:{rejected:{self:`Ein Vorgang kann nicht von sich selbst abhängen.`,locked:`Diese Zeile ist gesperrt und kann keine neue Abhängigkeit aufnehmen.`,group:`Eine Sammelzeile kann keine Abhängigkeit aufnehmen — verknüpfen Sie stattdessen einen ihrer Vorgänge.`,cycle:`Diese Verknüpfung würde eine zirkuläre Abhängigkeit erzeugen.`}},conflict:{title:`Terminkonflikt`,body:`Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?`,confirm:`Automatisch neu planen`,cancel:`Unverändert lassen`},autoScheduleDlg:{title:`Automatisch planen`,body:`{{count}} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?`,skipped:`{{count}} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.`,confirm:`Anwenden`,cancel:`Abbrechen`,none:`Alle Abhängigkeiten sind erfüllt — nichts neu zu planen.`},resource:{header:`Ressource`,peak:`Spitze`,over:`überlastet`,empty:`Keine Vorgänge zum Zuweisen.`},quickFilter:{all:`Alle`,clear:`Filter zurücksetzen`,empty:`Keine Optionen`,resultSummary:`{shown} / {total} Vorgänge werden angezeigt`},readOnly:`Schreibgeschützt`,readOnlyHint:`Die Bearbeitung ist in dieser Ansicht deaktiviert.`,lockedHint:`Keine Bearbeitungsberechtigung`,writeFailed:`Speichern fehlgeschlagen — die Änderung wurde zurückgenommen`,column:{taskName:`Aufgabenname`,start:`Start`,end:`Ende`},toolbar:{thisWeek:`Diese Woche`,thisMonth:`Dieser Monat`,viewMode:`Zeitachsen-Granularität`,enterFullscreen:`Vollbild aktivieren`,exitFullscreen:`Vollbild beenden`,criticalPath:`Kritischen Pfad hervorheben`,autoSchedule:`Abhängigkeiten automatisch planen`,exportPng:`Als PNG exportieren`,exportPdf:`PDF exportieren`,saveLayout:`Layout speichern`,refresh:`Aktualisieren`,undo:`Rückgängig`,redo:`Wiederholen`,prevPeriod:`Vorherige Periode`,nextPeriod:`Nächste Periode`,zoomIn:`Vergrößern`,zoomOut:`Verkleinern`,jumpToToday:`Zu heute springen`,today:`Heute`,showTaskList:`Aufgabenliste anzeigen`,hideTaskList:`Aufgabenliste ausblenden`}},view:{editViewConfig:`Ansichtskonfiguration bearbeiten`,rename:`Umbenennen`,duplicateView:`Ansicht duplizieren`,shareView:`Ansicht teilen`,setAsDefault:`Als Standard festlegen`,pinView:`Ansicht anheften`,unpinView:`Ansicht lösen`,changeViewType:`Ansichtstyp ändern`,deleteView:`Ansicht löschen`,addView:`Ansicht hinzufügen`,unsavedChanges:`Ungespeicherte Änderungen`,saveAsView:`Als Ansicht speichern`,moreViews:`{{count}} weitere`,activeFilters:`Filter aktiv`,activeSort:`Sortierung aktiv`,manageViews:`Ansichten verwalten`,manageAllViews:`Alle Ansichten verwalten…`,manageViewsDescription:`Alle Ansichten dieses Objekts neu anordnen, umbenennen, anheften oder löschen.`,searchViews:`Ansichten suchen`,addNewView:`Neue Ansicht hinzufügen`,done:`Fertig`,noViewsFound:`Keine Ansichten entsprechen Ihrer Suche.`,dragToReorder:`Zum Neuanordnen ziehen`,defaultView:`Standardansicht`,defaultBadge:`Standard`,tabActionsFor:`Ansichtsaktionen für {{name}}`,readonlyAriaLabel:`Schreibgeschützte Ansicht`,readonlyTooltip:`Systemansicht — im Code definiert, schreibgeschützt.`},designer:{undo:`Rückgängig`,redo:`Wiederholen`},detail:{editInlineHint:`Zum Bearbeiten doppelklicken`,systemActor:`System`,unknownUser:`Unbekannt`,back:`Zurück`,edit:`Bearbeiten`,editInline:`Bearbeiten`,save:`Speichern`,saveChanges:`Änderungen speichern`,editFieldsInline:`Felder bearbeiten`,share:`Teilen`,duplicate:`Duplizieren`,export:`Exportieren`,viewHistory:`Verlauf anzeigen`,delete:`Löschen`,moreActions:`Weitere Aktionen`,addReaction:`Reaktion hinzufügen`,pageHeaderActions:`Aktionen der Seitenkopfzeile`,emojiPicker:`Emoji-Auswahl`,reactionCount:`{{emoji}} {{count}} Reaktionen`,reactionCountOne:`{{emoji}} {{count}} Reaktion`,recordDetail:`Datensatzdetails`,recordDetailWithLabel:`{{label}}-Details`,openAsFullPage:`Als ganze Seite öffnen`,recordDetailOverlay:`Detail-Overlay des Datensatzes für {{title}}.`,addToFavorites:`Zu Favoriten hinzufügen`,removeFromFavorites:`Aus Favoriten entfernen`,previousRecord:`Vorheriger Datensatz`,nextRecord:`Nächster Datensatz`,recordOf:`{{current}} von {{total}}`,recordNotFound:`Datensatz nicht gefunden`,recordNotFoundDescription:`Der gesuchte Datensatz existiert nicht oder wurde möglicherweise gelöscht.`,goBack:`Zurück`,details:`Details`,related:`Verknüpft`,relatedRecords:`{{count}} Datensätze`,relatedRecordOne:`{{count}} Datensatz`,noRelatedRecords:`Keine verknüpften Datensätze gefunden`,loading:`Laden…`,copyToClipboard:`In Zwischenablage kopieren`,copied:`Kopiert!`,deleteConfirmation:`Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?`,deleted:`Datensatz gelöscht`,editRecord:`Datensatz bearbeiten`,viewAll:`Alle anzeigen`,new:`Neu`,add:`Hinzufügen`,emptyValue:`—`,comments:`Kommentare`,searchComments:`Kommentare suchen…`,addCommentPlaceholder:`Kommentar hinzufügen… (Strg+Enter zum Senden)`,noMatchingComments:`Keine passenden Kommentare`,noCommentsYet:`Noch keine Kommentare`,pinned:`Angeheftet`,pin:`Anheften`,unpin:`Lösen`,justNow:`gerade eben`,minutesAgo:`vor {{count}} Min.`,hoursAgo:`vor {{count}} Std.`,daysAgo:`vor {{count}} Tg.`,dropFilesToUpload:`Dateien hierher ziehen oder klicken zum Hochladen`,attachmentCount:`{{count}} Anhang`,attachmentCountPlural:`{{count}} Anhänge`,removeAttachment:`Anhang entfernen`,attachments:`Anhänge`,uploadAttachment:`Hochladen`,loadingAttachments:`Anhänge werden geladen…`,noAttachments:`Noch keine Anhänge. Laden Sie eine Datei hoch, um zu beginnen.`,downloadAttachment:`Herunterladen`,deleteAttachment:`Anhang löschen`,attachmentDeleteDenied:`Nur die hochladende Person oder jemand mit Bearbeitungsrecht für diesen Datensatz darf diesen Anhang löschen.`,attachmentParentAccessDenied:`Sie sind nicht berechtigt, Dateien an diesen Datensatz anzuhängen.`,attachmentDownloadDenied:`Sie sind nicht berechtigt, diesen Anhang herunterzuladen.`,attachmentAuthRequired:`Bitte melden Sie sich an, um diesen Anhang herunterzuladen.`,attachmentPermissionDenied:`Sie haben keine Berechtigung für diese Aktion.`,unifiedDiff:`Einheitliche Ansicht`,sideBySideDiff:`Nebeneinander-Ansicht`,noChanges:`Keine Änderungen`,previousVersion:`Vorherige`,currentVersion:`Aktuelle`,discussion:`Diskussion`,showDiscussion:`Diskussion anzeigen ({{count}})`,hideDiscussion:`Diskussion ausblenden`,bold:`Fett (Strg+B)`,italic:`Kursiv (Strg+I)`,listFormat:`Liste`,inlineCode:`Inline-Code`,mentionSomeone:`Jemanden erwähnen`,preview:`Vorschau`,submitComment:`Senden (Strg+Enter)`,sendComment:`Senden`,writeComment:`Kommentar schreiben…`,subscribedTooltip:`Abonniert — Klicken zum Abbestellen`,unsubscribedTooltip:`Benachrichtigungen abonnieren`,firstRecord:`Erster Datensatz (Pos1)`,previousRecordKey:`Vorheriger Datensatz (←)`,nextRecordKey:`Nächster Datensatz (→)`,lastRecord:`Letzter Datensatz (Ende)`,noRecords:`Keine Datensätze`,searchWhileNavigating:`Während der Navigation suchen`,searchRecords:`Datensätze suchen…`,allActivity:`Alle Aktivitäten`,commentsOnly:`Nur Kommentare`,fieldChangesFilter:`Feldänderungen`,tasksOnly:`Nur Aufgaben`,leaveCommentPlaceholder:`Kommentar hinterlassen… (Strg+Enter zum Senden)`,noActivity:`Keine Aktivitäten aufgezeichnet`,loadMore:`Mehr laden`,edited:`(bearbeitet)`,via:`über {{source}}`,viewSource:`Quelle anzeigen`,replyCount:`{{count}} Antwort`,replyCountPlural:`{{count}} Antworten`,replyPlaceholder:`Antworten…`,filterActivity:`Aktivität filtern`,openDiscussion:`Diskussionspanel öffnen`,closeDiscussion:`Diskussionspanel schließen`,subscribeAriaLabel:`Benachrichtigungen abonnieren`,unsubscribeAriaLabel:`Benachrichtigungen abbestellen`,clearSearch:`Suche löschen`,saving:`Speichern…`,lockedByApproval:`Zur Genehmigung gesperrt`,lockedTooltip:`Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; die Bearbeitung ist gesperrt`,writeStrippedTitle:`Gespeichert — einige Felder wurden jedoch nicht übernommen`,writeStrippedReadonly:`Schreibgeschützt und daher nicht übernommen: {{fields}}`,writeStrippedByState:`Im aktuellen Status dieses Datensatzes nicht bearbeitbar und daher nicht übernommen: {{fields}}`,approvalPendingEditable:`In Genehmigung · bearbeitbar`,approvalPendingTooltip:`Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; dieser Schritt erlaubt weiterhin die Bearbeitung`,approvalProgress:`Genehmigungen — {{got}} von {{need}}`,approvalProgressGroups:`Freigabe — {{got}} von {{need}} Gruppen`,approvalProgressLabel:`Genehmigungsfortschritt`,approvalsPanelTitle:`Genehmigungen`,cancelApproval:`Genehmigung zurückziehen`,cancelApprovalInFlight:`Zurückziehen…`,cancelApprovalTooltip:`Ausstehende Genehmigungsanfrage zurückziehen, um den Datensatz zu entsperren`,cancelApprovalTooltipUnlocked:`Ausstehende Genehmigungsanfrage zurückziehen`,cancelApprovalFailed:`Genehmigung konnte nicht zurückgezogen werden`,cancelApprovalUnavailable:`Das Zurückziehen von Genehmigungen wird bei dieser Datenquelle nicht unterstützt`,linkCopied:`Link in die Zwischenablage kopiert`,linkCopyFailed:`Link konnte nicht kopiert werden`,cancel:`Abbrechen`,cancelEdit:`Änderungen verwerfen`,sectionMoreDetails:`Weitere Details`,concurrentUpdateTitle:`Dieser Datensatz wurde von jemand anderem geändert`,concurrentUpdateDescription:`Ein anderer Benutzer hat während Ihrer Bearbeitung eine neuere Version von {{field}} gespeichert. Bitte wählen Sie, wie der Konflikt gelöst werden soll.`,concurrentUpdateYourEdit:`Ihre Bearbeitung`,concurrentUpdateCurrentValue:`Aktueller Wert`,concurrentUpdateUpdatedBy:`Aktualisiert von {{name}}`,concurrentUpdateUpdatedAt:`Aktualisiert am {{when}}`,concurrentUpdateReload:`Aktuelle Version laden`,concurrentUpdateOverwrite:`Trotzdem überschreiben`,concurrentUpdateCancel:`Abbrechen`,concurrentUpdateRecordLabel:`diesem Datensatz`,openInNewTab:`In neuem Tab öffnen`,activity:`Aktivität`,history:`Verlauf`,historyEmpty:`Noch kein Verlauf`,editRow:`Bearbeiten`,deleteRow:`Löschen`,deleteRowConfirmation:`Möchten Sie diesen Datensatz wirklich löschen?`,deleteRowTitle:`Datensatz löschen`,actions:`Aktionen`,previousPage:`Zurück`,nextPage:`Weiter`,pageOf:`Seite {{current}} von {{total}}`,sortBy:`Sortieren nach`,filterPlaceholder:`Filtern…`,highlightFields:`Schlüsselfelder`,createdBy:`Erstellt von`,updatedBy:`Aktualisiert von`,created:`Erstellt`,updated:`Aktualisiert`,showEmptyRelated:`+ {{count}} leer`,showEmptyRelated_one:`+ {{count}} leer`,showEmptyRelated_other:`+ {{count}} leer`,copyEmail:`E-Mail kopieren`,copyPhone:`Telefonnummer kopieren`,copyRecordId:`Datensatz-ID kopieren`,showEmptyFields:`{{count}} leere Felder anzeigen`,hideEmptyFields:`Leere Felder ausblenden`,noValue:`Kein Wert`},chart:{noData:`Keine Diagrammdaten verfügbar`,loading:`Diagramm wird geladen…`,nullCategory:`(Ohne Angabe)`},map:{searchLocations:`Orte suchen…`,locationDetails:`Standortdetails`,markersCount:`{{count}} Markierungen`,invalidCoordinates:`{{count}} Datensatz mit fehlenden oder ungültigen Koordinaten von der Karte ausgeschlossen.`,invalidCoordinatesPlural:`{{count}} Datensätze mit fehlenden oder ungültigen Koordinaten von der Karte ausgeschlossen.`},workflow:{draft:`Entwurf`,active:`Aktiv`,paused:`Pausiert`,completed:`Abgeschlossen`,cancelled:`Abgebrochen`,save:`Speichern`,publish:`Veröffentlichen`,addNode:`Knoten hinzufügen`,workflowFlow:`Workflow-Ablauf`,properties:`Eigenschaften`,connections:`Verbindungen`,quickConnect:`Schnellverbindung`,fromPlaceholder:`Von…`,toPlaceholder:`Nach…`,connect:`Verbinden`,label:`Bezeichnung`,type:`Typ`,description:`Beschreibung`,assignee:`Zuständiger`,assigneeType:`Zuständigkeitstyp`,user:`Benutzer`,role:`Rolle`,group:`Gruppe`,expression:`Ausdruck`,timeoutMinutes:`Zeitlimit (Minuten)`,selectNodeToEdit:`Knoten auswählen, um Eigenschaften zu bearbeiten`,workflowTitle:`Workflow-Titel`,newWorkflow:`Neuer Workflow`,outConnections:`{{count}} Ausgänge`,start:`Start`,end:`Ende`,task:`Aufgabe`,userTask:`Benutzeraufgabe`,serviceTask:`Serviceaufgabe`,scriptTask:`Skriptaufgabe`,approval:`Genehmigung`,condition:`Bedingung`,parallelGateway:`Paralleles Gateway`,joinGateway:`Zusammenführungs-Gateway`,boundaryEvent:`Grenzereignis`,delay:`Verzögerung`,notification:`Benachrichtigung`,webhook:`Webhook`,allowConcurrency:`Erlauben (gleichzeitig ausführen)`,forbidConcurrency:`Verbieten (neue überspringen)`,replaceConcurrency:`Ersetzen (bestehende abbrechen)`,queueConcurrency:`Warteschlange (nach aktuellem ausführen)`,conditionEvent:`Bedingung`,manualEvent:`Manuell`,webhookEvent:`Webhook`,timerEvent:`Timer`,signalEvent:`Signal`,versionHistory:`Versionshistorie`,importBpmn:`BPMN importieren`,exportBpmn:`BPMN exportieren`,undo:`Rückgängig`,redo:`Wiederholen`,resetZoom:`Zoom zurücksetzen`},dashboard:{noRows:`Keine Zeilen`,loading:`Wird geladen…`,pickMeasures:`Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.`,datasetUnsupported:`Diese Datenquelle unterstützt keine Dataset-Abfragen.`,details:`Details`,exportCsv:`CSV exportieren`,openInList:`In Liste öffnen`,filters:{label:`Dashboard-Filter`,dateRange:`Zeitraum`,allTime:`Gesamter Zeitraum`,custom:`Benutzerdefiniert…`,all:`Alle`,reset:`Zurücksetzen`,range:{today:`Heute`,yesterday:`Gestern`,this_week:`Diese Woche`,last_week:`Letzte Woche`,this_month:`Dieser Monat`,last_month:`Letzter Monat`,this_quarter:`Dieses Quartal`,last_quarter:`Letztes Quartal`,this_year:`Dieses Jahr`,last_year:`Letztes Jahr`,last_7_days:`Letzte 7 Tage`,last_30_days:`Letzte 30 Tage`,last_90_days:`Letzte 90 Tage`}},addWidget:`Widget hinzufügen`,removeWidget:`Widget entfernen`,editLayout:`Layout bearbeiten`,saveLayout:`Layout speichern`,resetLayout:`Layout zurücksetzen`,total:`Gesamt`,noDataAvailable:`Keine Daten verfügbar`,noDataSourceFor:`Keine Datenquelle verfügbar für`,trend:{vsLastQuarter:`vs. letztes Quartal`,vsLastMonth:`vs. letzten Monat`,vsLastWeek:`vs. letzte Woche`,vsLastYear:`vs. letztes Jahr`,vsYesterday:`vs. gestern`,vsPreviousPeriod:`vs. vorherige Periode`}},configPanel:{save:`Speichern`,discard:`Verwerfen`,close:`Schließen`,layout:`Layout`,columns:`Spalten`,gap:`Abstand`,rowHeight:`Zeilenhöhe`,data:`Daten`,refreshInterval:`Aktualisierungsintervall`,appearance:`Darstellung`,title:`Titel`,showDescription:`Beschreibung anzeigen`,theme:`Design`,configuration:`Konfiguration`,general:`Allgemein`,advanced:`Erweitert`},appDesigner:{createApp:`Anwendung erstellen`,editApp:`Anwendung bearbeiten`,basicInfo:`Grundlegende Infos`,objects:`Objekte`,navigation:`Navigation`,branding:`Branding`,appName:`App-Name`,appTitle:`Titel`,appDescription:`Beschreibung`,appIcon:`Symbol`,template:`Vorlage`,layout:`Layout`,layoutSidebar:`Seitenleiste`,layoutHeader:`Kopfzeile`,layoutEmpty:`Leer`,selectObjects:`Objekte auswählen`,searchObjects:`Objekte suchen…`,selectAll:`Alle auswählen`,deselectAll:`Alle abwählen`,navBuilder:`Navigations-Builder`,addGroup:`Gruppe hinzufügen`,addUrl:`URL hinzufügen`,addSeparator:`Trenner hinzufügen`,noNavItems:`Noch keine Navigationselemente.`,logoUrl:`Logo-URL`,primaryColor:`Primärfarbe`,faviconUrl:`Favicon-URL`,preview:`Vorschau`,complete:`Fertigstellen`,snakeCaseHint:`Muss snake_case sein (z.B. my_app)`,modeEdit:`Bearbeiten`,modePreview:`Vorschau`,modeCode:`Code`,addWidget:`Widget hinzufügen`,widgetProperties:`Widget-Eigenschaften`,dataSource:`Datenquelle`,valueField:`Wertfeld`,aggregate:`Aggregat`,colorVariant:`Farbvariante`,addComponent:`Komponente hinzufügen`,componentProperties:`Komponenteneigenschaften`,viewType:`Ansichtstyp`,fields:`Felder`,toolbar:`Symbolleiste`,showSearch:`Suche anzeigen`,showFilters:`Filter anzeigen`,showSort:`Sortierung anzeigen`,appearance:`Erscheinungsbild`,rowHeight:`Zeilenhöhe`,stripedRows:`Gestreifte Zeilen`,bordered:`Umrandet`,livePreview:`Echtzeit-Vorschau`,stepBasicDesc:`Name, Titel und Layout`,stepObjectsDesc:`Geschäftsobjekte auswählen`,stepNavigationDesc:`Navigationsbaum erstellen`,stepBrandingDesc:`Logo, Farben und Favicon`,noObjectsFound:`Keine Objekte gefunden.`,noNavItemsHint:`Noch keine Navigationselemente. Wählen Sie Objekte im vorherigen Schritt aus oder fügen Sie manuell hinzu.`,separator:`Trennlinie`,separatorLabel:`— Trennlinie —`,newGroup:`Neue Gruppe`,newLink:`Neuer Link`,saveDraft:`Entwurf speichern`,cancelConfirmTitle:`Änderungen verwerfen?`,cancelConfirmMessage:`Sie haben ungespeicherte Änderungen. Möchten Sie wirklich abbrechen?`,confirmDiscard:`Verwerfen`,keepEditing:`Weiter bearbeiten`,navNoItems:`Keine Navigationselemente. Klicken Sie auf die Schaltflächen oben, um Elemente hinzuzufügen.`,navNoPreviewItems:`Keine Elemente`,navLivePreview:`Live-Vorschau`,navCollapseGroup:`Gruppe einklappen`,navExpandGroup:`Gruppe ausklappen`,navAddChild:`Unterelement hinzufügen`,navMoveUp:`Nach oben`,navMoveDown:`Nach unten`,navRemove:`Entfernen`,navObjectPage:`Objektseite`,navDashboard:`Dashboard`,navPage:`Seite`,navReport:`Bericht`,navGroup:`Gruppe`,navUrl:`URL`,navSeparator:`Trenner`,navTypeObject:`Objekt`,navTypeDashboard:`Dashboard`,navTypePage:`Seite`,navTypeReport:`Bericht`,navTypeUrl:`URL`,navTypeGroup:`Gruppe`,navTypeSeparator:`Trenner`,navTypeAction:`Aktion`,navTypeComponent:`Komponente`,navEditIcon:`Symbol bearbeiten`,navToggleVisible:`Sichtbarkeit umschalten`,navHidden:`Ausgeblendet`,navExportSchema:`JSON exportieren`,navImportSchema:`JSON importieren`,navExportSuccess:`Navigationsschema exportiert`,navImportSuccess:`Navigationsschema importiert`,navImportError:`Ungültiges Navigations-JSON`,navIconPlaceholder:`Symbolname (z.B. Users)`,dashboardEditor:`Dashboard-Editor`,noWidgets:`Keine Widgets. Klicken Sie oben auf einen Button, um eines hinzuzufügen.`,widgetLayoutSize:`Layout-Größe`,widgetWidth:`Breite`,widgetHeight:`Höhe`,dashboardPreview:`Dashboard-Vorschau`,noWidgetsPreview:`Keine Widgets zum Vorschauen`,pageCanvasEditor:`Seiten-Canvas-Editor`,emptyPage:`Leere Seite. Klicken Sie oben auf einen Button, um eine Komponente hinzuzufügen.`,pagePreview:`Seiten-Vorschau`,noComponentsPreview:`Keine Komponenten zum Vorschauen`,modePage:`Seite`,modeDashboard:`Dashboard`,undo:`Rückgängig`,redo:`Wiederholen`,brandingEditor:`Branding-Editor`,brandingExport:`JSON exportieren`,brandingImport:`JSON importieren`,brandingPreview:`Vorschau`,brandingSampleButton:`Beispiel-Schaltfläche`,brandingSampleText:`So wird Ihr Markenthema aussehen.`,colorPalette:`Farbpalette`,fontFamily:`Schriftfamilie`,fontDefault:`Standard (System)`,modeLight:`Hell`,modeDark:`Dunkel`,mobilePreview:`Mobil-Vorschau`,objectManager:{title:`Objekt-Manager`,addObject:`Neues Objekt`,searchPlaceholder:`Objekte suchen…`,noObjects:`Keine Objekte gefunden.`,objectName:`API-Name`,objectLabel:`Bezeichnung`,pluralLabel:`Pluralbezeichnung`,icon:`Symbol`,selectIcon:`Symbol auswählen…`,group:`Gruppe`,noGroup:`Keine Gruppe`,sortOrder:`Sortierreihenfolge`,enabled:`Aktiviert`,relationships:`Beziehungen`,systemBadge:`System`,fieldCount:`{{count}} Felder`,ungrouped:`Ohne Gruppe`,deleteConfirmTitle:`Objekt löschen?`,deleteConfirmMessage:`Dadurch wird das Objekt und alle seine Felder dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.`},fieldDesigner:{title:`Feld-Designer`,addField:`Neues Feld`,searchPlaceholder:`Felder suchen…`,allTypes:`Alle Typen`,noFields:`Keine Felder gefunden.`,fieldName:`API-Name`,fieldLabel:`Bezeichnung`,fieldType:`Typ`,fieldGroup:`Gruppe`,description:`Beschreibung`,required:`Erforderlich`,unique:`Eindeutig`,readOnly:`Nur lesen`,hidden:`Ausgeblendet`,indexed:`Indiziert`,externalId:`Externe ID`,trackHistory:`Verlauf verfolgen`,defaultValue:`Standardwert`,placeholder:`Platzhalter`,referenceTo:`Verweis auf`,formula:`Formel`,options:`Optionen`,addOption:`Option hinzufügen`,validationRules:`Validierungsregeln`,addRule:`Regel hinzufügen`,systemBadge:`System`,ungrouped:`Allgemein`,deleteConfirmTitle:`Feld löschen?`,deleteConfirmMessage:`Das Feld wird dauerhaft gelöscht. Vorhandene Daten in diesem Feld gehen verloren.`,basicSection:`Grundlagen`,typeSpecificSection:`Typeinstellungen`,advancedSection:`Erweitert`,typeCategory:{text:`Text`,number:`Zahl`,date:`Datum & Uhrzeit`,choice:`Auswahl`,relation:`Beziehung`,advanced:`Erweitert`}}},console:{saveAdvisoryTitle:`Gespeichert — die Autorenprüfung ergab {{count}} Hinweis(e)`,settingsHub:{title:`Einstellungen`,subtitle:`Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.`,loadError:`Einstellungen konnten nicht geladen werden`,empty:`Keine Einstellungen registriert. Plugins können Einstellungsmanifeste über den SettingsService registrieren.`,settingsCount:`{{n}} Einstellungen`,beta:`Beta`,categories:{Workspace:`Workspace`,Communication:`Kommunikation`,Security:`Sicherheit`,Infrastructure:`Infrastruktur`,Beta:`Beta`,Other:`Sonstiges`}},objectData:{badge:`Daten`,description:`Über die URL definierter Datenausschnitt — nicht an eine gespeicherte Ansicht gebunden.`,filteredBy:`Gefiltert nach`,removeFilter:`Filter {{field}} entfernen`,saveAsView:`Als Ansicht speichern`,noAccessTitle:`Zugriff verweigert`,noAccess:`Sie haben keine Berechtigung, diese Daten anzuzeigen.`},identityImport:{policyTitle:`Anmelde-Einrichtung für importierte Benutzer`,policy:{auto:`Automatisch (empfohlen)`,invite:`Einladungen senden`,temporary:`Temporäre Passwörter`,none:`Kein Passwort (nur Identität)`},policyHint:{auto:`Erreichbare Benutzer erhalten eine Einladung (E-Mail oder SMS); wer nicht erreichbar ist, erhält ein Einmalpasswort, das NUR EINMAL auf dem Ergebnisbildschirm angezeigt wird. Funktioniert mit und ohne E-Mail-/SMS-Dienst.`,invite:`Jeder angelegte Benutzer erhält eine E-Mail zum Setzen des Passworts (oder eine Einladungs-SMS bei Zeilen mit nur Telefonnummer). Erfordert einen konfigurierten E-Mail-/SMS-Dienst — nicht erreichbare Zeilen schlagen fehl.`,temporary:`Für Installationen ohne E-Mail/SMS: Jeder angelegte Benutzer erhält ein Einmalpasswort, das NUR EINMAL auf dem Ergebnisbildschirm angezeigt wird. Die erste Anmeldung erzwingt eine Änderung.`,none:`Benutzer melden sich zuerst mit einem Telefon-OTP, einem Magic Link oder einem Link zum Zurücksetzen des Passworts an und legen dann ihr eigenes Passwort fest.`},passwordsNote:`Temporäre Passwörter — einmalig angezeigt, nie gespeichert. Speichern Sie sie jetzt; jeder Benutzer muss seines bei der ersten Anmeldung ändern.`,passwordsMore:`Weitere Einträge ausgelassen — bitte den Download verwenden.`,passwordsDownload:`CSV herunterladen`},ai:{usage:{title:`KI-Nutzung`,meterBuild:`Erstellen`,meterAsk:`Fragen`,statusOk:`Reichlich übrig`,statusLow:`Wird knapp`,statusFull:`Limit erreicht`,resetsDaily:`Wird heute Nacht zurückgesetzt`,resetsMonthly:`Wird im nächsten Zyklus zurückgesetzt`,ctaUpgrade:`Upgraden, um weiterzumachen`,ctaTopUp:`Credits hinzufügen, um fortzufahren`,ariaLabel:`KI-Nutzung: {{status}}`},workspaceTitle:`KI-Workspace`,workspaceSubtitle:`Fragen stellen, prüfen und Unterhaltungen fortsetzen`,openChats:`Chats öffnen`,chats:`Chats`,chatsDescription:`KI-Unterhaltungen durchsuchen und verwalten.`,share:`Teilen`,shareTitle:`Diese Unterhaltung teilen`,shareDisabledTitle:`Beginnen Sie zu chatten, um das Teilen zu aktivieren`,newChat:`Neu`,searchChats:`Chats durchsuchen…`,noChatsYet:`Noch keine Chats`,noChatsDescription:`Starten Sie eine neue Unterhaltung, um sie hier zu sehen.`,noMatchingChats:`Keine passenden Chats.`,newConversation:`Neue Unterhaltung`,renameConversation:`Unterhaltung umbenennen`,deleteConversation:`Unterhaltung löschen`,saveRename:`Umbenennung speichern`,cancelRename:`Umbenennung abbrechen`,loadingHistory:`Unterhaltungsverlauf wird geladen…`,conversationReady:`Unterhaltung bereit`,preparingConversation:`Neue Unterhaltung wird vorbereitet`,offlineDemoMode:`Offline-Demomodus — Agentenliste nicht verfügbar`,sendFailedRateLimited:`Sie senden zu schnell Nachrichten. Ihre Nachricht wird unten aufbewahrt — warten Sie einen Moment und versuchen Sie es erneut.`,sendFailedGeneric:`Ihre Nachricht konnte nicht gesendet werden. Sie wird unten aufbewahrt — bitte versuchen Sie es erneut.`,askAgent:`{{agent}} fragen…`,assistant:`Assistent`,liveCanvas:`Live-Vorschau — {{app}} (Entwurf)`,liveCanvasUnlisted:`Live-App — {{app}} (nicht gelistet bis zur Veröffentlichung)`,loadingAgents:`Agenten werden geladen…`,askAnything:`Fragen Sie irgendetwas…`,emptyTitle:`Unterhaltung beginnen`,emptyDescription:`Fragen Sie irgendetwas — der Assistent hat Zugriff auf den Kontext Ihrer aktuellen App.`,switchAssistant:`Assistenten wechseln`,chooseAgent:`Assistenten wählen…`,empty:{build:{title:`Mit KI erstellen`,description:`Beschreiben Sie eine App oder einen Workflow in einfachen Worten — ich entwerfe die Objekte, Bildschirme und Automatisierungen, dann prüfen und veröffentlichen Sie.`},ask:{title:`Ihre Daten fragen`,description:`Stellen Sie Fragen zu Ihren Datensätzen — Anzahlen, Listen und Zusammenfassungen über die Daten, auf die Sie zugreifen können.`},editApp:{title:`„{{app}}“ wird bearbeitet`,titleGeneric:`Diese App bearbeiten`,description:`Was möchten Sie ändern? Ich passe diese App direkt an — ein Feld, Objekt, eine Ansicht oder Automatisierung hinzufügen oder Vorhandenes anpassen.`}},clearConversation:`Leeren`,sendHint:`zum Senden`,agentActivity:`Agentenaktivität`,toolCompleted:`Abgeschlossen`,toolRunning:`Läuft`,toolAwaitingApproval:`Warten auf Freigabe`,toolFailed:`Fehlgeschlagen`,toolDetailsHidden:`Tool-Eingaben und Rohergebnisse sind in dieser Ansicht ausgeblendet.`,copy:`Kopieren`,copied:`Kopiert`,regenerate:`Neu generieren`,model:`Modell`,submit:`Senden`,uploadFiles:`Dateien hochladen`,stopResponse:`Antwort stoppen`,trace:`Trace`,viewTrace:`Trace anzeigen`,nextSteps:`Wie geht es weiter`,publishDrafts:`Veröffentlichen`,publishOk:`Veröffentlicht — die Objekte sind jetzt live.`,seedWarn:`Veröffentlicht, aber einige Beispieldaten konnten nicht geladen werden.`,openBuiltApp:`App öffnen`,designBuiltApp:`In Studio gestalten`,previewDraft:`Vorschau`,previewApp:`App-Vorschau`,resizeSplit:`Chat und Vorschau anpassen`,hideChats:`Chats ausblenden`,showChats:`Chats anzeigen`,planTitle:`Vorgeschlagener Plan`,planQuestions:`Vor dem Erstellen bestätigen`,planAssumptions:`Annahmen`,planApproveHint:`Antworten Sie, um diesen Plan zu genehmigen oder anzupassen.`,planApprove:`Erstellen`,planAdjust:`Anpassen`,justNow:`gerade eben`,minutesAgo:`vor {{count}} Min.`,hoursAgo:`vor {{count}} Std.`,daysAgo:`vor {{count}} T.`,agentLabels:{ask:`Fragen`,build:`Erstellen`,dataChat:`Assistent`,metadataAssistant:`Metadaten-Assistent`},suggestions:{dataChat:{userCount:`Wie viele Benutzer gibt es im System? Liste ihre E-Mail-Adressen auf.`,recentRecords:`Liste die 5 zuletzt erstellten Datensätze auf.`,recordCounts:`Zähle die Datensätze je Objekt.`},metadataAssistant:{buildCrm:`Erstelle ein Vertriebs-CRM — Kunden, Kontakte und eine Deal-Pipeline, die ich nach Phase summieren kann.`,buildApp:`Erstelle einen Projekt-Tracker — Projekte, Aufgaben mit Verantwortlichen und Fälligkeitsdaten sowie ein Board nach Status.`,buildFlow:`Entwirf einen Support-Desk — Tickets mit Priorität, einen Status-Workflow und Kundenverknüpfungen.`,buildInventory:`Erstelle eine Bestands-App — Produkte, Lagerbestände, Lieferanten und Sichtbarkeit niedriger Bestände.`,buildRecruiting:`Erstelle einen Bewerber-Tracker — Kandidaten, offene Stellen, Interviewphasen und Notizen.`},generic:{help:`Wobei kannst du mir helfen?`,availableObjects:`Liste die verfügbaren Datenobjekte auf.`,recentActivity:`Fasse meine letzten Aktivitäten zusammen.`},editApp:{addField:`Füge einem der Objekte ein Feld hinzu.`,addObject:`Füge ein neues Objekt hinzu und verknüpfe es mit einem bestehenden.`,addDashboard:`Füge ein Dashboard für die wichtigsten Kennzahlen hinzu.`,addAutomation:`Füge eine Automatisierung hinzu — eine Freigabe, einen Statusablauf oder eine Benachrichtigung.`}},changesTitle:`Änderungen bestätigen`,changesConfirmed:`Bestätigt`,changesConfirm:`Bestätigen`,changesConfirmHint:`Antworten Sie, um diese Änderung zu bestätigen oder anzupassen.`,changeVerb:{createObject:`Objekt erstellen`,addField:`Feld hinzufügen`,modifyField:`Feld ändern`,deleteField:`Feld löschen`,createMetadata:`Erstellen`,updateMetadata:`Ändern`,createSeed:`Beispieldaten erzeugen`,createPackage:`App-Paket erstellen`},collapseToDock:`In die Seitenleiste einklappen`,switchApp:`App wechseln`,switchAppLabel:`Build-Unterhaltungen nach App`,newApp:`Neue App`,connectionWaiting:`Warten auf den Server…`,connectionStalled:`Arbeitet noch…`,connectionOffline:`Verbindung verloren — Neuverbindung…`,designingPlan:`Ihre App wird entworfen…`,designingPlanHint:{data:`Die Daten, die Sie erfassen möchten, werden strukturiert…`,objects:`Objekte und ihre Felder werden geformt…`,relations:`Verknüpfte Datensätze werden verbunden…`,lookups:`Beziehungen und Lookups werden eingerichtet…`,views:`Bildschirme und Ansichten werden geplant…`,forms:`Formulare und Listen werden angeordnet…`,defaults:`Sinnvolle Standardwerte und Validierungen werden hinzugefügt…`,dashboard:`Ein Dashboard zur Nachverfolgung wird skizziert…`,review:`Es wird noch einmal geprüft, ob die Struktur zusammenpasst…`,finalize:`Der Plan wird zusammengestellt…`},planBuilding:`Wird erstellt…`,planBuilt:`Erstellt`,planDeferred:`Noch nicht erstellt`,planReady:`Der Plan ist fertig. Erstellen Sie ihn jetzt, oder sagen Sie mir, was angepasst werden soll.`,published:`Veröffentlicht`,publishFailed:`Veröffentlichen fehlgeschlagen`,unavailableTitle:`KI-Assistent nicht verfügbar`,unavailableDescription:`In dieser Bereitstellung ist kein KI-Assistent aktiviert. Alles andere funktioniert wie gewohnt.`,unavailableError:`Der KI-Dienst war nicht erreichbar. Er ist möglicherweise vorübergehend offline — versuchen Sie es erneut, oder kehren Sie zur Startseite zurück.`,unavailableRetry:`Erneut versuchen`,unavailableHome:`Zurück zur Startseite`,dock:{title:`Assistent`,description:`KI-Assistent-Chat`,resize:`Chatbreite anpassen`,collapse:`Chat einklappen`,maximize:`Als ganze Seite öffnen`,open:`Assistent öffnen`},group:{today:`Heute`,yesterday:`Gestern`,previous7Days:`Vorherige 7 Tage`,previous30Days:`Vorherige 30 Tage`,older:`Älter`}},title:`ObjectStack Konsole`,initializing:`Anwendung wird initialisiert…`,loadingHint:`Die Einrichtung einer neuen Umgebung kann einen Moment dauern.`,breadcrumb:{dashboards:`Dashboards`,pages:`Seiten`,reports:`Berichte`,system:`System`},settingsView:{backToHub:`Alle Einstellungen`,back:`Zurück`,noNamespace:`Kein Namensraum ausgewählt.`,loadError:`Einstellungen konnten nicht geladen werden`,saved:`Einstellungen gespeichert`,saveFailed:`Speichern fehlgeschlagen`,lockedByEnv:`Durch Umgebung gesperrt: {{key}}`,lockedByEnvNoKey:`Durch Umgebung gesperrt`,actionSucceeded:`Aktion erfolgreich`,actionFailed:`Aktion fehlgeschlagen`,discard:`Verwerfen`,saveChanges:`Änderungen speichern`,unsavedCount:`{{count}} nicht gespeicherte Änderungen`,unsavedCount_one:`{{count}} nicht gespeicherte Änderung`,unsavedCount_other:`{{count}} nicht gespeicherte Änderungen`,cryptoRefusalTitle:`Diese Installation kann keine Geheimnisse verschlüsseln`,cryptoRefusalSubjectSuffix:`ist als verschlüsselt deklariert, daher wurde nichts geschrieben.`,cryptoRefusalNoSubject:`Der als verschlüsselt deklarierte Wert wurde abgelehnt, daher wurde nichts geschrieben.`,cryptoRefusalToast:`Geheimnisse können nicht verschlüsselt werden: {{subject}}`,cryptoRefusalToastNoSubject:`Geheimnisse können nicht verschlüsselt werden`},loadingSteps:{connecting:`Verbindung zur Datenquelle herstellen`,loadingConfig:`Konfiguration laden`,preparingWorkspace:`Arbeitsbereich vorbereiten`},error:{connectionFailed:`Verbindung zum Server nicht möglich`,serverUnreachable:`Der Server {{url}} ist nicht erreichbar.`,checkServer:`Bitte prüfen Sie Ihre Netzwerkverbindung oder ob das Backend läuft.`,timeout:`Zeitüberschreitung der Verbindung nach 10 Sekunden.`},actions:{retry:`Erneut versuchen`,retrying:`Wird wiederholt…`},serverAction:{openingTitle:`Wird geöffnet…`,openingBody:`Wird geöffnet… das kann einen Moment dauern.`,popupBlockedTitle:`Pop-up blockiert`,popupBlockedDescription:`Der Browser hat das Öffnen des neuen Tabs blockiert.`,popupBlockedAction:`In neuem Tab öffnen`},shortcuts:{title:`Tastenkürzel`,description:`Kurzreferenz für alle verfügbaren Tastenkürzel.`,groups:{general:`Allgemein`,navigation:`Navigation`,dataViews:`Datenansichten`,aiChat:`KI-Assistent`,preferences:`Einstellungen`},openCommandPalette:`Befehlspalette öffnen`,showShortcuts:`Tastenkürzel anzeigen`,closeDialog:`Dialog / Panel schließen`,toggleSidebar:`Seitenleiste umschalten`,focusSearch:`Suche fokussieren`,createRecord:`Neuen Datensatz erstellen`,refreshData:`Daten aktualisieren`,editRecord:`Ausgewählten Datensatz bearbeiten`,newChat:`Neuer Chat`,toggleChatsList:`Chatliste umschalten`,toggleDarkMode:`Dunkelmodus umschalten`},commandPalette:{title:`Befehlspalette`,placeholder:`Befehl eingeben oder suchen…`,noResults:`Keine Ergebnisse gefunden.`,objects:`Objekte`,dashboards:`Dashboards`,pages:`Seiten`,reports:`Berichte`,switchApp:`App wechseln`,current:`Aktuell`,preferences:`Einstellungen`,lightTheme:`Helles Design`,darkTheme:`Dunkles Design`,systemTheme:`Systemdesign`,actions:`Aktionen`,openFullSearch:`Vollständige Suchseite öffnen`,createApp:`Neue App erstellen`,searching:`Suche…`,records:`Datensätze`,recentRecords:`Zuletzt angesehen`},errors:{somethingWentWrong:`Etwas ist schiefgelaufen`,unexpectedError:`Beim Rendern dieser Ansicht ist ein unerwarteter Fehler aufgetreten.`,tryAgain:`Erneut versuchen`,goHome:`Zur Startseite`,errorDetails:`Fehlerdetails (nur Entwicklung)`},notFound:{title:`Seite nicht gefunden`,description:`Die aufgerufene URL entspricht keiner Ansicht in dieser App.`,back:`Zurück`},theme:{toggle:`Design umschalten`,light:`Hell`,dark:`Dunkel`,system:`System`},objectView:{viewTypeTree:`Baum`,viewTypeTreeDesc:`Selbstreferenzierende Datensätze über ein übergeordnetes Feld zu einer Hierarchie verschachteln.`,parentField:`Übergeordnetes Feld`,parentFieldHelp:`Das Feld, das auf den übergeordneten Datensatz (dasselbe Objekt) verweist und die Hierarchie definiert. Nur selbstreferenzierende Felder kommen infrage.`,viewName:`Name`,viewNameHelp:`Technischer Schlüssel (snake_case). Wird aus dem Titel automatisch gefüllt — bei Bedarf anpassen.`,viewNameRequired:`Geben Sie einen Schlüssel ein (Kleinbuchstaben, Ziffern, Unterstrich). Bei nicht-lateinischen Titeln wird er nicht automatisch gefüllt.`,viewNameInvalid:`Verwenden Sie Kleinbuchstaben, Ziffern und Unterstriche; beginnen Sie mit einem Buchstaben oder Unterstrich.`,systemViewReadonly:`Systemansicht — im Code definiert, schreibgeschützt.`,cannotEditMetaView:`Diese Ansicht ist integriert und im Code definiert – sie kann nicht geändert werden.`,cannotDeleteMetaView:`Diese Ansicht ist integriert und im Code definiert – sie kann nicht gelöscht werden.`,expandToPage:`Als ganze Seite öffnen`,objectNotFound:`Objekt nicht gefunden`,objectNotFoundDescription:`Das Objekt „{{objectName}}“ existiert in der aktuellen Konfiguration nicht.`,objectNotFoundHint:`Überprüfen Sie Ihre App-Navigationseinstellungen oder wählen Sie ein anderes Objekt aus der Seitenleiste.`,filterOrNotSavable:`Dieser Filter verknüpft Bedingungen mit ODER, was eine gespeicherte Ansicht noch nicht ablegen kann. Er gilt weiterhin für diese Liste – entfernen Sie die ODER-Gruppierung, um ihn in der Ansicht zu speichern.`,filterNestedNotSavable:`Dieser Filter verwendet verschachtelte Bedingungsgruppen, die eine gespeicherte Ansicht nicht ablegen kann. Reduzieren Sie ihn auf eine einzelne Bedingungsliste, um ihn in der Ansicht zu speichern.`,allRecords:`Alle Datensätze`,exitDesignMode:`Designmodus beenden`,enterDesignMode:`Designmodus starten`,metadataInspector:`Metadaten-Inspektor`,editView:`Ansicht bearbeiten`,addView:`Ansicht hinzufügen`,designTools:`Design-Werkzeuge`,new:`Neu`,configureView:`Ansicht konfigurieren`,closePanel:`Panel schließen`,page:`Seite`,pageConfigHint:`Symbolleiste, Navigation & Ansichts-Shell-Einstellungen`,listConfigHint:`Daten-Rendering, Spalten & Erscheinungsbild für diesen Listentyp`,general:`Allgemein`,generalHint:`Ansichtstitel, Beschreibung und Typ`,toolbar:`Symbolleiste`,toolbarHint:`Suche, Filter, Sortierung, Gruppierung und Dichteumschaltung`,toolbarEnabledCount:`{{count}} von {{total}} aktiviert`,navigationSection:`Navigation`,navigationHint:`Zeilenklickverhalten und Detailansichtseinstellungen`,records:`Datensätze`,recordsHint:`Auswahlmodus, Datensatz hinzufügen und Inline-Bearbeitung`,exportPrint:`Export & Drucken`,exportPrintHint:`Exportformate, Drucken und Anzeige der Datensatzanzahl`,showAllFields:`Alle anzeigen`,hideAllFields:`Alle ausblenden`,searchFields:`Felder suchen…`,title:`Titel`,description:`Beschreibung`,data:`Daten`,source:`Quelle`,columns:`Spalten`,filterBy:`Filtern nach`,sortBy:`Sortieren nach`,appearance:`Darstellung`,showDescription:`Beschreibung anzeigen`,viewType:`Ansichtstyp`,userFilters:`Benutzerfilter`,enableSearch:`Suche aktivieren`,enableFilter:`Filter aktivieren`,enableSort:`Sortierung aktivieren`,enableHideFields:`Felder ausblenden aktivieren`,enableGroup:`Gruppierung aktivieren`,enableColor:`Farbe aktivieren`,enableDensity:`Dichte aktivieren`,userActions:`Benutzeraktionen`,addRecordViaForm:`Datensätze über Formular hinzufügen`,advanced:`Erweitert`,allowExport:`Export erlauben`,recordCount:`{{count}} Datensätze`,noDescription:`Keine Beschreibung`,none:`Keine`,columnsConfigured:`{{count}} Spalten`,save:`Speichern`,discard:`Verwerfen`,createView:`Ansicht erstellen`,newView:`Neue Ansicht`,typeOptions:`Typoptionen`,groupByField:`Gruppierungsfeld`,startDateField:`Startdatumsfeld`,titleField:`Titelfeld`,latitudeField:`Breitengradfeld`,longitudeField:`Längengradfeld`,imageField:`Bildfeld`,dateField:`Datumsfeld`,selectField:`Feld auswählen…`,gridOptionsHint:`Die Tabellenansicht verwendet die oben konfigurierten Spalten.`,groupBy:`Gruppieren nach`,prefixField:`Präfixfeld`,fields:`Felder`,fieldsVisible:`{{count}} sichtbar`,sortsCount:`{{count}} Sortierungen`,filtersCount:`{{count}} Filter`,endDateField:`Enddatumsfeld`,color:`Farbe`,fieldTextColor:`Feldtextfarbe`,rowHeight:`Zeilenhöhe`,wrapHeaders:`Kopfzeilen umbrechen`,showFieldDescriptions:`Feldbeschreibungen anzeigen`,collapseAllByDefault:`Standardmäßig alle einklappen`,striped:`Gestreifte Zeilen`,bordered:`Umrandete Zellen`,inlineEdit:`Datensätze inline bearbeiten`,addDeleteRecordsInline:`Datensätze inline hinzufügen/löschen`,clickIntoRecordDetails:`Klicken für Datensatzdetails`,navigationMode:`Navigationsmodus`,navigationWidth:`Navigationsbreite`,navigationWidthHint:`Verfügbar für Schublade-, Modal- und Split-Navigationsmodi`,openNewTab:`In neuem Tab öffnen`,openNewTabHint:`Verfügbar für Seiten- und Neues-Fenster-Navigationsmodi`,import:`Importieren`,importTitle:`Aus CSV importieren`,importedToast:`{{count}} Zeile(n) importiert.`,importedWithSkipped:`{{ok}} Zeile(n) importiert; {{skipped}} übersprungen.`,showAdvancedSettings:`Erweiterte Einstellungen anzeigen`,showFewerSettings:`Weniger Einstellungen anzeigen`,createViewDesc:`Wählen Sie einen Ansichtstyp und geben Sie ihm einen Namen. Alle Einstellungen können danach geändert werden.`,cancel:`Abbrechen`,create:`Erstellen`,delete:`Löschen`,deleteViewTitle:`Ansicht löschen`,deleteViewConfirm:`Möchten Sie die Ansicht „{{name}}“ wirklich löschen? Dies kann nicht rückgängig gemacht werden.`,bulkDeleteConfirm:`{{count}} ausgewählte Datensätze löschen? Dies kann nicht rückgängig gemacht werden.`,duplicateViewName:`Eine Ansicht mit diesem Namen existiert bereits.`,viewTypeGrid:`Raster`,viewTypeGridDesc:`Tabellenkalkulationsartige Tabelle von Datensätzen.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Karten nach einem Einzelauswahlfeld in Spalten gruppiert.`,viewTypeCalendar:`Kalender`,viewTypeCalendarDesc:`Datensätze nach Datum in einem Monatskalender platziert.`,viewTypeGallery:`Galerie`,viewTypeGalleryDesc:`Große Bildkarten aus einem Anhangfeld.`,viewTypeTimeline:`Zeitstrahl`,viewTypeTimelineDesc:`Datensätze entlang einer horizontalen Zeitachse.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Projektbalken mit Start/Ende und Abhängigkeiten.`,viewTypeMap:`Karte`,viewTypeMapDesc:`Geografische Markierungen aus Breiten-/Längengradfelderm.`,viewTypeChart:`Diagramm`,viewTypeChartDesc:`Aggregierte Balken-/Linien-/Kreisdiagramme.`,groupByFieldHelp:`Das Kanban-Board gruppiert Datensätze anhand der Feldwerte in Spalten.`,startDateFieldHelp:`Der Kalender platziert Datensätze auf der Zelle, die diesem Datum entspricht.`,ganttStartDateFieldHelp:`Der linke Rand jedes Gantt-Balkens verwendet dieses Datum.`,ganttEndDateFieldHelp:`Der rechte Rand jedes Gantt-Balkens verwendet dieses Datum.`,timelineDateFieldHelp:`Datensätze werden anhand dieses Datums im Zeitstrahl platziert.`,latitudeFieldHelp:`Feld mit dem Breitengrad (nur Geo-Felder).`,longitudeFieldHelp:`Feld mit dem Längengrad (nur Geo-Felder).`,imageFieldHelp:`Das Galerie-Cover kommt aus diesem Bild- oder Anhangfeld.`,selectOption:`Auswählen…`,noEligibleFieldForType:`Kein geeignetes Feld dieses Typs. Fügen Sie zuerst eines zum Objekt hinzu.`,viewTypeUnavailable:`Dieses Objekt hat kein Feld, das als „{{field}}“ dienen kann.`,viewTypeUnavailableShort:`Nicht von diesem Objekt unterstützt.`,chartType:`Diagrammtyp`,chartTypeHelp:`Bestimmt, wie die Daten gerendert werden.`,chartTypeBar:`Balkendiagramm`,chartTypeLine:`Liniendiagramm`,chartTypePie:`Kreisdiagramm`,chartTypeArea:`Flächendiagramm`,chartTypeScatter:`Streudiagramm`,xAxisField:`X-Achse-Feld`,xAxisFieldHelp:`Die kategoriale oder zeitliche Dimension.`,yAxisField:`Y-Achse-Feld`,yAxisFieldHelp:`Das numerische Feld zur Aggregation.`,selectionMode:`Auswahlmodus`,selectionNone:`Keine`,selectionSingle:`Einzeln`,selectionMultiple:`Mehrfach`,pageSize:`Seitengröße`,pageSizeOptions:`Seitengrößenoptionen`,exportFormats:`Exportformate`,exportMaxRecords:`Maximale Datensätze`,exportIncludeHeaders:`Kopfzeilen einschließen`,exportFileNamePrefix:`Dateinamenpräfix`,searchableFields:`Durchsuchbare Felder`,filterableFields:`Filterbare Felder`,resizableColumns:`Größenveränderbare Spalten`,densityCompact:`Kompakt`,densityComfortable:`Normal`,densitySpacious:`Großzügig`,densityMode:`Dichtemodus`,hiddenFields:`Ausgeblendete Felder`,rowActions:`Zeilenaktionen`,bulkActions:`Massenaktionen`,sharing:`Teilen`,sharingEnabled:`Teilen aktivieren`,sharingVisibility:`Sichtbarkeit`,addRecordEnabled:`Datensatz hinzufügen aktivieren`,addRecordPosition:`Position`,addRecordMode:`Modus`,addRecordFormView:`Formularansicht`,conditionalFormatting:`Bedingte Formatierung`,addRule:`Regel hinzufügen`,quickFilters:`Schnellfilter`,addQuickFilter:`Schnellfilter hinzufügen`,ufElements:`Elemente`,ufDropdown:`Dropdown`,ufTabs:`Registerkarten`,ufToggle:`Umschalten`,ufAddField:`+ Filterfeld hinzufügen…`,ufNoFields:`Keine Felder verfügbar`,ufAddTab:`+ Registerkarte hinzufügen`,ufTabLabel:`Bezeichnung`,ufShowAllRecords:`Registerkarte „Alle Datensätze“ anzeigen`,ufAllowAddTab:`Registerkarten hinzufügen erlauben`,showRecordCount:`Datensatzanzahl anzeigen`,allowPrinting:`Drucken erlauben`,virtualScroll:`Virtuelles Scrollen`,emptyStateTitle:`Leerzustands-Titel`,emptyStateMessage:`Leerzustands-Nachricht`,emptyStateIcon:`Leerzustands-Symbol`,ariaLabel:`ARIA-Bezeichnung`,ariaDescribedBy:`ARIA-Beschreibung`,ariaLive:`ARIA-Live`,accessibility:`Barrierefreiheit`,viewTabs:`Ansichts-Registerkarten`},localeSwitcher:{label:`Sprache`},search:`Suchen…`,nav:{pinItem:`{{name}} anheften`,unpinItem:`{{name}} loslösen`,dragToReorder:`Zum Neuanordnen ziehen`,favorites:`Favoriten`}},auth:{setPassword:{title:`Wiederherstellungspasswort festlegen`,description:`Sie haben sich über Single Sign-on angemeldet. Legen Sie ein lokales Passwort fest, damit Sie sich weiterhin direkt an dieser Umgebung anmelden können, falls SSO einmal nicht verfügbar ist.`,email:`E-Mail`,newPassword:`Neues Passwort`,confirmPassword:`Passwort bestätigen`,submit:`Passwort festlegen`,submitting:`Wird gespeichert…`,success:`Lokales Passwort festgelegt`,failed:`Passwort konnte nicht festgelegt werden`,passwordsMismatch:`Die Passwörter stimmen nicht überein`,noSession:`Ihre Sitzung ist abgelaufen.`,backToSignIn:`Erneut anmelden`},login:{signingIn:`Sie werden angemeldet…`,ssoHandoff:`Weiter zu {{target}}`,devAdminHint:{title:`Entwicklungsinstanz`,body:`Melden Sie sich mit dem vorkonfigurierten Entwickler-Admin an:`,dismiss:`Ausblenden`},title:`In Ihr Konto einloggen`,description:`Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um fortzufahren`,emailLabel:`E-Mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Passwort`,passwordPlaceholder:`Passwort eingeben`,forgotPasswordText:`Passwort vergessen?`,submitButton:`Anmelden`,submittingButton:`Anmeldung läuft…`,noAccountText:`Noch kein Konto?`,signUpText:`Registrieren`,errors:{oauthCallbackFailed:`Die Single-Sign-on-Anmeldung konnte nicht abgeschlossen werden — der Anmeldelink ist abgelaufen oder wurde bereits verwendet. Bitte versuchen Sie es erneut.`,invalidCredentials:`Ungültige E-Mail oder Passwort. Bitte erneut versuchen.`,emailNotVerified:`Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sich anmelden.`},emailOrPhoneLabel:`E-Mail oder Telefonnummer`,emailOrPhonePlaceholder:`name@example.com oder +1 555 000 0000`,phoneLabel:`Telefonnummer`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Bestätigungscode`,otpCodePlaceholder:`6-stelliger Code`,sendOtpButton:`Code anfordern`,resendOtpCountdownText:`Erneut senden in {seconds} s`,usePhoneOtpText:`Mit Bestätigungscode anmelden`,usePasswordSignInText:`Stattdessen mit Passwort anmelden`},register:{title:`Konto erstellen`,description:`Geben Sie Ihre Daten ein, um loszulegen`,nameLabel:`Name`,namePlaceholder:`Max Mustermann`,emailLabel:`E-Mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Passwort`,passwordPlaceholder:`Passwort erstellen (mind. 8 Zeichen)`,confirmPasswordLabel:`Passwort bestätigen`,confirmPasswordPlaceholder:`Passwort bestätigen`,passwordMismatchError:`Passwörter stimmen nicht überein`,passwordTooShortError:`Das Passwort muss mindestens 8 Zeichen lang sein`,submitButton:`Konto erstellen`,submittingButton:`Konto wird erstellt…`,hasAccountText:`Bereits ein Konto?`,signInText:`Anmelden`,errors:{userExists:`Ein Konto mit dieser E-Mail existiert bereits. Versuchen Sie sich anzumelden.`},verifyInbox:{title:`Überprüfen Sie Ihren Posteingang`,description:`Wir haben einen Bestätigungslink an {{email}} gesendet. Klicken Sie auf den Link, um Ihr Konto zu aktivieren.`,resend:`Bestätigungs-E-Mail erneut senden`,resending:`Sende…`,resent:`Bestätigungs-E-Mail gesendet.`,backToSignIn:`Zurück zur Anmeldung`}},forgotPassword:{title:`Passwort zurücksetzen`,description:`Geben Sie Ihre E-Mail-Adresse ein und wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts`,emailLabel:`E-Mail`,emailPlaceholder:`name@example.com`,submitButton:`Link zum Zurücksetzen senden`,submittingButton:`Wird gesendet…`,successTitle:`Überprüfen Sie Ihre E-Mails`,successDescription:`Wir haben einen Link zum Zurücksetzen des Passworts an {{email}} gesendet. Bitte überprüfen Sie Ihren Posteingang.`,backToSignInText:`Zurück zur Anmeldung`,rememberPasswordText:`Passwort doch bekannt?`,signInText:`Anmelden`,phoneLabel:`Telefonnummer`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Bestätigungscode`,otpCodePlaceholder:`6-stelliger Code`,sendOtpButton:`Code anfordern`,resendOtpCountdownText:`Erneut senden in {seconds} s`,newPasswordLabel:`Neues Passwort`,newPasswordPlaceholder:`Neues Passwort eingeben`,resetButton:`Passwort zurücksetzen`,usePhoneResetText:`Per SMS-Code zurücksetzen`,useEmailResetText:`Stattdessen per E-Mail zurücksetzen`,phoneSuccessTitle:`Passwort zurückgesetzt`,phoneSuccessDescription:`Ihr Passwort wurde zurückgesetzt. Sie können sich jetzt mit dem neuen Passwort anmelden.`},resetPassword:{title:`Neues Passwort festlegen`,description:`Wählen Sie ein Passwort, das Sie noch nicht verwendet haben.`,newPassword:`Neues Passwort`,confirmPassword:`Passwort bestätigen`,submit:`Passwort aktualisieren`,submitting:`Aktualisiere…`,success:`Passwort aktualisiert`,failed:`Zurücksetzen fehlgeschlagen`,invalidToken:`Dieser Reset-Link ist ungültig oder abgelaufen.`,missingToken:`Reset-Link fehlt oder ist abgelaufen`,passwordsMismatch:`Passwörter stimmen nicht überein`,requestNewLink:`Neuen Link anfordern`},verifyEmail:{title:`E-Mail-Adresse bestätigen`,description:`Wir haben einen Bestätigungslink an Ihre E-Mail-Adresse gesendet. Klicken Sie auf den Link, um Ihr Konto zu bestätigen.`,sentTo:`Gesendet an:`,verifyingTitle:`Bestätigung…`,verifyingDescription:`Wir bestätigen Ihre E-Mail. Bitte warten.`,successTitle:`E-Mail bestätigt`,successDescription:`Ihre E-Mail wurde bestätigt. Sie können sich jetzt anmelden.`,errorTitle:`Bestätigung fehlgeschlagen`,errorDescription:`Bestätigung fehlgeschlagen. Bitte fordern Sie einen neuen Link an.`,missingToken:`Im Bestätigungslink fehlt ein Token.`,emailMissing:`E-Mail-Adresse fehlt`,resendButton:`Bestätigungs-E-Mail erneut senden`,resending:`Sende…`,resent:`E-Mail gesendet! Überprüfen Sie Ihren Posteingang`,resentSuccess:`Bestätigungs-E-Mail gesendet!`,resentDescription:`Bitte überprüfen Sie Ihren Posteingang und klicken Sie auf den Bestätigungslink.`,resendFailed:`Bestätigungs-E-Mail kann nicht erneut gesendet werden`,signInLink:`Zur Anmeldung`,backToSignIn:`Zurück zur Anmeldung`,backToLogin:`Zurück zum Login`,checkSpam:`E-Mail nicht erhalten? Überprüfen Sie Ihren Spam-Ordner oder kontaktieren Sie den Support.`,or:`Oder`,resendUnavailable:`Für diese Umgebung ist möglicherweise kein E-Mail-Versand konfiguriert. Kontaktieren Sie den Support, wenn das Problem bestehen bleibt.`},setup:{welcomeTitle:`Willkommen bei ObjectStack`,description:`Erstellen Sie das erste Eigentümerkonto, um die Einrichtung abzuschließen.`,yourName:`Ihr Name`,orgName:`Organisationsname`,orgNamePlaceholder:`Muster GmbH`,emailLabel:`E-Mail`,emailPlaceholder:`name@beispiel.de`,passwordLabel:`Passwort`,passwordHint:`Mindestens 8 Zeichen`,submit:`Eigentümerkonto erstellen`,submitting:`Einrichten…`,failed:`Einrichtung fehlgeschlagen`},device:{title:`Neues Gerät autorisieren`,subtitle:`Genehmigen Sie dieses Gerät für die Anmeldung als {{email}}.`,userCodeLabel:`Gerätecode`,requesterLabel:`Verbindungsanfrage von`,approveWarning:`Genehmigen Sie nur, wenn Sie diese Verbindung soeben selbst gestartet haben. Nach der Genehmigung kann diese Laufzeitumgebung auf die privaten Pakete Ihrer Organisation zugreifen.`,loggedInAs:`Angemeldet als {{email}}`,approve:`Gerät genehmigen`,approving:`Genehmige…`,approvedTitle:`Gerät autorisiert`,approvedDescription:`Sie können zum Gerät zurückkehren — es sollte sich in Kürze anmelden.`,approveSuccess:`Gerät autorisiert`,approveSuccessDescription:`Sie können dieses Fenster schließen.`,approveFailed:`Genehmigung fehlgeschlagen`,deny:`Anfrage ablehnen`,denying:`Ablehne…`,deniedTitle:`Zugriff verweigert`,deniedDescription:`Dem Gerät wird kein Zugriff gewährt.`,denyFailed:`Anfrage konnte nicht abgelehnt werden`,invalidTitle:`Ungültiger Gerätelink`,invalidDescription:`In der URL wurde kein Gerätecode angegeben.`,loading:`Lade…`,cancel:`Abbrechen`,disabledTitle:`Geräteautorisierung nicht aktiviert`,disabledDescription:`Für diese Bereitstellung ist die Geräteautorisierung nicht aktiviert, daher kann dieses Gerät hier nicht genehmigt werden.`},shell:{tenantHostHint:`Sie melden sich bei diesem Arbeitsbereich an`},layout:{headline:`Leistungsstarke Geschäftsanwendungen schneller entwickeln.`,subhead:`Die universelle Plattform für Unternehmensdatenverwaltung, Workflows und Analysen.`},remediation:{signOut:`Stattdessen abmelden`,password:{title:`Ihr Passwort ist abgelaufen`,fallbackMessage:`Bitte legen Sie ein neues Passwort fest, um fortzufahren.`,current:`Aktuelles Passwort`,next:`Neues Passwort`,confirm:`Neues Passwort bestätigen`,submit:`Passwort ändern & fortfahren`,submitting:`Wird aktualisiert…`,mismatch:`Die neuen Passwörter stimmen nicht überein.`,failed:`Passwort konnte nicht geändert werden.`},mfa:{title:`Zwei-Faktor-Authentifizierung einrichten`,fallbackMessage:`Ihre Organisation verlangt eine Authenticator-App, um fortzufahren.`,confirmPassword:`Passwort bestätigen`,continue:`Weiter`,preparing:`Wird vorbereitet…`,enrollFailed:`Registrierung konnte nicht gestartet werden.`,scanTitle:`Mit Ihrer Authenticator-App scannen`,scanBody:`Scannen Sie diesen QR-Code mit Google Authenticator, 1Password, Authy usw. und geben Sie dann den 6-stelligen Code ein.`,backupTitle:`Backup-Codes speichern`,backupBody:`Bewahren Sie diese sicher auf — jeder Code kann einmal verwendet werden, falls Sie Ihr Gerät verlieren.`,codeLabel:`6-stelliger Code`,verify:`Überprüfen & fortfahren`,verifying:`Wird überprüft…`,invalidCode:`Ungültiger Code. Bitte erneut versuchen.`}}},oauth:{consent:{title:`{{appName}} möchte auf Ihr Konto zugreifen`,request:`{{appName}} fordert eine Berechtigung an{{suffix}}.`,unknownApp:`eine Anwendung`,willAllow:`Diese App kann dann:`,scope:{openid:`Ihre Identität bestätigen`,profile:`Ihr Basisprofil lesen (Name, Bild)`,email:`Ihre E-Mail-Adresse lesen`,offlineAccess:`Angemeldet bleiben (Zugriff erneuern)`},deny:`Ablehnen`,authorize:`Autorisieren`,submitting:`Autorisiere…`,granted:`Zugriff gewährt`,denied:`Zugriff verweigert`,noRedirect:`Der Server hat keine Weiterleitungs-URL zurückgegeben.`,failed:`Zustimmung fehlgeschlagen`,footer:`Sie können den Zugriff jederzeit in Ihren Kontoeinstellungen widerrufen.`}},profile:{title:`Profil`,subtitle:`Verwalten Sie Ihre Kontoeinstellungen`,saving:`Speichern…`,avatar:{upload:`Hochladen`,replace:`Ersetzen`,remove:`Entfernen`},info:{title:`Persönliche Informationen`,description:`Aktualisieren Sie Ihren Namen und sehen Sie Ihre Kontodetails ein`,saved:`Profil erfolgreich aktualisiert.`,name:`Name`,email:`E-Mail`,emailImmutable:`Die E-Mail-Adresse kann nicht geändert werden.`,role:`Rolle`,save:`Änderungen speichern`},password:{changeTitle:`Passwort ändern`,setTitle:`Lokales Passwort festlegen`,changeDescription:`Aktualisieren Sie das Passwort, mit dem Sie sich in dieser Umgebung anmelden.`,setDescription:`Sie haben sich per Single Sign-On angemeldet. Legen Sie ein lokales Passwort fest, um sich in dieser Umgebung auch mit E-Mail und Passwort anmelden zu können.`,current:`Aktuelles Passwort`,new:`Neues Passwort`,password:`Passwort`,confirm:`Passwort bestätigen`,tooShort:`Das Passwort muss mindestens 8 Zeichen lang sein`,mismatch:`Die Passwörter stimmen nicht überein`,enterCurrent:`Geben Sie Ihr aktuelles Passwort ein`,changed:`Passwort geändert.`,localSet:`Lokales Passwort festgelegt. Sie können sich in dieser Umgebung jetzt auch mit E-Mail und Passwort anmelden.`,changeAction:`Passwort ändern`,setAction:`Passwort festlegen`}},errors:{networkError:`Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.`,serverError:`Serverfehler. Bitte versuchen Sie es später erneut.`,notFound:`Ressource nicht gefunden.`,unauthorized:`Sie sind nicht berechtigt, diese Aktion auszuführen.`,forbidden:`Zugriff verweigert.`,timeout:`Zeitüberschreitung. Bitte versuchen Sie es erneut.`,unknown:`Ein unerwarteter Fehler ist aufgetreten.`},workspace:{label:`Arbeitsbereiche`,default:`Mein Arbeitsbereich`,switch:`Arbeitsbereich wechseln`,create:`Arbeitsbereich erstellen`,createTitle:`Arbeitsbereich erstellen`,createDescription:`Ein Arbeitsbereich ist ein gemeinsamer Raum für Ihr Team zur Zusammenarbeit.`,createButton:`Arbeitsbereich erstellen`,nameLabel:`Name des Arbeitsbereichs`,namePlaceholder:`z.B. Acme Inc`,slugLabel:`URL-Slug`,slugHint:`In URLs verwendet. Nur Kleinbuchstaben, Zahlen und Bindestriche.`,invite:`Mitglied einladen`,members:`Mitglieder`,settings:`Arbeitsbereichseinstellungen`,multiOrgDisabled:`Das Erstellen neuer Organisationen ist auf dieser Instanz deaktiviert.`,createFailed:`Arbeitsbereich konnte nicht erstellt werden`},help:{onThisPage:`Auf dieser Seite`,keyboardShortcuts:`Tastenkürzel`,appDocs:`Dokumentation dieser App`,allDocs:`Gesamte Dokumentation`,onlineDocs:`Online-Dokumentation`},sidebar:{packageManagement:`Paketverwaltung`,searchNavigation:`Navigation durchsuchen…`,settings:`Einstellungen`,help:`Hilfe`,helpTooltip:`Hilfe und Dokumentation`,activityFeed:`Aktivitätsfeed`,notifications:`Benachrichtigungen`,approvals:`Genehmigungen`,inbox:`Posteingang`,inboxAriaLabel:`Posteingang öffnen`,area:`Bereich`,scope:`Bereich`,recent:`Zuletzt`,favorites:`Favoriten`,starred:`Markiert`,removeFromFavorites:`{{name}} aus Favoriten entfernen`},topbar:{openAssistant:`Assistent {{name}} öffnen`,offline:`Offline`,usersOnline:`Aktuell online befindliche Benutzer`,switchView:`Ansicht wechseln`,switchObject:`Objekt wechseln`,connection:{connected:`Verbunden`,connecting:`Verbindung wird hergestellt…`,reconnecting:`Verbindung wird wiederhergestellt…`,disconnected:`Getrennt`,error:`Verbindungsfehler`},stage:{preview:`Vorschau`,beta:`Beta`,tooltip:`Diese Plattform befindet sich in der Vorschau — Funktionen können sich ändern.`},aiAssistant:`KI-Assistent`,designInStudio:`Im Studio gestalten`},home:{build:{title:`App erstellen`,subtitle:`Von Grund auf beginnen — Objekte, Formulare, Automatisierungen und Oberflächen gestalten.`},template:{title:`Mit einer Vorlage starten`,subtitle:`Installieren Sie eine Vorlagen-App aus dem Marktplatz und passen Sie sie an.`},welcomeAdminDescription:`Beschreiben Sie Ihr Geschäft in einem Satz — die KI erzeugt die Objekte, Bildschirme, APIs und Agent-Tools. Oder richten Sie alles selbst über das Menü links ein.`,welcomeAdminDescriptionNoBuild:`Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein. Sobald Daten vorhanden sind, kann der KI-Assistent bei der Auswertung helfen.`,welcomeAdminDescriptionNoAi:`Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein.`,noAppsTitle:`Noch keine Anwendungen`,noAppsDescription:`Ihr Workspace wird eingerichtet — Apps, die Ihr Administrator für Sie freigibt, erscheinen hier.`,buildWithAI:`Mit KI erstellen`,askAI:`KI fragen`,recoveryReminder:{message:`Legen Sie ein Wiederherstellungspasswort fest, damit Sie sich auch anmelden können, wenn Single Sign-on einmal nicht verfügbar ist.`,cta:`Passwort festlegen`,dismiss:`Ausblenden`},pendingDrafts:{message:`Sie haben {{count}} unveröffentlichte Änderung(en) — veröffentlichen Sie sie, um sie live zu schalten.`,cta:`Veröffentlichen`,publishing:`Wird veröffentlicht…`,published:`Veröffentlicht! Ihre Änderungen sind live.`,publishFailed:`Veröffentlichen fehlgeschlagen`,nothing:`Nichts zu veröffentlichen.`,probeWarn:`Veröffentlicht, aber die Überprüfung hat Probleme gefunden.`,seedWarn:`Veröffentlicht, aber einige Beispieldaten konnten nicht geladen werden.`,publishedVerified:`Veröffentlicht und geprüft — {{count}} Beispielzeile(n) sind live.`,capabilityWarn:`Autorenprüfung: {{count}} Capability-Verweis(e) verweisen ins Leere.`},title:`Startseite`,subtitle:`Ihr Arbeitsbereich-Dashboard`,nav:`Startseite`,allApps:`Alle Anwendungen`,yourApps:`Ihre Apps`,showMoreApps:`Mehr`,showLess:`Weniger anzeigen`,continueEmpty:`Elemente, die Sie öffnen, erscheinen hier.`,actionCenter:{title:`Erfordert Ihre Aufmerksamkeit`,empty:`Alles erledigt`},loading:`Arbeitsbereich wird geladen…`,recent:`Kürzlich`,starred:`Mit Stern`,welcome:`Willkommen bei ObjectUI`,welcomeDescription:`Erstellen Sie zunächst Ihre erste Anwendung oder konfigurieren Sie Ihre Systemeinstellungen.`,createFirstApp:`Erstellen Sie Ihre erste App`,systemSettings:`Systemeinstellungen`,browseMarketplace:`App-Marktplatz durchsuchen`,quickActions:{title:`Schnellaktionen`,createApp:`App erstellen`,createAppDesc:`Beginnen Sie mit einer neuen Anwendung`,manageObjects:`Objekte verwalten`,manageObjectsDesc:`Datenmodelle konfigurieren`,systemSettings:`Systemeinstellungen`,systemSettingsDesc:`Konfigurieren Sie Ihren Arbeitsbereich`},appCard:{noDescription:`Keine Beschreibung`,default:`Standard`},greetingMorning:`Guten Morgen`,greetingAfternoon:`Guten Nachmittag`,greetingEvening:`Guten Abend`,greetingNight:`Nachtschicht`,heroTagline:`Machen Sie dort weiter, wo Sie aufgehört haben, oder entdecken Sie etwas Neues.`,open:`Öffnen`,stats:{apps:`Anwendungen`,starred:`Markiert`,recent:`Zuletzt verwendet`},recentApps:{title:`Zuletzt geöffnet`,itemType:{object:`Objekt`,dashboard:`Dashboard`,page:`Seite`,record:`Datensatz`}},starredApps:{title:`Markiert`},gettingStarted:{title:`Startseite anpassen`,description:`Markieren Sie eine App, um sie hier anzuheften und mit einem Klick darauf zuzugreifen. Alles, was Sie öffnen, wird automatisch unter „Zuletzt geöffnet“ angezeigt.`,cta:`Alle Anwendungen durchsuchen`}},layout:{systemNav:{systemSettings:`Systemeinstellungen`,applications:`Anwendungen`,appMarketplace:`App-Marktplatz`,objectManager:`Objekt-Manager`,users:`Benutzer`,organizations:`Organisationen`,roles:`Rollen`,configuration:`Konfiguration`,createApp:`App erstellen`,administration:`Verwaltung`,datasources:`Datenquellen`,documentation:`Dokumentation`},appSwitcher:{switchApplication:`Anwendung wechseln`,appsAvailable:`{{count}} Apps verfügbar`,editNavigation:`Navigation bearbeiten`,home:`Startseite`,addApp:`App hinzufügen`,editApp:`App bearbeiten`,manageAllApps:`Alle Apps verwalten`,systemConsole:`Systemkonsole`,noAppsConfigured:`Keine Apps konfiguriert`},activityFeed:{title:`Letzte Aktivitäten`,filter:`Filtern`,empty:`Keine letzten Aktivitäten`,ariaLabel:`Aktivitätsfeed`,typeCreate:`Erstellen`,typeUpdate:`Aktualisieren`,typeDelete:`Löschen`,typeComment:`Kommentar`,relativeJustNow:`gerade eben`,relativeSecondsAgo:`vor {{count}}s`,relativeMinutesAgo:`vor {{count}}m`,relativeHoursAgo:`vor {{count}}h`,relativeDaysAgo:`vor {{count}}d`,viewAll:`Alle Aktivitäten anzeigen`},metadata:{label:`Metadaten`,toggleTitle:`Metadaten-Inspektor umschalten`,panelTitle:`Metadaten-Inspektor`,jsonBadge:`JSON`,copyJson:`JSON kopieren`}},search:{title:`Suche`,back:`Zurück`,placeholder:`Objekte, Dashboards, Seiten, Berichte suchen…`,inputAriaLabel:`Objekte, Dashboards, Seiten, Berichte suchen`,resultsCount:`{{count}} Ergebnis für „{{query}}“`,resultsCountPlural:`{{count}} Ergebnisse für „{{query}}“`,itemsAvailable:`{{count}} Elemente verfügbar`,noResults:`Keine Ergebnisse gefunden`,noResultsHint:`Versuchen Sie, Ihre Suchbegriffe anzupassen`,typeObjects:`Objekte`,typeDashboards:`Dashboards`,typePages:`Seiten`,typeReports:`Berichte`,badgeObject:`Objekt`,badgeDashboard:`Dashboard`,badgePage:`Seite`,badgeReport:`Bericht`},empty:{objectNotFound:`Objekt nicht gefunden`,objectNotFoundDescription:`Definition des Objekts „{{name}}“ fehlt. Überprüfen Sie Ihre Konfiguration oder navigieren Sie zurück.`,interfacePageSourceMissing:`Diese Interface-Seite verweist auf „{{name}}“, das nicht verfügbar ist.`,pageNotFound:`Seite nicht gefunden`,pageNotFoundDescription:`Die Seite „{{name}}“ wurde nicht gefunden. Sie wurde möglicherweise entfernt oder umbenannt.`,dashboardNotFound:`Dashboard nicht gefunden`,dashboardNotFoundDescription:`Das Dashboard „{{name}}“ wurde nicht gefunden. Es wurde möglicherweise entfernt oder umbenannt.`,reportNotFound:`Bericht nicht gefunden`,reportNotFoundDescription:`Der Bericht „{{name}}“ wurde nicht gefunden. Er wurde möglicherweise entfernt oder umbenannt.`,noAppsConfigured:`Keine Apps konfiguriert`,noAppsConfiguredDescription:`Es sind keine Anwendungen registriert. Erstellen Sie Ihre erste App oder besuchen Sie die Systemeinstellungen.`,appNotAvailable:`App nicht verfügbar`,appNotAvailableDescription:`Diese App ist noch nicht verfügbar — sie wird möglicherweise noch veröffentlicht. Versuchen Sie es in einem Moment erneut.`,appAccessDenied:`Sie haben keinen Zugriff auf diese App`,appAccessDeniedDescription:`Diese App existiert, aber Ihr Konto ist nicht berechtigt, sie zu öffnen. Bitten Sie einen Administrator um Zugriff.`,appAccessDeniedHome:`Zurück zur Startseite`,createFirstApp:`Erste App erstellen`,systemSettings:`Systemeinstellungen`,back:`Zurück`,recordNotFound:`Datensatz nicht gefunden`,recordNotFoundDescription:`Der gesuchte Datensatz existiert nicht oder wurde möglicherweise gelöscht.`},renderer:{noPageSchema:`Kein Seitenschema angegeben`,noFormSchema:`Kein Formularschema angegeben`,noDashboardSchema:`Kein Dashboard-Schema angegeben`,pageRendering:`Seite wird gerendert: {{name}}`,dashboardRendering:`Dashboard wird gerendert: {{name}}`,formRenderingMode:`Formular wird im {{mode}}-Modus gerendert`,formRenderingFor:`für Datensatz {{id}}`,createRecord:`Datensatz erstellen`,editRecord:`Datensatz bearbeiten`,page:`Seite`,dashboard:`Dashboard`,save:`Speichern`,cancel:`Abbrechen`},actionDialog:{title:`Aktionsparameter`,description:`Bitte geben Sie die erforderlichen Informationen ein, um fortzufahren.`,selectPlaceholder:`{{label}} auswählen`,requiredError:`{{label}} ist erforderlich`,cancel:`Abbrechen`,confirm:`Bestätigen`,uploading:`Wird hochgeladen…`,defaultActionTitle:`Aktion`,ok:`OK`,lookupPlaceholder:`Datensatz-ID für {{label}}`,lookupHelpText:`Für diesen Parameter ist kein Referenzobjekt konfiguriert, daher ist die Datensatzauswahl nicht verfügbar. Geben Sie eine Datensatz-ID ein oder bitten Sie einen Administrator, den Aktionsparameter zu korrigieren.`},actionConfirm:{title:`Aktion bestätigen`,confirm:`Weiter`,cancel:`Abbrechen`},rowAction:{openMenu:`Menü öffnen`,edit:`Bearbeiten`,delete:`Löschen`},navigationSync:{addedPage:`Navigation aktualisiert: Seite „{{name}}“ hinzugefügt`,addedDashboard:`Navigation aktualisiert: Dashboard „{{name}}“ hinzugefügt`,removedPage:`Navigation aktualisiert: Seite „{{name}}“ entfernt`,removedDashboard:`Navigation aktualisiert: Dashboard „{{name}}“ entfernt`,renamedPage:`Navigation aktualisiert: Seite „{{oldName}}“ in „{{newName}}“ umbenannt`,renamedDashboard:`Navigation aktualisiert: Dashboard „{{oldName}}“ in „{{newName}}“ umbenannt`,undoLabel:`Rückgängig`,undone:`Navigationsänderung rückgängig gemacht`,undoFailed:`Navigationsänderung konnte nicht rückgängig gemacht werden`,updateFailed:`Navigation konnte nicht aktualisiert werden`},objectActions:{resetPackageSetConfirm:`Dieses Berechtigungsset gehört zu einem installierten Paket und kann nicht entfernt werden. Beim Löschen wird es auf den ausgelieferten Ausgangszustand zurückgesetzt und Ihre Anpassungen in dieser Umgebung gehen verloren. Fortfahren?`,resetPackageSetSuccess:`Berechtigungsset auf den ausgelieferten Ausgangszustand zurückgesetzt`,deleteSuccess:`{{label}} erfolgreich gelöscht`,deleteFailed:`{{label}} konnte nicht gelöscht werden`,noRecordId:`Keine Datensatz-ID angegeben`,deleteConfirm:`Möchten Sie diesen Datensatz wirklich löschen?`,bulkDeleteSuccess:`{{count}} {{label}}-Datensätze gelöscht`,bulkDeletePartial:`{{succeeded}} gelöscht, {{failed}} fehlgeschlagen`},objectViewActions:{renameFailed:`Ansicht konnte nicht umbenannt werden`,deleteFailed:`Ansicht konnte nicht gelöscht werden`},dashboardActions:{printDialogOpening:`Druckdialog Ihres Browsers wird geöffnet (kein PDF-Export)`,exportFailed:`Export fehlgeschlagen: {{message}}`,forecastSoon:`Prognoseansicht kommt bald`},recordDetail:{viewersTooltip:`Benutzer, die diesen Datensatz gerade ansehen`},cellRender:{empty:`Leer`,yes:`Ja`,no:`Nein`,systemFields:`System`},user:{profile:`Profil`,settings:`Einstellungen`,logout:`Abmelden`,preferences:`Einstellungen`,theme:`Design`,language:`Sprache`},report:{total:`Gesamt`,rowTotal:`Zeilensumme`,columnTotal:`Spaltensumme`,grandTotal:`Gesamtsumme`,totals:`Summen`,rowsLabel:`Zeile`,columnsLabel:`Spalte`,allLabel:`(Alle)`,emptyLabel:`(Leer)`,loading:`Laden…`,failedToLoad:`Matrix konnte nicht geladen werden: {{message}}`,needsAcross:"Matrixbericht erfordert mindestens ein `groupingsAcross`-Feld.",aggregate:{count:`Anzahl`,countDistinct:`Eindeutige Anzahl`,sum:`Summe`,avg:`Durchschnitt`,min:`Minimum`,max:`Maximum`,first:`Erster`},editor:{panelTitle:`Bericht bearbeiten`}},organizations:{create:`Workspace erstellen`,mine:`Meine Organisationen`,title:`Organisationen`,heading:`Ihre Organisationen`,subtitle:`Wählen Sie eine Organisation, um fortzufahren, oder erstellen Sie eine neue.`,searchPlaceholder:`Organisation suchen`,new:`Neue Organisation`,current:`Aktuelle Organisation`,manage:`Verwalten`,emptyTitle:`Noch keine Organisationen`,emptyDescription:`Erstellen Sie Ihre erste Organisation, um loszulegen.`,noMatches:`Keine Organisationen entsprechen Ihrer Suche.`},organization:{roles:{owner:`Eigentümer`,admin:`Administrator`,delegatedAdmin:`Delegierter Administrator`,member:`Mitglied`},errors:{notAllowedToInvite:`Sie dürfen keine Benutzer in diese Organisation einladen.`,notAllowedToInviteWithRole:`Sie dürfen keine Benutzer mit dieser Rolle einladen.`,alreadyInvited:`Dieser Benutzer wurde bereits in diese Organisation eingeladen.`,organizationExists:`Diese Organisation existiert bereits.`,slugTaken:`Dieser URL-Slug ist bereits vergeben.`,notAllowedToCreate:`Sie dürfen keine neue Organisation erstellen.`,notTheRecipient:`Sie sind nicht der Empfänger dieser Einladung.`,invitationNotFound:`Diese Einladung existiert nicht mehr oder ist abgelaufen.`,unknown:`Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.`},backToList:`Zurück zu den Organisationen`,notFound:`Organisation nicht gefunden`,notFoundDescription:`Diese Organisation existiert nicht oder Sie haben keinen Zugriff darauf.`,tabs:{members:`Mitglieder`,invitations:`Einladungen`,settings:`Einstellungen`},members:{title:`Mitglieder`,inviteMember:`Mitglied einladen`,inviteRestrictedNote:`Nur Organisationsadministratoren können Mitglieder einladen.`,removeMember:`Mitglied entfernen`,removeConfirmTitle:`Mitglied entfernen?`,removeConfirmDescription:`{{name}} wird aus der Organisation entfernt und verliert sofort den Zugriff.`,removeConfirmAction:`Entfernen`,memberRemoved:`Mitglied entfernt`,removeFailed:`Mitglied konnte nicht entfernt werden`,roleUpdated:`Rolle aktualisiert`,roleUpdateFailed:`Rolle konnte nicht aktualisiert werden`,memberActions:`Mitgliedsaktionen`,loadFailed:`Mitglieder konnten nicht geladen werden`},invitations:{title:`Einladungen`,empty:`Keine Einladungen vorhanden.`,expiresAt:`Läuft ab am`,linkCopied:`Einladungslink kopiert`,copyFailed:`Link konnte nicht kopiert werden`,canceled:`Einladung zurückgezogen`,cancelFailed:`Einladung konnte nicht zurückgezogen werden`,cancelTitle:`Einladung zurückziehen?`,cancelDescription:`Die Einladung für {{email}} wird zurückgezogen.`,cancelAction:`Einladung zurückziehen`,inviteTitle:`Mitglied einladen`,inviteDescription:`Die Person erhält eine Einladung, dieser Organisation beizutreten.`,emailLabel:`E-Mail`,roleLabel:`Rolle`,placementLabel:`Zuordnung (optional)`,placementDescription:`Wird angewendet, sobald die Einladung angenommen wird. Aufgeführt sind nur Einheiten und Positionen, die Sie delegieren dürfen.`,businessUnitLabel:`Geschäftseinheit`,businessUnitPlaceholder:`Keine Zuordnung`,positionsLabel:`Positionen`,sendInvite:`Einladung senden`,sentTitle:`Einladung erstellt`,sentDescription:`Teilen Sie den folgenden Link mit der eingeladenen Person. Sie muss sich anmelden, um anzunehmen.`,linkLabel:`Annahme-Link`,invitedAs:`{{email}} als {{role}} eingeladen`,copyLinkLabel:`Einladungslink kopieren`,loadFailed:`Einladungen konnten nicht geladen werden`,inviteFailed:`Mitglied konnte nicht eingeladen werden`,status:{all:`Alle`,pending:`Ausstehend`,accepted:`Angenommen`,rejected:`Abgelehnt`,canceled:`Zurückgezogen`}},settings:{generalTitle:`Allgemein`,generalDescription:`Aktualisieren Sie die Informationen Ihrer Organisation.`,readOnlyNote:`Nur Eigentümer können Einstellungen ändern.`,nameLabel:`Name der Organisation`,slugLabel:`Slug`,logoLabel:`Logo`,logoUpload:`Hochladen`,logoReplace:`Ersetzen`,logoClear:`Entfernen`,logoUploaded:`Logo hochgeladen — zum Anwenden speichern`,logoUploadFailed:`Logo konnte nicht hochgeladen werden`,save:`Änderungen speichern`,saved:`Einstellungen gespeichert`,saveFailed:`Einstellungen konnten nicht gespeichert werden`,leaveTitle:`Organisation verlassen`,leaveDescription:`Sie verlieren den Zugriff auf diese Organisation.`,leaveAction:`Verlassen`,leaveConfirmTitle:`Organisation verlassen?`,leaveConfirmDescription:`Möchten Sie {{name}} wirklich verlassen? Sie verlieren sofort den Zugriff.`,leaveConfirmAction:`Verlassen`,leftOrg:`Sie haben die Organisation verlassen`,leaveFailed:`Organisation konnte nicht verlassen werden`,dangerZone:`Gefahrenbereich`,deleteTitle:`Organisation löschen`,deleteDescription:`Diese Organisation und alle ihre Daten dauerhaft löschen.`,deleteAction:`Löschen`,deleteConfirmTitle:`Organisation löschen?`,deleteConfirmDescription:`Diese Aktion ist unwiderruflich. Alle Daten werden dauerhaft gelöscht. Geben Sie den Slug der Organisation ein, um zu bestätigen.`,deleteConfirmSlugLabel:`Geben Sie „{{slug}}“ ein, um zu bestätigen`,deleteConfirmAction:`Organisation löschen`,deleted:`Organisation gelöscht`,deleteFailed:`Organisation konnte nicht gelöscht werden`},accept:{title:`Sie wurden eingeladen`,description:`Sie wurden eingeladen, {{orgName}} als {{role}} beizutreten.`,errorTitle:`Einladung nicht verfügbar`,goToOrgs:`Zu den Organisationen`,loading:`Einladung wird geladen…`,organization:`Organisation`,role:`Rolle`,expiresAt:`Läuft ab am`,accept:`Einladung annehmen`,accepted:`Einladung angenommen`,acceptFailed:`Einladung konnte nicht angenommen werden`,decline:`Ablehnen`,declined:`Einladung abgelehnt`,declineFailed:`Einladung konnte nicht abgelehnt werden`},switcher:{label:`Organisation wechseln`,groupLabel:`Arbeitsorganisation`,groupHint:`Neue Datensätze werden hier erstellt. Ansichten zeigen Daten aus allen Ihren Organisationen.`,manageMembers:`Mitglieder verwalten`}},notifications:{regionLabel:`Benachrichtigungen`,groupCount:`{{count}} Benachrichtigungen`,groupUnread:`{{count}} ungelesen`,groupMarkRead:`Als gelesen markieren`,groupMarkReadTitle:`Alle dieses Typs als gelesen markieren`,empty:`Keine Benachrichtigungen`,markAllRead:`Alle als gelesen markieren`,viewAll:`Alle Benachrichtigungen anzeigen`,approvalsPending:`{{count}} ausstehende Genehmigungen`,viewApprovals:`Genehmigungen anzeigen`,noPendingApprovals:`Keine ausstehenden Genehmigungen`,openApprovalsInbox:`Genehmigungs-Posteingang öffnen`,badgeTotal:`{{total}} insgesamt`,badgeNotifications:`{{unread}} Benachrichtigungen`,badgeApprovals:`{{approvals}} ausstehende Genehmigungen`,emptyUnread:`Alles gelesen`,filterUnread:`Ungelesen`,filterAll:`Alle`},publicForm:{submit:`Absenden`,submitting:`Sende…`,submitAnother:`Weitere Antwort senden`,poweredBy:`Bereitgestellt von ObjectStack`,secureNotice:`Ihre Informationen werden sicher übertragen und nur zur Bearbeitung Ihrer Anfrage verwendet.`,thankYouTitle:`Vielen Dank!`,thankYouMessage:`Ihre Einreichung wurde erfolgreich empfangen.`,redirecting:`Weiterleitung in {{seconds}} Sekunden…`,unavailableTitle:`Formular nicht verfügbar`,unavailableDescription:`Unter dieser URL ist kein öffentliches Formular verfügbar. Stellen Sie sicher, dass die zugrunde liegende Ansicht die anonyme Freigabe aktiviert hat.`,tryDemo:`Demo ausprobieren`,retry:`Erneut versuchen`,loading:`Formular wird geladen…`,requiredHint:`* Pflichtfeld`,consentLabelDefault:`Ich stimme der Datenschutzrichtlinie zu und willige in die Verarbeitung meiner Daten für diese Anfrage ein.`,consentLink:`Datenschutzrichtlinie`,consentRequired:`Bitte akzeptieren Sie die Datenschutzrichtlinie, um fortzufahren.`,rateLimited:`Bitte nehmen Sie sich einen Moment, um Ihre Antworten zu überprüfen, bevor Sie absenden.`,redirectBlocked:`Einreichung akzeptiert, aber die Weiterleitungs-URL wurde aus Sicherheitsgründen blockiert.`,demo:{contactTitle:`Kontakt aufnehmen`,contactDescription:`Erzählen Sie uns von Ihrem Projekt, und ein Vertriebsmitarbeiter wird sich innerhalb eines Werktages bei Ihnen melden.`,supportTitle:`Support-Anfrage einreichen`,supportDescription:`Schildern Sie uns das Problem — unser Team antwortet innerhalb eines Werktages.`,thankYouSalesTitle:`Danke — wir haben Ihre Nachricht erhalten!`,thankYouSalesMessage:`Ein Vertriebsmitarbeiter wird sich innerhalb eines Werktages bei Ihnen melden.`,thankYouSupportTitle:`Alles klar — Ihre Anfrage ist in der Warteschlange.`,thankYouSupportMessage:`Ein Support-Ingenieur wird sich in Kürze melden. Speichern Sie diese Seite, falls Sie weitere Screenshots hinzufügen möchten.`,field:{firstName:`Vorname`,lastName:`Nachname`,email:`Geschäfts-E-Mail`,phone:`Telefon`,jobTitle:`Berufsbezeichnung`,company:`Unternehmen`,website:`Website`,industry:`Branche`,companySize:`Unternehmensgröße`,howCanWeHelp:`Wie können wir helfen?`,subject:`Betreff`,description:`Beschreibung`,issueType:`Problemart`,priority:`Priorität`},industry:{technology:`Technologie`,software:`Software / SaaS`,finance:`Finanzen`,healthcare:`Gesundheitswesen`,retail:`Einzelhandel`,other:`Sonstiges`},issueType:{question:`Frage`,problem:`Problem`,bug:`Fehler`,feature_request:`Funktionsanfrage`},priority:{low:`Niedrig`,medium:`Mittel`,high:`Hoch`,critical:`Kritisch`}}},connectAgent:{disabled:{title:`MCP ist auf dieser Bereitstellung deaktiviert`,body:`Die MCP-Schnittstelle ist ausgeschaltet (OS_MCP_SERVER_ENABLED=false). Bitten Sie Ihren Betreiber, sie wieder zu aktivieren.`},url:{title:`MCP-Endpunkt dieser Umgebung`,body:`Jeder MCP-fähige KI-Client verbindet sich über diese URL. Die Identität ist Self-Service: Die Bereitstellung ist ihr eigener OAuth-2.1-Autorisierungsserver — Sie melden sich als Sie selbst an, und jeder Aufruf unterliegt Ihren Berechtigungen und der Zeilensicherheit.`,downloadSkill:`SKILL.md herunterladen`,skillHint:`Die portable Agenten-Skill-Datei: erklärt jedem skill-fähigen Agenten die Arbeit mit dieser Umgebung.`},claude:{body:`Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen, dann diese URL einfügen und im Browser anmelden.`,reachability:`claude.ai (Web) verbindet sich von Anthropic-Servern — die Bereitstellung muss über öffentliches HTTPS erreichbar sein. Claude Desktop und lokale Clients erreichen auch Intranet-Bereitstellungen.`},claudeCode:{body:`Ein Befehl — die OAuth-Anmeldung öffnet sich bei der ersten Nutzung automatisch:`,plugin:`Oder das offizielle Plugin installieren (mit ObjectStack-Skill und geführtem /objectstack:connect):`},cursor:{addButton:`Zu Cursor hinzufügen`,body:`Ein-Klick-Button verwenden oder Folgendes in .cursor/mcp.json eintragen:`},vscode:{body:`In .vscode/mcp.json eintragen (oder über den Befehl „MCP: Add Server“):`},codex:{body:`In ~/.codex/config.toml eintragen. Falls Ihre Codex-Version den OAuth-Flow nicht unterstützt, stattdessen einen API-Schlüssel-Header verwenden (siehe unten):`},apiKey:{title:`API-Schlüssel`,badge:`headless`,body:`Für CI, Skripte und Agenten ohne Browser. Der Schlüssel handelt als Sie — wie ein Passwort behandeln. Er wird nur EINMAL angezeigt.`,namePlaceholder:`Schlüsselname (z. B. ci-agent)`,mint:`Schlüssel erstellen`,minting:`Wird erstellt…`,showOnce:`Schlüssel „{{name}}“ erstellt — jetzt kopieren, er wird nicht erneut angezeigt:`,done:`Fertig — ausblenden`}},excelImport:{noImportableFields:`Dieses Objekt hat keine importierbaren Felder.`,schemaReadFailed:`Das Objektschema konnte nicht gelesen werden.`,imported:`{{count}} Zeile(n) in {{object}} importiert.`,importFrom:`Echte Zeilen importieren aus`,into:`nach`,opening:`Wird geöffnet…`,importAction:`Importieren`,dismiss:`Verwerfen`},cloudOnboarding:{hintCreate:`Erstellen Sie Ihre erste Umgebung — ein privater Arbeitsbereich mit eigener URL, Datenbank und eigenem Tarif. Die Entwicklung findet darin statt.`,hintReady:`Ihre Produktionsumgebung ist bereit. Öffnen Sie sie, um Ihre Apps zu erstellen und auszuführen — alles geschieht innerhalb der Umgebung.`,createEnvironment:`Umgebung erstellen`,openProduction:`Produktion öffnen`,manageEnvironments:`Umgebungen verwalten`},aiModelStatus:{summary:`Erstellen / Fragen nutzt {{conversational}} ({{conversationalSource}}); strukturiert nutzt {{structured}} ({{structuredSource}}).`,summaryRouting:`Routing-Richtlinie: kostenlose Tarife → {{free}}, kostenpflichtige Tarife → {{paid}}.`,modelUnknown:`unbekannt`,sourceUnknown:`vom Adapter nicht gemeldet`,rowConversational:`Build-/Ask-Modell`,rowStructured:`Strukturiert (Blueprint / Seed)`,rowReasoning:`Reasoning-Aufwand`,readFailed:`Das effektive KI-Modell konnte nicht gelesen werden. In dieser Umgebung läuft möglicherweise kein KI-Dienst, oder Ihnen fehlt die Berechtigung ai:read.`,readFailedWithStatus:`Das effektive KI-Modell konnte nicht gelesen werden (HTTP {{status}}). In dieser Umgebung läuft möglicherweise kein KI-Dienst, oder Ihnen fehlt die Berechtigung ai:read.`,overridesInEffect:`Aktive Overrides: `,noOverrides:`keine — es gelten die Standardwerte des bereitgestellten Codes.`,adapter:`Adapter: `,sourceCodeDefault:`Code-Standard (kein env-Override)`,sourceInherits:`wie build/ask`,sourcePinned:`festgelegt durch {{source}}`},chatbotError:{title:`Antwort fehlgeschlagen`,fallbackDetail:`Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.`,details:`Details`,hide:`Ausblenden`,retry:`Erneut versuchen`},chatbotQuota:{title:`Upgrade erforderlich`,fallbackMessage:`Sie haben Ihr KI-Kontingent erreicht.`,buyCredits:`Credit-Paket kaufen`,upgradePlan:`Tarif upgraden`},environment:{addEnvironment:`Umgebung hinzufügen`,setUpProduction:`Produktionsumgebung einrichten`,addDevelopment:`Entwicklungsumgebung hinzufügen`,entitlement:{productionLimitTitle:`Sie haben bereits Ihre Produktionsumgebung`,productionLimitBody:`Jede Organisation enthält genau eine Produktionsumgebung. Erstellen Sie für eine weitere eine separate Organisation, oder sprechen Sie uns auf eine Enterprise-Vereinbarung an.`,planLockedTitle:`Entwicklungsumgebungen sind eine kostenpflichtige Funktion`,planLockedBody:`Ihr {{plan}} enthält eine Produktionsumgebung. Führen Sie ein Upgrade durch, um Entwicklungsumgebungen hinzuzufügen — entwickeln Sie in der Entwicklungsumgebung und veröffentlichen Sie dann in der Produktion.`,limitTitle:`Limit für Entwicklungsumgebungen erreicht`,limitBody:`Die Kapazität wächst mit den KI-Lizenzen. Fügen Sie eine KI-Lizenz hinzu oder archivieren Sie eine ungenutzte Entwicklungsumgebung, um Platz zu schaffen.`,limitBodyWithCount:`Sie nutzen {{used}} von {{limit}} Entwicklungsumgebungen. Die Kapazität wächst mit den KI-Lizenzen — fügen Sie eine KI-Lizenz hinzu oder archivieren Sie eine ungenutzte Entwicklungsumgebung.`,freePlan:`kostenloser Tarif`,namedPlan:`Tarif {{plan}}`,upgradeCta:`Tarif upgraden`,contactSalesCta:`Vertrieb kontaktieren`}},cloudConnection:{checking:`Verbindung wird geprüft…`,retry:`Erneut versuchen`,errors:{expired:`Die Anfrage ist abgelaufen, bevor sie genehmigt wurde. Starten Sie erneut.`,bindFailed:`Verbindung fehlgeschlagen.`,deviceCodeFailed:`Anforderung des Gerätecodes fehlgeschlagen.`},waiting:{popupOpened:`Genehmigen Sie die Verbindung im soeben geöffneten Fenster — diese Seite aktualisiert sich von selbst.`,polling:`Warten auf die Genehmigung in der Cloud-Konsole…`,openApproval:`Genehmigungsseite öffnen`,copy:`Kopieren`,copied:`Kopiert`,codePrefilled:`Der Code ist auf der Genehmigungsseite bereits eingetragen.`,openItHere:`Fenster nicht erschienen? Hier öffnen`,cancel:`Abbrechen`},bound:{title:`Mit ObjectStack Cloud verbunden`,runtime:`Runtime`,organization:`Organisation`,approvedBy:`Genehmigt von`,runtimeId:`Runtime-ID`,environment:`Umgebung`,since:`Verbunden seit`,privatePackages:`Die privaten Pakete Ihrer Organisation erscheinen jetzt im Marktplatz unter „Ihre Organisation“.`,disconnect:`Verbindung trennen`},unbound:{title:`Nicht verbunden`,body:`Verbinden Sie diese Runtime mit einer ObjectStack Control Plane, um die privaten Pakete Ihrer Organisation zu durchsuchen und hier zu installieren. Die Genehmigung erfolgt mit einem einzigen Klick in Ihrem Cloud-Konto — es werden keine IDs oder Zugangsdaten auf dieser Seite eingegeben.`,connect:`Verbinden`}},marketplace:{suggestedBindings:{promptEveryone:`Diese App empfiehlt, „{{set}}“ allen angemeldeten Benutzern zu gewähren (Position „Everyone“).`,promptGuest:`Diese App empfiehlt, „{{set}}“ nicht authentifizierten Besuchern zu gewähren (Position „Guest“).`,confirm:`Gewähren`,confirming:`Wird gewährt…`,dismiss:`Ausblenden`,confirmedToast:`„{{set}}“ ist jetzt {{anchor}} gewährt.`,dismissedToast:`Vorschlag für „{{set}}“ ausgeblendet.`},title:`App-Marktplatz`,subtitle:`Durchsuchen Sie genehmigte Apps, die im ObjectStack-Katalog veröffentlicht wurden. Klicken Sie auf eine App, um Details zu sehen und sie in eine Ihrer Umgebungen zu installieren.`,searchPlaceholder:`Apps nach Name oder Manifest-ID suchen…`,searchAria:`Marktplatz-Apps suchen`,installed:`Installiert`,installedCount:`Installiert ({{count}})`,refresh:`Aktualisieren`,all:`Alle`,noApprovedYet:`Noch keine Apps für den Marktplatz genehmigt.`,noMatchFilters:`Keine Apps entsprechen Ihren Filtern.`,noDescription:`Keine Beschreibung vorhanden.`,back:`Zurück zum Marktplatz`,installedTitle:`Installierte Apps`,installedSubtitle:`Marktplatz-Pakete, die derzeit im Kernel dieses Laufzeitsystems installiert sind.`,installedEmpty:`Noch keine Marktplatz-Apps in diesem Laufzeitsystem installiert.`,browseLink:`Marktplatz durchsuchen →`,installedAdditiveNote:`<strong>Hinweis:</strong> Die Kernel-API ist nur additiv — Deinstallation entfernt das Manifest auf der Festplatte, damit das Paket beim nächsten Start nicht geladen wird, aber der laufende Kernel hält die App bis zum Neustart registriert.`,installedAt:`Installiert {{when}}`,installedBy:`von {{user}}`,installedPackageId:`Paket`,cachedAs:`Zwischengespeichert als <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Installiert v{{version}}`,load:{failed:`Marktplatz konnte nicht geladen werden`,failedHint:`Standardmäßig zeigt dieses Laufzeitsystem auf die öffentliche ObjectStack-Cloud. Stellen Sie sicher, dass das Laufzeitsystem online ist.`,packageFailed:`Paket konnte nicht geladen werden`,notFound:`Nicht gefunden.`},detail:{homepage:`Startseite`,installedV:`Installiert · v{{version}}`,about:`Über`,noReadme:`Kein Readme vorhanden.`,versions:`Versionen`,noApprovedVersions:`Keine genehmigten Versionen.`,prerelease:`Vorab`,moreOptions:`Weitere Installationsoptionen`,uninstallFromRuntime:`Aus diesem Laufzeitsystem deinstallieren`,addSampleData:`Beispieldaten hinzufügen`,reseedAgain:`Beispieldaten neu laden`,purgeSampleData:`Beispieldaten löschen`,purgeConfirm:`Alle von diesem Paket erzeugten Beispieldatensätze löschen? Vom Benutzer hinzugefügte Datensätze bleiben unberührt.`,purgeSuccess:`{{count}} Beispieldatensatz/-sätze entfernt.`,purgeNoData:`Keine Beispieldatensätze zum Löschen gefunden.`,reseedQueued:`Beispieldaten werden beim nächsten Zugriff auf die Umgebung neu geladen.`,reseedLocalSuccess:`Beispieldaten neu geladen: {{inserted}} hinzugefügt, {{updated}} aktualisiert.`,reseedPartialErrors:`({{count}} Datensatz/-sätze konnten nicht geschrieben werden)`,updateAvailable:`Update verfügbar`},action:{installed:`Installiert`,install:`Installieren`,reinstall:`Neu installieren`,working:`Verarbeite…`,installToCloud:`In der Cloud installieren…`,installing:`Installiere…`,uninstall:`Deinstallieren`,uninstalling:`Deinstalliere…`,details:`Details`,close:`Schließen`,dismiss:`Schließen`,openOnCloud:`In der Cloud öffnen`,backHome:`Zurück zur Startseite`,updateTo:`Aktualisieren`},install:{dialogTitle:`{{name}} installieren`,dialogDescCurrent:`In dieser Umgebung installieren ({{host}}).`,dialogDescPicker:`Wählen Sie eine Umgebung, in der Sie diese App installieren möchten. Sie müssen bei ObjectStack Cloud angemeldet sein.`,environment:`Umgebung`,environmentPlaceholder:`Umgebung auswählen`,includeSampleData:`Beispieldaten einschließen`,noEnvs:`Keine Umgebungen in Ihrer aktiven Organisation gefunden.`,noPermission:`Sie haben keine Berechtigung, Apps in einer Umgebung zu installieren. Nur Organisationsinhaber und Administratoren können installieren.`,signInFirst:`Sie müssen sich zuerst bei ObjectStack Cloud anmelden.`,success:`Erfolgreich installiert. Öffnen Sie die Umgebung, um die neue App zu sehen.`,localSuccess:`v{{version}} in diesem Laufzeitsystem installiert. „{{name}}“ sollte jetzt im App-Wechsler erscheinen.`,localManifestConflict:`{{message}}
|
|
18
|
-
Hinweis: Eine lokale App besitzt bereits diese manifest_id. Entfernen Sie sie zuerst aus objectstack.config.ts.`,localUnauthorized:`Melden Sie sich zuerst in diesem Laufzeitsystem an.`,localMarketplaceUnavailable:`Dieses Laufzeitsystem hat keine OS_CLOUD_URL konfiguriert.`,updateTo:`Aktualisieren → v{{version}}`,installedVersion:`Installiert v{{version}}`},org:{heading:`Ihre Organisation`,install:`Installieren`,installed:`{{name}} installiert`,installedBadge:`Installiert`,installing:`Installiere…`},disclosure:{containsCode:`Dieses Paket enthält Code`,reviewed:`Geprüft und genehmigt`,unreviewed:`Noch nicht geprüft`,signed:`Signiert`,grantsIntro:`Bei der Installation erhält dieses Paket:`,services:`Plattformdienste`,hooks:`Lifecycle-Hooks`,network:`Netzwerkzugriff`,fs:`Dateisystemzugriff`,noPermissions:`Fordert keine besonderen Berechtigungen an.`,acknowledge:`Ich habe verstanden, dass dieses Paket Code ausführt und die oben genannten Berechtigungen erhält.`,runtime:{node:`Im Prozess · volles Vertrauen`,sandbox:`Sandbox-isoliert`,worker:`Außerhalb des Prozesses`}},uninstall:{confirm:`{{manifestId}} v{{version}} aus diesem Laufzeitsystem deinstallieren?
|
|
19
|
-
|
|
20
|
-
Das zwischengespeicherte Manifest wird entfernt.`,successInList:`{{manifestId}} entfernt. Starten Sie das Laufzeitsystem neu, um es vollständig zu entladen.`,successInDetail:`Zwischengespeichertes Manifest für {{manifestId}} entfernt.`},accessDenied:{title:`App-Marktplatz nur für Administratoren`,description:`Sie haben keine Berechtigung, Apps in dieser Umgebung zu installieren.`},category:{crm:`CRM`,erp:`ERP`,hr:`Personalwesen`,finance:`Finanzen`,project:`Projektmanagement`,collaboration:`Zusammenarbeit`,analytics:`Analyse`,integration:`Integration`,automation:`Automatisierung`,ai:`KI`,security:`Sicherheit`,"developer-tools":`Entwicklertools`,"ui-theme":`UI-Thema`,storage:`Speicher`,other:`Sonstiges`},pricing:{free:`Kostenlos`,freemium:`Freemium`,paid:`Kostenpflichtig`,subscription:`Abonnement`,"usage-based":`Nutzungsbasiert`,"contact-sales":`Vertrieb kontaktieren`},relativeTime:{today:`heute`,daysAgo:`vor {{count}}d`,monthsAgo:`vor {{count}} Monaten`,yearsAgo:`vor {{count}} Jahren`}},approvals:{approve:`Genehmigen`,reject:`Ablehnen`,comment:`Kommentar (optional)`,approveSuccess:`Genehmigt`,rejectSuccess:`Abgelehnt`,rejectConfirm:`Diese Genehmigungsanfrage ablehnen?`},approvalsInbox:{loadMore:`Mehr laden`,loadingMore:`Lädt…`,loadedOf:`{{loaded}} von {{total}} geladen`,actEscalate:`SLA eskaliert`,systemSlaActor:`System (SLA)`,reassignBtn:`Übergeben`,reassignTitle:`Diese Genehmigung an jemand anderen übergeben?`,reassignBody:`Ihr Genehmiger-Platz geht an die gewählte Person — sie wird benachrichtigt und kann sofort handeln.`,reassignTo:`Neuer Genehmiger`,reassignToPlaceholder:`Benutzer wählen oder E-Mail / role:<Name> eingeben`,reassignSuccess:`Übergeben an {{to}}`,requestInfoBtn:`Rückfrage`,requestInfoTitle:`Den Antragsteller um weitere Informationen bitten?`,requestInfoBody:`Die Anfrage bleibt ausstehend; der Antragsteller wird benachrichtigt und kann antworten.`,requestInfoPlaceholder:`Was benötigen Sie vom Antragsteller?`,requestInfoSent:`Zur Ergänzung an den Antragsteller zurückgegeben`,remindBtn:`Erinnern`,remindSuccess:`Erinnerung an {{count}} Genehmiger gesendet`,remindThrottled:`Kürzlich wurde bereits erinnert — bitte später erneut.`,replyPlaceholder:`Auf diese Anfrage antworten…`,slaRemaining:`SLA noch {{dur}}`,slaOverdue:`SLA überfällig {{dur}}`,actReassign:`Übergeben`,reassignFromTo:`von {{from}} an {{to}}`,actRemind:`Erinnert`,actRequestInfo:`Rückfrage gestellt`,actComment:`Kommentiert`,stepProgress:`Genehmigungsschritte`,prevRequest:`Zurück`,nextRequest:`Weiter`,positionOf:`Anfrage {{index}} von {{total}}`,progressApprovals:`Genehmigungen — {{got}} von {{need}}`,progressGroups:`Freigabefortschritt — {{got}} von {{need}} Gruppen`,progressEligible:`{{count}} berechtigte Genehmiger`,progressBar:`Entscheidungsfortschritt`,declaredActions:`Aktionen`,attachmentChip:`Anhang`,attachmentOpenFailed:`Anhang konnte nicht geöffnet werden – bitte erneut versuchen`,approveOneTitle:`„{{title}}“ genehmigen?`,approveOneBody:`Die Anfrage wird mit Ihrer Identität genehmigt. Um einen Kommentar oder Anhang hinzuzufügen, öffnen Sie die Anfrage.`,flowOrigin:`Vom Flow gestartet`,sortBy:`Sortieren`,sortRecent:`Neueste zuerst`,sortOldest:`Älteste zuerst`,sortAmount:`Betrag (hoch→niedrig)`,quickPhrase1:`Genehmigt — erfüllt die Anforderungen.`,quickPhrase2:`Unter Vorbehalt genehmigt — bitte Umsetzung beobachten.`,quickPhrase3:`Bitte Unterlagen ergänzen und erneut einreichen.`,title:`Genehmigungen`,subtitle:`Genehmigungsanfragen prüfen und bearbeiten.`,refresh:`Aktualisieren`,tabMyPending:`Meine offenen`,tabSubmitted:`Von mir eingereicht`,tabAll:`Alle`,searchPlaceholder:`Datensatz, Prozess, Antragsteller suchen…`,clearSearch:`Suche löschen`,statusFilter:`Status`,allStatuses:`Alle Status`,processFilter:`Prozess`,allProcesses:`Alle Prozesse`,objectFilter:`Objekt`,allObjects:`Alle Objekte`,filterCount:`{{shown}} von {{total}}`,selected:`ausgewählt`,actionableCount:`({{count}} bearbeitbar)`,selectAll:`Alle auswählen`,selectRow:`Anfrage auswählen`,colRequest:`Anfrage`,colRecord:`Datensatz`,colRequester:`Antragsteller`,colStatus:`Status`,colWaiting:`Eingereicht`,colActions:`Aktionen`,statusPending:`Ausstehend`,statusApproved:`Genehmigt`,statusRejected:`Abgelehnt`,statusRecalled:`Zurückgezogen`,statusReturned:`Zur Überarbeitung zurückgegeben`,sendBackBtn:`Zurückgeben`,sendBackTitle:`Diese Anfrage zur Überarbeitung zurückgeben?`,sendBackBody:`Diese Runde endet und der Datensatz wird entsperrt, damit der Antragsteller die Daten korrigieren kann. Nach erneuter Einreichung beginnt eine neue Genehmigungsrunde für alle Genehmiger.`,sendBackPlaceholder:`Was muss korrigiert werden, bevor dies genehmigt werden kann?`,sendBackSuccess:`Zur Überarbeitung zurückgegeben — der Antragsteller kann jetzt bearbeiten und erneut einreichen`,sendBackAutoRejected:`Überarbeitungslimit erreicht — die Anfrage wurde automatisch abgelehnt`,actRevise:`Zur Überarbeitung zurückgegeben`,actResubmit:`Erneut eingereicht`,roundChip:`Runde {{n}}`,returnedHint:`Ein Genehmiger hat dies an Sie zurückgegeben. Der Datensatz ist entsperrt — korrigieren Sie die Daten und reichen Sie erneut ein, um eine neue Genehmigungsrunde zu starten.`,resubmitBtn:`Erneut einreichen`,resubmitting:`Wird erneut eingereicht…`,resubmitSuccess:`Erneut eingereicht — eine neue Genehmigungsrunde wurde gestartet`,resubmitPlaceholder:`Was haben Sie geändert?`,editRecordBtn:`Datensatz bearbeiten`,abandonTitle:`Diese Überarbeitung verwerfen?`,abandonBody:`Die Anfrage wird zurückgezogen statt erneut eingereicht. Die Genehmigung endet hier.`,emptyTitle:`Keine Anfragen`,emptyPending:`Alles erledigt — nichts wartet auf Sie.`,emptyOther:`Hier ist noch nichts.`,emptyViewAll:`Alle Anfragen ansehen`,noMatches:`Keine Treffer für die aktuellen Filter.`,keyboardHint:`Tastatur: j/k bewegen · Enter öffnen · x auswählen · a genehmigen · r ablehnen`,drawerTitle:`Genehmigungsanfrage`,submittedAgo:`Eingereicht {{when}}`,completedAt:`Abgeschlossen {{when}}`,waitingOn:`Wartet auf`,history:`Aktivität`,noActions:`Noch keine Aktionen.`,actSubmit:`Eingereicht`,actApprove:`Genehmigt`,actReject:`Abgelehnt`,actRecall:`Zurückgezogen`,rawData:`Rohdaten (JSON)`,copy:`Kopieren`,copied:`Kopiert`,copyFailed:`Kopieren fehlgeschlagen`,overrideActor:`Als andere Identität handeln (Admin)`,actor:`Akteur`,auto:`Auto`,overrideHint:`z. B. role:sales_manager. Leer lassen für die automatisch erkannte Identität.`,comment:`Kommentar (optional)`,approve:`Genehmigen`,approving:`Wird genehmigt…`,reject:`Ablehnen`,rejecting:`Wird abgelehnt…`,recall:`Zurückziehen`,recalling:`Wird zurückgezogen…`,cancel:`Abbrechen`,clear:`Leeren`,approveN:`{{count}} genehmigen`,rejectN:`{{count}} ablehnen`,bulkApproveTitle:`{{count}} Anfragen genehmigen?`,bulkApproveBody:`Jede Anfrage wird mit Ihrer Identität genehmigt; der Flow folgt dem Genehmigen-Zweig.`,bulkRejectTitle:`{{count}} Anfragen ablehnen?`,bulkRejectBody:`Die ausgewählten Anfragen werden abgelehnt und die Antragsteller benachrichtigt.`,bulkApproved:`{{count}} Anfragen genehmigt`,bulkRejected:`{{count}} Anfragen abgelehnt`,bulkPartial:`{{ok}} erfolgreich, {{fail}} fehlgeschlagen: {{which}}`,rejectOneTitle:`„{{title}}“ ablehnen?`,rejectOneBody:`Die Anfrage wird abgelehnt und der Antragsteller benachrichtigt.`,rejectTitle:`Diese Anfrage ablehnen?`,rejectBody:`Die Anfrage wird als abgelehnt markiert und der Antragsteller benachrichtigt.`,recallTitle:`Diese Anfrage zurückziehen?`,recallBody:`Genehmiger können danach nicht mehr handeln; der Datensatz wird entsperrt.`,inlineApproved:`„{{title}}“ genehmigt`,inlineRejected:`„{{title}}“ abgelehnt`,approvedFinal:`Genehmigt`,approvedWaiting:`Genehmigt — wartet auf die übrigen Genehmiger`,rejectedToast:`Abgelehnt`,recalledToast:`Anfrage zurückgezogen`,whyDisabled:`Nur die zugewiesenen Genehmiger können handeln. Wartet auf: {{who}}.`,whyDisabledSubmitter:`Sie haben diese Anfrage eingereicht und können sie zurückziehen — genehmigen oder ablehnen können nur die zugewiesenen Genehmiger.`,noActor:`Handelnde Identität nicht bestimmbar`,actionFailed:`Aktion fehlgeschlagen`,loadFailed:`Anfrage konnte nicht geladen werden`,recallUnavailable:`Zurückziehen ist in dieser Umgebung nicht verfügbar.`,requestGone:`Diese Anfrage existiert nicht mehr. Liste aktualisieren.`,notAllowed:`Sie sind dazu nicht berechtigt.`,alreadyDecided:`Diese Anfrage wurde bereits entschieden. Liste aktualisieren.`,justNow:`gerade eben`,minutesAgo:`vor {{count}} Min.`,hoursAgo:`vor {{count}} Std.`,daysAgo:`vor {{count}} Tagen`},preview:{empty:{loadFailedTitle:`Entwurfsvorschau konnte nicht geladen werden`,loadFailedDescription:`Das Entwurfs-Overlay konnte nicht gelesen werden. Erneut versuchen oder Verbindung prüfen.`,notReadyTitle:`„{{app}}“ ist noch nicht im Entwurf`,notReadyDescription:`Der Build läuft möglicherweise noch oder ist fehlgeschlagen, bevor diese App bereitgestellt wurde. Prüfen Sie den Build-Status in der Konversation — dieser Bereich aktualisiert sich, sobald Entwürfe eintreffen.`,nothingTitle:`Noch nichts zur Vorschau`,retry:`Erneut versuchen`},draftBar:{messageClean:`Entwurfsvorschau — keine unveröffentlichten Änderungen; alles hier ist bereits live.`,sampleDataTitle:`Beispieldaten erscheinen nach dem Veröffentlichen`,sampleDataBody:`Sie sehen eine Vorschau der Struktur Ihrer App. Veröffentlichen Sie sie, um Beispieldatensätze zu laden und sie live zu schalten.`,publishCta:`Veröffentlichen und live ansehen`,message:`Entwurfsvorschau — Sie sehen unveröffentlichte Änderungen. Nichts ist live, bis Sie veröffentlichen.`,publish:`Veröffentlichen`,publishing:`Wird veröffentlicht…`,exit:`Vorschau beenden`,changes:`Änderungen`},changes:{title:`Ausstehende Änderungen`,description:`Was die Veröffentlichung ändert. Neue Elemente werden hinzugefügt; Aktualisierungen überschreiben die Live-Version.`,loading:`Ausstehende Änderungen werden geladen…`,loadFailed:`Ausstehende Änderungen konnten nicht geladen werden:`,empty:`Nichts ausstehend — alle Entwürfe wurden veröffentlicht.`,kindNew:`Neu`,kindUpdate:`Aktualisierung`,detailLoading:`Details werden geladen…`,detailLoadFailed:`Änderungsdetails konnten nicht geladen werden:`,detailNone:`Keine Unterschiede erkannt — der Entwurf entspricht der veröffentlichten Version.`,detailChangedKeys:`Ebenfalls geändert:`,confirmNote:`Beim Veröffentlichen werden alle {{count}} ausstehenden Entwürfe dieses Pakets atomar freigegeben.`,publishConfirm:`Alle veröffentlichen`},unpublishedBar:{message:`Unveröffentlichte App — voll funktionsfähig, aber nur für Builder sichtbar. Veröffentlichen Sie sie, damit Ihre Benutzer sie sehen.`,publish:`Veröffentlichen`,publishing:`Wird veröffentlicht…`,published:`Veröffentlicht! Die App ist jetzt für Ihre Benutzer sichtbar.`,publishFailed:`Veröffentlichen fehlgeschlagen`},history:{button:`Verlauf`,title:`Build-Verlauf`,description:`Jede Änderung an dieser App, neueste zuerst. Machen Sie jeden Schritt rückgängig — eine Veröffentlichungsbestätigung ist nicht nötig.`,loadFailed:`Verlauf konnte nicht geladen werden:`,loadFailedUnavailable:`Commit-Speicher vorübergehend nicht erreichbar — dieser Lesevorgang hat nicht stattgefunden, daher wird kein Verlauf angezeigt. Versuchen Sie es gleich erneut.`,loading:`Verlauf wird geladen…`,empty:`Für diese App gibt es noch keinen Verlauf.`,revertLabel:`Eine Änderung rückgängig gemacht`,applyLabel:`Build-Änderung`,revert:`rückgängig`,items:`Elemente`,revertAction:`Rückgängig`,reverted:`Rückgängig gemacht — die Änderung wurde zurückgenommen.`,revertFailed:`Rückgängig machen fehlgeschlagen`,revertUnavailable:`Commit-Speicher vorübergehend nicht erreichbar — das Rückgängigmachen wurde möglicherweise nicht angewendet. Öffnen Sie diesen Verlauf erneut, um dies zu prüfen, bevor Sie es noch einmal versuchen.`}},filterBuilder:{where:`Wo`,and:`UND`,or:`ODER`,clearAll:`Alle löschen`,selectField:`Feld auswählen`,operator:`Operator`,selectValue:`Wert auswählen`,value:`Wert`,addFilter:`Filter hinzufügen`,removeCondition:`Bedingung entfernen`,trueLabel:`Wahr`,falseLabel:`Falsch`,noResults:`Keine Ergebnisse`,searchField:`{{label}} suchen…`,enterId:`{{label}}-ID eingeben`,operators:{equals:`Gleich`,notEquals:`Ungleich`,contains:`Enthält`,notContains:`Enthält nicht`,isEmpty:`Ist leer`,isNotEmpty:`Ist nicht leer`,greaterThan:`Größer als`,lessThan:`Kleiner als`,greaterOrEqual:`Größer oder gleich`,lessOrEqual:`Kleiner oder gleich`,before:`Vor`,after:`Nach`,between:`Zwischen`,in:`In`,notIn:`Nicht in`}},sortBuilder:{sortBy:`Sortieren nach`,thenBy:`Dann nach`,selectField:`Feld auswählen`,ascending:`A → Z`,descending:`Z → A`,addSort:`Sortierung hinzufügen`,removeSort:`Sortierung entfernen`},collaboration:{commentCount:`{{count}} Kommentare`,commentCountOne:`{{count}} Kommentar`,resolvedSuffix:` · Gelöst`,sortComments:`Kommentare sortieren`,sortOldest:`Älteste zuerst`,sortNewest:`Neueste zuerst`,resolve:`Lösen`,reopen:`Erneut öffnen`,justNow:`gerade eben`,minutesAgo:`vor {{count}} Min.`,hoursAgo:`vor {{count}} Std.`,daysAgo:`vor {{count}} T.`,edited:`(bearbeitet)`,reactionCount:`{{count}} Reaktionen`,reactionCountOne:`{{count}} Reaktion`,addThumbsUp:`Daumen hoch hinzufügen`,reply:`Antworten`,reactThumbsUp:`Mit Daumen hoch reagieren`,reactHeart:`Mit Herz reagieren`,cancelReply:`Antwort abbrechen`,replyingTo:`Antwort an {{name}} …`,replyingToComment:`Antwort auf Kommentar …`,commentPlaceholder:`Kommentar hinzufügen … (@ für Erwähnungen)`,send:`Senden`,presentUserCount:`{{count}} anwesende Benutzer`,presentUserCountOne:`{{count}} anwesender Benutzer`,moreUserCount:`{{count}} weitere Benutzer`,moreUserCountOne:`{{count}} weiterer Benutzer`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`aktiv`,statusIdle:`inaktiv`,statusAway:`abwesend`},wizard:{missingRequired:`Bitte füllen Sie die Pflichtfelder aus: {{fields}}`},appManagement:{title:`Anwendungen`,subtitle:`Alle konfigurierten Anwendungen verwalten`,newApp:`Neue App`,searchLabel:`Apps suchen`,searchPlaceholder:`Apps suchen…`,selectedCount:`{{n}} ausgewählt`,bulkEnable:`Aktivieren`,bulkDisable:`Deaktivieren`,selectAll:`Alle auswählen ({{n}})`,empty:`Keine Apps gefunden.`,defaultBadge:`Standard`,active:`Aktiv`,inactive:`Inaktiv`,selectApp:`{{name}} auswählen`,openApp:`App öffnen`,openAppNamed:`{{name}} öffnen`,editApp:`App bearbeiten`,editAppNamed:`{{name}} bearbeiten`,editWithAi:`Mit KI bearbeiten`,editWithAiNamed:`{{name}} mit KI bearbeiten`,enableApp:`App aktivieren`,disableApp:`App deaktivieren`,enableAppNamed:`{{name}} aktivieren`,disableAppNamed:`{{name}} deaktivieren`,setDefault:`Als Standard festlegen`,setDefaultNamed:`{{name}} als Standard festlegen`,deleteApp:`App löschen`,deleteAppNamed:`{{name}} löschen`,confirmDelete:`Zum Bestätigen erneut klicken`,confirmDeleteNamed:`Löschen von {{name}} bestätigen`,toast:{noClient:`Metadatendienst nicht erreichbar`,unknownError:`unbekannter Fehler`,appEnabled:`{{name}} aktiviert`,appDisabled:`{{name}} deaktiviert`,toggleFailed:`Ändern des App-Status fehlgeschlagen: {{reason}}`,setDefaultDone:`{{name}} als Standard festgelegt`,setDefaultFailed:`Festlegen der Standard-App fehlgeschlagen: {{reason}}`,appDeleted:`{{name}} gelöscht`,deleteFailed:`Löschen der App fehlgeschlagen: {{reason}}`,bulkEnabled:`{{n}} Apps aktiviert`,bulkDisabled:`{{n}} Apps deaktiviert`,bulkFailed:`Fehlgeschlagen für {{n}}: {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:`; `,bulkOperationFailed:`Massenvorgang fehlgeschlagen: {{reason}}`}}},fr:{impersonation:{banner:{message:`Vous incarnez {{user}} — chaque action est enregistrée en son nom.`,startedBy:`Démarré par l’administrateur {{admin}}.`,stop:`Arrêter l’usurpation`,stopping:`Arrêt en cours…`,stopFailed:`Impossible d’arrêter l’usurpation : {{reason}}`,notRestored:`Le serveur a accepté la demande mais n’a pas restauré votre session administrateur — vous incarnez toujours {{user}}. Déconnectez-vous puis reconnectez-vous pour y mettre fin.`}},capability:{label:{manage_users:`Gérer les utilisateurs`,manage_org_users:`Gérer les utilisateurs de l'organisation`,manage_metadata:`Gérer les métadonnées`,manage_platform_settings:`Gérer les paramètres de la plateforme`,setup_access:`Accès à la configuration`,setup_write:`Écriture des paramètres`,studio_access:`Accès à Studio`},group:{platform:`Plateforme`,org:`Organisation`,other:`Autre`}},perm:{facet:{none:`Aucun`,more:`+{{count}} de plus`,objects:`{{count}} objets`,objects_one:`{{count}} objet`,fields:`{{count}} règles de champ`,fields_one:`{{count}} règle de champ`,rls:`{{count}} politiques RLS`,rls_one:`{{count}} politique RLS`,tabs:`{{count}} règles d'onglet`,tabs_one:`{{count}} règle d'onglet`,adminScope:`Administration déléguée configurée`,designInStudio:`Concevoir dans Studio →`,designInStudioHint:`Concevoir dans Studio`}},lookup:{recentlyUsed:`Récemment utilisés`,allResults:`Tous les résultats`,createNew:`Créer`,createNamed:`Créer « {{name}} »`,showingResults:`Affichage de {{shown}} sur {{total}} résultats`,showAllResults:`Afficher tous les résultats ({{count}})`,selectedBadge:`Sélectionné`,browseAll:`Parcourir tous les enregistrements`,remove:`Supprimer {{label}}`,selectFirst:`Sélectionnez d’abord {{fields}}`,selectRecord:`Sélectionner un enregistrement`,recordCount:`{{count}} enregistrements`,recordCountOne:`1 enregistrement`,pageOf:`Page {{current}} sur {{total}}`,filters:`Filtres`,clear:`Effacer`,yes:`Oui`,filterPlaceholder:`Filtrer {{label}}`,prevPage:`Page précédente`,nextPage:`Page suivante`,jumpToPage:`Aller à la page`,retry:`Réessayer`,loading:`Chargement…`,noOptions:`Aucune option trouvée`,noRecords:`Aucun enregistrement trouvé`},common:{addToFavorites:`Ajouter aux favoris`,removeFromFavorites:`Retirer des favoris`,loading:`Chargement…`,save:`Enregistrer`,cancel:`Annuler`,delete:`Supprimer`,edit:`Modifier`,create:`Créer`,filter:`Filtrer`,reset:`Réinitialiser`,confirm:`Confirmer`,close:`Fermer`,back:`Retour`,next:`Suivant`,previous:`Précédent`,submit:`Soumettre`,refresh:`Actualiser`,export:`Exporter`,import:`Importer`,yes:`Oui`,no:`Non`,ok:`OK`,actions:`Actions`,more:`Plus`,selectAll:`Tout sélectionner`,clearAll:`Tout effacer`,noData:`Aucune donnée`,noResults:`Aucun résultat trouvé`,required:`Obligatoire`,optional:`Facultatif`,selectOption:`Sélectionner une option`,select:`Sélectionner…`,openChat:`Ouvrir le chat`,closeChat:`Fermer le chat`,closePanel:`Fermer le panneau`,resizeDrawer:`Redimensionner le panneau`,itemCount:`{{count}} éléments`,itemCountOne:`{{count}} élément`,toggleSidebar:`Basculer la barre latérale`,package:`Package`,done:`Terminé`,editInStudio:`Modifier dans Studio`,record:`Enregistrement`,retry:`Réessayer`,printDialogHint:`Ouvre la boîte de dialogue d'impression de votre navigateur (ce n'est pas un export PDF)`},actions:{decisionOutput:{help:`Transmis au flux comme sortie de décision.`,helpMultiValue:`Transmis au flux comme sortie de décision. Séparez les valeurs multiples par des virgules.`},resultDialog:{defaultTitle:`Enregistrez cette valeur maintenant`,acknowledge:`Je l'ai enregistrée`,copyAll:`Tout copier`}},validation:{required:`{{field}} est obligatoire`,minLength:`{{field}} doit contenir au moins {{min}} caractères`,maxLength:`{{field}} doit contenir au plus {{max}} caractères`,min:`{{field}} doit être au moins {{min}}`,max:`{{field}} doit être au plus {{max}}`,email:`Veuillez saisir une adresse e-mail valide`,url:`Veuillez saisir une URL valide`,pattern:`Le format de {{field}} est invalide`,formInvalid:`Veuillez vérifier les champs en surbrillance : {{fields}}`,formInvalidJoiner:`, `,unique:`{{field}} doit être unique`,type:`{{field}} doit être un {{type}} valide`},form:{noPermissionToSave:`Vous n'avez pas l'autorisation d'enregistrer cet enregistrement.`,submitFailed:`Échec de l'enregistrement. Veuillez réessayer.`,discardTitle:`Abandonner les modifications ?`,discardMessage:`Vous avez des modifications non enregistrées. Si vous fermez ce formulaire maintenant, vos modifications seront perdues.`,dialogDescriptionFallback:`Remplissez les champs du formulaire, puis envoyez ou annulez.`,keepEditing:`Continuer l'édition`,discard:`Abandonner`,conflictTitle:`Conflit d'enregistrement`,conflictMessage:`Cet enregistrement a été modifié par quelqu'un d'autre pendant votre édition. L'écrasement remplacera ses modifications par les vôtres.`,conflictLatestVersion:`Son enregistrement : {{time}}`,conflictOverwrite:`Écraser`,addItem:`Ajouter un élément`,removeItem:`Supprimer un élément`,fieldRequired:`Ce champ est obligatoire`,invalidFormat:`Format invalide`,saveSuccess:`Enregistré avec succès`,saveError:`Échec de l'enregistrement`,unsavedChanges:`Vous avez des modifications non enregistrées. Voulez-vous vraiment quitter ?`,stepOf:`Étape {{current}} sur {{total}}`,createTitle:`Créer {{object}}`,editTitle:`Modifier {{object}}`,viewTitle:`Afficher {{object}}`,createTargetOrg:`Création dans {{org}}`,saveRecord:`Enregistrer`,create:`Créer`,update:`Mettre à jour`,createSuccess:`{{object}} créé`,updateSuccess:`{{object}} mis à jour`,deleteSuccess:`{{object}} supprimé`,fullscreen:{title:`Modifier le texte`,description:`Modifiez la valeur texte complète, puis enregistrez ou annulez vos modifications.`,done:`Terminé`,toggle:`Modifier {{label}} en plein écran`,textFallback:`le texte`}},fields:{image:{upload:`Téléverser une image`,addMore:`Ajouter d'autres images`,uploading:`Téléversement…`,imageAlt:`Image {{index}}`,crop:`Recadrer l'image {{index}}`,remove:`Supprimer l'image {{index}}`,enlarge:`Agrandir {{name}}`,preview:`Aperçu de l'image`,previous:`Image précédente`,next:`Image suivante`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`En retard de {{count}} j`},file:{dragDropHere:`Glissez-déposez des fichiers ici`,dropFilesHere:`Déposez les fichiers ici`,browseHint:`ou cliquez pour parcourir`,browseHintCamera:`ou cliquez pour parcourir • utilisez le bouton appareil photo ci-dessous`,takePhoto:`Prendre une photo`,takeSelfie:`Prendre un selfie`,cameraCapture:`Capture photo`,uploading:`Téléversement…`,uploadingPct:`Téléversement… ({{pct}} %)`,fileFallback:`Fichier`,upload:`Téléverser`,remove:`Supprimer {{name}}`,exceedsMaxSize:`« {{name}} » dépasse la taille maximale ({{max}} Mo)`,uploadFailed:`Échec du téléversement de « {{name}} » : {{error}}`},richText:{format:`Format : {{format}}`,basicEditorHint:`Éditeur de texte enrichi (basique)`,placeholder:`Écrivez quelque chose…`},options:{empty:`Aucune option disponible`,selectFirst:`Sélectionnez d’abord {{fields}}`},objectRef:{loading:`Chargement des objets…`,placeholder:`Sélectionner un objet`,search:`Rechercher des objets…`,empty:`Aucun objet trouvé`},recipient:{selectTypeFirst:`Sélectionnez d'abord un type de destinataire.`,loading:`Chargement…`,search:`Rechercher…`,empty:`Aucune correspondance`,select:`Sélectionner un destinataire`,selectUser:`Sélectionner un utilisateur`,selectTeam:`Sélectionner une équipe`,selectBusinessUnit:`Sélectionner une unité opérationnelle`,selectPosition:`Sélectionner un poste`,selectUnitAndSubordinates:`Sélectionner une unité opérationnelle`},filterCondition:{selectObjectFirst:`Sélectionnez d'abord un objet.`,noCriteria:`Aucun critère — cette règle ne partage rien`,criteriaRequired:`Ajoutez au moins une condition. Une règle sans critères partagerait tous les enregistrements ; elle ne peut donc pas être enregistrée.`,invalidJson:`JSON invalide — la règle ne correspondra à aucun enregistrement tant qu'elle n'est pas corrigée.`,jsonOnly:`Ce critère ne peut être modifié qu'en JSON`,editAsJson:`Modifier en JSON`,useVisualBuilder:`Utiliser le constructeur visuel`},tags:{placeholder:`Saisissez puis appuyez sur Entrée pour ajouter…`},textarea:{characterCount:`Nombre de caractères : {{count}} sur {{max}}`,charactersRemaining:`Caractères restants : {{count}}`}},table:{rowsPerPage:`Lignes par page`,showing:`Affichage de {{from}} à {{to}} sur {{total}}`,noRows:`Aucune ligne à afficher`,sortAsc:`Tri croissant`,sortDesc:`Tri décroissant`,filterColumn:`Filtrer {{column}}`,columns:`Colonnes`,exportCSV:`Exporter en CSV`,exportExcel:`Exporter en Excel`,selectRow:`Sélectionner la ligne`,selectAllRows:`Sélectionner toutes les lignes`,expandRow:`Développer la ligne`,collapseRow:`Réduire la ligne`,hideColumn:`Masquer la colonne`,freezeColumn:`Figer la colonne`,unfreezeColumn:`Libérer la colonne`,pageInfo:`Page {{current}} sur {{total}}`,totalRecords:`{{count}} au total`,noResults:`Aucun résultat`,noResultsHint:`Essayez d'ajuster vos filtres ou vos termes de recherche.`,cancelAll:`Tout annuler`,saveAll:`Tout enregistrer ({{count}})`,addRecord:`Ajouter un enregistrement`,open:`Ouvrir`,search:`Rechercher…`,modified:`{{count}} ligne(s) modifiée(s)`,saveFailed:`Échec de l’enregistrement`,selected:`{{count}} sélectionné(s)`,edit:`Modifier`,delete:`Supprimer`},grid:{bulkSelected:`{{count}} sélectionné(s)`,bulkSelectedAllMatches:`{{count}} sélectionné(s) (tous les résultats)`,bulkClear:`Effacer`,bulkAllOnPage:`Les {{count}} éléments de cette page sont sélectionnés.`,bulkSelectAllMatching:`Sélectionner les {{count}} correspondances`,bulkAllMatchingSelected:`Les {{count}} enregistrements correspondants sont tous sélectionnés.`,bulk:{confirmDefault:`Ceci s'appliquera à {{count}} enregistrement(s).`,overLimit:`La sélection ({{count}}) dépasse la limite de l'action ({{limit}}). Réduisez la sélection pour continuer.`,affectedRecords:`Enregistrements concernés ({{count}}) :`,skippedIneligible:`{{count}} des enregistrements sélectionnés ne sont pas éligibles à cette action et seront ignorés.`,rowFallback:`Ligne {{index}}`,andMore:`… et {{count}} de plus`,processed:`{{count}} / {{total}} traités`,processedFailed:` · {{count}} en échec`,undonePrefix:`Annulé — `,succeeded:`Réussis {{count}} / {{total}}`,resultFailed:` · Échecs {{count}}`,retry:`Réessayer`,downloadErrorCsv:`Télécharger le CSV d'erreurs`,cancel:`Annuler`,back:`Retour`,next:`Suivant`,run:`Exécuter`,running:`Exécution…`,undo:`Annuler`,undoing:`Annulation…`,done:`Terminé`,selectPlaceholder:`Sélectionner…`,loading:`Chargement…`},actions:`Actions`,edit:`Modifier`,delete:`Supprimer`,export:`Exporter`,exportAs:`Exporter en {{format}}`,loading:`Chargement de la grille…`,errorLoading:`Erreur de chargement de la grille`,pullToRefresh:`Tirer pour actualiser`,refreshing:`Actualisation…`,openRecord:`Ouvrir l'enregistrement`,rowHeight:`Hauteur de ligne : {{mode}}`,openMenu:`Ouvrir le menu`,empty:`Vide`,yes:`Oui`,no:`Non`,systemFields:`Système`,summary:{pattern:`{{label}} : {{value}}`,count:`Nombre`,countEmpty:`Vides`,countFilled:`Remplis`,countUnique:`Uniques`,percentEmpty:`Vides`,percentFilled:`Remplis`,sum:`Somme`,avg:`Moyenne`,min:`Min`,max:`Max`},toolbar:{densityMode:`Densité`,densityCompact:`Compact`,densityComfortable:`Normal`,densitySpacious:`Spacieux`,densityCycleHint:`{{label}} (cliquer pour changer)`,densityCycleShortHint:`Cliquer pour changer`},import:{downloadTemplate:`Télécharger le modèle`,downloadTemplateHint:`Obtenez un CSV avec les bonnes colonnes (les champs obligatoires sont marqués d'un *).`,templateFileName:`{{object}}-import-template`,autoMatched:`Associé automatiquement`,autoMatchedSummary:`{{count}} colonne(s) associée(s) automatiquement — vérifiez et ajustez ci-dessous.`,confidence:{high:`Confiance élevée`,medium:`Confiance moyenne`,low:`Confiance faible`},asyncQueued:`En file d'attente — préparation de l'import…`,asyncProcessing:`Import de {{processed}} lignes sur {{total}}… {{progress}} %`,asyncLargeHint:`Ce fichier est volumineux, il sera donc importé en arrière-plan.`,largeSampleNotice:`Aperçu des {{shown}} premières lignes sur {{total}}.`,cancelImport:`Annuler l'import`,importCancelled:`Import annulé`,resultsTruncated:`Affichage des {{count}} premiers résultats de lignes (sur {{total}}).`,createdCount:`{{count}} créé(s)`,updatedCount:`{{count}} mis à jour`,downloadFailed:`Télécharger les lignes en échec`,options:`Options d'import`,writeMode:`Lorsqu'une ligne correspond à un enregistrement existant`,writeModeOpt:{insert:`Toujours créer`,update:`Mettre à jour l'existant (ignorer sans correspondance)`,upsert:`Mettre à jour si correspondance, sinon créer`},matchFields:`Correspondance sur`,matchFieldsPlaceholder:`Choisir le ou les champs de correspondance…`,matchFieldsHint:`Les lignes sont rapprochées des enregistrements existants via ces champs.`,needMatchFields:`Sélectionnez au moins un champ de correspondance.`,matchOnlyField:`(correspondance seule)`,optCreateOptions:`Conserver les valeurs d'option inconnues`,optRunAutomations:`Exécuter les automatisations et déclencheurs`,optTreatHistorical:`Importer comme données historiques`,optTreatHistoricalHint:`(importer les enregistrements terminés tels quels — ignorer les contrôles de la machine à états et conserver leurs horodatages et auteurs d'origine au lieu d'horodater maintenant)`,optSkipBlankKey:`Ignorer les lignes dont la valeur de correspondance est vide`,optBackground:`Importer en arrière-plan`,optBackgroundHint:`(s'exécute comme une tâche annulable)`,validate:`Valider les données`,validating:`Validation…`,validateHint:`Vérifier chaque ligne auprès du serveur avant l'import.`,validatePassed:`Les {{ok}} lignes sont toutes valides.`,validateFailed:`{{ok}} valides, {{errors}} en erreur.`,errorRowPrefix:`Ligne {{row}} : `,referenceNotFound:`Aucun enregistrement correspondant à « {{value}} »`,referenceAmbiguous:`« {{value}} » correspond à plusieurs enregistrements — utilisez une valeur unique ou l'identifiant de l'enregistrement`,invalidBoolean:`« {{value}} » n'est pas une valeur vrai/faux valide`,invalidNumber:`« {{value}} » n'est pas un nombre valide`,invalidDate:`« {{value}} » n'est pas une date valide`,invalidOption:`« {{value}} » ne fait pas partie des options autorisées`,requiredValue:`Ce champ est obligatoire`,matchAmbiguous:`Correspond à plusieurs enregistrements existants — utilisez une valeur unique ou l'identifiant de l'enregistrement`,history:`Historique`,historyBack:`Retour à l'import`,historyDescription:`Imports récents pour cet objet.`,historyHint:`Tâches d'import en arrière-plan, les plus récentes d'abord.`,historyRefresh:`Actualiser`,historyLoading:`Chargement…`,historyEmpty:`Aucun import pour l'instant.`,historyUnsupported:`L'historique des imports n'est pas disponible pour cette source de données.`,historyColStatus:`Statut`,historyColRows:`Lignes`,historyColResult:`Résultat`,historyColTime:`Quand`,errorCount:`{{count}} erreurs`,undoImport:`Annuler l'import`,undoing:`Annulation…`,undoConfirm:`Annuler cet import ? Les enregistrements créés seront supprimés et les enregistrements mis à jour seront rétablis à leurs valeurs précédentes.`,reverted:`Annulé`,jobStatus:{pending:`En attente`,running:`En cours`,succeeded:`Réussi`,failed:`Échec`,cancelled:`Annulé`},legacyReferenceBlocked:`Import bloqué : {{fields}} sont des champs de relation qui nécessitent la route d'import côté serveur pour convertir les noms en identifiants d'enregistrement, et cette connexion ne la prend pas en charge. Les importer en texte brut corromprait les données. Mettez à jour le backend/client, ou retirez l'association de ces colonnes et importez-les séparément.`,missingRequiredHint:`Impossible de continuer — champs obligatoires non associés : {{fields}}. Ajoutez une colonne correspondante à votre fichier, ou revenez en arrière et téléversez-en un qui la contient.`,legacyFallbackNotice:`Importé via un mode de compatibilité : cette connexion ne prend pas en charge la route d'import côté serveur, les valeurs ont donc été enregistrées comme texte sans conversion de type côté serveur. Mettez à jour le backend/client pour un import complet (conversion de type et résolution des relations).`,title:`Importer {{object}}`,notAllowed:`Cet objet n'est pas ouvert à l'import.`,stepUpload:`Télécharger`,stepMapping:`Correspondance`,stepPreview:`Aperçu`,uploadDescription:`Téléchargez un fichier CSV ou Excel, ou collez depuis un tableur pour commencer.`,mappingDescription:`Faites correspondre les colonnes aux champs de l'objet.`,previewDescription:`Vérifiez les données avant d'importer.`,dragDrop:`Glissez-déposez un fichier CSV ou Excel ici, ou cliquez pour parcourir`,browseFiles:`Parcourir les fichiers`,parsing:`Analyse…`,pasteHint:`ou collez (Ctrl/⌘+V) des lignes copiées depuis Excel ou Google Sheets`,legacyXls:`Les anciens fichiers .xls ne sont pas pris en charge — veuillez les réenregistrer au format .xlsx.`,unsupportedFile:`Type de fichier non pris en charge. Utilisez CSV, TSV ou Excel (.xlsx).`,parseFailed:`Impossible de lire ce fichier. Veuillez vérifier le format et réessayer.`,fileNeedsHeader:`Le fichier doit avoir une ligne d'en-tête et au moins une ligne de données.`,mappingTemplate:`Modèle de correspondance :`,chooseTemplate:`Choisir un modèle…`,noSavedTemplates:`Aucun modèle enregistré`,noneOption:`— Aucun —`,saveCurrent:`Enregistrer le modèle actuel`,templateName:`Nom du modèle`,save:`Enregistrer`,deleteTemplate:`Supprimer le modèle`,savedMapping:`Correspondance enregistrée :`,chooseSavedMapping:`Choisir une correspondance enregistrée…`,manualMapping:`— Faire correspondre les colonnes manuellement —`,transform:`Transformation`,savedMappingHint:`La correspondance « {{name}} » applique le renommage + les transformations + la conversion de type côté serveur. La correspondance des colonnes est en lecture seule.`,savedMappingPreviewNote:`L'aperçu affiche vos colonnes source ; à l'import, la correspondance « {{name}} » applique le renommage, les transformations et la conversion de type côté serveur.`,csvColumn:`Colonne`,mapsTo:`Correspond à`,typeMismatch:`Ressemble à {{type}}`,type:{number:`Nombre`,boolean:`Booléen`,date:`Date`,datetime:`Date et heure`,text:`Texte`},status:`Statut`,skipColumn:`Ignorer la colonne`,skip:`— Ignorer —`,mapped:`Mappé`,skipped:`Ignoré`,rowsWithErrors:`{{count}} ligne(s) avec des erreurs`,rowsCorrected:`{{count}} ligne(s) corrigée(s)`,clickToFix:`— cliquez sur une cellule mise en surbrillance pour modifier en ligne.`,showingRows:`Affichage de {{shown}} sur {{total}} lignes`,importing:`Importation… {{progress}}%`,importComplete:`Importation terminée`,imported:`{{count}} importé(s)`,skippedCount:`{{count}} ignoré(s)`,moreErrors:`…et {{count}} erreur(s) de plus`,cancel:`Annuler`,back:`Retour`,next:`Suivant`,close:`Fermer`,importNRows:`Importer {{count}} lignes`,importingProgress:`Importation…`,requiredMark:`*`,required:`Obligatoire`,invalidType:`{{type}} invalide`}},calendar:{today:`Aujourd'hui`,month:`Mois`,week:`Semaine`,day:`Jour`,agenda:`Agenda`,allDay:`Toute la journée`,noEvents:`Aucun événement`,newEvent:`Nouvel événement`,moreEvents:`+{{count}} de plus`},list:{firstRunTitle:`Rien pour l'instant`,firstRunMessage:`Créez votre premier enregistrement pour commencer.`,noMatches:`Aucun enregistrement correspondant`,noMatchesMessage:`Aucun enregistrement ne correspond à vos filtres ou à votre recherche. Essayez de les ajuster ou de les effacer.`,loadErrorTitle:`Impossible de charger les enregistrements`,loadErrorMessage:`Une erreur s'est produite lors du chargement de ces données. Vérifiez votre connexion et réessayez.`,loadErrorForbiddenTitle:`Accès refusé`,loadErrorForbiddenMessage:`Vous n'avez pas la permission de consulter ces enregistrements. Contactez votre administrateur si vous pensez devoir y accéder.`,loadErrorUnauthorizedTitle:`Connexion requise`,loadErrorUnauthorizedMessage:`Votre session a expiré ou vous êtes déconnecté. Reconnectez-vous pour consulter ces enregistrements.`,loadErrorRejectedTitle:`La requête de cette vue a été rejetée`,loadErrorRejectedMessage:`Le serveur n’a pas pu traiter le filtre ou les options de requête de cette vue. Effacer les filtres suffit généralement ; si la vue est enregistrée ainsi, un administrateur doit la corriger.`,loadErrorApiDisabledTitle:`Cet objet n’est pas disponible via l’API`,loadErrorApiDisabledMessage:`Cette page ne peut pas charger ses enregistrements car l’objet n’est pas exposé via l’API. Il s’agit d’un paramètre de l’objet lui-même, pas d’une autorisation : un administrateur doit activer l’accès API pour que cette page fonctionne.`,retry:`Réessayer`,managedBy:{system:{title:`Rien pour l'instant`,message:`Les entrées apparaissent automatiquement lorsque leur action source s'exécute (par ex. Soumettre pour approbation, Partager, Inviter). Déclenchez l'une d'elles sur un enregistrement source pour créer une ligne.`},appendOnly:{title:`Aucun événement enregistré`,message:`Ceci est un journal d'audit immuable. Les lignes sont écrites par la plateforme lorsque des événements surviennent — vous pouvez exporter l'historique mais pas créer d'entrées ici.`},betterAuth:{title:`Aucun enregistrement d'identité`,message:`Ces enregistrements sont créés par le fournisseur d'authentification — via la connexion, le provisionnement et les flux de sécurité — et non ajoutés à la main ici.`},betterAuthUser:{title:`Aucun utilisateur pour l'instant`,message:`Les comptes utilisateur sont provisionnés par le fournisseur d'authentification et ne sont pas créés ici. Invitez vos collègues dans votre organisation : ils apparaissent automatiquement à leur première connexion (provisionnement SSO à la volée). Les utilisateurs finaux arrivent lorsqu'ils s'inscrivent via votre application.`},betterAuthTeam:{title:`Aucune équipe pour l'instant`,message:`Les équipes regroupent les membres au sein d'une organisation. Créez-en une avec « Créer une équipe », ou elles arrivent via les flux de provisionnement d'organisation et SSO de votre fournisseur d'authentification.`}},refresh:`Actualiser`,loading:`Chargement des enregistrements…`,recordCount:`{{count}} enregistrements`,recordCountOne:`{{count}} enregistrement`,addRecord:`Ajouter un enregistrement`,tabs:`Onglets`,allRecords:`Tous les enregistrements`,search:`Rechercher`,filter:`Filtrer`,filterRecords:`Filtrer les enregistrements`,sort:`Trier`,sortRecords:`Trier les enregistrements`,sortByIdSuffix:`(par ID)`,sortRelationalHint:`Les colonnes qui pointent vers un autre enregistrement ne sont pas listées : elles ne peuvent être triées que par l'ID stocké, et non par le nom affiché dans la cellule. Pour trier par ce nom, dénormalisez-le sur cet objet sous la forme d'un champ stocké, écrit à chaque modification de la source, puis triez sur ce champ. Pas un champ de formule : il est virtuel, aucune colonne n'est stockée pour lui et le serveur refuse de trier dessus.`,resetSortToDefault:`Réinitialiser au tri par défaut de la vue`,group:`Grouper`,groupBy:`Grouper par`,export:`Exporter`,exportAs:`Exporter en {{format}}`,color:`Couleur`,rowColor:`Couleur de ligne`,colorByField:`Colorer par champ`,clear:`Effacer`,none:`Aucun`,hideFields:`Masquer les champs`,noItems:`Aucun élément trouvé`,noItemsMessage:`Il n'y a aucun enregistrement à afficher. Essayez d'ajuster les filtres ou d'ajouter de nouvelles données.`,showAll:`Tout afficher`,pullToRefresh:`Tirer pour actualiser`,refreshing:`Actualisation…`,share:`Partager`,print:`Imprimer`,hideFieldsTitle:`Masquer les champs`,dataLimitReached:`Les {{limit}} premiers enregistrements sont affichés. Il peut y avoir plus de données disponibles.`,viewSettings:`Paramètres de vue`,viewSettingsHint:`Regroupement, couleur, densité et champs visibles.`,addGroup:`Ajouter un champ de groupe`,collapsedByDefault:`Réduit par défaut`,removeGroup:`Supprimer`,inlineEditShort:`Édition en ligne`,inlineEditLabel:`Modifier les enregistrements en ligne (cliquez sur une cellule pour modifier)`,recordEditingTitle:`Modification des enregistrements`},managedByBadge:{systemWritable:{short:`Schéma de la plateforme`,title:`Défini par la plateforme, modifiable par l'administrateur`,body:`Le schéma de cet objet est défini par la plateforme, mais ses lignes vous appartiennent : vous pouvez les créer et les modifier ici. Qui peut écrire est déterminé par l'administration déléguée et la sécurité au niveau des enregistrements, pas par ce badge.`},config:{short:`Config admin`,title:`Configuration administrateur`,body:`Ces lignes définissent le comportement de la plateforme à l'exécution. Créez-les ici ; les données d'exécution produites résident dans une table séparée.`},system:{short:`Géré par le système`,title:`Géré par la plateforme`,body:`Les lignes sont créées automatiquement lorsque des actions s'exécutent sur l'enregistrement source. La liste est une surface de supervision en lecture seule — les actions par ligne (Approuver, Rappeler, Renvoyer, …) se trouvent sur chaque ligne.`},appendOnly:{short:`Lecture seule · Journal d'audit`,title:`Historique en lecture seule`,body:`Journal d'audit immuable. Les lignes ne peuvent pas être créées, modifiées ni supprimées depuis l'interface : la plateforme les écrit lors des événements. Utilisez Exporter pour les télécharger à des fins de conformité.`},betterAuth:{short:`Identité`,title:`Géré par le fournisseur d'identité`,body:`Le schéma de cet objet appartient à {{provider}}. Les modifications directes contournent le hachage des mots de passe, la validation des sessions, les contrôles à deux facteurs et les hooks d'audit. Gérez ces enregistrements via les flux de connexion, d'invitation et de sécurité de votre fournisseur d'authentification.`}},kanban:{uncategorized:`Non catégorisé`,columns:`colonnes`,addCard:`Ajouter une carte`,addColumn:`Ajouter une colonne`,moveCard:`Déplacer la carte`,deleteCard:`Supprimer la carte`,deleteColumn:`Supprimer la colonne`,noCards:`Aucune carte`,cardTitlePlaceholder:`Saisir le titre de la carte…`,requiredFieldsTitle:`Compléter les champs obligatoires`,requiredFieldsDescription:`Ce déplacement rend les champs ci-dessous obligatoires. Remplissez-les pour continuer.`},timeline:{bucket:{overdue:`En retard`,today:`Aujourd'hui`,tomorrow:`Demain`,thisWeek:`Cette semaine`,nextWeek:`Semaine prochaine`,later:`Plus tard`,noDate:`Sans date`,unassigned:`Non attribué`},scale:{week:`Semaine {{n}}`,quarter:`T{{quarter}} {{year}}`},gantt:{rowLabel:`Éléments`}},gantt:{viewMode:{day:`Jour`,week:`Semaine`,month:`Mois`,quarter:`Trimestre`,year:`Année`},row:{expand:`Développer`,collapse:`Réduire`,open:`Ouvrir les détails`},aria:{taskList:`Liste des tâches`},tooltip:{days:`j`},menu:{view:`Afficher les détails`,edit:`Modifier en ligne`,delete:`Supprimer`,addPredecessor:`Ajouter un prédécesseur…`,addSuccessor:`Ajouter un successeur…`,removeDependency:`Supprimer la dépendance`,noCandidates:`Aucune tâche disponible`,searchTasks:`Rechercher des tâches…`},delete:{title:`Supprimer cette tâche ?`,body:`« {{title}} » sera définitivement supprimée. Cette action est irréversible.`,cancel:`Annuler`,confirm:`Supprimer`,deleting:`Suppression…`},drawer:{fallbackTitle:`Détails de la tâche`},linkType:{fs:`Fin → Début`,ss:`Début → Début`,ff:`Fin → Fin`,sf:`Début → Fin`},linkEnd:{start:`Début`,end:`Fin`},link:{rejected:{self:`Une tâche ne peut pas dépendre d’elle-même.`,locked:`Cette ligne est verrouillée et ne peut pas recevoir de nouvelle dépendance.`,group:`Une ligne récapitulative ne peut pas recevoir de dépendance — reliez plutôt l’une de ses tâches.`,cycle:`Ce lien créerait une dépendance circulaire.`}},conflict:{title:`Conflit de planning`,body:`Ce déplacement entre en conflit avec les contraintes de dépendance. Replanifier automatiquement {{count}} tâche(s) concernée(s) ?`,confirm:`Replanifier automatiquement`,cancel:`Laisser tel quel`},autoScheduleDlg:{title:`Planification automatique`,body:`Décaler {{count}} tâche(s) plus tard pour respecter les liens de dépendance ?`,skipped:`{{count}} tâche(s) verrouillée(s) violent aussi les liens et ont été ignorées.`,confirm:`Appliquer`,cancel:`Annuler`,none:`Toutes les dépendances sont respectées — rien à replanifier.`},resource:{header:`Ressource`,peak:`Pic`,over:`surchargée`,empty:`Aucune tâche à affecter.`},quickFilter:{all:`Tous`,clear:`Effacer les filtres`,empty:`Aucune option`,resultSummary:`Affichage de {shown} / {total} tâches`},readOnly:`Lecture seule`,readOnlyHint:`L'édition est désactivée pour cette vue.`,lockedHint:`Aucune autorisation de modification`,writeFailed:`Échec de l'enregistrement — la modification a été annulée`,column:{taskName:`Nom de la tâche`,start:`Début`,end:`Fin`},toolbar:{thisWeek:`Cette semaine`,thisMonth:`Ce mois-ci`,viewMode:`Granularité de la chronologie`,enterFullscreen:`Passer en plein écran`,exitFullscreen:`Quitter le plein écran`,criticalPath:`Mettre en évidence le chemin critique`,autoSchedule:`Planifier automatiquement les dépendances`,exportPng:`Exporter en PNG`,exportPdf:`Exporter en PDF`,saveLayout:`Enregistrer la disposition`,refresh:`Actualiser`,undo:`Annuler`,redo:`Rétablir`,prevPeriod:`Période précédente`,nextPeriod:`Période suivante`,zoomIn:`Zoom avant`,zoomOut:`Zoom arrière`,jumpToToday:`Aller à aujourd'hui`,today:`Aujourd'hui`,showTaskList:`Afficher la liste des tâches`,hideTaskList:`Masquer la liste des tâches`}},view:{editViewConfig:`Modifier la configuration de la vue`,rename:`Renommer`,duplicateView:`Dupliquer la vue`,shareView:`Partager la vue`,setAsDefault:`Définir par défaut`,pinView:`Épingler la vue`,unpinView:`Désépingler la vue`,changeViewType:`Changer le type de vue`,deleteView:`Supprimer la vue`,addView:`Ajouter une vue`,unsavedChanges:`Modifications non enregistrées`,saveAsView:`Enregistrer comme vue`,moreViews:`{{count}} de plus`,activeFilters:`Filtres actifs`,activeSort:`Tri actif`,manageViews:`Gérer les vues`,manageAllViews:`Gérer toutes les vues…`,manageViewsDescription:`Réorganiser, renommer, épingler ou supprimer toutes les vues de cet objet.`,searchViews:`Rechercher des vues`,addNewView:`Ajouter une nouvelle vue`,done:`Terminé`,noViewsFound:`Aucune vue ne correspond à votre recherche.`,dragToReorder:`Glisser pour réorganiser`,defaultView:`Vue par défaut`,defaultBadge:`par défaut`,tabActionsFor:`Actions de vue pour {{name}}`,readonlyAriaLabel:`Vue en lecture seule`,readonlyTooltip:`Vue système — définie dans le code, en lecture seule.`},designer:{undo:`Annuler`,redo:`Rétablir`},detail:{editInlineHint:`Double-cliquez pour modifier`,systemActor:`Système`,unknownUser:`Inconnu`,created:`Créé`,updated:`Mis à jour`,back:`Retour`,edit:`Modifier`,editInline:`Modifier`,save:`Enregistrer`,saveChanges:`Enregistrer les modifications`,editFieldsInline:`Modifier les champs`,share:`Partager`,duplicate:`Dupliquer`,export:`Exporter`,viewHistory:`Voir l'historique`,delete:`Supprimer`,moreActions:`Plus d'actions`,addReaction:`Ajouter une réaction`,pageHeaderActions:`Actions de l'en-tête de page`,emojiPicker:`Sélecteur d'émojis`,reactionCount:`{{emoji}} {{count}} réactions`,reactionCountOne:`{{emoji}} {{count}} réaction`,recordDetail:`Détail de l'enregistrement`,recordDetailWithLabel:`Détail — {{label}}`,openAsFullPage:`Ouvrir en pleine page`,recordDetailOverlay:`Panneau de détail de l'enregistrement pour {{title}}.`,addToFavorites:`Ajouter aux favoris`,removeFromFavorites:`Retirer des favoris`,previousRecord:`Enregistrement précédent`,nextRecord:`Enregistrement suivant`,recordOf:`{{current}} sur {{total}}`,recordNotFound:`Enregistrement introuvable`,recordNotFoundDescription:`L'enregistrement que vous recherchez n'existe pas ou a peut-être été supprimé.`,goBack:`Retour`,details:`Détails`,related:`Associés`,relatedRecords:`{{count}} enregistrements`,relatedRecordOne:`{{count}} enregistrement`,noRelatedRecords:`Aucun enregistrement associé trouvé`,loading:`Chargement…`,copyToClipboard:`Copier dans le presse-papiers`,copied:`Copié !`,deleteConfirmation:`Êtes-vous sûr de vouloir supprimer cet enregistrement ?`,deleted:`Enregistrement supprimé`,editRecord:`Modifier l'enregistrement`,viewAll:`Tout afficher`,new:`Nouveau`,add:`Ajouter`,emptyValue:`—`,comments:`Commentaires`,searchComments:`Rechercher des commentaires…`,addCommentPlaceholder:`Ajouter un commentaire… (Ctrl+Entrée pour envoyer)`,noMatchingComments:`Aucun commentaire correspondant`,noCommentsYet:`Aucun commentaire pour le moment`,pinned:`Épinglé`,pin:`Épingler`,unpin:`Désépingler`,justNow:`à l'instant`,minutesAgo:`il y a {{count}} min`,hoursAgo:`il y a {{count}} h`,daysAgo:`il y a {{count}} j`,dropFilesToUpload:`Déposez les fichiers ici ou cliquez pour télécharger`,attachmentCount:`{{count}} pièce jointe`,attachmentCountPlural:`{{count}} pièces jointes`,removeAttachment:`Supprimer la pièce jointe`,attachments:`Pièces jointes`,uploadAttachment:`Téléverser`,loadingAttachments:`Chargement des pièces jointes…`,noAttachments:`Aucune pièce jointe pour le moment. Téléversez un fichier pour commencer.`,downloadAttachment:`Télécharger`,deleteAttachment:`Supprimer la pièce jointe`,attachmentDeleteDenied:`Seule la personne qui l'a téléversée ou une personne pouvant modifier cet enregistrement peut supprimer cette pièce jointe.`,attachmentParentAccessDenied:`Vous n'avez pas accès pour joindre des fichiers à cet enregistrement.`,attachmentDownloadDenied:`Vous n'avez pas accès pour télécharger cette pièce jointe.`,attachmentAuthRequired:`Veuillez vous connecter pour télécharger cette pièce jointe.`,attachmentPermissionDenied:`Vous n'avez pas la permission de faire cela.`,unifiedDiff:`Vue unifiée`,sideBySideDiff:`Vue côte à côte`,noChanges:`Aucune modification`,previousVersion:`Précédent`,currentVersion:`Actuel`,discussion:`Discussion`,showDiscussion:`Afficher la discussion ({{count}})`,hideDiscussion:`Masquer la discussion`,bold:`Gras (Ctrl+B)`,italic:`Italique (Ctrl+I)`,listFormat:`Liste`,inlineCode:`Code en ligne`,mentionSomeone:`Mentionner quelqu'un`,preview:`Aperçu`,submitComment:`Envoyer (Ctrl+Entrée)`,sendComment:`Envoyer`,writeComment:`Écrire un commentaire…`,subscribedTooltip:`Abonné — cliquez pour vous désabonner`,unsubscribedTooltip:`S'abonner aux notifications`,firstRecord:`Premier enregistrement (Début)`,previousRecordKey:`Enregistrement précédent (←)`,nextRecordKey:`Enregistrement suivant (→)`,lastRecord:`Dernier enregistrement (Fin)`,noRecords:`Aucun enregistrement`,searchWhileNavigating:`Rechercher pendant la navigation`,searchRecords:`Rechercher des enregistrements…`,allActivity:`Toute l'activité`,commentsOnly:`Commentaires uniquement`,fieldChangesFilter:`Modifications de champs`,tasksOnly:`Tâches uniquement`,leaveCommentPlaceholder:`Laisser un commentaire… (Ctrl+Entrée pour envoyer)`,noActivity:`Aucune activité enregistrée`,loadMore:`Charger plus`,edited:`(modifié)`,via:`via {{source}}`,viewSource:`Voir la source`,replyCount:`{{count}} réponse`,replyCountPlural:`{{count}} réponses`,replyPlaceholder:`Répondre…`,filterActivity:`Filtrer l'activité`,openDiscussion:`Ouvrir le panneau de discussion`,closeDiscussion:`Fermer le panneau de discussion`,subscribeAriaLabel:`S'abonner aux notifications`,unsubscribeAriaLabel:`Se désabonner des notifications`,clearSearch:`Effacer la recherche`,saving:`Enregistrement…`,lockedByApproval:`Verrouillé pour approbation`,lockedTooltip:`Cet enregistrement a une demande d'approbation en attente ; la modification est verrouillée`,writeStrippedTitle:`Enregistré — mais certains champs n'ont pas été appliqués`,writeStrippedReadonly:`En lecture seule, donc non appliqué : {{fields}}`,writeStrippedByState:`Non modifiable dans l'état actuel de cet enregistrement, donc non appliqué : {{fields}}`,approvalPendingEditable:`En approbation · modifiable`,approvalPendingTooltip:`Cet enregistrement a une demande d'approbation en attente ; cette étape autorise encore la modification`,approvalProgress:`Approbations — {{got}} sur {{need}}`,approvalProgressGroups:`Validation — {{got}} sur {{need}} groupes`,approvalProgressLabel:`Progression de l'approbation`,approvalsPanelTitle:`Approbations`,cancelApproval:`Annuler l'approbation`,cancelApprovalInFlight:`Annulation…`,cancelApprovalTooltip:`Annuler la demande d'approbation en attente pour déverrouiller l'enregistrement`,cancelApprovalTooltipUnlocked:`Annuler la demande d'approbation en attente`,cancelApprovalFailed:`Échec de l'annulation de l'approbation`,cancelApprovalUnavailable:`L'annulation des approbations n'est pas prise en charge par cette source de données`,linkCopied:`Lien copié dans le presse-papiers`,linkCopyFailed:`Impossible de copier le lien`,cancel:`Annuler`,cancelEdit:`Abandonner les modifications`,sectionMoreDetails:`Plus de détails`,concurrentUpdateTitle:`Cet enregistrement a été modifié par quelqu'un d'autre`,concurrentUpdateDescription:`Un autre utilisateur a enregistré une version plus récente de {{field}} pendant votre modification. Choisissez comment résoudre le conflit.`,concurrentUpdateYourEdit:`Votre modification`,concurrentUpdateCurrentValue:`Valeur actuelle`,concurrentUpdateUpdatedBy:`Mis à jour par {{name}}`,concurrentUpdateUpdatedAt:`Mis à jour le {{when}}`,concurrentUpdateReload:`Charger la version actuelle`,concurrentUpdateOverwrite:`Écraser quand même`,concurrentUpdateCancel:`Annuler`,concurrentUpdateRecordLabel:`cet enregistrement`,openInNewTab:`Ouvrir dans un nouvel onglet`,activity:`Activité`,history:`Historique`,historyEmpty:`Aucun historique pour le moment`,editRow:`Modifier`,deleteRow:`Supprimer`,deleteRowConfirmation:`Supprimer cet enregistrement ?`,deleteRowTitle:`Supprimer l'enregistrement`,actions:`Actions`,previousPage:`Précédent`,nextPage:`Suivant`,pageOf:`Page {{current}} sur {{total}}`,sortBy:`Trier par`,filterPlaceholder:`Filtrer…`,highlightFields:`Champs clés`,createdBy:`Créé par`,updatedBy:`Mis à jour par`,showEmptyRelated:`+ {{count}} vides`,showEmptyRelated_one:`+ {{count}} vide`,showEmptyRelated_other:`+ {{count}} vides`,copyEmail:`Copier l'e-mail`,copyPhone:`Copier le téléphone`,copyRecordId:`Copier l'ID`,showEmptyFields:`Afficher {{count}} champs vides`,hideEmptyFields:`Masquer les champs vides`,noValue:`Aucune valeur`},chart:{noData:`Aucune donnée de graphique disponible`,loading:`Chargement du graphique…`,nullCategory:`(Non défini)`},map:{searchLocations:`Rechercher des lieux…`,locationDetails:`Détails du lieu`,markersCount:`{{count}} marqueurs`,invalidCoordinates:`{{count}} enregistrement avec des coordonnées manquantes ou invalides exclu de la carte.`,invalidCoordinatesPlural:`{{count}} enregistrements avec des coordonnées manquantes ou invalides exclus de la carte.`},workflow:{draft:`Brouillon`,active:`Actif`,paused:`En pause`,completed:`Terminé`,cancelled:`Annulé`,save:`Enregistrer`,publish:`Publier`,addNode:`Ajouter un nœud`,workflowFlow:`Flux de travail`,properties:`Propriétés`,connections:`Connexions`,quickConnect:`Connexion rapide`,fromPlaceholder:`De…`,toPlaceholder:`Vers…`,connect:`Connecter`,label:`Libellé`,type:`Type`,description:`Description`,assignee:`Responsable`,assigneeType:`Type de responsable`,user:`Utilisateur`,role:`Rôle`,group:`Groupe`,expression:`Expression`,timeoutMinutes:`Délai (minutes)`,selectNodeToEdit:`Sélectionnez un nœud pour modifier ses propriétés`,workflowTitle:`Titre du workflow`,newWorkflow:`Nouveau workflow`,outConnections:`{{count}} sortie(s)`,start:`Début`,end:`Fin`,task:`Tâche`,userTask:`Tâche utilisateur`,serviceTask:`Tâche service`,scriptTask:`Tâche script`,approval:`Approbation`,condition:`Condition`,parallelGateway:`Passerelle parallèle`,joinGateway:`Passerelle de jonction`,boundaryEvent:`Événement limite`,delay:`Délai`,notification:`Notification`,webhook:`Webhook`,allowConcurrency:`Autoriser (exécution simultanée)`,forbidConcurrency:`Interdire (ignorer les nouveaux)`,replaceConcurrency:`Remplacer (annuler les existants)`,queueConcurrency:`File d'attente (exécuter après)`,conditionEvent:`Condition`,manualEvent:`Manuel`,webhookEvent:`Webhook`,timerEvent:`Minuterie`,signalEvent:`Signal`,versionHistory:`Historique des versions`,importBpmn:`Importer BPMN`,exportBpmn:`Exporter BPMN`,undo:`Annuler`,redo:`Rétablir`,resetZoom:`Réinitialiser le zoom`},dashboard:{noRows:`Aucune ligne`,loading:`Chargement…`,pickMeasures:`Choisissez des mesures (valeurs) pour ce widget de dataset.`,datasetUnsupported:`Cette source de données ne prend pas en charge les requêtes de dataset.`,details:`Détails`,exportCsv:`Exporter en CSV`,openInList:`Ouvrir dans la liste`,filters:{label:`Filtres du tableau de bord`,dateRange:`Plage de dates`,allTime:`Depuis toujours`,custom:`Personnalisé…`,all:`Tout`,reset:`Réinitialiser`,range:{today:`Aujourd'hui`,yesterday:`Hier`,this_week:`Cette semaine`,last_week:`La semaine dernière`,this_month:`Ce mois-ci`,last_month:`Le mois dernier`,this_quarter:`Ce trimestre`,last_quarter:`Le trimestre dernier`,this_year:`Cette année`,last_year:`L'année dernière`,last_7_days:`7 derniers jours`,last_30_days:`30 derniers jours`,last_90_days:`90 derniers jours`}},addWidget:`Ajouter un widget`,removeWidget:`Supprimer un widget`,editLayout:`Modifier la mise en page`,saveLayout:`Enregistrer la mise en page`,resetLayout:`Réinitialiser la mise en page`,total:`Total`,noDataAvailable:`Aucune donnée disponible`,noDataSourceFor:`Aucune source de données pour`,trend:{vsLastQuarter:`vs. trimestre dernier`,vsLastMonth:`vs. mois dernier`,vsLastWeek:`vs. semaine dernière`,vsLastYear:`vs. année dernière`,vsYesterday:`vs. hier`,vsPreviousPeriod:`vs. période précédente`}},configPanel:{save:`Enregistrer`,discard:`Annuler`,close:`Fermer`,layout:`Disposition`,columns:`Colonnes`,gap:`Espacement`,rowHeight:`Hauteur de ligne`,data:`Données`,refreshInterval:`Intervalle de rafraîchissement`,appearance:`Apparence`,title:`Titre`,showDescription:`Afficher la description`,theme:`Thème`,configuration:`Configuration`,general:`Général`,advanced:`Avancé`},appDesigner:{createApp:`Créer une application`,editApp:`Modifier l'application`,basicInfo:`Informations de base`,objects:`Objets`,navigation:`Navigation`,branding:`Identité visuelle`,appName:`Nom de l'app`,appTitle:`Titre`,appDescription:`Description`,appIcon:`Icône`,template:`Modèle`,layout:`Disposition`,layoutSidebar:`Barre latérale`,layoutHeader:`En-tête`,layoutEmpty:`Vide`,selectObjects:`Sélectionner des objets`,searchObjects:`Rechercher des objets…`,selectAll:`Tout sélectionner`,deselectAll:`Tout désélectionner`,navBuilder:`Constructeur de navigation`,addGroup:`Ajouter un groupe`,addUrl:`Ajouter une URL`,addSeparator:`Ajouter un séparateur`,noNavItems:`Aucun élément de navigation pour l'instant.`,logoUrl:`URL du logo`,primaryColor:`Couleur principale`,faviconUrl:`URL du favicon`,preview:`Aperçu`,complete:`Terminer`,snakeCaseHint:`Doit être en snake_case (ex. my_app)`,modeEdit:`Modifier`,modePreview:`Aperçu`,modeCode:`Code`,addWidget:`Ajouter un widget`,widgetProperties:`Propriétés du widget`,dataSource:`Source de données`,valueField:`Champ de valeur`,aggregate:`Agrégat`,colorVariant:`Variante de couleur`,addComponent:`Ajouter un composant`,componentProperties:`Propriétés du composant`,viewType:`Type de vue`,fields:`Champs`,toolbar:`Barre d'outils`,showSearch:`Afficher la recherche`,showFilters:`Afficher les filtres`,showSort:`Afficher le tri`,appearance:`Apparence`,rowHeight:`Hauteur de ligne`,stripedRows:`Lignes alternées`,bordered:`Avec bordure`,livePreview:`Aperçu en direct`,stepBasicDesc:`Nom, titre et mise en page`,stepObjectsDesc:`Sélectionner les objets métier`,stepNavigationDesc:`Construire l'arbre de navigation`,stepBrandingDesc:`Logo, couleurs et favicon`,noObjectsFound:`Aucun objet trouvé.`,noNavItemsHint:`Pas encore d'éléments de navigation. Sélectionnez des objets à l'étape précédente ou ajoutez-en manuellement.`,separator:`Séparateur`,separatorLabel:`— Séparateur —`,newGroup:`Nouveau groupe`,newLink:`Nouveau lien`,saveDraft:`Enregistrer le brouillon`,cancelConfirmTitle:`Abandonner les modifications ?`,cancelConfirmMessage:`Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir annuler ?`,confirmDiscard:`Abandonner`,keepEditing:`Continuer à éditer`,navNoItems:`Aucun élément de navigation. Cliquez sur les boutons ci-dessus pour ajouter des éléments.`,navNoPreviewItems:`Aucun élément`,navLivePreview:`Aperçu en direct`,navCollapseGroup:`Réduire le groupe`,navExpandGroup:`Développer le groupe`,navAddChild:`Ajouter un enfant`,navMoveUp:`Monter`,navMoveDown:`Descendre`,navRemove:`Supprimer`,navObjectPage:`Page d'objet`,navDashboard:`Tableau de bord`,navPage:`Page`,navReport:`Rapport`,navGroup:`Groupe`,navUrl:`URL`,navSeparator:`Séparateur`,navTypeObject:`Objet`,navTypeDashboard:`Tableau de bord`,navTypePage:`Page`,navTypeReport:`Rapport`,navTypeUrl:`URL`,navTypeGroup:`Groupe`,navTypeSeparator:`Séparateur`,navTypeAction:`Action`,navTypeComponent:`Composant`,navEditIcon:`Modifier l'icône`,navToggleVisible:`Basculer la visibilité`,navHidden:`Masqué`,navExportSchema:`Exporter JSON`,navImportSchema:`Importer JSON`,navExportSuccess:`Schéma de navigation exporté`,navImportSuccess:`Schéma de navigation importé`,navImportError:`JSON de navigation invalide`,navIconPlaceholder:`Nom de l'icône (ex. Users)`,dashboardEditor:`Éditeur de tableau de bord`,noWidgets:`Aucun widget. Cliquez sur un bouton ci-dessus pour en ajouter un.`,widgetLayoutSize:`Taille de la disposition`,widgetWidth:`Largeur`,widgetHeight:`Hauteur`,dashboardPreview:`Aperçu du tableau de bord`,noWidgetsPreview:`Aucun widget à prévisualiser`,pageCanvasEditor:`Éditeur de canevas de page`,emptyPage:`Page vide. Cliquez sur un bouton ci-dessus pour ajouter un composant.`,pagePreview:`Aperçu de la page`,noComponentsPreview:`Aucun composant à prévisualiser`,modePage:`Page`,modeDashboard:`Tableau de bord`,undo:`Annuler`,redo:`Rétablir`,brandingEditor:`Éditeur d'identité`,brandingExport:`Exporter JSON`,brandingImport:`Importer JSON`,brandingPreview:`Aperçu`,brandingSampleButton:`Bouton exemple`,brandingSampleText:`Voici l'apparence de votre thème de marque.`,colorPalette:`Palette de couleurs`,fontFamily:`Famille de polices`,fontDefault:`Par défaut (système)`,modeLight:`Clair`,modeDark:`Sombre`,mobilePreview:`Aperçu mobile`,objectManager:{title:`Gestionnaire d'objets`,addObject:`Nouvel objet`,searchPlaceholder:`Rechercher des objets…`,noObjects:`Aucun objet trouvé.`,objectName:`Nom API`,objectLabel:`Étiquette`,pluralLabel:`Étiquette plurielle`,icon:`Icône`,selectIcon:`Sélectionner une icône…`,group:`Groupe`,noGroup:`Aucun groupe`,sortOrder:`Ordre de tri`,enabled:`Activé`,relationships:`Relations`,systemBadge:`Système`,fieldCount:`{{count}} champs`,ungrouped:`Sans groupe`,deleteConfirmTitle:`Supprimer l'objet ?`,deleteConfirmMessage:`Cela supprimera définitivement l'objet et tous ses champs. Cette action est irréversible.`},fieldDesigner:{title:`Concepteur de champs`,addField:`Nouveau champ`,searchPlaceholder:`Rechercher des champs…`,allTypes:`Tous les types`,noFields:`Aucun champ trouvé.`,fieldName:`Nom API`,fieldLabel:`Étiquette`,fieldType:`Type`,fieldGroup:`Groupe`,description:`Description`,required:`Obligatoire`,unique:`Unique`,readOnly:`Lecture seule`,hidden:`Masqué`,indexed:`Indexé`,externalId:`ID externe`,trackHistory:`Suivre l'historique`,defaultValue:`Valeur par défaut`,placeholder:`Espace réservé`,referenceTo:`Référence à`,formula:`Formule`,options:`Options`,addOption:`Ajouter une option`,validationRules:`Règles de validation`,addRule:`Ajouter une règle`,systemBadge:`Système`,ungrouped:`Général`,deleteConfirmTitle:`Supprimer le champ ?`,deleteConfirmMessage:`Le champ sera définitivement supprimé. Les données existantes dans ce champ seront perdues.`,basicSection:`Basique`,typeSpecificSection:`Paramètres de type`,advancedSection:`Avancé`,typeCategory:{text:`Texte`,number:`Nombre`,date:`Date et heure`,choice:`Choix`,relation:`Relation`,advanced:`Avancé`}}},console:{saveAdvisoryTitle:`Enregistré — le contrôle de création a signalé {{count}} recommandation(s)`,settingsHub:{title:`Paramètres`,subtitle:`Configurez votre espace de travail, vos intégrations et vos indicateurs de fonctionnalité.`,loadError:`Échec du chargement des paramètres`,empty:`Aucun paramètre enregistré. Les plugins peuvent enregistrer des manifestes de paramètres via le SettingsService.`,settingsCount:`{{n}} paramètres`,beta:`Bêta`,categories:{Workspace:`Espace de travail`,Communication:`Communication`,Security:`Sécurité`,Infrastructure:`Infrastructure`,Beta:`Bêta`,Other:`Autre`}},objectData:{badge:`Données`,description:`Extrait de données défini par l'URL — non lié à une vue enregistrée.`,filteredBy:`Filtré par`,removeFilter:`Supprimer le filtre {{field}}`,saveAsView:`Enregistrer comme vue`,noAccessTitle:`Accès refusé`,noAccess:`Vous n'avez pas l'autorisation de consulter ces données.`},identityImport:{policyTitle:`Configuration de connexion pour les utilisateurs importés`,policy:{auto:`Automatique (recommandé)`,invite:`Envoyer des invitations`,temporary:`Mots de passe temporaires`,none:`Aucun mot de passe (identité seulement)`},policyHint:{auto:`Les utilisateurs joignables reçoivent une invitation (e-mail ou SMS) ; ceux que nous ne pouvons pas joindre reçoivent un mot de passe à usage unique, affiché UNE SEULE FOIS sur l'écran de résultat. Fonctionne avec ou sans service e-mail/SMS.`,invite:`Chaque utilisateur créé reçoit un e-mail de définition de mot de passe (ou un SMS d'invitation pour les lignes avec téléphone uniquement). Nécessite un service e-mail/SMS configuré — les lignes injoignables échouent.`,temporary:`Pour les déploiements sans e-mail/SMS : chaque utilisateur créé reçoit un mot de passe à usage unique, affiché UNE SEULE FOIS sur l'écran de résultat. La première connexion impose un changement.`,none:`Les utilisateurs se connectent d'abord avec un code OTP par téléphone, un lien magique ou un lien de réinitialisation, puis définissent leur propre mot de passe.`},passwordsNote:`Mots de passe temporaires — affichés une seule fois, jamais stockés. Enregistrez-les maintenant ; chaque utilisateur doit changer le sien à la première connexion.`,passwordsMore:`Autres entrées omises — utilisez le téléchargement.`,passwordsDownload:`Télécharger le CSV`},ai:{usage:{title:`Utilisation de l'IA`,meterBuild:`Créer`,meterAsk:`Demander`,statusOk:`Il en reste beaucoup`,statusLow:`Bientôt épuisé`,statusFull:`Limite atteinte`,resetsDaily:`Réinitialisation ce soir`,resetsMonthly:`Réinitialisation au prochain cycle`,ctaUpgrade:`Passer à l'offre supérieure pour continuer`,ctaTopUp:`Ajouter des crédits pour continuer`,ariaLabel:`Utilisation de l'IA : {{status}}`},workspaceTitle:`Espace de travail IA`,workspaceSubtitle:`Posez des questions, inspectez et reprenez vos conversations`,openChats:`Ouvrir les discussions`,chats:`Discussions`,chatsDescription:`Parcourez et gérez les conversations avec l'IA.`,share:`Partager`,shareTitle:`Partager cette conversation`,shareDisabledTitle:`Commencez à discuter pour activer le partage`,newChat:`Nouveau`,searchChats:`Rechercher des discussions…`,noChatsYet:`Aucune discussion pour l'instant`,noChatsDescription:`Démarrez une nouvelle conversation pour la voir ici.`,noMatchingChats:`Aucune discussion correspondante.`,newConversation:`Nouvelle conversation`,renameConversation:`Renommer la conversation`,deleteConversation:`Supprimer la conversation`,saveRename:`Enregistrer le nom`,cancelRename:`Annuler le changement de nom`,loadingHistory:`Chargement de l'historique de la conversation…`,conversationReady:`Conversation prête`,preparingConversation:`Préparation d'une nouvelle conversation`,offlineDemoMode:`Mode démo hors ligne — liste des agents indisponible`,sendFailedRateLimited:`Vous envoyez des messages trop rapidement. Votre message est conservé ci-dessous — patientez un instant puis réessayez.`,sendFailedGeneric:`Impossible d'envoyer votre message. Il est conservé ci-dessous — veuillez réessayer.`,askAgent:`Demander à {{agent}}…`,assistant:`Assistant`,liveCanvas:`Aperçu en direct — {{app}} (brouillon)`,liveCanvasUnlisted:`Application en direct — {{app}} (non répertoriée jusqu'à publication)`,loadingAgents:`Chargement des agents…`,askAnything:`Posez n'importe quelle question…`,emptyTitle:`Démarrer une conversation`,emptyDescription:`Posez n'importe quelle question — l'assistant a accès au contexte de votre application actuelle.`,switchAssistant:`Changer d'assistant`,chooseAgent:`Choisir un assistant…`,empty:{build:{title:`Créer avec l'IA`,description:`Décrivez une application ou un flux de travail en langage courant — je rédige les objets, les écrans et les automatisations, puis vous vérifiez et publiez.`},ask:{title:`Interroger vos données`,description:`Posez des questions sur vos enregistrements — comptages, listes et synthèses sur les données auxquelles vous avez accès.`},editApp:{title:`Modification de « {{app}} »`,titleGeneric:`Modifier cette application`,description:`Que souhaitez-vous changer ? Je modifie cette application sur place — ajouter un champ, un objet, une vue ou une automatisation, ou ajuster l'existant.`}},clearConversation:`Effacer`,sendHint:`pour envoyer`,agentActivity:`Activité de l'agent`,toolCompleted:`Terminé`,toolRunning:`En cours`,toolAwaitingApproval:`En attente d'approbation`,toolFailed:`Échec`,toolDetailsHidden:`Les entrées des outils et les résultats bruts sont masqués dans cette vue.`,copy:`Copier`,copied:`Copié`,regenerate:`Régénérer`,model:`Modèle`,submit:`Envoyer`,uploadFiles:`Téléverser des fichiers`,stopResponse:`Arrêter la réponse`,trace:`trace`,viewTrace:`Afficher la trace`,nextSteps:`Et ensuite`,publishDrafts:`Publier`,publishOk:`Publié — les objets sont maintenant actifs.`,seedWarn:`Publié, mais certaines données d'exemple n'ont pas pu être chargées.`,openBuiltApp:`Ouvrir l'application`,designBuiltApp:`Concevoir dans Studio`,previewDraft:`Aperçu`,previewApp:`Aperçu de l'application`,resizeSplit:`Redimensionner la discussion et l'aperçu`,hideChats:`Masquer les discussions`,showChats:`Afficher les discussions`,planTitle:`Plan proposé`,planQuestions:`Confirmer avant de créer`,planAssumptions:`Hypothèses`,planApproveHint:`Répondez pour approuver ou ajuster ce plan.`,planApprove:`Créer`,planAdjust:`Ajuster`,justNow:`à l'instant`,minutesAgo:`il y a {{count}} min`,hoursAgo:`il y a {{count}} h`,daysAgo:`il y a {{count}} j`,agentLabels:{ask:`Demander`,build:`Créer`,dataChat:`Assistant`,metadataAssistant:`Assistant de métadonnées`},suggestions:{dataChat:{userCount:`Combien d'utilisateurs y a-t-il dans le système ? Liste leurs adresses e-mail.`,recentRecords:`Liste les 5 enregistrements créés le plus récemment.`,recordCounts:`Compte les enregistrements pour chaque objet.`},metadataAssistant:{buildCrm:`Crée un CRM commercial — clients, contacts et un pipeline d'affaires que je peux totaliser par étape.`,buildApp:`Crée un suivi de projets — projets, tâches avec responsables et échéances, et un tableau par statut.`,buildFlow:`Conçois un service d'assistance — tickets avec priorité, un flux de statuts et des liens vers les clients.`,buildInventory:`Crée une application de stock — produits, niveaux de stock, fournisseurs et visibilité des stocks faibles.`,buildRecruiting:`Crée un suivi de candidatures — candidats, postes ouverts, étapes d'entretien et notes.`},generic:{help:`En quoi peux-tu m'aider ?`,availableObjects:`Liste les objets de données disponibles.`,recentActivity:`Résume mon activité récente.`},editApp:{addField:`Ajoute un champ à l'un des objets.`,addObject:`Ajoute un nouvel objet et relie-le à un objet existant.`,addDashboard:`Ajoute un tableau de bord pour les indicateurs clés.`,addAutomation:`Ajoute une automatisation — une approbation, un flux de statuts ou une notification.`}},changesTitle:`Confirmer les modifications`,changesConfirmed:`Confirmé`,changesConfirm:`Confirmer`,changesConfirmHint:`Répondez pour confirmer ou ajuster cette modification.`,changeVerb:{createObject:`Créer un objet`,addField:`Ajouter un champ`,modifyField:`Modifier un champ`,deleteField:`Supprimer un champ`,createMetadata:`Créer`,updateMetadata:`Modifier`,createSeed:`Générer des données d'exemple`,createPackage:`Créer un package d'application`},collapseToDock:`Réduire dans le panneau latéral`,switchApp:`Changer d'application`,switchAppLabel:`Conversations de création par application`,newApp:`Nouvelle application`,connectionWaiting:`En attente du serveur…`,connectionStalled:`Toujours en cours…`,connectionOffline:`Connexion perdue — reconnexion…`,designingPlan:`Conception de votre application…`,designingPlanHint:{data:`Cartographie des données que vous allez suivre…`,objects:`Définition des objets et de leurs champs…`,relations:`Connexion des enregistrements liés…`,lookups:`Configuration des relations et des champs de recherche…`,views:`Planification des écrans et des vues…`,forms:`Mise en page des formulaires et des listes…`,defaults:`Ajout de valeurs par défaut et de validations pertinentes…`,dashboard:`Esquisse d'un tableau de bord pour le suivi…`,review:`Vérification de la cohérence de la structure…`,finalize:`Assemblage du plan…`},planBuilding:`Création…`,planBuilt:`Créé`,planDeferred:`Pas encore créé`,planReady:`Le plan est prêt. Créez-le maintenant, ou dites-moi ce qu'il faut ajuster.`,published:`Publié`,publishFailed:`Échec de la publication`,unavailableTitle:`Assistant IA non disponible`,unavailableDescription:`Cette instance n'a pas d'assistant IA activé. Tout le reste fonctionne normalement.`,unavailableError:`Impossible de joindre le service IA. Il est peut-être temporairement hors ligne — réessayez, ou retournez à l'accueil.`,unavailableRetry:`Réessayer`,unavailableHome:`Retour à l'accueil`,dock:{title:`Assistant`,description:`Discussion avec l'assistant IA`,resize:`Redimensionner la discussion`,collapse:`Réduire la discussion`,maximize:`Ouvrir en pleine page`,open:`Ouvrir l'assistant`},group:{today:`Aujourd'hui`,yesterday:`Hier`,previous7Days:`7 jours précédents`,previous30Days:`30 jours précédents`,older:`Plus anciennes`}},title:`Console ObjectStack`,initializing:`Initialisation de l'application…`,loadingHint:`La configuration d'un nouvel environnement peut prendre quelques instants.`,breadcrumb:{dashboards:`Tableaux de bord`,pages:`Pages`,reports:`Rapports`,system:`Système`},settingsView:{backToHub:`Tous les paramètres`,back:`Retour`,noNamespace:`Aucun espace de noms sélectionné.`,loadError:`Échec du chargement des paramètres`,saved:`Paramètres enregistrés`,saveFailed:`Échec de l'enregistrement`,lockedByEnv:`Verrouillé par l'environnement : {{key}}`,lockedByEnvNoKey:`Verrouillé par l'environnement`,actionSucceeded:`Action réussie`,actionFailed:`Échec de l'action`,discard:`Abandonner`,saveChanges:`Enregistrer les modifications`,unsavedCount:`{{count}} modifications non enregistrées`,unsavedCount_one:`{{count}} modification non enregistrée`,unsavedCount_other:`{{count}} modifications non enregistrées`,cryptoRefusalTitle:`Ce déploiement ne peut pas chiffrer les secrets`,cryptoRefusalSubjectSuffix:`est déclaré chiffré, aucune écriture n'a donc eu lieu.`,cryptoRefusalNoSubject:`La valeur déclarée chiffrée a été refusée, aucune écriture n'a donc eu lieu.`,cryptoRefusalToast:`Impossible de chiffrer les secrets : {{subject}}`,cryptoRefusalToastNoSubject:`Impossible de chiffrer les secrets`},loadingSteps:{connecting:`Connexion à la source de données`,loadingConfig:`Chargement de la configuration`,preparingWorkspace:`Préparation de l'espace de travail`},error:{connectionFailed:`Impossible de se connecter au serveur`,serverUnreachable:`Le serveur {{url}} est inaccessible.`,checkServer:`Veuillez vérifier votre connexion réseau ou que le backend est en cours d’exécution.`,timeout:`Délai de connexion dépassé après 10 secondes.`},actions:{retry:`Réessayer`,retrying:`Nouvelle tentative…`},serverAction:{openingTitle:`Ouverture…`,openingBody:`Ouverture… cela peut prendre un moment.`,popupBlockedTitle:`Fenêtre contextuelle bloquée`,popupBlockedDescription:`Le navigateur a bloqué l'ouverture du nouvel onglet.`,popupBlockedAction:`Ouvrir dans un nouvel onglet`},shortcuts:{title:`Raccourcis clavier`,description:`Référence rapide de tous les raccourcis clavier disponibles.`,groups:{general:`Général`,navigation:`Navigation`,dataViews:`Vues de données`,aiChat:`Assistant IA`,preferences:`Préférences`},openCommandPalette:`Ouvrir la palette de commandes`,showShortcuts:`Afficher les raccourcis clavier`,closeDialog:`Fermer le dialogue / panneau`,toggleSidebar:`Basculer la barre latérale`,focusSearch:`Focus sur la recherche`,createRecord:`Créer un nouvel enregistrement`,refreshData:`Actualiser les données`,editRecord:`Modifier l'enregistrement sélectionné`,newChat:`Nouvelle discussion`,toggleChatsList:`Basculer la liste des discussions`,toggleDarkMode:`Basculer le mode sombre`},commandPalette:{title:`Palette de commandes`,placeholder:`Tapez une commande ou recherchez…`,noResults:`Aucun résultat trouvé.`,objects:`Objets`,dashboards:`Tableaux de bord`,pages:`Pages`,reports:`Rapports`,switchApp:`Changer d'application`,current:`Actuel`,preferences:`Préférences`,lightTheme:`Thème clair`,darkTheme:`Thème sombre`,systemTheme:`Thème système`,actions:`Actions`,openFullSearch:`Ouvrir la page de recherche complète`,createApp:`Créer une nouvelle application`,searching:`Recherche…`,records:`Enregistrements`,recentRecords:`Récemment consultés`},errors:{somethingWentWrong:`Quelque chose s'est mal passé`,unexpectedError:`Une erreur inattendue est survenue lors du rendu de cette vue.`,tryAgain:`Réessayer`,goHome:`Retour à l'accueil`,errorDetails:`Détails de l'erreur (développement uniquement)`},notFound:{title:`Page introuvable`,description:`L'URL que vous avez suivie ne correspond à aucune vue de cette application.`,back:`Retour`},theme:{toggle:`Changer de thème`,light:`Clair`,dark:`Sombre`,system:`Système`},objectView:{viewTypeTree:`Arborescence`,viewTypeTreeDesc:`Imbriquer les enregistrements auto-référencés en hiérarchie via un champ parent.`,parentField:`Champ parent`,parentFieldHelp:`Le champ pointant vers l'enregistrement parent (même objet) qui définit la hiérarchie. Seuls les champs auto-référencés conviennent.`,viewName:`Nom`,viewNameHelp:`Clé technique (snake_case). Remplie automatiquement à partir du titre — modifiable si vous le souhaitez.`,viewNameRequired:`Saisissez une clé (minuscules, chiffres, tiret bas). Non remplie automatiquement pour les titres non latins.`,viewNameInvalid:`Utilisez des minuscules, des chiffres et des tirets bas ; commencez par une lettre ou un tiret bas.`,systemViewReadonly:`Vue système définie dans le code — en lecture seule.`,cannotEditMetaView:`Cette vue est intégrée et définie dans le code — elle ne peut pas être modifiée.`,cannotDeleteMetaView:`Cette vue est intégrée et définie dans le code — elle ne peut pas être supprimée.`,expandToPage:`Ouvrir en pleine page`,objectNotFound:`Objet introuvable`,objectNotFoundDescription:`L'objet « {{objectName}} » n'existe pas dans la configuration actuelle.`,objectNotFoundHint:`Vérifiez les paramètres de navigation de votre application ou sélectionnez un autre objet dans la barre latérale.`,filterOrNotSavable:`Ce filtre relie les conditions par OU, ce qu'une vue enregistrée ne peut pas encore stocker. Il s'applique toujours à cette liste — supprimez le groupement OU pour l'enregistrer dans la vue.`,filterNestedNotSavable:`Ce filtre utilise des groupes de conditions imbriqués, qu'une vue enregistrée ne peut pas stocker. Aplatissez-le en une seule liste de conditions pour l'enregistrer dans la vue.`,allRecords:`Tous les enregistrements`,exitDesignMode:`Quitter le mode conception`,enterDesignMode:`Entrer en mode conception`,metadataInspector:`Inspecteur de métadonnées`,editView:`Modifier la vue`,addView:`Ajouter une vue`,designTools:`Outils de conception`,new:`Nouveau`,configureView:`Configurer la vue`,closePanel:`Fermer le panneau`,page:`Page`,pageConfigHint:`Barre d'outils, navigation et paramètres du shell de vue`,listConfigHint:`Rendu des données, colonnes et apparence pour ce type de liste`,general:`Général`,generalHint:`Titre, description et type de la vue`,toolbar:`Barre d'outils`,toolbarHint:`Recherche, filtre, tri, regroupement et bascule de densité`,toolbarEnabledCount:`{{count}} sur {{total}} activés`,navigationSection:`Navigation`,navigationHint:`Comportement au clic sur la ligne et paramètres de la vue détaillée`,records:`Enregistrements`,recordsHint:`Mode de sélection, ajout d'enregistrement et édition en ligne`,exportPrint:`Export et impression`,exportPrintHint:`Formats d'export, impression et affichage du nombre d'enregistrements`,showAllFields:`Tout afficher`,hideAllFields:`Tout masquer`,searchFields:`Rechercher des champs…`,title:`Titre`,description:`Description`,data:`Données`,source:`Source`,columns:`Colonnes`,filterBy:`Filtrer par`,sortBy:`Trier par`,appearance:`Apparence`,showDescription:`Afficher la description`,viewType:`Type de vue`,userFilters:`Filtres utilisateur`,enableSearch:`Activer la recherche`,enableFilter:`Activer le filtre`,enableSort:`Activer le tri`,enableHideFields:`Activer masquer les champs`,enableGroup:`Activer le regroupement`,enableColor:`Activer la couleur`,enableDensity:`Activer la densité`,userActions:`Actions utilisateur`,addRecordViaForm:`Ajouter des enregistrements via un formulaire`,advanced:`Avancé`,allowExport:`Autoriser l'exportation`,recordCount:`{{count}} enregistrements`,noDescription:`Aucune description`,none:`Aucun`,columnsConfigured:`{{count}} colonnes`,save:`Enregistrer`,discard:`Annuler`,createView:`Créer une vue`,newView:`Nouvelle vue`,typeOptions:`Options de type`,groupByField:`Champ de regroupement`,startDateField:`Champ de date de début`,titleField:`Champ de titre`,latitudeField:`Champ de latitude`,longitudeField:`Champ de longitude`,imageField:`Champ d'image`,dateField:`Champ de date`,selectField:`Sélectionner un champ…`,gridOptionsHint:`La vue grille utilise les colonnes configurées ci-dessus.`,groupBy:`Regrouper par`,prefixField:`Champ de préfixe`,fields:`Champs`,fieldsVisible:`{{count}} visibles`,sortsCount:`{{count}} tris`,filtersCount:`{{count}} filtres`,endDateField:`Champ de date de fin`,color:`Couleur`,fieldTextColor:`Couleur du texte du champ`,rowHeight:`Hauteur de ligne`,wrapHeaders:`Retour à la ligne des en-têtes`,showFieldDescriptions:`Afficher les descriptions des champs`,collapseAllByDefault:`Tout réduire par défaut`,striped:`Lignes rayées`,bordered:`Cellules bordées`,inlineEdit:`Modifier les enregistrements en ligne`,addDeleteRecordsInline:`Ajouter/supprimer des enregistrements en ligne`,clickIntoRecordDetails:`Cliquer pour les détails de l'enregistrement`,navigationMode:`Mode de navigation`,navigationWidth:`Largeur de navigation`,navigationWidthHint:`Disponible pour les modes de navigation tiroir, modale et partagée`,openNewTab:`Ouvrir dans un nouvel onglet`,openNewTabHint:`Disponible pour les modes de navigation page et nouvelle fenêtre`,import:`Importer`,importTitle:`Importer depuis CSV`,importedToast:`{{count}} ligne(s) importée(s).`,importedWithSkipped:`{{ok}} ligne(s) importée(s) ; {{skipped}} ignorée(s).`,showAdvancedSettings:`Afficher les paramètres avancés`,showFewerSettings:`Afficher moins de paramètres`,createViewDesc:`Choisissez un type de vue et donnez-lui un nom. Tous les paramètres peuvent être modifiés ensuite.`,cancel:`Annuler`,create:`Créer`,delete:`Supprimer`,deleteViewTitle:`Supprimer la vue`,deleteViewConfirm:`Supprimer la vue "{{name}}" ? Ceci est irréversible.`,bulkDeleteConfirm:`Supprimer {{count}} enregistrements sélectionnés ? Ceci est irréversible.`,duplicateViewName:`Une vue avec ce nom existe déjà.`,viewTypeGrid:`Grille`,viewTypeGridDesc:`Tableau de type tableur d'enregistrements.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Cartes regroupées en colonnes par un champ de sélection unique.`,viewTypeCalendar:`Calendrier`,viewTypeCalendarDesc:`Enregistrements placés par date dans un calendrier mensuel.`,viewTypeGallery:`Galerie`,viewTypeGalleryDesc:`Grandes cartes d'image depuis un champ de pièce jointe.`,viewTypeTimeline:`Chronologie`,viewTypeTimelineDesc:`Enregistrements le long d'un axe temporel horizontal.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Barres de projet avec début/fin et dépendances.`,viewTypeMap:`Carte`,viewTypeMapDesc:`Marqueurs géographiques depuis des champs latitude/longitude.`,viewTypeChart:`Graphique`,viewTypeChartDesc:`Graphiques à barres/lignes/secteurs agrégés.`,groupByFieldHelp:`Le tableau Kanban regroupe les enregistrements en colonnes selon les valeurs du champ.`,startDateFieldHelp:`Le calendrier place les enregistrements sur la cellule correspondant à cette date.`,ganttStartDateFieldHelp:`Le bord gauche de chaque barre Gantt utilise cette date.`,ganttEndDateFieldHelp:`Le bord droit de chaque barre Gantt utilise cette date.`,timelineDateFieldHelp:`Les enregistrements sont positionnés sur la chronologie selon cette date.`,latitudeFieldHelp:`Champ contenant la latitude (champs géo uniquement).`,longitudeFieldHelp:`Champ contenant la longitude (champs géo uniquement).`,imageFieldHelp:`La couverture de la galerie provient de ce champ image ou pièce jointe.`,selectOption:`Sélectionner…`,noEligibleFieldForType:`Aucun champ éligible de ce type. Ajoutez-en un à l'objet d'abord.`,viewTypeUnavailable:`Cet objet n'a pas de champ pouvant servir de "{{field}}".`,viewTypeUnavailableShort:`Non pris en charge par cet objet.`,chartType:`Type de graphique`,chartTypeHelp:`Détermine comment les données sont rendues.`,chartTypeBar:`Graphique à barres`,chartTypeLine:`Graphique en courbes`,chartTypePie:`Graphique circulaire`,chartTypeArea:`Graphique en aires`,chartTypeScatter:`Nuage de points`,xAxisField:`Champ axe X`,xAxisFieldHelp:`La dimension catégorielle ou temporelle.`,yAxisField:`Champ axe Y`,yAxisFieldHelp:`Le champ numérique à agréger.`,selectionMode:`Mode de sélection`,selectionNone:`Aucun`,selectionSingle:`Unique`,selectionMultiple:`Multiple`,pageSize:`Taille de page`,pageSizeOptions:`Options de taille de page`,exportFormats:`Formats d'exportation`,exportMaxRecords:`Enregistrements max`,exportIncludeHeaders:`Inclure les en-têtes`,exportFileNamePrefix:`Préfixe du nom de fichier`,searchableFields:`Champs recherchables`,filterableFields:`Champs filtrables`,resizableColumns:`Colonnes redimensionnables`,densityCompact:`Compact`,densityComfortable:`Normal`,densitySpacious:`Spacieux`,densityMode:`Mode de densité`,hiddenFields:`Champs masqués`,rowActions:`Actions de ligne`,bulkActions:`Actions en masse`,sharing:`Partage`,sharingEnabled:`Partage activé`,sharingVisibility:`Visibilité`,addRecordEnabled:`Ajout d'enregistrement activé`,addRecordPosition:`Position`,addRecordMode:`Mode`,addRecordFormView:`Vue formulaire`,conditionalFormatting:`Mise en forme conditionnelle`,addRule:`Ajouter une règle`,quickFilters:`Filtres rapides`,addQuickFilter:`Ajouter un filtre rapide`,ufElements:`Éléments`,ufDropdown:`Liste déroulante`,ufTabs:`Onglets`,ufToggle:`Bascule`,ufAddField:`+ Ajouter un champ de filtre…`,ufNoFields:`Aucun champ disponible`,ufAddTab:`+ Ajouter un onglet`,ufTabLabel:`Étiquette`,ufShowAllRecords:`Afficher l'onglet "Tous les enregistrements"`,ufAllowAddTab:`Autoriser l'ajout d'onglets`,showRecordCount:`Afficher le nombre d'enregistrements`,allowPrinting:`Autoriser l'impression`,virtualScroll:`Défilement virtuel`,emptyStateTitle:`Titre de l'état vide`,emptyStateMessage:`Message de l'état vide`,emptyStateIcon:`Icône de l'état vide`,ariaLabel:`Étiquette ARIA`,ariaDescribedBy:`Décrit par ARIA`,ariaLive:`ARIA en direct`,accessibility:`Accessibilité`,viewTabs:`Onglets de vue`},localeSwitcher:{label:`Langue`},search:`Rechercher…`,nav:{pinItem:`Épingler {{name}}`,unpinItem:`Désépingler {{name}}`,dragToReorder:`Glisser pour réorganiser`,favorites:`Favoris`}},auth:{setPassword:{title:`Définir un mot de passe de secours`,description:`Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local afin de pouvoir toujours vous connecter directement à cet environnement si le SSO devenait indisponible.`,email:`E-mail`,newPassword:`Nouveau mot de passe`,confirmPassword:`Confirmer le mot de passe`,submit:`Définir le mot de passe`,submitting:`Enregistrement…`,success:`Mot de passe local défini`,failed:`Impossible de définir le mot de passe`,passwordsMismatch:`Les mots de passe ne correspondent pas`,noSession:`Votre session a expiré.`,backToSignIn:`Se reconnecter`},login:{signingIn:`Connexion en cours…`,ssoHandoff:`Continuer vers {{target}}`,devAdminHint:{title:`Instance de développement`,body:`Connectez-vous avec l'administrateur de développement prédéfini :`,dismiss:`Ignorer`},title:`Connectez-vous à votre compte`,description:`Entrez votre e-mail et votre mot de passe pour continuer`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Mot de passe`,passwordPlaceholder:`Entrez votre mot de passe`,forgotPasswordText:`Mot de passe oublié ?`,submitButton:`Se connecter`,submittingButton:`Connexion en cours…`,noAccountText:`Vous n'avez pas de compte ?`,signUpText:`S'inscrire`,errors:{oauthCallbackFailed:`L'authentification unique n'a pas pu aboutir — le lien de connexion a expiré ou a déjà été utilisé. Veuillez réessayer.`,invalidCredentials:`E-mail ou mot de passe invalide. Veuillez réessayer.`,emailNotVerified:`Veuillez vérifier votre adresse e-mail avant de vous connecter.`},emailOrPhoneLabel:`E-mail ou numéro de téléphone`,emailOrPhonePlaceholder:`name@example.com ou +1 555 000 0000`,phoneLabel:`Numéro de téléphone`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Code de vérification`,otpCodePlaceholder:`Code à 6 chiffres`,sendOtpButton:`Obtenir un code`,resendOtpCountdownText:`Renvoyer dans {seconds} s`,usePhoneOtpText:`Se connecter avec un code de vérification`,usePasswordSignInText:`Se connecter avec un mot de passe à la place`},register:{title:`Créer un compte`,description:`Entrez vos informations pour commencer`,nameLabel:`Nom`,namePlaceholder:`Jean Dupont`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Mot de passe`,passwordPlaceholder:`Créer un mot de passe (min. 8 caractères)`,confirmPasswordLabel:`Confirmer le mot de passe`,confirmPasswordPlaceholder:`Confirmez votre mot de passe`,passwordMismatchError:`Les mots de passe ne correspondent pas`,passwordTooShortError:`Le mot de passe doit contenir au moins 8 caractères`,submitButton:`Créer un compte`,submittingButton:`Création du compte…`,hasAccountText:`Vous avez déjà un compte ?`,signInText:`Se connecter`,errors:{userExists:`Un compte avec cet e-mail existe déjà. Essayez de vous connecter.`},verifyInbox:{title:`Vérifiez votre boîte de réception`,description:`Nous avons envoyé un lien de vérification à {{email}}. Cliquez sur le lien pour activer votre compte.`,resend:`Renvoyer l'e-mail de vérification`,resending:`Envoi…`,resent:`E-mail de vérification envoyé.`,backToSignIn:`Retour à la connexion`}},forgotPassword:{title:`Réinitialiser votre mot de passe`,description:`Entrez votre adresse e-mail et nous vous enverrons un lien pour réinitialiser votre mot de passe`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,submitButton:`Envoyer le lien de réinitialisation`,submittingButton:`Envoi en cours…`,successTitle:`Vérifiez vos e-mails`,successDescription:`Nous avons envoyé un lien de réinitialisation du mot de passe à {{email}}. Veuillez vérifier votre boîte de réception.`,backToSignInText:`Retour à la connexion`,rememberPasswordText:`Vous vous souvenez de votre mot de passe ?`,signInText:`Se connecter`,phoneLabel:`Numéro de téléphone`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Code de vérification`,otpCodePlaceholder:`Code à 6 chiffres`,sendOtpButton:`Obtenir un code`,resendOtpCountdownText:`Renvoyer dans {seconds} s`,newPasswordLabel:`Nouveau mot de passe`,newPasswordPlaceholder:`Entrez un nouveau mot de passe`,resetButton:`Réinitialiser le mot de passe`,usePhoneResetText:`Réinitialiser par code SMS`,useEmailResetText:`Réinitialiser par e-mail à la place`,phoneSuccessTitle:`Mot de passe réinitialisé`,phoneSuccessDescription:`Votre mot de passe a été réinitialisé. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.`},resetPassword:{title:`Définir un nouveau mot de passe`,description:`Choisissez un mot de passe que vous n'avez pas utilisé auparavant.`,newPassword:`Nouveau mot de passe`,confirmPassword:`Confirmer le mot de passe`,submit:`Mettre à jour le mot de passe`,submitting:`Mise à jour…`,success:`Mot de passe mis à jour`,failed:`Échec de la réinitialisation`,invalidToken:`Ce lien de réinitialisation est invalide ou a expiré.`,missingToken:`Le lien de réinitialisation est manquant ou a expiré`,passwordsMismatch:`Les mots de passe ne correspondent pas`,requestNewLink:`Demander un nouveau lien`},verifyEmail:{title:`Vérifier l'adresse e-mail`,description:`Nous avons envoyé un lien de vérification à votre adresse e-mail. Cliquez sur le lien pour vérifier votre compte.`,sentTo:`Envoyé à :`,verifyingTitle:`Vérification…`,verifyingDescription:`Nous vérifions votre e-mail. Veuillez patienter.`,successTitle:`E-mail vérifié`,successDescription:`Votre e-mail a été vérifié. Vous pouvez maintenant vous connecter.`,errorTitle:`Échec de la vérification`,errorDescription:`La vérification a échoué. Veuillez demander un nouveau lien.`,missingToken:`Il manque un token dans le lien de vérification.`,emailMissing:`Adresse e-mail manquante`,resendButton:`Renvoyer l'e-mail de vérification`,resending:`Envoi…`,resent:`E-mail envoyé ! Vérifiez votre boîte de réception`,resentSuccess:`E-mail de vérification envoyé !`,resentDescription:`Veuillez vérifier votre boîte de réception et cliquer sur le lien de vérification.`,resendFailed:`Impossible de renvoyer l'e-mail de vérification`,signInLink:`Aller à la connexion`,backToSignIn:`Retour à la connexion`,backToLogin:`Retour à la connexion`,checkSpam:`E-mail non reçu ? Vérifiez votre dossier spam ou contactez le support.`,or:`Ou`,resendUnavailable:`L'envoi d'e-mails n'est peut-être pas configuré pour cet environnement. Contactez le support si le problème persiste.`},setup:{welcomeTitle:`Bienvenue sur ObjectStack`,description:`Créez le premier compte propriétaire pour terminer la configuration.`,yourName:`Votre nom`,orgName:`Nom de l'organisation`,orgNamePlaceholder:`Entreprise Exemple SA`,emailLabel:`E-mail`,emailPlaceholder:`nom@exemple.fr`,passwordLabel:`Mot de passe`,passwordHint:`Au moins 8 caractères`,submit:`Créer le compte propriétaire`,submitting:`Configuration…`,failed:`Échec de la configuration`},device:{title:`Autoriser un nouvel appareil`,subtitle:`Approuvez cet appareil pour vous connecter en tant que {{email}}.`,userCodeLabel:`Code de l'appareil`,requesterLabel:`Demande de connexion de`,approveWarning:`N'approuvez que si vous venez de lancer cette connexion vous-même. Une fois approuvée, ce runtime pourra accéder aux packages privés de votre organisation.`,loggedInAs:`Connecté en tant que {{email}}`,approve:`Approuver l'appareil`,approving:`Approbation…`,approvedTitle:`Appareil autorisé`,approvedDescription:`Vous pouvez revenir à l'appareil — il devrait se connecter sous peu.`,approveSuccess:`Appareil autorisé`,approveSuccessDescription:`Vous pouvez fermer cette fenêtre.`,approveFailed:`Échec de l'approbation`,deny:`Refuser la demande`,denying:`Refus…`,deniedTitle:`Accès refusé`,deniedDescription:`L'accès ne sera pas accordé à l'appareil.`,denyFailed:`Impossible de refuser la demande`,invalidTitle:`Lien d'appareil invalide`,invalidDescription:`Aucun code d'appareil n'a été fourni dans l'URL.`,loading:`Chargement…`,cancel:`Annuler`,disabledTitle:`Autorisation d'appareil non activée`,disabledDescription:`L'autorisation d'appareil n'est pas activée sur ce déploiement, cet appareil ne peut donc pas être approuvé ici.`},shell:{tenantHostHint:`Vous vous connectez à cet espace de travail`},layout:{headline:`Créez des applications métier puissantes, plus vite.`,subhead:`La plateforme universelle pour la gestion des données, les workflows et l'analytique en entreprise.`},remediation:{signOut:`Se déconnecter à la place`,password:{title:`Votre mot de passe a expiré`,fallbackMessage:`Veuillez définir un nouveau mot de passe pour continuer.`,current:`Mot de passe actuel`,next:`Nouveau mot de passe`,confirm:`Confirmer le nouveau mot de passe`,submit:`Changer le mot de passe et continuer`,submitting:`Mise à jour…`,mismatch:`Les nouveaux mots de passe ne correspondent pas.`,failed:`Impossible de changer le mot de passe.`},mfa:{title:`Configurer l'authentification à deux facteurs`,fallbackMessage:`Votre organisation exige une application d'authentification pour continuer.`,confirmPassword:`Confirmez votre mot de passe`,continue:`Continuer`,preparing:`Préparation…`,enrollFailed:`Impossible de démarrer l'enrôlement.`,scanTitle:`Scannez avec votre application d'authentification`,scanBody:`Scannez ce QR code avec Google Authenticator, 1Password, Authy, etc., puis saisissez le code à 6 chiffres.`,backupTitle:`Enregistrez vos codes de secours`,backupBody:`Conservez-les en lieu sûr — chacun peut être utilisé une fois si vous perdez votre appareil.`,codeLabel:`Code à 6 chiffres`,verify:`Vérifier et continuer`,verifying:`Vérification…`,invalidCode:`Code invalide. Veuillez réessayer.`}}},oauth:{consent:{title:`{{appName}} souhaite accéder à votre compte`,request:`{{appName}} demande une autorisation{{suffix}}.`,unknownApp:`une application`,willAllow:`Cette application pourra :`,scope:{openid:`Confirmer votre identité`,profile:`Lire votre profil de base (nom, photo)`,email:`Lire votre adresse e-mail`,offlineAccess:`Rester connecté (renouveler l'accès)`},deny:`Refuser`,authorize:`Autoriser`,submitting:`Autorisation…`,granted:`Accès accordé`,denied:`Accès refusé`,noRedirect:`Le serveur n'a renvoyé aucune URL de redirection.`,failed:`Échec du consentement`,footer:`Vous pouvez révoquer cet accès à tout moment dans les paramètres de votre compte.`}},profile:{title:`Profil`,subtitle:`Gérez les paramètres de votre compte`,saving:`Enregistrement…`,avatar:{upload:`Téléverser`,replace:`Remplacer`,remove:`Supprimer`},info:{title:`Informations personnelles`,description:`Mettez à jour votre nom et consultez les détails de votre compte`,saved:`Profil mis à jour avec succès.`,name:`Nom`,email:`E-mail`,emailImmutable:`L'adresse e-mail ne peut pas être modifiée.`,role:`Rôle`,save:`Enregistrer les modifications`},password:{changeTitle:`Changer le mot de passe`,setTitle:`Définir un mot de passe local`,changeDescription:`Mettez à jour le mot de passe que vous utilisez pour vous connecter à cet environnement.`,setDescription:`Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local pour pouvoir également vous connecter avec votre e-mail et un mot de passe sur cet environnement.`,current:`Mot de passe actuel`,new:`Nouveau mot de passe`,password:`Mot de passe`,confirm:`Confirmer le mot de passe`,tooShort:`Le mot de passe doit contenir au moins 8 caractères`,mismatch:`Les mots de passe ne correspondent pas`,enterCurrent:`Saisissez votre mot de passe actuel`,changed:`Mot de passe modifié.`,localSet:`Mot de passe local défini. Vous pouvez désormais vous connecter avec votre e-mail et votre mot de passe sur cet environnement.`,changeAction:`Changer le mot de passe`,setAction:`Définir le mot de passe`}},errors:{networkError:`Erreur réseau. Veuillez vérifier votre connexion.`,serverError:`Erreur serveur. Veuillez réessayer plus tard.`,notFound:`Ressource introuvable.`,unauthorized:`Vous n'êtes pas autorisé à effectuer cette action.`,forbidden:`Accès refusé.`,timeout:`Délai d'attente dépassé. Veuillez réessayer.`,unknown:`Une erreur inattendue s'est produite.`},workspace:{label:`Espaces de travail`,default:`Mon espace de travail`,switch:`Changer d'espace de travail`,create:`Créer un espace de travail`,createTitle:`Créer un espace de travail`,createDescription:`Un espace de travail est un lieu partagé pour la collaboration de votre équipe.`,createButton:`Créer un espace de travail`,nameLabel:`Nom de l'espace de travail`,namePlaceholder:`p.ex., Acme Inc`,slugLabel:`Slug URL`,slugHint:`Utilisé dans les URL. Uniquement lettres minuscules, chiffres et tirets.`,invite:`Inviter un membre`,members:`Membres`,settings:`Paramètres de l'espace de travail`,multiOrgDisabled:`La création de nouvelles organisations est désactivée sur cette instance.`,createFailed:`Échec de la création de l'espace de travail`},help:{onThisPage:`Sur cette page`,keyboardShortcuts:`Raccourcis clavier`,appDocs:`Documentation de cette app`,allDocs:`Toute la documentation`,onlineDocs:`Documentation en ligne`},sidebar:{packageManagement:`Gestion des packages`,searchNavigation:`Rechercher dans la navigation…`,settings:`Paramètres`,help:`Aide`,helpTooltip:`Aide et documentation`,activityFeed:`Flux d'activité`,notifications:`Notifications`,approvals:`Approbations`,inbox:`Boîte de réception`,inboxAriaLabel:`Ouvrir la boîte de réception`,area:`Zone`,scope:`Périmètre`,recent:`Récent`,favorites:`Favoris`,starred:`Étoilés`,removeFromFavorites:`Retirer {{name}} des favoris`},topbar:{openAssistant:`Ouvrir l'assistant {{name}}`,offline:`Hors ligne`,usersOnline:`Utilisateurs actuellement en ligne`,switchView:`Changer de vue`,switchObject:`Changer d'objet`,connection:{connected:`Connecté`,connecting:`Connexion…`,reconnecting:`Reconnexion…`,disconnected:`Déconnecté`,error:`Erreur de connexion`},stage:{preview:`Aperçu`,beta:`Bêta`,tooltip:`Cette plateforme est en avant-première — les fonctionnalités peuvent changer.`},aiAssistant:`Assistant IA`,designInStudio:`Concevoir dans Studio`},home:{build:{title:`Créer une application`,subtitle:`Partir de zéro — concevez les objets, formulaires, automatisations et interfaces.`},template:{title:`Partir d'un modèle`,subtitle:`Installez une application modèle depuis la place de marché et personnalisez-la.`},welcomeAdminDescription:`Décrivez votre activité en une phrase — l'IA génère les objets, les écrans, les API et les outils d'agent. Ou configurez tout vous-même depuis le menu de gauche.`,welcomeAdminDescriptionNoBuild:`Configurez votre première application depuis le menu Administration à gauche. Une fois les données en place, l'assistant IA pourra vous aider à les explorer.`,welcomeAdminDescriptionNoAi:`Configurez votre première application depuis le menu Administration à gauche.`,noAppsTitle:`Aucune application pour l'instant`,noAppsDescription:`Votre espace de travail est en cours de configuration — les applications partagées par votre administrateur apparaîtront ici.`,buildWithAI:`Créer avec l'IA`,askAI:`Demander à l'IA`,recoveryReminder:{message:`Définissez un mot de passe de secours afin de pouvoir vous connecter même si l'authentification unique est indisponible.`,cta:`Définir le mot de passe`,dismiss:`Ignorer`},pendingDrafts:{message:`Vous avez {{count}} modification(s) non publiée(s) — publiez-les pour les activer.`,cta:`Publier`,publishing:`Publication…`,published:`Publié ! Vos modifications sont actives.`,publishFailed:`Échec de la publication`,nothing:`Rien à publier.`,probeWarn:`Publié, mais la vérification a détecté des problèmes.`,seedWarn:`Publié, mais certaines données d'exemple n'ont pas pu être chargées.`,publishedVerified:`Publié et vérifié — {{count}} ligne(s) d'exemple active(s).`,capabilityWarn:`Contrôle de conception : {{count}} référence(s) de capacité ne mènent à rien.`},title:`Accueil`,subtitle:`Tableau de bord de votre espace de travail`,nav:`Accueil`,allApps:`Toutes les applications`,yourApps:`Vos applications`,showMoreApps:`Plus`,showLess:`Afficher moins`,continueEmpty:`Les éléments que vous ouvrez apparaîtront ici.`,actionCenter:{title:`Nécessite votre attention`,empty:`Vous êtes à jour`},loading:`Chargement de l'espace de travail…`,recent:`Récent`,starred:`Favoris`,welcome:`Bienvenue dans ObjectUI`,welcomeDescription:`Commencez par créer votre première application ou configurer les paramètres système.`,createFirstApp:`Créez votre première app`,systemSettings:`Paramètres système`,browseMarketplace:`Parcourir la marketplace d'apps`,quickActions:{title:`Actions rapides`,createApp:`Créer une app`,createAppDesc:`Commencez avec une nouvelle application`,manageObjects:`Gérer les objets`,manageObjectsDesc:`Configurer les modèles de données`,systemSettings:`Paramètres système`,systemSettingsDesc:`Configurez votre espace de travail`},appCard:{noDescription:`Aucune description`,default:`Par défaut`},greetingMorning:`Bonjour`,greetingAfternoon:`Bon après-midi`,greetingEvening:`Bonsoir`,greetingNight:`Travail de nuit`,heroTagline:`Reprenez là où vous vous êtes arrêté ou découvrez quelque chose de nouveau.`,open:`Ouvrir`,stats:{apps:`Applications`,starred:`Étoilés`,recent:`Récents`},recentApps:{title:`Récemment ouverts`,itemType:{object:`Objet`,dashboard:`Tableau de bord`,page:`Page`,record:`Enregistrement`}},starredApps:{title:`Étoilés`},gettingStarted:{title:`Personnaliser l'accueil`,description:`Marquez une application en favori pour l'épingler ici et y accéder en un clic. Tout ce que vous ouvrez apparaîtra automatiquement sous "Récemment ouverts".`,cta:`Parcourir toutes les applications`}},layout:{systemNav:{systemSettings:`Paramètres système`,applications:`Applications`,appMarketplace:`Place de marché d'applications`,objectManager:`Gestionnaire d'objets`,users:`Utilisateurs`,organizations:`Organisations`,roles:`Rôles`,configuration:`Configuration`,createApp:`Créer une application`,administration:`Administration`,datasources:`Sources de données`,documentation:`Documentation`},appSwitcher:{switchApplication:`Changer d'application`,appsAvailable:`{{count}} applications disponibles`,editNavigation:`Modifier la navigation`,home:`Accueil`,addApp:`Ajouter une application`,editApp:`Modifier l'application`,manageAllApps:`Gérer toutes les applications`,systemConsole:`Console système`,noAppsConfigured:`Aucune application configurée`},activityFeed:{title:`Activité récente`,filter:`Filtrer`,empty:`Aucune activité récente`,ariaLabel:`Fil d'activité`,typeCreate:`Créer`,typeUpdate:`Mettre à jour`,typeDelete:`Supprimer`,typeComment:`Commentaire`,relativeJustNow:`à l'instant`,relativeSecondsAgo:`il y a {{count}}s`,relativeMinutesAgo:`il y a {{count}}m`,relativeHoursAgo:`il y a {{count}}h`,relativeDaysAgo:`il y a {{count}}j`,viewAll:`Voir toute l'activité`},metadata:{label:`Métadonnées`,toggleTitle:`Basculer l'inspecteur de métadonnées`,panelTitle:`Inspecteur de métadonnées`,jsonBadge:`JSON`,copyJson:`Copier JSON`}},search:{title:`Rechercher`,back:`Retour`,placeholder:`Rechercher des objets, tableaux de bord, pages, rapports…`,inputAriaLabel:`Rechercher des objets, tableaux de bord, pages, rapports`,resultsCount:`{{count}} résultat pour "{{query}}"`,resultsCountPlural:`{{count}} résultats pour "{{query}}"`,itemsAvailable:`{{count}} éléments disponibles`,noResults:`Aucun résultat trouvé`,noResultsHint:`Essayez d'ajuster vos termes de recherche`,typeObjects:`Objets`,typeDashboards:`Tableaux de bord`,typePages:`Pages`,typeReports:`Rapports`,badgeObject:`Objet`,badgeDashboard:`Tableau de bord`,badgePage:`Page`,badgeReport:`Rapport`},empty:{objectNotFound:`Objet introuvable`,objectNotFoundDescription:`La définition de l'objet "{{name}}" est manquante. Vérifiez votre configuration ou revenez en arrière.`,interfacePageSourceMissing:`Cette page d'interface référence "{{name}}", qui n'est pas disponible.`,pageNotFound:`Page introuvable`,pageNotFoundDescription:`La page "{{name}}" est introuvable. Elle a peut-être été supprimée ou renommée.`,dashboardNotFound:`Tableau de bord introuvable`,dashboardNotFoundDescription:`Le tableau de bord "{{name}}" est introuvable. Il a peut-être été supprimé ou renommé.`,reportNotFound:`Rapport introuvable`,reportNotFoundDescription:`Le rapport "{{name}}" est introuvable. Il a peut-être été supprimé ou renommé.`,noAppsConfigured:`Aucune application configurée`,noAppsConfiguredDescription:`Aucune application n'est enregistrée. Créez votre première application ou visitez les paramètres système.`,appNotAvailable:`Application non disponible`,appNotAvailableDescription:`Cette application n'est pas encore disponible — sa publication est peut-être en cours. Réessayez dans un instant.`,appAccessDenied:`Vous n'avez pas accès à cette application`,appAccessDeniedDescription:`Cette application existe, mais votre compte n'est pas autorisé à l'ouvrir. Demandez l'accès à un administrateur.`,appAccessDeniedHome:`Retour à l'accueil`,createFirstApp:`Créer la première application`,systemSettings:`Paramètres système`,back:`Retour`,recordNotFound:`Enregistrement introuvable`,recordNotFoundDescription:`L'enregistrement que vous recherchez n'existe pas ou a peut-être été supprimé.`},renderer:{noPageSchema:`Aucun schéma de page fourni`,noFormSchema:`Aucun schéma de formulaire fourni`,noDashboardSchema:`Aucun schéma de tableau de bord fourni`,pageRendering:`Rendu de la page : {{name}}`,dashboardRendering:`Rendu du tableau de bord : {{name}}`,formRenderingMode:`Formulaire rendu en mode {{mode}}`,formRenderingFor:`pour l'enregistrement {{id}}`,createRecord:`Créer un enregistrement`,editRecord:`Modifier l'enregistrement`,page:`Page`,dashboard:`Tableau de bord`,save:`Enregistrer`,cancel:`Annuler`},actionDialog:{title:`Paramètres d'action`,description:`Veuillez saisir les informations requises pour continuer.`,selectPlaceholder:`Sélectionner {{label}}`,requiredError:`{{label}} est obligatoire`,cancel:`Annuler`,confirm:`Confirmer`,uploading:`Téléversement…`,defaultActionTitle:`Action`,ok:`OK`,lookupPlaceholder:`ID d'enregistrement pour {{label}}`,lookupHelpText:`Aucun objet de référence n'est configuré pour ce paramètre, le sélecteur d'enregistrement est donc indisponible. Saisissez un ID d'enregistrement ou demandez à un administrateur de corriger le paramètre d'action.`},actionConfirm:{title:`Confirmer l’action`,confirm:`Continuer`,cancel:`Annuler`},rowAction:{openMenu:`Ouvrir le menu`,edit:`Modifier`,delete:`Supprimer`},navigationSync:{addedPage:`Navigation mise à jour : page "{{name}}" ajoutée`,addedDashboard:`Navigation mise à jour : tableau de bord "{{name}}" ajouté`,removedPage:`Navigation mise à jour : page "{{name}}" supprimée`,removedDashboard:`Navigation mise à jour : tableau de bord "{{name}}" supprimé`,renamedPage:`Navigation mise à jour : page "{{oldName}}" renommée en "{{newName}}"`,renamedDashboard:`Navigation mise à jour : tableau de bord "{{oldName}}" renommé en "{{newName}}"`,undoLabel:`Annuler`,undone:`Modification de navigation annulée`,undoFailed:`Impossible d'annuler la modification de navigation`,updateFailed:`Impossible de mettre à jour la navigation`},objectActions:{resetPackageSetConfirm:`Ce jeu d'autorisations est fourni avec un package installé et ne peut pas être supprimé. La suppression le réinitialise à la version livrée et abandonne vos personnalisations dans cet environnement. Continuer ?`,resetPackageSetSuccess:`Jeu d'autorisations réinitialisé à la version livrée`,deleteSuccess:`{{label}} supprimé avec succès`,deleteFailed:`Impossible de supprimer {{label}}`,noRecordId:`Aucun ID d'enregistrement fourni`,deleteConfirm:`Supprimer cet enregistrement ?`,bulkDeleteSuccess:`{{count}} enregistrement(s) {{label}} supprimé(s)`,bulkDeletePartial:`{{succeeded}} supprimé(s), {{failed}} échoué(s)`},objectViewActions:{renameFailed:`Impossible de renommer la vue`,deleteFailed:`Impossible de supprimer la vue`},dashboardActions:{printDialogOpening:`Ouverture de la boîte de dialogue d'impression de votre navigateur (ce n'est pas un export PDF)`,exportFailed:`Échec de l'export : {{message}}`,forecastSoon:`La vue de prévision arrive bientôt`},recordDetail:{viewersTooltip:`Utilisateurs consultant cet enregistrement en ce moment`},cellRender:{empty:`Vide`,yes:`Oui`,no:`Non`,systemFields:`Système`},user:{profile:`Profil`,settings:`Paramètres`,logout:`Se déconnecter`,preferences:`Préférences`,theme:`Thème`,language:`Langue`},report:{total:`Total`,rowTotal:`Total ligne`,columnTotal:`Total colonne`,grandTotal:`Total général`,totals:`Totaux`,rowsLabel:`Ligne`,columnsLabel:`Colonne`,allLabel:`(Tout)`,emptyLabel:`(Vide)`,loading:`Chargement…`,failedToLoad:`Échec du chargement de la matrice : {{message}}`,needsAcross:"Le rapport matriciel nécessite au moins un champ `groupingsAcross`.",aggregate:{count:`Compter`,countDistinct:`Compter distincts`,sum:`Somme`,avg:`Moyenne`,min:`Minimum`,max:`Maximum`,first:`Premier`},editor:{panelTitle:`Modifier le rapport`}},organizations:{create:`Créer un espace de travail`,mine:`Mes organisations`,title:`Organisations`,heading:`Vos organisations`,subtitle:`Sélectionnez une organisation pour continuer ou créez-en une nouvelle.`,searchPlaceholder:`Rechercher une organisation`,new:`Nouvelle organisation`,current:`Organisation actuelle`,manage:`Gérer`,emptyTitle:`Aucune organisation pour le moment`,emptyDescription:`Créez votre première organisation pour commencer.`,noMatches:`Aucune organisation ne correspond à votre recherche.`},organization:{roles:{owner:`Propriétaire`,admin:`Administrateur`,delegatedAdmin:`Administrateur délégué`,member:`Membre`},errors:{notAllowedToInvite:`Vous n'êtes pas autorisé à inviter des utilisateurs dans cette organisation.`,notAllowedToInviteWithRole:`Vous n'êtes pas autorisé à inviter un utilisateur avec ce rôle.`,alreadyInvited:`Cet utilisateur a déjà été invité dans cette organisation.`,organizationExists:`Cette organisation existe déjà.`,slugTaken:`Ce slug est déjà utilisé.`,notAllowedToCreate:`Vous n'êtes pas autorisé à créer une nouvelle organisation.`,notTheRecipient:`Vous n'êtes pas le destinataire de cette invitation.`,invitationNotFound:`Cette invitation n'existe plus ou a expiré.`,unknown:`Une erreur est survenue. Veuillez réessayer.`},backToList:`Retour aux organisations`,notFound:`Organisation introuvable`,notFoundDescription:`Cette organisation n'existe pas ou vous n'y avez pas accès.`,tabs:{members:`Membres`,invitations:`Invitations`,settings:`Paramètres`},members:{title:`Membres`,inviteMember:`Inviter un membre`,inviteRestrictedNote:`Seuls les administrateurs de l'organisation peuvent inviter des membres.`,removeMember:`Retirer le membre`,removeConfirmTitle:`Retirer ce membre ?`,removeConfirmDescription:`{{name}} sera retiré de l'organisation et perdra immédiatement son accès.`,removeConfirmAction:`Retirer`,memberRemoved:`Membre retiré`,removeFailed:`Impossible de retirer le membre`,roleUpdated:`Rôle mis à jour`,roleUpdateFailed:`Impossible de mettre à jour le rôle`,memberActions:`Actions du membre`,loadFailed:`Échec du chargement des membres`},invitations:{title:`Invitations`,empty:`Aucune invitation.`,expiresAt:`Expire le`,linkCopied:`Lien d'invitation copié`,copyFailed:`Impossible de copier le lien`,canceled:`Invitation annulée`,cancelFailed:`Impossible d'annuler l'invitation`,cancelTitle:`Annuler l'invitation ?`,cancelDescription:`L'invitation de {{email}} sera révoquée.`,cancelAction:`Annuler l'invitation`,inviteTitle:`Inviter un membre`,inviteDescription:`La personne recevra une invitation à rejoindre cette organisation.`,emailLabel:`E-mail`,roleLabel:`Rôle`,placementLabel:`Affectation (facultatif)`,placementDescription:`Appliquée lorsque l'invitation est acceptée. Seuls les unités et les postes que vous pouvez déléguer sont listés.`,businessUnitLabel:`Unité opérationnelle`,businessUnitPlaceholder:`Aucune affectation`,positionsLabel:`Postes`,sendInvite:`Envoyer l'invitation`,sentTitle:`Invitation créée`,sentDescription:`Partagez le lien ci-dessous avec la personne invitée. Elle devra se connecter pour accepter.`,linkLabel:`Lien d'acceptation`,invitedAs:`{{email}} invité en tant que {{role}}`,copyLinkLabel:`Copier le lien d'invitation`,loadFailed:`Échec du chargement des invitations`,inviteFailed:`Échec de l'invitation du membre`,status:{all:`Toutes`,pending:`En attente`,accepted:`Acceptée`,rejected:`Refusée`,canceled:`Annulée`}},settings:{generalTitle:`Général`,generalDescription:`Mettez à jour les informations de votre organisation.`,readOnlyNote:`Seuls les propriétaires peuvent modifier les paramètres.`,nameLabel:`Nom de l'organisation`,slugLabel:`Slug`,logoLabel:`Logo`,logoUpload:`Téléverser`,logoReplace:`Remplacer`,logoClear:`Retirer`,logoUploaded:`Logo téléversé — enregistrez pour appliquer`,logoUploadFailed:`Impossible de téléverser le logo`,save:`Enregistrer les modifications`,saved:`Paramètres enregistrés`,saveFailed:`Impossible d'enregistrer les paramètres`,leaveTitle:`Quitter l'organisation`,leaveDescription:`Vous perdrez l'accès à cette organisation.`,leaveAction:`Quitter`,leaveConfirmTitle:`Quitter l'organisation ?`,leaveConfirmDescription:`Voulez-vous vraiment quitter {{name}} ? Vous perdrez immédiatement votre accès.`,leaveConfirmAction:`Quitter`,leftOrg:`Vous avez quitté l'organisation`,leaveFailed:`Impossible de quitter l'organisation`,dangerZone:`Zone de danger`,deleteTitle:`Supprimer l'organisation`,deleteDescription:`Supprimez définitivement cette organisation et toutes ses données.`,deleteAction:`Supprimer`,deleteConfirmTitle:`Supprimer l'organisation ?`,deleteConfirmDescription:`Cette action est irréversible. Toutes les données seront définitivement supprimées. Saisissez le slug de l'organisation pour confirmer.`,deleteConfirmSlugLabel:`Saisissez « {{slug}} » pour confirmer`,deleteConfirmAction:`Supprimer l'organisation`,deleted:`Organisation supprimée`,deleteFailed:`Impossible de supprimer l'organisation`},accept:{title:`Vous avez été invité`,description:`Vous avez été invité à rejoindre {{orgName}} en tant que {{role}}.`,errorTitle:`Invitation indisponible`,goToOrgs:`Aller aux organisations`,loading:`Chargement de l'invitation…`,organization:`Organisation`,role:`Rôle`,expiresAt:`Expire le`,accept:`Accepter l'invitation`,accepted:`Invitation acceptée`,acceptFailed:`Impossible d'accepter l'invitation`,decline:`Refuser`,declined:`Invitation refusée`,declineFailed:`Impossible de refuser l'invitation`},switcher:{label:`Changer d'organisation`,groupLabel:`Organisation de travail`,groupHint:`Les nouveaux enregistrements sont créés ici. Les vues affichent les données de toutes vos organisations.`,manageMembers:`Gérer les membres`}},notifications:{regionLabel:`Notifications`,groupCount:`{{count}} notifications`,groupUnread:`{{count}} non lues`,groupMarkRead:`Marquer comme lu`,groupMarkReadTitle:`Tout marquer comme lu pour ce type`,empty:`Aucune notification`,markAllRead:`Tout marquer comme lu`,viewAll:`Voir toutes les notifications`,approvalsPending:`{{count}} approbations en attente`,viewApprovals:`Voir les approbations`,noPendingApprovals:`Aucune approbation en attente`,openApprovalsInbox:`Ouvrir la boîte d'approbations`,badgeTotal:`{{total}} au total`,badgeNotifications:`{{unread}} notifications`,badgeApprovals:`{{approvals}} approbations en attente`,emptyUnread:`Tout est lu`,filterUnread:`Non lus`,filterAll:`Tous`},publicForm:{submit:`Envoyer`,submitting:`Envoi…`,submitAnother:`Envoyer une autre réponse`,poweredBy:`Propulsé par ObjectStack`,secureNotice:`Vos informations sont transmises en toute sécurité et utilisées uniquement pour traiter votre demande.`,thankYouTitle:`Merci !`,thankYouMessage:`Votre soumission a été reçue avec succès.`,redirecting:`Redirection dans {{seconds}} seconde(s)…`,unavailableTitle:`Formulaire non disponible`,unavailableDescription:`Aucun formulaire public n'est disponible à cette URL. Assurez-vous que la vue sous-jacente a le partage anonyme activé.`,tryDemo:`Essayer la démo`,retry:`Réessayer`,loading:`Chargement du formulaire…`,requiredHint:`* Champ obligatoire`,consentLabelDefault:`J'accepte la politique de confidentialité et consens au traitement de mes données pour cette demande.`,consentLink:`Politique de confidentialité`,consentRequired:`Veuillez accepter la politique de confidentialité pour continuer.`,rateLimited:`Prenez un moment pour vérifier vos réponses avant d'envoyer.`,redirectBlocked:`Soumission acceptée, mais l'URL de redirection a été bloquée pour des raisons de sécurité.`,demo:{contactTitle:`Nous contacter`,contactDescription:`Parlez-nous de votre projet et un représentant commercial vous contactera dans un jour ouvrable.`,supportTitle:`Soumettre une demande d'assistance`,supportDescription:`Décrivez-nous le problème — notre équipe répondra dans un jour ouvrable.`,thankYouSalesTitle:`Merci — nous avons reçu votre message !`,thankYouSalesMessage:`Un représentant commercial vous contactera dans un jour ouvrable.`,thankYouSupportTitle:`C'est bon — votre demande est en file d'attente.`,thankYouSupportMessage:`Un ingénieur d'assistance vous fera un suivi bientôt. Sauvegardez cette page si vous avez des captures d'écran supplémentaires.`,field:{firstName:`Prénom`,lastName:`Nom`,email:`E-mail professionnel`,phone:`Téléphone`,jobTitle:`Titre du poste`,company:`Entreprise`,website:`Site web`,industry:`Secteur`,companySize:`Taille de l'entreprise`,howCanWeHelp:`Comment pouvons-nous vous aider ?`,subject:`Sujet`,description:`Description`,issueType:`Type de problème`,priority:`Priorité`},industry:{technology:`Technologie`,software:`Logiciel / SaaS`,finance:`Finance`,healthcare:`Santé`,retail:`Commerce de détail`,other:`Autre`},issueType:{question:`Question`,problem:`Problème`,bug:`Bug`,feature_request:`Demande de fonctionnalité`},priority:{low:`Faible`,medium:`Moyen`,high:`Élevé`,critical:`Critique`}}},connectAgent:{disabled:{title:`MCP est désactivé sur ce déploiement`,body:`La surface MCP est désactivée (OS_MCP_SERVER_ENABLED=false). Demandez à votre opérateur de la réactiver.`},url:{title:`Endpoint MCP de cet environnement`,body:`Tout client IA compatible MCP se connecte avec cette URL. L’identité est en libre-service : le déploiement est son propre serveur d’autorisation OAuth 2.1 — vous vous connectez en votre nom, et chaque appel s’exécute sous vos permissions et la sécurité au niveau des lignes.`,downloadSkill:`Télécharger SKILL.md`,skillHint:`La skill d’agent portable : apprend à tout agent compatible à travailler avec cet environnement.`},claude:{body:`Paramètres → Connecteurs → Ajouter un connecteur personnalisé, collez cette URL puis connectez-vous dans le navigateur.`,reachability:`claude.ai (web) se connecte depuis les serveurs d’Anthropic — le déploiement doit être accessible en HTTPS public. Claude Desktop et les clients locaux atteignent aussi les déploiements intranet.`},claudeCode:{body:`Une seule commande — la connexion OAuth s’ouvre automatiquement à la première utilisation :`,plugin:`Ou installez le plugin officiel (ajoute la skill ObjectStack et la commande guidée /objectstack:connect) :`},cursor:{addButton:`Ajouter à Cursor`,body:`Utilisez le bouton en un clic, ou ajoutez ceci à .cursor/mcp.json :`},vscode:{body:`À ajouter dans .vscode/mcp.json (ou via la commande MCP: Add Server) :`},codex:{body:`À ajouter dans ~/.codex/config.toml. Si votre version de Codex ne gère pas le flux OAuth, utilisez un en-tête de clé API (voir ci-dessous) :`},apiKey:{title:`Clés API`,badge:`headless`,body:`Pour la CI, les scripts et les agents sans navigateur. La clé agit en votre nom — traitez-la comme un mot de passe. Elle n’est affichée qu’UNE fois.`,namePlaceholder:`Nom de la clé (ex. ci-agent)`,mint:`Créer la clé`,minting:`Création…`,showOnce:`Clé « {{name}} » créée — copiez-la maintenant, elle ne sera plus affichée :`,done:`Terminé — masquer`}},excelImport:{noImportableFields:`Cet objet n'a aucun champ importable.`,schemaReadFailed:`Impossible de lire le schéma de l'objet.`,imported:`{{count}} ligne(s) importée(s) dans {{object}}.`,importFrom:`Importer les lignes réelles depuis`,into:`vers`,opening:`Ouverture…`,importAction:`Importer`,dismiss:`Ignorer`},cloudOnboarding:{hintCreate:`Créez votre premier environnement — un espace de travail privé avec sa propre URL, sa base de données et son offre. C'est là que se fait la création.`,hintReady:`Votre environnement de production est prêt. Ouvrez-le pour créer et exécuter vos applications — tout se passe à l'intérieur.`,createEnvironment:`Créer votre environnement`,openProduction:`Ouvrir la production`,manageEnvironments:`Gérer les environnements`},aiModelStatus:{summary:`Créer / Demander utilise {{conversational}} ({{conversationalSource}}) ; structuré utilise {{structured}} ({{structuredSource}}).`,summaryRouting:`Politique de routage : offres gratuites → {{free}}, offres payantes → {{paid}}.`,modelUnknown:`inconnu`,sourceUnknown:`non communiqué par l'adaptateur`,rowConversational:`Modèle Build / Ask`,rowStructured:`Structuré (blueprint / seed)`,rowReasoning:`Effort de raisonnement`,readFailed:`Impossible de lire le modèle d'IA effectif. Cet environnement n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read.`,readFailedWithStatus:`Impossible de lire le modèle d'IA effectif (HTTP {{status}}). Cet environnement n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read.`,overridesInEffect:`Surcharges actives : `,noOverrides:`aucune — les valeurs par défaut du code déployé s'appliquent.`,adapter:`Adaptateur : `,sourceCodeDefault:`valeur par défaut du code (aucune surcharge env)`,sourceInherits:`identique à build/ask`,sourcePinned:`figé par {{source}}`},chatbotError:{title:`Échec de la réponse`,fallbackDetail:`Une erreur s'est produite. Veuillez réessayer.`,details:`Détails`,hide:`Masquer`,retry:`Réessayer`},chatbotQuota:{title:`Mise à niveau requise`,fallbackMessage:`Vous avez atteint votre quota d'IA.`,buyCredits:`Acheter un pack de crédits`,upgradePlan:`Changer d'offre`},environment:{addEnvironment:`Ajouter un environnement`,setUpProduction:`Configurer votre environnement de production`,addDevelopment:`Ajouter un environnement de développement`,entitlement:{productionLimitTitle:`Vous avez déjà votre environnement de production`,productionLimitBody:`Chaque organisation comprend exactement un environnement de production. Créez une organisation distincte pour en avoir un autre, ou contactez-nous au sujet d'une offre Enterprise.`,planLockedTitle:`Les environnements de développement sont une fonctionnalité payante`,planLockedBody:`Votre {{plan}} comprend un environnement de production. Passez à une offre supérieure pour ajouter des environnements de développement — développez en dev, puis publiez en production.`,limitTitle:`Limite d'environnements de développement atteinte`,limitBody:`La capacité évolue avec les sièges IA. Ajoutez un siège IA, ou archivez un environnement de développement inutilisé pour libérer une place.`,limitBodyWithCount:`Vous utilisez {{used}} environnements de développement sur {{limit}}. La capacité évolue avec les sièges IA — ajoutez un siège IA, ou archivez un environnement de développement inutilisé.`,freePlan:`offre gratuite`,namedPlan:`offre {{plan}}`,upgradeCta:`Changer d'offre`,contactSalesCta:`Contacter le service commercial`}},cloudConnection:{checking:`Vérification de la connexion…`,retry:`Réessayer`,errors:{expired:`La demande a expiré avant d'être approuvée. Recommencez.`,bindFailed:`Échec de la liaison.`,deviceCodeFailed:`Échec de la demande de code d'appareil.`},waiting:{popupOpened:`Approuvez la connexion dans la fenêtre qui vient de s'ouvrir — cette page se met à jour toute seule.`,polling:`En attente d'approbation dans la console cloud…`,openApproval:`Ouvrir la page d'approbation`,copy:`Copier`,copied:`Copié`,codePrefilled:`Le code est pré-rempli sur la page d'approbation.`,openItHere:`La fenêtre ne s'est pas affichée ? Ouvrez-la ici`,cancel:`Annuler`},bound:{title:`Connecté à ObjectStack Cloud`,runtime:`Runtime`,organization:`Organisation`,approvedBy:`Approuvé par`,runtimeId:`ID du runtime`,environment:`Environnement`,since:`Depuis`,privatePackages:`Les paquets privés de votre organisation apparaissent désormais dans la Marketplace sous « Votre organisation ».`,disconnect:`Déconnecter`},unbound:{title:`Non connecté`,body:`Connectez ce runtime à un plan de contrôle ObjectStack pour parcourir les paquets privés de votre organisation et les installer ici. L'approbation se fait en un seul clic dans votre compte cloud — aucun identifiant ni justificatif n'est saisi sur cette page.`,connect:`Connecter`}},marketplace:{suggestedBindings:{promptEveryone:`Cette application suggère d'accorder « {{set}} » à tous les utilisateurs connectés (position Everyone).`,promptGuest:`Cette application suggère d'accorder « {{set}} » aux visiteurs non authentifiés (position Guest).`,confirm:`Accorder`,confirming:`Attribution…`,dismiss:`Ignorer`,confirmedToast:`« {{set}} » est désormais accordé à {{anchor}}.`,dismissedToast:`Suggestion pour « {{set}} » ignorée.`},title:`Marketplace d'applications`,subtitle:`Parcourez les applications approuvées publiées dans le catalogue ObjectStack. Cliquez sur une application pour voir les détails et l'installer dans l'un de vos environnements.`,searchPlaceholder:`Rechercher des applications par nom ou ID de manifeste…`,searchAria:`Rechercher des applications du marketplace`,installed:`Installé`,installedCount:`Installées ({{count}})`,refresh:`Actualiser`,all:`Toutes`,noApprovedYet:`Aucune application approuvée pour le marketplace pour l'instant.`,noMatchFilters:`Aucune application ne correspond à vos filtres.`,noDescription:`Aucune description disponible.`,back:`Retour au marketplace`,installedTitle:`Applications installées`,installedSubtitle:`Paquets du marketplace actuellement installés dans le noyau de ce runtime.`,installedEmpty:`Aucune application du marketplace installée dans ce runtime pour l'instant.`,browseLink:`Parcourir le marketplace →`,installedAdditiveNote:`<strong>Remarque :</strong> L'API du noyau est uniquement additive — la désinstallation supprime le manifeste du disque pour que le paquet ne se charge pas au prochain démarrage, mais le noyau en cours d'exécution maintient l'application enregistrée jusqu'au redémarrage.`,installedAt:`Installé {{when}}`,installedBy:`par {{user}}`,installedPackageId:`Paquet`,cachedAs:`Mis en cache sous <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Installé v{{version}}`,load:{failed:`Impossible de charger le marketplace`,failedHint:`Par défaut, ce runtime pointe vers le cloud public ObjectStack. Assurez-vous que le runtime est en ligne.`,packageFailed:`Impossible de charger le paquet`,notFound:`Introuvable.`},detail:{homepage:`Page d'accueil`,installedV:`Installé · v{{version}}`,about:`À propos`,noReadme:`Aucun readme disponible.`,versions:`Versions`,noApprovedVersions:`Aucune version approuvée.`,prerelease:`Prélancement`,moreOptions:`Plus d'options d'installation`,uninstallFromRuntime:`Désinstaller de ce runtime`,addSampleData:`Ajouter des données d'exemple`,reseedAgain:`Recharger les données d'exemple`,purgeSampleData:`Supprimer les données d'exemple`,purgeConfirm:`Supprimer tous les enregistrements d'exemple créés par ce paquet ? Les enregistrements ajoutés par l'utilisateur ne seront PAS touchés.`,purgeSuccess:`{{count}} enregistrement(s) d'exemple supprimé(s).`,purgeNoData:`Aucun enregistrement d'exemple à supprimer.`,reseedQueued:`Les données d'exemple seront rechargées au prochain accès à l'environnement.`,reseedLocalSuccess:`Données d'exemple rechargées : {{inserted}} ajoutés, {{updated}} mis à jour.`,reseedPartialErrors:`({{count}} enregistrement(s) n'ont pas pu être écrits)`,updateAvailable:`Mise à jour disponible`},action:{installed:`Installé`,install:`Installer`,reinstall:`Réinstaller`,working:`Traitement…`,installToCloud:`Installer dans le cloud…`,installing:`Installation…`,uninstall:`Désinstaller`,uninstalling:`Désinstallation…`,details:`Détails`,close:`Fermer`,dismiss:`Fermer`,openOnCloud:`Ouvrir dans le cloud`,backHome:`Retour à l'accueil`,updateTo:`Mettre à jour`},install:{dialogTitle:`Installer {{name}}`,dialogDescCurrent:`Installer dans cet environnement ({{host}}).`,dialogDescPicker:`Choisissez un environnement où installer cette application. Vous devez être connecté à ObjectStack Cloud.`,environment:`Environnement`,environmentPlaceholder:`Sélectionner un environnement`,includeSampleData:`Inclure des données d'exemple`,noEnvs:`Aucun environnement trouvé dans votre organisation active.`,noPermission:`Vous n'avez pas la permission d'installer des applications dans un environnement. Seuls les propriétaires et administrateurs de l'organisation peuvent installer.`,signInFirst:`Vous devez d'abord vous connecter à ObjectStack Cloud.`,success:`Installé avec succès. Ouvrez l'environnement pour voir la nouvelle application.`,localSuccess:`v{{version}} installé dans ce runtime. "{{name}}" devrait maintenant apparaître dans le sélecteur d'applications.`,localManifestConflict:`{{message}}
|
|
21
|
-
Remarque : Une application locale possède déjà ce manifest_id. Supprimez-la d'abord de objectstack.config.ts.`,localUnauthorized:`Connectez-vous d'abord à ce runtime.`,localMarketplaceUnavailable:`Ce runtime n'a pas de OS_CLOUD_URL configuré.`,updateTo:`Mettre à jour → v{{version}}`,installedVersion:`Installé v{{version}}`},org:{heading:`Votre organisation`,install:`Installer`,installed:`{{name}} installé`,installedBadge:`Installé`,installing:`Installation…`},disclosure:{containsCode:`Ce paquet contient du code`,reviewed:`Examiné et approuvé`,unreviewed:`Pas encore examiné`,signed:`Signé`,grantsIntro:`À l'installation, ce paquet obtiendra :`,services:`Services de la plateforme`,hooks:`Hooks de cycle de vie`,network:`Accès réseau`,fs:`Accès au système de fichiers`,noPermissions:`Ne demande aucune autorisation particulière.`,acknowledge:`Je comprends que ce paquet exécute du code et obtient les autorisations ci-dessus.`,runtime:{node:`Dans le processus · confiance totale`,sandbox:`Bac à sable`,worker:`Hors processus`}},uninstall:{confirm:`Désinstaller {{manifestId}} v{{version}} de ce runtime ?
|
|
22
|
-
|
|
23
|
-
Le manifeste en cache sera supprimé.`,successInList:`{{manifestId}} supprimé. Redémarrez le runtime pour le décharger complètement.`,successInDetail:`Manifeste en cache pour {{manifestId}} supprimé.`},accessDenied:{title:`Marketplace réservé aux administrateurs`,description:`Vous n'avez pas la permission d'installer des applications dans cet environnement.`},category:{crm:`CRM`,erp:`ERP`,hr:`RH`,finance:`Finance`,project:`Gestion de projet`,collaboration:`Collaboration`,analytics:`Analytique`,integration:`Intégration`,automation:`Automatisation`,ai:`IA`,security:`Sécurité`,"developer-tools":`Outils développeur`,"ui-theme":`Thème UI`,storage:`Stockage`,other:`Autre`},pricing:{free:`Gratuit`,freemium:`Freemium`,paid:`Payant`,subscription:`Abonnement`,"usage-based":`À l'utilisation`,"contact-sales":`Contacter les ventes`},relativeTime:{today:`aujourd'hui`,daysAgo:`il y a {{count}}j`,monthsAgo:`il y a {{count}} mois`,yearsAgo:`il y a {{count}} ans`}},approvals:{approve:`Approuver`,reject:`Rejeter`,comment:`Commentaire (facultatif)`,approveSuccess:`Approuvé`,rejectSuccess:`Rejeté`,rejectConfirm:`Rejeter cette demande d’approbation ?`},approvalsInbox:{loadMore:`Charger plus`,loadingMore:`Chargement…`,loadedOf:`{{loaded}} sur {{total}} chargées`,actEscalate:`SLA escaladé`,systemSlaActor:`Système (SLA)`,reassignBtn:`Réattribuer`,reassignTitle:`Confier cette approbation à quelqu'un d'autre ?`,reassignBody:`Votre place d'approbateur passe à la personne choisie — elle est notifiée et peut agir immédiatement.`,reassignTo:`Nouvel approbateur`,reassignToPlaceholder:`Choisissez un utilisateur ou saisissez un e-mail / role:<nom>`,reassignSuccess:`Confiée à {{to}}`,requestInfoBtn:`Demander des infos`,requestInfoTitle:`Demander plus d'informations au demandeur ?`,requestInfoBody:`La demande reste en attente ; le demandeur est notifié et peut répondre dans le fil.`,requestInfoPlaceholder:`Que faut-il au demandeur ?`,requestInfoSent:`Renvoyée au demandeur pour complément`,remindBtn:`Relancer`,remindSuccess:`Relance envoyée à {{count}} approbateur(s)`,remindThrottled:`Une relance a déjà été envoyée récemment — réessayez plus tard.`,replyPlaceholder:`Répondre sur cette demande…`,slaRemaining:`SLA : {{dur}} restants`,slaOverdue:`SLA dépassé de {{dur}}`,actReassign:`Réattribuée`,reassignFromTo:`de {{from}} à {{to}}`,actRemind:`Relance`,actRequestInfo:`Infos demandées`,actComment:`Commentaire`,stepProgress:`Étapes d'approbation`,prevRequest:`Précédente`,nextRequest:`Suivante`,positionOf:`Demande {{index}} sur {{total}}`,progressApprovals:`Approbations — {{got}} sur {{need}}`,progressGroups:`Avancement des visas — {{got}} sur {{need}} groupes`,progressEligible:`{{count}} approbateur(s) éligible(s)`,progressBar:`Avancement de la décision`,declaredActions:`Actions`,attachmentChip:`Pièce jointe`,attachmentOpenFailed:`Impossible d'ouvrir la pièce jointe — veuillez réessayer`,approveOneTitle:`Approuver « {{title}} » ?`,approveOneBody:`Cette action approuve la demande en votre nom. Pour ajouter un commentaire ou une pièce jointe, ouvrez la demande.`,flowOrigin:`Initiée par un flux`,sortBy:`Trier`,sortRecent:`Plus récentes d’abord`,sortOldest:`Plus anciennes d’abord`,sortAmount:`Montant (décroissant)`,quickPhrase1:`Approuvée — conforme aux exigences.`,quickPhrase2:`Approuvée sous conditions — surveillez l'exécution.`,quickPhrase3:`Veuillez compléter le dossier et soumettre à nouveau.`,title:`Centre d'approbations`,subtitle:`Consultez et traitez les demandes d'approbation.`,refresh:`Actualiser`,tabMyPending:`En attente de moi`,tabSubmitted:`Soumises par moi`,tabAll:`Toutes`,searchPlaceholder:`Rechercher un enregistrement, un processus, un demandeur…`,clearSearch:`Effacer la recherche`,statusFilter:`Statut`,allStatuses:`Tous les statuts`,processFilter:`Processus`,allProcesses:`Tous les processus`,objectFilter:`Objet`,allObjects:`Tous les objets`,filterCount:`{{shown}} sur {{total}}`,selected:`sélectionnées`,actionableCount:`({{count}} actionnables)`,selectAll:`Tout sélectionner`,selectRow:`Sélectionner la demande`,colRequest:`Demande`,colRecord:`Enregistrement`,colRequester:`Demandeur`,colStatus:`Statut`,colWaiting:`Soumise`,colActions:`Actions`,statusPending:`En attente`,statusApproved:`Approuvée`,statusRejected:`Rejetée`,statusRecalled:`Retirée`,statusReturned:`Renvoyé pour révision`,sendBackBtn:`Renvoyer`,sendBackTitle:`Renvoyer cette demande pour révision ?`,sendBackBody:`Ce tour se termine et l'enregistrement est déverrouillé pour que le demandeur corrige les données. À la nouvelle soumission, un nouveau tour d'approbation s'ouvre pour tous les approbateurs.`,sendBackPlaceholder:`Que faut-il corriger avant approbation ?`,sendBackSuccess:`Renvoyé pour révision — le demandeur peut maintenant modifier et soumettre à nouveau`,sendBackAutoRejected:`Limite de révisions atteinte — la demande a été rejetée automatiquement`,actRevise:`Renvoyé pour révision`,actResubmit:`Soumis à nouveau`,roundChip:`Tour {{n}}`,returnedHint:`Un approbateur vous a renvoyé cette demande. L'enregistrement est déverrouillé — corrigez les données puis soumettez à nouveau pour démarrer un nouveau tour d'approbation.`,resubmitBtn:`Soumettre à nouveau`,resubmitting:`Nouvelle soumission…`,resubmitSuccess:`Soumis à nouveau — un nouveau tour d'approbation est ouvert`,resubmitPlaceholder:`Qu'avez-vous modifié ?`,editRecordBtn:`Modifier l'enregistrement`,abandonTitle:`Abandonner cette révision ?`,abandonBody:`La demande est retirée au lieu d'être soumise à nouveau. L'approbation s'arrête ici.`,emptyTitle:`Aucune demande`,emptyPending:`Tout est à jour — rien n'attend votre approbation.`,emptyOther:`Rien ici pour l'instant.`,emptyViewAll:`Voir toutes les demandes`,noMatches:`Aucun résultat avec les filtres actuels.`,keyboardHint:`Clavier : j/k déplacer · Entrée ouvrir · x sélectionner · a approuver · r rejeter`,drawerTitle:`Demande d'approbation`,submittedAgo:`Soumise {{when}}`,completedAt:`Terminée {{when}}`,waitingOn:`En attente de`,history:`Activité`,noActions:`Aucune action pour le moment.`,actSubmit:`Soumise`,actApprove:`Approuvée`,actReject:`Rejetée`,actRecall:`Retirée`,rawData:`Données brutes (JSON)`,copy:`Copier`,copied:`Copié`,copyFailed:`Échec de la copie`,overrideActor:`Agir sous une autre identité (admin)`,actor:`Acteur`,auto:`Auto`,overrideHint:`p. ex. role:sales_manager. Laissez vide pour l'identité détectée automatiquement.`,comment:`Commentaire (facultatif)`,approve:`Approuver`,approving:`Approbation…`,reject:`Rejeter`,rejecting:`Rejet…`,recall:`Retirer`,recalling:`Retrait…`,cancel:`Annuler`,clear:`Effacer`,approveN:`Approuver {{count}}`,rejectN:`Rejeter {{count}}`,bulkApproveTitle:`Approuver {{count}} demandes ?`,bulkApproveBody:`Chaque demande est approuvée avec votre identité et son flux continue sur la branche d'approbation.`,bulkRejectTitle:`Rejeter {{count}} demandes ?`,bulkRejectBody:`Les demandes sélectionnées seront rejetées et leurs demandeurs notifiés.`,bulkApproved:`{{count}} demandes approuvées`,bulkRejected:`{{count}} demandes rejetées`,bulkPartial:`{{ok}} réussies, {{fail}} échouées : {{which}}`,rejectOneTitle:`Rejeter « {{title}} » ?`,rejectOneBody:`La demande sera rejetée et le demandeur notifié.`,rejectTitle:`Rejeter cette demande ?`,rejectBody:`La demande sera marquée comme rejetée et le demandeur notifié.`,recallTitle:`Retirer cette demande ?`,recallBody:`Après le retrait, les approbateurs ne pourront plus agir et l'enregistrement sera déverrouillé.`,inlineApproved:`« {{title}} » approuvée`,inlineRejected:`« {{title}} » rejetée`,approvedFinal:`Approuvée`,approvedWaiting:`Approuvée — en attente des autres approbateurs`,rejectedToast:`Rejetée`,recalledToast:`Demande retirée`,whyDisabled:`Seuls les approbateurs désignés peuvent agir. En attente de : {{who}}.`,whyDisabledSubmitter:`Vous avez soumis cette demande, vous pouvez donc la retirer — mais seuls les approbateurs désignés peuvent l'approuver ou la rejeter.`,noActor:`Impossible de déterminer l'identité`,actionFailed:`Échec de l'action`,loadFailed:`Impossible de charger la demande`,recallUnavailable:`Le retrait n'est pas disponible sur ce déploiement.`,requestGone:`Cette demande n'existe plus. Actualisez la liste.`,notAllowed:`Vous n'êtes pas autorisé à effectuer cette action.`,alreadyDecided:`Cette demande a déjà été traitée. Actualisez la liste.`,justNow:`à l'instant`,minutesAgo:`il y a {{count}} min`,hoursAgo:`il y a {{count}} h`,daysAgo:`il y a {{count}} jours`},preview:{empty:{loadFailedTitle:`Échec du chargement de l'aperçu du brouillon`,loadFailedDescription:`Impossible de lire la surcouche de brouillon. Réessayez ou vérifiez votre connexion.`,notReadyTitle:`« {{app}} » n'est pas encore dans le brouillon`,notReadyDescription:`La génération est peut-être en cours, ou elle a échoué avant la préparation de cette application. Consultez la conversation pour connaître l'état — ce volet s'actualise à l'arrivée des brouillons.`,nothingTitle:`Rien à prévisualiser pour l'instant`,retry:`Réessayer`},draftBar:{messageClean:`Aperçu du brouillon — aucune modification non publiée ; tout ce qui figure ici est déjà en ligne.`,sampleDataTitle:`Les données d'exemple apparaissent après publication`,sampleDataBody:`Vous prévisualisez la structure de votre application. Publiez-la pour charger des enregistrements d'exemple et la mettre en ligne.`,publishCta:`Publier pour voir en ligne`,message:`Aperçu du brouillon — vous voyez des modifications non publiées. Rien n'est en ligne avant publication.`,publish:`Publier`,publishing:`Publication…`,exit:`Quitter l'aperçu`,changes:`Modifications`},changes:{title:`Modifications en attente`,description:`Ce que la publication changera. Les nouveaux éléments sont ajoutés ; les mises à jour remplacent la version en ligne.`,loading:`Chargement des modifications en attente…`,loadFailed:`Impossible de charger les modifications en attente :`,empty:`Rien en attente — tous les brouillons ont été publiés.`,kindNew:`Nouveau`,kindUpdate:`Mise à jour`,detailLoading:`Chargement des détails…`,detailLoadFailed:`Impossible de charger les détails de la modification :`,detailNone:`Aucune différence détectée — le brouillon correspond à la version publiée.`,detailChangedKeys:`Également modifié :`,confirmNote:`La publication libère atomiquement les {{count}} brouillons en attente de ce paquet.`,publishConfirm:`Tout publier`},unpublishedBar:{message:`Application non publiée — entièrement fonctionnelle, mais visible seulement par les créateurs. Publiez-la pour la rendre visible à vos utilisateurs.`,publish:`Publier`,publishing:`Publication…`,published:`Publié ! L'application est maintenant visible par vos utilisateurs.`,publishFailed:`Échec de la publication`},history:{button:`Historique`,title:`Historique des générations`,description:`Toutes les modifications de cette application, les plus récentes d'abord. Annulez n'importe quelle étape — aucune confirmation de publication n'est nécessaire.`,loadFailed:`Impossible de charger l'historique :`,loadFailedUnavailable:`Magasin de commits temporairement injoignable — cette lecture n'a pas eu lieu, aucun historique n'est donc affiché. Réessayez dans un instant.`,loading:`Chargement de l'historique…`,empty:`Aucun historique pour cette application.`,revertLabel:`Modification annulée`,applyLabel:`Modification de génération`,revert:`annulation`,items:`éléments`,revertAction:`Annuler`,reverted:`Annulé — la modification a été retirée.`,revertFailed:`Échec de l'annulation`,revertUnavailable:`Magasin de commits temporairement injoignable — l'annulation n'a peut-être pas été appliquée. Rouvrez cet historique pour le vérifier avant de réessayer.`}},filterBuilder:{where:`Où`,and:`ET`,or:`OU`,clearAll:`Tout effacer`,selectField:`Sélectionner un champ`,operator:`Opérateur`,selectValue:`Sélectionner une valeur`,value:`Valeur`,addFilter:`Ajouter un filtre`,removeCondition:`Supprimer la condition`,trueLabel:`Vrai`,falseLabel:`Faux`,noResults:`Aucun résultat`,searchField:`Rechercher {{label}}…`,enterId:`Saisir l'ID {{label}}`,operators:{equals:`Égal à`,notEquals:`Différent de`,contains:`Contient`,notContains:`Ne contient pas`,isEmpty:`Est vide`,isNotEmpty:`N'est pas vide`,greaterThan:`Supérieur à`,lessThan:`Inférieur à`,greaterOrEqual:`Supérieur ou égal`,lessOrEqual:`Inférieur ou égal`,before:`Avant`,after:`Après`,between:`Entre`,in:`Dans`,notIn:`Pas dans`}},sortBuilder:{sortBy:`Trier par`,thenBy:`Puis par`,selectField:`Sélectionner un champ`,ascending:`A → Z`,descending:`Z → A`,addSort:`Ajouter un tri`,removeSort:`Supprimer le tri`},collaboration:{commentCount:`{{count}} commentaires`,commentCountOne:`{{count}} commentaire`,resolvedSuffix:` · Résolu`,sortComments:`Trier les commentaires`,sortOldest:`Plus anciens`,sortNewest:`Plus récents`,resolve:`Résoudre`,reopen:`Rouvrir`,justNow:`à l'instant`,minutesAgo:`il y a {{count}} min`,hoursAgo:`il y a {{count}} h`,daysAgo:`il y a {{count}} j`,edited:`(modifié)`,reactionCount:`{{count}} réactions`,reactionCountOne:`{{count}} réaction`,addThumbsUp:`Ajouter un pouce levé`,reply:`Répondre`,reactThumbsUp:`Réagir avec un pouce levé`,reactHeart:`Réagir avec un cœur`,cancelReply:`Annuler la réponse`,replyingTo:`Réponse à {{name}}…`,replyingToComment:`Réponse au commentaire…`,commentPlaceholder:`Ajouter un commentaire… (utilisez @ pour mentionner)`,send:`Envoyer`,presentUserCount:`{{count}} utilisateurs présents`,presentUserCountOne:`{{count}} utilisateur présent`,moreUserCount:`{{count}} autres utilisateurs`,moreUserCountOne:`{{count}} autre utilisateur`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`actif`,statusIdle:`inactif`,statusAway:`absent`},wizard:{missingRequired:`Veuillez renseigner les champs obligatoires : {{fields}}`},appManagement:{title:`Applications`,subtitle:`Gérer toutes les applications configurées`,newApp:`Nouvelle application`,searchLabel:`Rechercher des applications`,searchPlaceholder:`Rechercher des applications…`,selectedCount:`{{n}} sélectionnées`,bulkEnable:`Activer`,bulkDisable:`Désactiver`,selectAll:`Tout sélectionner ({{n}})`,empty:`Aucune application trouvée.`,defaultBadge:`Par défaut`,active:`Active`,inactive:`Inactive`,selectApp:`Sélectionner {{name}}`,openApp:`Ouvrir l'application`,openAppNamed:`Ouvrir {{name}}`,editApp:`Modifier l'application`,editAppNamed:`Modifier {{name}}`,editWithAi:`Modifier avec l'IA`,editWithAiNamed:`Modifier {{name}} avec l'IA`,enableApp:`Activer l'application`,disableApp:`Désactiver l'application`,enableAppNamed:`Activer {{name}}`,disableAppNamed:`Désactiver {{name}}`,setDefault:`Définir par défaut`,setDefaultNamed:`Définir {{name}} par défaut`,deleteApp:`Supprimer l'application`,deleteAppNamed:`Supprimer {{name}}`,confirmDelete:`Cliquez à nouveau pour confirmer la suppression`,confirmDeleteNamed:`Confirmer la suppression de {{name}}`,toast:{noClient:`Impossible de joindre le service de métadonnées`,unknownError:`erreur inconnue`,appEnabled:`{{name}} activée`,appDisabled:`{{name}} désactivée`,toggleFailed:`Échec du changement d'état de l'application : {{reason}}`,setDefaultDone:`{{name}} définie par défaut`,setDefaultFailed:`Échec de la définition de l'application par défaut : {{reason}}`,appDeleted:`{{name}} supprimée`,deleteFailed:`Échec de la suppression de l'application : {{reason}}`,bulkEnabled:`{{n}} applications activées`,bulkDisabled:`{{n}} applications désactivées`,bulkFailed:`Échec pour {{n}} : {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:` ; `,bulkOperationFailed:`Échec de l'opération groupée : {{reason}}`}}},es:{impersonation:{banner:{message:`Está suplantando a {{user}}: todas las acciones se registran a su nombre.`,startedBy:`Iniciado por el administrador {{admin}}.`,stop:`Dejar de suplantar`,stopping:`Finalizando…`,stopFailed:`No se pudo dejar de suplantar: {{reason}}`,notRestored:`El servidor aceptó la solicitud pero no restauró su sesión de administrador: sigue suplantando a {{user}}. Cierre sesión y vuelva a iniciarla para terminar.`}},capability:{label:{manage_users:`Gestionar usuarios`,manage_org_users:`Gestionar usuarios de la organización`,manage_metadata:`Gestionar metadatos`,manage_platform_settings:`Gestionar la configuración de la plataforma`,setup_access:`Acceso a la configuración`,setup_write:`Escritura de la configuración`,studio_access:`Acceso a Studio`},group:{platform:`Plataforma`,org:`Organización`,other:`Otro`}},perm:{facet:{none:`Ninguno`,more:`+{{count}} más`,objects:`{{count}} objetos`,objects_one:`{{count}} objeto`,fields:`{{count}} reglas de campo`,fields_one:`{{count}} regla de campo`,rls:`{{count}} políticas RLS`,rls_one:`{{count}} política RLS`,tabs:`{{count}} reglas de pestaña`,tabs_one:`{{count}} regla de pestaña`,adminScope:`Administración delegada configurada`,designInStudio:`Diseñar en Studio →`,designInStudioHint:`Diseñar en Studio`}},lookup:{recentlyUsed:`Usados recientemente`,allResults:`Todos los resultados`,createNew:`Crear nuevo`,createNamed:`Crear «{{name}}»`,showingResults:`Mostrando {{shown}} de {{total}} resultados`,showAllResults:`Ver todos los resultados ({{count}})`,selectedBadge:`Seleccionado`,browseAll:`Examinar todos los registros`,remove:`Quitar {{label}}`,selectFirst:`Seleccione primero {{fields}}`,selectRecord:`Seleccionar registro`,recordCount:`{{count}} registros`,recordCountOne:`1 registro`,pageOf:`Página {{current}} de {{total}}`,filters:`Filtros`,clear:`Limpiar`,yes:`Sí`,filterPlaceholder:`Filtrar {{label}}`,prevPage:`Página anterior`,nextPage:`Página siguiente`,jumpToPage:`Ir a la página`,retry:`Reintentar`,loading:`Cargando…`,noOptions:`No se encontraron opciones`,noRecords:`No se encontraron registros`},common:{addToFavorites:`Añadir a favoritos`,removeFromFavorites:`Quitar de favoritos`,loading:`Cargando…`,save:`Guardar`,cancel:`Cancelar`,delete:`Eliminar`,edit:`Editar`,create:`Crear`,filter:`Filtrar`,reset:`Restablecer`,confirm:`Confirmar`,close:`Cerrar`,back:`Atrás`,next:`Siguiente`,previous:`Anterior`,submit:`Enviar`,refresh:`Actualizar`,export:`Exportar`,import:`Importar`,yes:`Sí`,no:`No`,ok:`Aceptar`,actions:`Acciones`,more:`Más`,selectAll:`Seleccionar todo`,clearAll:`Borrar todo`,noData:`Sin datos`,noResults:`No se encontraron resultados`,required:`Obligatorio`,optional:`Opcional`,selectOption:`Seleccionar una opción`,select:`Seleccionar…`,openChat:`Abrir chat`,closeChat:`Cerrar chat`,closePanel:`Cerrar panel`,resizeDrawer:`Ajustar el ancho del panel`,itemCount:`{{count}} elementos`,itemCountOne:`{{count}} elemento`,toggleSidebar:`Alternar barra lateral`,package:`Paquete`,done:`Listo`,editInStudio:`Editar en Studio`,record:`Registro`,retry:`Reintentar`,printDialogHint:`Abre el cuadro de diálogo de impresión de tu navegador (no es una exportación a PDF)`},actions:{decisionOutput:{help:`Se transfiere al flujo como salida de la decisión.`,helpMultiValue:`Se transfiere al flujo como salida de la decisión. Separe varios valores con comas.`},resultDialog:{defaultTitle:`Guarda este valor ahora`,acknowledge:`Lo he guardado`,copyAll:`Copiar todo`}},validation:{required:`El campo {{field}} es obligatorio`,minLength:`{{field}} debe tener al menos {{min}} caracteres`,maxLength:`{{field}} debe tener como máximo {{max}} caracteres`,min:`{{field}} debe ser al menos {{min}}`,max:`{{field}} debe ser como máximo {{max}}`,email:`Por favor, introduzca un correo electrónico válido`,url:`Por favor, introduzca una URL válida`,pattern:`El formato de {{field}} no es válido`,formInvalid:`Por favor, revise los campos resaltados: {{fields}}`,formInvalidJoiner:`, `,unique:`El campo {{field}} debe ser único`,type:`{{field}} debe ser un {{type}} válido`},form:{noPermissionToSave:`No tienes permiso para guardar este registro.`,submitFailed:`No se pudo guardar. Inténtalo de nuevo.`,discardTitle:`¿Descartar los cambios?`,discardMessage:`Tiene cambios sin guardar. Si cierra este formulario ahora, sus ediciones se perderán.`,dialogDescriptionFallback:`Complete los campos del formulario y luego envíe o cancele.`,keepEditing:`Seguir editando`,discard:`Descartar`,conflictTitle:`Conflicto al guardar`,conflictMessage:`Otra persona modificó este registro mientras lo editaba. Sobrescribir reemplazará sus cambios por los suyos.`,conflictLatestVersion:`Su guardado: {{time}}`,conflictOverwrite:`Sobrescribir`,addItem:`Añadir elemento`,removeItem:`Eliminar elemento`,fieldRequired:`Este campo es obligatorio`,invalidFormat:`Formato no válido`,saveSuccess:`Guardado correctamente`,saveError:`Error al guardar`,unsavedChanges:`Tiene cambios sin guardar. ¿Está seguro de que desea salir?`,stepOf:`Paso {{current}} de {{total}}`,createTitle:`Crear {{object}}`,editTitle:`Editar {{object}}`,viewTitle:`Ver {{object}}`,createTargetOrg:`Se crea en {{org}}`,saveRecord:`Guardar registro`,create:`Crear`,update:`Actualizar`,createSuccess:`{{object}} creado`,updateSuccess:`{{object}} actualizado`,deleteSuccess:`{{object}} eliminado`,fullscreen:{title:`Editar texto`,description:`Edita el valor de texto completo y luego guarda o cancela los cambios.`,done:`Listo`,toggle:`Editar {{label}} en pantalla completa`,textFallback:`texto`}},fields:{image:{upload:`Subir imagen`,addMore:`Añadir más imágenes`,uploading:`Subiendo…`,imageAlt:`Imagen {{index}}`,crop:`Recortar la imagen {{index}}`,remove:`Eliminar la imagen {{index}}`,enlarge:`Ampliar {{name}}`,preview:`Vista previa de la imagen`,previous:`Imagen anterior`,next:`Imagen siguiente`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`Atrasado {{count}} d`},file:{dragDropHere:`Arrastra y suelta archivos aquí`,dropFilesHere:`Suelta los archivos aquí`,browseHint:`o haz clic para explorar`,browseHintCamera:`o haz clic para explorar • usa el botón de cámara de abajo`,takePhoto:`Tomar foto`,takeSelfie:`Tomar selfie`,cameraCapture:`Captura de cámara`,uploading:`Subiendo…`,uploadingPct:`Subiendo… ({{pct}} %)`,fileFallback:`Archivo`,upload:`Subir`,remove:`Quitar {{name}}`,exceedsMaxSize:`«{{name}}» supera el tamaño máximo ({{max}} MB)`,uploadFailed:`Error al subir «{{name}}»: {{error}}`},richText:{format:`Formato: {{format}}`,basicEditorHint:`Editor de texto enriquecido (básico)`,placeholder:`Escribe algo…`},options:{empty:`No hay opciones disponibles`,selectFirst:`Seleccione primero {{fields}}`},objectRef:{loading:`Cargando objetos…`,placeholder:`Seleccionar un objeto`,search:`Buscar objetos…`,empty:`No se encontraron objetos`},recipient:{selectTypeFirst:`Selecciona primero un tipo de destinatario.`,loading:`Cargando…`,search:`Buscar…`,empty:`Sin coincidencias`,select:`Seleccionar un destinatario`,selectUser:`Seleccionar un usuario`,selectTeam:`Seleccionar un equipo`,selectBusinessUnit:`Seleccionar una unidad de negocio`,selectPosition:`Seleccionar un puesto`,selectUnitAndSubordinates:`Seleccionar una unidad de negocio`},filterCondition:{selectObjectFirst:`Selecciona primero un objeto.`,noCriteria:`Sin criterios: esta regla no comparte nada`,criteriaRequired:`Añade al menos una condición. Una regla sin criterios compartiría todos los registros, por lo que no se puede guardar.`,invalidJson:`JSON no válido: la regla no coincidirá con ningún registro hasta que se corrija.`,jsonOnly:`Este criterio solo se puede editar como JSON`,editAsJson:`Editar como JSON`,useVisualBuilder:`Usar el constructor visual`},tags:{placeholder:`Escriba y pulse Intro para añadir…`},textarea:{characterCount:`Recuento de caracteres: {{count}} de {{max}}`,charactersRemaining:`Caracteres restantes: {{count}}`}},table:{rowsPerPage:`Filas por página`,showing:`Mostrando {{from}} a {{to}} de {{total}}`,noRows:`No hay filas para mostrar`,sortAsc:`Ordenar ascendente`,sortDesc:`Ordenar descendente`,filterColumn:`Filtrar {{column}}`,columns:`Columnas`,exportCSV:`Exportar CSV`,exportExcel:`Exportar Excel`,selectRow:`Seleccionar fila`,selectAllRows:`Seleccionar todas las filas`,expandRow:`Expandir fila`,collapseRow:`Contraer fila`,hideColumn:`Ocultar columna`,freezeColumn:`Fijar columna`,unfreezeColumn:`Desfijar columna`,pageInfo:`Página {{current}} de {{total}}`,totalRecords:`{{count}} en total`,noResults:`Sin resultados`,noResultsHint:`Intente ajustar sus filtros o términos de búsqueda.`,cancelAll:`Cancelar todo`,saveAll:`Guardar todo ({{count}})`,addRecord:`Agregar registro`,open:`Abrir`,search:`Buscar…`,modified:`{{count}} filas modificadas`,saveFailed:`Error al guardar`,selected:`{{count}} seleccionados`,edit:`Editar`,delete:`Eliminar`},grid:{bulkSelected:`{{count}} seleccionados`,bulkSelectedAllMatches:`{{count}} seleccionados (todas las coincidencias)`,bulkClear:`Quitar selección`,bulkAllOnPage:`Están seleccionados los {{count}} de esta página.`,bulkSelectAllMatching:`Seleccionar las {{count}} coincidencias`,bulkAllMatchingSelected:`Están seleccionados los {{count}} registros coincidentes.`,bulk:{confirmDefault:`Esto se aplicará a {{count}} registro(s).`,overLimit:`La selección ({{count}}) supera el límite de la acción ({{limit}}). Reduzca la selección para continuar.`,affectedRecords:`Registros afectados ({{count}}):`,skippedIneligible:`{{count}} de los registros seleccionados no son aptos para esta acción y se omitirán.`,rowFallback:`Fila {{index}}`,andMore:`… y {{count}} más`,processed:`{{count}} / {{total}} procesados`,processedFailed:` · {{count}} con error`,undonePrefix:`Deshecho: `,succeeded:`Correctos {{count}} / {{total}}`,resultFailed:` · Fallidos {{count}}`,retry:`Reintentar`,downloadErrorCsv:`Descargar CSV de errores`,cancel:`Cancelar`,back:`Atrás`,next:`Siguiente`,run:`Ejecutar`,running:`Ejecutando…`,undo:`Deshacer`,undoing:`Deshaciendo…`,done:`Hecho`,selectPlaceholder:`Seleccionar…`,loading:`Cargando…`},actions:`Acciones`,edit:`Editar`,delete:`Eliminar`,export:`Exportar`,exportAs:`Exportar como {{format}}`,loading:`Cargando cuadrícula…`,errorLoading:`Error al cargar la cuadrícula`,pullToRefresh:`Desliza para actualizar`,refreshing:`Actualizando…`,openRecord:`Abrir registro`,rowHeight:`Altura de fila: {{mode}}`,openMenu:`Abrir menú`,empty:`Vacío`,yes:`Sí`,no:`No`,systemFields:`Sistema`,summary:{pattern:`{{label}}: {{value}}`,count:`Recuento`,countEmpty:`Vacíos`,countFilled:`Rellenos`,countUnique:`Únicos`,percentEmpty:`Vacíos`,percentFilled:`Rellenos`,sum:`Suma`,avg:`Promedio`,min:`Mín.`,max:`Máx.`},toolbar:{densityMode:`Densidad`,densityCompact:`Compacto`,densityComfortable:`Normal`,densitySpacious:`Espacioso`,densityCycleHint:`{{label}} (clic para cambiar)`,densityCycleShortHint:`Clic para cambiar`},import:{downloadTemplate:`Descargar plantilla`,downloadTemplateHint:`Obtenga un CSV con las columnas correctas (los campos obligatorios llevan *).`,templateFileName:`{{object}}-import-template`,autoMatched:`Emparejado automáticamente`,autoMatchedSummary:`{{count}} columna(s) emparejada(s) automáticamente: revise y ajuste abajo.`,confidence:{high:`Confianza alta`,medium:`Confianza media`,low:`Confianza baja`},asyncQueued:`En cola: preparando la importación…`,asyncProcessing:`Importando {{processed}} de {{total}} filas… {{progress}} %`,asyncLargeHint:`Este archivo es grande, así que se importará en segundo plano.`,largeSampleNotice:`Vista previa de las primeras {{shown}} de {{total}} filas.`,cancelImport:`Cancelar la importación`,importCancelled:`Importación cancelada`,resultsTruncated:`Mostrando los primeros {{count}} resultados de filas (de {{total}}).`,createdCount:`{{count}} creados`,updatedCount:`{{count}} actualizados`,downloadFailed:`Descargar las filas con error`,options:`Opciones de importación`,writeMode:`Cuando una fila coincide con un registro existente`,writeModeOpt:{insert:`Crear siempre uno nuevo`,update:`Actualizar el existente (omitir si no hay coincidencia)`,upsert:`Actualizar si coincide; si no, crear`},matchFields:`Coincidir por`,matchFieldsPlaceholder:`Elija el campo o campos de coincidencia…`,matchFieldsHint:`Las filas se emparejan con registros existentes por estos campos.`,needMatchFields:`Seleccione al menos un campo por el que coincidir.`,matchOnlyField:`(solo coincidencia)`,optCreateOptions:`Conservar los valores de opción desconocidos`,optRunAutomations:`Ejecutar automatizaciones y disparadores`,optTreatHistorical:`Importar como datos históricos`,optTreatHistoricalHint:`(importa los registros completados tal cual: omite las comprobaciones de la máquina de estados y conserva sus marcas de tiempo y autor originales en lugar de sellarlos ahora)`,optSkipBlankKey:`Omitir las filas con valor de coincidencia vacío`,optBackground:`Importar en segundo plano`,optBackgroundHint:`(se ejecuta como un trabajo reversible)`,validate:`Validar los datos`,validating:`Validando…`,validateHint:`Comprobar cada fila en el servidor antes de importar.`,validatePassed:`Las {{ok}} filas son válidas.`,validateFailed:`{{ok}} válidas, {{errors}} con errores.`,errorRowPrefix:`Fila {{row}}: `,referenceNotFound:`No hay ningún registro que coincida con «{{value}}»`,referenceAmbiguous:`«{{value}}» coincide con más de un registro: use un valor único o el id del registro`,invalidBoolean:`«{{value}}» no es un valor verdadero/falso válido`,invalidNumber:`«{{value}}» no es un número válido`,invalidDate:`«{{value}}» no es una fecha válida`,invalidOption:`«{{value}}» no es una de las opciones permitidas`,requiredValue:`Este campo es obligatorio`,matchAmbiguous:`Coincide con más de un registro existente: use un valor único o el id del registro`,history:`Historial`,historyBack:`Volver a la importación`,historyDescription:`Importaciones recientes de este objeto.`,historyHint:`Trabajos de importación en segundo plano, los más recientes primero.`,historyRefresh:`Actualizar`,historyLoading:`Cargando…`,historyEmpty:`Todavía no hay importaciones.`,historyUnsupported:`El historial de importaciones no está disponible para esta fuente de datos.`,historyColStatus:`Estado`,historyColRows:`Filas`,historyColResult:`Resultado`,historyColTime:`Cuándo`,errorCount:`{{count}} errores`,undoImport:`Deshacer la importación`,undoing:`Deshaciendo…`,undoConfirm:`¿Deshacer esta importación? Los registros que creó se eliminarán y los que actualizó se restaurarán a sus valores anteriores.`,reverted:`Deshecha`,jobStatus:{pending:`Pendiente`,running:`En ejecución`,succeeded:`Correcta`,failed:`Fallida`,cancelled:`Cancelada`},legacyReferenceBlocked:`Importación bloqueada: {{fields}} son campos de relación que necesitan la ruta de importación del servidor para convertir nombres en identificadores de registro, y esta conexión no la admite. Importarlos como texto plano dañaría los datos. Actualice el backend/cliente, o desasigne estas columnas e impórtelas por separado.`,missingRequiredHint:`No se puede continuar: campos obligatorios sin asignar: {{fields}}. Añada una columna correspondiente a su archivo, o vuelva atrás y suba uno que la incluya.`,legacyFallbackNotice:`Importado mediante un modo de compatibilidad: esta conexión no admite la ruta de importación del servidor, por lo que los valores se guardaron como texto sin conversión de tipos en el servidor. Actualice el backend/cliente para disponer de la importación completa (conversión de tipos y búsqueda de relaciones).`,title:`Importar {{object}}`,notAllowed:`Este objeto no está habilitado para la importación.`,stepUpload:`Cargar`,stepMapping:`Asignación`,stepPreview:`Vista previa`,uploadDescription:`Cargue un archivo CSV o Excel, o pegue desde una hoja de cálculo para comenzar.`,mappingDescription:`Asigne columnas a los campos del objeto.`,previewDescription:`Revise los datos antes de importar.`,dragDrop:`Arrastre y suelte un archivo CSV o Excel aquí, o haga clic para buscar`,browseFiles:`Buscar archivos`,parsing:`Analizando…`,pasteHint:`o pegue (Ctrl/⌘+V) filas copiadas desde Excel o Google Sheets`,legacyXls:`Los archivos .xls antiguos no son compatibles: vuelva a guardarlos como .xlsx.`,unsupportedFile:`Tipo de archivo no compatible. Use CSV, TSV o Excel (.xlsx).`,parseFailed:`No se pudo leer este archivo. Verifique el formato e inténtelo de nuevo.`,fileNeedsHeader:`El archivo debe tener una fila de encabezado y al menos una fila de datos.`,mappingTemplate:`Plantilla de asignación:`,chooseTemplate:`Elegir plantilla…`,noSavedTemplates:`Sin plantillas guardadas`,noneOption:`— Ninguno —`,saveCurrent:`Guardar actual`,templateName:`Nombre de la plantilla`,save:`Guardar`,deleteTemplate:`Eliminar plantilla`,savedMapping:`Asignación guardada:`,chooseSavedMapping:`Elegir una asignación guardada…`,manualMapping:`— Asignar columnas manualmente —`,transform:`Transformación`,savedMappingHint:`La asignación "{{name}}" aplica el cambio de nombre + las transformaciones + la conversión de tipos en el servidor. La asignación de columnas es de solo lectura.`,savedMappingPreviewNote:`La vista previa muestra sus columnas de origen; al importar, la asignación "{{name}}" aplica el cambio de nombre, las transformaciones y la conversión de tipos en el servidor.`,csvColumn:`Columna`,mapsTo:`Se asigna a`,typeMismatch:`Parece {{type}}`,type:{number:`Número`,boolean:`Booleano`,date:`Fecha`,datetime:`Fecha y hora`,text:`Texto`},status:`Estado`,skipColumn:`Omitir columna`,skip:`— Omitir —`,mapped:`Asignado`,skipped:`Omitido`,rowsWithErrors:`{{count}} fila(s) con errores`,rowsCorrected:`{{count}} fila(s) corregida(s)`,clickToFix:`— haga clic en una celda resaltada para editar en línea.`,showingRows:`Mostrando {{shown}} de {{total}} filas`,importing:`Importando… {{progress}}%`,importComplete:`Importación completada`,imported:`{{count}} importado(s)`,skippedCount:`{{count}} omitido(s)`,moreErrors:`…y {{count}} error(es) más`,cancel:`Cancelar`,back:`Atrás`,next:`Siguiente`,close:`Cerrar`,importNRows:`Importar {{count}} filas`,importingProgress:`Importando…`,requiredMark:`*`,required:`Obligatorio`,invalidType:`{{type}} inválido`}},calendar:{today:`Hoy`,month:`Mes`,week:`Semana`,day:`Día`,agenda:`Agenda`,allDay:`Todo el día`,noEvents:`Sin eventos`,newEvent:`Nuevo evento`,moreEvents:`+{{count}} más`},list:{firstRunTitle:`Aquí todavía no hay nada`,firstRunMessage:`Cree su primer registro para empezar.`,noMatches:`No hay registros coincidentes`,noMatchesMessage:`Ningún registro coincide con sus filtros o su búsqueda actuales. Pruebe a ajustarlos o borrarlos.`,loadErrorTitle:`No se pudieron cargar los registros`,loadErrorMessage:`Algo salió mal al cargar estos datos. Compruebe su conexión y vuelva a intentarlo.`,loadErrorForbiddenTitle:`No tiene acceso`,loadErrorForbiddenMessage:`No tiene permiso para ver estos registros. Contacte a su administrador si cree que debería tener acceso.`,loadErrorUnauthorizedTitle:`Se requiere iniciar sesión`,loadErrorUnauthorizedMessage:`Su sesión ha expirado o ha cerrado sesión. Inicie sesión de nuevo para ver estos registros.`,loadErrorRejectedTitle:`La consulta de esta vista fue rechazada`,loadErrorRejectedMessage:`El servidor no pudo procesar el filtro ni las opciones de consulta de esta vista. Borrar los filtros suele resolverlo; si la vista está guardada así, un administrador debe corregirla.`,loadErrorApiDisabledTitle:`Este objeto no está disponible a través de la API`,loadErrorApiDisabledMessage:`Esta página no puede cargar sus registros porque el objeto no está expuesto a través de la API. Es un ajuste del propio objeto, no un permiso: un administrador debe habilitar el acceso por API para que esta página funcione.`,retry:`Reintentar`,managedBy:{system:{title:`Aquí todavía no hay nada`,message:`Las entradas aparecen automáticamente cuando se ejecuta su acción de origen (por ejemplo, Enviar para aprobación, Compartir, Invitar). Ejecute una de ellas en un registro de origen para crear una fila.`},appendOnly:{title:`No se han registrado eventos`,message:`Este es un registro de auditoría inmutable. Las filas las escribe la plataforma cuando ocurren eventos: puede exportar el historial, pero no crear entradas desde aquí.`},betterAuth:{title:`No hay registros de identidad`,message:`Estos registros los crea el proveedor de autenticación —mediante el inicio de sesión, el aprovisionamiento y los flujos de seguridad— y no se añaden a mano aquí.`},betterAuthUser:{title:`Todavía no hay usuarios`,message:`Las cuentas de usuario las aprovisiona el proveedor de autenticación; no se crean aquí. Invite a sus compañeros a la organización y aparecerán automáticamente en su primer inicio de sesión (aprovisionamiento SSO en el momento). Los usuarios finales de la aplicación llegan cuando se registran a través de ella.`},betterAuthTeam:{title:`Todavía no hay equipos`,message:`Los equipos agrupan a los miembros dentro de una organización. Cree uno con «Crear equipo», o llegarán a través de los flujos de aprovisionamiento de organización y SSO de su proveedor de autenticación.`}},refresh:`Actualizar`,loading:`Cargando registros…`,recordCount:`{{count}} registros`,recordCountOne:`{{count}} registro`,addRecord:`Agregar registro`,tabs:`Pestañas`,allRecords:`Todos los registros`,search:`Buscar`,filter:`Filtrar`,filterRecords:`Filtrar registros`,sort:`Ordenar`,sortRecords:`Ordenar registros`,sortByIdSuffix:`(por ID)`,sortRelationalHint:`Las columnas que apuntan a otro registro no aparecen aquí: solo pueden ordenarse por el ID almacenado, no por el nombre que se muestra en la celda. Para ordenar por ese nombre, desnormalícelo en este objeto como un campo almacenado, que se escribe cuando cambia el origen, y ordene por él. No un campo de fórmula: es virtual, no se almacena ninguna columna para él y el servidor rechaza ordenar por él.`,resetSortToDefault:`Restablecer al valor predeterminado de la vista`,group:`Agrupar`,groupBy:`Agrupar por`,export:`Exportar`,exportAs:`Exportar como {{format}}`,color:`Color`,rowColor:`Color de fila`,colorByField:`Colorear por campo`,clear:`Borrar`,none:`Ninguno`,hideFields:`Ocultar campos`,noItems:`No se encontraron elementos`,noItemsMessage:`No hay registros para mostrar. Intente ajustar los filtros o agregar nuevos datos.`,showAll:`Mostrar todo`,pullToRefresh:`Tirar para actualizar`,refreshing:`Actualizando…`,share:`Compartir`,print:`Imprimir`,hideFieldsTitle:`Ocultar campos`,dataLimitReached:`Se muestran los primeros {{limit}} registros. Puede haber más datos disponibles.`,viewSettings:`Configuración de vista`,viewSettingsHint:`Agrupación, color, densidad y campos visibles.`,addGroup:`Agregar campo de grupo`,collapsedByDefault:`Contraído por defecto`,removeGroup:`Eliminar`,inlineEditShort:`Edición en línea`,inlineEditLabel:`Editar registros en línea (haga clic en una celda para editar)`,recordEditingTitle:`Edición de registros`},managedByBadge:{systemWritable:{short:`Esquema de la plataforma`,title:`Definido por la plataforma, editable por el administrador`,body:`El esquema de este objeto lo define la plataforma, pero sus filas son suyas: puede crearlas y editarlas aquí. Quién puede escribir lo determinan la administración delegada y la seguridad a nivel de registro, no esta insignia.`},config:{short:`Configuración`,title:`Configuración del administrador`,body:`Estas filas definen el comportamiento de la plataforma en tiempo de ejecución. Créelas aquí; los datos de tiempo de ejecución que producen viven en una tabla separada.`},system:{short:`Gestionado por el sistema`,title:`Gestionado por la plataforma`,body:`Las filas se crean automáticamente cuando se ejecutan acciones en el registro de origen. La lista es una superficie de supervisión de solo lectura; las acciones por fila (Aprobar, Retirar, Reenviar, …) están en cada fila.`},appendOnly:{short:`Solo lectura · Registro de auditoría`,title:`Registro histórico de solo lectura`,body:`Registro de auditoría inmutable. Las filas no se pueden crear, editar ni eliminar desde la interfaz: las escribe la plataforma cuando ocurren eventos. Use Exportar para descargarlas para revisión de cumplimiento.`},betterAuth:{short:`Identidad`,title:`Gestionado por el proveedor de identidad`,body:`El esquema de este objeto es propiedad de {{provider}}. Las ediciones directas omiten el hash de contraseñas, la validación de sesiones, las comprobaciones de dos factores y los hooks de auditoría. Gestione estos registros mediante los flujos de inicio de sesión, invitación y seguridad de su proveedor de autenticación.`}},kanban:{uncategorized:`Sin categoría`,columns:`columnas`,addCard:`Añadir tarjeta`,addColumn:`Añadir columna`,moveCard:`Mover tarjeta`,deleteCard:`Eliminar tarjeta`,deleteColumn:`Eliminar columna`,noCards:`Sin tarjetas`,cardTitlePlaceholder:`Escriba el título de la tarjeta…`,requiredFieldsTitle:`Complete los campos obligatorios`,requiredFieldsDescription:`Este movimiento hace que los campos siguientes sean obligatorios. Complételos para continuar.`},timeline:{bucket:{overdue:`Atrasado`,today:`Hoy`,tomorrow:`Mañana`,thisWeek:`Esta semana`,nextWeek:`Próxima semana`,later:`Más tarde`,noDate:`Sin fecha`,unassigned:`Sin asignar`},scale:{week:`Semana {{n}}`,quarter:`T{{quarter}} {{year}}`},gantt:{rowLabel:`Elementos`}},gantt:{viewMode:{day:`Día`,week:`Semana`,month:`Mes`,quarter:`Trimestre`,year:`Año`},row:{expand:`Expandir`,collapse:`Contraer`,open:`Abrir los detalles`},aria:{taskList:`Lista de tareas`},tooltip:{days:`d`},menu:{view:`Ver los detalles`,edit:`Editar en línea`,delete:`Eliminar`,addPredecessor:`Añadir predecesora…`,addSuccessor:`Añadir sucesora…`,removeDependency:`Quitar la dependencia`,noCandidates:`No hay tareas disponibles`,searchTasks:`Buscar tareas…`},delete:{title:`¿Eliminar esta tarea?`,body:`«{{title}}» se eliminará permanentemente. Esta acción no se puede deshacer.`,cancel:`Cancelar`,confirm:`Eliminar`,deleting:`Eliminando…`},drawer:{fallbackTitle:`Detalles de la tarea`},linkType:{fs:`Fin → Inicio`,ss:`Inicio → Inicio`,ff:`Fin → Fin`,sf:`Inicio → Fin`},linkEnd:{start:`Inicio`,end:`Fin`},link:{rejected:{self:`Una tarea no puede depender de sí misma.`,locked:`Esta fila está bloqueada y no puede recibir una nueva dependencia.`,group:`Una fila de resumen no puede recibir dependencias: vincule una de sus tareas.`,cycle:`Ese vínculo crearía una dependencia circular.`}},conflict:{title:`Conflicto de programación`,body:`Este movimiento entra en conflicto con las restricciones de dependencia. ¿Reprogramar automáticamente {{count}} tarea(s) afectada(s)?`,confirm:`Reprogramar automáticamente`,cancel:`Dejarlo como está`},autoScheduleDlg:{title:`Programación automática`,body:`¿Retrasar {{count}} tarea(s) para respetar los vínculos de dependencia?`,skipped:`{{count}} tarea(s) bloqueada(s) también incumplen los vínculos y se han omitido.`,confirm:`Aplicar`,cancel:`Cancelar`,none:`Todas las dependencias se cumplen: no hay nada que reprogramar.`},resource:{header:`Recurso`,peak:`Pico`,over:`sobrecargado`,empty:`No hay tareas que asignar.`},quickFilter:{all:`Todos`,clear:`Borrar filtros`,empty:`Sin opciones`,resultSummary:`Mostrando {shown} / {total} tareas`},readOnly:`Solo lectura`,readOnlyHint:`La edición está deshabilitada en esta vista.`,lockedHint:`Sin permiso de edición`,writeFailed:`Error al guardar: el cambio se ha revertido`,column:{taskName:`Nombre de tarea`,start:`Inicio`,end:`Fin`},toolbar:{thisWeek:`Esta semana`,thisMonth:`Este mes`,viewMode:`Granularidad de la línea de tiempo`,enterFullscreen:`Pantalla completa`,exitFullscreen:`Salir de pantalla completa`,criticalPath:`Resaltar la ruta crítica`,autoSchedule:`Programar automáticamente las dependencias`,exportPng:`Exportar como PNG`,exportPdf:`Exportar PDF`,saveLayout:`Guardar la disposición`,refresh:`Actualizar`,undo:`Deshacer`,redo:`Rehacer`,prevPeriod:`Período anterior`,nextPeriod:`Período siguiente`,zoomIn:`Acercar`,zoomOut:`Alejar`,jumpToToday:`Ir a hoy`,today:`Hoy`,showTaskList:`Mostrar lista de tareas`,hideTaskList:`Ocultar lista de tareas`}},view:{editViewConfig:`Editar configuración de vista`,rename:`Renombrar`,duplicateView:`Duplicar vista`,shareView:`Compartir vista`,setAsDefault:`Establecer como predeterminada`,pinView:`Fijar vista`,unpinView:`Desfijar vista`,changeViewType:`Cambiar tipo de vista`,deleteView:`Eliminar vista`,addView:`Añadir vista`,unsavedChanges:`Cambios sin guardar`,saveAsView:`Guardar como vista`,moreViews:`{{count}} más`,activeFilters:`Filtros activos`,activeSort:`Orden activo`,manageViews:`Administrar vistas`,manageAllViews:`Administrar todas las vistas…`,manageViewsDescription:`Reordenar, renombrar, fijar o eliminar todas las vistas de este objeto.`,searchViews:`Buscar vistas`,addNewView:`Agregar nueva vista`,done:`Listo`,noViewsFound:`Ninguna vista coincide con su búsqueda.`,dragToReorder:`Arrastrar para reordenar`,defaultView:`Vista predeterminada`,defaultBadge:`predeterminada`,tabActionsFor:`Acciones de vista para {{name}}`,readonlyAriaLabel:`Vista de solo lectura`,readonlyTooltip:`Vista del sistema — definida en el código, solo lectura.`},designer:{undo:`Deshacer`,redo:`Rehacer`},detail:{editInlineHint:`Haga doble clic para editar`,systemActor:`Sistema`,unknownUser:`Desconocido`,back:`Volver`,edit:`Editar`,editInline:`Editar`,save:`Guardar`,saveChanges:`Guardar cambios`,editFieldsInline:`Editar campos`,share:`Compartir`,duplicate:`Duplicar`,export:`Exportar`,viewHistory:`Ver historial`,delete:`Eliminar`,moreActions:`Más acciones`,addReaction:`Añadir reacción`,pageHeaderActions:`Acciones del encabezado de página`,emojiPicker:`Selector de emojis`,reactionCount:`{{emoji}} {{count}} reacciones`,reactionCountOne:`{{emoji}} {{count}} reacción`,recordDetail:`Detalle del registro`,recordDetailWithLabel:`Detalle de {{label}}`,openAsFullPage:`Abrir como página completa`,recordDetailOverlay:`Capa de detalle del registro para {{title}}.`,addToFavorites:`Añadir a favoritos`,removeFromFavorites:`Quitar de favoritos`,previousRecord:`Registro anterior`,nextRecord:`Siguiente registro`,recordOf:`{{current}} de {{total}}`,recordNotFound:`Registro no encontrado`,recordNotFoundDescription:`El registro que busca no existe o puede haber sido eliminado.`,goBack:`Volver`,details:`Detalles`,related:`Relacionados`,relatedRecords:`{{count}} registros`,relatedRecordOne:`{{count}} registro`,noRelatedRecords:`No se encontraron registros relacionados`,loading:`Cargando…`,copyToClipboard:`Copiar al portapapeles`,copied:`¡Copiado!`,deleteConfirmation:`¿Está seguro de que desea eliminar este registro?`,deleted:`Registro eliminado`,editRecord:`Editar registro`,viewAll:`Ver todo`,new:`Nuevo`,add:`Agregar`,emptyValue:`—`,comments:`Comentarios`,searchComments:`Buscar comentarios…`,addCommentPlaceholder:`Añadir comentario… (Ctrl+Enter para enviar)`,noMatchingComments:`No hay comentarios coincidentes`,noCommentsYet:`Aún no hay comentarios`,pinned:`Fijado`,pin:`Fijar`,unpin:`Desfijar`,justNow:`justo ahora`,minutesAgo:`hace {{count}} min`,hoursAgo:`hace {{count}} h`,daysAgo:`hace {{count}} d`,dropFilesToUpload:`Arrastra archivos aquí o haz clic para subir`,attachmentCount:`{{count}} archivo adjunto`,attachmentCountPlural:`{{count}} archivos adjuntos`,removeAttachment:`Eliminar adjunto`,attachments:`Adjuntos`,uploadAttachment:`Subir`,loadingAttachments:`Cargando adjuntos…`,noAttachments:`Aún no hay adjuntos. Suba un archivo para empezar.`,downloadAttachment:`Descargar`,deleteAttachment:`Eliminar adjunto`,attachmentDeleteDenied:`Solo quien lo subió o alguien que pueda editar este registro puede eliminar este adjunto.`,attachmentParentAccessDenied:`No tiene acceso para adjuntar archivos a este registro.`,attachmentDownloadDenied:`No tiene acceso para descargar este adjunto.`,attachmentAuthRequired:`Inicie sesión para descargar este adjunto.`,attachmentPermissionDenied:`No tiene permiso para hacer eso.`,unifiedDiff:`Vista unificada`,sideBySideDiff:`Vista lado a lado`,noChanges:`Sin cambios`,previousVersion:`Anterior`,currentVersion:`Actual`,discussion:`Discusión`,showDiscussion:`Mostrar discusión ({{count}})`,hideDiscussion:`Ocultar discusión`,bold:`Negrita (Ctrl+B)`,italic:`Cursiva (Ctrl+I)`,listFormat:`Lista`,inlineCode:`Código en línea`,mentionSomeone:`Mencionar a alguien`,preview:`Vista previa`,submitComment:`Enviar (Ctrl+Enter)`,sendComment:`Enviar`,writeComment:`Escribe un comentario…`,subscribedTooltip:`Suscrito — clic para cancelar suscripción`,unsubscribedTooltip:`Suscribirse a notificaciones`,firstRecord:`Primer registro (Inicio)`,previousRecordKey:`Registro anterior (←)`,nextRecordKey:`Siguiente registro (→)`,lastRecord:`Último registro (Fin)`,noRecords:`Sin registros`,searchWhileNavigating:`Buscar mientras navegas`,searchRecords:`Buscar registros…`,allActivity:`Toda la actividad`,commentsOnly:`Solo comentarios`,fieldChangesFilter:`Cambios de campo`,tasksOnly:`Solo tareas`,leaveCommentPlaceholder:`Deja un comentario… (Ctrl+Enter para enviar)`,noActivity:`Sin actividad registrada`,loadMore:`Cargar más`,edited:`(editado)`,via:`vía {{source}}`,viewSource:`Ver origen`,replyCount:`{{count}} respuesta`,replyCountPlural:`{{count}} respuestas`,replyPlaceholder:`Responder…`,filterActivity:`Filtrar actividad`,openDiscussion:`Abrir panel de discusión`,closeDiscussion:`Cerrar panel de discusión`,subscribeAriaLabel:`Suscribirse a notificaciones`,unsubscribeAriaLabel:`Cancelar suscripción a notificaciones`,clearSearch:`Borrar búsqueda`,saving:`Guardando…`,lockedByApproval:`Bloqueado para aprobación`,lockedTooltip:`Este registro tiene una solicitud de aprobación pendiente; la edición está bloqueada`,writeStrippedTitle:`Guardado, pero algunos campos no se aplicaron`,writeStrippedReadonly:`De solo lectura, por lo que no se aplicó: {{fields}}`,writeStrippedByState:`No editable en el estado actual de este registro, por lo que no se aplicó: {{fields}}`,approvalPendingEditable:`En aprobación · editable`,approvalPendingTooltip:`Este registro tiene una solicitud de aprobación pendiente; este paso todavía permite la edición`,approvalProgress:`Aprobaciones — {{got}} de {{need}}`,approvalProgressGroups:`Firmas — {{got}} de {{need}} grupos`,approvalProgressLabel:`Progreso de la aprobación`,approvalsPanelTitle:`Aprobaciones`,cancelApproval:`Cancelar aprobación`,cancelApprovalInFlight:`Cancelando…`,cancelApprovalTooltip:`Cancelar la solicitud de aprobación pendiente para desbloquear el registro`,cancelApprovalTooltipUnlocked:`Cancelar la solicitud de aprobación pendiente`,cancelApprovalFailed:`No se pudo cancelar la aprobación`,cancelApprovalUnavailable:`La cancelación de aprobaciones no es compatible con esta fuente de datos`,linkCopied:`Enlace copiado al portapapeles`,linkCopyFailed:`No se pudo copiar el enlace`,cancel:`Cancelar`,cancelEdit:`Descartar cambios`,sectionMoreDetails:`Más detalles`,concurrentUpdateTitle:`Este registro fue modificado por otra persona`,concurrentUpdateDescription:`Otro usuario guardó una versión más reciente de {{field}} mientras editaba. Elija cómo resolver el conflicto.`,concurrentUpdateYourEdit:`Su edición`,concurrentUpdateCurrentValue:`Valor actual`,concurrentUpdateUpdatedBy:`Actualizado por {{name}}`,concurrentUpdateUpdatedAt:`Actualizado el {{when}}`,concurrentUpdateReload:`Cargar versión actual`,concurrentUpdateOverwrite:`Sobrescribir de todos modos`,concurrentUpdateCancel:`Cancelar`,concurrentUpdateRecordLabel:`este registro`,openInNewTab:`Abrir en nueva pestaña`,activity:`Actividad`,history:`Historial`,historyEmpty:`Aún no hay historial`,editRow:`Editar`,deleteRow:`Eliminar`,deleteRowConfirmation:`¿Eliminar este registro?`,deleteRowTitle:`Eliminar registro`,actions:`Acciones`,previousPage:`Anterior`,nextPage:`Siguiente`,pageOf:`Página {{current}} de {{total}}`,sortBy:`Ordenar por`,filterPlaceholder:`Filtrar…`,highlightFields:`Campos clave`,createdBy:`Creado por`,updatedBy:`Actualizado por`,created:`Creado`,updated:`Actualizado`,showEmptyRelated:`+ {{count}} vacíos`,showEmptyRelated_one:`+ {{count}} vacío`,showEmptyRelated_other:`+ {{count}} vacíos`,copyEmail:`Copiar correo`,copyPhone:`Copiar teléfono`,copyRecordId:`Copiar ID de registro`,showEmptyFields:`Mostrar {{count}} campos vacíos`,hideEmptyFields:`Ocultar campos vacíos`,noValue:`Sin valor`},chart:{noData:`No hay datos de gráfico disponibles`,loading:`Cargando gráfico…`,nullCategory:`(Sin especificar)`},map:{searchLocations:`Buscar ubicaciones…`,locationDetails:`Detalles de ubicación`,markersCount:`{{count}} marcadores`,invalidCoordinates:`{{count}} registro con coordenadas faltantes o inválidas excluido del mapa.`,invalidCoordinatesPlural:`{{count}} registros con coordenadas faltantes o inválidas excluidos del mapa.`},workflow:{draft:`Borrador`,active:`Activo`,paused:`En pausa`,completed:`Completado`,cancelled:`Cancelado`,save:`Guardar`,publish:`Publicar`,addNode:`Añadir nodo`,workflowFlow:`Flujo de trabajo`,properties:`Propiedades`,connections:`Conexiones`,quickConnect:`Conexión rápida`,fromPlaceholder:`Desde…`,toPlaceholder:`Hasta…`,connect:`Conectar`,label:`Etiqueta`,type:`Tipo`,description:`Descripción`,assignee:`Responsable`,assigneeType:`Tipo de responsable`,user:`Usuario`,role:`Rol`,group:`Grupo`,expression:`Expresión`,timeoutMinutes:`Tiempo límite (minutos)`,selectNodeToEdit:`Selecciona un nodo para editar sus propiedades`,workflowTitle:`Título del flujo de trabajo`,newWorkflow:`Nuevo flujo de trabajo`,outConnections:`{{count}} salida(s)`,start:`Inicio`,end:`Fin`,task:`Tarea`,userTask:`Tarea de usuario`,serviceTask:`Tarea de servicio`,scriptTask:`Tarea de script`,approval:`Aprobación`,condition:`Condición`,parallelGateway:`Compuerta paralela`,joinGateway:`Compuerta de unión`,boundaryEvent:`Evento límite`,delay:`Retraso`,notification:`Notificación`,webhook:`Webhook`,allowConcurrency:`Permitir (ejecución simultánea)`,forbidConcurrency:`Prohibir (omitir nuevos)`,replaceConcurrency:`Reemplazar (cancelar existentes)`,queueConcurrency:`Cola (ejecutar después)`,conditionEvent:`Condición`,manualEvent:`Manual`,webhookEvent:`Webhook`,timerEvent:`Temporizador`,signalEvent:`Señal`,versionHistory:`Historial de versiones`,importBpmn:`Importar BPMN`,exportBpmn:`Exportar BPMN`,undo:`Deshacer`,redo:`Rehacer`,resetZoom:`Restablecer zoom`},dashboard:{noRows:`Sin filas`,loading:`Cargando…`,pickMeasures:`Elija medidas (valores) para este widget de dataset.`,datasetUnsupported:`Esta fuente de datos no admite consultas de dataset.`,details:`Detalles`,exportCsv:`Exportar CSV`,openInList:`Abrir en la lista`,filters:{label:`Filtros del panel`,dateRange:`Intervalo de fechas`,allTime:`Todo el periodo`,custom:`Personalizado…`,all:`Todo`,reset:`Restablecer`,range:{today:`Hoy`,yesterday:`Ayer`,this_week:`Esta semana`,last_week:`La semana pasada`,this_month:`Este mes`,last_month:`El mes pasado`,this_quarter:`Este trimestre`,last_quarter:`El trimestre pasado`,this_year:`Este año`,last_year:`El año pasado`,last_7_days:`Últimos 7 días`,last_30_days:`Últimos 30 días`,last_90_days:`Últimos 90 días`}},addWidget:`Añadir widget`,removeWidget:`Eliminar widget`,editLayout:`Editar diseño`,saveLayout:`Guardar diseño`,resetLayout:`Restablecer diseño`,total:`Total`,noDataAvailable:`Sin datos disponibles`,noDataSourceFor:`Sin fuente de datos para`,trend:{vsLastQuarter:`vs. trimestre anterior`,vsLastMonth:`vs. mes anterior`,vsLastWeek:`vs. semana anterior`,vsLastYear:`vs. año anterior`,vsYesterday:`vs. ayer`,vsPreviousPeriod:`vs. período anterior`}},configPanel:{save:`Guardar`,discard:`Descartar`,close:`Cerrar`,layout:`Diseño`,columns:`Columnas`,gap:`Espaciado`,rowHeight:`Altura de fila`,data:`Datos`,refreshInterval:`Intervalo de actualización`,appearance:`Apariencia`,title:`Título`,showDescription:`Mostrar descripción`,theme:`Tema`,configuration:`Configuración`,general:`General`,advanced:`Avanzado`},appDesigner:{createApp:`Crear aplicación`,editApp:`Editar aplicación`,basicInfo:`Información básica`,objects:`Objetos`,navigation:`Navegación`,branding:`Marca`,appName:`Nombre de la app`,appTitle:`Título`,appDescription:`Descripción`,appIcon:`Icono`,template:`Plantilla`,layout:`Diseño`,layoutSidebar:`Barra lateral`,layoutHeader:`Encabezado`,layoutEmpty:`Vacío`,selectObjects:`Seleccionar objetos`,searchObjects:`Buscar objetos…`,selectAll:`Seleccionar todo`,deselectAll:`Deseleccionar todo`,navBuilder:`Constructor de navegación`,addGroup:`Agregar grupo`,addUrl:`Agregar URL`,addSeparator:`Agregar separador`,noNavItems:`Aún no hay elementos de navegación.`,logoUrl:`URL del logo`,primaryColor:`Color primario`,faviconUrl:`URL del favicon`,preview:`Vista previa`,complete:`Completar`,snakeCaseHint:`Debe ser snake_case (ej. my_app)`,modeEdit:`Editar`,modePreview:`Vista previa`,modeCode:`Código`,addWidget:`Agregar widget`,widgetProperties:`Propiedades del widget`,dataSource:`Fuente de datos`,valueField:`Campo de valor`,aggregate:`Agregar`,colorVariant:`Variante de color`,addComponent:`Agregar componente`,componentProperties:`Propiedades del componente`,viewType:`Tipo de vista`,fields:`Campos`,toolbar:`Barra de herramientas`,showSearch:`Mostrar búsqueda`,showFilters:`Mostrar filtros`,showSort:`Mostrar orden`,appearance:`Apariencia`,rowHeight:`Altura de fila`,stripedRows:`Filas alternadas`,bordered:`Con borde`,livePreview:`Vista previa en vivo`,stepBasicDesc:`Nombre, título y diseño`,stepObjectsDesc:`Seleccionar objetos de negocio`,stepNavigationDesc:`Construir árbol de navegación`,stepBrandingDesc:`Logo, colores y favicon`,noObjectsFound:`No se encontraron objetos.`,noNavItemsHint:`Aún no hay elementos de navegación. Seleccione objetos en el paso anterior o agregue elementos manualmente.`,separator:`Separador`,separatorLabel:`— Separador —`,newGroup:`Nuevo grupo`,newLink:`Nuevo enlace`,saveDraft:`Guardar borrador`,cancelConfirmTitle:`¿Descartar cambios?`,cancelConfirmMessage:`Tiene cambios sin guardar. ¿Está seguro de que desea cancelar?`,confirmDiscard:`Descartar`,keepEditing:`Seguir editando`,navNoItems:`Sin elementos de navegación. Haga clic en los botones de arriba para agregar elementos.`,navNoPreviewItems:`Sin elementos`,navLivePreview:`Vista previa en vivo`,navCollapseGroup:`Contraer grupo`,navExpandGroup:`Expandir grupo`,navAddChild:`Agregar hijo`,navMoveUp:`Mover arriba`,navMoveDown:`Mover abajo`,navRemove:`Eliminar`,navObjectPage:`Página de objeto`,navDashboard:`Panel de control`,navPage:`Página`,navReport:`Informe`,navGroup:`Grupo`,navUrl:`URL`,navSeparator:`Separador`,navTypeObject:`Objeto`,navTypeDashboard:`Panel`,navTypePage:`Página`,navTypeReport:`Informe`,navTypeUrl:`URL`,navTypeGroup:`Grupo`,navTypeSeparator:`Separador`,navTypeAction:`Acción`,navTypeComponent:`Componente`,navEditIcon:`Editar icono`,navToggleVisible:`Alternar visibilidad`,navHidden:`Oculto`,navExportSchema:`Exportar JSON`,navImportSchema:`Importar JSON`,navExportSuccess:`Esquema de navegación exportado`,navImportSuccess:`Esquema de navegación importado`,navImportError:`JSON de navegación inválido`,navIconPlaceholder:`Nombre del icono (ej. Users)`,dashboardEditor:`Editor de panel`,noWidgets:`Sin widgets. Haga clic en un botón arriba para agregar uno.`,widgetLayoutSize:`Tamaño de diseño`,widgetWidth:`Ancho`,widgetHeight:`Alto`,dashboardPreview:`Vista previa del panel`,noWidgetsPreview:`Sin widgets para previsualizar`,pageCanvasEditor:`Editor de lienzo de página`,emptyPage:`Página vacía. Haga clic en un botón arriba para agregar un componente.`,pagePreview:`Vista previa de página`,noComponentsPreview:`Sin componentes para previsualizar`,modePage:`Página`,modeDashboard:`Panel`,undo:`Deshacer`,redo:`Rehacer`,brandingEditor:`Editor de marca`,brandingExport:`Exportar JSON`,brandingImport:`Importar JSON`,brandingPreview:`Vista previa`,brandingSampleButton:`Botón de muestra`,brandingSampleText:`Así lucirá su tema de marca.`,colorPalette:`Paleta de colores`,fontFamily:`Familia tipográfica`,fontDefault:`Predeterminada (sistema)`,modeLight:`Claro`,modeDark:`Oscuro`,mobilePreview:`Vista previa móvil`,objectManager:{title:`Administrador de objetos`,addObject:`Nuevo objeto`,searchPlaceholder:`Buscar objetos…`,noObjects:`No se encontraron objetos.`,objectName:`Nombre API`,objectLabel:`Etiqueta`,pluralLabel:`Etiqueta plural`,icon:`Icono`,selectIcon:`Seleccionar icono…`,group:`Grupo`,noGroup:`Sin grupo`,sortOrder:`Orden de clasificación`,enabled:`Habilitado`,relationships:`Relaciones`,systemBadge:`Sistema`,fieldCount:`{{count}} campos`,ungrouped:`Sin grupo`,deleteConfirmTitle:`¿Eliminar objeto?`,deleteConfirmMessage:`Esto eliminará permanentemente el objeto y todos sus campos. Esta acción no se puede deshacer.`},fieldDesigner:{title:`Diseñador de campos`,addField:`Nuevo campo`,searchPlaceholder:`Buscar campos…`,allTypes:`Todos los tipos`,noFields:`No se encontraron campos.`,fieldName:`Nombre API`,fieldLabel:`Etiqueta`,fieldType:`Tipo`,fieldGroup:`Grupo`,description:`Descripción`,required:`Obligatorio`,unique:`Único`,readOnly:`Solo lectura`,hidden:`Oculto`,indexed:`Indexado`,externalId:`ID externo`,trackHistory:`Rastrear historial`,defaultValue:`Valor predeterminado`,placeholder:`Marcador de posición`,referenceTo:`Referencia a`,formula:`Fórmula`,options:`Opciones`,addOption:`Agregar opción`,validationRules:`Reglas de validación`,addRule:`Agregar regla`,systemBadge:`Sistema`,ungrouped:`General`,deleteConfirmTitle:`¿Eliminar campo?`,deleteConfirmMessage:`Esto eliminará permanentemente el campo. Los datos existentes en este campo se perderán.`,basicSection:`Básico`,typeSpecificSection:`Configuración de tipo`,advancedSection:`Avanzado`,typeCategory:{text:`Texto`,number:`Número`,date:`Fecha y hora`,choice:`Elección`,relation:`Relación`,advanced:`Avanzado`}}},console:{saveAdvisoryTitle:`Guardado: la comprobación de creación generó {{count}} recomendación(es)`,settingsHub:{title:`Configuración`,subtitle:`Configure su espacio de trabajo, las integraciones y los indicadores de funciones.`,loadError:`No se pudo cargar la configuración`,empty:`No hay configuraciones registradas. Los plugins pueden registrar manifiestos de configuración mediante el SettingsService.`,settingsCount:`{{n}} configuraciones`,beta:`Beta`,categories:{Workspace:`Espacio de trabajo`,Communication:`Comunicación`,Security:`Seguridad`,Infrastructure:`Infraestructura`,Beta:`Beta`,Other:`Otros`}},objectData:{badge:`Datos`,description:`Segmento de datos definido por la URL — no vinculado a ninguna vista guardada.`,filteredBy:`Filtrado por`,removeFilter:`Quitar el filtro {{field}}`,saveAsView:`Guardar como vista`,noAccessTitle:`Acceso denegado`,noAccess:`No tiene permiso para ver estos datos.`},identityImport:{policyTitle:`Configuración de inicio de sesión para los usuarios importados`,policy:{auto:`Automático (recomendado)`,invite:`Enviar invitaciones`,temporary:`Contraseñas temporales`,none:`Sin contraseña (solo identidad)`},policyHint:{auto:`Los usuarios localizables reciben una invitación (correo o SMS); quienes no sean localizables reciben una contraseña de un solo uso, mostrada UNA SOLA VEZ en la pantalla de resultados. Funciona con o sin servicio de correo/SMS.`,invite:`Cada usuario creado recibe un correo para establecer su contraseña (o un SMS de invitación en las filas que solo tienen teléfono). Requiere un servicio de correo/SMS configurado — las filas no localizables fallan.`,temporary:`Para despliegues sin correo/SMS: cada usuario creado recibe una contraseña de un solo uso, mostrada UNA SOLA VEZ en la pantalla de resultados. El primer inicio de sesión obliga a cambiarla.`,none:`Los usuarios inician sesión primero con un OTP por teléfono, un enlace mágico o un enlace de restablecimiento, y luego establecen su propia contraseña.`},passwordsNote:`Contraseñas temporales — se muestran una sola vez y nunca se almacenan. Guárdelas ahora; cada usuario debe cambiar la suya en el primer inicio de sesión.`,passwordsMore:`Se han omitido más entradas — use la descarga.`,passwordsDownload:`Descargar CSV`},ai:{usage:{title:`Uso de IA`,meterBuild:`Crear`,meterAsk:`Preguntar`,statusOk:`Queda bastante`,statusLow:`Se está agotando`,statusFull:`Límite alcanzado`,resetsDaily:`Se restablece esta noche`,resetsMonthly:`Se restablece en el próximo ciclo`,ctaUpgrade:`Mejore el plan para continuar`,ctaTopUp:`Añada créditos para continuar`,ariaLabel:`Uso de IA: {{status}}`},workspaceTitle:`Espacio de trabajo de IA`,workspaceSubtitle:`Pregunte, inspeccione y retome conversaciones`,openChats:`Abrir chats`,chats:`Chats`,chatsDescription:`Explore y gestione las conversaciones con la IA.`,share:`Compartir`,shareTitle:`Compartir esta conversación`,shareDisabledTitle:`Empiece a chatear para habilitar el uso compartido`,newChat:`Nuevo`,searchChats:`Buscar chats…`,noChatsYet:`Todavía no hay chats`,noChatsDescription:`Inicie una conversación nueva para verla aquí.`,noMatchingChats:`No hay chats coincidentes.`,newConversation:`Nueva conversación`,renameConversation:`Cambiar el nombre de la conversación`,deleteConversation:`Eliminar conversación`,saveRename:`Guardar el nombre`,cancelRename:`Cancelar el cambio de nombre`,loadingHistory:`Cargando el historial de la conversación…`,conversationReady:`Conversación lista`,preparingConversation:`Preparando una nueva conversación`,offlineDemoMode:`Modo de demostración sin conexión — lista de agentes no disponible`,sendFailedRateLimited:`Está enviando mensajes demasiado rápido. Su mensaje se conserva abajo — espere un momento y vuelva a intentarlo.`,sendFailedGeneric:`No se pudo enviar su mensaje. Se conserva abajo — inténtelo de nuevo.`,askAgent:`Pregunte a {{agent}}…`,assistant:`Asistente`,liveCanvas:`Vista previa en vivo — {{app}} (borrador)`,liveCanvasUnlisted:`Aplicación en vivo — {{app}} (no listada hasta su publicación)`,loadingAgents:`Cargando agentes…`,askAnything:`Pregunte lo que quiera…`,emptyTitle:`Iniciar una conversación`,emptyDescription:`Pregunte lo que quiera — el asistente tiene acceso al contexto de su aplicación actual.`,switchAssistant:`Cambiar de asistente`,chooseAgent:`Elegir asistente…`,empty:{build:{title:`Crear con IA`,description:`Describa una aplicación o un flujo de trabajo en lenguaje natural — yo redacto los objetos, las pantallas y las automatizaciones, y luego usted revisa y publica.`},ask:{title:`Pregunte a sus datos`,description:`Haga preguntas sobre sus registros — recuentos, listas y resúmenes de los datos a los que tiene acceso.`},editApp:{title:`Editando «{{app}}»`,titleGeneric:`Editar esta aplicación`,description:`¿Qué desea cambiar? Modifico esta aplicación sobre la marcha — añadir un campo, un objeto, una vista o una automatización, o ajustar lo que ya existe.`}},clearConversation:`Borrar`,sendHint:`para enviar`,agentActivity:`Actividad del agente`,toolCompleted:`Completado`,toolRunning:`En ejecución`,toolAwaitingApproval:`Esperando aprobación`,toolFailed:`Error`,toolDetailsHidden:`Las entradas de las herramientas y los resultados sin procesar están ocultos en esta vista.`,copy:`Copiar`,copied:`Copiado`,regenerate:`Regenerar`,model:`Modelo`,submit:`Enviar`,uploadFiles:`Subir archivos`,stopResponse:`Detener la respuesta`,trace:`traza`,viewTrace:`Ver la traza`,nextSteps:`Qué sigue`,publishDrafts:`Publicar`,publishOk:`Publicado — los objetos ya están activos.`,seedWarn:`Publicado, pero no se pudieron cargar algunos datos de ejemplo.`,openBuiltApp:`Abrir la aplicación`,designBuiltApp:`Diseñar en Studio`,previewDraft:`Vista previa`,previewApp:`Vista previa de la aplicación`,resizeSplit:`Redimensionar el chat y la vista previa`,hideChats:`Ocultar los chats`,showChats:`Mostrar los chats`,planTitle:`Plan propuesto`,planQuestions:`Confirmar antes de crear`,planAssumptions:`Supuestos`,planApproveHint:`Responda para aprobar o ajustar este plan.`,planApprove:`Crearlo`,planAdjust:`Ajustar`,justNow:`ahora mismo`,minutesAgo:`hace {{count}} min`,hoursAgo:`hace {{count}} h`,daysAgo:`hace {{count}} d`,agentLabels:{ask:`Preguntar`,build:`Crear`,dataChat:`Asistente`,metadataAssistant:`Asistente de metadatos`},suggestions:{dataChat:{userCount:`¿Cuántos usuarios hay en el sistema? Enumera sus correos electrónicos.`,recentRecords:`Enumera los 5 registros creados más recientemente.`,recordCounts:`Cuenta los registros de cada objeto.`},metadataAssistant:{buildCrm:`Crea un CRM de ventas — clientes, contactos y un embudo de oportunidades que pueda totalizar por etapa.`,buildApp:`Crea un seguimiento de proyectos — proyectos, tareas con responsables y fechas de vencimiento, y un tablero por estado.`,buildFlow:`Diseña una mesa de ayuda — tickets con prioridad, un flujo de estados y vínculos con los clientes.`,buildInventory:`Crea una aplicación de inventario — productos, niveles de stock, proveedores y visibilidad de stock bajo.`,buildRecruiting:`Crea un seguimiento de candidaturas — candidatos, vacantes, etapas de entrevista y notas.`},generic:{help:`¿En qué puedes ayudarme?`,availableObjects:`Enumera los objetos de datos disponibles.`,recentActivity:`Resume mi actividad reciente.`},editApp:{addField:`Añade un campo a uno de los objetos.`,addObject:`Añade un objeto nuevo y relaciónalo con uno existente.`,addDashboard:`Añade un panel para las métricas clave.`,addAutomation:`Añade una automatización — una aprobación, un flujo de estados o una notificación.`}},changesTitle:`Confirmar cambios`,changesConfirmed:`Confirmado`,changesConfirm:`Confirmar`,changesConfirmHint:`Responda para confirmar o ajustar este cambio.`,changeVerb:{createObject:`Crear objeto`,addField:`Añadir campo`,modifyField:`Modificar campo`,deleteField:`Eliminar campo`,createMetadata:`Crear`,updateMetadata:`Modificar`,createSeed:`Generar datos de ejemplo`,createPackage:`Crear paquete de aplicación`},collapseToDock:`Contraer al panel lateral`,switchApp:`Cambiar de aplicación`,switchAppLabel:`Conversaciones de creación por aplicación`,newApp:`Nueva aplicación`,connectionWaiting:`Esperando al servidor…`,connectionStalled:`Sigue en proceso…`,connectionOffline:`Conexión perdida — reconectando…`,designingPlan:`Diseñando su aplicación…`,designingPlanHint:{data:`Trazando los datos que va a registrar…`,objects:`Dando forma a los objetos y sus campos…`,relations:`Conectando los registros relacionados…`,lookups:`Configurando las relaciones y los campos de búsqueda…`,views:`Planificando las pantallas y las vistas…`,forms:`Organizando los formularios y las listas…`,defaults:`Agregando valores predeterminados y validaciones razonables…`,dashboard:`Bosquejando un panel para el seguimiento…`,review:`Comprobando que la estructura encaje…`,finalize:`Reuniendo el plan…`},planBuilding:`Creando…`,planBuilt:`Creado`,planDeferred:`Aún no creado`,planReady:`El plan está listo. Créelo ahora o dígame qué ajustar.`,published:`Publicado`,publishFailed:`Error al publicar`,unavailableTitle:`Asistente de IA no disponible`,unavailableDescription:`Esta implementación no tiene habilitado un asistente de IA. Todo lo demás funciona con normalidad.`,unavailableError:`No se pudo contactar con el servicio de IA. Puede estar temporalmente sin conexión — reinténtelo o vuelva al inicio.`,unavailableRetry:`Reintentar`,unavailableHome:`Volver al inicio`,dock:{title:`Asistente`,description:`Chat con el asistente de IA`,resize:`Redimensionar el chat`,collapse:`Contraer el chat`,maximize:`Abrir como página completa`,open:`Abrir el asistente`},group:{today:`Hoy`,yesterday:`Ayer`,previous7Days:`7 días anteriores`,previous30Days:`30 días anteriores`,older:`Anteriores`}},title:`Consola ObjectStack`,initializing:`Inicializando aplicación…`,loadingHint:`Configurar un entorno nuevo puede tardar unos momentos.`,breadcrumb:{dashboards:`Paneles`,pages:`Páginas`,reports:`Informes`,system:`Sistema`},settingsView:{backToHub:`Toda la configuración`,back:`Atrás`,noNamespace:`No hay ningún espacio de nombres seleccionado.`,loadError:`No se pudo cargar la configuración`,saved:`Configuración guardada`,saveFailed:`Error al guardar`,lockedByEnv:`Bloqueado por el entorno: {{key}}`,lockedByEnvNoKey:`Bloqueado por el entorno`,actionSucceeded:`La acción se completó correctamente`,actionFailed:`La acción falló`,discard:`Descartar`,saveChanges:`Guardar cambios`,unsavedCount:`{{count}} cambios sin guardar`,unsavedCount_one:`{{count}} cambio sin guardar`,unsavedCount_other:`{{count}} cambios sin guardar`,cryptoRefusalTitle:`Esta instalación no puede cifrar secretos`,cryptoRefusalSubjectSuffix:`está declarado como cifrado, por lo que no se escribió nada.`,cryptoRefusalNoSubject:`El valor declarado como cifrado fue rechazado, por lo que no se escribió nada.`,cryptoRefusalToast:`No se pueden cifrar los secretos: {{subject}}`,cryptoRefusalToastNoSubject:`No se pueden cifrar los secretos`},loadingSteps:{connecting:`Conectando a la fuente de datos`,loadingConfig:`Cargando configuración`,preparingWorkspace:`Preparando espacio de trabajo`},error:{connectionFailed:`No se puede conectar al servidor`,serverUnreachable:`El servidor {{url}} no está accesible.`,checkServer:`Compruebe su conexión de red o que el backend esté en ejecución.`,timeout:`Tiempo de conexión agotado tras 10 segundos.`},actions:{retry:`Reintentar`,retrying:`Reintentando…`},serverAction:{openingTitle:`Abriendo…`,openingBody:`Abriendo… esto puede tardar un momento.`,popupBlockedTitle:`Ventana emergente bloqueada`,popupBlockedDescription:`El navegador bloqueó la apertura de la nueva pestaña.`,popupBlockedAction:`Abrir en una pestaña nueva`},shortcuts:{title:`Atajos de teclado`,description:`Referencia rápida de todos los atajos de teclado disponibles.`,groups:{general:`General`,navigation:`Navegación`,dataViews:`Vistas de datos`,aiChat:`Asistente de IA`,preferences:`Preferencias`},openCommandPalette:`Abrir paleta de comandos`,showShortcuts:`Mostrar atajos de teclado`,closeDialog:`Cerrar diálogo / panel`,toggleSidebar:`Alternar barra lateral`,focusSearch:`Enfocar búsqueda`,createRecord:`Crear nuevo registro`,refreshData:`Actualizar datos`,editRecord:`Editar registro seleccionado`,newChat:`Nuevo chat`,toggleChatsList:`Alternar lista de chats`,toggleDarkMode:`Alternar modo oscuro`},commandPalette:{title:`Paleta de comandos`,placeholder:`Escriba un comando o busque…`,noResults:`No se encontraron resultados.`,objects:`Objetos`,dashboards:`Paneles`,pages:`Páginas`,reports:`Informes`,switchApp:`Cambiar aplicación`,current:`Actual`,preferences:`Preferencias`,lightTheme:`Tema claro`,darkTheme:`Tema oscuro`,systemTheme:`Tema del sistema`,actions:`Acciones`,openFullSearch:`Abrir página de búsqueda completa`,createApp:`Crear nueva aplicación`,searching:`Buscando…`,records:`Registros`,recentRecords:`Visto recientemente`},errors:{somethingWentWrong:`Algo salió mal`,unexpectedError:`Ocurrió un error inesperado al renderizar esta vista.`,tryAgain:`Intentar de nuevo`,goHome:`Ir al inicio`,errorDetails:`Detalles del error (solo desarrollo)`},notFound:{title:`Página no encontrada`,description:`La URL que siguió no coincide con ninguna vista de esta aplicación.`,back:`Volver`},theme:{toggle:`Cambiar tema`,light:`Claro`,dark:`Oscuro`,system:`Sistema`},objectView:{viewTypeTree:`Árbol`,viewTypeTreeDesc:`Anida los registros autorreferenciados en una jerarquía mediante un campo principal.`,parentField:`Campo principal`,parentFieldHelp:`El campo que apunta al registro principal (mismo objeto) y define la jerarquía. Solo son válidos los campos autorreferenciados.`,viewName:`Nombre`,viewNameHelp:`Clave técnica (snake_case). Se rellena automáticamente a partir del título — edítela si lo desea.`,viewNameRequired:`Introduzca una clave (minúsculas, números, guion bajo). No se rellena automáticamente con títulos no latinos.`,viewNameInvalid:`Use minúsculas, números y guiones bajos; empiece por una letra o un guion bajo.`,systemViewReadonly:`Vista del sistema definida en el código: solo lectura.`,cannotEditMetaView:`Esta vista está integrada y definida en el código: no se puede modificar.`,cannotDeleteMetaView:`Esta vista está integrada y definida en el código: no se puede eliminar.`,expandToPage:`Abrir como página completa`,objectNotFound:`Objeto no encontrado`,objectNotFoundDescription:`El objeto "{{objectName}}" no existe en la configuración actual.`,objectNotFoundHint:`Verifique la configuración de navegación de su aplicación o seleccione un objeto diferente en la barra lateral.`,filterOrNotSavable:`Este filtro une las condiciones con O, algo que una vista guardada aún no puede almacenar. Se sigue aplicando a esta lista: quite la agrupación O para guardarlo en la vista.`,filterNestedNotSavable:`Este filtro usa grupos de condiciones anidados, que una vista guardada no puede almacenar. Conviértalo en una única lista de condiciones para guardarlo en la vista.`,allRecords:`Todos los registros`,exitDesignMode:`Salir del modo de diseño`,enterDesignMode:`Entrar en modo de diseño`,metadataInspector:`Inspector de metadatos`,editView:`Editar vista`,addView:`Agregar vista`,designTools:`Herramientas de diseño`,new:`Nuevo`,configureView:`Configurar vista`,closePanel:`Cerrar panel`,page:`Página`,pageConfigHint:`Barra de herramientas, navegación y configuración del shell de vista`,listConfigHint:`Renderizado de datos, columnas y apariencia para este tipo de lista`,general:`General`,generalHint:`Título, descripción y tipo de la vista`,toolbar:`Barra de herramientas`,toolbarHint:`Búsqueda, filtro, orden, agrupación y alternancia de densidad`,toolbarEnabledCount:`{{count}} de {{total}} habilitados`,navigationSection:`Navegación`,navigationHint:`Comportamiento al hacer clic en la fila y configuración de la vista detallada`,records:`Registros`,recordsHint:`Modo de selección, agregar registro y edición en línea`,exportPrint:`Exportar e imprimir`,exportPrintHint:`Formatos de exportación, impresión y visualización del recuento de registros`,showAllFields:`Mostrar todo`,hideAllFields:`Ocultar todo`,searchFields:`Buscar campos…`,title:`Título`,description:`Descripción`,data:`Datos`,source:`Fuente`,columns:`Columnas`,filterBy:`Filtrar por`,sortBy:`Ordenar por`,appearance:`Apariencia`,showDescription:`Mostrar descripción`,viewType:`Tipo de vista`,userFilters:`Filtros de usuario`,enableSearch:`Habilitar búsqueda`,enableFilter:`Habilitar filtro`,enableSort:`Habilitar ordenamiento`,enableHideFields:`Habilitar ocultar campos`,enableGroup:`Habilitar agrupación`,enableColor:`Habilitar color`,enableDensity:`Habilitar densidad`,userActions:`Acciones de usuario`,addRecordViaForm:`Agregar registros mediante formulario`,advanced:`Avanzado`,allowExport:`Permitir exportación`,recordCount:`{{count}} registros`,noDescription:`Sin descripción`,none:`Ninguno`,columnsConfigured:`{{count}} columnas`,save:`Guardar`,discard:`Descartar`,createView:`Crear vista`,newView:`Nueva vista`,typeOptions:`Opciones de tipo`,groupByField:`Campo de agrupación`,startDateField:`Campo de fecha de inicio`,titleField:`Campo de título`,latitudeField:`Campo de latitud`,longitudeField:`Campo de longitud`,imageField:`Campo de imagen`,dateField:`Campo de fecha`,selectField:`Seleccionar campo…`,gridOptionsHint:`La vista de cuadrícula usa las columnas configuradas arriba.`,groupBy:`Agrupar por`,prefixField:`Campo de prefijo`,fields:`Campos`,fieldsVisible:`{{count}} visibles`,sortsCount:`{{count}} ordenamientos`,filtersCount:`{{count}} filtros`,endDateField:`Campo de fecha de fin`,color:`Color`,fieldTextColor:`Color del texto del campo`,rowHeight:`Altura de fila`,wrapHeaders:`Ajustar encabezados`,showFieldDescriptions:`Mostrar descripciones de campos`,collapseAllByDefault:`Contraer todo por defecto`,striped:`Filas alternadas`,bordered:`Celdas con borde`,inlineEdit:`Editar registros en línea`,addDeleteRecordsInline:`Agregar/eliminar registros en línea`,clickIntoRecordDetails:`Clic para detalles del registro`,navigationMode:`Modo de navegación`,navigationWidth:`Ancho de navegación`,navigationWidthHint:`Disponible para los modos de navegación cajón, modal y dividido`,openNewTab:`Abrir en nueva pestaña`,openNewTabHint:`Disponible para los modos de navegación página y nueva ventana`,import:`Importar`,importTitle:`Importar desde CSV`,importedToast:`{{count}} fila(s) importada(s).`,importedWithSkipped:`{{ok}} fila(s) importada(s); {{skipped}} omitida(s).`,showAdvancedSettings:`Mostrar configuración avanzada`,showFewerSettings:`Mostrar menos configuraciones`,createViewDesc:`Elija un tipo de vista y asígnele un nombre. Todas las configuraciones se pueden cambiar después.`,cancel:`Cancelar`,create:`Crear`,delete:`Eliminar`,deleteViewTitle:`Eliminar vista`,deleteViewConfirm:`¿Eliminar la vista "{{name}}"? Esto no se puede deshacer.`,bulkDeleteConfirm:`¿Eliminar {{count}} registros seleccionados? Esto no se puede deshacer.`,duplicateViewName:`Ya existe una vista con ese nombre.`,viewTypeGrid:`Cuadrícula`,viewTypeGridDesc:`Tabla tipo hoja de cálculo de registros.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Tarjetas agrupadas en columnas por un campo de selección única.`,viewTypeCalendar:`Calendario`,viewTypeCalendarDesc:`Registros colocados por fecha en un calendario mensual.`,viewTypeGallery:`Galería`,viewTypeGalleryDesc:`Tarjetas de imagen grandes de un campo de adjunto.`,viewTypeTimeline:`Línea de tiempo`,viewTypeTimelineDesc:`Registros a lo largo de un eje de tiempo horizontal.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Barras de proyecto con inicio/fin y dependencias.`,viewTypeMap:`Mapa`,viewTypeMapDesc:`Marcadores geográficos de campos de latitud/longitud.`,viewTypeChart:`Gráfico`,viewTypeChartDesc:`Gráficos de barras/líneas/sectores agregados.`,groupByFieldHelp:`El tablero Kanban agrupa los registros en columnas según los valores del campo.`,startDateFieldHelp:`El calendario coloca los registros en la celda que corresponde a esta fecha.`,ganttStartDateFieldHelp:`El borde izquierdo de cada barra de Gantt usa esta fecha.`,ganttEndDateFieldHelp:`El borde derecho de cada barra de Gantt usa esta fecha.`,timelineDateFieldHelp:`Los registros se posicionan en la línea de tiempo según esta fecha.`,latitudeFieldHelp:`Campo que contiene la latitud (solo campos geográficos).`,longitudeFieldHelp:`Campo que contiene la longitud (solo campos geográficos).`,imageFieldHelp:`La portada de la galería proviene de este campo de imagen o adjunto.`,selectOption:`Seleccionar…`,noEligibleFieldForType:`Ningún campo elegible de ese tipo. Agregue uno al objeto primero.`,viewTypeUnavailable:`Este objeto no tiene un campo que sirva como "{{field}}".`,viewTypeUnavailableShort:`No compatible con este objeto.`,chartType:`Tipo de gráfico`,chartTypeHelp:`Determina cómo se renderizan los datos.`,chartTypeBar:`Gráfico de barras`,chartTypeLine:`Gráfico de líneas`,chartTypePie:`Gráfico circular`,chartTypeArea:`Gráfico de área`,chartTypeScatter:`Gráfico de dispersión`,xAxisField:`Campo eje X`,xAxisFieldHelp:`La dimensión categórica o temporal.`,yAxisField:`Campo eje Y`,yAxisFieldHelp:`El campo numérico para agregar.`,selectionMode:`Modo de selección`,selectionNone:`Ninguno`,selectionSingle:`Individual`,selectionMultiple:`Múltiple`,pageSize:`Tamaño de página`,pageSizeOptions:`Opciones de tamaño de página`,exportFormats:`Formatos de exportación`,exportMaxRecords:`Máximo de registros`,exportIncludeHeaders:`Incluir encabezados`,exportFileNamePrefix:`Prefijo de nombre de archivo`,searchableFields:`Campos buscables`,filterableFields:`Campos filtrables`,resizableColumns:`Columnas redimensionables`,densityCompact:`Compacto`,densityComfortable:`Normal`,densitySpacious:`Espacioso`,densityMode:`Modo de densidad`,hiddenFields:`Campos ocultos`,rowActions:`Acciones de fila`,bulkActions:`Acciones masivas`,sharing:`Compartir`,sharingEnabled:`Compartir habilitado`,sharingVisibility:`Visibilidad`,addRecordEnabled:`Agregar registro habilitado`,addRecordPosition:`Posición`,addRecordMode:`Modo`,addRecordFormView:`Vista de formulario`,conditionalFormatting:`Formato condicional`,addRule:`Agregar regla`,quickFilters:`Filtros rápidos`,addQuickFilter:`Agregar filtro rápido`,ufElements:`Elementos`,ufDropdown:`Desplegable`,ufTabs:`Pestañas`,ufToggle:`Alternar`,ufAddField:`+ Agregar campo de filtro…`,ufNoFields:`Sin campos disponibles`,ufAddTab:`+ Agregar pestaña`,ufTabLabel:`Etiqueta`,ufShowAllRecords:`Mostrar pestaña "Todos los registros"`,ufAllowAddTab:`Permitir agregar pestañas`,showRecordCount:`Mostrar recuento de registros`,allowPrinting:`Permitir impresión`,virtualScroll:`Desplazamiento virtual`,emptyStateTitle:`Título de estado vacío`,emptyStateMessage:`Mensaje de estado vacío`,emptyStateIcon:`Ícono de estado vacío`,ariaLabel:`Etiqueta ARIA`,ariaDescribedBy:`Descrito por ARIA`,ariaLive:`ARIA en vivo`,accessibility:`Accesibilidad`,viewTabs:`Pestañas de vista`},localeSwitcher:{label:`Idioma`},search:`Buscar…`,nav:{pinItem:`Fijar {{name}}`,unpinItem:`Desfijar {{name}}`,dragToReorder:`Arrastrar para reordenar`,favorites:`Favoritos`}},auth:{setPassword:{title:`Establecer una contraseña de recuperación`,description:`Ha iniciado sesión mediante inicio de sesión único. Establezca una contraseña local para poder seguir accediendo directamente a este entorno si el SSO deja de estar disponible.`,email:`Correo electrónico`,newPassword:`Nueva contraseña`,confirmPassword:`Confirmar la contraseña`,submit:`Establecer la contraseña`,submitting:`Guardando…`,success:`Contraseña local establecida`,failed:`No se pudo establecer la contraseña`,passwordsMismatch:`Las contraseñas no coinciden`,noSession:`Su sesión ha caducado.`,backToSignIn:`Volver a iniciar sesión`},login:{signingIn:`Iniciando sesión…`,ssoHandoff:`Continuar a {{target}}`,devAdminHint:{title:`Instancia de desarrollo`,body:`Inicie sesión con el administrador de desarrollo predefinido:`,dismiss:`Descartar`},title:`Inicia sesión en tu cuenta`,description:`Ingresa tu correo electrónico y contraseña para continuar`,emailLabel:`Correo electrónico`,emailPlaceholder:`name@example.com`,passwordLabel:`Contraseña`,passwordPlaceholder:`Ingresa tu contraseña`,forgotPasswordText:`¿Olvidaste tu contraseña?`,submitButton:`Iniciar sesión`,submittingButton:`Iniciando sesión…`,noAccountText:`¿No tienes una cuenta?`,signUpText:`Regístrate`,errors:{oauthCallbackFailed:`No se pudo completar el inicio de sesión único: el enlace de acceso caducó o ya se había utilizado. Vuelva a intentarlo.`,invalidCredentials:`Correo o contraseña inválidos. Inténtelo de nuevo.`,emailNotVerified:`Verifique su correo electrónico antes de iniciar sesión.`},emailOrPhoneLabel:`Correo electrónico o número de teléfono`,emailOrPhonePlaceholder:`name@example.com o +1 555 000 0000`,phoneLabel:`Número de teléfono`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Código de verificación`,otpCodePlaceholder:`Código de 6 dígitos`,sendOtpButton:`Obtener código`,resendOtpCountdownText:`Reenviar en {seconds} s`,usePhoneOtpText:`Iniciar sesión con código de verificación`,usePasswordSignInText:`Iniciar sesión con contraseña en su lugar`},register:{title:`Crear una cuenta`,description:`Ingresa tu información para comenzar`,nameLabel:`Nombre`,namePlaceholder:`Juan Pérez`,emailLabel:`Correo electrónico`,emailPlaceholder:`name@example.com`,passwordLabel:`Contraseña`,passwordPlaceholder:`Crear una contraseña (mín. 8 caracteres)`,confirmPasswordLabel:`Confirmar contraseña`,confirmPasswordPlaceholder:`Confirma tu contraseña`,passwordMismatchError:`Las contraseñas no coinciden`,passwordTooShortError:`La contraseña debe tener al menos 8 caracteres`,submitButton:`Crear cuenta`,submittingButton:`Creando cuenta…`,hasAccountText:`¿Ya tienes una cuenta?`,signInText:`Iniciar sesión`,errors:{userExists:`Ya existe una cuenta con ese correo. Intente iniciar sesión.`},verifyInbox:{title:`Revise su bandeja de entrada`,description:`Enviamos un enlace de verificación a {{email}}. Haga clic en el enlace para activar su cuenta.`,resend:`Reenviar correo de verificación`,resending:`Enviando…`,resent:`Correo de verificación enviado.`,backToSignIn:`Volver al inicio de sesión`}},forgotPassword:{title:`Restablecer tu contraseña`,description:`Ingresa tu dirección de correo electrónico y te enviaremos un enlace para restablecer tu contraseña`,emailLabel:`Correo electrónico`,emailPlaceholder:`name@example.com`,submitButton:`Enviar enlace de restablecimiento`,submittingButton:`Enviando…`,successTitle:`Revisa tu correo electrónico`,successDescription:`Hemos enviado un enlace para restablecer la contraseña a {{email}}. Por favor revisa tu bandeja de entrada.`,backToSignInText:`Volver a iniciar sesión`,rememberPasswordText:`¿Recuerdas tu contraseña?`,signInText:`Iniciar sesión`,phoneLabel:`Número de teléfono`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Código de verificación`,otpCodePlaceholder:`Código de 6 dígitos`,sendOtpButton:`Obtener código`,resendOtpCountdownText:`Reenviar en {seconds} s`,newPasswordLabel:`Nueva contraseña`,newPasswordPlaceholder:`Ingresa una nueva contraseña`,resetButton:`Restablecer contraseña`,usePhoneResetText:`Restablecer con código SMS`,useEmailResetText:`Restablecer por correo electrónico en su lugar`,phoneSuccessTitle:`Contraseña restablecida`,phoneSuccessDescription:`Tu contraseña ha sido restablecida. Ahora puedes iniciar sesión con tu nueva contraseña.`},resetPassword:{title:`Establecer nueva contraseña`,description:`Elija una contraseña que no haya usado antes.`,newPassword:`Nueva contraseña`,confirmPassword:`Confirmar contraseña`,submit:`Actualizar contraseña`,submitting:`Actualizando…`,success:`Contraseña actualizada`,failed:`Error al restablecer`,invalidToken:`Este enlace de restablecimiento es inválido o ha expirado.`,missingToken:`El enlace de restablecimiento falta o ha expirado`,passwordsMismatch:`Las contraseñas no coinciden`,requestNewLink:`Solicitar nuevo enlace`},verifyEmail:{title:`Verificar dirección de correo`,description:`Enviamos un enlace de verificación a su correo. Haga clic en el enlace para verificar su cuenta.`,sentTo:`Enviado a:`,verifyingTitle:`Verificando…`,verifyingDescription:`Estamos verificando su correo. Por favor espere.`,successTitle:`Correo verificado`,successDescription:`Su correo fue verificado. Ahora puede iniciar sesión.`,errorTitle:`Verificación fallida`,errorDescription:`La verificación falló. Solicite un nuevo enlace.`,missingToken:`Falta un token en el enlace de verificación.`,emailMissing:`Falta la dirección de correo`,resendButton:`Reenviar correo de verificación`,resending:`Enviando…`,resent:`¡Correo enviado! Revise su bandeja de entrada`,resentSuccess:`¡Correo de verificación enviado!`,resentDescription:`Revise su bandeja de entrada y haga clic en el enlace de verificación.`,resendFailed:`No se puede reenviar el correo de verificación`,signInLink:`Ir al inicio de sesión`,backToSignIn:`Volver al inicio de sesión`,backToLogin:`Volver al inicio de sesión`,checkSpam:`¿No recibió el correo? Revise su carpeta de spam o contacte soporte.`,or:`O`,resendUnavailable:`Puede que el envío de correos no esté configurado en este entorno. Contacte soporte si el problema persiste.`},setup:{welcomeTitle:`Bienvenido a ObjectStack`,description:`Cree la primera cuenta de propietario para completar la configuración.`,yourName:`Su nombre`,orgName:`Nombre de la organización`,orgNamePlaceholder:`Empresa Ejemplo S.A.`,emailLabel:`Correo electrónico`,emailPlaceholder:`nombre@ejemplo.com`,passwordLabel:`Contraseña`,passwordHint:`Al menos 8 caracteres`,submit:`Crear cuenta de propietario`,submitting:`Configurando…`,failed:`Error en la configuración`},device:{title:`Autorizar nuevo dispositivo`,subtitle:`Apruebe este dispositivo para iniciar sesión como {{email}}.`,userCodeLabel:`Código del dispositivo`,requesterLabel:`Solicitud de conexión de`,approveWarning:`Aprueba solo si tú mismo iniciaste esta conexión hace un momento. Una vez aprobada, este runtime podrá acceder a los paquetes privados de tu organización.`,loggedInAs:`Conectado como {{email}}`,approve:`Aprobar dispositivo`,approving:`Aprobando…`,approvedTitle:`Dispositivo autorizado`,approvedDescription:`Puede regresar al dispositivo — debería iniciar sesión pronto.`,approveSuccess:`Dispositivo autorizado`,approveSuccessDescription:`Puede cerrar esta ventana.`,approveFailed:`Error al aprobar`,deny:`Denegar solicitud`,denying:`Denegando…`,deniedTitle:`Acceso denegado`,deniedDescription:`No se otorgará acceso al dispositivo.`,denyFailed:`No se pudo denegar la solicitud`,invalidTitle:`Enlace de dispositivo inválido`,invalidDescription:`No se proporcionó código de dispositivo en la URL.`,loading:`Cargando…`,cancel:`Cancelar`,disabledTitle:`La autorización de dispositivos no está habilitada`,disabledDescription:`Esta implementación no tiene habilitada la autorización de dispositivos, por lo que este dispositivo no puede aprobarse aquí.`},shell:{tenantHostHint:`Está iniciando sesión en este espacio de trabajo`},layout:{headline:`Cree aplicaciones empresariales potentes, más rápido.`,subhead:`La plataforma universal para la gestión de datos empresariales, los flujos de trabajo y la analítica.`},remediation:{signOut:`Cerrar sesión en su lugar`,password:{title:`Su contraseña ha caducado`,fallbackMessage:`Establezca una nueva contraseña para continuar.`,current:`Contraseña actual`,next:`Nueva contraseña`,confirm:`Confirmar nueva contraseña`,submit:`Cambiar contraseña y continuar`,submitting:`Actualizando…`,mismatch:`Las nuevas contraseñas no coinciden.`,failed:`No se pudo cambiar la contraseña.`},mfa:{title:`Configurar la autenticación en dos pasos`,fallbackMessage:`Su organización requiere una aplicación de autenticación para continuar.`,confirmPassword:`Confirme su contraseña`,continue:`Continuar`,preparing:`Preparando…`,enrollFailed:`No se pudo iniciar el registro.`,scanTitle:`Escanee con su aplicación de autenticación`,scanBody:`Escanee este código QR con Google Authenticator, 1Password, Authy, etc., y luego introduzca el código de 6 dígitos.`,backupTitle:`Guarde sus códigos de respaldo`,backupBody:`Guárdelos en un lugar seguro: cada uno puede usarse una vez si pierde su dispositivo.`,codeLabel:`Código de 6 dígitos`,verify:`Verificar y continuar`,verifying:`Verificando…`,invalidCode:`Código no válido. Inténtelo de nuevo.`}}},oauth:{consent:{title:`{{appName}} quiere acceder a su cuenta`,request:`{{appName}} solicita permiso{{suffix}}.`,unknownApp:`una aplicación`,willAllow:`Esta aplicación podrá:`,scope:{openid:`Confirmar su identidad`,profile:`Leer su perfil básico (nombre, foto)`,email:`Leer su dirección de correo electrónico`,offlineAccess:`Mantener la sesión abierta (renovar el acceso)`},deny:`Denegar`,authorize:`Autorizar`,submitting:`Autorizando…`,granted:`Acceso concedido`,denied:`Acceso denegado`,noRedirect:`El servidor no devolvió ninguna URL de redirección.`,failed:`Error en el consentimiento`,footer:`Puede revocar el acceso en cualquier momento desde la configuración de su cuenta.`}},profile:{title:`Perfil`,subtitle:`Gestione la configuración de su cuenta`,saving:`Guardando…`,avatar:{upload:`Subir`,replace:`Reemplazar`,remove:`Quitar`},info:{title:`Información personal`,description:`Actualice su nombre y consulte los detalles de la cuenta`,saved:`Perfil actualizado correctamente.`,name:`Nombre`,email:`Correo electrónico`,emailImmutable:`El correo electrónico no se puede cambiar.`,role:`Rol`,save:`Guardar cambios`},password:{changeTitle:`Cambiar contraseña`,setTitle:`Establecer contraseña local`,changeDescription:`Actualice la contraseña que usa para iniciar sesión en este entorno.`,setDescription:`Inició sesión mediante inicio de sesión único. Establezca una contraseña local para poder iniciar sesión también con correo y contraseña en este entorno.`,current:`Contraseña actual`,new:`Nueva contraseña`,password:`Contraseña`,confirm:`Confirmar contraseña`,tooShort:`La contraseña debe tener al menos 8 caracteres`,mismatch:`Las contraseñas no coinciden`,enterCurrent:`Introduzca su contraseña actual`,changed:`Contraseña cambiada.`,localSet:`Contraseña local establecida. Ahora puede iniciar sesión con correo y contraseña en este entorno.`,changeAction:`Cambiar contraseña`,setAction:`Establecer contraseña`}},errors:{networkError:`Error de red. Por favor, compruebe su conexión.`,serverError:`Error del servidor. Por favor, inténtelo de nuevo más tarde.`,notFound:`Recurso no encontrado.`,unauthorized:`No está autorizado para realizar esta acción.`,forbidden:`Acceso denegado.`,timeout:`Tiempo de espera agotado. Por favor, inténtelo de nuevo.`,unknown:`Ha ocurrido un error inesperado.`},workspace:{label:`Espacios de trabajo`,default:`Mi espacio de trabajo`,switch:`Cambiar espacio de trabajo`,create:`Crear espacio de trabajo`,createTitle:`Crear un espacio de trabajo`,createDescription:`Un espacio de trabajo es un lugar compartido para que tu equipo colabore.`,createButton:`Crear espacio de trabajo`,nameLabel:`Nombre del espacio de trabajo`,namePlaceholder:`p.ej., Acme Inc`,slugLabel:`Slug de URL`,slugHint:`Se utiliza en URLs. Solo minúsculas, números y guiones.`,invite:`Invitar miembro`,members:`Miembros`,settings:`Configuración del espacio de trabajo`,multiOrgDisabled:`La creación de nuevas organizaciones está deshabilitada en esta instancia.`,createFailed:`No se pudo crear el espacio de trabajo`},help:{onThisPage:`En esta página`,keyboardShortcuts:`Atajos de teclado`,appDocs:`Documentación de esta app`,allDocs:`Toda la documentación`,onlineDocs:`Documentación en línea`},sidebar:{packageManagement:`Gestión de paquetes`,searchNavigation:`Buscar en la navegación…`,settings:`Configuración`,help:`Ayuda`,helpTooltip:`Ayuda y documentación`,activityFeed:`Feed de actividad`,notifications:`Notificaciones`,approvals:`Aprobaciones`,inbox:`Bandeja de entrada`,inboxAriaLabel:`Abrir bandeja de entrada`,area:`Área`,scope:`Ámbito`,recent:`Reciente`,favorites:`Favoritos`,starred:`Destacados`,removeFromFavorites:`Quitar {{name}} de favoritos`},topbar:{openAssistant:`Abrir el asistente {{name}}`,offline:`Sin conexión`,usersOnline:`Usuarios conectados ahora mismo`,switchView:`Cambiar de vista`,switchObject:`Cambiar de objeto`,connection:{connected:`Conectado`,connecting:`Conectando…`,reconnecting:`Reconectando…`,disconnected:`Desconectado`,error:`Error de conexión`},stage:{preview:`Vista previa`,beta:`Beta`,tooltip:`Esta plataforma está en versión preliminar — las funciones pueden cambiar.`},aiAssistant:`Asistente de IA`,designInStudio:`Diseñar en Studio`},home:{build:{title:`Crear una aplicación`,subtitle:`Empiece desde cero — diseñe objetos, formularios, automatizaciones e interfaces.`},template:{title:`Empezar con una plantilla`,subtitle:`Instale una aplicación de plantilla desde el mercado y personalícela.`},welcomeAdminDescription:`Describa su negocio en una frase — la IA genera los objetos, las pantallas, las API y las herramientas del agente. O configúrelo usted mismo desde el menú de la izquierda.`,welcomeAdminDescriptionNoBuild:`Configure su primera aplicación desde el menú de Administración de la izquierda. Cuando tenga datos, el asistente de IA podrá ayudarle a explorarlos.`,welcomeAdminDescriptionNoAi:`Configure su primera aplicación desde el menú de Administración de la izquierda.`,noAppsTitle:`Todavía no hay aplicaciones`,noAppsDescription:`Su espacio de trabajo se está preparando — las aplicaciones que su administrador comparta aparecerán aquí.`,buildWithAI:`Crear con IA`,askAI:`Preguntar a la IA`,recoveryReminder:{message:`Establezca una contraseña de recuperación para poder iniciar sesión aunque el inicio de sesión único no esté disponible.`,cta:`Establecer contraseña`,dismiss:`Descartar`},pendingDrafts:{message:`Tiene {{count}} cambio(s) sin publicar — publíquelos para activarlos.`,cta:`Publicar`,publishing:`Publicando…`,published:`¡Publicado! Sus cambios están activos.`,publishFailed:`Error al publicar`,nothing:`Nada que publicar.`,probeWarn:`Publicado, pero la verificación encontró problemas.`,seedWarn:`Publicado, pero no se pudieron cargar algunos datos de ejemplo.`,publishedVerified:`Publicado y verificado — {{count}} fila(s) de ejemplo activa(s).`,capabilityWarn:`Comprobación de autoría: {{count}} referencia(s) de capacidad no apuntan a nada.`},title:`Inicio`,subtitle:`Panel de tu espacio de trabajo`,nav:`Inicio`,allApps:`Todas las aplicaciones`,yourApps:`Tus aplicaciones`,showMoreApps:`Más`,showLess:`Mostrar menos`,continueEmpty:`Los elementos que abras aparecerán aquí.`,actionCenter:{title:`Requiere tu atención`,empty:`Estás al día`},loading:`Cargando espacio de trabajo…`,recent:`Recientes`,starred:`Destacados`,welcome:`Bienvenido a ObjectUI`,welcomeDescription:`Comienza creando tu primera aplicación o configura los ajustes del sistema.`,createFirstApp:`Crea tu primera aplicación`,systemSettings:`Configuración del sistema`,browseMarketplace:`Explorar marketplace de apps`,quickActions:{title:`Acciones rápidas`,createApp:`Crear app`,createAppDesc:`Comienza con una nueva aplicación`,manageObjects:`Gestionar objetos`,manageObjectsDesc:`Configura modelos de datos`,systemSettings:`Configuración del sistema`,systemSettingsDesc:`Configura tu espacio de trabajo`},appCard:{noDescription:`Sin descripción`,default:`Predeterminado`},greetingMorning:`Buenos días`,greetingAfternoon:`Buenas tardes`,greetingEvening:`Buenas noches`,greetingNight:`Turno de noche`,heroTagline:`Continúe donde lo dejó o descubra algo nuevo.`,open:`Abrir`,stats:{apps:`Aplicaciones`,starred:`Destacados`,recent:`Recientes`},recentApps:{title:`Abiertos recientemente`,itemType:{object:`Objeto`,dashboard:`Panel`,page:`Página`,record:`Registro`}},starredApps:{title:`Destacados`},gettingStarted:{title:`Personalizar inicio`,description:`Marque una aplicación como favorita para anclarla aquí y acceder con un clic. Todo lo que abra aparecerá automáticamente en "Abiertos recientemente".`,cta:`Explorar todas las aplicaciones`}},layout:{systemNav:{systemSettings:`Configuración del sistema`,applications:`Aplicaciones`,appMarketplace:`Mercado de aplicaciones`,objectManager:`Gestor de objetos`,users:`Usuarios`,organizations:`Organizaciones`,roles:`Roles`,configuration:`Configuración`,createApp:`Crear aplicación`,administration:`Administración`,datasources:`Fuentes de datos`,documentation:`Documentación`},appSwitcher:{switchApplication:`Cambiar de aplicación`,appsAvailable:`{{count}} aplicaciones disponibles`,editNavigation:`Editar la navegación`,home:`Inicio`,addApp:`Agregar aplicación`,editApp:`Editar aplicación`,manageAllApps:`Administrar todas las aplicaciones`,systemConsole:`Consola del sistema`,noAppsConfigured:`Sin aplicaciones configuradas`},activityFeed:{title:`Actividad reciente`,filter:`Filtrar`,empty:`Sin actividad reciente`,ariaLabel:`Feed de actividad`,typeCreate:`Crear`,typeUpdate:`Actualizar`,typeDelete:`Eliminar`,typeComment:`Comentario`,relativeJustNow:`ahora mismo`,relativeSecondsAgo:`hace {{count}}s`,relativeMinutesAgo:`hace {{count}}m`,relativeHoursAgo:`hace {{count}}h`,relativeDaysAgo:`hace {{count}}d`,viewAll:`Ver toda la actividad`},metadata:{label:`Metadatos`,toggleTitle:`Alternar inspector de metadatos`,panelTitle:`Inspector de metadatos`,jsonBadge:`JSON`,copyJson:`Copiar JSON`}},search:{title:`Buscar`,back:`Atrás`,placeholder:`Buscar objetos, paneles, páginas, informes…`,inputAriaLabel:`Buscar objetos, paneles, páginas, informes`,resultsCount:`{{count}} resultado para "{{query}}"`,resultsCountPlural:`{{count}} resultados para "{{query}}"`,itemsAvailable:`{{count}} elementos disponibles`,noResults:`Sin resultados encontrados`,noResultsHint:`Intente ajustar sus términos de búsqueda`,typeObjects:`Objetos`,typeDashboards:`Paneles`,typePages:`Páginas`,typeReports:`Informes`,badgeObject:`Objeto`,badgeDashboard:`Panel`,badgePage:`Página`,badgeReport:`Informe`},empty:{objectNotFound:`Objeto no encontrado`,objectNotFoundDescription:`Falta la definición del objeto "{{name}}". Verifique su configuración o navegue hacia atrás.`,interfacePageSourceMissing:`Esta página de interfaz hace referencia a "{{name}}", que no está disponible.`,pageNotFound:`Página no encontrada`,pageNotFoundDescription:`La página "{{name}}" no fue encontrada. Puede haber sido eliminada o renombrada.`,dashboardNotFound:`Panel no encontrado`,dashboardNotFoundDescription:`El panel "{{name}}" no fue encontrado. Puede haber sido eliminado o renombrado.`,reportNotFound:`Informe no encontrado`,reportNotFoundDescription:`El informe "{{name}}" no fue encontrado. Puede haber sido eliminado o renombrado.`,noAppsConfigured:`Sin aplicaciones configuradas`,noAppsConfiguredDescription:`No hay aplicaciones registradas. Cree su primera aplicación o visite la configuración del sistema.`,appNotAvailable:`Aplicación no disponible`,appNotAvailableDescription:`Esta aplicación aún no está disponible — puede que todavía se esté publicando. Vuelva a intentarlo en un momento.`,appAccessDenied:`No tiene acceso a esta aplicación`,appAccessDeniedDescription:`Esta aplicación existe, pero su cuenta no está autorizada para abrirla. Solicite acceso a un administrador.`,appAccessDeniedHome:`Volver al inicio`,createFirstApp:`Crear primera aplicación`,systemSettings:`Configuración del sistema`,back:`Atrás`,recordNotFound:`Registro no encontrado`,recordNotFoundDescription:`El registro que busca no existe o puede haber sido eliminado.`},renderer:{noPageSchema:`No se proporcionó esquema de página`,noFormSchema:`No se proporcionó esquema de formulario`,noDashboardSchema:`No se proporcionó esquema de panel`,pageRendering:`Renderizando página: {{name}}`,dashboardRendering:`Renderizando panel: {{name}}`,formRenderingMode:`Formulario renderizado en modo {{mode}}`,formRenderingFor:`para registro {{id}}`,createRecord:`Crear registro`,editRecord:`Editar registro`,page:`Página`,dashboard:`Panel`,save:`Guardar`,cancel:`Cancelar`},actionDialog:{title:`Parámetros de acción`,description:`Ingrese la información requerida para continuar.`,selectPlaceholder:`Seleccionar {{label}}`,requiredError:`{{label}} es obligatorio`,cancel:`Cancelar`,confirm:`Confirmar`,uploading:`Subiendo…`,defaultActionTitle:`Acción`,ok:`Aceptar`,lookupPlaceholder:`ID de registro para {{label}}`,lookupHelpText:`Este parámetro no tiene un objeto de referencia configurado, por lo que el selector de registros no está disponible. Ingrese un ID de registro o pida a un administrador que corrija el parámetro de la acción.`},actionConfirm:{title:`Confirmar acción`,confirm:`Continuar`,cancel:`Cancelar`},rowAction:{openMenu:`Abrir menú`,edit:`Editar`,delete:`Eliminar`},navigationSync:{addedPage:`Navegación actualizada: página "{{name}}" agregada`,addedDashboard:`Navegación actualizada: panel "{{name}}" agregado`,removedPage:`Navegación actualizada: página "{{name}}" eliminada`,removedDashboard:`Navegación actualizada: panel "{{name}}" eliminado`,renamedPage:`Navegación actualizada: página "{{oldName}}" renombrada a "{{newName}}"`,renamedDashboard:`Navegación actualizada: panel "{{oldName}}" renombrado a "{{newName}}"`,undoLabel:`Deshacer`,undone:`Cambio de navegación deshecho`,undoFailed:`No se pudo deshacer el cambio de navegación`,updateFailed:`No se pudo actualizar la navegación`},objectActions:{resetPackageSetConfirm:`Este conjunto de permisos viene con un paquete instalado y no se puede eliminar. Al eliminarlo se restablece a la versión original del paquete y se descartan sus personalizaciones en este entorno. ¿Continuar?`,resetPackageSetSuccess:`Conjunto de permisos restablecido a la versión original del paquete`,deleteSuccess:`{{label}} eliminado correctamente`,deleteFailed:`No se pudo eliminar {{label}}`,noRecordId:`No se proporcionó ID de registro`,deleteConfirm:`¿Eliminar este registro?`,bulkDeleteSuccess:`{{count}} registros de {{label}} eliminados`,bulkDeletePartial:`{{succeeded}} eliminados, {{failed}} fallidos`},objectViewActions:{renameFailed:`No se pudo renombrar la vista`,deleteFailed:`No se pudo eliminar la vista`},dashboardActions:{printDialogOpening:`Abriendo el cuadro de diálogo de impresión de tu navegador (no es una exportación a PDF)`,exportFailed:`Error al exportar: {{message}}`,forecastSoon:`La vista de pronóstico llegará pronto`},recordDetail:{viewersTooltip:`Usuarios viendo este registro ahora`},cellRender:{empty:`Vacío`,yes:`Sí`,no:`No`,systemFields:`Sistema`},user:{profile:`Perfil`,settings:`Configuración`,logout:`Cerrar sesión`,preferences:`Preferencias`,theme:`Tema`,language:`Idioma`},report:{total:`Total`,rowTotal:`Total fila`,columnTotal:`Total columna`,grandTotal:`Gran total`,totals:`Totales`,rowsLabel:`Fila`,columnsLabel:`Columna`,allLabel:`(Todo)`,emptyLabel:`(Vacío)`,loading:`Cargando…`,failedToLoad:`Error al cargar la matriz: {{message}}`,needsAcross:"El informe de matriz requiere al menos un campo `groupingsAcross`.",aggregate:{count:`Contar`,countDistinct:`Contar únicos`,sum:`Suma`,avg:`Promedio`,min:`Mínimo`,max:`Máximo`,first:`Primero`},editor:{panelTitle:`Editar informe`}},organizations:{create:`Crear espacio de trabajo`,mine:`Mis organizaciones`,title:`Organizaciones`,heading:`Tus organizaciones`,subtitle:`Selecciona una organización para continuar o crea una nueva.`,searchPlaceholder:`Buscar una organización`,new:`Nueva organización`,current:`Organización actual`,manage:`Administrar`,emptyTitle:`Aún no hay organizaciones`,emptyDescription:`Crea tu primera organización para empezar.`,noMatches:`Ninguna organización coincide con tu búsqueda.`},organization:{roles:{owner:`Propietario`,admin:`Administrador`,delegatedAdmin:`Administrador delegado`,member:`Miembro`},errors:{notAllowedToInvite:`No tiene permiso para invitar usuarios a esta organización.`,notAllowedToInviteWithRole:`No tiene permiso para invitar a un usuario con este rol.`,alreadyInvited:`Este usuario ya ha sido invitado a esta organización.`,organizationExists:`Esa organización ya existe.`,slugTaken:`Ese slug ya está en uso.`,notAllowedToCreate:`No tiene permiso para crear una organización nueva.`,notTheRecipient:`No es el destinatario de esta invitación.`,invitationNotFound:`Esta invitación ya no existe o ha caducado.`,unknown:`Algo salió mal. Inténtelo de nuevo.`},backToList:`Volver a las organizaciones`,notFound:`Organización no encontrada`,notFoundDescription:`Esta organización no existe o no tienes acceso.`,tabs:{members:`Miembros`,invitations:`Invitaciones`,settings:`Configuración`},members:{title:`Miembros`,inviteMember:`Invitar miembro`,inviteRestrictedNote:`Solo los administradores de la organización pueden invitar a miembros.`,removeMember:`Eliminar miembro`,removeConfirmTitle:`¿Eliminar miembro?`,removeConfirmDescription:`Se eliminará a {{name}} de la organización y perderá el acceso de inmediato.`,removeConfirmAction:`Eliminar`,memberRemoved:`Miembro eliminado`,removeFailed:`No se pudo eliminar al miembro`,roleUpdated:`Rol actualizado`,roleUpdateFailed:`No se pudo actualizar el rol`,memberActions:`Acciones del miembro`,loadFailed:`No se pudieron cargar los miembros`},invitations:{title:`Invitaciones`,empty:`No hay invitaciones.`,expiresAt:`Caduca`,linkCopied:`Enlace de invitación copiado`,copyFailed:`No se pudo copiar el enlace`,canceled:`Invitación cancelada`,cancelFailed:`No se pudo cancelar la invitación`,cancelTitle:`¿Cancelar la invitación?`,cancelDescription:`Se revocará la invitación de {{email}}.`,cancelAction:`Cancelar invitación`,inviteTitle:`Invitar a un miembro`,inviteDescription:`Recibirá una invitación para unirse a esta organización.`,emailLabel:`Correo electrónico`,roleLabel:`Rol`,placementLabel:`Asignación (opcional)`,placementDescription:`Se aplica cuando se acepta la invitación. Solo se listan las unidades y los puestos que puedes delegar.`,businessUnitLabel:`Unidad de negocio`,businessUnitPlaceholder:`Sin asignación`,positionsLabel:`Puestos`,sendInvite:`Enviar invitación`,sentTitle:`Invitación creada`,sentDescription:`Comparte el enlace de abajo con la persona invitada. Tendrá que iniciar sesión para aceptarla.`,linkLabel:`Enlace de aceptación`,invitedAs:`{{email}} invitado como {{role}}`,copyLinkLabel:`Copiar enlace de invitación`,loadFailed:`No se pudieron cargar las invitaciones`,inviteFailed:`No se pudo invitar al miembro`,status:{all:`Todas`,pending:`Pendiente`,accepted:`Aceptada`,rejected:`Rechazada`,canceled:`Cancelada`}},settings:{generalTitle:`General`,generalDescription:`Actualiza la información de tu organización.`,readOnlyNote:`Solo los propietarios pueden cambiar la configuración.`,nameLabel:`Nombre de la organización`,slugLabel:`Slug`,logoLabel:`Logo`,logoUpload:`Subir`,logoReplace:`Reemplazar`,logoClear:`Quitar`,logoUploaded:`Logo subido: guarda para aplicarlo`,logoUploadFailed:`No se pudo subir el logo`,save:`Guardar cambios`,saved:`Configuración guardada`,saveFailed:`No se pudo guardar la configuración`,leaveTitle:`Salir de la organización`,leaveDescription:`Perderás el acceso a esta organización.`,leaveAction:`Salir`,leaveConfirmTitle:`¿Salir de la organización?`,leaveConfirmDescription:`¿Seguro que quieres salir de {{name}}? Perderás el acceso de inmediato.`,leaveConfirmAction:`Salir`,leftOrg:`Has salido de la organización`,leaveFailed:`No se pudo salir de la organización`,dangerZone:`Zona de peligro`,deleteTitle:`Eliminar organización`,deleteDescription:`Elimina permanentemente esta organización y todos sus datos.`,deleteAction:`Eliminar`,deleteConfirmTitle:`¿Eliminar la organización?`,deleteConfirmDescription:`Esta acción es irreversible. Todos los datos se eliminarán de forma permanente. Escribe el slug de la organización para confirmar.`,deleteConfirmSlugLabel:`Escribe «{{slug}}» para confirmar`,deleteConfirmAction:`Eliminar organización`,deleted:`Organización eliminada`,deleteFailed:`No se pudo eliminar la organización`},accept:{title:`Te han invitado`,description:`Te han invitado a unirte a {{orgName}} como {{role}}.`,errorTitle:`Invitación no disponible`,goToOrgs:`Ir a las organizaciones`,loading:`Cargando la invitación…`,organization:`Organización`,role:`Rol`,expiresAt:`Caduca`,accept:`Aceptar invitación`,accepted:`Invitación aceptada`,acceptFailed:`No se pudo aceptar la invitación`,decline:`Rechazar`,declined:`Invitación rechazada`,declineFailed:`No se pudo rechazar la invitación`},switcher:{label:`Cambiar de organización`,groupLabel:`Organización de trabajo`,groupHint:`Los registros nuevos se crean aquí. Las vistas muestran datos de todas tus organizaciones.`,manageMembers:`Administrar miembros`}},notifications:{regionLabel:`Notificaciones`,groupCount:`{{count}} notificaciones`,groupUnread:`{{count}} sin leer`,groupMarkRead:`Marcar como leídas`,groupMarkReadTitle:`Marcar como leídas todas las de este tipo`,empty:`Sin notificaciones`,markAllRead:`Marcar todo como leído`,viewAll:`Ver todas las notificaciones`,approvalsPending:`{{count}} aprobaciones pendientes`,viewApprovals:`Ver aprobaciones`,noPendingApprovals:`Sin aprobaciones pendientes`,openApprovalsInbox:`Abrir bandeja de aprobaciones`,badgeTotal:`{{total}} en total`,badgeNotifications:`{{unread}} notificaciones`,badgeApprovals:`{{approvals}} aprobaciones pendientes`,emptyUnread:`Todo al día`,filterUnread:`No leídos`,filterAll:`Todos`},publicForm:{submit:`Enviar`,submitting:`Enviando…`,submitAnother:`Enviar otra respuesta`,poweredBy:`Desarrollado por ObjectStack`,secureNotice:`Su información se transmite de forma segura y solo se usa para atender su solicitud.`,thankYouTitle:`¡Gracias!`,thankYouMessage:`Su envío fue recibido correctamente.`,redirecting:`Redirigiendo en {{seconds}} segundos…`,unavailableTitle:`Formulario no disponible`,unavailableDescription:`No hay formulario público disponible en esta URL. Asegúrese de que la vista subyacente tenga habilitado el uso compartido anónimo.`,tryDemo:`Probar demo`,retry:`Reintentar`,loading:`Cargando formulario…`,requiredHint:`* Campo obligatorio`,consentLabelDefault:`Acepto la política de privacidad y doy mi consentimiento para procesar mis datos para esta solicitud.`,consentLink:`Política de privacidad`,consentRequired:`Acepte la política de privacidad para continuar.`,rateLimited:`Tómese un momento para revisar sus respuestas antes de enviar.`,redirectBlocked:`Envío aceptado, pero la URL de redirección fue bloqueada por seguridad.`,demo:{contactTitle:`Ponerse en contacto`,contactDescription:`Cuéntenos sobre su proyecto y un representante de ventas le contactará en un día hábil.`,supportTitle:`Enviar solicitud de soporte`,supportDescription:`Descríbanos el problema — nuestro equipo responderá en un día hábil.`,thankYouSalesTitle:`¡Gracias — recibimos su mensaje!`,thankYouSalesMessage:`Un representante de ventas le contactará en un día hábil.`,thankYouSupportTitle:`Listo — su solicitud está en cola.`,thankYouSupportMessage:`Un ingeniero de soporte le dará seguimiento pronto. Guarde esta página si tiene capturas de pantalla adicionales.`,field:{firstName:`Nombre`,lastName:`Apellido`,email:`Correo empresarial`,phone:`Teléfono`,jobTitle:`Cargo`,company:`Empresa`,website:`Sitio web`,industry:`Industria`,companySize:`Tamaño de empresa`,howCanWeHelp:`¿Cómo podemos ayudarle?`,subject:`Asunto`,description:`Descripción`,issueType:`Tipo de problema`,priority:`Prioridad`},industry:{technology:`Tecnología`,software:`Software / SaaS`,finance:`Finanzas`,healthcare:`Salud`,retail:`Retail`,other:`Otro`},issueType:{question:`Pregunta`,problem:`Problema`,bug:`Error`,feature_request:`Solicitud de función`},priority:{low:`Baja`,medium:`Media`,high:`Alta`,critical:`Crítica`}}},connectAgent:{disabled:{title:`MCP está deshabilitado en esta implementación`,body:`La superficie MCP está apagada (OS_MCP_SERVER_ENABLED=false). Pida a su operador que la vuelva a habilitar.`},url:{title:`Endpoint MCP de este entorno`,body:`Cualquier cliente de IA compatible con MCP se conecta con esta URL. La identidad es autoservicio: la implementación es su propio servidor de autorización OAuth 2.1 — inicia sesión como usted mismo y cada llamada corre bajo sus permisos y seguridad a nivel de fila.`,downloadSkill:`Descargar SKILL.md`,skillHint:`La skill portátil del agente: enseña a cualquier agente compatible cómo trabajar con este entorno.`},claude:{body:`Configuración → Conectores → Añadir conector personalizado, pegue esta URL e inicie sesión en el navegador.`,reachability:`claude.ai (web) se conecta desde los servidores de Anthropic — la implementación debe ser accesible por HTTPS público. Claude Desktop y los clientes locales también alcanzan implementaciones de intranet.`},claudeCode:{body:`Un comando — el inicio de sesión OAuth se abre automáticamente en el primer uso:`,plugin:`O instale el plugin oficial (añade la skill de ObjectStack y el comando guiado /objectstack:connect):`},cursor:{addButton:`Añadir a Cursor`,body:`Use el botón de un clic o añada esto a .cursor/mcp.json:`},vscode:{body:`Añadir a .vscode/mcp.json (o mediante el comando MCP: Add Server):`},codex:{body:`Añadir a ~/.codex/config.toml. Si su versión de Codex no admite el flujo OAuth, use una cabecera de clave API (ver abajo):`},apiKey:{title:`Claves API`,badge:`headless`,body:`Para CI, scripts y agentes sin navegador. La clave actúa como usted — trátela como una contraseña. Se muestra UNA sola vez.`,namePlaceholder:`Nombre de la clave (p. ej. ci-agent)`,mint:`Crear clave`,minting:`Creando…`,showOnce:`Clave «{{name}}» creada — cópiela ahora, no se volverá a mostrar:`,done:`Listo — ocultar`}},excelImport:{noImportableFields:`Ese objeto no tiene campos importables.`,schemaReadFailed:`No se pudo leer el esquema del objeto.`,imported:`Se importaron {{count}} fila(s) en {{object}}.`,importFrom:`Importar las filas reales desde`,into:`a`,opening:`Abriendo…`,importAction:`Importar`,dismiss:`Descartar`},cloudOnboarding:{hintCreate:`Cree su primer entorno: un espacio de trabajo privado con su propia URL, base de datos y plan. La creación de aplicaciones ocurre dentro de él.`,hintReady:`Su entorno de producción está listo. Ábralo para crear y ejecutar sus aplicaciones: todo ocurre dentro del entorno.`,createEnvironment:`Cree su entorno`,openProduction:`Abrir producción`,manageEnvironments:`Gestionar entornos`},aiModelStatus:{summary:`Crear / Preguntar usa {{conversational}} ({{conversationalSource}}); estructurado usa {{structured}} ({{structuredSource}}).`,summaryRouting:`Política de enrutamiento: planes gratuitos → {{free}}, planes de pago → {{paid}}.`,modelUnknown:`desconocido`,sourceUnknown:`no informado por el adaptador`,rowConversational:`Modelo Build / Ask`,rowStructured:`Estructurado (blueprint / seed)`,rowReasoning:`Esfuerzo de razonamiento`,readFailed:`No se pudo leer el modelo de IA efectivo. Puede que este entorno no ejecute un servicio de IA o que no tenga el permiso ai:read.`,readFailedWithStatus:`No se pudo leer el modelo de IA efectivo (HTTP {{status}}). Puede que este entorno no ejecute un servicio de IA o que no tenga el permiso ai:read.`,overridesInEffect:`Anulaciones vigentes: `,noOverrides:`ninguna: se usan los valores predeterminados del código desplegado.`,adapter:`Adaptador: `,sourceCodeDefault:`valor predeterminado del código (sin anulación env)`,sourceInherits:`igual que build/ask`,sourcePinned:`fijado por {{source}}`},chatbotError:{title:`Error en la respuesta`,fallbackDetail:`Algo salió mal. Vuelva a intentarlo.`,details:`Detalles`,hide:`Ocultar`,retry:`Reintentar`},chatbotQuota:{title:`Se requiere actualizar`,fallbackMessage:`Ha alcanzado su cuota de IA.`,buyCredits:`Comprar un paquete de créditos`,upgradePlan:`Mejorar el plan`},environment:{addEnvironment:`Añadir entorno`,setUpProduction:`Configure su entorno de producción`,addDevelopment:`Añadir entorno de desarrollo`,entitlement:{productionLimitTitle:`Ya tiene su entorno de producción`,productionLimitBody:`Cada organización incluye exactamente un entorno de producción. Cree una organización aparte para tener otro, o contáctenos para conocer un acuerdo Enterprise.`,planLockedTitle:`Los entornos de desarrollo son una función de pago`,planLockedBody:`Su {{plan}} incluye un entorno de producción. Mejore su plan para añadir entornos de desarrollo: construya en desarrollo y luego publique en producción.`,limitTitle:`Límite de entornos de desarrollo alcanzado`,limitBody:`La capacidad crece con los puestos de IA. Añada un puesto de IA, o archive un entorno de desarrollo sin usar para liberar espacio.`,limitBodyWithCount:`Está usando {{used}} de {{limit}} entornos de desarrollo. La capacidad crece con los puestos de IA: añada un puesto de IA, o archive un entorno de desarrollo sin usar.`,freePlan:`plan gratuito`,namedPlan:`plan {{plan}}`,upgradeCta:`Mejorar plan`,contactSalesCta:`Contactar con ventas`}},cloudConnection:{checking:`Comprobando la conexión…`,retry:`Reintentar`,errors:{expired:`La solicitud caducó antes de ser aprobada. Vuelva a empezar.`,bindFailed:`Error al vincular.`,deviceCodeFailed:`Error en la solicitud del código de dispositivo.`},waiting:{popupOpened:`Apruebe la conexión en la ventana que acaba de abrirse: esta página se actualiza sola.`,polling:`Esperando la aprobación en la consola de la nube…`,openApproval:`Abrir la página de aprobación`,copy:`Copiar`,copied:`Copiado`,codePrefilled:`El código ya está rellenado en la página de aprobación.`,openItHere:`¿No apareció la ventana? Ábrala aquí`,cancel:`Cancelar`},bound:{title:`Conectado a ObjectStack Cloud`,runtime:`Runtime`,organization:`Organización`,approvedBy:`Aprobado por`,runtimeId:`ID del runtime`,environment:`Entorno`,since:`Desde`,privatePackages:`Los paquetes privados de su organización ya aparecen en el Marketplace en «Su organización».`,disconnect:`Desconectar`},unbound:{title:`No conectado`,body:`Conecte este runtime a un plano de control de ObjectStack para explorar los paquetes privados de su organización e instalarlos aquí. La aprobación es un solo clic en su cuenta de la nube: no se escriben identificadores ni credenciales en esta página.`,connect:`Conectar`}},marketplace:{suggestedBindings:{promptEveryone:`Esta aplicación sugiere conceder «{{set}}» a todos los usuarios con sesión iniciada (la posición Everyone).`,promptGuest:`Esta aplicación sugiere conceder «{{set}}» a los visitantes no autenticados (la posición Guest).`,confirm:`Conceder`,confirming:`Concediendo…`,dismiss:`Descartar`,confirmedToast:`«{{set}}» ya está concedido a {{anchor}}.`,dismissedToast:`Sugerencia para «{{set}}» descartada.`},title:`Marketplace de aplicaciones`,subtitle:`Explore aplicaciones aprobadas publicadas en el catálogo de ObjectStack. Haga clic en una aplicación para ver detalles e instalarla en uno de sus entornos.`,searchPlaceholder:`Buscar aplicaciones por nombre o ID de manifiesto…`,searchAria:`Buscar aplicaciones del marketplace`,installed:`Instalado`,installedCount:`Instaladas ({{count}})`,refresh:`Actualizar`,all:`Todas`,noApprovedYet:`Aún no hay aplicaciones aprobadas para el marketplace.`,noMatchFilters:`Ninguna aplicación coincide con sus filtros.`,noDescription:`Sin descripción disponible.`,back:`Volver al marketplace`,installedTitle:`Aplicaciones instaladas`,installedSubtitle:`Paquetes del marketplace instalados en el kernel de este runtime.`,installedEmpty:`Aún no hay aplicaciones del marketplace instaladas en este runtime.`,browseLink:`Explorar marketplace →`,installedAdditiveNote:`<strong>Nota:</strong> La API del kernel es solo aditiva — desinstalar elimina el manifiesto del disco para que el paquete no se cargue al próximo inicio, pero el kernel en ejecución mantiene la aplicación registrada hasta reiniciar.`,installedAt:`Instalado {{when}}`,installedBy:`por {{user}}`,installedPackageId:`Paquete`,cachedAs:`Almacenado en caché como <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Instalado v{{version}}`,load:{failed:`No se pudo cargar el marketplace`,failedHint:`Por defecto, este runtime apunta a la nube pública de ObjectStack. Asegúrese de que el runtime esté en línea.`,packageFailed:`No se pudo cargar el paquete`,notFound:`No encontrado.`},detail:{homepage:`Página de inicio`,installedV:`Instalado · v{{version}}`,about:`Acerca de`,noReadme:`Sin readme disponible.`,versions:`Versiones`,noApprovedVersions:`Sin versiones aprobadas.`,prerelease:`Prelanzamiento`,moreOptions:`Más opciones de instalación`,uninstallFromRuntime:`Desinstalar de este runtime`,addSampleData:`Agregar datos de ejemplo`,reseedAgain:`Volver a cargar datos de ejemplo`,purgeSampleData:`Eliminar datos de ejemplo`,purgeConfirm:`¿Eliminar todos los registros de ejemplo creados por este paquete? Los registros añadidos por el usuario NO se verán afectados.`,purgeSuccess:`Se eliminaron {{count}} registro(s) de ejemplo.`,purgeNoData:`No se encontraron registros de ejemplo para eliminar.`,reseedQueued:`Los datos de ejemplo se volverán a cargar en el próximo acceso al entorno.`,reseedLocalSuccess:`Datos de ejemplo recargados: {{inserted}} insertados, {{updated}} actualizados.`,reseedPartialErrors:`({{count}} registro(s) no se pudieron escribir)`,updateAvailable:`Actualización disponible`},action:{installed:`Instalada`,install:`Instalar`,reinstall:`Reinstalar`,working:`Procesando…`,installToCloud:`Instalar en la nube…`,installing:`Instalando…`,uninstall:`Desinstalar`,uninstalling:`Desinstalando…`,details:`Detalles`,close:`Cerrar`,dismiss:`Descartar`,openOnCloud:`Abrir en la nube`,backHome:`Volver al inicio`,updateTo:`Actualizar`},install:{dialogTitle:`Instalar {{name}}`,dialogDescCurrent:`Instalar en este entorno ({{host}}).`,dialogDescPicker:`Elija un entorno donde instalar esta aplicación. Debe haber iniciado sesión en ObjectStack Cloud.`,environment:`Entorno`,environmentPlaceholder:`Seleccionar entorno`,includeSampleData:`Incluir datos de muestra`,noEnvs:`No se encontraron entornos en su organización activa.`,noPermission:`No tiene permiso para instalar aplicaciones en un entorno. Solo los propietarios y administradores de la organización pueden instalar.`,signInFirst:`Primero debe iniciar sesión en ObjectStack Cloud.`,success:`Instalado correctamente. Abra el entorno para ver la nueva aplicación.`,localSuccess:`v{{version}} instalado en este runtime. "{{name}}" debería aparecer en el selector de aplicaciones ahora.`,localManifestConflict:`{{message}}
|
|
24
|
-
Nota: Una aplicación local ya tiene este manifest_id. Primero elimínela de objectstack.config.ts.`,localUnauthorized:`Primero inicie sesión en este runtime.`,localMarketplaceUnavailable:`Este runtime no tiene configurado OS_CLOUD_URL.`,updateTo:`Actualizar → v{{version}}`,installedVersion:`Instalado v{{version}}`},org:{heading:`Su organización`,install:`Instalar`,installed:`{{name}} instalado`,installedBadge:`Instalado`,installing:`Instalando…`},disclosure:{containsCode:`Este paquete contiene código`,reviewed:`Revisado y aprobado`,unreviewed:`Sin revisar todavía`,signed:`Firmado`,grantsIntro:`Al instalarlo, este paquete recibirá:`,services:`Servicios de la plataforma`,hooks:`Hooks de ciclo de vida`,network:`Acceso a la red`,fs:`Acceso al sistema de archivos`,noPermissions:`No solicita permisos especiales.`,acknowledge:`Entiendo que este paquete ejecuta código y recibe los permisos anteriores.`,runtime:{node:`En el proceso · confianza total`,sandbox:`En sandbox`,worker:`Fuera del proceso`}},uninstall:{confirm:`¿Desinstalar {{manifestId}} v{{version}} de este runtime?
|
|
25
|
-
|
|
26
|
-
El manifiesto en caché será eliminado.`,successInList:`{{manifestId}} eliminado. Reinicie el runtime para descargarlo completamente.`,successInDetail:`Manifiesto en caché para {{manifestId}} eliminado.`},accessDenied:{title:`Marketplace solo para administradores`,description:`No tiene permiso para instalar aplicaciones en este entorno.`},category:{crm:`CRM`,erp:`ERP`,hr:`RRHH`,finance:`Finanzas`,project:`Gestión de proyectos`,collaboration:`Colaboración`,analytics:`Analítica`,integration:`Integración`,automation:`Automatización`,ai:`IA`,security:`Seguridad`,"developer-tools":`Herramientas de desarrollador`,"ui-theme":`Tema de UI`,storage:`Almacenamiento`,other:`Otro`},pricing:{free:`Gratis`,freemium:`Freemium`,paid:`De pago`,subscription:`Suscripción`,"usage-based":`Por uso`,"contact-sales":`Contactar ventas`},relativeTime:{today:`hoy`,daysAgo:`hace {{count}}d`,monthsAgo:`hace {{count}} meses`,yearsAgo:`hace {{count}} años`}},approvals:{approve:`Aprobar`,reject:`Rechazar`,comment:`Comentario (opcional)`,approveSuccess:`Aprobado`,rejectSuccess:`Rechazado`,rejectConfirm:`¿Rechazar esta solicitud de aprobación?`},approvalsInbox:{loadMore:`Cargar más`,loadingMore:`Cargando…`,loadedOf:`{{loaded}} de {{total}} cargadas`,actEscalate:`SLA escalado`,systemSlaActor:`Sistema (SLA)`,reassignBtn:`Reasignar`,reassignTitle:`¿Pasar esta aprobación a otra persona?`,reassignBody:`Tu puesto de aprobador pasa a la persona elegida; se le notifica y puede actuar de inmediato.`,reassignTo:`Nuevo aprobador`,reassignToPlaceholder:`Elige un usuario o escribe un email / role:<nombre>`,reassignSuccess:`Reasignada a {{to}}`,requestInfoBtn:`Pedir información`,requestInfoTitle:`¿Pedir más información al solicitante?`,requestInfoBody:`La solicitud sigue pendiente; el solicitante recibe un aviso y puede responder en el hilo.`,requestInfoPlaceholder:`¿Qué necesitas del solicitante?`,requestInfoSent:`Devuelta al solicitante para más información`,remindBtn:`Recordatorio`,remindSuccess:`Recordatorio enviado a {{count}} aprobador(es)`,remindThrottled:`Ya se envió un recordatorio hace poco; inténtalo más tarde.`,replyPlaceholder:`Responder en esta solicitud…`,slaRemaining:`SLA: quedan {{dur}}`,slaOverdue:`SLA vencido {{dur}}`,actReassign:`Reasignada`,reassignFromTo:`de {{from}} a {{to}}`,actRemind:`Recordatorio`,actRequestInfo:`Pidió más información`,actComment:`Comentó`,stepProgress:`Pasos de aprobación`,prevRequest:`Anterior`,nextRequest:`Siguiente`,positionOf:`Solicitud {{index}} de {{total}}`,progressApprovals:`Aprobaciones — {{got}} de {{need}}`,progressGroups:`Progreso de firmas — {{got}} de {{need}} grupos`,progressEligible:`{{count}} aprobador(es) elegible(s)`,progressBar:`Progreso de la decisión`,declaredActions:`Acciones`,attachmentChip:`Adjunto`,attachmentOpenFailed:`No se pudo abrir el archivo adjunto: inténtalo de nuevo`,approveOneTitle:`¿Aprobar «{{title}}»?`,approveOneBody:`Esto aprueba la solicitud con tu identidad. Para añadir un comentario o un adjunto, abre la solicitud.`,flowOrigin:`Iniciada por flujo`,sortBy:`Ordenar`,sortRecent:`Más recientes primero`,sortOldest:`Más antiguas primero`,sortAmount:`Importe (mayor→menor)`,quickPhrase1:`Aprobada: cumple los requisitos.`,quickPhrase2:`Aprobada con condiciones: supervisar la ejecución.`,quickPhrase3:`Añade documentación de apoyo y vuelve a enviarla.`,title:`Centro de aprobaciones`,subtitle:`Revisa y gestiona las solicitudes de aprobación.`,refresh:`Actualizar`,tabMyPending:`Pendientes de mí`,tabSubmitted:`Enviadas por mí`,tabAll:`Todas`,searchPlaceholder:`Buscar registro, proceso, solicitante…`,clearSearch:`Borrar búsqueda`,statusFilter:`Estado`,allStatuses:`Todos los estados`,processFilter:`Proceso`,allProcesses:`Todos los procesos`,objectFilter:`Objeto`,allObjects:`Todos los objetos`,filterCount:`{{shown}} de {{total}}`,selected:`seleccionadas`,actionableCount:`({{count}} accionables)`,selectAll:`Seleccionar todo`,selectRow:`Seleccionar solicitud`,colRequest:`Solicitud`,colRecord:`Registro`,colRequester:`Solicitante`,colStatus:`Estado`,colWaiting:`Enviada`,colActions:`Acciones`,statusPending:`Pendiente`,statusApproved:`Aprobada`,statusRejected:`Rechazada`,statusRecalled:`Retirada`,statusReturned:`Devuelto para revisión`,sendBackBtn:`Devolver`,sendBackTitle:`¿Devolver esta solicitud para revisión?`,sendBackBody:`Esta ronda termina y el registro se desbloquea para que el solicitante corrija los datos. Al volver a enviarla, se abre una nueva ronda de aprobación para todos los aprobadores.`,sendBackPlaceholder:`¿Qué hay que corregir antes de poder aprobarla?`,sendBackSuccess:`Devuelta para revisión: el solicitante ya puede editar y volver a enviar`,sendBackAutoRejected:`Límite de revisiones alcanzado: la solicitud se rechazó automáticamente`,actRevise:`Devuelto para revisión`,actResubmit:`Reenviado`,roundChip:`Ronda {{n}}`,returnedHint:`Un aprobador te devolvió esta solicitud. El registro está desbloqueado: corrige los datos y vuelve a enviarla para iniciar una nueva ronda de aprobación.`,resubmitBtn:`Volver a enviar`,resubmitting:`Reenviando…`,resubmitSuccess:`Reenviada: se abrió una nueva ronda de aprobación`,resubmitPlaceholder:`¿Qué cambiaste?`,editRecordBtn:`Editar registro`,abandonTitle:`¿Abandonar esta revisión?`,abandonBody:`La solicitud se retira en lugar de reenviarse. La aprobación termina aquí.`,emptyTitle:`Sin solicitudes`,emptyPending:`Todo al día: nada espera tu aprobación.`,emptyOther:`Aún no hay nada aquí.`,emptyViewAll:`Ver todas las solicitudes`,noMatches:`Sin coincidencias con los filtros actuales.`,keyboardHint:`Teclado: j/k mover · Enter abrir · x seleccionar · a aprobar · r rechazar`,drawerTitle:`Solicitud de aprobación`,submittedAgo:`Enviada {{when}}`,completedAt:`Completada {{when}}`,waitingOn:`A la espera de`,history:`Actividad`,noActions:`Aún no hay acciones.`,actSubmit:`Enviada`,actApprove:`Aprobada`,actReject:`Rechazada`,actRecall:`Retirada`,rawData:`Datos sin procesar (JSON)`,copy:`Copiar`,copied:`Copiado`,copyFailed:`Error al copiar`,overrideActor:`Actuar como otra identidad (admin)`,actor:`Actor`,auto:`Auto`,overrideHint:`p. ej. role:sales_manager. Déjalo vacío para usar la identidad detectada.`,comment:`Comentario (opcional)`,approve:`Aprobar`,approving:`Aprobando…`,reject:`Rechazar`,rejecting:`Rechazando…`,recall:`Retirar`,recalling:`Retirando…`,cancel:`Cancelar`,clear:`Limpiar`,approveN:`Aprobar {{count}}`,rejectN:`Rechazar {{count}}`,bulkApproveTitle:`¿Aprobar {{count}} solicitudes?`,bulkApproveBody:`Cada solicitud se aprueba con tu identidad y su flujo continúa por la rama de aprobación.`,bulkRejectTitle:`¿Rechazar {{count}} solicitudes?`,bulkRejectBody:`Se rechazarán las solicitudes seleccionadas y se notificará a los solicitantes.`,bulkApproved:`{{count}} solicitudes aprobadas`,bulkRejected:`{{count}} solicitudes rechazadas`,bulkPartial:`{{ok}} con éxito, {{fail}} fallidas: {{which}}`,rejectOneTitle:`¿Rechazar "{{title}}"?`,rejectOneBody:`Se rechaza la solicitud y se notifica al solicitante.`,rejectTitle:`¿Rechazar esta solicitud?`,rejectBody:`La solicitud se marcará como rechazada y se notificará al solicitante.`,recallTitle:`¿Retirar esta solicitud?`,recallBody:`Al retirarla, los aprobadores ya no podrán actuar y el registro se desbloqueará.`,inlineApproved:`"{{title}}" aprobada`,inlineRejected:`"{{title}}" rechazada`,approvedFinal:`Aprobada`,approvedWaiting:`Aprobada — a la espera del resto de aprobadores`,rejectedToast:`Rechazada`,recalledToast:`Solicitud retirada`,whyDisabled:`Solo los aprobadores asignados pueden actuar. A la espera de: {{who}}.`,whyDisabledSubmitter:`Enviaste esta solicitud, así que puedes retirarla; pero solo los aprobadores asignados pueden aprobarla o rechazarla.`,noActor:`No se puede determinar la identidad`,actionFailed:`La acción falló`,loadFailed:`No se pudo cargar la solicitud`,recallUnavailable:`Retirar no está disponible en esta implementación.`,requestGone:`Esta solicitud ya no existe. Actualiza la lista.`,notAllowed:`No tienes permiso para realizar esta acción.`,alreadyDecided:`Esta solicitud ya fue decidida. Actualiza la lista.`,justNow:`justo ahora`,minutesAgo:`hace {{count}} min`,hoursAgo:`hace {{count}} h`,daysAgo:`hace {{count}} días`},preview:{empty:{loadFailedTitle:`No se pudo cargar la vista previa del borrador`,loadFailedDescription:`No se pudo leer la capa de borrador. Reintenta o comprueba tu conexión.`,notReadyTitle:`«{{app}}» aún no está en el borrador`,notReadyDescription:`La compilación puede seguir en curso, o falló antes de preparar esta aplicación. Revise la conversación para ver el estado — este panel se actualiza cuando llegan borradores.`,nothingTitle:`Nada que previsualizar todavía`,retry:`Reintentar`},draftBar:{messageClean:`Vista previa del borrador — no hay cambios sin publicar; todo lo que ve aquí ya está activo.`,sampleDataTitle:`Los datos de ejemplo aparecen tras publicar`,sampleDataBody:`Está viendo la estructura de su aplicación. Publíquela para cargar registros de ejemplo y activarla.`,publishCta:`Publicar para verlo activo`,message:`Vista previa del borrador — está viendo cambios sin publicar. Nada de lo que ve aquí está activo hasta que publique.`,publish:`Publicar`,publishing:`Publicando…`,exit:`Salir de la vista previa`,changes:`Cambios`},changes:{title:`Cambios pendientes`,description:`Lo que cambiará al publicar. Los elementos nuevos se añaden; las actualizaciones sobrescriben la versión publicada.`,loading:`Cargando cambios pendientes…`,loadFailed:`No se pudieron cargar los cambios pendientes:`,empty:`Nada pendiente — todos los borradores se han publicado.`,kindNew:`Nuevo`,kindUpdate:`Actualización`,detailLoading:`Cargando detalles…`,detailLoadFailed:`No se pudieron cargar los detalles del cambio:`,detailNone:`No se detectaron diferencias — el borrador coincide con la versión publicada.`,detailChangedKeys:`También cambió:`,confirmNote:`Publicar libera atómicamente los {{count}} borradores pendientes de este paquete.`,publishConfirm:`Publicar todo`},unpublishedBar:{message:`Aplicación sin publicar — totalmente funcional, pero solo la ven los creadores. Publíquela para que sus usuarios la vean.`,publish:`Publicar`,publishing:`Publicando…`,published:`¡Publicado! La aplicación ya es visible para sus usuarios.`,publishFailed:`Error al publicar`},history:{button:`Historial`,title:`Historial de compilaciones`,description:`Todos los cambios de esta aplicación, los más recientes primero. Deshaga cualquier paso para revertirlo — no hace falta confirmar la publicación.`,loadFailed:`No se pudo cargar el historial:`,loadFailedUnavailable:`Almacén de commits temporalmente inaccesible — esta lectura no se produjo, por lo que no se muestra ningún historial. Vuelva a intentarlo en un momento.`,loading:`Cargando historial…`,empty:`Aún no hay historial para esta aplicación.`,revertLabel:`Se deshizo un cambio`,applyLabel:`Cambio de compilación`,revert:`deshacer`,items:`elementos`,revertAction:`Deshacer`,reverted:`Deshecho — el cambio se ha revertido.`,revertFailed:`Error al deshacer`,revertUnavailable:`Almacén de commits temporalmente inaccesible — es posible que la reversión no se haya aplicado. Vuelva a abrir este historial para comprobarlo antes de reintentar.`}},filterBuilder:{where:`Donde`,and:`Y`,or:`O`,clearAll:`Borrar todo`,selectField:`Seleccionar campo`,operator:`Operador`,selectValue:`Seleccionar valor`,value:`Valor`,addFilter:`Agregar filtro`,removeCondition:`Quitar condición`,trueLabel:`Verdadero`,falseLabel:`Falso`,noResults:`Sin resultados`,searchField:`Buscar {{label}}…`,enterId:`Ingresar ID de {{label}}`,operators:{equals:`Igual a`,notEquals:`Distinto de`,contains:`Contiene`,notContains:`No contiene`,isEmpty:`Está vacío`,isNotEmpty:`No está vacío`,greaterThan:`Mayor que`,lessThan:`Menor que`,greaterOrEqual:`Mayor o igual`,lessOrEqual:`Menor o igual`,before:`Antes de`,after:`Después de`,between:`Entre`,in:`En`,notIn:`No en`}},sortBuilder:{sortBy:`Ordenar por`,thenBy:`Luego por`,selectField:`Seleccionar campo`,ascending:`A → Z`,descending:`Z → A`,addSort:`Agregar orden`,removeSort:`Quitar orden`},collaboration:{commentCount:`{{count}} comentarios`,commentCountOne:`{{count}} comentario`,resolvedSuffix:` · Resuelto`,sortComments:`Ordenar comentarios`,sortOldest:`Más antiguos`,sortNewest:`Más recientes`,resolve:`Resolver`,reopen:`Reabrir`,justNow:`ahora mismo`,minutesAgo:`hace {{count}} min`,hoursAgo:`hace {{count}} h`,daysAgo:`hace {{count}} d`,edited:`(editado)`,reactionCount:`{{count}} reacciones`,reactionCountOne:`{{count}} reacción`,addThumbsUp:`Agregar me gusta`,reply:`Responder`,reactThumbsUp:`Reaccionar con me gusta`,reactHeart:`Reaccionar con corazón`,cancelReply:`Cancelar respuesta`,replyingTo:`Respondiendo a {{name}}…`,replyingToComment:`Respondiendo al comentario…`,commentPlaceholder:`Agregar un comentario… (usa @ para mencionar)`,send:`Enviar`,presentUserCount:`{{count}} usuarios presentes`,presentUserCountOne:`{{count}} usuario presente`,moreUserCount:`{{count}} usuarios más`,moreUserCountOne:`{{count}} usuario más`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`activo`,statusIdle:`inactivo`,statusAway:`ausente`},wizard:{missingRequired:`Complete los campos obligatorios: {{fields}}`},appManagement:{title:`Aplicaciones`,subtitle:`Gestione todas las aplicaciones configuradas`,newApp:`Nueva aplicación`,searchLabel:`Buscar aplicaciones`,searchPlaceholder:`Buscar aplicaciones…`,selectedCount:`{{n}} seleccionadas`,bulkEnable:`Habilitar`,bulkDisable:`Deshabilitar`,selectAll:`Seleccionar todo ({{n}})`,empty:`No se encontraron aplicaciones.`,defaultBadge:`Predeterminada`,active:`Activa`,inactive:`Inactiva`,selectApp:`Seleccionar {{name}}`,openApp:`Abrir aplicación`,openAppNamed:`Abrir {{name}}`,editApp:`Editar aplicación`,editAppNamed:`Editar {{name}}`,editWithAi:`Editar con IA`,editWithAiNamed:`Editar {{name}} con IA`,enableApp:`Habilitar aplicación`,disableApp:`Deshabilitar aplicación`,enableAppNamed:`Habilitar {{name}}`,disableAppNamed:`Deshabilitar {{name}}`,setDefault:`Establecer como predeterminada`,setDefaultNamed:`Establecer {{name}} como predeterminada`,deleteApp:`Eliminar aplicación`,deleteAppNamed:`Eliminar {{name}}`,confirmDelete:`Haga clic de nuevo para confirmar la eliminación`,confirmDeleteNamed:`Confirmar la eliminación de {{name}}`,toast:{noClient:`No se puede acceder al servicio de metadatos`,unknownError:`error desconocido`,appEnabled:`{{name}} habilitada`,appDisabled:`{{name}} deshabilitada`,toggleFailed:`Error al cambiar el estado de la aplicación: {{reason}}`,setDefaultDone:`{{name}} establecida como predeterminada`,setDefaultFailed:`Error al establecer la aplicación predeterminada: {{reason}}`,appDeleted:`{{name}} eliminada`,deleteFailed:`Error al eliminar la aplicación: {{reason}}`,bulkEnabled:`{{n}} aplicaciones habilitadas`,bulkDisabled:`{{n}} aplicaciones deshabilitadas`,bulkFailed:`Error en {{n}}: {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:`; `,bulkOperationFailed:`Error en la operación masiva: {{reason}}`}}},pt:{impersonation:{banner:{message:`Você está personificando {{user}} — todas as ações são registradas em nome dele.`,startedBy:`Iniciado pelo administrador {{admin}}.`,stop:`Parar personificação`,stopping:`Encerrando…`,stopFailed:`Não foi possível parar a personificação: {{reason}}`,notRestored:`O servidor aceitou a solicitação, mas não restaurou sua sessão de administrador — você ainda está personificando {{user}}. Saia e entre novamente para encerrar.`}},capability:{label:{manage_users:`Gerenciar usuários`,manage_org_users:`Gerenciar usuários da organização`,manage_metadata:`Gerenciar metadados`,manage_platform_settings:`Gerenciar configurações da plataforma`,setup_access:`Acesso à configuração`,setup_write:`Gravação de configurações`,studio_access:`Acesso ao Studio`},group:{platform:`Plataforma`,org:`Organização`,other:`Outro`}},perm:{facet:{none:`Nenhum`,more:`+{{count}} mais`,objects:`{{count}} objetos`,objects_one:`{{count}} objeto`,fields:`{{count}} regras de campo`,fields_one:`{{count}} regra de campo`,rls:`{{count}} políticas RLS`,rls_one:`{{count}} política RLS`,tabs:`{{count}} regras de aba`,tabs_one:`{{count}} regra de aba`,adminScope:`Administração delegada configurada`,designInStudio:`Projetar no Studio →`,designInStudioHint:`Projetar no Studio`}},lookup:{recentlyUsed:`Usados recentemente`,allResults:`Todos os resultados`,createNew:`Criar novo`,createNamed:`Criar “{{name}}”`,showingResults:`Mostrando {{shown}} de {{total}} resultados`,showAllResults:`Ver todos os resultados ({{count}})`,selectedBadge:`Selecionado`,browseAll:`Procurar todos os registros`,remove:`Remover {{label}}`,selectFirst:`Selecione primeiro {{fields}}`,selectRecord:`Selecionar registro`,recordCount:`{{count}} registros`,recordCountOne:`1 registro`,pageOf:`Página {{current}} de {{total}}`,filters:`Filtros`,clear:`Limpar`,yes:`Sim`,filterPlaceholder:`Filtrar {{label}}`,prevPage:`Página anterior`,nextPage:`Próxima página`,jumpToPage:`Ir para a página`,retry:`Tentar novamente`,loading:`Carregando…`,noOptions:`Nenhuma opção encontrada`,noRecords:`Nenhum registro encontrado`},common:{addToFavorites:`Adicionar aos favoritos`,removeFromFavorites:`Remover dos favoritos`,loading:`Carregando…`,save:`Salvar`,cancel:`Cancelar`,delete:`Excluir`,edit:`Editar`,create:`Criar`,filter:`Filtrar`,reset:`Redefinir`,confirm:`Confirmar`,close:`Fechar`,back:`Voltar`,next:`Próximo`,previous:`Anterior`,submit:`Enviar`,refresh:`Atualizar`,export:`Exportar`,import:`Importar`,yes:`Sim`,no:`Não`,ok:`OK`,actions:`Ações`,more:`Mais`,selectAll:`Selecionar tudo`,clearAll:`Limpar tudo`,noData:`Sem dados`,noResults:`Nenhum resultado encontrado`,required:`Obrigatório`,optional:`Opcional`,selectOption:`Selecionar uma opção`,select:`Selecionar…`,openChat:`Abrir chat`,closeChat:`Fechar chat`,closePanel:`Fechar painel`,resizeDrawer:`Redimensionar painel`,itemCount:`{{count}} itens`,itemCountOne:`{{count}} item`,toggleSidebar:`Alternar barra lateral`,package:`Pacote`,done:`Concluído`,editInStudio:`Editar no Studio`,record:`Registro`,retry:`Tentar novamente`,printDialogHint:`Abre a caixa de diálogo de impressão do navegador (não é uma exportação para PDF)`},actions:{decisionOutput:{help:`Entregue ao fluxo como saída da decisão.`,helpMultiValue:`Entregue ao fluxo como saída da decisão. Separe vários valores por vírgulas.`},resultDialog:{defaultTitle:`Guarde este valor agora`,acknowledge:`Eu o salvei`,copyAll:`Copiar tudo`}},validation:{required:`{{field}} é obrigatório`,minLength:`{{field}} deve ter pelo menos {{min}} caracteres`,maxLength:`{{field}} deve ter no máximo {{max}} caracteres`,min:`{{field}} deve ser pelo menos {{min}}`,max:`{{field}} deve ser no máximo {{max}}`,email:`Por favor, insira um endereço de e-mail válido`,url:`Por favor, insira uma URL válida`,pattern:`O formato de {{field}} é inválido`,formInvalid:`Verifique os campos destacados: {{fields}}`,formInvalidJoiner:`, `,unique:`{{field}} deve ser único`,type:`{{field}} deve ser um {{type}} válido`},form:{noPermissionToSave:`Você não tem permissão para salvar este registro.`,submitFailed:`Não foi possível salvar. Tente novamente.`,discardTitle:`Descartar as alterações?`,discardMessage:`Você tem alterações não salvas. Se fechar este formulário agora, suas edições serão perdidas.`,dialogDescriptionFallback:`Preencha os campos do formulário e depois envie ou cancele.`,keepEditing:`Continuar editando`,discard:`Descartar`,conflictTitle:`Conflito ao salvar`,conflictMessage:`Outra pessoa alterou este registro enquanto você editava. Sobrescrever substituirá as alterações dela pelas suas.`,conflictLatestVersion:`Salvamento dela: {{time}}`,conflictOverwrite:`Sobrescrever`,addItem:`Adicionar item`,removeItem:`Remover item`,fieldRequired:`Este campo é obrigatório`,invalidFormat:`Formato inválido`,saveSuccess:`Salvo com sucesso`,saveError:`Falha ao salvar`,unsavedChanges:`Você tem alterações não salvas. Tem certeza de que deseja sair?`,stepOf:`Etapa {{current}} de {{total}}`,createTitle:`Criar {{object}}`,editTitle:`Editar {{object}}`,viewTitle:`Ver {{object}}`,createTargetOrg:`Criação em {{org}}`,saveRecord:`Salvar registro`,create:`Criar`,update:`Atualizar`,createSuccess:`{{object}} criado`,updateSuccess:`{{object}} atualizado`,deleteSuccess:`{{object}} excluído`,fullscreen:{title:`Editar texto`,description:`Edite o valor de texto completo e depois salve ou cancele as alterações.`,done:`Concluído`,toggle:`Editar {{label}} em tela cheia`,textFallback:`texto`}},fields:{image:{upload:`Enviar imagem`,addMore:`Adicionar mais imagens`,uploading:`Enviando…`,imageAlt:`Imagem {{index}}`,crop:`Recortar a imagem {{index}}`,remove:`Remover a imagem {{index}}`,enlarge:`Ampliar {{name}}`,preview:`Pré-visualização da imagem`,previous:`Imagem anterior`,next:`Próxima imagem`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`Atrasado {{count}} d`},file:{dragDropHere:`Arraste e solte arquivos aqui`,dropFilesHere:`Solte os arquivos aqui`,browseHint:`ou clique para procurar`,browseHintCamera:`ou clique para procurar • use o botão da câmera abaixo`,takePhoto:`Tirar foto`,takeSelfie:`Tirar selfie`,cameraCapture:`Captura da câmera`,uploading:`Enviando…`,uploadingPct:`Enviando… ({{pct}} %)`,fileFallback:`Arquivo`,upload:`Enviar`,remove:`Remover {{name}}`,exceedsMaxSize:`"{{name}}" excede o tamanho máximo ({{max}} MB)`,uploadFailed:`Falha ao enviar "{{name}}": {{error}}`},richText:{format:`Formato: {{format}}`,basicEditorHint:`Editor de texto rico (básico)`,placeholder:`Digite algo…`},options:{empty:`Nenhuma opção disponível`,selectFirst:`Selecione primeiro {{fields}}`},objectRef:{loading:`Carregando objetos…`,placeholder:`Selecionar um objeto`,search:`Pesquisar objetos…`,empty:`Nenhum objeto encontrado`},recipient:{selectTypeFirst:`Selecione primeiro um tipo de destinatário.`,loading:`Carregando…`,search:`Pesquisar…`,empty:`Nenhuma correspondência`,select:`Selecionar um destinatário`,selectUser:`Selecionar um usuário`,selectTeam:`Selecionar uma equipe`,selectBusinessUnit:`Selecionar uma unidade de negócio`,selectPosition:`Selecionar um cargo`,selectUnitAndSubordinates:`Selecionar uma unidade de negócio`},filterCondition:{selectObjectFirst:`Selecione primeiro um objeto.`,noCriteria:`Sem critérios — esta regra não compartilha nada`,criteriaRequired:`Adicione pelo menos uma condição. Uma regra sem critérios compartilharia todos os registros, portanto não pode ser salva.`,invalidJson:`JSON inválido — a regra não corresponderá a nenhum registro até ser corrigida.`,jsonOnly:`Este critério só pode ser editado como JSON`,editAsJson:`Editar como JSON`,useVisualBuilder:`Usar o construtor visual`},tags:{placeholder:`Digite e pressione Enter para adicionar…`},textarea:{characterCount:`Contagem de caracteres: {{count}} de {{max}}`,charactersRemaining:`Caracteres restantes: {{count}}`}},table:{rowsPerPage:`Linhas por página`,showing:`Mostrando {{from}} a {{to}} de {{total}}`,noRows:`Nenhuma linha para exibir`,sortAsc:`Ordenar crescente`,sortDesc:`Ordenar decrescente`,filterColumn:`Filtrar {{column}}`,columns:`Colunas`,exportCSV:`Exportar CSV`,exportExcel:`Exportar Excel`,selectRow:`Selecionar linha`,selectAllRows:`Selecionar todas as linhas`,expandRow:`Expandir linha`,collapseRow:`Recolher linha`,hideColumn:`Ocultar coluna`,freezeColumn:`Fixar coluna`,unfreezeColumn:`Soltar coluna`,pageInfo:`Página {{current}} de {{total}}`,totalRecords:`{{count}} no total`,noResults:`Sem resultados`,noResultsHint:`Tente ajustar seus filtros ou termos de pesquisa.`,cancelAll:`Cancelar tudo`,saveAll:`Salvar tudo ({{count}})`,addRecord:`Adicionar registro`,open:`Abrir`,search:`Pesquisar…`,modified:`{{count}} linha(s) modificada(s)`,saveFailed:`Falha ao salvar`,selected:`{{count}} selecionado(s)`,edit:`Editar`,delete:`Excluir`},grid:{bulkSelected:`{{count}} selecionados`,bulkSelectedAllMatches:`{{count}} selecionados (todas as correspondências)`,bulkClear:`Limpar seleção`,bulkAllOnPage:`Os {{count}} desta página estão selecionados.`,bulkSelectAllMatching:`Selecionar todas as {{count}} correspondências`,bulkAllMatchingSelected:`Todos os {{count}} registros correspondentes estão selecionados.`,bulk:{confirmDefault:`Isto será aplicado a {{count}} registro(s).`,overLimit:`A seleção ({{count}}) excede o limite da ação ({{limit}}). Reduza a seleção para prosseguir.`,affectedRecords:`Registros afetados ({{count}}):`,skippedIneligible:`{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.`,rowFallback:`Linha {{index}}`,andMore:`… e mais {{count}}`,processed:`{{count}} / {{total}} processados`,processedFailed:` · {{count}} com falha`,undonePrefix:`Desfeito — `,succeeded:`Concluídos {{count}} / {{total}}`,resultFailed:` · Falhas {{count}}`,retry:`Tentar novamente`,downloadErrorCsv:`Baixar CSV de erros`,cancel:`Cancelar`,back:`Voltar`,next:`Avançar`,run:`Executar`,running:`Executando…`,undo:`Desfazer`,undoing:`Desfazendo…`,done:`Concluído`,selectPlaceholder:`Selecionar…`,loading:`Carregando…`},actions:`Ações`,edit:`Editar`,delete:`Excluir`,export:`Exportar`,exportAs:`Exportar como {{format}}`,loading:`Carregando grade…`,errorLoading:`Erro ao carregar grade`,pullToRefresh:`Puxe para atualizar`,refreshing:`Atualizando…`,openRecord:`Abrir registro`,rowHeight:`Altura da linha: {{mode}}`,openMenu:`Abrir menu`,empty:`Vazio`,yes:`Sim`,no:`Não`,systemFields:`Sistema`,summary:{pattern:`{{label}}: {{value}}`,count:`Contagem`,countEmpty:`Vazios`,countFilled:`Preenchidos`,countUnique:`Únicos`,percentEmpty:`Vazios`,percentFilled:`Preenchidos`,sum:`Soma`,avg:`Média`,min:`Mín.`,max:`Máx.`},toolbar:{densityMode:`Densidade`,densityCompact:`Compacto`,densityComfortable:`Normal`,densitySpacious:`Espaçoso`,densityCycleHint:`{{label}} (clique para alterar)`,densityCycleShortHint:`Clique para alterar`},import:{downloadTemplate:`Baixar modelo`,downloadTemplateHint:`Obtenha um CSV com as colunas corretas (campos obrigatórios marcados com *).`,templateFileName:`{{object}}-import-template`,autoMatched:`Correspondência automática`,autoMatchedSummary:`{{count}} coluna(s) com correspondência automática — revise e ajuste abaixo.`,confidence:{high:`Confiança alta`,medium:`Confiança média`,low:`Confiança baixa`},asyncQueued:`Na fila — preparando a importação…`,asyncProcessing:`Importando {{processed}} de {{total}} linhas… {{progress}}%`,asyncLargeHint:`Este arquivo é grande, portanto será importado em segundo plano.`,largeSampleNotice:`Pré-visualizando as primeiras {{shown}} de {{total}} linhas.`,cancelImport:`Cancelar a importação`,importCancelled:`Importação cancelada`,resultsTruncated:`Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).`,createdCount:`{{count}} criados`,updatedCount:`{{count}} atualizados`,downloadFailed:`Baixar as linhas com falha`,options:`Opções de importação`,writeMode:`Quando uma linha corresponde a um registro existente`,writeModeOpt:{insert:`Sempre criar novo`,update:`Atualizar o existente (ignorar se não houver correspondência)`,upsert:`Atualizar se corresponder, senão criar`},matchFields:`Corresponder por`,matchFieldsPlaceholder:`Escolha o(s) campo(s) de correspondência…`,matchFieldsHint:`As linhas são associadas a registros existentes por estes campos.`,needMatchFields:`Selecione pelo menos um campo de correspondência.`,matchOnlyField:`(somente correspondência)`,optCreateOptions:`Manter valores de opção desconhecidos`,optRunAutomations:`Executar automações e gatilhos`,optTreatHistorical:`Importar como dados históricos`,optTreatHistoricalHint:`(importa registros concluídos como estão — ignora as verificações da máquina de estados e mantém os carimbos de data/hora e o autor originais em vez de carimbar agora)`,optSkipBlankKey:`Ignorar linhas com valor de correspondência em branco`,optBackground:`Importar em segundo plano`,optBackgroundHint:`(executa como um trabalho reversível)`,validate:`Validar os dados`,validating:`Validando…`,validateHint:`Verificar cada linha no servidor antes de importar.`,validatePassed:`Todas as {{ok}} linhas são válidas.`,validateFailed:`{{ok}} válidas, {{errors}} com erros.`,errorRowPrefix:`Linha {{row}}: `,referenceNotFound:`Nenhum registro corresponde a "{{value}}"`,referenceAmbiguous:`"{{value}}" corresponde a mais de um registro — use um valor único ou o id do registro`,invalidBoolean:`"{{value}}" não é um valor verdadeiro/falso válido`,invalidNumber:`"{{value}}" não é um número válido`,invalidDate:`"{{value}}" não é uma data válida`,invalidOption:`"{{value}}" não está entre as opções permitidas`,requiredValue:`Este campo é obrigatório`,matchAmbiguous:`Corresponde a mais de um registro existente — use um valor único ou o id do registro`,history:`Histórico`,historyBack:`Voltar para a importação`,historyDescription:`Importações recentes deste objeto.`,historyHint:`Trabalhos de importação em segundo plano, dos mais recentes aos mais antigos.`,historyRefresh:`Atualizar`,historyLoading:`Carregando…`,historyEmpty:`Ainda não há importações.`,historyUnsupported:`O histórico de importações não está disponível para esta fonte de dados.`,historyColStatus:`Status`,historyColRows:`Linhas`,historyColResult:`Resultado`,historyColTime:`Quando`,errorCount:`{{count}} erros`,undoImport:`Desfazer a importação`,undoing:`Desfazendo…`,undoConfirm:`Desfazer esta importação? Os registros criados serão excluídos e os registros atualizados voltarão aos valores anteriores.`,reverted:`Desfeita`,jobStatus:{pending:`Pendente`,running:`Em execução`,succeeded:`Concluída`,failed:`Falhou`,cancelled:`Cancelada`},legacyReferenceBlocked:`Importação bloqueada: {{fields}} são campos de relação que precisam da rota de importação do servidor para converter nomes em IDs de registro, e esta conexão não oferece suporte a isso. Importá-los como texto simples corromperia os dados. Atualize o backend/cliente, ou desfaça o mapeamento dessas colunas e importe-as separadamente.`,missingRequiredHint:`Não é possível continuar — campos obrigatórios não mapeados: {{fields}}. Adicione uma coluna correspondente ao seu arquivo, ou volte e envie um arquivo que a inclua.`,legacyFallbackNotice:`Importado por um modo de compatibilidade: esta conexão não oferece suporte à rota de importação do servidor, então os valores foram salvos como texto sem conversão de tipos no servidor. Atualize o backend/cliente para ter a importação completa (conversão de tipos e busca de relações).`,title:`Importar {{object}}`,notAllowed:`Este objeto não está aberto para importação.`,stepUpload:`Enviar`,stepMapping:`Mapeamento`,stepPreview:`Pré-visualização`,uploadDescription:`Envie um arquivo CSV ou Excel, ou cole de uma planilha para começar.`,mappingDescription:`Mapeie colunas para campos do objeto.`,previewDescription:`Revise os dados antes de importar.`,dragDrop:`Arraste e solte um arquivo CSV ou Excel aqui, ou clique para procurar`,browseFiles:`Procurar arquivos`,parsing:`Analisando…`,pasteHint:`ou cole (Ctrl/⌘+V) linhas copiadas do Excel ou Google Planilhas`,legacyXls:`Arquivos .xls antigos não são suportados — salve novamente como .xlsx.`,unsupportedFile:`Tipo de arquivo não suportado. Use CSV, TSV ou Excel (.xlsx).`,parseFailed:`Não foi possível ler este arquivo. Verifique o formato e tente novamente.`,fileNeedsHeader:`O arquivo deve ter uma linha de cabeçalho e pelo menos uma linha de dados.`,mappingTemplate:`Modelo de mapeamento:`,chooseTemplate:`Escolher modelo…`,noSavedTemplates:`Sem modelos salvos`,noneOption:`— Nenhum —`,saveCurrent:`Salvar atual`,templateName:`Nome do modelo`,save:`Salvar`,deleteTemplate:`Excluir modelo`,savedMapping:`Mapeamento salvo:`,chooseSavedMapping:`Escolher um mapeamento salvo…`,manualMapping:`— Mapear colunas manualmente —`,transform:`Transformação`,savedMappingHint:`O mapeamento "{{name}}" aplica renomeação + transformações + conversão de tipos no servidor. O mapeamento de colunas é somente leitura.`,savedMappingPreviewNote:`A pré-visualização mostra suas colunas de origem; na importação, o mapeamento "{{name}}" aplica renomeação, transformações e conversão de tipos no servidor.`,csvColumn:`Coluna`,mapsTo:`Mapeia para`,typeMismatch:`Parece {{type}}`,type:{number:`Número`,boolean:`Booleano`,date:`Data`,datetime:`Data e hora`,text:`Texto`},status:`Status`,skipColumn:`Pular coluna`,skip:`— Pular —`,mapped:`Mapeado`,skipped:`Pulado`,rowsWithErrors:`{{count}} linha(s) com erros`,rowsCorrected:`{{count}} linha(s) corrigida(s)`,clickToFix:`— clique em uma célula destacada para editar em linha.`,showingRows:`Mostrando {{shown}} de {{total}} linhas`,importing:`Importando… {{progress}}%`,importComplete:`Importação concluída`,imported:`{{count}} importado(s)`,skippedCount:`{{count}} pulado(s)`,moreErrors:`…e {{count}} erro(s) a mais`,cancel:`Cancelar`,back:`Voltar`,next:`Próximo`,close:`Fechar`,importNRows:`Importar {{count}} linhas`,importingProgress:`Importando…`,requiredMark:`*`,required:`Obrigatório`,invalidType:`{{type}} inválido`}},calendar:{today:`Hoje`,month:`Mês`,week:`Semana`,day:`Dia`,agenda:`Agenda`,allDay:`Dia inteiro`,noEvents:`Sem eventos`,newEvent:`Novo evento`,moreEvents:`+{{count}} mais`},list:{firstRunTitle:`Ainda não há nada aqui`,firstRunMessage:`Crie seu primeiro registro para começar.`,noMatches:`Nenhum registro correspondente`,noMatchesMessage:`Nenhum registro corresponde aos seus filtros ou à sua busca atuais. Tente ajustá-los ou limpá-los.`,loadErrorTitle:`Não foi possível carregar os registros`,loadErrorMessage:`Algo deu errado ao carregar estes dados. Verifique sua conexão e tente novamente.`,loadErrorForbiddenTitle:`Você não tem acesso`,loadErrorForbiddenMessage:`Você não tem permissão para ver estes registros. Contate seu administrador se acha que deveria ter acesso.`,loadErrorUnauthorizedTitle:`É necessário entrar`,loadErrorUnauthorizedMessage:`Sua sessão expirou ou você saiu. Entre novamente para ver estes registros.`,loadErrorRejectedTitle:`A consulta desta visualização foi rejeitada`,loadErrorRejectedMessage:`O servidor não conseguiu processar o filtro ou as opções de consulta desta visualização. Limpar os filtros costuma resolver; se a visualização estiver salva assim, um administrador precisa corrigi-la.`,loadErrorApiDisabledTitle:`Este objeto não está disponível pela API`,loadErrorApiDisabledMessage:`Esta página não consegue carregar seus registros porque o objeto não está exposto pela API. Isso é uma configuração do próprio objeto, não uma permissão — um administrador precisa habilitar o acesso via API para que esta página funcione.`,retry:`Tentar novamente`,managedBy:{system:{title:`Ainda não há nada aqui`,message:`As entradas aparecem automaticamente quando a ação de origem é executada (por exemplo, Enviar para aprovação, Compartilhar, Convidar). Acione uma delas em um registro de origem para criar uma linha.`},appendOnly:{title:`Nenhum evento registrado`,message:`Este é um log de auditoria imutável. As linhas são gravadas pela plataforma quando ocorrem eventos — você pode exportar o histórico, mas não criar entradas aqui.`},betterAuth:{title:`Nenhum registro de identidade`,message:`Estes registros são criados pelo provedor de autenticação — por meio de login, provisionamento e fluxos de segurança — e não adicionados manualmente aqui.`},betterAuthUser:{title:`Ainda não há usuários`,message:`As contas de usuário são provisionadas pelo provedor de autenticação, não criadas aqui. Convide colegas para sua organização e eles aparecerão automaticamente no primeiro login (provisionamento SSO just-in-time). Os usuários finais do app chegam quando se cadastram por meio dele.`},betterAuthTeam:{title:`Ainda não há equipes`,message:`As equipes agrupam membros dentro de uma organização. Crie uma com "Criar equipe", ou elas surgem pelos fluxos de provisionamento de organização e SSO do seu provedor de autenticação.`}},refresh:`Atualizar`,loading:`Carregando registros…`,recordCount:`{{count}} registros`,recordCountOne:`{{count}} registro`,addRecord:`Adicionar registro`,tabs:`Abas`,allRecords:`Todos os registros`,search:`Pesquisar`,filter:`Filtrar`,filterRecords:`Filtrar registros`,sort:`Ordenar`,sortRecords:`Ordenar registros`,sortByIdSuffix:`(por ID)`,sortRelationalHint:`As colunas que apontam para outro registro não são listadas: elas só podem ser ordenadas pelo ID armazenado, não pelo nome exibido na célula. Para ordenar por esse nome, desnormalize-o neste objeto como um campo armazenado, gravado quando a origem muda, e ordene por ele. Não um campo de fórmula: ele é virtual, nenhuma coluna é armazenada para ele e o servidor recusa ordenar por ele.`,resetSortToDefault:`Restaurar o padrão da exibição`,group:`Agrupar`,groupBy:`Agrupar por`,export:`Exportar`,exportAs:`Exportar como {{format}}`,color:`Cor`,rowColor:`Cor da linha`,colorByField:`Colorir por campo`,clear:`Limpar`,none:`Nenhum`,hideFields:`Ocultar campos`,noItems:`Nenhum item encontrado`,noItemsMessage:`Não há registros para exibir. Tente ajustar os filtros ou adicionar novos dados.`,showAll:`Mostrar tudo`,pullToRefresh:`Puxar para atualizar`,refreshing:`Atualizando…`,share:`Compartilhar`,print:`Imprimir`,hideFieldsTitle:`Ocultar campos`,dataLimitReached:`Os primeiros {{limit}} registros estão sendo exibidos. Pode haver mais dados disponíveis.`,viewSettings:`Configurações de exibição`,viewSettingsHint:`Agrupamento, cor, densidade e campos visíveis.`,addGroup:`Adicionar campo de grupo`,collapsedByDefault:`Recolhido por padrão`,removeGroup:`Remover`,inlineEditShort:`Edição em linha`,inlineEditLabel:`Editar registros em linha (clique em uma célula para editar)`,recordEditingTitle:`Edição de registros`},managedByBadge:{systemWritable:{short:`Esquema da plataforma`,title:`Definido pela plataforma, gravável pelo administrador`,body:`O esquema deste objeto é definido pela plataforma, mas as linhas são suas para criar e editar aqui. Quem pode gravar é determinado pela administração delegada e pela segurança em nível de registro, não por este selo.`},config:{short:`Config. de admin`,title:`Configuração do administrador`,body:`Estas linhas definem o comportamento da plataforma em tempo de execução. Crie-as aqui; os dados de tempo de execução produzidos ficam em uma tabela separada.`},system:{short:`Gerenciado pelo sistema`,title:`Gerenciado pela plataforma`,body:`As linhas são criadas automaticamente quando ações são executadas no registro de origem. A lista é uma superfície de monitoramento somente leitura — as ações por linha (Aprovar, Retirar, Reenviar, …) ficam em cada linha.`},appendOnly:{short:`Somente leitura · Log de auditoria`,title:`Registro histórico somente leitura`,body:`Log de auditoria imutável. As linhas não podem ser criadas, editadas ou excluídas pela interface: a plataforma as grava quando os eventos ocorrem. Use Exportar para baixar para revisão de conformidade.`},betterAuth:{short:`Identidade`,title:`Gerenciado pelo provedor de identidade`,body:`O esquema deste objeto pertence a {{provider}}. Edições diretas ignoram o hash de senhas, a validação de sessões, as verificações de dois fatores e os hooks de auditoria. Gerencie esses registros pelos fluxos de login, convite e segurança do seu provedor de autenticação.`}},kanban:{uncategorized:`Sem categoria`,columns:`colunas`,addCard:`Adicionar cartão`,addColumn:`Adicionar coluna`,moveCard:`Mover cartão`,deleteCard:`Excluir cartão`,deleteColumn:`Excluir coluna`,noCards:`Sem cartões`,cardTitlePlaceholder:`Digite o título do cartão…`,requiredFieldsTitle:`Preencha os campos obrigatórios`,requiredFieldsDescription:`Esta movimentação torna os campos abaixo obrigatórios. Preencha-os para continuar.`},timeline:{bucket:{overdue:`Atrasado`,today:`Hoje`,tomorrow:`Amanhã`,thisWeek:`Esta semana`,nextWeek:`Próxima semana`,later:`Mais tarde`,noDate:`Sem data`,unassigned:`Não atribuído`},scale:{week:`Semana {{n}}`,quarter:`T{{quarter}} {{year}}`},gantt:{rowLabel:`Itens`}},gantt:{viewMode:{day:`Dia`,week:`Semana`,month:`Mês`,quarter:`Trimestre`,year:`Ano`},row:{expand:`Expandir`,collapse:`Recolher`,open:`Abrir detalhes`},aria:{taskList:`Lista de tarefas`},tooltip:{days:`d`},menu:{view:`Ver detalhes`,edit:`Editar em linha`,delete:`Excluir`,addPredecessor:`Adicionar predecessora…`,addSuccessor:`Adicionar sucessora…`,removeDependency:`Remover a dependência`,noCandidates:`Nenhuma tarefa disponível`,searchTasks:`Pesquisar tarefas…`},delete:{title:`Excluir esta tarefa?`,body:`"{{title}}" será removida permanentemente. Esta ação não pode ser desfeita.`,cancel:`Cancelar`,confirm:`Excluir`,deleting:`Excluindo…`},drawer:{fallbackTitle:`Detalhes da tarefa`},linkType:{fs:`Término → Início`,ss:`Início → Início`,ff:`Término → Término`,sf:`Início → Término`},linkEnd:{start:`Início`,end:`Fim`},link:{rejected:{self:`Uma tarefa não pode depender de si mesma.`,locked:`Esta linha está bloqueada e não pode receber uma nova dependência.`,group:`Uma linha de resumo não pode receber dependências: vincule uma das suas tarefas.`,cycle:`Esse vínculo criaria uma dependência circular.`}},conflict:{title:`Conflito de agendamento`,body:`Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa(s) afetada(s)?`,confirm:`Reagendar automaticamente`,cancel:`Manter como está`},autoScheduleDlg:{title:`Agendamento automático`,body:`Adiar {{count}} tarefa(s) para atender aos vínculos de dependência?`,skipped:`{{count}} tarefa(s) bloqueada(s) também violam os vínculos e foram ignoradas.`,confirm:`Aplicar`,cancel:`Cancelar`,none:`Todas as dependências foram atendidas — nada a reagendar.`},resource:{header:`Recurso`,peak:`Pico`,over:`sobrecarregado`,empty:`Nenhuma tarefa para alocar.`},quickFilter:{all:`Todos`,clear:`Limpar filtros`,empty:`Sem opções`,resultSummary:`Exibindo {shown} / {total} tarefas`},readOnly:`Somente leitura`,readOnlyHint:`A edição está desativada nesta visão.`,lockedHint:`Sem permissão de edição`,writeFailed:`Falha ao salvar — a alteração foi revertida`,column:{taskName:`Nome da tarefa`,start:`Início`,end:`Fim`},toolbar:{thisWeek:`Esta semana`,thisMonth:`Este mês`,viewMode:`Granularidade da linha do tempo`,enterFullscreen:`Entrar em tela cheia`,exitFullscreen:`Sair da tela cheia`,criticalPath:`Destacar o caminho crítico`,autoSchedule:`Agendar dependências automaticamente`,exportPng:`Exportar como PNG`,exportPdf:`Exportar PDF`,saveLayout:`Salvar o layout`,refresh:`Atualizar`,undo:`Desfazer`,redo:`Refazer`,prevPeriod:`Período anterior`,nextPeriod:`Próximo período`,zoomIn:`Ampliar`,zoomOut:`Reduzir`,jumpToToday:`Ir para hoje`,today:`Hoje`,showTaskList:`Mostrar lista de tarefas`,hideTaskList:`Ocultar lista de tarefas`}},view:{editViewConfig:`Editar configuração da vista`,rename:`Renomear`,duplicateView:`Duplicar visualização`,shareView:`Compartilhar visualização`,setAsDefault:`Definir como padrão`,pinView:`Fixar visualização`,unpinView:`Desfixar visualização`,changeViewType:`Alterar tipo de visualização`,deleteView:`Excluir visualização`,addView:`Adicionar visualização`,unsavedChanges:`Alterações não salvas`,saveAsView:`Salvar como visualização`,moreViews:`mais {{count}}`,activeFilters:`Filtros ativos`,activeSort:`Ordenação ativa`,manageViews:`Gerenciar exibições`,manageAllViews:`Gerenciar todas as exibições…`,manageViewsDescription:`Reordenar, renomear, fixar ou excluir todas as exibições deste objeto.`,searchViews:`Pesquisar exibições`,addNewView:`Adicionar nova exibição`,done:`Concluído`,noViewsFound:`Nenhuma exibição corresponde à sua pesquisa.`,dragToReorder:`Arrastar para reordenar`,defaultView:`Exibição padrão`,defaultBadge:`padrão`,tabActionsFor:`Ações de exibição para {{name}}`,readonlyAriaLabel:`Exibição somente leitura`,readonlyTooltip:`Exibição do sistema — definida no código, somente leitura.`},designer:{undo:`Desfazer`,redo:`Refazer`},detail:{editInlineHint:`Clique duas vezes para editar`,systemActor:`Sistema`,unknownUser:`Desconhecido`,created:`Criado`,updated:`Atualizado`,back:`Voltar`,edit:`Editar`,editInline:`Editar`,save:`Salvar`,saveChanges:`Salvar alterações`,editFieldsInline:`Editar campos`,share:`Compartilhar`,duplicate:`Duplicar`,export:`Exportar`,viewHistory:`Ver histórico`,delete:`Excluir`,moreActions:`Mais ações`,addReaction:`Adicionar reação`,pageHeaderActions:`Ações do cabeçalho da página`,emojiPicker:`Seletor de emojis`,reactionCount:`{{emoji}} {{count}} reações`,reactionCountOne:`{{emoji}} {{count}} reação`,recordDetail:`Detalhe do registro`,recordDetailWithLabel:`Detalhe de {{label}}`,openAsFullPage:`Abrir como página inteira`,recordDetailOverlay:`Sobreposição de detalhe do registro para {{title}}.`,addToFavorites:`Adicionar aos favoritos`,removeFromFavorites:`Remover dos favoritos`,previousRecord:`Registro anterior`,nextRecord:`Próximo registro`,recordOf:`{{current}} de {{total}}`,recordNotFound:`Registro não encontrado`,recordNotFoundDescription:`O registro que você está procurando não existe ou pode ter sido excluído.`,goBack:`Voltar`,details:`Detalhes`,related:`Relacionados`,relatedRecords:`{{count}} registros`,relatedRecordOne:`{{count}} registro`,noRelatedRecords:`Nenhum registro relacionado encontrado`,loading:`Carregando…`,copyToClipboard:`Copiar para área de transferência`,copied:`Copiado!`,deleteConfirmation:`Tem certeza de que deseja excluir este registro?`,deleted:`Registro excluído`,editRecord:`Editar registro`,viewAll:`Ver tudo`,new:`Novo`,add:`Adicionar`,emptyValue:`—`,comments:`Comentários`,searchComments:`Pesquisar comentários…`,addCommentPlaceholder:`Adicionar comentário… (Ctrl+Enter para enviar)`,noMatchingComments:`Nenhum comentário correspondente`,noCommentsYet:`Nenhum comentário ainda`,pinned:`Fixado`,pin:`Fixar`,unpin:`Desfixar`,justNow:`agora mesmo`,minutesAgo:`há {{count}} min`,hoursAgo:`há {{count}} h`,daysAgo:`há {{count}} d`,dropFilesToUpload:`Arraste arquivos aqui ou clique para enviar`,attachmentCount:`{{count}} anexo`,attachmentCountPlural:`{{count}} anexos`,removeAttachment:`Remover anexo`,attachments:`Anexos`,uploadAttachment:`Enviar`,loadingAttachments:`Carregando anexos…`,noAttachments:`Ainda não há anexos. Envie um arquivo para começar.`,downloadAttachment:`Baixar`,deleteAttachment:`Excluir anexo`,attachmentDeleteDenied:`Somente quem enviou ou alguém que pode editar este registro pode excluir este anexo.`,attachmentParentAccessDenied:`Você não tem acesso para anexar arquivos a este registro.`,attachmentDownloadDenied:`Você não tem acesso para baixar este anexo.`,attachmentAuthRequired:`Faça login para baixar este anexo.`,attachmentPermissionDenied:`Você não tem permissão para fazer isso.`,unifiedDiff:`Visualização unificada`,sideBySideDiff:`Visualização lado a lado`,noChanges:`Sem alterações`,previousVersion:`Anterior`,currentVersion:`Atual`,discussion:`Discussão`,showDiscussion:`Mostrar discussão ({{count}})`,hideDiscussion:`Ocultar discussão`,bold:`Negrito (Ctrl+B)`,italic:`Itálico (Ctrl+I)`,listFormat:`Lista`,inlineCode:`Código inline`,mentionSomeone:`Mencionar alguém`,preview:`Pré-visualização`,submitComment:`Enviar (Ctrl+Enter)`,sendComment:`Enviar`,writeComment:`Escreva um comentário…`,subscribedTooltip:`Inscrito — clique para cancelar inscrição`,unsubscribedTooltip:`Inscrever-se para notificações`,firstRecord:`Primeiro registro (Home)`,previousRecordKey:`Registro anterior (←)`,nextRecordKey:`Próximo registro (→)`,lastRecord:`Último registro (End)`,noRecords:`Sem registros`,searchWhileNavigating:`Pesquisar durante a navegação`,searchRecords:`Pesquisar registros…`,allActivity:`Toda atividade`,commentsOnly:`Apenas comentários`,fieldChangesFilter:`Alterações de campo`,tasksOnly:`Apenas tarefas`,leaveCommentPlaceholder:`Deixar um comentário… (Ctrl+Enter para enviar)`,noActivity:`Nenhuma atividade registrada`,loadMore:`Carregar mais`,edited:`(editado)`,via:`via {{source}}`,viewSource:`Ver origem`,replyCount:`{{count}} resposta`,replyCountPlural:`{{count}} respostas`,replyPlaceholder:`Responder…`,filterActivity:`Filtrar atividade`,openDiscussion:`Abrir painel de discussão`,closeDiscussion:`Fechar painel de discussão`,subscribeAriaLabel:`Inscrever-se para notificações`,unsubscribeAriaLabel:`Cancelar inscrição de notificações`,clearSearch:`Limpar pesquisa`,saving:`Salvando…`,lockedByApproval:`Bloqueado para aprovação`,lockedTooltip:`Este registro tem uma solicitação de aprovação pendente; a edição está bloqueada`,writeStrippedTitle:`Salvo, mas alguns campos não foram aplicados`,writeStrippedReadonly:`Somente leitura, portanto não foi aplicado: {{fields}}`,writeStrippedByState:`Não editável no estado atual deste registro, portanto não foi aplicado: {{fields}}`,approvalPendingEditable:`Em aprovação · editável`,approvalPendingTooltip:`Este registro tem uma solicitação de aprovação pendente; esta etapa ainda permite a edição`,approvalProgress:`Aprovações — {{got}} de {{need}}`,approvalProgressGroups:`Assinaturas — {{got}} de {{need}} grupos`,approvalProgressLabel:`Progresso da aprovação`,approvalsPanelTitle:`Aprovações`,cancelApproval:`Cancelar aprovação`,cancelApprovalInFlight:`Cancelando…`,cancelApprovalTooltip:`Cancelar a solicitação de aprovação pendente para desbloquear o registro`,cancelApprovalTooltipUnlocked:`Cancelar a solicitação de aprovação pendente`,cancelApprovalFailed:`Falha ao cancelar aprovação`,cancelApprovalUnavailable:`O cancelamento de aprovações não é suportado por esta fonte de dados`,linkCopied:`Link copiado para a área de transferência`,linkCopyFailed:`Falha ao copiar o link`,cancel:`Cancelar`,cancelEdit:`Descartar alterações`,sectionMoreDetails:`Mais detalhes`,concurrentUpdateTitle:`Este registro foi modificado por outra pessoa`,concurrentUpdateDescription:`Outro usuário salvou, durante sua edição, uma versão mais recente que afeta {{field}}. Escolha como resolver o conflito.`,concurrentUpdateYourEdit:`Sua edição`,concurrentUpdateCurrentValue:`Valor atual`,concurrentUpdateUpdatedBy:`Atualizado por {{name}}`,concurrentUpdateUpdatedAt:`Atualizado em {{when}}`,concurrentUpdateReload:`Carregar versão atual`,concurrentUpdateOverwrite:`Sobrescrever mesmo assim`,concurrentUpdateCancel:`Cancelar`,concurrentUpdateRecordLabel:`este registro`,openInNewTab:`Abrir em nova aba`,activity:`Atividade`,history:`Histórico`,historyEmpty:`Nenhum histórico ainda`,editRow:`Editar`,deleteRow:`Excluir`,deleteRowConfirmation:`Excluir este registro?`,deleteRowTitle:`Excluir registro`,actions:`Ações`,previousPage:`Anterior`,nextPage:`Próximo`,pageOf:`Página {{current}} de {{total}}`,sortBy:`Ordenar por`,filterPlaceholder:`Filtrar…`,highlightFields:`Campos principais`,createdBy:`Criado por`,updatedBy:`Atualizado por`,showEmptyRelated:`+ {{count}} vazios`,showEmptyRelated_one:`+ {{count}} vazio`,showEmptyRelated_other:`+ {{count}} vazios`,copyEmail:`Copiar e-mail`,copyPhone:`Copiar telefone`,copyRecordId:`Copiar ID do registro`,showEmptyFields:`Mostrar {{count}} campos vazios`,hideEmptyFields:`Ocultar campos vazios`,noValue:`Sem valor`},chart:{noData:`Nenhum dado de gráfico disponível`,loading:`Carregando gráfico…`,nullCategory:`(Não especificado)`},map:{searchLocations:`Pesquisar locais…`,locationDetails:`Detalhes do local`,markersCount:`{{count}} marcadores`,invalidCoordinates:`{{count}} registro com coordenadas ausentes ou inválidas excluído do mapa.`,invalidCoordinatesPlural:`{{count}} registros com coordenadas ausentes ou inválidas excluídos do mapa.`},workflow:{draft:`Rascunho`,active:`Ativo`,paused:`Pausado`,completed:`Concluído`,cancelled:`Cancelado`,save:`Salvar`,publish:`Publicar`,addNode:`Adicionar nó`,workflowFlow:`Fluxo de trabalho`,properties:`Propriedades`,connections:`Conexões`,quickConnect:`Conexão rápida`,fromPlaceholder:`De…`,toPlaceholder:`Para…`,connect:`Conectar`,label:`Rótulo`,type:`Tipo`,description:`Descrição`,assignee:`Responsável`,assigneeType:`Tipo de responsável`,user:`Usuário`,role:`Função`,group:`Grupo`,expression:`Expressão`,timeoutMinutes:`Tempo limite (minutos)`,selectNodeToEdit:`Selecione um nó para editar suas propriedades`,workflowTitle:`Título do fluxo de trabalho`,newWorkflow:`Novo fluxo de trabalho`,outConnections:`{{count}} saída(s)`,start:`Início`,end:`Fim`,task:`Tarefa`,userTask:`Tarefa de usuário`,serviceTask:`Tarefa de serviço`,scriptTask:`Tarefa de script`,approval:`Aprovação`,condition:`Condição`,parallelGateway:`Gateway paralelo`,joinGateway:`Gateway de junção`,boundaryEvent:`Evento de limite`,delay:`Atraso`,notification:`Notificação`,webhook:`Webhook`,allowConcurrency:`Permitir (execução simultânea)`,forbidConcurrency:`Proibir (pular novos)`,replaceConcurrency:`Substituir (cancelar existentes)`,queueConcurrency:`Fila (executar após atual)`,conditionEvent:`Condição`,manualEvent:`Manual`,webhookEvent:`Webhook`,timerEvent:`Temporizador`,signalEvent:`Sinal`,versionHistory:`Histórico de versões`,importBpmn:`Importar BPMN`,exportBpmn:`Exportar BPMN`,undo:`Desfazer`,redo:`Refazer`,resetZoom:`Redefinir zoom`},dashboard:{noRows:`Sem linhas`,loading:`Carregando…`,pickMeasures:`Escolha medidas (valores) para este widget de dataset.`,datasetUnsupported:`Esta fonte de dados não oferece suporte a consultas de dataset.`,details:`Detalhes`,exportCsv:`Exportar CSV`,openInList:`Abrir na lista`,filters:{label:`Filtros do painel`,dateRange:`Período`,allTime:`Todo o período`,custom:`Personalizado…`,all:`Tudo`,reset:`Redefinir`,range:{today:`Hoje`,yesterday:`Ontem`,this_week:`Esta semana`,last_week:`Semana passada`,this_month:`Este mês`,last_month:`Mês passado`,this_quarter:`Este trimestre`,last_quarter:`Trimestre passado`,this_year:`Este ano`,last_year:`Ano passado`,last_7_days:`Últimos 7 dias`,last_30_days:`Últimos 30 dias`,last_90_days:`Últimos 90 dias`}},addWidget:`Adicionar widget`,removeWidget:`Remover widget`,editLayout:`Editar layout`,saveLayout:`Salvar layout`,resetLayout:`Redefinir layout`,total:`Total`,noDataAvailable:`Sem dados disponíveis`,noDataSourceFor:`Sem fonte de dados para`,trend:{vsLastQuarter:`vs. trimestre anterior`,vsLastMonth:`vs. mês anterior`,vsLastWeek:`vs. semana anterior`,vsLastYear:`vs. ano anterior`,vsYesterday:`vs. ontem`,vsPreviousPeriod:`vs. período anterior`}},configPanel:{save:`Salvar`,discard:`Descartar`,close:`Fechar`,layout:`Layout`,columns:`Colunas`,gap:`Espaçamento`,rowHeight:`Altura da linha`,data:`Dados`,refreshInterval:`Intervalo de atualização`,appearance:`Aparência`,title:`Título`,showDescription:`Mostrar descrição`,theme:`Tema`,configuration:`Configuração`,general:`Geral`,advanced:`Avançado`},appDesigner:{createApp:`Criar aplicativo`,editApp:`Editar aplicativo`,basicInfo:`Informações básicas`,objects:`Objetos`,navigation:`Navegação`,branding:`Marca`,appName:`Nome do app`,appTitle:`Título`,appDescription:`Descrição`,appIcon:`Ícone`,template:`Modelo`,layout:`Layout`,layoutSidebar:`Barra lateral`,layoutHeader:`Cabeçalho`,layoutEmpty:`Vazio`,selectObjects:`Selecionar objetos`,searchObjects:`Pesquisar objetos…`,selectAll:`Selecionar todos`,deselectAll:`Desmarcar todos`,navBuilder:`Construtor de navegação`,addGroup:`Adicionar grupo`,addUrl:`Adicionar URL`,addSeparator:`Adicionar separador`,noNavItems:`Nenhum item de navegação ainda.`,logoUrl:`Logo URL`,primaryColor:`Cor primária`,faviconUrl:`Favicon URL`,preview:`Pré-visualização`,complete:`Concluir`,snakeCaseHint:`Deve ser snake_case (ex. my_app)`,modeEdit:`Editar`,modePreview:`Pré-visualizar`,modeCode:`Código`,addWidget:`Adicionar widget`,widgetProperties:`Propriedades do widget`,dataSource:`Fonte de dados`,valueField:`Campo de valor`,aggregate:`Agregar`,colorVariant:`Variante de cor`,addComponent:`Adicionar componente`,componentProperties:`Propriedades do componente`,viewType:`Tipo de exibição`,fields:`Campos`,toolbar:`Barra de ferramentas`,showSearch:`Mostrar pesquisa`,showFilters:`Mostrar filtros`,showSort:`Mostrar ordenação`,appearance:`Aparência`,rowHeight:`Altura da linha`,stripedRows:`Linhas alternadas`,bordered:`Com borda`,livePreview:`Pré-visualização em tempo real`,stepBasicDesc:`Nome, título e layout`,stepObjectsDesc:`Selecionar objetos de negócio`,stepNavigationDesc:`Construir árvore de navegação`,stepBrandingDesc:`Logo, cores e favicon`,noObjectsFound:`Nenhum objeto encontrado.`,noNavItemsHint:`Sem itens de navegação. Selecione objetos na etapa anterior ou adicione manualmente.`,separator:`Separador`,separatorLabel:`— Separador —`,newGroup:`Novo grupo`,newLink:`Novo link`,saveDraft:`Salvar rascunho`,cancelConfirmTitle:`Descartar alterações?`,cancelConfirmMessage:`Você tem alterações não salvas. Tem certeza de que deseja cancelar?`,confirmDiscard:`Descartar`,keepEditing:`Continuar editando`,navNoItems:`Sem itens de navegação. Clique nos botões acima para adicionar itens.`,navNoPreviewItems:`Sem itens`,navLivePreview:`Pré-visualização ao vivo`,navCollapseGroup:`Recolher grupo`,navExpandGroup:`Expandir grupo`,navAddChild:`Adicionar filho`,navMoveUp:`Mover para cima`,navMoveDown:`Mover para baixo`,navRemove:`Remover`,navObjectPage:`Página de objeto`,navDashboard:`Painel`,navPage:`Página`,navReport:`Relatório`,navGroup:`Grupo`,navUrl:`URL`,navSeparator:`Separador`,navTypeObject:`Objeto`,navTypeDashboard:`Painel`,navTypePage:`Página`,navTypeReport:`Relatório`,navTypeUrl:`URL`,navTypeGroup:`Grupo`,navTypeSeparator:`Separador`,navTypeAction:`Ação`,navTypeComponent:`Componente`,navEditIcon:`Editar ícone`,navToggleVisible:`Alternar visibilidade`,navHidden:`Oculto`,navExportSchema:`Exportar JSON`,navImportSchema:`Importar JSON`,navExportSuccess:`Esquema de navegação exportado`,navImportSuccess:`Esquema de navegação importado`,navImportError:`JSON de navegação inválido`,navIconPlaceholder:`Nome do ícone (ex. Users)`,dashboardEditor:`Editor de painel`,noWidgets:`Sem widgets. Clique em um botão acima para adicionar um.`,widgetLayoutSize:`Tamanho do layout`,widgetWidth:`Largura`,widgetHeight:`Altura`,dashboardPreview:`Pré-visualização do painel`,noWidgetsPreview:`Sem widgets para pré-visualizar`,pageCanvasEditor:`Editor de tela de página`,emptyPage:`Página vazia. Clique em um botão acima para adicionar um componente.`,pagePreview:`Pré-visualização da página`,noComponentsPreview:`Sem componentes para pré-visualizar`,modePage:`Página`,modeDashboard:`Painel`,undo:`Desfazer`,redo:`Refazer`,brandingEditor:`Editor de marca`,brandingExport:`Exportar JSON`,brandingImport:`Importar JSON`,brandingPreview:`Pré-visualização`,brandingSampleButton:`Botão de exemplo`,brandingSampleText:`É assim que seu tema de marca ficará.`,colorPalette:`Paleta de cores`,fontFamily:`Família de fontes`,fontDefault:`Padrão (sistema)`,modeLight:`Claro`,modeDark:`Escuro`,mobilePreview:`Pré-visualização mobile`,objectManager:{title:`Gerenciador de objetos`,addObject:`Novo objeto`,searchPlaceholder:`Pesquisar objetos…`,noObjects:`Nenhum objeto encontrado.`,objectName:`Nome da API`,objectLabel:`Rótulo`,pluralLabel:`Rótulo plural`,icon:`Ícone`,selectIcon:`Selecionar ícone…`,group:`Grupo`,noGroup:`Sem grupo`,sortOrder:`Ordem de classificação`,enabled:`Habilitado`,relationships:`Relacionamentos`,systemBadge:`Sistema`,fieldCount:`{{count}} campos`,ungrouped:`Sem grupo`,deleteConfirmTitle:`Excluir objeto?`,deleteConfirmMessage:`Isso excluirá permanentemente o objeto e todos os seus campos. Esta ação não pode ser desfeita.`},fieldDesigner:{title:`Designer de campos`,addField:`Novo campo`,searchPlaceholder:`Pesquisar campos…`,allTypes:`Todos os tipos`,noFields:`Nenhum campo encontrado.`,fieldName:`Nome da API`,fieldLabel:`Rótulo`,fieldType:`Tipo`,fieldGroup:`Grupo`,description:`Descrição`,required:`Obrigatório`,unique:`Único`,readOnly:`Somente leitura`,hidden:`Oculto`,indexed:`Indexado`,externalId:`ID externo`,trackHistory:`Rastrear histórico`,defaultValue:`Valor padrão`,placeholder:`Espaço reservado`,referenceTo:`Referência a`,formula:`Fórmula`,options:`Opções`,addOption:`Adicionar opção`,validationRules:`Regras de validação`,addRule:`Adicionar regra`,systemBadge:`Sistema`,ungrouped:`Geral`,deleteConfirmTitle:`Excluir campo?`,deleteConfirmMessage:`O campo será excluído permanentemente. Os dados existentes neste campo serão perdidos.`,basicSection:`Básico`,typeSpecificSection:`Configurações de tipo`,advancedSection:`Avançado`,typeCategory:{text:`Texto`,number:`Número`,date:`Data e hora`,choice:`Escolha`,relation:`Relação`,advanced:`Avançado`}}},console:{saveAdvisoryTitle:`Salvo — a verificação de criação gerou {{count}} recomendação(ões)`,settingsHub:{title:`Configurações`,subtitle:`Configure seu workspace, integrações e sinalizadores de recursos.`,loadError:`Falha ao carregar as configurações`,empty:`Nenhuma configuração registrada. Os plugins podem registrar manifestos de configuração pelo SettingsService.`,settingsCount:`{{n}} configurações`,beta:`Beta`,categories:{Workspace:`Workspace`,Communication:`Comunicação`,Security:`Segurança`,Infrastructure:`Infraestrutura`,Beta:`Beta`,Other:`Outros`}},objectData:{badge:`Dados`,description:`Recorte de dados definido pela URL — não vinculado a nenhuma visão salva.`,filteredBy:`Filtrado por`,removeFilter:`Remover o filtro {{field}}`,saveAsView:`Salvar como visão`,noAccessTitle:`Acesso negado`,noAccess:`Você não tem permissão para ver estes dados.`},identityImport:{policyTitle:`Configuração de acesso para usuários importados`,policy:{auto:`Automático (recomendado)`,invite:`Enviar convites`,temporary:`Senhas temporárias`,none:`Sem senha (apenas identidade)`},policyHint:{auto:`Usuários acessíveis recebem um convite (e-mail ou SMS); quem não puder ser contatado recebe uma senha de uso único, exibida UMA ÚNICA VEZ na tela de resultados. Funciona com ou sem serviço de e-mail/SMS.`,invite:`Cada usuário criado recebe um e-mail para definir a senha (ou um SMS de convite nas linhas apenas com telefone). Requer um serviço de e-mail/SMS configurado — linhas inacessíveis falham.`,temporary:`Para implantações sem e-mail/SMS: cada usuário criado recebe uma senha de uso único, exibida UMA ÚNICA VEZ na tela de resultados. O primeiro acesso exige a troca.`,none:`Os usuários entram primeiro com um OTP por telefone, um link mágico ou um link de redefinição, e depois definem a própria senha.`},passwordsNote:`Senhas temporárias — exibidas uma única vez, nunca armazenadas. Salve-as agora; cada usuário deve trocar a sua no primeiro acesso.`,passwordsMore:`Demais entradas omitidas — use o download.`,passwordsDownload:`Baixar CSV`},ai:{usage:{title:`Uso de IA`,meterBuild:`Criar`,meterAsk:`Perguntar`,statusOk:`Ainda há bastante`,statusLow:`Está acabando`,statusFull:`Limite atingido`,resetsDaily:`Redefine hoje à noite`,resetsMonthly:`Redefine no próximo ciclo`,ctaUpgrade:`Faça upgrade para continuar`,ctaTopUp:`Adicione créditos para continuar`,ariaLabel:`Uso de IA: {{status}}`},workspaceTitle:`Workspace de IA`,workspaceSubtitle:`Pergunte, inspecione e retome conversas`,openChats:`Abrir conversas`,chats:`Conversas`,chatsDescription:`Navegue e gerencie as conversas com a IA.`,share:`Compartilhar`,shareTitle:`Compartilhar esta conversa`,shareDisabledTitle:`Comece a conversar para habilitar o compartilhamento`,newChat:`Nova`,searchChats:`Pesquisar conversas…`,noChatsYet:`Ainda não há conversas`,noChatsDescription:`Inicie uma nova conversa para vê-la aqui.`,noMatchingChats:`Nenhuma conversa correspondente.`,newConversation:`Nova conversa`,renameConversation:`Renomear conversa`,deleteConversation:`Excluir conversa`,saveRename:`Salvar novo nome`,cancelRename:`Cancelar renomeação`,loadingHistory:`Carregando o histórico da conversa…`,conversationReady:`Conversa pronta`,preparingConversation:`Preparando uma nova conversa`,offlineDemoMode:`Modo de demonstração off-line — lista de agentes indisponível`,sendFailedRateLimited:`Você está enviando mensagens rápido demais. Sua mensagem foi mantida abaixo — aguarde um momento e tente novamente.`,sendFailedGeneric:`Não foi possível enviar sua mensagem. Ela foi mantida abaixo — tente novamente.`,askAgent:`Pergunte a {{agent}}…`,assistant:`Assistente`,liveCanvas:`Pré-visualização ao vivo — {{app}} (rascunho)`,liveCanvasUnlisted:`Aplicativo ao vivo — {{app}} (não listado até ser publicado)`,loadingAgents:`Carregando agentes…`,askAnything:`Pergunte qualquer coisa…`,emptyTitle:`Iniciar uma conversa`,emptyDescription:`Pergunte qualquer coisa — o assistente tem acesso ao contexto do seu aplicativo atual.`,switchAssistant:`Trocar de assistente`,chooseAgent:`Escolher assistente…`,empty:{build:{title:`Criar com IA`,description:`Descreva um aplicativo ou fluxo de trabalho em linguagem simples — eu rascunho os objetos, telas e automações, e então você revisa e publica.`},ask:{title:`Pergunte aos seus dados`,description:`Faça perguntas sobre seus registros — contagens, listas e resumos dos dados a que você tem acesso.`},editApp:{title:`Editando “{{app}}”`,titleGeneric:`Editar este aplicativo`,description:`O que você quer mudar? Eu altero este aplicativo no lugar — adicionar um campo, objeto, visão ou automação, ou ajustar o que já existe.`}},clearConversation:`Limpar`,sendHint:`para enviar`,agentActivity:`Atividade do agente`,toolCompleted:`Concluído`,toolRunning:`Em execução`,toolAwaitingApproval:`Aguardando aprovação`,toolFailed:`Falhou`,toolDetailsHidden:`As entradas das ferramentas e os resultados brutos estão ocultos nesta visão.`,copy:`Copiar`,copied:`Copiado`,regenerate:`Gerar novamente`,model:`Modelo`,submit:`Enviar`,uploadFiles:`Enviar arquivos`,stopResponse:`Parar a resposta`,trace:`rastro`,viewTrace:`Ver o rastro`,nextSteps:`Próximos passos`,publishDrafts:`Publicar`,publishOk:`Publicado — os objetos já estão ativos.`,seedWarn:`Publicado, mas alguns dados de exemplo não puderam ser carregados.`,openBuiltApp:`Abrir o aplicativo`,designBuiltApp:`Projetar no Studio`,previewDraft:`Pré-visualizar`,previewApp:`Pré-visualizar o aplicativo`,resizeSplit:`Redimensionar a conversa e a pré-visualização`,hideChats:`Ocultar conversas`,showChats:`Mostrar conversas`,planTitle:`Plano proposto`,planQuestions:`Confirmar antes de criar`,planAssumptions:`Suposições`,planApproveHint:`Responda para aprovar ou ajustar este plano.`,planApprove:`Criar`,planAdjust:`Ajustar`,justNow:`agora mesmo`,minutesAgo:`há {{count}} min`,hoursAgo:`há {{count}} h`,daysAgo:`há {{count}} d`,agentLabels:{ask:`Perguntar`,build:`Criar`,dataChat:`Assistente`,metadataAssistant:`Assistente de metadados`},suggestions:{dataChat:{userCount:`Quantos usuários existem no sistema? Liste os e-mails deles.`,recentRecords:`Liste os 5 registros criados mais recentemente.`,recordCounts:`Conte os registros de cada objeto.`},metadataAssistant:{buildCrm:`Crie um CRM de vendas — clientes, contatos e um funil de negócios que eu possa totalizar por etapa.`,buildApp:`Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, e um quadro por status.`,buildFlow:`Projete uma central de suporte — chamados com prioridade, um fluxo de status e vínculos com clientes.`,buildInventory:`Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e visibilidade de estoque baixo.`,buildRecruiting:`Crie um controle de candidaturas — candidatos, vagas abertas, etapas de entrevista e anotações.`},generic:{help:`Com o que você pode me ajudar?`,availableObjects:`Liste os objetos de dados disponíveis.`,recentActivity:`Resuma minha atividade recente.`},editApp:{addField:`Adicione um campo a um dos objetos.`,addObject:`Adicione um novo objeto e relacione-o a um existente.`,addDashboard:`Adicione um painel para as métricas principais.`,addAutomation:`Adicione uma automação — uma aprovação, um fluxo de status ou uma notificação.`}},changesTitle:`Confirmar alterações`,changesConfirmed:`Confirmado`,changesConfirm:`Confirmar`,changesConfirmHint:`Responda para confirmar ou ajustar esta alteração.`,changeVerb:{createObject:`Criar objeto`,addField:`Adicionar campo`,modifyField:`Modificar campo`,deleteField:`Excluir campo`,createMetadata:`Criar`,updateMetadata:`Modificar`,createSeed:`Gerar dados de exemplo`,createPackage:`Criar pacote de aplicativo`},collapseToDock:`Recolher para o painel lateral`,switchApp:`Trocar de aplicativo`,switchAppLabel:`Conversas de criação por aplicativo`,newApp:`Novo aplicativo`,connectionWaiting:`Aguardando o servidor…`,connectionStalled:`Ainda processando…`,connectionOffline:`Conexão perdida — reconectando…`,designingPlan:`Projetando seu aplicativo…`,designingPlanHint:{data:`Mapeando os dados que você vai acompanhar…`,objects:`Modelando os objetos e seus campos…`,relations:`Conectando os registros relacionados…`,lookups:`Configurando as relações e os campos de busca…`,views:`Planejando as telas e as visualizações…`,forms:`Organizando os formulários e as listas…`,defaults:`Adicionando valores padrão e validações sensatas…`,dashboard:`Esboçando um painel para acompanhar…`,review:`Verificando se a estrutura faz sentido…`,finalize:`Reunindo o plano…`},planBuilding:`Criando…`,planBuilt:`Criado`,planDeferred:`Ainda não criado`,planReady:`O plano está pronto. Crie agora ou diga o que ajustar.`,published:`Publicado`,publishFailed:`Falha ao publicar`,unavailableTitle:`Assistente de IA indisponível`,unavailableDescription:`Esta implantação não tem um assistente de IA habilitado. Todo o resto funciona normalmente.`,unavailableError:`Não foi possível acessar o serviço de IA. Ele pode estar temporariamente off-line — tente novamente ou volte ao início.`,unavailableRetry:`Tentar novamente`,unavailableHome:`Voltar ao início`,dock:{title:`Assistente`,description:`Conversa com o assistente de IA`,resize:`Redimensionar a conversa`,collapse:`Recolher a conversa`,maximize:`Abrir como página inteira`,open:`Abrir o assistente`},group:{today:`Hoje`,yesterday:`Ontem`,previous7Days:`7 dias anteriores`,previous30Days:`30 dias anteriores`,older:`Mais antigas`}},title:`Console ObjectStack`,initializing:`Inicializando aplicação…`,loadingHint:`Configurar um novo ambiente pode levar alguns instantes.`,breadcrumb:{dashboards:`Painéis`,pages:`Páginas`,reports:`Relatórios`,system:`Sistema`},settingsView:{backToHub:`Todas as configurações`,back:`Voltar`,noNamespace:`Nenhum namespace selecionado.`,loadError:`Falha ao carregar as configurações`,saved:`Configurações salvas`,saveFailed:`Falha ao salvar`,lockedByEnv:`Bloqueado pelo ambiente: {{key}}`,lockedByEnvNoKey:`Bloqueado pelo ambiente`,actionSucceeded:`A ação foi concluída`,actionFailed:`A ação falhou`,discard:`Descartar`,saveChanges:`Salvar alterações`,unsavedCount:`{{count}} alterações não salvas`,unsavedCount_one:`{{count}} alteração não salva`,unsavedCount_other:`{{count}} alterações não salvas`,cryptoRefusalTitle:`Esta implantação não consegue criptografar segredos`,cryptoRefusalSubjectSuffix:`está declarado como criptografado, portanto nada foi gravado.`,cryptoRefusalNoSubject:`O valor declarado como criptografado foi recusado, portanto nada foi gravado.`,cryptoRefusalToast:`Não é possível criptografar segredos: {{subject}}`,cryptoRefusalToastNoSubject:`Não é possível criptografar segredos`},loadingSteps:{connecting:`Conectando à fonte de dados`,loadingConfig:`Carregando configuração`,preparingWorkspace:`Preparando espaço de trabalho`},error:{connectionFailed:`Não é possível conectar ao servidor`,serverUnreachable:`O servidor {{url}} está inacessível.`,checkServer:`Verifique sua conexão de rede ou se o backend está em execução.`,timeout:`Tempo limite de conexão esgotado após 10 segundos.`},actions:{retry:`Tentar novamente`,retrying:`Tentando novamente…`},serverAction:{openingTitle:`Abrindo…`,openingBody:`Abrindo… isso pode levar um momento.`,popupBlockedTitle:`Pop-up bloqueado`,popupBlockedDescription:`O navegador bloqueou a abertura da nova aba.`,popupBlockedAction:`Abrir em nova aba`},shortcuts:{title:`Atalhos de teclado`,description:`Referência rápida de todos os atalhos de teclado disponíveis.`,groups:{general:`Geral`,navigation:`Navegação`,dataViews:`Visualizações de dados`,aiChat:`Assistente de IA`,preferences:`Preferências`},openCommandPalette:`Abrir paleta de comandos`,showShortcuts:`Mostrar atalhos de teclado`,closeDialog:`Fechar diálogo / painel`,toggleSidebar:`Alternar barra lateral`,focusSearch:`Focar na pesquisa`,createRecord:`Criar novo registro`,refreshData:`Atualizar dados`,editRecord:`Editar registro selecionado`,newChat:`Nova conversa`,toggleChatsList:`Alternar lista de conversas`,toggleDarkMode:`Alternar modo escuro`},commandPalette:{title:`Paleta de comandos`,placeholder:`Digite um comando ou pesquise…`,noResults:`Nenhum resultado encontrado.`,objects:`Objetos`,dashboards:`Painéis`,pages:`Páginas`,reports:`Relatórios`,switchApp:`Trocar aplicativo`,current:`Atual`,preferences:`Preferências`,lightTheme:`Tema claro`,darkTheme:`Tema escuro`,systemTheme:`Tema do sistema`,actions:`Ações`,openFullSearch:`Abrir página de pesquisa completa`,createApp:`Criar novo aplicativo`,searching:`Pesquisando…`,records:`Registros`,recentRecords:`Vistos recentemente`},errors:{somethingWentWrong:`Algo deu errado`,unexpectedError:`Ocorreu um erro inesperado ao renderizar esta visualização.`,tryAgain:`Tentar novamente`,goHome:`Ir para início`,errorDetails:`Detalhes do erro (somente desenvolvimento)`},notFound:{title:`Página não encontrada`,description:`A URL que você acessou não corresponde a nenhuma visualização deste aplicativo.`,back:`Voltar`},theme:{toggle:`Alternar tema`,light:`Claro`,dark:`Escuro`,system:`Sistema`},objectView:{viewTypeTree:`Árvore`,viewTypeTreeDesc:`Aninha registros autorreferenciados em uma hierarquia por um campo pai.`,parentField:`Campo pai`,parentFieldHelp:`O campo que aponta para o registro pai (mesmo objeto) e define a hierarquia. Apenas campos autorreferenciados são válidos.`,viewName:`Nome`,viewNameHelp:`Chave técnica (snake_case). Preenchida automaticamente a partir do título — edite se quiser.`,viewNameRequired:`Informe uma chave (letras minúsculas, números, sublinhado). Não é preenchida automaticamente para títulos não latinos.`,viewNameInvalid:`Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.`,systemViewReadonly:`Exibição do sistema definida no código — somente leitura.`,cannotEditMetaView:`Esta exibição é integrada e definida no código — não é possível alterá-la.`,cannotDeleteMetaView:`Esta exibição é integrada e definida no código — não é possível excluí-la.`,expandToPage:`Abrir como página inteira`,objectNotFound:`Objeto não encontrado`,objectNotFoundDescription:`O objeto "{{objectName}}" não existe na configuração atual.`,objectNotFoundHint:`Verifique as configurações de navegação do seu aplicativo ou selecione um objeto diferente na barra lateral.`,filterOrNotSavable:`Este filtro une as condições com OU, algo que uma visão salva ainda não consegue armazenar. Ele continua aplicado a esta lista — remova o agrupamento OU para salvá-lo na visão.`,filterNestedNotSavable:`Este filtro usa grupos de condições aninhados, que uma visão salva não consegue armazenar. Transforme-o em uma única lista de condições para salvá-lo na visão.`,allRecords:`Todos os registros`,exitDesignMode:`Sair do modo de design`,enterDesignMode:`Entrar no modo de design`,metadataInspector:`Inspetor de metadados`,editView:`Editar visualização`,addView:`Adicionar visualização`,designTools:`Ferramentas de design`,new:`Novo`,configureView:`Configurar visualização`,closePanel:`Fechar painel`,page:`Página`,pageConfigHint:`Barra de ferramentas, navegação e configurações do shell de visualização`,listConfigHint:`Renderização de dados, colunas e aparência para este tipo de lista`,general:`Geral`,generalHint:`Título, descrição e tipo da visualização`,toolbar:`Barra de ferramentas`,toolbarHint:`Pesquisa, filtro, ordenação, agrupamento e alternância de densidade`,toolbarEnabledCount:`{{count}} de {{total}} habilitados`,navigationSection:`Navegação`,navigationHint:`Comportamento ao clicar na linha e configurações da visualização detalhada`,records:`Registros`,recordsHint:`Modo de seleção, adicionar registro e edição em linha`,exportPrint:`Exportar e imprimir`,exportPrintHint:`Formatos de exportação, impressão e exibição da contagem de registros`,showAllFields:`Mostrar tudo`,hideAllFields:`Ocultar tudo`,searchFields:`Pesquisar campos…`,title:`Título`,description:`Descrição`,data:`Dados`,source:`Fonte`,columns:`Colunas`,filterBy:`Filtrar por`,sortBy:`Ordenar por`,appearance:`Aparência`,showDescription:`Mostrar descrição`,viewType:`Tipo de visualização`,userFilters:`Filtros do usuário`,enableSearch:`Habilitar pesquisa`,enableFilter:`Habilitar filtro`,enableSort:`Habilitar ordenação`,enableHideFields:`Ativar ocultar campos`,enableGroup:`Ativar agrupamento`,enableColor:`Ativar cor`,enableDensity:`Ativar densidade`,userActions:`Ações do usuário`,addRecordViaForm:`Adicionar registros via formulário`,advanced:`Avançado`,allowExport:`Permitir exportação`,recordCount:`{{count}} registros`,noDescription:`Sem descrição`,none:`Nenhum`,columnsConfigured:`{{count}} colunas`,save:`Salvar`,discard:`Descartar`,createView:`Criar visualização`,newView:`Nova visualização`,typeOptions:`Opções de tipo`,groupByField:`Campo de agrupamento`,startDateField:`Campo de data de início`,titleField:`Campo de título`,latitudeField:`Campo de latitude`,longitudeField:`Campo de longitude`,imageField:`Campo de imagem`,dateField:`Campo de data`,selectField:`Selecionar campo…`,gridOptionsHint:`A visualização de grade usa as colunas configuradas acima.`,groupBy:`Agrupar por`,prefixField:`Campo de prefixo`,fields:`Campos`,fieldsVisible:`{{count}} visíveis`,sortsCount:`{{count}} ordenações`,filtersCount:`{{count}} filtros`,endDateField:`Campo de data de término`,color:`Cor`,fieldTextColor:`Cor do texto do campo`,rowHeight:`Altura da linha`,wrapHeaders:`Quebrar cabeçalhos`,showFieldDescriptions:`Mostrar descrições dos campos`,collapseAllByDefault:`Recolher tudo por padrão`,striped:`Linhas listradas`,bordered:`Células com borda`,inlineEdit:`Editar registros em linha`,addDeleteRecordsInline:`Adicionar/excluir registros em linha`,clickIntoRecordDetails:`Clique para detalhes do registro`,navigationMode:`Modo de navegação`,navigationWidth:`Largura de navegação`,navigationWidthHint:`Disponível para os modos de navegação gaveta, modal e dividido`,openNewTab:`Abrir em nova aba`,openNewTabHint:`Disponível para os modos de navegação página e nova janela`,import:`Importar`,importTitle:`Importar do CSV`,importedToast:`{{count}} linha(s) importada(s).`,importedWithSkipped:`{{ok}} linha(s) importada(s); {{skipped}} pulada(s).`,showAdvancedSettings:`Mostrar configurações avançadas`,showFewerSettings:`Mostrar menos configurações`,createViewDesc:`Escolha um tipo de exibição e dê um nome a ela. Todas as configurações podem ser alteradas depois.`,cancel:`Cancelar`,create:`Criar`,delete:`Excluir`,deleteViewTitle:`Excluir exibição`,deleteViewConfirm:`Excluir a exibição "{{name}}"? Isso não pode ser desfeito.`,bulkDeleteConfirm:`Excluir {{count}} registros selecionados? Isso não pode ser desfeito.`,duplicateViewName:`Já existe uma exibição com esse nome.`,viewTypeGrid:`Grade`,viewTypeGridDesc:`Tabela de registros no estilo planilha.`,viewTypeKanban:`Kanban`,viewTypeKanbanDesc:`Cartões agrupados em colunas por um campo de seleção única.`,viewTypeCalendar:`Calendário`,viewTypeCalendarDesc:`Registros colocados por data em um calendário mensal.`,viewTypeGallery:`Galeria`,viewTypeGalleryDesc:`Cartões de imagem grandes de um campo de anexo.`,viewTypeTimeline:`Linha do tempo`,viewTypeTimelineDesc:`Registros ao longo de um eixo de tempo horizontal.`,viewTypeGantt:`Gantt`,viewTypeGanttDesc:`Barras de projeto com início/fim e dependências.`,viewTypeMap:`Mapa`,viewTypeMapDesc:`Marcadores geográficos de campos de latitude/longitude.`,viewTypeChart:`Gráfico`,viewTypeChartDesc:`Gráficos de barras/linhas/pizza agregados.`,groupByFieldHelp:`O quadro Kanban agrupa registros em colunas pelos valores do campo.`,startDateFieldHelp:`O calendário coloca os registros na célula correspondente a esta data.`,ganttStartDateFieldHelp:`A borda esquerda de cada barra Gantt usa esta data.`,ganttEndDateFieldHelp:`A borda direita de cada barra Gantt usa esta data.`,timelineDateFieldHelp:`Os registros são posicionados na linha do tempo com base nesta data.`,latitudeFieldHelp:`Campo contendo a latitude (apenas campos geográficos).`,longitudeFieldHelp:`Campo contendo a longitude (apenas campos geográficos).`,imageFieldHelp:`A capa da galeria vem deste campo de imagem ou anexo.`,selectOption:`Selecionar…`,noEligibleFieldForType:`Nenhum campo elegível desse tipo. Adicione um ao objeto primeiro.`,viewTypeUnavailable:`Este objeto não tem um campo que sirva como "{{field}}".`,viewTypeUnavailableShort:`Não suportado por este objeto.`,chartType:`Tipo de gráfico`,chartTypeHelp:`Determina como os dados são renderizados.`,chartTypeBar:`Gráfico de barras`,chartTypeLine:`Gráfico de linhas`,chartTypePie:`Gráfico de pizza`,chartTypeArea:`Gráfico de área`,chartTypeScatter:`Gráfico de dispersão`,xAxisField:`Campo do eixo X`,xAxisFieldHelp:`A dimensão categórica ou temporal.`,yAxisField:`Campo do eixo Y`,yAxisFieldHelp:`O campo numérico para agregar.`,selectionMode:`Modo de seleção`,selectionNone:`Nenhum`,selectionSingle:`Individual`,selectionMultiple:`Múltiplo`,pageSize:`Tamanho da página`,pageSizeOptions:`Opções de tamanho de página`,exportFormats:`Formatos de exportação`,exportMaxRecords:`Máximo de registros`,exportIncludeHeaders:`Incluir cabeçalhos`,exportFileNamePrefix:`Prefixo do nome do arquivo`,searchableFields:`Campos pesquisáveis`,filterableFields:`Campos filtráveis`,resizableColumns:`Colunas redimensionáveis`,densityCompact:`Compacto`,densityComfortable:`Normal`,densitySpacious:`Espaçoso`,densityMode:`Modo de densidade`,hiddenFields:`Campos ocultos`,rowActions:`Ações de linha`,bulkActions:`Ações em massa`,sharing:`Compartilhamento`,sharingEnabled:`Compartilhamento ativado`,sharingVisibility:`Visibilidade`,addRecordEnabled:`Adição de registro ativada`,addRecordPosition:`Posição`,addRecordMode:`Modo`,addRecordFormView:`Exibição de formulário`,conditionalFormatting:`Formatação condicional`,addRule:`Adicionar regra`,quickFilters:`Filtros rápidos`,addQuickFilter:`Adicionar filtro rápido`,ufElements:`Elementos`,ufDropdown:`Lista suspensa`,ufTabs:`Abas`,ufToggle:`Alternar`,ufAddField:`+ Adicionar campo de filtro…`,ufNoFields:`Sem campos disponíveis`,ufAddTab:`+ Adicionar aba`,ufTabLabel:`Rótulo`,ufShowAllRecords:`Mostrar aba "Todos os registros"`,ufAllowAddTab:`Permitir adicionar abas`,showRecordCount:`Mostrar contagem de registros`,allowPrinting:`Permitir impressão`,virtualScroll:`Rolagem virtual`,emptyStateTitle:`Título do estado vazio`,emptyStateMessage:`Mensagem do estado vazio`,emptyStateIcon:`Ícone do estado vazio`,ariaLabel:`Rótulo ARIA`,ariaDescribedBy:`Descrito por ARIA`,ariaLive:`ARIA ao vivo`,accessibility:`Acessibilidade`,viewTabs:`Abas de exibição`},localeSwitcher:{label:`Idioma`},search:`Pesquisar…`,nav:{pinItem:`Fixar {{name}}`,unpinItem:`Desafixar {{name}}`,dragToReorder:`Arrastar para reordenar`,favorites:`Favoritos`}},auth:{setPassword:{title:`Definir uma senha de recuperação`,description:`Você entrou por logon único. Defina uma senha local para continuar conseguindo acessar este ambiente diretamente caso o SSO fique indisponível.`,email:`E-mail`,newPassword:`Nova senha`,confirmPassword:`Confirmar a senha`,submit:`Definir a senha`,submitting:`Salvando…`,success:`Senha local definida`,failed:`Não foi possível definir a senha`,passwordsMismatch:`As senhas não coincidem`,noSession:`Sua sessão expirou.`,backToSignIn:`Entrar novamente`},login:{signingIn:`Entrando…`,ssoHandoff:`Continuar para {{target}}`,devAdminHint:{title:`Instância de desenvolvimento`,body:`Entre com o administrador de desenvolvimento pré-configurado:`,dismiss:`Dispensar`},title:`Entre na sua conta`,description:`Digite seu e-mail e senha para continuar`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Senha`,passwordPlaceholder:`Digite sua senha`,forgotPasswordText:`Esqueceu a senha?`,submitButton:`Entrar`,submittingButton:`Entrando…`,noAccountText:`Não tem uma conta?`,signUpText:`Cadastre-se`,errors:{oauthCallbackFailed:`Não foi possível concluir o logon único — o link de acesso expirou ou já foi utilizado. Tente novamente.`,invalidCredentials:`E-mail ou senha inválidos. Por favor, tente novamente.`,emailNotVerified:`Por favor, verifique seu e-mail antes de fazer login.`},emailOrPhoneLabel:`E-mail ou número de telefone`,emailOrPhonePlaceholder:`name@example.com ou +1 555 000 0000`,phoneLabel:`Número de telefone`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Código de verificação`,otpCodePlaceholder:`Código de 6 dígitos`,sendOtpButton:`Obter código`,resendOtpCountdownText:`Reenviar em {seconds} s`,usePhoneOtpText:`Entrar com código de verificação`,usePasswordSignInText:`Entrar com senha em vez disso`},register:{title:`Criar uma conta`,description:`Digite suas informações para começar`,nameLabel:`Nome`,namePlaceholder:`João Silva`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,passwordLabel:`Senha`,passwordPlaceholder:`Criar uma senha (mín. 8 caracteres)`,confirmPasswordLabel:`Confirmar senha`,confirmPasswordPlaceholder:`Confirme sua senha`,passwordMismatchError:`As senhas não coincidem`,passwordTooShortError:`A senha deve ter pelo menos 8 caracteres`,submitButton:`Criar conta`,submittingButton:`Criando conta…`,hasAccountText:`Já tem uma conta?`,signInText:`Entrar`,errors:{userExists:`Já existe uma conta com esse e-mail. Tente fazer login.`},verifyInbox:{title:`Verifique sua caixa de entrada`,description:`Enviamos um link de verificação para {{email}}. Clique no link para ativar sua conta.`,resend:`Reenviar e-mail de verificação`,resending:`Enviando…`,resent:`E-mail de verificação enviado.`,backToSignIn:`Voltar ao login`}},forgotPassword:{title:`Redefinir sua senha`,description:`Digite seu endereço de e-mail e enviaremos um link para redefinir sua senha`,emailLabel:`E-mail`,emailPlaceholder:`name@example.com`,submitButton:`Enviar link de redefinição`,submittingButton:`Enviando…`,successTitle:`Verifique seu e-mail`,successDescription:`Enviamos um link para redefinição de senha para {{email}}. Por favor verifique sua caixa de entrada.`,backToSignInText:`Voltar para o login`,rememberPasswordText:`Lembra da sua senha?`,signInText:`Entrar`,phoneLabel:`Número de telefone`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Código de verificação`,otpCodePlaceholder:`Código de 6 dígitos`,sendOtpButton:`Obter código`,resendOtpCountdownText:`Reenviar em {seconds} s`,newPasswordLabel:`Nova senha`,newPasswordPlaceholder:`Digite uma nova senha`,resetButton:`Redefinir senha`,usePhoneResetText:`Redefinir com código por SMS`,useEmailResetText:`Redefinir por e-mail em vez disso`,phoneSuccessTitle:`Senha redefinida`,phoneSuccessDescription:`Sua senha foi redefinida. Agora você pode entrar com a nova senha.`},resetPassword:{title:`Definir nova senha`,description:`Escolha uma senha que você não usou antes.`,newPassword:`Nova senha`,confirmPassword:`Confirmar senha`,submit:`Atualizar senha`,submitting:`Atualizando…`,success:`Senha atualizada`,failed:`Falha na redefinição`,invalidToken:`Este link de redefinição é inválido ou expirou.`,missingToken:`O link de redefinição está ausente ou expirou`,passwordsMismatch:`As senhas não coincidem`,requestNewLink:`Solicitar novo link`},verifyEmail:{title:`Verificar endereço de e-mail`,description:`Enviamos um link de verificação para seu endereço de e-mail. Clique no link para verificar sua conta.`,sentTo:`Enviado para:`,verifyingTitle:`Verificando…`,verifyingDescription:`Estamos verificando seu e-mail. Por favor, aguarde.`,successTitle:`E-mail verificado`,successDescription:`Seu e-mail foi verificado. Você pode fazer login agora.`,errorTitle:`Falha na verificação`,errorDescription:`A verificação falhou. Por favor, solicite um novo link.`,missingToken:`Falta um token no link de verificação.`,emailMissing:`Endereço de e-mail ausente`,resendButton:`Reenviar e-mail de verificação`,resending:`Enviando…`,resent:`E-mail enviado! Verifique sua caixa de entrada`,resentSuccess:`E-mail de verificação enviado!`,resentDescription:`Por favor, verifique sua caixa de entrada e clique no link de verificação.`,resendFailed:`Não é possível reenviar o e-mail de verificação`,signInLink:`Ir para o login`,backToSignIn:`Voltar ao login`,backToLogin:`Voltar ao login`,checkSpam:`Não recebeu o e-mail? Verifique sua pasta de spam ou entre em contato com o suporte.`,or:`Ou`,resendUnavailable:`O envio de e-mails pode não estar configurado neste ambiente. Entre em contato com o suporte se o problema persistir.`},setup:{welcomeTitle:`Bem-vindo ao ObjectStack`,description:`Crie a primeira conta de proprietário para concluir a configuração.`,yourName:`Seu nome`,orgName:`Nome da organização`,orgNamePlaceholder:`Empresa Exemplo Ltda.`,emailLabel:`E-mail`,emailPlaceholder:`nome@exemplo.com.br`,passwordLabel:`Senha`,passwordHint:`Pelo menos 8 caracteres`,submit:`Criar conta de proprietário`,submitting:`Configurando…`,failed:`Falha na configuração`},device:{title:`Autorizar novo dispositivo`,subtitle:`Aprove este dispositivo para fazer login como {{email}}.`,userCodeLabel:`Código do dispositivo`,requesterLabel:`Solicitação de conexão de`,approveWarning:`Aprove somente se você mesmo iniciou esta conexão há instantes. Depois de aprovada, este runtime poderá acessar os pacotes privados da sua organização.`,loggedInAs:`Conectado como {{email}}`,approve:`Aprovar dispositivo`,approving:`Aprovando…`,approvedTitle:`Dispositivo autorizado`,approvedDescription:`Você pode voltar ao dispositivo — ele deve fazer login em breve.`,approveSuccess:`Dispositivo autorizado`,approveSuccessDescription:`Você pode fechar esta janela.`,approveFailed:`Falha na aprovação`,deny:`Negar solicitação`,denying:`Negando…`,deniedTitle:`Acesso negado`,deniedDescription:`O acesso não será concedido ao dispositivo.`,denyFailed:`Não foi possível negar a solicitação`,invalidTitle:`Link de dispositivo inválido`,invalidDescription:`Nenhum código de dispositivo foi fornecido na URL.`,loading:`Carregando…`,cancel:`Cancelar`,disabledTitle:`Autorização de dispositivo não habilitada`,disabledDescription:`Esta implantação não tem a autorização de dispositivo habilitada, por isso este dispositivo não pode ser aprovado aqui.`},shell:{tenantHostHint:`Você está fazendo login neste espaço de trabalho`},layout:{headline:`Crie aplicativos de negócios poderosos, com mais rapidez.`,subhead:`A plataforma universal para gestão de dados corporativos, fluxos de trabalho e analytics.`},remediation:{signOut:`Sair da conta`,password:{title:`Sua senha expirou`,fallbackMessage:`Defina uma nova senha para continuar.`,current:`Senha atual`,next:`Nova senha`,confirm:`Confirmar nova senha`,submit:`Alterar senha e continuar`,submitting:`Atualizando…`,mismatch:`As novas senhas não coincidem.`,failed:`Não foi possível alterar a senha.`},mfa:{title:`Configurar a autenticação em duas etapas`,fallbackMessage:`Sua organização exige um aplicativo autenticador para continuar.`,confirmPassword:`Confirme sua senha`,continue:`Continuar`,preparing:`Preparando…`,enrollFailed:`Não foi possível iniciar o registro.`,scanTitle:`Escaneie com seu aplicativo autenticador`,scanBody:`Escaneie este QR code com o Google Authenticator, 1Password, Authy etc. e digite o código de 6 dígitos.`,backupTitle:`Salve seus códigos de backup`,backupBody:`Guarde-os em local seguro — cada um pode ser usado uma vez se você perder seu dispositivo.`,codeLabel:`Código de 6 dígitos`,verify:`Verificar e continuar`,verifying:`Verificando…`,invalidCode:`Código inválido. Tente novamente.`}}},oauth:{consent:{title:`{{appName}} quer acessar sua conta`,request:`{{appName}} está solicitando permissão{{suffix}}.`,unknownApp:`um aplicativo`,willAllow:`Este aplicativo poderá:`,scope:{openid:`Confirmar sua identidade`,profile:`Ler seu perfil básico (nome, foto)`,email:`Ler seu endereço de e-mail`,offlineAccess:`Manter a sessão ativa (renovar o acesso)`},deny:`Negar`,authorize:`Autorizar`,submitting:`Autorizando…`,granted:`Acesso concedido`,denied:`Acesso negado`,noRedirect:`O servidor não retornou nenhuma URL de redirecionamento.`,failed:`Falha no consentimento`,footer:`Você pode revogar o acesso a qualquer momento nas configurações da sua conta.`}},profile:{title:`Perfil`,subtitle:`Gerencie as configurações da sua conta`,saving:`Salvando…`,avatar:{upload:`Enviar`,replace:`Substituir`,remove:`Remover`},info:{title:`Informações pessoais`,description:`Atualize seu nome e veja os detalhes da conta`,saved:`Perfil atualizado com sucesso.`,name:`Nome`,email:`E-mail`,emailImmutable:`O e-mail não pode ser alterado.`,role:`Função`,save:`Salvar alterações`},password:{changeTitle:`Alterar senha`,setTitle:`Definir senha local`,changeDescription:`Atualize a senha que você usa para entrar neste ambiente.`,setDescription:`Você entrou via logon único (SSO). Defina uma senha local para também poder entrar com e-mail e senha neste ambiente.`,current:`Senha atual`,new:`Nova senha`,password:`Senha`,confirm:`Confirmar senha`,tooShort:`A senha deve ter pelo menos 8 caracteres`,mismatch:`As senhas não coincidem`,enterCurrent:`Digite sua senha atual`,changed:`Senha alterada.`,localSet:`Senha local definida. Agora você pode entrar com e-mail e senha neste ambiente.`,changeAction:`Alterar senha`,setAction:`Definir senha`}},errors:{networkError:`Erro de rede. Por favor, verifique sua conexão.`,serverError:`Erro no servidor. Por favor, tente novamente mais tarde.`,notFound:`Recurso não encontrado.`,unauthorized:`Você não tem permissão para realizar esta ação.`,forbidden:`Acesso negado.`,timeout:`Tempo limite excedido. Por favor, tente novamente.`,unknown:`Ocorreu um erro inesperado.`},workspace:{label:`Espaços de trabalho`,default:`Meu espaço de trabalho`,switch:`Trocar de espaço de trabalho`,create:`Criar espaço de trabalho`,createTitle:`Criar um espaço de trabalho`,createDescription:`Um espaço de trabalho é um espaço compartilhado para colaboração da equipe.`,createButton:`Criar espaço de trabalho`,nameLabel:`Nome do espaço de trabalho`,namePlaceholder:`p.ex., Acme Inc`,slugLabel:`Slug de URL`,slugHint:`Usado em URLs. Apenas letras minúsculas, números e hifens.`,invite:`Convidar membro`,members:`Membros`,settings:`Configurações do espaço de trabalho`,multiOrgDisabled:`A criação de novas organizações está desativada nesta instância.`,createFailed:`Falha ao criar o espaço de trabalho`},help:{onThisPage:`Nesta página`,keyboardShortcuts:`Atalhos de teclado`,appDocs:`Documentação deste app`,allDocs:`Toda a documentação`,onlineDocs:`Documentação online`},sidebar:{packageManagement:`Gerenciamento de pacotes`,searchNavigation:`Pesquisar na navegação…`,settings:`Configurações`,help:`Ajuda`,helpTooltip:`Ajuda e documentação`,activityFeed:`Feed de atividades`,notifications:`Notificações`,approvals:`Aprovações`,inbox:`Caixa de entrada`,inboxAriaLabel:`Abrir caixa de entrada`,area:`Área`,scope:`Escopo`,recent:`Recente`,favorites:`Favoritos`,starred:`Favoritos`,removeFromFavorites:`Remover {{name}} dos favoritos`},topbar:{openAssistant:`Abrir o assistente {{name}}`,offline:`Off-line`,usersOnline:`Usuários on-line no momento`,switchView:`Trocar de visão`,switchObject:`Trocar de objeto`,connection:{connected:`Conectado`,connecting:`Conectando…`,reconnecting:`Reconectando…`,disconnected:`Desconectado`,error:`Erro de conexão`},stage:{preview:`Pré-visualização`,beta:`Beta`,tooltip:`Esta plataforma está em pré-visualização — os recursos podem mudar.`},aiAssistant:`Assistente de IA`,designInStudio:`Projetar no Studio`},home:{build:{title:`Criar um aplicativo`,subtitle:`Comece do zero — projete objetos, formulários, automações e interfaces.`},template:{title:`Comece com um modelo`,subtitle:`Instale um aplicativo modelo do marketplace e personalize-o.`},welcomeAdminDescription:`Descreva seu negócio em uma frase — a IA gera os objetos, as telas, as APIs e as ferramentas do agente. Ou configure você mesmo pelo menu à esquerda.`,welcomeAdminDescriptionNoBuild:`Configure seu primeiro aplicativo pelo menu de Administração à esquerda. Quando houver dados, o assistente de IA poderá ajudar a explorá-los.`,welcomeAdminDescriptionNoAi:`Configure seu primeiro aplicativo pelo menu de Administração à esquerda.`,noAppsTitle:`Ainda não há aplicativos`,noAppsDescription:`Seu workspace está sendo preparado — os aplicativos que seu administrador compartilhar aparecerão aqui.`,buildWithAI:`Criar com IA`,askAI:`Perguntar à IA`,recoveryReminder:{message:`Defina uma senha de recuperação para conseguir entrar mesmo que o logon único fique indisponível.`,cta:`Definir senha`,dismiss:`Dispensar`},pendingDrafts:{message:`Você tem {{count}} alteração(ões) não publicada(s) — publique para ativá-las.`,cta:`Publicar`,publishing:`Publicando…`,published:`Publicado! Suas alterações estão ativas.`,publishFailed:`Falha ao publicar`,nothing:`Nada para publicar.`,probeWarn:`Publicado, mas a verificação encontrou problemas.`,seedWarn:`Publicado, mas alguns dados de exemplo não puderam ser carregados.`,publishedVerified:`Publicado e verificado — {{count}} linha(s) de exemplo ativa(s).`,capabilityWarn:`Verificação de autoria: {{count}} referência(s) de capacidade não apontam para nada.`},title:`Início`,subtitle:`Painel do seu espaço de trabalho`,nav:`Início`,allApps:`Todas as aplicações`,yourApps:`As suas aplicações`,showMoreApps:`Mais`,showLess:`Mostrar menos`,continueEmpty:`Os itens que abrir aparecerão aqui.`,actionCenter:{title:`Requer a sua atenção`,empty:`Está tudo em dia`},loading:`Carregando espaço de trabalho…`,recent:`Recentes`,starred:`Favoritos`,welcome:`Bem-vindo ao ObjectUI`,welcomeDescription:`Comece criando sua primeira aplicação ou configurando as preferências do sistema.`,createFirstApp:`Crie sua primeira app`,systemSettings:`Configurações do sistema`,browseMarketplace:`Explorar marketplace de apps`,quickActions:{title:`Ações rápidas`,createApp:`Criar app`,createAppDesc:`Comece com uma nova aplicação`,manageObjects:`Gerenciar objetos`,manageObjectsDesc:`Configure modelos de dados`,systemSettings:`Configurações do sistema`,systemSettingsDesc:`Configure seu espaço de trabalho`},appCard:{noDescription:`Sem descrição`,default:`Padrão`},greetingMorning:`Bom dia`,greetingAfternoon:`Boa tarde`,greetingEvening:`Boa noite`,greetingNight:`Turno da noite`,heroTagline:`Continue de onde parou ou descubra algo novo.`,open:`Abrir`,stats:{apps:`Aplicativos`,starred:`Favoritos`,recent:`Recentes`},recentApps:{title:`Abertos recentemente`,itemType:{object:`Objeto`,dashboard:`Painel`,page:`Página`,record:`Registro`}},starredApps:{title:`Favoritos`},gettingStarted:{title:`Personalizar início`,description:`Marque um aplicativo como favorito para fixá-lo aqui e acessá-lo com um clique. Tudo que você abrir aparecerá automaticamente em "Abertos recentemente".`,cta:`Explorar todos os aplicativos`}},layout:{systemNav:{systemSettings:`Configurações do sistema`,applications:`Aplicativos`,appMarketplace:`Marketplace de aplicativos`,objectManager:`Gerenciador de objetos`,users:`Usuários`,organizations:`Organizações`,roles:`Perfis`,configuration:`Configuração`,createApp:`Criar aplicativo`,administration:`Administração`,datasources:`Fontes de dados`,documentation:`Documentação`},appSwitcher:{switchApplication:`Trocar de aplicativo`,appsAvailable:`{{count}} aplicativos disponíveis`,editNavigation:`Editar a navegação`,home:`Início`,addApp:`Adicionar aplicativo`,editApp:`Editar aplicativo`,manageAllApps:`Gerenciar todos os aplicativos`,systemConsole:`Console do sistema`,noAppsConfigured:`Nenhum aplicativo configurado`},activityFeed:{title:`Atividade recente`,filter:`Filtrar`,empty:`Sem atividade recente`,ariaLabel:`Feed de atividade`,typeCreate:`Criar`,typeUpdate:`Atualizar`,typeDelete:`Excluir`,typeComment:`Comentário`,relativeJustNow:`agora mesmo`,relativeSecondsAgo:`há {{count}}s`,relativeMinutesAgo:`há {{count}}m`,relativeHoursAgo:`há {{count}}h`,relativeDaysAgo:`há {{count}}d`,viewAll:`Ver toda a atividade`},metadata:{label:`Metadados`,toggleTitle:`Alternar inspetor de metadados`,panelTitle:`Inspetor de metadados`,jsonBadge:`JSON`,copyJson:`Copiar JSON`}},search:{title:`Pesquisar`,back:`Voltar`,placeholder:`Pesquisar objetos, painéis, páginas, relatórios…`,inputAriaLabel:`Pesquisar objetos, painéis, páginas, relatórios`,resultsCount:`{{count}} resultado para "{{query}}"`,resultsCountPlural:`{{count}} resultados para "{{query}}"`,itemsAvailable:`{{count}} itens disponíveis`,noResults:`Nenhum resultado encontrado`,noResultsHint:`Tente ajustar seus termos de pesquisa`,typeObjects:`Objetos`,typeDashboards:`Painéis`,typePages:`Páginas`,typeReports:`Relatórios`,badgeObject:`Objeto`,badgeDashboard:`Painel`,badgePage:`Página`,badgeReport:`Relatório`},empty:{objectNotFound:`Objeto não encontrado`,objectNotFoundDescription:`A definição do objeto "{{name}}" está ausente. Verifique sua configuração ou navegue de volta.`,interfacePageSourceMissing:`Esta página de interface faz referência a "{{name}}", que não está disponível.`,pageNotFound:`Página não encontrada`,pageNotFoundDescription:`A página "{{name}}" não foi encontrada. Ela pode ter sido removida ou renomeada.`,dashboardNotFound:`Painel não encontrado`,dashboardNotFoundDescription:`O painel "{{name}}" não foi encontrado. Ele pode ter sido removido ou renomeado.`,reportNotFound:`Relatório não encontrado`,reportNotFoundDescription:`O relatório "{{name}}" não foi encontrado. Ele pode ter sido removido ou renomeado.`,noAppsConfigured:`Nenhum aplicativo configurado`,noAppsConfiguredDescription:`Nenhum aplicativo está registrado. Crie seu primeiro aplicativo ou visite as configurações do sistema.`,appNotAvailable:`Aplicativo indisponível`,appNotAvailableDescription:`Este aplicativo ainda não está disponível — a publicação pode estar em andamento. Tente novamente em instantes.`,appAccessDenied:`Você não tem acesso a este aplicativo`,appAccessDeniedDescription:`Este aplicativo existe, mas sua conta não tem autorização para abri-lo. Peça acesso a um administrador.`,appAccessDeniedHome:`Voltar ao início`,createFirstApp:`Criar primeiro aplicativo`,systemSettings:`Configurações do sistema`,back:`Voltar`,recordNotFound:`Registro não encontrado`,recordNotFoundDescription:`O registro que você está procurando não existe ou pode ter sido excluído.`},renderer:{noPageSchema:`Nenhum esquema de página fornecido`,noFormSchema:`Nenhum esquema de formulário fornecido`,noDashboardSchema:`Nenhum esquema de painel fornecido`,pageRendering:`Renderizando página: {{name}}`,dashboardRendering:`Renderizando painel: {{name}}`,formRenderingMode:`Formulário renderizado no modo {{mode}}`,formRenderingFor:`para registro {{id}}`,createRecord:`Criar registro`,editRecord:`Editar registro`,page:`Página`,dashboard:`Painel`,save:`Salvar`,cancel:`Cancelar`},actionDialog:{title:`Parâmetros de ação`,description:`Insira as informações necessárias para continuar.`,selectPlaceholder:`Selecionar {{label}}`,requiredError:`{{label}} é obrigatório`,cancel:`Cancelar`,confirm:`Confirmar`,uploading:`Enviando…`,defaultActionTitle:`Ação`,ok:`OK`,lookupPlaceholder:`ID do registro para {{label}}`,lookupHelpText:`Este parâmetro não tem um objeto de referência configurado, portanto o seletor de registros não está disponível. Insira um ID de registro ou peça a um administrador para corrigir o parâmetro da ação.`},actionConfirm:{title:`Confirmar ação`,confirm:`Continuar`,cancel:`Cancelar`},rowAction:{openMenu:`Abrir menu`,edit:`Editar`,delete:`Excluir`},navigationSync:{addedPage:`Navegação atualizada: página "{{name}}" adicionada`,addedDashboard:`Navegação atualizada: painel "{{name}}" adicionado`,removedPage:`Navegação atualizada: página "{{name}}" removida`,removedDashboard:`Navegação atualizada: painel "{{name}}" removido`,renamedPage:`Navegação atualizada: página "{{oldName}}" renomeada para "{{newName}}"`,renamedDashboard:`Navegação atualizada: painel "{{oldName}}" renomeado para "{{newName}}"`,undoLabel:`Desfazer`,undone:`Alteração de navegação desfeita`,undoFailed:`Não foi possível desfazer a alteração de navegação`,updateFailed:`Não foi possível atualizar a navegação`},objectActions:{resetPackageSetConfirm:`Este conjunto de permissões acompanha um pacote instalado e não pode ser removido. Excluí-lo o redefine para a versão original do pacote e descarta suas personalizações neste ambiente. Continuar?`,resetPackageSetSuccess:`Conjunto de permissões redefinido para a versão original do pacote`,deleteSuccess:`{{label}} excluído com sucesso`,deleteFailed:`Não foi possível excluir {{label}}`,noRecordId:`Nenhum ID de registro fornecido`,deleteConfirm:`Excluir este registro?`,bulkDeleteSuccess:`{{count}} registros de {{label}} excluídos`,bulkDeletePartial:`{{succeeded}} excluídos, {{failed}} com falha`},objectViewActions:{renameFailed:`Não foi possível renomear a exibição`,deleteFailed:`Não foi possível excluir a exibição`},dashboardActions:{printDialogOpening:`Abrindo a caixa de diálogo de impressão do navegador (não é uma exportação para PDF)`,exportFailed:`Falha na exportação: {{message}}`,forecastSoon:`A exibição de previsão está chegando em breve`},recordDetail:{viewersTooltip:`Usuários visualizando este registro agora`},cellRender:{empty:`Vazio`,yes:`Sim`,no:`Não`,systemFields:`Sistema`},user:{profile:`Perfil`,settings:`Configurações`,logout:`Sair`,preferences:`Preferências`,theme:`Tema`,language:`Idioma`},report:{total:`Total`,rowTotal:`Total da linha`,columnTotal:`Total da coluna`,grandTotal:`Total geral`,totals:`Totais`,rowsLabel:`Linha`,columnsLabel:`Coluna`,allLabel:`(Tudo)`,emptyLabel:`(Vazio)`,loading:`Carregando…`,failedToLoad:`Falha ao carregar a matriz: {{message}}`,needsAcross:"O relatório de matriz requer pelo menos um campo `groupingsAcross`.",aggregate:{count:`Contar`,countDistinct:`Contar distintos`,sum:`Soma`,avg:`Média`,min:`Mínimo`,max:`Máximo`,first:`Primeiro`},editor:{panelTitle:`Editar relatório`}},organizations:{create:`Criar workspace`,mine:`Minhas organizações`,title:`Organizações`,heading:`Suas organizações`,subtitle:`Selecione uma organização para continuar ou crie uma nova.`,searchPlaceholder:`Pesquisar uma organização`,new:`Nova organização`,current:`Organização atual`,manage:`Gerenciar`,emptyTitle:`Nenhuma organização ainda`,emptyDescription:`Crie sua primeira organização para começar.`,noMatches:`Nenhuma organização corresponde à sua pesquisa.`},organization:{roles:{owner:`Proprietário`,admin:`Administrador`,delegatedAdmin:`Administrador delegado`,member:`Membro`},errors:{notAllowedToInvite:`Você não tem permissão para convidar usuários para esta organização.`,notAllowedToInviteWithRole:`Você não tem permissão para convidar um usuário com esta função.`,alreadyInvited:`Este usuário já foi convidado para esta organização.`,organizationExists:`Essa organização já existe.`,slugTaken:`Esse slug já está em uso.`,notAllowedToCreate:`Você não tem permissão para criar uma nova organização.`,notTheRecipient:`Você não é o destinatário deste convite.`,invitationNotFound:`Este convite não existe mais ou expirou.`,unknown:`Algo deu errado. Tente novamente.`},backToList:`Voltar para as organizações`,notFound:`Organização não encontrada`,notFoundDescription:`Esta organização não existe ou você não tem acesso.`,tabs:{members:`Membros`,invitations:`Convites`,settings:`Configurações`},members:{title:`Membros`,inviteMember:`Convidar membro`,inviteRestrictedNote:`Apenas administradores da organização podem convidar membros.`,removeMember:`Remover membro`,removeConfirmTitle:`Remover membro?`,removeConfirmDescription:`Isso removerá {{name}} da organização. O acesso será perdido imediatamente.`,removeConfirmAction:`Remover`,memberRemoved:`Membro removido`,removeFailed:`Falha ao remover o membro`,roleUpdated:`Função atualizada`,roleUpdateFailed:`Falha ao atualizar a função`,memberActions:`Ações do membro`,loadFailed:`Falha ao carregar os membros`},invitations:{title:`Convites`,empty:`Nenhum convite encontrado.`,expiresAt:`Expira em`,linkCopied:`Link do convite copiado`,copyFailed:`Falha ao copiar o link`,canceled:`Convite cancelado`,cancelFailed:`Falha ao cancelar o convite`,cancelTitle:`Cancelar convite?`,cancelDescription:`O convite de {{email}} será revogado.`,cancelAction:`Cancelar convite`,inviteTitle:`Convidar um membro`,inviteDescription:`A pessoa receberá um convite para entrar nesta organização.`,emailLabel:`E-mail`,roleLabel:`Função`,placementLabel:`Alocação (opcional)`,placementDescription:`Aplicada quando o convite for aceito. Somente as unidades e os cargos que você pode delegar são listados.`,businessUnitLabel:`Unidade de negócio`,businessUnitPlaceholder:`Sem alocação`,positionsLabel:`Cargos`,sendInvite:`Enviar convite`,sentTitle:`Convite criado`,sentDescription:`Compartilhe o link abaixo com a pessoa convidada. Ela precisará entrar para aceitar.`,linkLabel:`Link de aceitação`,invitedAs:`{{email}} convidado como {{role}}`,copyLinkLabel:`Copiar link do convite`,loadFailed:`Falha ao carregar os convites`,inviteFailed:`Falha ao convidar o membro`,status:{all:`Todos`,pending:`Pendente`,accepted:`Aceito`,rejected:`Recusado`,canceled:`Cancelado`}},settings:{generalTitle:`Geral`,generalDescription:`Atualize as informações da sua organização.`,readOnlyNote:`Somente proprietários podem alterar as configurações.`,nameLabel:`Nome da organização`,slugLabel:`Slug`,logoLabel:`Logo`,logoUpload:`Enviar`,logoReplace:`Substituir`,logoClear:`Remover`,logoUploaded:`Logo enviado — salve para aplicar`,logoUploadFailed:`Falha ao enviar o logo`,save:`Salvar alterações`,saved:`Configurações salvas`,saveFailed:`Falha ao salvar as configurações`,leaveTitle:`Sair da organização`,leaveDescription:`Você perderá o acesso a esta organização.`,leaveAction:`Sair`,leaveConfirmTitle:`Sair da organização?`,leaveConfirmDescription:`Tem certeza de que deseja sair de {{name}}? Você perderá o acesso imediatamente.`,leaveConfirmAction:`Sair`,leftOrg:`Você saiu da organização`,leaveFailed:`Falha ao sair da organização`,dangerZone:`Zona de perigo`,deleteTitle:`Excluir organização`,deleteDescription:`Exclua permanentemente esta organização e todos os seus dados.`,deleteAction:`Excluir`,deleteConfirmTitle:`Excluir organização?`,deleteConfirmDescription:`Esta ação é irreversível. Todos os dados serão excluídos permanentemente. Digite o slug da organização para confirmar.`,deleteConfirmSlugLabel:`Digite "{{slug}}" para confirmar`,deleteConfirmAction:`Excluir organização`,deleted:`Organização excluída`,deleteFailed:`Falha ao excluir a organização`},accept:{title:`Você foi convidado`,description:`Você foi convidado para entrar em {{orgName}} como {{role}}.`,errorTitle:`Convite indisponível`,goToOrgs:`Ir para as organizações`,loading:`Carregando o convite…`,organization:`Organização`,role:`Função`,expiresAt:`Expira em`,accept:`Aceitar convite`,accepted:`Convite aceito`,acceptFailed:`Falha ao aceitar o convite`,decline:`Recusar`,declined:`Convite recusado`,declineFailed:`Falha ao recusar o convite`},switcher:{label:`Trocar de organização`,groupLabel:`Organização de trabalho`,groupHint:`Novos registros são criados aqui. As exibições mostram dados de todas as suas organizações.`,manageMembers:`Gerenciar membros`}},notifications:{regionLabel:`Notificações`,groupCount:`{{count}} notificações`,groupUnread:`{{count}} não lidas`,groupMarkRead:`Marcar como lidas`,groupMarkReadTitle:`Marcar todas deste tipo como lidas`,empty:`Sem notificações`,markAllRead:`Marcar tudo como lido`,viewAll:`Ver todas as notificações`,approvalsPending:`{{count}} aprovações pendentes`,viewApprovals:`Ver aprovações`,noPendingApprovals:`Sem aprovações pendentes`,openApprovalsInbox:`Abrir caixa de aprovações`,badgeTotal:`{{total}} no total`,badgeNotifications:`{{unread}} notificações`,badgeApprovals:`{{approvals}} aprovações pendentes`,emptyUnread:`Tudo lido`,filterUnread:`Não lidos`,filterAll:`Todos`},publicForm:{submit:`Enviar`,submitting:`Enviando…`,submitAnother:`Enviar outra resposta`,poweredBy:`Desenvolvido por ObjectStack`,secureNotice:`Suas informações são transmitidas com segurança e usadas apenas para processar sua solicitação.`,thankYouTitle:`Obrigado!`,thankYouMessage:`Seu envio foi recebido com sucesso.`,redirecting:`Redirecionando em {{seconds}} segundo(s)…`,unavailableTitle:`Formulário indisponível`,unavailableDescription:`Nenhum formulário público está disponível nesta URL. Certifique-se de que a exibição subjacente tenha o compartilhamento anônimo ativado.`,tryDemo:`Experimentar demo`,retry:`Tentar novamente`,loading:`Carregando formulário…`,requiredHint:`* Campo obrigatório`,consentLabelDefault:`Aceito a política de privacidade e consinto com o processamento dos meus dados para esta solicitação.`,consentLink:`Política de privacidade`,consentRequired:`Por favor, aceite a política de privacidade para continuar.`,rateLimited:`Reserve um momento para revisar suas respostas antes de enviar.`,redirectBlocked:`Envio aceito, mas a URL de redirecionamento foi bloqueada por segurança.`,demo:{contactTitle:`Entrar em contato`,contactDescription:`Conte-nos sobre seu projeto e um representante de vendas entrará em contato em um dia útil.`,supportTitle:`Enviar solicitação de suporte`,supportDescription:`Descreva-nos o problema — nossa equipe responderá em um dia útil.`,thankYouSalesTitle:`Obrigado — recebemos sua mensagem!`,thankYouSalesMessage:`Um representante de vendas entrará em contato em um dia útil.`,thankYouSupportTitle:`Pronto — sua solicitação está na fila.`,thankYouSupportMessage:`Um engenheiro de suporte fará o acompanhamento em breve. Salve esta página se tiver capturas de tela adicionais.`,field:{firstName:`Nome`,lastName:`Sobrenome`,email:`E-mail corporativo`,phone:`Telefone`,jobTitle:`Cargo`,company:`Empresa`,website:`Site`,industry:`Setor`,companySize:`Tamanho da empresa`,howCanWeHelp:`Como podemos ajudar?`,subject:`Assunto`,description:`Descrição`,issueType:`Tipo de problema`,priority:`Prioridade`},industry:{technology:`Tecnologia`,software:`Software / SaaS`,finance:`Finanças`,healthcare:`Saúde`,retail:`Varejo`,other:`Outro`},issueType:{question:`Pergunta`,problem:`Problema`,bug:`Bug`,feature_request:`Solicitação de recurso`},priority:{low:`Baixa`,medium:`Média`,high:`Alta`,critical:`Crítica`}}},connectAgent:{disabled:{title:`O MCP está desativado nesta implantação`,body:`A superfície MCP está desligada (OS_MCP_SERVER_ENABLED=false). Peça ao operador para reativá-la.`},url:{title:`Endpoint MCP deste ambiente`,body:`Qualquer cliente de IA compatível com MCP conecta-se com esta URL. A identidade é autosserviço: a implantação é seu próprio servidor de autorização OAuth 2.1 — você entra como você mesmo e cada chamada corre sob suas permissões e segurança em nível de linha.`,downloadSkill:`Baixar SKILL.md`,skillHint:`A skill portátil do agente: ensina qualquer agente compatível a trabalhar com este ambiente.`},claude:{body:`Configurações → Conectores → Adicionar conector personalizado, cole esta URL e faça login no navegador.`,reachability:`claude.ai (web) conecta-se a partir dos servidores da Anthropic — a implantação precisa ser acessível via HTTPS público. Claude Desktop e clientes locais também alcançam implantações de intranet.`},claudeCode:{body:`Um comando — o login OAuth abre automaticamente no primeiro uso:`,plugin:`Ou instale o plugin oficial (adiciona a skill ObjectStack e o comando guiado /objectstack:connect):`},cursor:{addButton:`Adicionar ao Cursor`,body:`Use o botão de um clique ou adicione isto ao .cursor/mcp.json:`},vscode:{body:`Adicionar ao .vscode/mcp.json (ou pelo comando MCP: Add Server):`},codex:{body:`Adicionar ao ~/.codex/config.toml. Se sua versão do Codex não suportar o fluxo OAuth, use um cabeçalho de chave de API (veja abaixo):`},apiKey:{title:`Chaves de API`,badge:`headless`,body:`Para CI, scripts e agentes sem navegador. A chave age como você — trate-a como uma senha. É mostrada UMA única vez.`,namePlaceholder:`Nome da chave (ex. ci-agent)`,mint:`Criar chave`,minting:`Criando…`,showOnce:`Chave "{{name}}" criada — copie agora, ela não será mostrada novamente:`,done:`Concluído — ocultar`}},excelImport:{noImportableFields:`Esse objeto não tem campos importáveis.`,schemaReadFailed:`Não foi possível ler o esquema do objeto.`,imported:`{{count}} linha(s) importada(s) para {{object}}.`,importFrom:`Importar as linhas reais de`,into:`para`,opening:`Abrindo…`,importAction:`Importar`,dismiss:`Dispensar`},cloudOnboarding:{hintCreate:`Crie seu primeiro ambiente — um espaço de trabalho privado com URL, banco de dados e plano próprios. A construção acontece dentro dele.`,hintReady:`Seu ambiente de produção está pronto. Abra-o para criar e executar seus aplicativos — tudo acontece dentro do ambiente.`,createEnvironment:`Crie seu ambiente`,openProduction:`Abrir produção`,manageEnvironments:`Gerenciar ambientes`},aiModelStatus:{summary:`Criar / Perguntar usa {{conversational}} ({{conversationalSource}}); estruturado usa {{structured}} ({{structuredSource}}).`,summaryRouting:`Política de roteamento: planos gratuitos → {{free}}, planos pagos → {{paid}}.`,modelUnknown:`desconhecido`,sourceUnknown:`não informado pelo adaptador`,rowConversational:`Modelo Build / Ask`,rowStructured:`Estruturado (blueprint / seed)`,rowReasoning:`Esforço de raciocínio`,readFailed:`Não foi possível ler o modelo de IA efetivo. Este ambiente pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.`,readFailedWithStatus:`Não foi possível ler o modelo de IA efetivo (HTTP {{status}}). Este ambiente pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.`,overridesInEffect:`Substituições em vigor: `,noOverrides:`nenhuma — usando os padrões do código implantado.`,adapter:`Adaptador: `,sourceCodeDefault:`padrão do código (sem substituição env)`,sourceInherits:`igual a build/ask`,sourcePinned:`fixado por {{source}}`},chatbotError:{title:`Falha na resposta`,fallbackDetail:`Algo deu errado. Tente novamente.`,details:`Detalhes`,hide:`Ocultar`,retry:`Tentar novamente`},chatbotQuota:{title:`Upgrade necessário`,fallbackMessage:`Você atingiu sua cota de IA.`,buyCredits:`Comprar um pacote de créditos`,upgradePlan:`Fazer upgrade do plano`},environment:{addEnvironment:`Adicionar ambiente`,setUpProduction:`Configure seu ambiente de produção`,addDevelopment:`Adicionar ambiente de desenvolvimento`,entitlement:{productionLimitTitle:`Você já tem seu ambiente de produção`,productionLimitBody:`Cada organização inclui exatamente um ambiente de produção. Crie uma organização separada para ter outro, ou fale conosco sobre um acordo Enterprise.`,planLockedTitle:`Ambientes de desenvolvimento são um recurso pago`,planLockedBody:`Seu {{plan}} inclui um ambiente de produção. Faça upgrade para adicionar ambientes de desenvolvimento — construa em desenvolvimento e depois publique em produção.`,limitTitle:`Limite de ambientes de desenvolvimento atingido`,limitBody:`A capacidade cresce com os assentos de IA. Adicione um assento de IA, ou arquive um ambiente de desenvolvimento sem uso para liberar espaço.`,limitBodyWithCount:`Você está usando {{used}} de {{limit}} ambientes de desenvolvimento. A capacidade cresce com os assentos de IA — adicione um assento de IA, ou arquive um ambiente de desenvolvimento sem uso.`,freePlan:`plano gratuito`,namedPlan:`plano {{plan}}`,upgradeCta:`Fazer upgrade do plano`,contactSalesCta:`Falar com vendas`}},cloudConnection:{checking:`Verificando a conexão…`,retry:`Tentar novamente`,errors:{expired:`A solicitação expirou antes de ser aprovada. Comece novamente.`,bindFailed:`Falha ao vincular.`,deviceCodeFailed:`Falha na solicitação do código do dispositivo.`},waiting:{popupOpened:`Aprove a conexão na janela que acabou de abrir — esta página se atualiza sozinha.`,polling:`Aguardando a aprovação no console da nuvem…`,openApproval:`Abrir a página de aprovação`,copy:`Copiar`,copied:`Copiado`,codePrefilled:`O código já vem preenchido na página de aprovação.`,openItHere:`A janela não apareceu? Abra aqui`,cancel:`Cancelar`},bound:{title:`Conectado ao ObjectStack Cloud`,runtime:`Runtime`,organization:`Organização`,approvedBy:`Aprovado por`,runtimeId:`ID do runtime`,environment:`Ambiente`,since:`Desde`,privatePackages:`Os pacotes privados da sua organização agora aparecem no Marketplace em “Sua organização”.`,disconnect:`Desconectar`},unbound:{title:`Não conectado`,body:`Conecte este runtime a um plano de controle do ObjectStack para explorar os pacotes privados da sua organização e instalá-los aqui. A aprovação é um único clique na sua conta da nuvem — nenhum id ou credencial é digitado nesta página.`,connect:`Conectar`}},marketplace:{suggestedBindings:{promptEveryone:`Este app sugere conceder "{{set}}" a todos os usuários autenticados (a posição Everyone).`,promptGuest:`Este app sugere conceder "{{set}}" a visitantes não autenticados (a posição Guest).`,confirm:`Conceder`,confirming:`Concedendo…`,dismiss:`Dispensar`,confirmedToast:`"{{set}}" agora está concedido a {{anchor}}.`,dismissedToast:`Sugestão de "{{set}}" dispensada.`},title:`Marketplace de aplicativos`,subtitle:`Explore aplicativos aprovados publicados no catálogo ObjectStack. Clique em um aplicativo para ver os detalhes e instalá-lo em um de seus ambientes.`,searchPlaceholder:`Pesquisar aplicativos por nome ou ID de manifesto…`,searchAria:`Pesquisar aplicativos do marketplace`,installed:`Instalado`,installedCount:`Instalados ({{count}})`,refresh:`Atualizar`,all:`Todos`,noApprovedYet:`Nenhum aplicativo aprovado para o marketplace ainda.`,noMatchFilters:`Nenhum aplicativo corresponde aos seus filtros.`,noDescription:`Sem descrição disponível.`,back:`Voltar ao marketplace`,installedTitle:`Aplicativos instalados`,installedSubtitle:`Pacotes do marketplace atualmente instalados no kernel deste runtime.`,installedEmpty:`Nenhum aplicativo do marketplace instalado neste runtime ainda.`,browseLink:`Explorar marketplace →`,installedAdditiveNote:`<strong>Nota:</strong> A API do kernel é apenas aditiva — desinstalar remove o manifesto do disco para que o pacote não seja carregado na próxima inicialização, mas o kernel em execução mantém o aplicativo registrado até reiniciar.`,installedAt:`Instalado {{when}}`,installedBy:`por {{user}}`,installedPackageId:`Pacote`,cachedAs:`Armazenado em cache como <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Instalado v{{version}}`,load:{failed:`Não foi possível carregar o marketplace`,failedHint:`Por padrão, este runtime aponta para o cloud público ObjectStack. Certifique-se de que o runtime está online.`,packageFailed:`Não foi possível carregar o pacote`,notFound:`Não encontrado.`},detail:{homepage:`Página inicial`,installedV:`Instalado · v{{version}}`,about:`Sobre`,noReadme:`Sem readme disponível.`,versions:`Versões`,noApprovedVersions:`Sem versões aprovadas.`,prerelease:`Pré-lançamento`,moreOptions:`Mais opções de instalação`,uninstallFromRuntime:`Desinstalar deste runtime`,addSampleData:`Adicionar dados de exemplo`,reseedAgain:`Recarregar dados de exemplo`,purgeSampleData:`Remover dados de exemplo`,purgeConfirm:`Excluir todos os registros de exemplo criados por este pacote? Os registros adicionados pelo usuário NÃO serão afetados.`,purgeSuccess:`{{count}} registro(s) de exemplo removido(s).`,purgeNoData:`Nenhum registro de exemplo encontrado para remover.`,reseedQueued:`Os dados de exemplo serão recarregados no próximo acesso ao ambiente.`,reseedLocalSuccess:`Dados de exemplo recarregados: {{inserted}} inseridos, {{updated}} atualizados.`,reseedPartialErrors:`({{count}} registro(s) não puderam ser gravados)`,updateAvailable:`Atualização disponível`},action:{installed:`Instalado`,install:`Instalar`,reinstall:`Reinstalar`,working:`Processando…`,installToCloud:`Instalar na nuvem…`,installing:`Instalando…`,uninstall:`Desinstalar`,uninstalling:`Desinstalando…`,details:`Detalhes`,close:`Fechar`,dismiss:`Fechar`,openOnCloud:`Abrir na nuvem`,backHome:`Voltar ao início`,updateTo:`Atualizar`},install:{dialogTitle:`Instalar {{name}}`,dialogDescCurrent:`Instalar neste ambiente ({{host}}).`,dialogDescPicker:`Escolha um ambiente para instalar este aplicativo. Você deve estar conectado ao ObjectStack Cloud.`,environment:`Ambiente`,environmentPlaceholder:`Selecionar ambiente`,includeSampleData:`Incluir dados de amostra`,noEnvs:`Nenhum ambiente encontrado em sua organização ativa.`,noPermission:`Você não tem permissão para instalar aplicativos em um ambiente. Somente proprietários e administradores da organização podem instalar.`,signInFirst:`Você deve primeiro fazer login no ObjectStack Cloud.`,success:`Instalado com sucesso. Abra o ambiente para ver o novo aplicativo.`,localSuccess:`v{{version}} instalado neste runtime. "{{name}}" deve aparecer no seletor de aplicativos agora.`,localManifestConflict:`{{message}}
|
|
27
|
-
Nota: Um aplicativo local já possui este manifest_id. Remova-o primeiro de objectstack.config.ts.`,localUnauthorized:`Faça login neste runtime primeiro.`,localMarketplaceUnavailable:`Este runtime não tem OS_CLOUD_URL configurado.`,updateTo:`Atualizar → v{{version}}`,installedVersion:`Instalado v{{version}}`},org:{heading:`Sua organização`,install:`Instalar`,installed:`{{name}} instalado`,installedBadge:`Instalado`,installing:`Instalando…`},disclosure:{containsCode:`Este pacote contém código`,reviewed:`Revisado e aprovado`,unreviewed:`Ainda não revisado`,signed:`Assinado`,grantsIntro:`Na instalação, este pacote receberá:`,services:`Serviços da plataforma`,hooks:`Hooks de ciclo de vida`,network:`Acesso à rede`,fs:`Acesso ao sistema de arquivos`,noPermissions:`Não solicita permissões especiais.`,acknowledge:`Entendo que este pacote executa código e recebe as permissões acima.`,runtime:{node:`No processo · confiança total`,sandbox:`Em sandbox`,worker:`Fora do processo`}},uninstall:{confirm:`Desinstalar {{manifestId}} v{{version}} deste runtime?
|
|
28
|
-
|
|
29
|
-
O manifesto em cache será removido.`,successInList:`{{manifestId}} removido. Reinicie o runtime para descarregá-lo completamente.`,successInDetail:`Manifesto em cache para {{manifestId}} removido.`},accessDenied:{title:`Marketplace somente para administradores`,description:`Você não tem permissão para instalar aplicativos neste ambiente.`},category:{crm:`CRM`,erp:`ERP`,hr:`RH`,finance:`Finanças`,project:`Gestão de projetos`,collaboration:`Colaboração`,analytics:`Análise`,integration:`Integração`,automation:`Automação`,ai:`IA`,security:`Segurança`,"developer-tools":`Ferramentas de desenvolvedor`,"ui-theme":`Tema de UI`,storage:`Armazenamento`,other:`Outro`},pricing:{free:`Grátis`,freemium:`Freemium`,paid:`Pago`,subscription:`Assinatura`,"usage-based":`Por uso`,"contact-sales":`Contatar vendas`},relativeTime:{today:`hoje`,daysAgo:`há {{count}}d`,monthsAgo:`há {{count}} meses`,yearsAgo:`há {{count}} anos`}},approvals:{approve:`Aprovar`,reject:`Rejeitar`,comment:`Comentário (opcional)`,approveSuccess:`Aprovado`,rejectSuccess:`Rejeitado`,rejectConfirm:`Rejeitar esta solicitação de aprovação?`},approvalsInbox:{loadMore:`Carregar mais`,loadingMore:`Carregando…`,loadedOf:`{{loaded}} de {{total}} carregadas`,actEscalate:`SLA escalonado`,systemSlaActor:`Sistema (SLA)`,reassignBtn:`Reatribuir`,reassignTitle:`Passar esta aprovação para outra pessoa?`,reassignBody:`Sua vaga de aprovador passa para a pessoa escolhida — ela é notificada e pode agir imediatamente.`,reassignTo:`Novo aprovador`,reassignToPlaceholder:`Escolha um usuário ou digite um e-mail / role:<nome>`,reassignSuccess:`Reatribuída a {{to}}`,requestInfoBtn:`Pedir informações`,requestInfoTitle:`Pedir mais informações ao solicitante?`,requestInfoBody:`A solicitação continua pendente; o solicitante é notificado e pode responder no tópico.`,requestInfoPlaceholder:`O que você precisa do solicitante?`,requestInfoSent:`Devolvida ao solicitante para complemento`,remindBtn:`Lembrar`,remindSuccess:`Lembrete enviado a {{count}} aprovador(es)`,remindThrottled:`Um lembrete já foi enviado há pouco — tente mais tarde.`,replyPlaceholder:`Responder nesta solicitação…`,slaRemaining:`SLA: faltam {{dur}}`,slaOverdue:`SLA vencido há {{dur}}`,actReassign:`Reatribuída`,reassignFromTo:`de {{from}} para {{to}}`,actRemind:`Lembrete`,actRequestInfo:`Pediu mais informações`,actComment:`Comentou`,stepProgress:`Etapas de aprovação`,prevRequest:`Anterior`,nextRequest:`Próxima`,positionOf:`Solicitação {{index}} de {{total}}`,progressApprovals:`Aprovações — {{got}} de {{need}}`,progressGroups:`Progresso de assinaturas — {{got}} de {{need}} grupos`,progressEligible:`{{count}} aprovador(es) elegível(eis)`,progressBar:`Progresso da decisão`,declaredActions:`Ações`,attachmentChip:`Anexo`,attachmentOpenFailed:`Não foi possível abrir o anexo — tente novamente`,approveOneTitle:`Aprovar "{{title}}"?`,approveOneBody:`Isso aprova a solicitação com a sua identidade. Para adicionar um comentário ou anexo, abra a solicitação.`,flowOrigin:`Iniciada por fluxo`,sortBy:`Ordenar`,sortRecent:`Mais recentes primeiro`,sortOldest:`Mais antigas primeiro`,sortAmount:`Valor (maior→menor)`,quickPhrase1:`Aprovada — atende aos requisitos.`,quickPhrase2:`Aprovada com condições — acompanhe a execução.`,quickPhrase3:`Adicione material de apoio e reenvie.`,title:`Central de aprovações`,subtitle:`Revise e processe as solicitações de aprovação.`,refresh:`Atualizar`,tabMyPending:`Pendentes para mim`,tabSubmitted:`Enviadas por mim`,tabAll:`Todas`,searchPlaceholder:`Pesquisar registro, processo, solicitante…`,clearSearch:`Limpar pesquisa`,statusFilter:`Status`,allStatuses:`Todos os status`,processFilter:`Processo`,allProcesses:`Todos os processos`,objectFilter:`Objeto`,allObjects:`Todos os objetos`,filterCount:`{{shown}} de {{total}}`,selected:`selecionadas`,actionableCount:`({{count}} acionáveis)`,selectAll:`Selecionar tudo`,selectRow:`Selecionar solicitação`,colRequest:`Solicitação`,colRecord:`Registro`,colRequester:`Solicitante`,colStatus:`Status`,colWaiting:`Enviada`,colActions:`Ações`,statusPending:`Pendente`,statusApproved:`Aprovada`,statusRejected:`Rejeitada`,statusRecalled:`Retirada`,statusReturned:`Devolvido para revisão`,sendBackBtn:`Devolver`,sendBackTitle:`Devolver esta solicitação para revisão?`,sendBackBody:`Esta rodada termina e o registro é desbloqueado para o solicitante corrigir os dados. Ao reenviar, uma nova rodada de aprovação é aberta para todos os aprovadores.`,sendBackPlaceholder:`O que precisa ser corrigido antes da aprovação?`,sendBackSuccess:`Devolvida para revisão — o solicitante já pode editar e reenviar`,sendBackAutoRejected:`Limite de revisões atingido — a solicitação foi rejeitada automaticamente`,actRevise:`Devolvido para revisão`,actResubmit:`Reenviado`,roundChip:`Rodada {{n}}`,returnedHint:`Um aprovador devolveu esta solicitação para você. O registro está desbloqueado — corrija os dados e reenvie para iniciar uma nova rodada de aprovação.`,resubmitBtn:`Reenviar`,resubmitting:`Reenviando…`,resubmitSuccess:`Reenviada — uma nova rodada de aprovação foi aberta`,resubmitPlaceholder:`O que você alterou?`,editRecordBtn:`Editar registro`,abandonTitle:`Abandonar esta revisão?`,abandonBody:`A solicitação é retirada em vez de reenviada. A aprovação termina aqui.`,emptyTitle:`Sem solicitações`,emptyPending:`Tudo em dia — nada aguarda sua aprovação.`,emptyOther:`Nada por aqui ainda.`,emptyViewAll:`Ver todas as solicitações`,noMatches:`Nenhum resultado com os filtros atuais.`,keyboardHint:`Teclado: j/k mover · Enter abrir · x selecionar · a aprovar · r rejeitar`,drawerTitle:`Solicitação de aprovação`,submittedAgo:`Enviada {{when}}`,completedAt:`Concluída {{when}}`,waitingOn:`Aguardando`,history:`Atividade`,noActions:`Nenhuma ação ainda.`,actSubmit:`Enviada`,actApprove:`Aprovada`,actReject:`Rejeitada`,actRecall:`Retirada`,rawData:`Dados brutos (JSON)`,copy:`Copiar`,copied:`Copiado`,copyFailed:`Falha ao copiar`,overrideActor:`Agir como outra identidade (admin)`,actor:`Ator`,auto:`Auto`,overrideHint:`ex.: role:sales_manager. Deixe em branco para usar a identidade detectada.`,comment:`Comentário (opcional)`,approve:`Aprovar`,approving:`Aprovando…`,reject:`Rejeitar`,rejecting:`Rejeitando…`,recall:`Retirar`,recalling:`Retirando…`,cancel:`Cancelar`,clear:`Limpar`,approveN:`Aprovar {{count}}`,rejectN:`Rejeitar {{count}}`,bulkApproveTitle:`Aprovar {{count}} solicitações?`,bulkApproveBody:`Cada solicitação é aprovada com sua identidade e o fluxo segue pelo ramo de aprovação.`,bulkRejectTitle:`Rejeitar {{count}} solicitações?`,bulkRejectBody:`As solicitações selecionadas serão rejeitadas e os solicitantes notificados.`,bulkApproved:`{{count}} solicitações aprovadas`,bulkRejected:`{{count}} solicitações rejeitadas`,bulkPartial:`{{ok}} com sucesso, {{fail}} falharam: {{which}}`,rejectOneTitle:`Rejeitar "{{title}}"?`,rejectOneBody:`A solicitação será rejeitada e o solicitante notificado.`,rejectTitle:`Rejeitar esta solicitação?`,rejectBody:`A solicitação será marcada como rejeitada e o solicitante notificado.`,recallTitle:`Retirar esta solicitação?`,recallBody:`Após retirar, os aprovadores não poderão mais agir e o registro será desbloqueado.`,inlineApproved:`"{{title}}" aprovada`,inlineRejected:`"{{title}}" rejeitada`,approvedFinal:`Aprovada`,approvedWaiting:`Aprovada — aguardando os demais aprovadores`,rejectedToast:`Rejeitada`,recalledToast:`Solicitação retirada`,whyDisabled:`Apenas os aprovadores designados podem agir. Aguardando: {{who}}.`,whyDisabledSubmitter:`Você enviou esta solicitação e pode retirá-la — mas apenas os aprovadores designados podem aprovar ou rejeitar.`,noActor:`Não foi possível determinar a identidade`,actionFailed:`A ação falhou`,loadFailed:`Falha ao carregar a solicitação`,recallUnavailable:`Retirada não está disponível nesta implantação.`,requestGone:`Esta solicitação não existe mais. Atualize a lista.`,notAllowed:`Você não tem permissão para esta ação.`,alreadyDecided:`Esta solicitação já foi decidida. Atualize a lista.`,justNow:`agora mesmo`,minutesAgo:`há {{count}} min`,hoursAgo:`há {{count}} h`,daysAgo:`há {{count}} dias`},preview:{empty:{loadFailedTitle:`Falha ao carregar a pré-visualização do rascunho`,loadFailedDescription:`Não foi possível ler a camada de rascunho. Tente novamente ou verifique sua conexão.`,notReadyTitle:`"{{app}}" ainda não está no rascunho`,notReadyDescription:`A compilação pode ainda estar em andamento, ou falhou antes de este app ser preparado. Verifique o estado na conversa — este painel é atualizado quando os rascunhos chegam.`,nothingTitle:`Nada para pré-visualizar ainda`,retry:`Tentar novamente`},draftBar:{messageClean:`Pré-visualização do rascunho — não há alterações não publicadas; tudo aqui já está no ar.`,sampleDataTitle:`Os dados de exemplo aparecem depois que você publicar`,sampleDataBody:`Você está pré-visualizando a estrutura do seu app. Publique para carregar registros de exemplo e colocá-lo no ar.`,publishCta:`Publicar para ver no ar`,message:`Pré-visualização de rascunho — você está vendo alterações não publicadas. Nada entra no ar até você publicar.`,publish:`Publicar`,publishing:`Publicando…`,exit:`Sair da pré-visualização`,changes:`Alterações`},changes:{title:`Alterações pendentes`,description:`O que a publicação vai mudar. Itens novos são adicionados; atualizações sobrescrevem a versão publicada.`,loading:`Carregando alterações pendentes…`,loadFailed:`Não foi possível carregar as alterações pendentes:`,empty:`Nada pendente — todos os rascunhos foram publicados.`,kindNew:`Novo`,kindUpdate:`Atualização`,detailLoading:`Carregando detalhes…`,detailLoadFailed:`Não foi possível carregar os detalhes da alteração:`,detailNone:`Nenhuma diferença detectada — o rascunho corresponde à versão publicada.`,detailChangedKeys:`Também alterado:`,confirmNote:`Publicar libera atomicamente todos os {{count}} rascunhos pendentes deste pacote.`,publishConfirm:`Publicar tudo`},unpublishedBar:{message:`App não publicado — totalmente funcional, mas somente os criadores o veem. Publique-o para que seus usuários o vejam.`,publish:`Publicar`,publishing:`Publicando…`,published:`Publicado! O app já está visível para seus usuários.`,publishFailed:`Falha ao publicar`},history:{button:`Histórico`,title:`Histórico de compilações`,description:`Todas as alterações deste app, as mais recentes primeiro. Desfaça qualquer etapa para revertê-la — não é necessário confirmar a publicação.`,loadFailed:`Não foi possível carregar o histórico:`,loadFailedUnavailable:`Armazenamento de commits temporariamente inacessível — esta leitura não aconteceu, portanto nenhum histórico é exibido. Tente novamente em instantes.`,loading:`Carregando histórico…`,empty:`Ainda não há histórico para este app.`,revertLabel:`Uma alteração foi desfeita`,applyLabel:`Alteração de compilação`,revert:`desfazer`,items:`itens`,revertAction:`Desfazer`,reverted:`Desfeito — a alteração foi revertida.`,revertFailed:`Falha ao desfazer`,revertUnavailable:`Armazenamento de commits temporariamente inacessível — a reversão pode não ter sido aplicada. Reabra este histórico para verificar antes de tentar novamente.`}},filterBuilder:{where:`Onde`,and:`E`,or:`OU`,clearAll:`Limpar tudo`,selectField:`Selecionar campo`,operator:`Operador`,selectValue:`Selecionar valor`,value:`Valor`,addFilter:`Adicionar filtro`,removeCondition:`Remover condição`,trueLabel:`Verdadeiro`,falseLabel:`Falso`,noResults:`Sem resultados`,searchField:`Pesquisar {{label}}…`,enterId:`Inserir ID de {{label}}`,operators:{equals:`Igual a`,notEquals:`Diferente de`,contains:`Contém`,notContains:`Não contém`,isEmpty:`Está vazio`,isNotEmpty:`Não está vazio`,greaterThan:`Maior que`,lessThan:`Menor que`,greaterOrEqual:`Maior ou igual`,lessOrEqual:`Menor ou igual`,before:`Antes de`,after:`Depois de`,between:`Entre`,in:`Em`,notIn:`Não em`}},sortBuilder:{sortBy:`Ordenar por`,thenBy:`Depois por`,selectField:`Selecionar campo`,ascending:`A → Z`,descending:`Z → A`,addSort:`Adicionar ordenação`,removeSort:`Remover ordenação`},collaboration:{commentCount:`{{count}} comentários`,commentCountOne:`{{count}} comentário`,resolvedSuffix:` · Resolvido`,sortComments:`Ordenar comentários`,sortOldest:`Mais antigos`,sortNewest:`Mais recentes`,resolve:`Resolver`,reopen:`Reabrir`,justNow:`agora mesmo`,minutesAgo:`há {{count}} min`,hoursAgo:`há {{count}} h`,daysAgo:`há {{count}} d`,edited:`(editado)`,reactionCount:`{{count}} reações`,reactionCountOne:`{{count}} reação`,addThumbsUp:`Adicionar curtida`,reply:`Responder`,reactThumbsUp:`Reagir com curtida`,reactHeart:`Reagir com coração`,cancelReply:`Cancelar resposta`,replyingTo:`Respondendo a {{name}}…`,replyingToComment:`Respondendo ao comentário…`,commentPlaceholder:`Adicionar um comentário… (use @ para mencionar)`,send:`Enviar`,presentUserCount:`{{count}} usuários presentes`,presentUserCountOne:`{{count}} usuário presente`,moreUserCount:`mais {{count}} usuários`,moreUserCountOne:`mais {{count}} usuário`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`ativo`,statusIdle:`inativo`,statusAway:`ausente`},wizard:{missingRequired:`Preencha os campos obrigatórios: {{fields}}`},appManagement:{title:`Aplicativos`,subtitle:`Gerencie todos os aplicativos configurados`,newApp:`Novo aplicativo`,searchLabel:`Pesquisar aplicativos`,searchPlaceholder:`Pesquisar aplicativos…`,selectedCount:`{{n}} selecionados`,bulkEnable:`Habilitar`,bulkDisable:`Desabilitar`,selectAll:`Selecionar tudo ({{n}})`,empty:`Nenhum aplicativo encontrado.`,defaultBadge:`Padrão`,active:`Ativo`,inactive:`Inativo`,selectApp:`Selecionar {{name}}`,openApp:`Abrir aplicativo`,openAppNamed:`Abrir {{name}}`,editApp:`Editar aplicativo`,editAppNamed:`Editar {{name}}`,editWithAi:`Editar com IA`,editWithAiNamed:`Editar {{name}} com IA`,enableApp:`Habilitar aplicativo`,disableApp:`Desabilitar aplicativo`,enableAppNamed:`Habilitar {{name}}`,disableAppNamed:`Desabilitar {{name}}`,setDefault:`Definir como padrão`,setDefaultNamed:`Definir {{name}} como padrão`,deleteApp:`Excluir aplicativo`,deleteAppNamed:`Excluir {{name}}`,confirmDelete:`Clique novamente para confirmar a exclusão`,confirmDeleteNamed:`Confirmar a exclusão de {{name}}`,toast:{noClient:`Não é possível acessar o serviço de metadados`,unknownError:`erro desconhecido`,appEnabled:`{{name}} habilitado`,appDisabled:`{{name}} desabilitado`,toggleFailed:`Falha ao alterar o status do aplicativo: {{reason}}`,setDefaultDone:`{{name}} definido como padrão`,setDefaultFailed:`Falha ao definir o aplicativo padrão: {{reason}}`,appDeleted:`{{name}} excluído`,deleteFailed:`Falha ao excluir o aplicativo: {{reason}}`,bulkEnabled:`{{n}} aplicativos habilitados`,bulkDisabled:`{{n}} aplicativos desabilitados`,bulkFailed:`Falha em {{n}}: {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:`; `,bulkOperationFailed:`Falha na operação em massa: {{reason}}`}}},ru:{impersonation:{banner:{message:`Вы работаете от имени {{user}} — все действия записываются на этого пользователя.`,startedBy:`Начато администратором {{admin}}.`,stop:`Прекратить работу от чужого имени`,stopping:`Завершение…`,stopFailed:`Не удалось прекратить работу от чужого имени: {{reason}}`,notRestored:`Сервер принял запрос, но не восстановил сеанс администратора — вы всё ещё работаете от имени {{user}}. Выйдите и войдите снова, чтобы завершить.`}},capability:{label:{manage_users:`Управление пользователями`,manage_org_users:`Управление пользователями организации`,manage_metadata:`Управление метаданными`,manage_platform_settings:`Управление настройками платформы`,setup_access:`Доступ к настройке`,setup_write:`Запись настроек`,studio_access:`Доступ к Studio`},group:{platform:`Платформа`,org:`Организация`,other:`Другое`}},perm:{facet:{none:`Нет`,more:`+{{count}} ещё`,objects:`Объектов: {{count}}`,objects_one:`Объектов: {{count}}`,fields:`Правил для полей: {{count}}`,fields_one:`Правил для полей: {{count}}`,rls:`Политик RLS: {{count}}`,rls_one:`Политик RLS: {{count}}`,tabs:`Правил для вкладок: {{count}}`,tabs_one:`Правил для вкладок: {{count}}`,adminScope:`Делегированное администрирование настроено`,designInStudio:`Дизайн в Studio →`,designInStudioHint:`Дизайн в Studio`}},lookup:{recentlyUsed:`Недавние`,allResults:`Все результаты`,createNew:`Создать`,createNamed:`Создать «{{name}}»`,showingResults:`Показано {{shown}} из {{total}} результатов`,showAllResults:`Показать все результаты ({{count}})`,selectedBadge:`Выбрано`,browseAll:`Просмотреть все записи`,remove:`Удалить {{label}}`,selectFirst:`Сначала выберите {{fields}}`,selectRecord:`Выбрать запись`,recordCount:`Записей: {{count}}`,recordCountOne:`1 запись`,pageOf:`Страница {{current}} из {{total}}`,filters:`Фильтры`,clear:`Очистить`,yes:`Да`,filterPlaceholder:`Фильтр: {{label}}`,prevPage:`Предыдущая страница`,nextPage:`Следующая страница`,jumpToPage:`Перейти к странице`,retry:`Повторить`,loading:`Загрузка…`,noOptions:`Варианты не найдены`,noRecords:`Записи не найдены`},common:{addToFavorites:`Добавить в избранное`,removeFromFavorites:`Удалить из избранного`,loading:`Загрузка…`,save:`Сохранить`,cancel:`Отмена`,delete:`Удалить`,edit:`Редактировать`,create:`Создать`,filter:`Фильтр`,reset:`Сбросить`,confirm:`Подтвердить`,close:`Закрыть`,back:`Назад`,next:`Далее`,previous:`Назад`,submit:`Отправить`,refresh:`Обновить`,export:`Экспорт`,import:`Импорт`,yes:`Да`,no:`Нет`,ok:`ОК`,actions:`Действия`,more:`Ещё`,selectAll:`Выбрать все`,clearAll:`Очистить все`,noData:`Нет данных`,noResults:`Результаты не найдены`,required:`Обязательно`,optional:`Необязательно`,selectOption:`Выберите вариант`,select:`Выбрать…`,openChat:`Открыть чат`,closeChat:`Закрыть чат`,closePanel:`Закрыть панель`,resizeDrawer:`Изменить ширину панели`,itemCount:`{{count}} элементов`,itemCountOne:`{{count}} элемент`,toggleSidebar:`Переключить боковую панель`,package:`Пакет`,done:`Готово`,editInStudio:`Редактировать в Studio`,record:`Запись`,retry:`Повторить`,printDialogHint:`Открывает диалог печати браузера (это не экспорт в PDF)`},actions:{decisionOutput:{help:`Передаётся в поток как результат решения.`,helpMultiValue:`Передаётся в поток как результат решения. Несколько значений разделяйте запятыми.`},resultDialog:{defaultTitle:`Сохраните это значение сейчас`,acknowledge:`Я сохранил(а) это`,copyAll:`Копировать всё`}},validation:{required:`Поле {{field}} обязательно для заполнения`,minLength:`{{field}} должно содержать не менее {{min}} символов`,maxLength:`{{field}} должно содержать не более {{max}} символов`,min:`{{field}} должно быть не менее {{min}}`,max:`{{field}} должно быть не более {{max}}`,email:`Пожалуйста, введите корректный адрес электронной почты`,url:`Пожалуйста, введите корректный URL`,pattern:`Неверный формат поля {{field}}`,formInvalid:`Проверьте выделенные поля: {{fields}}`,formInvalidJoiner:`, `,unique:`{{field}} должно быть уникальным`,type:`{{field}} должно быть допустимым {{type}}`},form:{noPermissionToSave:`У вас нет прав на сохранение этой записи.`,submitFailed:`Не удалось сохранить. Попробуйте ещё раз.`,discardTitle:`Отменить изменения?`,discardMessage:`Есть несохранённые изменения. Если закрыть форму сейчас, правки будут потеряны.`,dialogDescriptionFallback:`Заполните поля формы, затем отправьте или отмените.`,keepEditing:`Продолжить редактирование`,discard:`Отменить`,conflictTitle:`Конфликт сохранения`,conflictMessage:`Пока вы редактировали, эту запись изменил другой пользователь. Перезапись заменит его изменения вашими.`,conflictLatestVersion:`Его сохранение: {{time}}`,conflictOverwrite:`Перезаписать`,addItem:`Добавить элемент`,removeItem:`Удалить элемент`,fieldRequired:`Это поле обязательно`,invalidFormat:`Неверный формат`,saveSuccess:`Успешно сохранено`,saveError:`Ошибка сохранения`,unsavedChanges:`У вас есть несохранённые изменения. Вы уверены, что хотите покинуть страницу?`,stepOf:`Шаг {{current}} из {{total}}`,createTitle:`Создать {{object}}`,editTitle:`Редактировать {{object}}`,viewTitle:`Просмотреть {{object}}`,createTargetOrg:`Создаётся в {{org}}`,saveRecord:`Сохранить запись`,create:`Создать`,update:`Обновить`,createSuccess:`{{object}} создан`,updateSuccess:`{{object}} обновлён`,deleteSuccess:`{{object}} удалён`,fullscreen:{title:`Изменить текст`,description:`Измените полное текстовое значение, затем сохраните или отмените изменения.`,done:`Готово`,toggle:`Редактировать {{label}} в полноэкранном режиме`,textFallback:`текст`}},fields:{image:{upload:`Загрузить изображение`,addMore:`Добавить ещё изображения`,uploading:`Загрузка…`,imageAlt:`Изображение {{index}}`,crop:`Обрезать изображение {{index}}`,remove:`Удалить изображение {{index}}`,enlarge:`Увеличить {{name}}`,preview:`Предпросмотр изображения`,previous:`Предыдущее изображение`,next:`Следующее изображение`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`Просрочено на {{count}} дн.`},file:{dragDropHere:`Перетащите файлы сюда`,dropFilesHere:`Отпустите файлы здесь`,browseHint:`или нажмите для выбора`,browseHintCamera:`или нажмите для выбора • используйте кнопку камеры ниже`,takePhoto:`Сделать фото`,takeSelfie:`Сделать селфи`,cameraCapture:`Съёмка камерой`,uploading:`Загрузка…`,uploadingPct:`Загрузка… ({{pct}} %)`,fileFallback:`Файл`,upload:`Загрузить`,remove:`Удалить {{name}}`,exceedsMaxSize:`«{{name}}» превышает максимальный размер ({{max}} МБ)`,uploadFailed:`Не удалось загрузить «{{name}}»: {{error}}`},richText:{format:`Формат: {{format}}`,basicEditorHint:`Редактор форматированного текста (базовый)`,placeholder:`Введите текст…`},options:{empty:`Нет доступных вариантов`,selectFirst:`Сначала выберите {{fields}}`},objectRef:{loading:`Загрузка объектов…`,placeholder:`Выберите объект`,search:`Поиск объектов…`,empty:`Объекты не найдены`},recipient:{selectTypeFirst:`Сначала выберите тип получателя.`,loading:`Загрузка…`,search:`Поиск…`,empty:`Совпадений нет`,select:`Выберите получателя`,selectUser:`Выберите пользователя`,selectTeam:`Выберите команду`,selectBusinessUnit:`Выберите бизнес-подразделение`,selectPosition:`Выберите должность`,selectUnitAndSubordinates:`Выберите бизнес-подразделение`},filterCondition:{selectObjectFirst:`Сначала выберите объект.`,noCriteria:`Условия не заданы — это правило ничего не предоставляет`,criteriaRequired:`Добавьте хотя бы одно условие. Правило без условий предоставило бы доступ ко всем записям, поэтому его нельзя сохранить.`,invalidJson:`Некорректный JSON — правило не будет соответствовать ни одной записи, пока это не исправлено.`,jsonOnly:`Этот критерий можно редактировать только как JSON`,editAsJson:`Редактировать как JSON`,useVisualBuilder:`Использовать визуальный конструктор`},tags:{placeholder:`Введите и нажмите Enter, чтобы добавить…`},textarea:{characterCount:`Количество символов: {{count}} из {{max}}`,charactersRemaining:`Осталось символов: {{count}}`}},table:{rowsPerPage:`Строк на странице`,showing:`Показано с {{from}} по {{to}} из {{total}}`,noRows:`Нет строк для отображения`,sortAsc:`Сортировка по возрастанию`,sortDesc:`Сортировка по убыванию`,filterColumn:`Фильтр по {{column}}`,columns:`Столбцы`,exportCSV:`Экспорт в CSV`,exportExcel:`Экспорт в Excel`,selectRow:`Выбрать строку`,selectAllRows:`Выбрать все строки`,expandRow:`Развернуть строку`,collapseRow:`Свернуть строку`,hideColumn:`Скрыть столбец`,freezeColumn:`Закрепить столбец`,unfreezeColumn:`Открепить столбец`,pageInfo:`Страница {{current}} из {{total}}`,totalRecords:`Всего {{count}}`,noResults:`Результатов нет`,noResultsHint:`Попробуйте изменить фильтры или поисковые запросы.`,cancelAll:`Отменить всё`,saveAll:`Сохранить всё ({{count}})`,addRecord:`Добавить запись`,open:`Открыть`,search:`Поиск…`,modified:`{{count}} строк изменено`,saveFailed:`Не удалось сохранить`,selected:`{{count}} выбрано`,edit:`Редактировать`,delete:`Удалить`},grid:{bulkSelected:`Выбрано: {{count}}`,bulkSelectedAllMatches:`Выбрано: {{count}} (все совпадения)`,bulkClear:`Снять выделение`,bulkAllOnPage:`Выбраны все {{count}} на этой странице.`,bulkSelectAllMatching:`Выбрать все совпадения ({{count}})`,bulkAllMatchingSelected:`Выбраны все подходящие записи ({{count}}).`,bulk:{confirmDefault:`Будет применено к записям: {{count}}.`,overLimit:`Выбрано ({{count}}) больше лимита действия ({{limit}}). Уменьшите выбор, чтобы продолжить.`,affectedRecords:`Затрагиваемые записи ({{count}}):`,skippedIneligible:`{{count}} из выбранных записей не подходят для этого действия и будут пропущены.`,rowFallback:`Строка {{index}}`,andMore:`… и ещё {{count}}`,processed:`Обработано {{count}} / {{total}}`,processedFailed:` · с ошибкой: {{count}}`,undonePrefix:`Отменено — `,succeeded:`Успешно {{count}} / {{total}}`,resultFailed:` · Ошибок {{count}}`,retry:`Повторить`,downloadErrorCsv:`Скачать CSV с ошибками`,cancel:`Отмена`,back:`Назад`,next:`Далее`,run:`Выполнить`,running:`Выполняется…`,undo:`Отменить`,undoing:`Отмена…`,done:`Готово`,selectPlaceholder:`Выберите…`,loading:`Загрузка…`},actions:`Действия`,edit:`Редактировать`,delete:`Удалить`,export:`Экспорт`,exportAs:`Экспорт в {{format}}`,loading:`Загрузка таблицы…`,errorLoading:`Ошибка загрузки таблицы`,pullToRefresh:`Потяните для обновления`,refreshing:`Обновление…`,openRecord:`Открыть запись`,rowHeight:`Высота строки: {{mode}}`,openMenu:`Открыть меню`,empty:`Пусто`,yes:`Да`,no:`Нет`,systemFields:`Система`,summary:{pattern:`{{label}}: {{value}}`,count:`Количество`,countEmpty:`Пустые`,countFilled:`Заполненные`,countUnique:`Уникальные`,percentEmpty:`Пустые`,percentFilled:`Заполненные`,sum:`Сумма`,avg:`Среднее`,min:`Мин.`,max:`Макс.`},toolbar:{densityMode:`Плотность`,densityCompact:`Компактный`,densityComfortable:`Обычный`,densitySpacious:`Просторный`,densityCycleHint:`{{label}} (нажмите для изменения)`,densityCycleShortHint:`Нажмите для изменения`},import:{downloadTemplate:`Скачать шаблон`,downloadTemplateHint:`Получите CSV с нужными столбцами (обязательные поля отмечены *).`,templateFileName:`{{object}}-import-template`,autoMatched:`Сопоставлено автоматически`,autoMatchedSummary:`Автоматически сопоставлено столбцов: {{count}} — проверьте и скорректируйте ниже.`,confidence:{high:`Высокая точность`,medium:`Средняя точность`,low:`Низкая точность`},asyncQueued:`В очереди — подготовка импорта…`,asyncProcessing:`Импортировано {{processed}} из {{total}} строк… {{progress}} %`,asyncLargeHint:`Файл большой, поэтому импорт выполнится в фоновом режиме.`,largeSampleNotice:`Предпросмотр первых {{shown}} из {{total}} строк.`,cancelImport:`Отменить импорт`,importCancelled:`Импорт отменён`,resultsTruncated:`Показаны результаты первых {{count}} строк (из {{total}}).`,createdCount:`Создано: {{count}}`,updatedCount:`Обновлено: {{count}}`,downloadFailed:`Скачать строки с ошибками`,options:`Параметры импорта`,writeMode:`Если строка совпадает с существующей записью`,writeModeOpt:{insert:`Всегда создавать новую`,update:`Обновлять существующую (пропускать без совпадения)`,upsert:`Обновлять при совпадении, иначе создавать`},matchFields:`Сопоставлять по`,matchFieldsPlaceholder:`Выберите поля для сопоставления…`,matchFieldsHint:`Строки сопоставляются с существующими записями по этим полям.`,needMatchFields:`Выберите хотя бы одно поле для сопоставления.`,matchOnlyField:`(только сопоставление)`,optCreateOptions:`Сохранять неизвестные значения списка`,optRunAutomations:`Выполнять автоматизации и триггеры`,optTreatHistorical:`Импортировать как исторические данные`,optTreatHistoricalHint:`(импортирует завершённые записи как есть — пропускает проверки конечного автомата и сохраняет исходные отметки времени и автора вместо текущих)`,optSkipBlankKey:`Пропускать строки с пустым значением сопоставления`,optBackground:`Импортировать в фоновом режиме`,optBackgroundHint:`(выполняется как отменяемая задача)`,validate:`Проверить данные`,validating:`Проверка…`,validateHint:`Проверить каждую строку на сервере перед импортом.`,validatePassed:`Все строки ({{ok}}) корректны.`,validateFailed:`Корректных: {{ok}}, с ошибками: {{errors}}.`,errorRowPrefix:`Строка {{row}}: `,referenceNotFound:`Нет записи, соответствующей «{{value}}»`,referenceAmbiguous:`«{{value}}» соответствует нескольким записям — используйте уникальное значение или идентификатор записи`,invalidBoolean:`«{{value}}» не является допустимым значением true/false`,invalidNumber:`«{{value}}» не является допустимым числом`,invalidDate:`«{{value}}» не является допустимой датой`,invalidOption:`«{{value}}» не входит в число допустимых вариантов`,requiredValue:`Это поле обязательно`,matchAmbiguous:`Соответствует нескольким существующим записям — используйте уникальное значение или идентификатор записи`,history:`История`,historyBack:`Назад к импорту`,historyDescription:`Недавние импорты для этого объекта.`,historyHint:`Фоновые задачи импорта, сначала новые.`,historyRefresh:`Обновить`,historyLoading:`Загрузка…`,historyEmpty:`Импортов пока нет.`,historyUnsupported:`Для этого источника данных история импорта недоступна.`,historyColStatus:`Статус`,historyColRows:`Строк`,historyColResult:`Результат`,historyColTime:`Когда`,errorCount:`Ошибок: {{count}}`,undoImport:`Отменить импорт`,undoing:`Отмена…`,undoConfirm:`Отменить этот импорт? Созданные им записи будут удалены, а обновлённые — восстановлены к прежним значениям.`,reverted:`Отменён`,jobStatus:{pending:`Ожидает`,running:`Выполняется`,succeeded:`Успешно`,failed:`Ошибка`,cancelled:`Отменено`},legacyReferenceBlocked:`Импорт заблокирован: {{fields}} — поля связи, которым нужен серверный маршрут импорта для преобразования имён в идентификаторы записей, а это подключение его не поддерживает. Импорт в виде обычного текста повредит данные. Обновите бэкенд/клиент либо снимите сопоставление этих столбцов и импортируйте их отдельно.`,missingRequiredHint:`Продолжение невозможно — не сопоставлены обязательные поля: {{fields}}. Добавьте соответствующий столбец в файл или вернитесь и загрузите файл, где он есть.`,legacyFallbackNotice:`Импортировано через режим совместимости: это подключение не поддерживает серверный маршрут импорта, поэтому значения сохранены как текст без приведения типов на сервере. Обновите бэкенд/клиент для полноценного импорта (приведение типов и поиск связей).`,title:`Импорт {{object}}`,notAllowed:`Этот объект не открыт для импорта.`,stepUpload:`Загрузка`,stepMapping:`Сопоставление`,stepPreview:`Предпросмотр`,uploadDescription:`Загрузите файл CSV или Excel либо вставьте данные из таблицы, чтобы начать.`,mappingDescription:`Сопоставьте столбцы с полями объекта.`,previewDescription:`Проверьте данные перед импортом.`,dragDrop:`Перетащите файл CSV или Excel сюда или нажмите для выбора`,browseFiles:`Обзор файлов`,parsing:`Обработка…`,pasteHint:`или вставьте (Ctrl/⌘+V) строки, скопированные из Excel или Google Таблиц`,legacyXls:`Старые файлы .xls не поддерживаются — сохраните их заново в формате .xlsx.`,unsupportedFile:`Неподдерживаемый тип файла. Используйте CSV, TSV или Excel (.xlsx).`,parseFailed:`Не удалось прочитать этот файл. Проверьте формат и повторите попытку.`,fileNeedsHeader:`Файл должен содержать строку заголовка и хотя бы одну строку данных.`,mappingTemplate:`Шаблон сопоставления:`,chooseTemplate:`Выбрать шаблон…`,noSavedTemplates:`Нет сохранённых шаблонов`,noneOption:`— Нет —`,saveCurrent:`Сохранить текущий`,templateName:`Название шаблона`,save:`Сохранить`,deleteTemplate:`Удалить шаблон`,savedMapping:`Сохранённое сопоставление:`,chooseSavedMapping:`Выбрать сохранённое сопоставление…`,manualMapping:`— Сопоставить столбцы вручную —`,transform:`Преобразование`,savedMappingHint:`Сопоставление «{{name}}» применяет на сервере переименование + преобразования + приведение типов. Сопоставление столбцов доступно только для чтения.`,savedMappingPreviewNote:`В предпросмотре показаны исходные столбцы; при импорте сопоставление «{{name}}» применяет на сервере переименование, преобразования и приведение типов.`,csvColumn:`Столбец`,mapsTo:`Сопоставляется с`,typeMismatch:`Похоже на {{type}}`,type:{number:`Число`,boolean:`Логический`,date:`Дата`,datetime:`Дата и время`,text:`Текст`},status:`Статус`,skipColumn:`Пропустить столбец`,skip:`— Пропустить —`,mapped:`Сопоставлено`,skipped:`Пропущено`,rowsWithErrors:`{{count}} строк с ошибками`,rowsCorrected:`{{count}} строк исправлено`,clickToFix:`— нажмите на выделенную ячейку для редактирования.`,showingRows:`Отображено {{shown}} из {{total}} строк`,importing:`Импорт… {{progress}}%`,importComplete:`Импорт завершён`,imported:`{{count}} импортировано`,skippedCount:`{{count}} пропущено`,moreErrors:`…ещё {{count}} ошибок`,cancel:`Отмена`,back:`Назад`,next:`Далее`,close:`Закрыть`,importNRows:`Импортировать {{count}} строк`,importingProgress:`Импортируется…`,requiredMark:`*`,required:`Обязательно`,invalidType:`Неверный {{type}}`}},calendar:{today:`Сегодня`,month:`Месяц`,week:`Неделя`,day:`День`,agenda:`Расписание`,allDay:`Весь день`,noEvents:`Нет событий`,newEvent:`Новое событие`,moreEvents:`+{{count}} ещё`},list:{firstRunTitle:`Здесь пока пусто`,firstRunMessage:`Создайте первую запись, чтобы начать.`,noMatches:`Подходящих записей нет`,noMatchesMessage:`Ни одна запись не соответствует текущим фильтрам или поиску. Измените или сбросьте их.`,loadErrorTitle:`Не удалось загрузить записи`,loadErrorMessage:`При загрузке данных произошла ошибка. Проверьте соединение и попробуйте снова.`,loadErrorForbiddenTitle:`Нет доступа`,loadErrorForbiddenMessage:`У вас нет прав на просмотр этих записей. Обратитесь к администратору, если считаете, что доступ вам нужен.`,loadErrorUnauthorizedTitle:`Требуется вход`,loadErrorUnauthorizedMessage:`Сессия истекла или вы вышли из системы. Войдите снова, чтобы просмотреть эти записи.`,loadErrorRejectedTitle:`Запрос этого представления отклонён`,loadErrorRejectedMessage:`Сервер не смог обработать фильтр или параметры запроса этого представления. Обычно помогает сброс фильтров; если представление сохранено в таком виде, исправить его должен администратор.`,loadErrorApiDisabledTitle:`Этот объект недоступен через API`,loadErrorApiDisabledMessage:`Страница не может загрузить записи, потому что объект не открыт через API. Это настройка самого объекта, а не права доступа — администратор должен включить доступ по API, чтобы эта страница заработала.`,retry:`Повторить`,managedBy:{system:{title:`Здесь пока пусто`,message:`Записи появляются автоматически при выполнении исходного действия (например, «Отправить на согласование», «Поделиться», «Пригласить»). Запустите одно из них на исходной записи, чтобы создать строку.`},appendOnly:{title:`События не зафиксированы`,message:`Это неизменяемый журнал аудита. Строки записывает платформа при наступлении событий — историю можно выгрузить, но создавать записи отсюда нельзя.`},betterAuth:{title:`Записей identity нет`,message:`Эти записи создаёт поставщик аутентификации — при входе, подготовке учётных записей и в процессах безопасности, — а не добавляются здесь вручную.`},betterAuthUser:{title:`Пользователей пока нет`,message:`Учётные записи создаёт поставщик аутентификации, а не эта страница. Пригласите коллег в организацию — они появятся автоматически при первом входе (JIT-подготовка через SSO). Конечные пользователи приложения добавляются, когда регистрируются в нём сами.`},betterAuthTeam:{title:`Команд пока нет`,message:`Команды объединяют участников внутри организации. Создайте команду кнопкой «Создать команду» либо они появятся через процессы подготовки организаций и SSO вашего поставщика аутентификации.`}},refresh:`Обновить`,loading:`Загрузка записей…`,recordCount:`{{count}} записей`,recordCountOne:`{{count}} запись`,addRecord:`Добавить запись`,tabs:`Вкладки`,allRecords:`Все записи`,search:`Поиск`,filter:`Фильтр`,filterRecords:`Фильтр записей`,sort:`Сортировка`,sortRecords:`Сортировка записей`,sortByIdSuffix:`(по ID)`,sortRelationalHint:`Столбцы, ссылающиеся на другую запись, здесь не показаны: их можно сортировать только по сохранённому ID, а не по имени, которое видно в ячейке. Чтобы сортировать по этому имени, денормализуйте его в этот объект — как сохраняемое поле, которое записывается при изменении источника, — и сортируйте по нему. Не поле-формула: она виртуальна, столбец для неё не хранится, и сервер отказывается сортировать по ней.`,resetSortToDefault:`Сбросить к сортировке представления`,group:`Группировка`,groupBy:`Группировать по`,export:`Экспорт`,exportAs:`Экспорт в {{format}}`,color:`Цвет`,rowColor:`Цвет строки`,colorByField:`Окраска по полю`,clear:`Очистить`,none:`Нет`,hideFields:`Скрыть поля`,noItems:`Элементы не найдены`,noItemsMessage:`Нет записей для отображения. Попробуйте изменить фильтры или добавить новые данные.`,showAll:`Показать всё`,pullToRefresh:`Потяните для обновления`,refreshing:`Обновление…`,share:`Поделиться`,print:`Печать`,hideFieldsTitle:`Скрыть поля`,dataLimitReached:`Отображаются первые {{limit}} записей. Возможно, есть ещё данные.`,viewSettings:`Настройки представления`,viewSettingsHint:`Группировка, цвет, плотность и отображаемые поля.`,addGroup:`Добавить поле группировки`,collapsedByDefault:`Свёрнуто по умолчанию`,removeGroup:`Удалить`,inlineEditShort:`Встроенное редактирование`,inlineEditLabel:`Редактировать записи в таблице (щёлкните ячейку для редактирования)`,recordEditingTitle:`Редактирование записей`},managedByBadge:{systemWritable:{short:`Схема платформы`,title:`Определено платформой, доступно администратору для записи`,body:`Схему этого объекта задаёт платформа, но строки вы создаёте и редактируете здесь сами. Кто именно может писать, определяют делегированное администрирование и безопасность на уровне записей, а не этот значок.`},config:{short:`Конфигурация`,title:`Конфигурация администратора`,body:`Эти строки определяют поведение платформы во время выполнения. Создавайте их здесь; создаваемые данные времени выполнения хранятся в отдельной таблице.`},system:{short:`Управляется системой`,title:`Управляется платформой`,body:`Строки создаются автоматически при выполнении действий над исходной записью. Список — это панель мониторинга только для чтения; действия на уровне строк (Утвердить, Отозвать, Отправить повторно и т. д.) находятся у каждой строки.`},appendOnly:{short:`Только чтение · Журнал аудита`,title:`Историческая запись только для чтения`,body:`Неизменяемый журнал аудита. Строки нельзя создавать, изменять или удалять из интерфейса — платформа записывает их при наступлении событий. Используйте экспорт для проверки соответствия.`},betterAuth:{short:`Идентификация`,title:`Управляется поставщиком удостоверений`,body:`Схема этого объекта принадлежит {{provider}}. Прямые изменения обходят хеширование паролей, проверку сессий, двухфакторные проверки и хуки аудита. Управляйте этими записями через процессы входа, приглашения и безопасности вашего поставщика аутентификации.`}},kanban:{uncategorized:`Без категории`,columns:`колонок`,addCard:`Добавить карточку`,addColumn:`Добавить колонку`,moveCard:`Переместить карточку`,deleteCard:`Удалить карточку`,deleteColumn:`Удалить колонку`,noCards:`Нет карточек`,cardTitlePlaceholder:`Введите название карточки…`,requiredFieldsTitle:`Заполните обязательные поля`,requiredFieldsDescription:`Это перемещение делает поля ниже обязательными. Заполните их, чтобы продолжить.`},timeline:{bucket:{overdue:`Просрочено`,today:`Сегодня`,tomorrow:`Завтра`,thisWeek:`На этой неделе`,nextWeek:`На следующей неделе`,later:`Позже`,noDate:`Без даты`,unassigned:`Не назначено`},scale:{week:`Неделя {{n}}`,quarter:`{{quarter}} кв. {{year}}`},gantt:{rowLabel:`Элементы`}},gantt:{viewMode:{day:`День`,week:`Неделя`,month:`Месяц`,quarter:`Квартал`,year:`Год`},row:{expand:`Развернуть`,collapse:`Свернуть`,open:`Открыть подробности`},aria:{taskList:`Список задач`},tooltip:{days:`дн`},menu:{view:`Показать подробности`,edit:`Редактировать на месте`,delete:`Удалить`,addPredecessor:`Добавить предшественника…`,addSuccessor:`Добавить последователя…`,removeDependency:`Удалить зависимость`,noCandidates:`Нет доступных задач`,searchTasks:`Поиск задач…`},delete:{title:`Удалить эту задачу?`,body:`«{{title}}» будет удалена безвозвратно. Это действие нельзя отменить.`,cancel:`Отмена`,confirm:`Удалить`,deleting:`Удаление…`},drawer:{fallbackTitle:`Подробности задачи`},linkType:{fs:`Окончание → Начало`,ss:`Начало → Начало`,ff:`Окончание → Окончание`,sf:`Начало → Окончание`},linkEnd:{start:`Начало`,end:`Конец`},link:{rejected:{self:`Задача не может зависеть от самой себя.`,locked:`Эта строка заблокирована и не может принять новую зависимость.`,group:`Сводная строка не может быть целью зависимости — свяжите одну из её задач.`,cycle:`Эта связь создаст циклическую зависимость.`}},conflict:{title:`Конфликт расписания`,body:`Это перемещение противоречит ограничениям зависимостей. Автоматически перепланировать затронутые задачи ({{count}})?`,confirm:`Перепланировать автоматически`,cancel:`Оставить как есть`},autoScheduleDlg:{title:`Автопланирование`,body:`Сдвинуть {{count}} задач(и) на более поздний срок, чтобы соблюсти связи зависимостей?`,skipped:`{{count}} заблокированных задач(и) также нарушают связи и были пропущены.`,confirm:`Применить`,cancel:`Отмена`,none:`Все зависимости соблюдены — перепланировать нечего.`},resource:{header:`Ресурс`,peak:`Пик`,over:`перегружен`,empty:`Нет задач для распределения.`},quickFilter:{all:`Все`,clear:`Очистить фильтры`,empty:`Нет вариантов`,resultSummary:`Показано {shown} / {total} задач`},readOnly:`Только чтение`,readOnlyHint:`Редактирование в этом представлении отключено.`,lockedHint:`Нет прав на редактирование`,writeFailed:`Не удалось сохранить — изменение отменено`,column:{taskName:`Название задачи`,start:`Начало`,end:`Конец`},toolbar:{thisWeek:`Эта неделя`,thisMonth:`Этот месяц`,viewMode:`Детализация шкалы времени`,enterFullscreen:`Полноэкранный режим`,exitFullscreen:`Выйти из полноэкранного режима`,criticalPath:`Выделить критический путь`,autoSchedule:`Автоматически планировать зависимости`,exportPng:`Экспортировать в PNG`,exportPdf:`Экспортировать в PDF`,saveLayout:`Сохранить компоновку`,refresh:`Обновить`,undo:`Отменить`,redo:`Повторить`,prevPeriod:`Предыдущий период`,nextPeriod:`Следующий период`,zoomIn:`Увеличить`,zoomOut:`Уменьшить`,jumpToToday:`Перейти к сегодня`,today:`Сегодня`,showTaskList:`Показать список задач`,hideTaskList:`Скрыть список задач`}},view:{editViewConfig:`Изменить настройки представления`,rename:`Переименовать`,duplicateView:`Дублировать представление`,shareView:`Поделиться представлением`,setAsDefault:`Установить по умолчанию`,pinView:`Закрепить представление`,unpinView:`Открепить представление`,changeViewType:`Изменить тип представления`,deleteView:`Удалить представление`,addView:`Добавить представление`,unsavedChanges:`Несохранённые изменения`,saveAsView:`Сохранить как представление`,moreViews:`ещё {{count}}`,activeFilters:`Фильтры активны`,activeSort:`Сортировка активна`,manageViews:`Управление представлениями`,manageAllViews:`Управление всеми представлениями…`,manageViewsDescription:`Переупорядочьте, переименуйте, закрепите или удалите все представления этого объекта.`,searchViews:`Поиск представлений`,addNewView:`Добавить новое представление`,done:`Готово`,noViewsFound:`Представления не найдены.`,dragToReorder:`Перетащите для изменения порядка`,defaultView:`Представление по умолчанию`,defaultBadge:`по умолчанию`,tabActionsFor:`Действия с представлением {{name}}`,readonlyAriaLabel:`Представление только для чтения`,readonlyTooltip:`Системное представление — определено в коде, только для чтения.`},designer:{undo:`Отменить`,redo:`Повторить`},detail:{editInlineHint:`Дважды щёлкните для редактирования`,systemActor:`Система`,unknownUser:`Неизвестно`,created:`Создано`,updated:`Обновлено`,back:`Назад`,edit:`Редактировать`,editInline:`Редактировать`,save:`Сохранить`,saveChanges:`Сохранить изменения`,editFieldsInline:`Редактировать поля`,share:`Поделиться`,duplicate:`Дублировать`,export:`Экспорт`,viewHistory:`Просмотр истории`,delete:`Удалить`,moreActions:`Другие действия`,addReaction:`Добавить реакцию`,pageHeaderActions:`Действия в заголовке страницы`,emojiPicker:`Выбор эмодзи`,reactionCount:`{{emoji}} {{count}} реакций`,reactionCountOne:`{{emoji}} {{count}} реакция`,recordDetail:`Сведения о записи`,recordDetailWithLabel:`Сведения: {{label}}`,openAsFullPage:`Открыть на всю страницу`,recordDetailOverlay:`Наложение со сведениями о записи для {{title}}.`,addToFavorites:`Добавить в избранное`,removeFromFavorites:`Удалить из избранного`,previousRecord:`Предыдущая запись`,nextRecord:`Следующая запись`,recordOf:`{{current}} из {{total}}`,recordNotFound:`Запись не найдена`,recordNotFoundDescription:`Запись, которую вы ищете, не существует или была удалена.`,goBack:`Назад`,details:`Детали`,related:`Связанные`,relatedRecords:`{{count}} записей`,relatedRecordOne:`{{count}} запись`,noRelatedRecords:`Связанные записи не найдены`,loading:`Загрузка…`,copyToClipboard:`Копировать в буфер обмена`,copied:`Скопировано!`,deleteConfirmation:`Вы уверены, что хотите удалить эту запись?`,deleted:`Запись удалена`,editRecord:`Редактировать запись`,viewAll:`Показать все`,new:`Создать`,add:`Добавить`,emptyValue:`—`,activity:`Активность`,editRow:`Редактировать`,deleteRow:`Удалить`,deleteRowConfirmation:`Удалить эту запись?`,actions:`Действия`,previousPage:`Назад`,nextPage:`Далее`,pageOf:`Страница {{current}} из {{total}}`,sortBy:`Сортировать по`,filterPlaceholder:`Фильтр…`,highlightFields:`Ключевые поля`,comments:`Комментарии`,searchComments:`Поиск комментариев…`,addCommentPlaceholder:`Добавить комментарий… (Ctrl+Enter для отправки)`,noMatchingComments:`Нет совпадающих комментариев`,noCommentsYet:`Комментариев пока нет`,pinned:`Закреплено`,pin:`Закрепить`,unpin:`Открепить`,justNow:`только что`,minutesAgo:`{{count}} мин. назад`,hoursAgo:`{{count}} ч. назад`,daysAgo:`{{count}} дн. назад`,dropFilesToUpload:`Перетащите файлы сюда или нажмите для загрузки`,attachmentCount:`{{count}} вложение`,attachmentCountPlural:`{{count}} вложений`,removeAttachment:`Удалить вложение`,attachments:`Вложения`,uploadAttachment:`Загрузить`,loadingAttachments:`Загрузка вложений…`,noAttachments:`Вложений пока нет. Загрузите файл, чтобы начать.`,downloadAttachment:`Скачать`,deleteAttachment:`Удалить вложение`,attachmentDeleteDenied:`Удалить это вложение может только загрузивший его пользователь или тот, кто может редактировать эту запись.`,attachmentParentAccessDenied:`У вас нет доступа для прикрепления файлов к этой записи.`,attachmentDownloadDenied:`У вас нет доступа для скачивания этого вложения.`,attachmentAuthRequired:`Войдите в систему, чтобы скачать это вложение.`,attachmentPermissionDenied:`У вас нет разрешения на это действие.`,unifiedDiff:`Единое представление`,sideBySideDiff:`Параллельное представление`,noChanges:`Нет изменений`,previousVersion:`Предыдущая`,currentVersion:`Текущая`,discussion:`Обсуждение`,showDiscussion:`Показать обсуждение ({{count}})`,hideDiscussion:`Скрыть обсуждение`,bold:`Жирный (Ctrl+B)`,italic:`Курсив (Ctrl+I)`,listFormat:`Список`,inlineCode:`Строчный код`,mentionSomeone:`Упомянуть кого-то`,preview:`Предпросмотр`,submitComment:`Отправить (Ctrl+Enter)`,sendComment:`Отправить`,writeComment:`Написать комментарий…`,subscribedTooltip:`Подписаны — нажмите для отписки`,unsubscribedTooltip:`Подписаться на уведомления`,firstRecord:`Первая запись (Home)`,previousRecordKey:`Предыдущая запись (←)`,nextRecordKey:`Следующая запись (→)`,lastRecord:`Последняя запись (End)`,noRecords:`Нет записей`,searchWhileNavigating:`Поиск при навигации`,searchRecords:`Поиск записей…`,allActivity:`Вся активность`,commentsOnly:`Только комментарии`,fieldChangesFilter:`Изменения полей`,tasksOnly:`Только задачи`,leaveCommentPlaceholder:`Оставить комментарий… (Ctrl+Enter для отправки)`,noActivity:`Нет зарегистрированной активности`,loadMore:`Загрузить ещё`,edited:`(изменено)`,via:`через {{source}}`,viewSource:`Показать источник`,replyCount:`{{count}} ответ`,replyCountPlural:`{{count}} ответов`,replyPlaceholder:`Ответить…`,filterActivity:`Фильтр активности`,openDiscussion:`Открыть панель обсуждения`,closeDiscussion:`Закрыть панель обсуждения`,subscribeAriaLabel:`Подписаться на уведомления`,unsubscribeAriaLabel:`Отписаться от уведомлений`,clearSearch:`Очистить поиск`,saving:`Сохранение…`,lockedByApproval:`Заблокировано для согласования`,lockedTooltip:`У этой записи есть ожидающий запрос на согласование; редактирование заблокировано`,writeStrippedTitle:`Сохранено, но часть полей не применена`,writeStrippedReadonly:`Поля только для чтения, поэтому не применены: {{fields}}`,writeStrippedByState:`Поля недоступны для редактирования в текущем состоянии записи, поэтому не применены: {{fields}}`,approvalPendingEditable:`На согласовании · редактирование доступно`,approvalPendingTooltip:`У этой записи есть ожидающий запрос на согласование, но этот шаг всё ещё разрешает редактирование`,approvalProgress:`Согласования — {{got}} из {{need}}`,approvalProgressGroups:`Подписи — {{got}} из {{need}} групп`,approvalProgressLabel:`Ход согласования`,approvalsPanelTitle:`Согласования`,cancelApproval:`Отменить согласование`,cancelApprovalInFlight:`Отмена…`,cancelApprovalTooltip:`Отмените ожидающий запрос на согласование, чтобы разблокировать запись`,cancelApprovalTooltipUnlocked:`Отменить ожидающий запрос на согласование`,cancelApprovalFailed:`Не удалось отменить согласование`,cancelApprovalUnavailable:`Отмена согласований не поддерживается этим источником данных`,linkCopied:`Ссылка скопирована в буфер обмена`,linkCopyFailed:`Не удалось скопировать ссылку`,cancel:`Отмена`,cancelEdit:`Отменить изменения`,sectionMoreDetails:`Подробнее`,concurrentUpdateTitle:`Эта запись была изменена другим пользователем`,concurrentUpdateDescription:`Другой пользователь сохранил более новую версию {{field}} во время вашего редактирования. Выберите, как разрешить конфликт.`,concurrentUpdateYourEdit:`Ваше изменение`,concurrentUpdateCurrentValue:`Текущее значение`,concurrentUpdateUpdatedBy:`Обновлено пользователем {{name}}`,concurrentUpdateUpdatedAt:`Обновлено {{when}}`,concurrentUpdateReload:`Загрузить текущую версию`,concurrentUpdateOverwrite:`Всё равно перезаписать`,concurrentUpdateCancel:`Отмена`,concurrentUpdateRecordLabel:`этой записи`,openInNewTab:`Открыть в новой вкладке`,history:`История`,historyEmpty:`Истории пока нет`,deleteRowTitle:`Удалить запись`,createdBy:`Создано`,updatedBy:`Обновлено`,showEmptyRelated:`+ Пустых: {{count}}`,showEmptyRelated_one:`+ {{count}} пустое`,showEmptyRelated_other:`+ {{count}} пустых`,copyEmail:`Копировать email`,copyPhone:`Копировать телефон`,copyRecordId:`Копировать ID записи`,showEmptyFields:`Показать {{count}} пустых полей`,hideEmptyFields:`Скрыть пустые поля`,noValue:`Нет значения`},chart:{noData:`Нет данных для графика`,loading:`Загрузка графика…`,nullCategory:`(Не указано)`},map:{searchLocations:`Поиск местоположений…`,locationDetails:`Детали местоположения`,markersCount:`{{count}} маркеров`,invalidCoordinates:`{{count}} запись с отсутствующими или недействительными координатами исключена из карты.`,invalidCoordinatesPlural:`{{count}} записей с отсутствующими или недействительными координатами исключены из карты.`},workflow:{draft:`Черновик`,active:`Активный`,paused:`Приостановлен`,completed:`Завершён`,cancelled:`Отменён`,save:`Сохранить`,publish:`Опубликовать`,addNode:`Добавить узел`,workflowFlow:`Рабочий процесс`,properties:`Свойства`,connections:`Соединения`,quickConnect:`Быстрое соединение`,fromPlaceholder:`От…`,toPlaceholder:`К…`,connect:`Соединить`,label:`Метка`,type:`Тип`,description:`Описание`,assignee:`Ответственный`,assigneeType:`Тип ответственного`,user:`Пользователь`,role:`Роль`,group:`Группа`,expression:`Выражение`,timeoutMinutes:`Тайм-аут (минуты)`,selectNodeToEdit:`Выберите узел для редактирования его свойств`,workflowTitle:`Название рабочего процесса`,newWorkflow:`Новый рабочий процесс`,outConnections:`{{count}} выходов`,start:`Начало`,end:`Конец`,task:`Задача`,userTask:`Задача пользователя`,serviceTask:`Сервисная задача`,scriptTask:`Скриптовая задача`,approval:`Одобрение`,condition:`Условие`,parallelGateway:`Параллельный шлюз`,joinGateway:`Шлюз объединения`,boundaryEvent:`Граничное событие`,delay:`Задержка`,notification:`Уведомление`,webhook:`Webhook`,allowConcurrency:`Разрешить (параллельное выполнение)`,forbidConcurrency:`Запретить (пропустить новые)`,replaceConcurrency:`Заменить (отменить текущие)`,queueConcurrency:`Очередь (выполнить после текущего)`,conditionEvent:`Условие`,manualEvent:`Ручной`,webhookEvent:`Webhook`,timerEvent:`Таймер`,signalEvent:`Сигнал`,versionHistory:`История версий`,importBpmn:`Импорт BPMN`,exportBpmn:`Экспорт BPMN`,undo:`Отменить`,redo:`Повторить`,resetZoom:`Сбросить масштаб`},dashboard:{noRows:`Нет строк`,loading:`Загрузка…`,pickMeasures:`Выберите меры (значения) для этого виджета набора данных.`,datasetUnsupported:`Этот источник данных не поддерживает запросы к наборам данных.`,details:`Подробности`,exportCsv:`Экспорт в CSV`,openInList:`Открыть в списке`,filters:{label:`Фильтры дашборда`,dateRange:`Период`,allTime:`За всё время`,custom:`Произвольный…`,all:`Все`,reset:`Сбросить`,range:{today:`Сегодня`,yesterday:`Вчера`,this_week:`Эта неделя`,last_week:`Прошлая неделя`,this_month:`Этот месяц`,last_month:`Прошлый месяц`,this_quarter:`Этот квартал`,last_quarter:`Прошлый квартал`,this_year:`Этот год`,last_year:`Прошлый год`,last_7_days:`Последние 7 дней`,last_30_days:`Последние 30 дней`,last_90_days:`Последние 90 дней`}},addWidget:`Добавить виджет`,removeWidget:`Удалить виджет`,editLayout:`Редактировать макет`,saveLayout:`Сохранить макет`,resetLayout:`Сбросить макет`,total:`Итого`,noDataAvailable:`Данные недоступны`,noDataSourceFor:`Нет источника данных для`,trend:{vsLastQuarter:`пред. квартал`,vsLastMonth:`пред. месяц`,vsLastWeek:`пред. неделя`,vsLastYear:`пред. год`,vsYesterday:`вчера`,vsPreviousPeriod:`пред. период`}},configPanel:{save:`Сохранить`,discard:`Отменить`,close:`Закрыть`,layout:`Макет`,columns:`Столбцы`,gap:`Отступ`,rowHeight:`Высота строки`,data:`Данные`,refreshInterval:`Интервал обновления`,appearance:`Внешний вид`,title:`Заголовок`,showDescription:`Показать описание`,theme:`Тема`,configuration:`Конфигурация`,general:`Основные`,advanced:`Дополнительно`},appDesigner:{createApp:`Создать приложение`,editApp:`Редактировать приложение`,basicInfo:`Основная информация`,objects:`Объекты`,navigation:`Навигация`,branding:`Брендинг`,appName:`Название приложения`,appTitle:`Заголовок`,appDescription:`Описание`,appIcon:`Значок`,template:`Шаблон`,layout:`Макет`,layoutSidebar:`Боковая панель`,layoutHeader:`Заголовок`,layoutEmpty:`Пусто`,selectObjects:`Выбрать объекты`,searchObjects:`Поиск объектов…`,selectAll:`Выбрать все`,deselectAll:`Снять все`,navBuilder:`Конструктор навигации`,addGroup:`Добавить группу`,addUrl:`Добавить URL`,addSeparator:`Добавить разделитель`,noNavItems:`Элементов навигации пока нет.`,logoUrl:`Logo URL`,primaryColor:`Основной цвет`,faviconUrl:`Favicon URL`,preview:`Предпросмотр`,complete:`Завершить`,snakeCaseHint:`Должно быть в формате snake_case (например, my_app)`,modeEdit:`Редактировать`,modePreview:`Предпросмотр`,modeCode:`Код`,addWidget:`Добавить виджет`,widgetProperties:`Свойства виджета`,dataSource:`Источник данных`,valueField:`Поле значения`,aggregate:`Агрегат`,colorVariant:`Вариант цвета`,addComponent:`Добавить компонент`,componentProperties:`Свойства компонента`,viewType:`Тип представления`,fields:`Поля`,toolbar:`Панель инструментов`,showSearch:`Показать поиск`,showFilters:`Показать фильтры`,showSort:`Показать сортировку`,appearance:`Внешний вид`,rowHeight:`Высота строки`,stripedRows:`Чередующиеся строки`,bordered:`С рамкой`,livePreview:`Предпросмотр в реальном времени`,stepBasicDesc:`Имя, заголовок и макет`,stepObjectsDesc:`Выбрать бизнес-объекты`,stepNavigationDesc:`Построить дерево навигации`,stepBrandingDesc:`Логотип, цвета и фавикон`,noObjectsFound:`Объекты не найдены.`,noNavItemsHint:`Элементов навигации пока нет. Выберите объекты на предыдущем шаге или добавьте вручную.`,separator:`Разделитель`,separatorLabel:`— Разделитель —`,newGroup:`Новая группа`,newLink:`Новая ссылка`,saveDraft:`Сохранить черновик`,cancelConfirmTitle:`Отменить изменения?`,cancelConfirmMessage:`У вас есть несохранённые изменения. Вы уверены, что хотите отменить?`,confirmDiscard:`Отменить`,keepEditing:`Продолжить редактирование`,navNoItems:`Нет элементов навигации. Нажмите кнопки выше, чтобы добавить элементы.`,navNoPreviewItems:`Нет элементов`,navLivePreview:`Предварительный просмотр`,navCollapseGroup:`Свернуть группу`,navExpandGroup:`Развернуть группу`,navAddChild:`Добавить дочерний элемент`,navMoveUp:`Переместить вверх`,navMoveDown:`Переместить вниз`,navRemove:`Удалить`,navObjectPage:`Страница объекта`,navDashboard:`Дашборд`,navPage:`Страница`,navReport:`Отчёт`,navGroup:`Группа`,navUrl:`URL`,navSeparator:`Разделитель`,navTypeObject:`Объект`,navTypeDashboard:`Панель`,navTypePage:`Страница`,navTypeReport:`Отчёт`,navTypeUrl:`URL`,navTypeGroup:`Группа`,navTypeSeparator:`Разделитель`,navTypeAction:`Действие`,navTypeComponent:`Компонент`,navEditIcon:`Редактировать значок`,navToggleVisible:`Переключить видимость`,navHidden:`Скрыто`,navExportSchema:`Экспорт JSON`,navImportSchema:`Импорт JSON`,navExportSuccess:`Схема навигации экспортирована`,navImportSuccess:`Схема навигации импортирована`,navImportError:`Недействительный JSON навигации`,navIconPlaceholder:`Имя значка (например, Users)`,dashboardEditor:`Редактор панели`,noWidgets:`Нет виджетов. Нажмите кнопку выше для добавления.`,widgetLayoutSize:`Размер макета`,widgetWidth:`Ширина`,widgetHeight:`Высота`,dashboardPreview:`Предпросмотр панели`,noWidgetsPreview:`Нет виджетов для предпросмотра`,pageCanvasEditor:`Редактор холста страницы`,emptyPage:`Пустая страница. Нажмите кнопку выше для добавления компонента.`,pagePreview:`Предпросмотр страницы`,noComponentsPreview:`Нет компонентов для предпросмотра`,modePage:`Страница`,modeDashboard:`Панель`,undo:`Отменить`,redo:`Повторить`,brandingEditor:`Редактор брендинга`,brandingExport:`Экспорт JSON`,brandingImport:`Импорт JSON`,brandingPreview:`Предпросмотр`,brandingSampleButton:`Пример кнопки`,brandingSampleText:`Так будет выглядеть ваша тема бренда.`,colorPalette:`Цветовая палитра`,fontFamily:`Шрифт`,fontDefault:`По умолчанию (системный)`,modeLight:`Светлая`,modeDark:`Тёмная`,mobilePreview:`Предпросмотр мобильной версии`,objectManager:{title:`Менеджер объектов`,addObject:`Новый объект`,searchPlaceholder:`Поиск объектов…`,noObjects:`Объекты не найдены.`,objectName:`API-имя`,objectLabel:`Метка`,pluralLabel:`Метка (мн. ч.)`,icon:`Значок`,selectIcon:`Выбрать значок…`,group:`Группа`,noGroup:`Без группы`,sortOrder:`Порядок сортировки`,enabled:`Включено`,relationships:`Связи`,systemBadge:`Система`,fieldCount:`{{count}} поле(й)`,ungrouped:`Без группы`,deleteConfirmTitle:`Удалить объект?`,deleteConfirmMessage:`Объект и все его поля будут удалены навсегда. Это действие нельзя отменить.`},fieldDesigner:{title:`Конструктор полей`,addField:`Новое поле`,searchPlaceholder:`Поиск полей…`,allTypes:`Все типы`,noFields:`Поля не найдены.`,fieldName:`API-имя`,fieldLabel:`Метка`,fieldType:`Тип`,fieldGroup:`Группа`,description:`Описание`,required:`Обязательно`,unique:`Уникальное`,readOnly:`Только чтение`,hidden:`Скрытое`,indexed:`Индексированное`,externalId:`Внешний ID`,trackHistory:`Отслеживать историю`,defaultValue:`Значение по умолчанию`,placeholder:`Заполнитель`,referenceTo:`Ссылка на`,formula:`Формула`,options:`Параметры`,addOption:`Добавить параметр`,validationRules:`Правила валидации`,addRule:`Добавить правило`,systemBadge:`Система`,ungrouped:`Общее`,deleteConfirmTitle:`Удалить поле?`,deleteConfirmMessage:`Поле будет удалено навсегда. Существующие данные в этом поле будут потеряны.`,basicSection:`Основное`,typeSpecificSection:`Настройки типа`,advancedSection:`Дополнительно`,typeCategory:{text:`Текст`,number:`Число`,date:`Дата и время`,choice:`Выбор`,relation:`Связь`,advanced:`Дополнительно`}}},console:{saveAdvisoryTitle:`Сохранено — проверка авторинга выдала рекомендаций: {{count}}`,settingsHub:{title:`Настройки`,subtitle:`Настройте рабочее пространство, интеграции и флаги функций.`,loadError:`Не удалось загрузить настройки`,empty:`Настройки не зарегистрированы. Плагины могут регистрировать манифесты настроек через SettingsService.`,settingsCount:`Настроек: {{n}}`,beta:`Бета`,categories:{Workspace:`Рабочее пространство`,Communication:`Коммуникации`,Security:`Безопасность`,Infrastructure:`Инфраструктура`,Beta:`Бета`,Other:`Прочее`}},objectData:{badge:`Данные`,description:`Срез данных, заданный URL — не привязан к сохранённому представлению.`,filteredBy:`Фильтр`,removeFilter:`Убрать фильтр {{field}}`,saveAsView:`Сохранить как представление`,noAccessTitle:`Доступ запрещён`,noAccess:`У вас нет прав на просмотр этих данных.`},identityImport:{policyTitle:`Настройка входа для импортированных пользователей`,policy:{auto:`Автоматически (рекомендуется)`,invite:`Отправить приглашения`,temporary:`Временные пароли`,none:`Без пароля (только учётная запись)`},policyHint:{auto:`Доступным пользователям отправляется приглашение (по почте или SMS); тем, до кого не удалось дозвониться, выдаётся одноразовый пароль, который показывается ОДИН РАЗ на экране результата. Работает как с сервисом почты/SMS, так и без него.`,invite:`Каждый созданный пользователь получает письмо для установки пароля (или SMS-приглашение для строк только с телефоном). Требуется настроенный сервис почты/SMS — недоступные строки завершатся ошибкой.`,temporary:`Для развёртываний без почты/SMS: каждый созданный пользователь получает одноразовый пароль, который показывается ОДИН РАЗ на экране результата. При первом входе потребуется его сменить.`,none:`Пользователи сначала входят по OTP на телефон, магической ссылке или ссылке сброса пароля, а затем задают собственный пароль.`},passwordsNote:`Временные пароли — показываются один раз и нигде не сохраняются. Сохраните их сейчас; каждый пользователь должен сменить свой при первом входе.`,passwordsMore:`Остальные записи опущены — воспользуйтесь загрузкой файла.`,passwordsDownload:`Скачать CSV`},ai:{usage:{title:`Использование ИИ`,meterBuild:`Сборка`,meterAsk:`Вопрос`,statusOk:`Осталось много`,statusLow:`Заканчивается`,statusFull:`Лимит исчерпан`,resetsDaily:`Сбросится сегодня ночью`,resetsMonthly:`Сбросится в следующем цикле`,ctaUpgrade:`Повысьте тариф, чтобы продолжить`,ctaTopUp:`Добавьте кредиты, чтобы продолжить`,ariaLabel:`Использование ИИ: {{status}}`},workspaceTitle:`Рабочее пространство ИИ`,workspaceSubtitle:`Задавайте вопросы, изучайте и возвращайтесь к диалогам`,openChats:`Открыть чаты`,chats:`Чаты`,chatsDescription:`Просматривайте диалоги с ИИ и управляйте ими.`,share:`Поделиться`,shareTitle:`Поделиться этим диалогом`,shareDisabledTitle:`Начните диалог, чтобы включить публикацию`,newChat:`Создать`,searchChats:`Поиск по чатам…`,noChatsYet:`Чатов пока нет`,noChatsDescription:`Начните новый диалог, и он появится здесь.`,noMatchingChats:`Подходящих чатов нет.`,newConversation:`Новый диалог`,renameConversation:`Переименовать диалог`,deleteConversation:`Удалить диалог`,saveRename:`Сохранить название`,cancelRename:`Отменить переименование`,loadingHistory:`Загрузка истории диалога…`,conversationReady:`Диалог готов`,preparingConversation:`Подготовка нового диалога`,offlineDemoMode:`Автономный демонстрационный режим — список агентов недоступен`,sendFailedRateLimited:`Вы отправляете сообщения слишком часто. Ваше сообщение сохранено ниже — подождите немного и попробуйте снова.`,sendFailedGeneric:`Не удалось отправить сообщение. Оно сохранено ниже — попробуйте ещё раз.`,askAgent:`Спросить {{agent}}…`,assistant:`Ассистент`,liveCanvas:`Живой предпросмотр — {{app}} (черновик)`,liveCanvasUnlisted:`Работающее приложение — {{app}} (скрыто до публикации)`,loadingAgents:`Загрузка агентов…`,askAnything:`Спросите о чём угодно…`,emptyTitle:`Начните диалог`,emptyDescription:`Спросите о чём угодно — ассистент видит контекст вашего текущего приложения.`,switchAssistant:`Сменить ассистента`,chooseAgent:`Выберите ассистента…`,empty:{build:{title:`Создать с помощью ИИ`,description:`Опишите приложение или процесс обычными словами — я подготовлю объекты, экраны и автоматизации, а вы проверите и опубликуете.`},ask:{title:`Спросите свои данные`,description:`Задавайте вопросы о записях — количество, списки и сводки по доступным вам данным.`},editApp:{title:`Редактирование «{{app}}»`,titleGeneric:`Редактировать это приложение`,description:`Что нужно изменить? Я изменю это приложение на месте — добавлю поле, объект, представление или автоматизацию либо скорректирую существующее.`}},clearConversation:`Очистить`,sendHint:`чтобы отправить`,agentActivity:`Активность агента`,toolCompleted:`Завершено`,toolRunning:`Выполняется`,toolAwaitingApproval:`Ожидает подтверждения`,toolFailed:`Ошибка`,toolDetailsHidden:`Входные данные инструментов и необработанные результаты в этом режиме скрыты.`,copy:`Копировать`,copied:`Скопировано`,regenerate:`Сгенерировать заново`,model:`Модель`,submit:`Отправить`,uploadFiles:`Загрузить файлы`,stopResponse:`Остановить ответ`,trace:`трассировка`,viewTrace:`Посмотреть трассировку`,nextSteps:`Что дальше`,publishDrafts:`Опубликовать`,publishOk:`Опубликовано — объекты активны.`,seedWarn:`Опубликовано, но часть примеров данных загрузить не удалось.`,openBuiltApp:`Открыть приложение`,designBuiltApp:`Открыть в Studio`,previewDraft:`Предпросмотр`,previewApp:`Предпросмотр приложения`,resizeSplit:`Изменить размер чата и предпросмотра`,hideChats:`Скрыть чаты`,showChats:`Показать чаты`,planTitle:`Предложенный план`,planQuestions:`Подтвердите перед сборкой`,planAssumptions:`Допущения`,planApproveHint:`Ответьте, чтобы утвердить или скорректировать этот план.`,planApprove:`Собрать`,planAdjust:`Скорректировать`,justNow:`только что`,minutesAgo:`{{count}} мин назад`,hoursAgo:`{{count}} ч назад`,daysAgo:`{{count}} дн назад`,agentLabels:{ask:`Вопрос`,build:`Сборка`,dataChat:`Ассистент`,metadataAssistant:`Ассистент по метаданным`},suggestions:{dataChat:{userCount:`Сколько пользователей в системе? Перечисли их адреса электронной почты.`,recentRecords:`Перечисли 5 последних созданных записей.`,recordCounts:`Посчитай количество записей по каждому объекту.`},metadataAssistant:{buildCrm:`Создай CRM для продаж — клиенты, контакты и воронка сделок с итогами по этапам.`,buildApp:`Создай трекер проектов — проекты, задачи с ответственными и сроками, доска по статусам.`,buildFlow:`Спроектируй службу поддержки — заявки с приоритетом, процесс статусов и связи с клиентами.`,buildInventory:`Создай приложение для склада — товары, остатки, поставщики и индикация низких остатков.`,buildRecruiting:`Создай трекер кандидатов — кандидаты, открытые вакансии, этапы собеседований и заметки.`},generic:{help:`Чем ты можешь мне помочь?`,availableObjects:`Перечисли доступные объекты данных.`,recentActivity:`Сделай сводку моей недавней активности.`},editApp:{addField:`Добавь поле в один из объектов.`,addObject:`Добавь новый объект и свяжи его с существующим.`,addDashboard:`Добавь дашборд с ключевыми показателями.`,addAutomation:`Добавь автоматизацию — согласование, процесс статусов или уведомление.`}},changesTitle:`Подтвердите изменения`,changesConfirmed:`Подтверждено`,changesConfirm:`Подтвердить`,changesConfirmHint:`Ответьте, чтобы подтвердить или скорректировать это изменение.`,changeVerb:{createObject:`Создать объект`,addField:`Добавить поле`,modifyField:`Изменить поле`,deleteField:`Удалить поле`,createMetadata:`Создать`,updateMetadata:`Изменить`,createSeed:`Сгенерировать примеры данных`,createPackage:`Создать пакет приложения`},collapseToDock:`Свернуть в боковую панель`,switchApp:`Сменить приложение`,switchAppLabel:`Диалоги сборки по приложениям`,newApp:`Новое приложение`,connectionWaiting:`Ожидание сервера…`,connectionStalled:`Всё ещё выполняется…`,connectionOffline:`Соединение потеряно — переподключение…`,designingPlan:`Проектирование вашего приложения…`,designingPlanHint:{data:`Определяю данные, которые вы будете отслеживать…`,objects:`Формирую объекты и их поля…`,relations:`Соединяю связанные записи…`,lookups:`Настраиваю связи и подстановки…`,views:`Планирую экраны и представления…`,forms:`Размещаю формы и списки…`,defaults:`Добавляю разумные значения по умолчанию и проверки…`,dashboard:`Набрасываю дашборд для отслеживания…`,review:`Перепроверяю, что структура согласована…`,finalize:`Собираю план воедино…`},planBuilding:`Сборка…`,planBuilt:`Собрано`,planDeferred:`Ещё не собрано`,planReady:`План готов. Соберите его сейчас или скажите, что нужно скорректировать.`,published:`Опубликовано`,publishFailed:`Не удалось опубликовать`,unavailableTitle:`Ассистент ИИ недоступен`,unavailableDescription:`В этой среде ассистент ИИ не включён. Всё остальное работает как обычно.`,unavailableError:`Не удалось связаться с сервисом ИИ. Возможно, он временно недоступен — повторите попытку или вернитесь на главную.`,unavailableRetry:`Повторить`,unavailableHome:`На главную`,dock:{title:`Ассистент`,description:`Чат с ассистентом ИИ`,resize:`Изменить размер чата`,collapse:`Свернуть чат`,maximize:`Открыть на всю страницу`,open:`Открыть ассистента`},group:{today:`Сегодня`,yesterday:`Вчера`,previous7Days:`Предыдущие 7 дней`,previous30Days:`Предыдущие 30 дней`,older:`Ранее`}},title:`Консоль ObjectStack`,initializing:`Инициализация приложения…`,loadingHint:`Настройка нового окружения может занять некоторое время.`,breadcrumb:{dashboards:`Панели`,pages:`Страницы`,reports:`Отчёты`,system:`Система`},settingsView:{backToHub:`Все настройки`,back:`Назад`,noNamespace:`Пространство имён не выбрано.`,loadError:`Не удалось загрузить настройки`,saved:`Настройки сохранены`,saveFailed:`Ошибка сохранения`,lockedByEnv:`Заблокировано окружением: {{key}}`,lockedByEnvNoKey:`Заблокировано окружением`,actionSucceeded:`Действие выполнено`,actionFailed:`Действие не выполнено`,discard:`Отменить`,saveChanges:`Сохранить изменения`,unsavedCount:`Несохранённых изменений: {{count}}`,unsavedCount_one:`{{count}} несохранённое изменение`,unsavedCount_other:`{{count}} несохранённых изменений`,cryptoRefusalTitle:`Эта установка не может шифровать секреты`,cryptoRefusalSubjectSuffix:`объявлен зашифрованным, поэтому ничего не было записано.`,cryptoRefusalNoSubject:`Значение, объявленное зашифрованным, было отклонено, поэтому ничего не было записано.`,cryptoRefusalToast:`Не удалось зашифровать секреты: {{subject}}`,cryptoRefusalToastNoSubject:`Не удалось зашифровать секреты`},loadingSteps:{connecting:`Подключение к источнику данных`,loadingConfig:`Загрузка конфигурации`,preparingWorkspace:`Подготовка рабочего пространства`},error:{connectionFailed:`Не удаётся подключиться к серверу`,serverUnreachable:`Сервер {{url}} недоступен.`,checkServer:`Проверьте сетевое подключение или работает ли бэкенд.`,timeout:`Время ожидания подключения истекло (10 секунд).`},actions:{retry:`Повторить`,retrying:`Повтор…`},serverAction:{openingTitle:`Открытие…`,openingBody:`Открытие… это может занять некоторое время.`,popupBlockedTitle:`Всплывающее окно заблокировано`,popupBlockedDescription:`Браузер заблокировал открытие новой вкладки.`,popupBlockedAction:`Открыть в новой вкладке`},shortcuts:{title:`Горячие клавиши`,description:`Краткий справочник по всем доступным горячим клавишам.`,groups:{general:`Общие`,navigation:`Навигация`,dataViews:`Представления данных`,aiChat:`Ассистент ИИ`,preferences:`Настройки`},openCommandPalette:`Открыть палитру команд`,showShortcuts:`Показать горячие клавиши`,closeDialog:`Закрыть диалог / панель`,toggleSidebar:`Переключить боковую панель`,focusSearch:`Фокус на поиске`,createRecord:`Создать новую запись`,refreshData:`Обновить данные`,editRecord:`Редактировать выбранную запись`,newChat:`Новый чат`,toggleChatsList:`Переключить список чатов`,toggleDarkMode:`Переключить тёмный режим`},commandPalette:{title:`Палитра команд`,placeholder:`Введите команду или поиск…`,noResults:`Результаты не найдены.`,objects:`Объекты`,dashboards:`Панели мониторинга`,pages:`Страницы`,reports:`Отчёты`,switchApp:`Переключить приложение`,current:`Текущее`,preferences:`Настройки`,lightTheme:`Светлая тема`,darkTheme:`Тёмная тема`,systemTheme:`Системная тема`,actions:`Действия`,openFullSearch:`Открыть полную страницу поиска`,createApp:`Создать новое приложение`,searching:`Поиск…`,records:`Записи`,recentRecords:`Недавно просмотренные`},errors:{somethingWentWrong:`Что-то пошло не так`,unexpectedError:`При отображении этого представления произошла непредвиденная ошибка.`,tryAgain:`Попробовать снова`,goHome:`На главную`,errorDetails:`Подробности ошибки (только для разработки)`},notFound:{title:`Страница не найдена`,description:`Открытый URL не соответствует ни одному представлению в этом приложении.`,back:`Назад`},theme:{toggle:`Переключить тему`,light:`Светлая`,dark:`Тёмная`,system:`Системная`},objectView:{viewTypeTree:`Дерево`,viewTypeTreeDesc:`Выстраивает самоссылающиеся записи в иерархию по родительскому полю.`,parentField:`Родительское поле`,parentFieldHelp:`Поле, указывающее на родительскую запись (тот же объект) и задающее иерархию. Подходят только самоссылающиеся поля.`,viewName:`Название`,viewNameHelp:`Машинный ключ (snake_case). Заполняется автоматически из заголовка — при желании измените.`,viewNameRequired:`Введите ключ (строчные буквы, цифры, подчёркивание). Для нелатинских заголовков автозаполнение не работает.`,viewNameInvalid:`Используйте строчные латинские буквы, цифры и подчёркивания; начните с буквы или подчёркивания.`,systemViewReadonly:`Системное представление определено в коде — только для чтения.`,cannotEditMetaView:`Это встроенное представление, определённое в коде, — изменить его нельзя.`,cannotDeleteMetaView:`Это встроенное представление, определённое в коде, — удалить его нельзя.`,expandToPage:`Открыть на всю страницу`,objectNotFound:`Объект не найден`,objectNotFoundDescription:`Объект «{{objectName}}» не существует в текущей конфигурации.`,objectNotFoundHint:`Проверьте настройки навигации приложения или выберите другой объект на боковой панели.`,filterOrNotSavable:`Этот фильтр объединяет условия через ИЛИ, что сохранённое представление пока не может хранить. Он по-прежнему применяется к этому списку — уберите группировку ИЛИ, чтобы сохранить его в представлении.`,filterNestedNotSavable:`Этот фильтр использует вложенные группы условий, которые сохранённое представление не может хранить. Преобразуйте его в один список условий, чтобы сохранить в представлении.`,allRecords:`Все записи`,exitDesignMode:`Выйти из режима дизайна`,enterDesignMode:`Войти в режим дизайна`,metadataInspector:`Инспектор метаданных`,editView:`Редактировать представление`,addView:`Добавить представление`,designTools:`Инструменты дизайна`,new:`Создать`,configureView:`Настроить представление`,closePanel:`Закрыть панель`,page:`Страница`,pageConfigHint:`Панель инструментов, навигация и настройки оболочки представления`,listConfigHint:`Отрисовка данных, столбцы и внешний вид для этого типа списка`,general:`Общие`,generalHint:`Название, описание и тип представления`,toolbar:`Панель инструментов`,toolbarHint:`Поиск, фильтр, сортировка, группировка и переключение плотности`,toolbarEnabledCount:`{{count}} из {{total}} включено`,navigationSection:`Навигация`,navigationHint:`Поведение при нажатии на строку и настройки детального представления`,records:`Записи`,recordsHint:`Режим выбора, добавление записи и встроенное редактирование`,exportPrint:`Экспорт и печать`,exportPrintHint:`Форматы экспорта, печать и отображение количества записей`,showAllFields:`Показать все`,hideAllFields:`Скрыть все`,searchFields:`Поиск полей…`,title:`Заголовок`,description:`Описание`,data:`Данные`,source:`Источник`,columns:`Столбцы`,filterBy:`Фильтр по`,sortBy:`Сортировка по`,appearance:`Внешний вид`,showDescription:`Показать описание`,viewType:`Тип представления`,userFilters:`Фильтры пользователя`,enableSearch:`Включить поиск`,enableFilter:`Включить фильтр`,enableSort:`Включить сортировку`,enableHideFields:`Включить скрытие полей`,enableGroup:`Включить группировку`,enableColor:`Включить цвет`,enableDensity:`Включить плотность`,userActions:`Действия пользователя`,addRecordViaForm:`Добавить записи через форму`,advanced:`Расширенные`,allowExport:`Разрешить экспорт`,recordCount:`{{count}} записей`,noDescription:`Нет описания`,none:`Нет`,columnsConfigured:`{{count}} столбцов`,save:`Сохранить`,discard:`Отменить`,createView:`Создать представление`,newView:`Новое представление`,typeOptions:`Параметры типа`,groupByField:`Поле группировки`,startDateField:`Поле даты начала`,titleField:`Поле заголовка`,latitudeField:`Поле широты`,longitudeField:`Поле долготы`,imageField:`Поле изображения`,dateField:`Поле даты`,selectField:`Выберите поле…`,gridOptionsHint:`Представление таблицы использует столбцы, настроенные выше.`,groupBy:`Группировать по`,prefixField:`Поле префикса`,fields:`Поля`,fieldsVisible:`{{count}} видимых`,sortsCount:`{{count}} сортировок`,filtersCount:`{{count}} фильтров`,endDateField:`Поле даты окончания`,color:`Цвет`,fieldTextColor:`Цвет текста поля`,rowHeight:`Высота строки`,wrapHeaders:`Перенос заголовков`,showFieldDescriptions:`Показать описания полей`,collapseAllByDefault:`Свернуть всё по умолчанию`,striped:`Полосатые строки`,bordered:`Ячейки с границами`,inlineEdit:`Редактировать записи встроенно`,addDeleteRecordsInline:`Добавлять/удалять записи встроенно`,clickIntoRecordDetails:`Нажмите для просмотра деталей записи`,navigationMode:`Режим навигации`,navigationWidth:`Ширина навигации`,navigationWidthHint:`Доступно для режимов навигации: выдвижная панель, модальное окно и разделённый вид`,openNewTab:`Открыть в новой вкладке`,openNewTabHint:`Доступно для режимов навигации: страница и новое окно`,import:`Импорт`,importTitle:`Импорт из CSV`,importedToast:`{{count}} строк импортировано.`,importedWithSkipped:`{{ok}} строк импортировано; {{skipped}} пропущено.`,showAdvancedSettings:`Показать расширенные настройки`,showFewerSettings:`Меньше настроек`,createViewDesc:`Выберите тип представления и задайте ему имя. Все настройки можно изменить позже.`,cancel:`Отмена`,create:`Создать`,delete:`Удалить`,deleteViewTitle:`Удалить представление`,deleteViewConfirm:`Удалить представление "{{name}}"? Это действие нельзя отменить.`,bulkDeleteConfirm:`Удалить {{count}} выбранных записей? Это действие нельзя отменить.`,duplicateViewName:`Представление с таким именем уже существует.`,viewTypeGrid:`Таблица`,viewTypeGridDesc:`Таблица записей в стиле электронной таблицы.`,viewTypeKanban:`Канбан`,viewTypeKanbanDesc:`Карточки, сгруппированные в столбцы по полю единственного выбора.`,viewTypeCalendar:`Календарь`,viewTypeCalendarDesc:`Записи, размещённые по дате в месячном календаре.`,viewTypeGallery:`Галерея`,viewTypeGalleryDesc:`Крупные карточки изображений из поля вложений.`,viewTypeTimeline:`Временная шкала`,viewTypeTimelineDesc:`Записи вдоль горизонтальной временной оси.`,viewTypeGantt:`Гантт`,viewTypeGanttDesc:`Диаграмма Ганта с датами начала/конца и зависимостями.`,viewTypeMap:`Карта`,viewTypeMapDesc:`Географические маркеры из полей широты/долготы.`,viewTypeChart:`Диаграмма`,viewTypeChartDesc:`Агрегированные столбчатые/линейные/круговые диаграммы.`,groupByFieldHelp:`Доска Канбан группирует записи в столбцы по значениям поля.`,startDateFieldHelp:`Календарь размещает записи в ячейке, соответствующей этой дате.`,ganttStartDateFieldHelp:`Левый край каждой полосы Ганта использует эту дату.`,ganttEndDateFieldHelp:`Правый край каждой полосы Ганта использует эту дату.`,timelineDateFieldHelp:`Записи позиционируются на временной шкале по этой дате.`,latitudeFieldHelp:`Поле с широтой (только гео-поля).`,longitudeFieldHelp:`Поле с долготой (только гео-поля).`,imageFieldHelp:`Обложка галереи берётся из этого поля изображения или вложений.`,selectOption:`Выбрать…`,noEligibleFieldForType:`Нет подходящих полей этого типа. Сначала добавьте его к объекту.`,viewTypeUnavailable:`У этого объекта нет поля, которое может служить "{{field}}".`,viewTypeUnavailableShort:`Не поддерживается этим объектом.`,chartType:`Тип диаграммы`,chartTypeHelp:`Определяет способ отображения данных.`,chartTypeBar:`Столбчатая`,chartTypeLine:`Линейная`,chartTypePie:`Круговая`,chartTypeArea:`Областная`,chartTypeScatter:`Точечная`,xAxisField:`Поле оси X`,xAxisFieldHelp:`Категориальное или временное измерение.`,yAxisField:`Поле оси Y`,yAxisFieldHelp:`Числовое поле для агрегации.`,selectionMode:`Режим выбора`,selectionNone:`Нет`,selectionSingle:`Одиночный`,selectionMultiple:`Множественный`,pageSize:`Размер страницы`,pageSizeOptions:`Варианты размера страницы`,exportFormats:`Форматы экспорта`,exportMaxRecords:`Макс. записей`,exportIncludeHeaders:`Включить заголовки`,exportFileNamePrefix:`Префикс имени файла`,searchableFields:`Поля для поиска`,filterableFields:`Поля для фильтрации`,resizableColumns:`Изменяемые столбцы`,densityCompact:`Компактный`,densityComfortable:`Обычный`,densitySpacious:`Просторный`,densityMode:`Режим плотности`,hiddenFields:`Скрытые поля`,rowActions:`Действия строки`,bulkActions:`Массовые действия`,sharing:`Общий доступ`,sharingEnabled:`Общий доступ включён`,sharingVisibility:`Видимость`,addRecordEnabled:`Добавление записей включено`,addRecordPosition:`Позиция`,addRecordMode:`Режим`,addRecordFormView:`Представление формы`,conditionalFormatting:`Условное форматирование`,addRule:`Добавить правило`,quickFilters:`Быстрые фильтры`,addQuickFilter:`Добавить быстрый фильтр`,ufElements:`Элементы`,ufDropdown:`Выпадающий список`,ufTabs:`Вкладки`,ufToggle:`Переключатель`,ufAddField:`+ Добавить поле фильтра…`,ufNoFields:`Поля недоступны`,ufAddTab:`+ Добавить вкладку`,ufTabLabel:`Метка`,ufShowAllRecords:`Показать вкладку "Все записи"`,ufAllowAddTab:`Разрешить добавление вкладок`,showRecordCount:`Показать количество записей`,allowPrinting:`Разрешить печать`,virtualScroll:`Виртуальная прокрутка`,emptyStateTitle:`Заголовок пустого состояния`,emptyStateMessage:`Сообщение пустого состояния`,emptyStateIcon:`Значок пустого состояния`,ariaLabel:`Метка ARIA`,ariaDescribedBy:`Описано ARIA`,ariaLive:`ARIA Live`,accessibility:`Доступность`,viewTabs:`Вкладки представлений`},localeSwitcher:{label:`Язык`},search:`Поиск…`,nav:{pinItem:`Закрепить {{name}}`,unpinItem:`Открепить {{name}}`,dragToReorder:`Перетащите для изменения порядка`,favorites:`Избранное`}},auth:{setPassword:{title:`Задать резервный пароль`,description:`Вы вошли через единый вход. Задайте локальный пароль, чтобы входить в эту среду напрямую, если SSO станет недоступен.`,email:`Электронная почта`,newPassword:`Новый пароль`,confirmPassword:`Подтвердите пароль`,submit:`Задать пароль`,submitting:`Сохранение…`,success:`Локальный пароль задан`,failed:`Не удалось задать пароль`,passwordsMismatch:`Пароли не совпадают`,noSession:`Срок действия сессии истёк.`,backToSignIn:`Войти снова`},login:{signingIn:`Выполняется вход…`,ssoHandoff:`Перейти к {{target}}`,devAdminHint:{title:`Среда разработки`,body:`Войдите под предустановленным администратором для разработки:`,dismiss:`Закрыть`},title:`Войдите в свой аккаунт`,description:`Введите электронную почту и пароль для продолжения`,emailLabel:`Электронная почта`,emailPlaceholder:`name@example.com`,passwordLabel:`Пароль`,passwordPlaceholder:`Введите пароль`,forgotPasswordText:`Забыли пароль?`,submitButton:`Войти`,submittingButton:`Вход…`,noAccountText:`Нет аккаунта?`,signUpText:`Зарегистрироваться`,errors:{oauthCallbackFailed:`Не удалось завершить единый вход — ссылка для входа истекла или уже была использована. Попробуйте ещё раз.`,invalidCredentials:`Неверный email или пароль. Попробуйте ещё раз.`,emailNotVerified:`Пожалуйста, подтвердите email перед входом.`},emailOrPhoneLabel:`Электронная почта или номер телефона`,emailOrPhonePlaceholder:`name@example.com или +1 555 000 0000`,phoneLabel:`Номер телефона`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Код подтверждения`,otpCodePlaceholder:`6-значный код`,sendOtpButton:`Получить код`,resendOtpCountdownText:`Отправить снова через {seconds} с`,usePhoneOtpText:`Войти по коду подтверждения`,usePasswordSignInText:`Войти с паролем`},register:{title:`Создать аккаунт`,description:`Введите свои данные, чтобы начать`,nameLabel:`Имя`,namePlaceholder:`Иван Иванов`,emailLabel:`Электронная почта`,emailPlaceholder:`name@example.com`,passwordLabel:`Пароль`,passwordPlaceholder:`Создайте пароль (мин. 8 символов)`,confirmPasswordLabel:`Подтвердите пароль`,confirmPasswordPlaceholder:`Подтвердите свой пароль`,passwordMismatchError:`Пароли не совпадают`,passwordTooShortError:`Пароль должен содержать не менее 8 символов`,submitButton:`Создать аккаунт`,submittingButton:`Создание аккаунта…`,hasAccountText:`Уже есть аккаунт?`,signInText:`Войти`,errors:{userExists:`Аккаунт с таким email уже существует. Попробуйте войти.`},verifyInbox:{title:`Проверьте входящие`,description:`Мы отправили ссылку подтверждения на {{email}}. Нажмите на ссылку для активации аккаунта.`,resend:`Отправить письмо повторно`,resending:`Отправка…`,resent:`Письмо с подтверждением отправлено.`,backToSignIn:`Вернуться к входу`}},forgotPassword:{title:`Сбросить пароль`,description:`Введите адрес электронной почты, и мы отправим вам ссылку для сброса пароля`,emailLabel:`Электронная почта`,emailPlaceholder:`name@example.com`,submitButton:`Отправить ссылку для сброса`,submittingButton:`Отправка…`,successTitle:`Проверьте почту`,successDescription:`Мы отправили ссылку для сброса пароля на {{email}}. Пожалуйста, проверьте свою почту.`,backToSignInText:`Вернуться к входу`,rememberPasswordText:`Помните свой пароль?`,signInText:`Войти`,phoneLabel:`Номер телефона`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`Код подтверждения`,otpCodePlaceholder:`6-значный код`,sendOtpButton:`Получить код`,resendOtpCountdownText:`Отправить снова через {seconds} с`,newPasswordLabel:`Новый пароль`,newPasswordPlaceholder:`Введите новый пароль`,resetButton:`Сбросить пароль`,usePhoneResetText:`Сбросить по SMS-коду`,useEmailResetText:`Сбросить по электронной почте`,phoneSuccessTitle:`Пароль сброшен`,phoneSuccessDescription:`Ваш пароль сброшен. Теперь вы можете войти с новым паролем.`},resetPassword:{title:`Установить новый пароль`,description:`Выберите пароль, который вы ещё не использовали.`,newPassword:`Новый пароль`,confirmPassword:`Подтвердить пароль`,submit:`Обновить пароль`,submitting:`Обновление…`,success:`Пароль обновлён`,failed:`Сброс не удался`,invalidToken:`Эта ссылка для сброса недействительна или истекла.`,missingToken:`Ссылка для сброса отсутствует или истекла`,passwordsMismatch:`Пароли не совпадают`,requestNewLink:`Запросить новую ссылку`},verifyEmail:{title:`Подтвердить адрес email`,description:`Мы отправили ссылку подтверждения на ваш email. Нажмите на ссылку для подтверждения аккаунта.`,sentTo:`Отправлено на:`,verifyingTitle:`Проверка…`,verifyingDescription:`Подтверждаем ваш email. Пожалуйста, подождите.`,successTitle:`Email подтверждён`,successDescription:`Ваш email подтверждён. Теперь вы можете войти.`,errorTitle:`Подтверждение не удалось`,errorDescription:`Подтверждение не удалось. Запросите новую ссылку.`,missingToken:`В ссылке подтверждения отсутствует токен.`,emailMissing:`Email не указан`,resendButton:`Отправить письмо повторно`,resending:`Отправка…`,resent:`Письмо отправлено! Проверьте входящие`,resentSuccess:`Письмо с подтверждением отправлено!`,resentDescription:`Проверьте входящие и нажмите на ссылку подтверждения.`,resendFailed:`Не удаётся отправить письмо повторно`,signInLink:`Перейти ко входу`,backToSignIn:`Вернуться к входу`,backToLogin:`Вернуться ко входу`,checkSpam:`Не получили письмо? Проверьте папку "Спам" или обратитесь в поддержку.`,or:`Или`,resendUnavailable:`Возможно, отправка писем не настроена для этой среды. Если проблема повторяется, обратитесь в поддержку.`},setup:{welcomeTitle:`Добро пожаловать в ObjectStack`,description:`Создайте первый аккаунт владельца для завершения настройки.`,yourName:`Ваше имя`,orgName:`Название организации`,orgNamePlaceholder:`ООО Пример`,emailLabel:`Email`,emailPlaceholder:`name@example.ru`,passwordLabel:`Пароль`,passwordHint:`Не менее 8 символов`,submit:`Создать аккаунт владельца`,submitting:`Настройка…`,failed:`Настройка не удалась`},device:{title:`Авторизовать новое устройство`,subtitle:`Одобрите это устройство для входа как {{email}}.`,userCodeLabel:`Код устройства`,requesterLabel:`Запрос на подключение от`,approveWarning:`Подтверждайте только если вы сами только что начали это подключение. После подтверждения эта среда выполнения получит доступ к приватным пакетам вашей организации.`,loggedInAs:`Вошли как {{email}}`,approve:`Одобрить устройство`,approving:`Одобрение…`,approvedTitle:`Устройство авторизовано`,approvedDescription:`Можете вернуться к устройству — оно должно войти в систему.`,approveSuccess:`Устройство авторизовано`,approveSuccessDescription:`Можете закрыть это окно.`,approveFailed:`Одобрение не удалось`,deny:`Отклонить запрос`,denying:`Отклонение…`,deniedTitle:`Доступ запрещён`,deniedDescription:`Устройству не будет предоставлен доступ.`,denyFailed:`Не удалось отклонить запрос`,invalidTitle:`Недействительная ссылка устройства`,invalidDescription:`В URL не указан код устройства.`,loading:`Загрузка…`,cancel:`Отмена`,disabledTitle:`Авторизация устройств не включена`,disabledDescription:`В этой инсталляции авторизация устройств не включена, поэтому это устройство здесь одобрить нельзя.`},shell:{tenantHostHint:`Вы входите в это рабочее пространство`},layout:{headline:`Создавайте мощные бизнес-приложения быстрее.`,subhead:`Универсальная платформа для управления корпоративными данными, рабочими процессами и аналитикой.`},remediation:{signOut:`Выйти из аккаунта`,password:{title:`Срок действия пароля истёк`,fallbackMessage:`Задайте новый пароль, чтобы продолжить.`,current:`Текущий пароль`,next:`Новый пароль`,confirm:`Подтвердите новый пароль`,submit:`Изменить пароль и продолжить`,submitting:`Обновление…`,mismatch:`Новые пароли не совпадают.`,failed:`Не удалось изменить пароль.`},mfa:{title:`Настройка двухфакторной аутентификации`,fallbackMessage:`Ваша организация требует приложение-аутентификатор для продолжения.`,confirmPassword:`Подтвердите пароль`,continue:`Продолжить`,preparing:`Подготовка…`,enrollFailed:`Не удалось начать привязку.`,scanTitle:`Отсканируйте в приложении-аутентификаторе`,scanBody:`Отсканируйте этот QR-код с помощью Google Authenticator, 1Password, Authy и т. п., затем введите 6-значный код.`,backupTitle:`Сохраните резервные коды`,backupBody:`Храните их в надёжном месте — каждый код можно использовать один раз, если вы потеряете устройство.`,codeLabel:`6-значный код`,verify:`Проверить и продолжить`,verifying:`Проверка…`,invalidCode:`Неверный код. Попробуйте ещё раз.`}}},oauth:{consent:{title:`{{appName}} запрашивает доступ к вашему аккаунту`,request:`{{appName}} запрашивает разрешение{{suffix}}.`,unknownApp:`приложение`,willAllow:`Это приложение сможет:`,scope:{openid:`Подтверждать вашу личность`,profile:`Читать основной профиль (имя, фото)`,email:`Читать ваш адрес электронной почты`,offlineAccess:`Оставаться в системе (обновление доступа)`},deny:`Отклонить`,authorize:`Разрешить`,submitting:`Авторизация…`,granted:`Доступ предоставлен`,denied:`Доступ запрещён`,noRedirect:`Сервер не вернул URL для перенаправления.`,failed:`Не удалось выдать согласие`,footer:`Вы можете отозвать доступ в любое время в настройках аккаунта.`}},profile:{title:`Профиль`,subtitle:`Управляйте настройками своей учётной записи`,saving:`Сохранение…`,avatar:{upload:`Загрузить`,replace:`Заменить`,remove:`Удалить`},info:{title:`Личная информация`,description:`Обновите имя и просмотрите данные учётной записи`,saved:`Профиль успешно обновлён.`,name:`Имя`,email:`Эл. почта`,emailImmutable:`Адрес электронной почты изменить нельзя.`,role:`Роль`,save:`Сохранить изменения`},password:{changeTitle:`Изменить пароль`,setTitle:`Задать локальный пароль`,changeDescription:`Обновите пароль, который вы используете для входа в эту среду.`,setDescription:`Вы вошли через единый вход (SSO). Задайте локальный пароль, чтобы также входить в эту среду по электронной почте и паролю.`,current:`Текущий пароль`,new:`Новый пароль`,password:`Пароль`,confirm:`Подтвердите пароль`,tooShort:`Пароль должен содержать не менее 8 символов`,mismatch:`Пароли не совпадают`,enterCurrent:`Введите текущий пароль`,changed:`Пароль изменён.`,localSet:`Локальный пароль задан. Теперь вы можете входить в эту среду по электронной почте и паролю.`,changeAction:`Изменить пароль`,setAction:`Задать пароль`}},errors:{networkError:`Ошибка сети. Проверьте подключение к интернету.`,serverError:`Ошибка сервера. Попробуйте позже.`,notFound:`Ресурс не найден.`,unauthorized:`У вас нет прав для выполнения этого действия.`,forbidden:`Доступ запрещён.`,timeout:`Время ожидания истекло. Попробуйте снова.`,unknown:`Произошла непредвиденная ошибка.`},workspace:{label:`Рабочие пространства`,default:`Моё рабочее пространство`,switch:`Переключить рабочее пространство`,create:`Создать рабочее пространство`,createTitle:`Создать рабочее пространство`,createDescription:`Рабочее пространство — это общее место для совместной работы вашей команды.`,createButton:`Создать рабочее пространство`,nameLabel:`Имя рабочего пространства`,namePlaceholder:`например, Acme Inc`,slugLabel:`URL-слаг`,slugHint:`Используется в URL. Только строчные буквы, цифры и дефисы.`,invite:`Пригласить участника`,members:`Участники`,settings:`Настройки рабочего пространства`,multiOrgDisabled:`Создание новых организаций отключено в этой среде.`,createFailed:`Не удалось создать рабочее пространство`},help:{onThisPage:`На этой странице`,keyboardShortcuts:`Сочетания клавиш`,appDocs:`Документация приложения`,allDocs:`Вся документация`,onlineDocs:`Онлайн-документация`},sidebar:{packageManagement:`Управление пакетами`,searchNavigation:`Поиск по навигации…`,settings:`Настройки`,help:`Помощь`,helpTooltip:`Помощь и документация`,activityFeed:`Лента активности`,notifications:`Уведомления`,approvals:`Согласования`,inbox:`Входящие`,inboxAriaLabel:`Открыть входящие`,area:`Область`,scope:`Область`,recent:`Недавние`,favorites:`Избранное`,starred:`Отмеченные`,removeFromFavorites:`Убрать {{name}} из избранного`},topbar:{openAssistant:`Открыть ассистента {{name}}`,offline:`Не в сети`,usersOnline:`Пользователи сейчас в сети`,switchView:`Сменить представление`,switchObject:`Сменить объект`,connection:{connected:`Подключено`,connecting:`Подключение…`,reconnecting:`Переподключение…`,disconnected:`Отключено`,error:`Ошибка подключения`},stage:{preview:`Предварительная версия`,beta:`Бета`,tooltip:`Платформа в предварительной версии — функции могут измениться.`},aiAssistant:`ИИ-ассистент`,designInStudio:`Дизайн в Studio`},home:{build:{title:`Создать приложение`,subtitle:`Начните с нуля — спроектируйте объекты, формы, автоматизации и интерфейсы.`},template:{title:`Начать с шаблона`,subtitle:`Установите шаблонное приложение из маркетплейса и настройте его под себя.`},welcomeAdminDescription:`Опишите свой бизнес одним предложением — ИИ создаст объекты, экраны, API и инструменты агента. Либо настройте всё сами через меню слева.`,welcomeAdminDescriptionNoBuild:`Настройте первое приложение через меню «Администрирование» слева. Когда появятся данные, ИИ-ассистент поможет их изучить.`,welcomeAdminDescriptionNoAi:`Настройте первое приложение через меню «Администрирование» слева.`,noAppsTitle:`Приложений пока нет`,noAppsDescription:`Ваше рабочее пространство настраивается — приложения, которыми поделится администратор, появятся здесь.`,buildWithAI:`Создать с помощью ИИ`,askAI:`Спросить ИИ`,recoveryReminder:{message:`Задайте резервный пароль, чтобы входить в систему даже когда единый вход недоступен.`,cta:`Задать пароль`,dismiss:`Закрыть`},pendingDrafts:{message:`У вас {{count}} неопубликованных изменений — опубликуйте их, чтобы они вступили в силу.`,cta:`Опубликовать`,publishing:`Публикация…`,published:`Опубликовано! Изменения вступили в силу.`,publishFailed:`Не удалось опубликовать`,nothing:`Публиковать нечего.`,probeWarn:`Опубликовано, но проверка выявила проблемы.`,seedWarn:`Опубликовано, но часть примеров данных загрузить не удалось.`,publishedVerified:`Опубликовано и проверено — активных строк примеров данных: {{count}}.`,capabilityWarn:`Проверка при создании — несуществующих ссылок на возможности: {{count}}.`},title:`Главная`,subtitle:`Панель вашего рабочего пространства`,nav:`Главная`,allApps:`Все приложения`,yourApps:`Ваши приложения`,showMoreApps:`Ещё`,showLess:`Свернуть`,continueEmpty:`Открытые вами элементы появятся здесь.`,actionCenter:{title:`Требует вашего внимания`,empty:`Всё выполнено`},loading:`Загрузка рабочего пространства…`,recent:`Недавние`,starred:`Избранные`,welcome:`Добро пожаловать в ObjectUI`,welcomeDescription:`Начните с создания вашего первого приложения или настройки системы.`,createFirstApp:`Создайте первое приложение`,systemSettings:`Системные настройки`,browseMarketplace:`Обзор маркетплейса приложений`,quickActions:{title:`Быстрые действия`,createApp:`Создать приложение`,createAppDesc:`Начните с нового приложения`,manageObjects:`Управление объектами`,manageObjectsDesc:`Настройте модели данных`,systemSettings:`Системные настройки`,systemSettingsDesc:`Настройте рабочее пространство`},appCard:{noDescription:`Без описания`,default:`По умолчанию`},greetingMorning:`Доброе утро`,greetingAfternoon:`Добрый день`,greetingEvening:`Добрый вечер`,greetingNight:`Ночная смена`,heroTagline:`Продолжите с того места, где остановились, или откройте что-то новое.`,open:`Открыть`,stats:{apps:`Приложения`,starred:`Отмеченные`,recent:`Недавние`},recentApps:{title:`Недавно открытые`,itemType:{object:`Объект`,dashboard:`Панель`,page:`Страница`,record:`Запись`}},starredApps:{title:`Отмеченные`},gettingStarted:{title:`Настройка главной`,description:`Отметьте приложение как избранное, чтобы закрепить его здесь и открывать одним кликом. Всё, что вы открываете, автоматически появляется в "Недавно открытых".`,cta:`Просмотреть все приложения`}},layout:{systemNav:{systemSettings:`Системные настройки`,applications:`Приложения`,appMarketplace:`Маркетплейс приложений`,objectManager:`Менеджер объектов`,users:`Пользователи`,organizations:`Организации`,roles:`Роли`,configuration:`Конфигурация`,createApp:`Создать приложение`,administration:`Администрирование`,datasources:`Источники данных`,documentation:`Документация`},appSwitcher:{switchApplication:`Сменить приложение`,appsAvailable:`Доступно приложений: {{count}}`,editNavigation:`Изменить навигацию`,home:`Главная`,addApp:`Добавить приложение`,editApp:`Редактировать приложение`,manageAllApps:`Управление приложениями`,systemConsole:`Системная консоль`,noAppsConfigured:`Нет приложений`},activityFeed:{title:`Последние действия`,filter:`Фильтр`,empty:`Нет действий`,ariaLabel:`Лента активности`,typeCreate:`Создание`,typeUpdate:`Обновление`,typeDelete:`Удаление`,typeComment:`Комментарий`,relativeJustNow:`только что`,relativeSecondsAgo:`{{count}} с назад`,relativeMinutesAgo:`{{count}} м назад`,relativeHoursAgo:`{{count}} ч назад`,relativeDaysAgo:`{{count}} д назад`,viewAll:`Все действия`},metadata:{label:`Метаданные`,toggleTitle:`Инспектор метаданных`,panelTitle:`Инспектор метаданных`,jsonBadge:`JSON`,copyJson:`Копировать JSON`}},search:{title:`Поиск`,back:`Назад`,placeholder:`Поиск объектов, панелей, страниц, отчётов…`,inputAriaLabel:`Поиск объектов, панелей, страниц, отчётов`,resultsCount:`{{count}} результат для "{{query}}"`,resultsCountPlural:`{{count}} результатов для "{{query}}"`,itemsAvailable:`{{count}} доступно`,noResults:`Результатов не найдено`,noResultsHint:`Попробуйте изменить поисковые запросы`,typeObjects:`Объекты`,typeDashboards:`Панели`,typePages:`Страницы`,typeReports:`Отчёты`,badgeObject:`Объект`,badgeDashboard:`Панель`,badgePage:`Страница`,badgeReport:`Отчёт`},empty:{objectNotFound:`Объект не найден`,objectNotFoundDescription:`Определение объекта "{{name}}" отсутствует. Проверьте конфигурацию или вернитесь назад.`,interfacePageSourceMissing:`Эта интерфейсная страница ссылается на "{{name}}", который недоступен.`,pageNotFound:`Страница не найдена`,pageNotFoundDescription:`Страница "{{name}}" не найдена. Возможно, она была удалена или переименована.`,dashboardNotFound:`Панель не найдена`,dashboardNotFoundDescription:`Панель "{{name}}" не найдена. Возможно, она была удалена или переименована.`,reportNotFound:`Отчёт не найден`,reportNotFoundDescription:`Отчёт "{{name}}" не найден. Возможно, он был удалён или переименован.`,noAppsConfigured:`Нет приложений`,noAppsConfiguredDescription:`Нет зарегистрированных приложений. Создайте первое приложение или посетите системные настройки.`,appNotAvailable:`Приложение недоступно`,appNotAvailableDescription:`Это приложение пока недоступно — возможно, публикация ещё идёт. Повторите попытку через мгновение.`,appAccessDenied:`У вас нет доступа к этому приложению`,appAccessDeniedDescription:`Это приложение существует, но у вашей учётной записи нет прав на его открытие. Обратитесь к администратору за доступом.`,appAccessDeniedHome:`На главную`,createFirstApp:`Создать приложение`,systemSettings:`Системные настройки`,back:`Назад`,recordNotFound:`Запись не найдена`,recordNotFoundDescription:`Искомая запись не существует или была удалена.`},renderer:{noPageSchema:`Схема страницы не указана`,noFormSchema:`Схема формы не указана`,noDashboardSchema:`Схема панели не указана`,pageRendering:`Рендеринг страницы: {{name}}`,dashboardRendering:`Рендеринг панели: {{name}}`,formRenderingMode:`Форма в режиме {{mode}}`,formRenderingFor:`для записи {{id}}`,createRecord:`Создать запись`,editRecord:`Редактировать запись`,page:`Страница`,dashboard:`Панель`,save:`Сохранить`,cancel:`Отмена`},actionDialog:{title:`Параметры действия`,description:`Введите необходимую информацию для продолжения.`,selectPlaceholder:`Выбрать {{label}}`,requiredError:`{{label}} обязательно`,cancel:`Отмена`,confirm:`Подтвердить`,uploading:`Загрузка…`,defaultActionTitle:`Действие`,ok:`ОК`,lookupPlaceholder:`ID записи для {{label}}`,lookupHelpText:`Для этого параметра не настроен объект ссылки, поэтому выбор записи недоступен. Введите ID записи или попросите администратора исправить параметр действия.`},actionConfirm:{title:`Подтвердите действие`,confirm:`Продолжить`,cancel:`Отмена`},rowAction:{openMenu:`Открыть меню`,edit:`Редактировать`,delete:`Удалить`},navigationSync:{addedPage:`Навигация обновлена: страница "{{name}}" добавлена`,addedDashboard:`Навигация обновлена: панель "{{name}}" добавлена`,removedPage:`Навигация обновлена: страница "{{name}}" удалена`,removedDashboard:`Навигация обновлена: панель "{{name}}" удалена`,renamedPage:`Навигация обновлена: страница "{{oldName}}" переименована в "{{newName}}"`,renamedDashboard:`Навигация обновлена: панель "{{oldName}}" переименована в "{{newName}}"`,undoLabel:`Отменить`,undone:`Изменение навигации отменено`,undoFailed:`Не удалось отменить изменение навигации`,updateFailed:`Не удалось обновить навигацию`},objectActions:{resetPackageSetConfirm:`Этот набор разрешений поставляется с установленным пакетом и не может быть удалён. Удаление сбросит его к исходному состоянию из пакета и отменит ваши настройки в этой среде. Продолжить?`,resetPackageSetSuccess:`Набор разрешений сброшен к исходному состоянию из пакета`,deleteSuccess:`{{label}} успешно удалён`,deleteFailed:`Не удалось удалить {{label}}`,noRecordId:`ID записи не указан`,deleteConfirm:`Удалить эту запись?`,bulkDeleteSuccess:`{{count}} записей {{label}} удалено`,bulkDeletePartial:`{{succeeded}} удалено, {{failed}} не удалось`},objectViewActions:{renameFailed:`Не удалось переименовать представление`,deleteFailed:`Не удалось удалить представление`},dashboardActions:{printDialogOpening:`Открывается диалог печати браузера (это не экспорт в PDF)`,exportFailed:`Ошибка экспорта: {{message}}`,forecastSoon:`Прогнозное представление скоро будет`},recordDetail:{viewersTooltip:`Пользователи, просматривающие эту запись`},cellRender:{empty:`Пусто`,yes:`Да`,no:`Нет`,systemFields:`Система`},user:{profile:`Профиль`,settings:`Настройки`,logout:`Выйти`,preferences:`Настройки`,theme:`Тема`,language:`Язык`},report:{total:`Итого`,rowTotal:`Итог строки`,columnTotal:`Итог столбца`,grandTotal:`Общий итог`,totals:`Итоги`,rowsLabel:`Строка`,columnsLabel:`Столбец`,allLabel:`(Все)`,emptyLabel:`(Пусто)`,loading:`Загрузка…`,failedToLoad:`Не удалось загрузить матрицу: {{message}}`,needsAcross:"Матричный отчёт требует хотя бы одно поле `groupingsAcross`.",aggregate:{count:`Количество`,countDistinct:`Уникальные`,sum:`Сумма`,avg:`Среднее`,min:`Минимум`,max:`Максимум`,first:`Первый`},editor:{panelTitle:`Редактировать отчёт`}},organizations:{create:`Создать рабочее пространство`,mine:`Мои организации`,title:`Организации`,heading:`Ваши организации`,subtitle:`Выберите организацию, чтобы продолжить, или создайте новую.`,searchPlaceholder:`Поиск организации`,new:`Новая организация`,current:`Текущая организация`,manage:`Управление`,emptyTitle:`Пока нет организаций`,emptyDescription:`Создайте свою первую организацию, чтобы начать.`,noMatches:`Нет организаций, соответствующих запросу.`},organization:{roles:{owner:`Владелец`,admin:`Администратор`,delegatedAdmin:`Делегированный администратор`,member:`Участник`},errors:{notAllowedToInvite:`У вас нет прав приглашать пользователей в эту организацию.`,notAllowedToInviteWithRole:`У вас нет прав приглашать пользователя с этой ролью.`,alreadyInvited:`Этот пользователь уже приглашён в эту организацию.`,organizationExists:`Такая организация уже существует.`,slugTaken:`Этот идентификатор уже занят.`,notAllowedToCreate:`У вас нет прав создавать новую организацию.`,notTheRecipient:`Вы не являетесь получателем этого приглашения.`,invitationNotFound:`Это приглашение больше не существует или истекло.`,unknown:`Что-то пошло не так. Попробуйте ещё раз.`},backToList:`Назад к организациям`,notFound:`Организация не найдена`,notFoundDescription:`Эта организация не существует или у вас нет к ней доступа.`,tabs:{members:`Участники`,invitations:`Приглашения`,settings:`Настройки`},members:{title:`Участники`,inviteMember:`Пригласить участника`,inviteRestrictedNote:`Только администраторы организации могут приглашать участников.`,removeMember:`Удалить участника`,removeConfirmTitle:`Удалить участника?`,removeConfirmDescription:`{{name}} будет удалён из организации и сразу потеряет доступ.`,removeConfirmAction:`Удалить`,memberRemoved:`Участник удалён`,removeFailed:`Не удалось удалить участника`,roleUpdated:`Роль обновлена`,roleUpdateFailed:`Не удалось обновить роль`,memberActions:`Действия с участником`,loadFailed:`Не удалось загрузить участников`},invitations:{title:`Приглашения`,empty:`Приглашений нет.`,expiresAt:`Истекает`,linkCopied:`Ссылка на приглашение скопирована`,copyFailed:`Не удалось скопировать ссылку`,canceled:`Приглашение отменено`,cancelFailed:`Не удалось отменить приглашение`,cancelTitle:`Отменить приглашение?`,cancelDescription:`Приглашение для {{email}} будет отозвано.`,cancelAction:`Отменить приглашение`,inviteTitle:`Пригласить участника`,inviteDescription:`Человек получит приглашение вступить в эту организацию.`,emailLabel:`Электронная почта`,roleLabel:`Роль`,placementLabel:`Назначение (необязательно)`,placementDescription:`Применяется при принятии приглашения. Показаны только подразделения и должности, которые вы можете делегировать.`,businessUnitLabel:`Бизнес-подразделение`,businessUnitPlaceholder:`Без назначения`,positionsLabel:`Должности`,sendInvite:`Отправить приглашение`,sentTitle:`Приглашение создано`,sentDescription:`Отправьте ссылку ниже приглашённому. Чтобы принять приглашение, ему нужно войти в систему.`,linkLabel:`Ссылка для принятия`,invitedAs:`{{email}} приглашён как {{role}}`,copyLinkLabel:`Скопировать ссылку-приглашение`,loadFailed:`Не удалось загрузить приглашения`,inviteFailed:`Не удалось пригласить участника`,status:{all:`Все`,pending:`Ожидает`,accepted:`Принято`,rejected:`Отклонено`,canceled:`Отменено`}},settings:{generalTitle:`Общие`,generalDescription:`Обновите сведения об организации.`,readOnlyNote:`Изменять настройки могут только владельцы.`,nameLabel:`Название организации`,slugLabel:`Слаг`,logoLabel:`Логотип`,logoUpload:`Загрузить`,logoReplace:`Заменить`,logoClear:`Удалить`,logoUploaded:`Логотип загружен — сохраните, чтобы применить`,logoUploadFailed:`Не удалось загрузить логотип`,save:`Сохранить изменения`,saved:`Настройки сохранены`,saveFailed:`Не удалось сохранить настройки`,leaveTitle:`Покинуть организацию`,leaveDescription:`Вы потеряете доступ к этой организации.`,leaveAction:`Покинуть`,leaveConfirmTitle:`Покинуть организацию?`,leaveConfirmDescription:`Вы уверены, что хотите покинуть {{name}}? Доступ будет потерян немедленно.`,leaveConfirmAction:`Покинуть`,leftOrg:`Вы покинули организацию`,leaveFailed:`Не удалось покинуть организацию`,dangerZone:`Опасная зона`,deleteTitle:`Удалить организацию`,deleteDescription:`Безвозвратно удалить эту организацию и все её данные.`,deleteAction:`Удалить`,deleteConfirmTitle:`Удалить организацию?`,deleteConfirmDescription:`Это действие необратимо. Все данные будут удалены безвозвратно. Введите слаг организации для подтверждения.`,deleteConfirmSlugLabel:`Введите «{{slug}}» для подтверждения`,deleteConfirmAction:`Удалить организацию`,deleted:`Организация удалена`,deleteFailed:`Не удалось удалить организацию`},accept:{title:`Вас пригласили`,description:`Вас пригласили присоединиться к {{orgName}} в роли {{role}}.`,errorTitle:`Приглашение недоступно`,goToOrgs:`Перейти к организациям`,loading:`Загрузка приглашения…`,organization:`Организация`,role:`Роль`,expiresAt:`Истекает`,accept:`Принять приглашение`,accepted:`Приглашение принято`,acceptFailed:`Не удалось принять приглашение`,decline:`Отклонить`,declined:`Приглашение отклонено`,declineFailed:`Не удалось отклонить приглашение`},switcher:{label:`Переключить организацию`,groupLabel:`Рабочая организация`,groupHint:`Новые записи создаются здесь. В представлениях отображаются данные из всех ваших организаций.`,manageMembers:`Управление участниками`}},notifications:{regionLabel:`Уведомления`,groupCount:`Уведомлений: {{count}}`,groupUnread:`Непрочитанных: {{count}}`,groupMarkRead:`Отметить прочитанными`,groupMarkReadTitle:`Отметить прочитанными все этого типа`,empty:`Нет уведомлений`,markAllRead:`Отметить все как прочитанные`,viewAll:`Показать все уведомления`,approvalsPending:`{{count}} ожидающих утверждений`,viewApprovals:`Показать утверждения`,noPendingApprovals:`Нет ожидающих утверждений`,openApprovalsInbox:`Открыть входящие утверждений`,badgeTotal:`Всего: {{total}}`,badgeNotifications:`{{unread}} уведомлений`,badgeApprovals:`{{approvals}} ожидающих утверждений`,emptyUnread:`Всё прочитано`,filterUnread:`Непрочитанные`,filterAll:`Все`},publicForm:{submit:`Отправить`,submitting:`Отправка…`,submitAnother:`Отправить ещё ответ`,poweredBy:`Работает на ObjectStack`,secureNotice:`Ваши данные передаются безопасно и используются только для обработки запроса.`,thankYouTitle:`Спасибо!`,thankYouMessage:`Ваш ответ успешно получен.`,redirecting:`Перенаправление через {{seconds}} с…`,unavailableTitle:`Форма недоступна`,unavailableDescription:`По этому URL нет публичной формы. Убедитесь, что базовое представление имеет анонимный доступ.`,tryDemo:`Попробовать демо`,retry:`Повторить`,loading:`Загрузка формы…`,requiredHint:`* Обязательное поле`,consentLabelDefault:`Я принимаю политику конфиденциальности и соглашаюсь на обработку моих данных.`,consentLink:`Политика конфиденциальности`,consentRequired:`Пожалуйста, примите политику конфиденциальности.`,rateLimited:`Проверьте ответы перед отправкой.`,redirectBlocked:`Ответ принят, но URL перенаправления заблокирован по соображениям безопасности.`,demo:{contactTitle:`Связаться с нами`,contactDescription:`Расскажите о вашем проекте, и наш менеджер свяжется с вами в течение рабочего дня.`,supportTitle:`Отправить запрос в поддержку`,supportDescription:`Опишите проблему — наша команда ответит в течение рабочего дня.`,thankYouSalesTitle:`Спасибо — мы получили ваше сообщение!`,thankYouSalesMessage:`Наш менеджер свяжется с вами в течение рабочего дня.`,thankYouSupportTitle:`Готово — ваш запрос в очереди.`,thankYouSupportMessage:`Инженер поддержки скоро свяжется с вами. Сохраните эту страницу, если у вас есть скриншоты.`,field:{firstName:`Имя`,lastName:`Фамилия`,email:`Рабочий email`,phone:`Телефон`,jobTitle:`Должность`,company:`Компания`,website:`Сайт`,industry:`Отрасль`,companySize:`Размер компании`,howCanWeHelp:`Как мы можем помочь?`,subject:`Тема`,description:`Описание`,issueType:`Тип проблемы`,priority:`Приоритет`},industry:{technology:`Технологии`,software:`Программное обеспечение / SaaS`,finance:`Финансы`,healthcare:`Здравоохранение`,retail:`Розница`,other:`Другое`},issueType:{question:`Вопрос`,problem:`Проблема`,bug:`Ошибка`,feature_request:`Пожелание`},priority:{low:`Низкий`,medium:`Средний`,high:`Высокий`,critical:`Критический`}}},connectAgent:{disabled:{title:`MCP отключён в этом развертывании`,body:`Поверхность MCP выключена (OS_MCP_SERVER_ENABLED=false). Попросите оператора включить её снова.`},url:{title:`MCP-эндпоинт этого окружения`,body:`Любой ИИ-клиент с поддержкой MCP подключается по этому URL. Идентификация — самообслуживание: развертывание само является сервером авторизации OAuth 2.1 — вы входите под своим именем, и каждый вызов выполняется в рамках ваших прав и строковой безопасности.`,downloadSkill:`Скачать SKILL.md`,skillHint:`Переносимый навык агента: учит любого совместимого агента работать с этим окружением.`},claude:{body:`Настройки → Коннекторы → Добавить пользовательский коннектор, вставьте этот URL и войдите через браузер.`,reachability:`claude.ai (веб) подключается с серверов Anthropic — развертывание должно быть доступно по публичному HTTPS. Claude Desktop и локальные клиенты достигают и интранет-развертываний.`},claudeCode:{body:`Одна команда — вход OAuth откроется автоматически при первом использовании:`,plugin:`Или установите официальный плагин (добавляет навык ObjectStack и команду /objectstack:connect):`},cursor:{addButton:`Добавить в Cursor`,body:`Используйте кнопку в один клик или добавьте это в .cursor/mcp.json:`},vscode:{body:`Добавьте в .vscode/mcp.json (или командой MCP: Add Server):`},codex:{body:`Добавьте в ~/.codex/config.toml. Если ваша версия Codex не поддерживает поток OAuth, используйте заголовок с API-ключом (см. ниже):`},apiKey:{title:`API-ключи`,badge:`headless`,body:`Для CI, скриптов и агентов без браузера. Ключ действует от вашего имени — обращайтесь с ним как с паролем. Показывается ОДИН раз.`,namePlaceholder:`Имя ключа (напр. ci-agent)`,mint:`Создать ключ`,minting:`Создание…`,showOnce:`Ключ «{{name}}» создан — скопируйте сейчас, он больше не будет показан:`,done:`Готово — скрыть`}},excelImport:{noImportableFields:`У этого объекта нет полей, доступных для импорта.`,schemaReadFailed:`Не удалось прочитать схему объекта.`,imported:`Импортировано строк: {{count}} в {{object}}.`,importFrom:`Импортировать реальные строки из`,into:`в`,opening:`Открытие…`,importAction:`Импорт`,dismiss:`Скрыть`},cloudOnboarding:{hintCreate:`Создайте первое окружение — отдельное рабочее пространство со своим URL, базой данных и тарифом. Разработка ведётся внутри него.`,hintReady:`Продакшн-окружение готово. Откройте его, чтобы создавать и запускать приложения — всё происходит внутри окружения.`,createEnvironment:`Создать окружение`,openProduction:`Открыть продакшн`,manageEnvironments:`Управление окружениями`},aiModelStatus:{summary:`Сборка / вопросы используют {{conversational}} ({{conversationalSource}}); структурированный вывод — {{structured}} ({{structuredSource}}).`,summaryRouting:`Политика маршрутизации: бесплатные тарифы → {{free}}, платные тарифы → {{paid}}.`,modelUnknown:`неизвестно`,sourceUnknown:`адаптер не сообщил`,rowConversational:`Модель Build / Ask`,rowStructured:`Структурированный (blueprint / seed)`,rowReasoning:`Интенсивность рассуждений`,readFailed:`Не удалось прочитать действующую модель ИИ. В этом окружении может не быть запущен сервис ИИ, либо у вас нет разрешения ai:read.`,readFailedWithStatus:`Не удалось прочитать действующую модель ИИ (HTTP {{status}}). В этом окружении может не быть запущен сервис ИИ, либо у вас нет разрешения ai:read.`,overridesInEffect:`Действующие переопределения: `,noOverrides:`нет — используются значения по умолчанию развёрнутого кода.`,adapter:`Адаптер: `,sourceCodeDefault:`значение по умолчанию в коде (без env-переопределения)`,sourceInherits:`как у build/ask`,sourcePinned:`закреплено через {{source}}`},chatbotError:{title:`Ошибка ответа`,fallbackDetail:`Что-то пошло не так. Попробуйте ещё раз.`,details:`Подробности`,hide:`Скрыть`,retry:`Повторить`},chatbotQuota:{title:`Требуется обновление тарифа`,fallbackMessage:`Вы исчерпали квоту ИИ.`,buyCredits:`Купить пакет кредитов`,upgradePlan:`Повысить тариф`},environment:{addEnvironment:`Добавить окружение`,setUpProduction:`Настройте продакшн-окружение`,addDevelopment:`Добавить окружение разработки`,entitlement:{productionLimitTitle:`У вас уже есть продакшн-окружение`,productionLimitBody:`Каждая организация включает ровно одно продакшн-окружение. Создайте отдельную организацию для ещё одного или свяжитесь с нами по поводу условий Enterprise.`,planLockedTitle:`Окружения разработки — платная возможность`,planLockedBody:`{{plan}} включает одно продакшн-окружение. Перейдите на платный тариф, чтобы добавить окружения разработки: создавайте в разработке, затем публикуйте в продакшн.`,limitTitle:`Достигнут лимит окружений разработки`,limitBody:`Лимит растёт вместе с числом AI-мест. Добавьте AI-место или заархивируйте неиспользуемое окружение разработки, чтобы освободить место.`,limitBodyWithCount:`Используется {{used}} из {{limit}} окружений разработки. Лимит растёт вместе с числом AI-мест — добавьте AI-место или заархивируйте неиспользуемое окружение разработки.`,freePlan:`Бесплатный тариф`,namedPlan:`Тариф {{plan}}`,upgradeCta:`Сменить тариф`,contactSalesCta:`Связаться с отделом продаж`}},cloudConnection:{checking:`Проверка подключения…`,retry:`Повторить`,errors:{expired:`Срок действия запроса истёк до подтверждения. Начните заново.`,bindFailed:`Не удалось выполнить привязку.`,deviceCodeFailed:`Не удалось запросить код устройства.`},waiting:{popupOpened:`Подтвердите подключение в только что открывшемся окне — эта страница обновится сама.`,polling:`Ожидание подтверждения в облачной консоли…`,openApproval:`Открыть страницу подтверждения`,copy:`Копировать`,copied:`Скопировано`,codePrefilled:`Код уже подставлен на странице подтверждения.`,openItHere:`Окно не появилось? Откройте здесь`,cancel:`Отмена`},bound:{title:`Подключено к ObjectStack Cloud`,runtime:`Среда выполнения`,organization:`Организация`,approvedBy:`Подтвердил`,runtimeId:`ID среды выполнения`,environment:`Окружение`,since:`Подключено`,privatePackages:`Приватные пакеты вашей организации теперь отображаются в Маркетплейсе в разделе «Ваша организация».`,disconnect:`Отключить`},unbound:{title:`Не подключено`,body:`Подключите эту среду выполнения к управляющему слою ObjectStack, чтобы просматривать приватные пакеты вашей организации и устанавливать их здесь. Подтверждение — один клик в вашей облачной учётной записи; никакие идентификаторы и учётные данные на этой странице не вводятся.`,connect:`Подключить`}},marketplace:{suggestedBindings:{promptEveryone:`Приложение предлагает предоставить «{{set}}» всем вошедшим пользователям (позиция Everyone).`,promptGuest:`Приложение предлагает предоставить «{{set}}» неаутентифицированным посетителям (позиция Guest).`,confirm:`Предоставить`,confirming:`Предоставление…`,dismiss:`Закрыть`,confirmedToast:`«{{set}}» теперь предоставлен: {{anchor}}.`,dismissedToast:`Предложение по «{{set}}» закрыто.`},title:`Маркетплейс приложений`,subtitle:`Просматривайте одобренные приложения из каталога ObjectStack. Нажмите на приложение, чтобы увидеть подробности и установить его.`,searchPlaceholder:`Поиск приложений по имени или ID манифеста…`,searchAria:`Поиск в маркетплейсе`,installed:`Установлено`,installedCount:`Установлено ({{count}})`,refresh:`Обновить`,all:`Все`,noApprovedYet:`Пока нет одобренных приложений.`,noMatchFilters:`Нет приложений, соответствующих фильтрам.`,noDescription:`Описание отсутствует.`,back:`Назад в маркетплейс`,installedTitle:`Установленные приложения`,installedSubtitle:`Пакеты маркетплейса, установленные в ядре этого рантайма.`,installedEmpty:`Пока нет установленных приложений.`,browseLink:`Маркетплейс →`,installedAdditiveNote:`<strong>Примечание:</strong> API ядра только аддитивный — удаление убирает манифест с диска, чтобы пакет не загружался при следующем запуске, но работающее ядро держит приложение зарегистрированным до перезапуска.`,installedAt:`Установлено {{when}}`,installedBy:`пользователем {{user}}`,installedPackageId:`Пакет`,cachedAs:`Кэшировано как <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`Установлено v{{version}}`,load:{failed:`Не удалось загрузить маркетплейс`,failedHint:`По умолчанию этот рантайм указывает на публичное облако ObjectStack. Убедитесь, что рантайм онлайн.`,packageFailed:`Не удалось загрузить пакет`,notFound:`Не найдено.`},detail:{homepage:`Сайт`,installedV:`Установлено · v{{version}}`,about:`О приложении`,noReadme:`README отсутствует.`,versions:`Версии`,noApprovedVersions:`Нет одобренных версий.`,prerelease:`Пред-релиз`,moreOptions:`Другие варианты установки`,uninstallFromRuntime:`Удалить из рантайма`,addSampleData:`Добавить демоданные`,reseedAgain:`Перезагрузить демоданные`,purgeSampleData:`Удалить демоданные`,purgeConfirm:`Удалить все демонстрационные записи, созданные этим пакетом? Записи, добавленные пользователем, НЕ будут затронуты.`,purgeSuccess:`Удалено демонстрационных записей: {{count}}.`,purgeNoData:`Демонстрационные записи для удаления не найдены.`,reseedQueued:`Демоданные будут перезагружены при следующем доступе к среде.`,reseedLocalSuccess:`Демоданные перезагружены: добавлено {{inserted}}, обновлено {{updated}}.`,reseedPartialErrors:`(не удалось записать записей: {{count}})`,updateAvailable:`Доступно обновление`},action:{installed:`Установлено`,install:`Установить`,reinstall:`Переустановить`,working:`Обработка…`,installToCloud:`Установить в облако…`,installing:`Установка…`,uninstall:`Удалить`,uninstalling:`Удаление…`,details:`Подробности`,close:`Закрыть`,dismiss:`Закрыть`,openOnCloud:`Открыть в облаке`,backHome:`На главную`,updateTo:`Обновить`},install:{dialogTitle:`Установить {{name}}`,dialogDescCurrent:`Установить в эту среду ({{host}}).`,dialogDescPicker:`Выберите среду для установки. Требуется вход в ObjectStack Cloud.`,environment:`Среда`,environmentPlaceholder:`Выбрать среду`,includeSampleData:`Включить образцы данных`,noEnvs:`В активной организации нет сред.`,noPermission:`Нет прав на установку. Только владельцы и администраторы могут устанавливать.`,signInFirst:`Сначала войдите в ObjectStack Cloud.`,success:`Установлено. Откройте среду, чтобы увидеть новое приложение.`,localSuccess:`v{{version}} установлено. "{{name}}" должно появиться в переключателе.`,localManifestConflict:`{{message}}
|
|
30
|
-
Примечание: Локальное приложение уже имеет этот manifest_id. Сначала удалите его из objectstack.config.ts.`,localUnauthorized:`Сначала войдите в этот рантайм.`,localMarketplaceUnavailable:`OS_CLOUD_URL не настроен.`,updateTo:`Обновить → v{{version}}`,installedVersion:`Установлено v{{version}}`},org:{heading:`Ваша организация`,install:`Установить`,installed:`Установлено {{name}}`,installedBadge:`Установлено`,installing:`Установка…`},disclosure:{containsCode:`Этот пакет содержит код`,reviewed:`Проверено и одобрено`,unreviewed:`Ещё не проверено`,signed:`Подписано`,grantsIntro:`При установке пакет получит:`,services:`Сервисы платформы`,hooks:`Хуки жизненного цикла`,network:`Доступ к сети`,fs:`Доступ к файловой системе`,noPermissions:`Не запрашивает особых разрешений.`,acknowledge:`Я понимаю, что этот пакет выполняет код и получает указанные выше разрешения.`,runtime:{node:`В процессе · полное доверие`,sandbox:`В песочнице`,worker:`Вне процесса`}},uninstall:{confirm:`Удалить {{manifestId}} v{{version}}?
|
|
31
|
-
|
|
32
|
-
Кэшированный манифест будет удалён.`,successInList:`{{manifestId}} удалён. Перезапустите рантайм для полной выгрузки.`,successInDetail:`Кэшированный манифест {{manifestId}} удалён.`},accessDenied:{title:`Только для администраторов`,description:`Нет прав на установку приложений.`},category:{crm:`CRM`,erp:`ERP`,hr:`HR`,finance:`Финансы`,project:`Управление проектами`,collaboration:`Совместная работа`,analytics:`Аналитика`,integration:`Интеграция`,automation:`Автоматизация`,ai:`ИИ`,security:`Безопасность`,"developer-tools":`Инструменты разработчика`,"ui-theme":`Тема UI`,storage:`Хранилище`,other:`Другое`},pricing:{free:`Бесплатно`,freemium:`Freemium`,paid:`Платно`,subscription:`Подписка`,"usage-based":`По использованию`,"contact-sales":`Связаться с продажами`},relativeTime:{today:`сегодня`,daysAgo:`{{count}} д назад`,monthsAgo:`{{count}} мес назад`,yearsAgo:`{{count}} лет назад`}},approvals:{approve:`Утвердить`,reject:`Отклонить`,comment:`Комментарий (необязательно)`,approveSuccess:`Утверждено`,rejectSuccess:`Отклонено`,rejectConfirm:`Отклонить этот запрос на согласование?`},approvalsInbox:{loadMore:`Загрузить ещё`,loadingMore:`Загрузка…`,loadedOf:`Загружено {{loaded}} из {{total}}`,actEscalate:`Эскалация SLA`,systemSlaActor:`Система (SLA)`,reassignBtn:`Передать`,reassignTitle:`Передать согласование другому?`,reassignBody:`Ваше место согласующего перейдёт выбранному человеку — он получит уведомление и сможет действовать сразу.`,reassignTo:`Новый согласующий`,reassignToPlaceholder:`Выберите пользователя или введите email / role:<имя>`,reassignSuccess:`Передано: {{to}}`,requestInfoBtn:`Запросить данные`,requestInfoTitle:`Запросить у заявителя дополнительную информацию?`,requestInfoBody:`Запрос остаётся в ожидании; заявитель получит уведомление и сможет ответить в обсуждении.`,requestInfoPlaceholder:`Что нужно от заявителя?`,requestInfoSent:`Возвращено заявителю за дополнениями`,remindBtn:`Напомнить`,remindSuccess:`Напоминание отправлено: {{count}}`,remindThrottled:`Напоминание уже отправлялось недавно — попробуйте позже.`,replyPlaceholder:`Ответить по этому запросу…`,slaRemaining:`SLA: осталось {{dur}}`,slaOverdue:`SLA просрочен на {{dur}}`,actReassign:`Передано`,reassignFromTo:`от {{from}} к {{to}}`,actRemind:`Напоминание`,actRequestInfo:`Запрошены данные`,actComment:`Комментарий`,stepProgress:`Шаги согласования`,prevRequest:`Назад`,nextRequest:`Далее`,positionOf:`Запрос {{index}} из {{total}}`,progressApprovals:`Согласования — {{got}} из {{need}}`,progressGroups:`Ход визирования — {{got}} из {{need}} групп`,progressEligible:`Доступных согласующих: {{count}}`,progressBar:`Ход решения`,declaredActions:`Действия`,attachmentChip:`Вложение`,attachmentOpenFailed:`Не удалось открыть вложение — попробуйте ещё раз`,approveOneTitle:`Согласовать «{{title}}»?`,approveOneBody:`Запрос будет согласован от вашего имени. Чтобы добавить комментарий или вложение, откройте запрос.`,flowOrigin:`Инициировано потоком`,sortBy:`Сортировка`,sortRecent:`Сначала новые`,sortOldest:`Сначала старые`,sortAmount:`Сумма (по убыванию)`,quickPhrase1:`Согласовано — соответствует требованиям.`,quickPhrase2:`Согласовано с условиями — следите за исполнением.`,quickPhrase3:`Дополните материалы и отправьте повторно.`,title:`Центр согласований`,subtitle:`Просматривайте и обрабатывайте запросы на согласование.`,refresh:`Обновить`,tabMyPending:`Ожидают меня`,tabSubmitted:`Отправленные мной`,tabAll:`Все`,searchPlaceholder:`Поиск по записи, процессу, заявителю…`,clearSearch:`Очистить поиск`,statusFilter:`Статус`,allStatuses:`Все статусы`,processFilter:`Процесс`,allProcesses:`Все процессы`,objectFilter:`Объект`,allObjects:`Все объекты`,filterCount:`{{shown}} из {{total}}`,selected:`выбрано`,actionableCount:`({{count}} доступно)`,selectAll:`Выбрать все`,selectRow:`Выбрать запрос`,colRequest:`Запрос`,colRecord:`Запись`,colRequester:`Заявитель`,colStatus:`Статус`,colWaiting:`Отправлен`,colActions:`Действия`,statusPending:`Ожидает`,statusApproved:`Согласован`,statusRejected:`Отклонён`,statusRecalled:`Отозван`,statusReturned:`Возвращено на доработку`,sendBackBtn:`Вернуть`,sendBackTitle:`Вернуть этот запрос на доработку?`,sendBackBody:`Этот раунд завершается, запись разблокируется, и заявитель может исправить данные. После повторной отправки откроется новый раунд согласования для всех согласующих.`,sendBackPlaceholder:`Что нужно исправить, чтобы запрос можно было согласовать?`,sendBackSuccess:`Возвращено на доработку — заявитель может изменить данные и отправить повторно`,sendBackAutoRejected:`Достигнут лимит доработок — запрос был автоматически отклонён`,actRevise:`Возвращено на доработку`,actResubmit:`Отправлено повторно`,roundChip:`Раунд {{n}}`,returnedHint:`Согласующий вернул вам этот запрос. Запись разблокирована — исправьте данные и отправьте повторно, чтобы начать новый раунд согласования.`,resubmitBtn:`Отправить повторно`,resubmitting:`Повторная отправка…`,resubmitSuccess:`Отправлено повторно — открыт новый раунд согласования`,resubmitPlaceholder:`Что вы изменили?`,editRecordBtn:`Изменить запись`,abandonTitle:`Отказаться от доработки?`,abandonBody:`Запрос будет отозван вместо повторной отправки. Согласование на этом завершается.`,emptyTitle:`Запросов нет`,emptyPending:`Всё обработано — ничего не ожидает вашего решения.`,emptyOther:`Здесь пока пусто.`,emptyViewAll:`Все запросы`,noMatches:`Нет совпадений с текущими фильтрами.`,keyboardHint:`Клавиши: j/k перемещение · Enter открыть · x выбрать · a согласовать · r отклонить`,drawerTitle:`Запрос на согласование`,submittedAgo:`Отправлен {{when}}`,completedAt:`Завершён {{when}}`,waitingOn:`Ожидает решения`,history:`История`,noActions:`Действий пока нет.`,actSubmit:`Отправлен`,actApprove:`Согласован`,actReject:`Отклонён`,actRecall:`Отозван`,rawData:`Исходные данные (JSON)`,copy:`Копировать`,copied:`Скопировано`,copyFailed:`Не удалось скопировать`,overrideActor:`Действовать от другого имени (админ)`,actor:`Идентичность`,auto:`Авто`,overrideHint:`например, role:sales_manager. Оставьте пустым для автоматического определения.`,comment:`Комментарий (необязательно)`,approve:`Согласовать`,approving:`Согласование…`,reject:`Отклонить`,rejecting:`Отклонение…`,recall:`Отозвать`,recalling:`Отзыв…`,cancel:`Отмена`,clear:`Очистить`,approveN:`Согласовать {{count}}`,rejectN:`Отклонить {{count}}`,bulkApproveTitle:`Согласовать {{count}} запросов?`,bulkApproveBody:`Каждый запрос согласуется от вашего имени, и поток продолжится по ветке согласования.`,bulkRejectTitle:`Отклонить {{count}} запросов?`,bulkRejectBody:`Выбранные запросы будут отклонены, заявители получат уведомления.`,bulkApproved:`Согласовано запросов: {{count}}`,bulkRejected:`Отклонено запросов: {{count}}`,bulkPartial:`Успешно: {{ok}}, с ошибкой: {{fail}}: {{which}}`,rejectOneTitle:`Отклонить «{{title}}»?`,rejectOneBody:`Запрос будет отклонён, заявитель получит уведомление.`,rejectTitle:`Отклонить этот запрос?`,rejectBody:`Запрос будет помечен как отклонённый, заявитель получит уведомление.`,recallTitle:`Отозвать этот запрос?`,recallBody:`После отзыва согласующие не смогут действовать, запись будет разблокирована.`,inlineApproved:`«{{title}}» согласован`,inlineRejected:`«{{title}}» отклонён`,approvedFinal:`Согласовано`,approvedWaiting:`Согласовано — ожидаются остальные согласующие`,rejectedToast:`Отклонено`,recalledToast:`Запрос отозван`,whyDisabled:`Действовать могут только назначенные согласующие. Ожидает: {{who}}.`,whyDisabledSubmitter:`Вы отправили этот запрос и можете его отозвать, но согласовать или отклонить могут только назначенные согласующие.`,noActor:`Не удалось определить идентичность`,actionFailed:`Действие не выполнено`,loadFailed:`Не удалось загрузить запрос`,recallUnavailable:`Отзыв недоступен в этой среде.`,requestGone:`Этот запрос больше не существует. Обновите список.`,notAllowed:`У вас нет прав на это действие.`,alreadyDecided:`Этот запрос уже обработан. Обновите список.`,justNow:`только что`,minutesAgo:`{{count}} мин назад`,hoursAgo:`{{count}} ч назад`,daysAgo:`{{count}} дн назад`},preview:{empty:{loadFailedTitle:`Не удалось загрузить предпросмотр черновика`,loadFailedDescription:`Не удалось прочитать слой черновика. Повторите попытку или проверьте соединение.`,notReadyTitle:`«{{app}}» ещё нет в черновике`,notReadyDescription:`Сборка может ещё выполняться или завершилась с ошибкой до подготовки этого приложения. Проверьте статус сборки в диалоге — панель обновится, когда появятся черновики.`,nothingTitle:`Пока нечего предпросматривать`,retry:`Повторить`},draftBar:{messageClean:`Предпросмотр черновика — неопубликованных изменений нет; всё здесь уже действует.`,sampleDataTitle:`Примеры данных появятся после публикации`,sampleDataBody:`Вы просматриваете структуру приложения. Опубликуйте его, чтобы загрузить примеры записей и запустить его.`,publishCta:`Опубликовать и посмотреть`,message:`Предпросмотр черновика — вы видите неопубликованные изменения. Ничего не вступит в силу до публикации.`,publish:`Опубликовать`,publishing:`Публикация…`,exit:`Выйти из предпросмотра`,changes:`Изменения`},changes:{title:`Ожидающие изменения`,description:`Что изменит публикация. Новые элементы добавляются; обновления перезаписывают опубликованную версию.`,loading:`Загрузка ожидающих изменений…`,loadFailed:`Не удалось загрузить ожидающие изменения:`,empty:`Ничего не ожидает — все черновики опубликованы.`,kindNew:`Новое`,kindUpdate:`Обновление`,detailLoading:`Загрузка деталей…`,detailLoadFailed:`Не удалось загрузить детали изменения:`,detailNone:`Различий не обнаружено — черновик совпадает с опубликованной версией.`,detailChangedKeys:`Также изменено:`,confirmNote:`Публикация атомарно выпускает все {{count}} ожидающих черновиков этого пакета.`,publishConfirm:`Опубликовать всё`},unpublishedBar:{message:`Неопубликованное приложение — полностью работает, но видно только создателям. Опубликуйте, чтобы его увидели ваши пользователи.`,publish:`Опубликовать`,publishing:`Публикация…`,published:`Опубликовано! Приложение теперь видно вашим пользователям.`,publishFailed:`Не удалось опубликовать`},history:{button:`История`,title:`История сборок`,description:`Все изменения этого приложения, новые сверху. Любой шаг можно отменить — подтверждать публикацию не нужно.`,loadFailed:`Не удалось загрузить историю:`,loadFailedUnavailable:`Хранилище коммитов временно недоступно — это чтение не выполнено, поэтому история не показана. Повторите попытку через мгновение.`,loading:`Загрузка истории…`,empty:`Истории для этого приложения пока нет.`,revertLabel:`Изменение отменено`,applyLabel:`Изменение сборки`,revert:`отмена`,items:`элементов`,revertAction:`Отменить`,reverted:`Отменено — изменение возвращено.`,revertFailed:`Не удалось отменить`,revertUnavailable:`Хранилище коммитов временно недоступно — отмена могла не примениться. Откройте историю заново и проверьте, прежде чем повторять.`}},filterBuilder:{where:`Где`,and:`И`,or:`ИЛИ`,clearAll:`Очистить всё`,selectField:`Выберите поле`,operator:`Оператор`,selectValue:`Выберите значение`,value:`Значение`,addFilter:`Добавить фильтр`,removeCondition:`Удалить условие`,trueLabel:`Да`,falseLabel:`Нет`,noResults:`Нет результатов`,searchField:`Поиск {{label}}…`,enterId:`Введите ID {{label}}`,operators:{equals:`Равно`,notEquals:`Не равно`,contains:`Содержит`,notContains:`Не содержит`,isEmpty:`Пусто`,isNotEmpty:`Не пусто`,greaterThan:`Больше`,lessThan:`Меньше`,greaterOrEqual:`Больше или равно`,lessOrEqual:`Меньше или равно`,before:`До`,after:`После`,between:`Между`,in:`В списке`,notIn:`Не в списке`}},sortBuilder:{sortBy:`Сортировать по`,thenBy:`Затем по`,selectField:`Выберите поле`,ascending:`A → Z`,descending:`Z → A`,addSort:`Добавить сортировку`,removeSort:`Удалить сортировку`},collaboration:{commentCount:`Комментариев: {{count}}`,commentCountOne:`{{count}} комментарий`,resolvedSuffix:` · Решено`,sortComments:`Сортировка комментариев`,sortOldest:`Сначала старые`,sortNewest:`Сначала новые`,resolve:`Решить`,reopen:`Открыть заново`,justNow:`только что`,minutesAgo:`{{count}} мин назад`,hoursAgo:`{{count}} ч назад`,daysAgo:`{{count}} д назад`,edited:`(изменено)`,reactionCount:`Реакций: {{count}}`,reactionCountOne:`{{count}} реакция`,addThumbsUp:`Поставить лайк`,reply:`Ответить`,reactThumbsUp:`Отреагировать лайком`,reactHeart:`Отреагировать сердечком`,cancelReply:`Отменить ответ`,replyingTo:`Ответ для {{name}}…`,replyingToComment:`Ответ на комментарий…`,commentPlaceholder:`Добавьте комментарий… (@ — упоминание)`,send:`Отправить`,presentUserCount:`Присутствует пользователей: {{count}}`,presentUserCountOne:`Присутствует {{count}} пользователь`,moreUserCount:`Ещё пользователей: {{count}}`,moreUserCountOne:`Ещё {{count}} пользователь`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`активен`,statusIdle:`бездействует`,statusAway:`отошёл`},wizard:{missingRequired:`Заполните обязательные поля: {{fields}}`},appManagement:{title:`Приложения`,subtitle:`Управление всеми настроенными приложениями`,newApp:`Новое приложение`,searchLabel:`Поиск приложений`,searchPlaceholder:`Поиск приложений…`,selectedCount:`Выбрано: {{n}}`,bulkEnable:`Включить`,bulkDisable:`Отключить`,selectAll:`Выбрать все ({{n}})`,empty:`Приложения не найдены.`,defaultBadge:`По умолчанию`,active:`Активно`,inactive:`Неактивно`,selectApp:`Выбрать {{name}}`,openApp:`Открыть приложение`,openAppNamed:`Открыть {{name}}`,editApp:`Редактировать приложение`,editAppNamed:`Редактировать {{name}}`,editWithAi:`Редактировать с ИИ`,editWithAiNamed:`Редактировать {{name}} с ИИ`,enableApp:`Включить приложение`,disableApp:`Отключить приложение`,enableAppNamed:`Включить {{name}}`,disableAppNamed:`Отключить {{name}}`,setDefault:`Установить по умолчанию`,setDefaultNamed:`Установить {{name}} по умолчанию`,deleteApp:`Удалить приложение`,deleteAppNamed:`Удалить {{name}}`,confirmDelete:`Нажмите ещё раз для подтверждения удаления`,confirmDeleteNamed:`Подтвердить удаление {{name}}`,toast:{noClient:`Не удаётся подключиться к службе метаданных`,unknownError:`неизвестная ошибка`,appEnabled:`{{name}} включено`,appDisabled:`{{name}} отключено`,toggleFailed:`Не удалось изменить состояние приложения: {{reason}}`,setDefaultDone:`{{name}} установлено по умолчанию`,setDefaultFailed:`Не удалось установить приложение по умолчанию: {{reason}}`,appDeleted:`{{name}} удалено`,deleteFailed:`Не удалось удалить приложение: {{reason}}`,bulkEnabled:`Включено приложений: {{n}}`,bulkDisabled:`Отключено приложений: {{n}}`,bulkFailed:`Не удалось для {{n}}: {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:`; `,bulkOperationFailed:`Массовая операция не выполнена: {{reason}}`}}},ar:{impersonation:{banner:{message:`أنت تنتحل هوية {{user}} — يُسجَّل كل إجراء باسمه.`,startedBy:`بدأها المسؤول {{admin}}.`,stop:`إنهاء انتحال الهوية`,stopping:`جارٍ الإنهاء…`,stopFailed:`تعذّر إنهاء انتحال الهوية: {{reason}}`,notRestored:`قبل الخادم الطلب لكنه لم يستعد جلسة المسؤول — ما زلت تنتحل هوية {{user}}. سجّل الخروج ثم الدخول مرة أخرى لإنهائها.`}},capability:{label:{manage_users:`إدارة المستخدمين`,manage_org_users:`إدارة مستخدمي المؤسسة`,manage_metadata:`إدارة البيانات الوصفية`,manage_platform_settings:`إدارة إعدادات المنصة`,setup_access:`الوصول إلى الإعداد`,setup_write:`كتابة الإعدادات`,studio_access:`الوصول إلى Studio`},group:{platform:`منصة`,org:`منظمة`,other:`أخرى`}},perm:{facet:{none:`لا شيء`,more:`+{{count}} المزيد`,objects:`{{count}} كائن(كائنات)`,objects_one:`{{count}} كائن`,fields:`{{count}} قاعدة(قواعد) حقول`,fields_one:`{{count}} قاعدة حقول`,rls:`{{count}} سياسة(سياسات) RLS`,rls_one:`{{count}} سياسة RLS`,tabs:`{{count}} قاعدة(قواعد) تبويب`,tabs_one:`{{count}} قاعدة تبويب`,adminScope:`تم تكوين الإدارة المفوَّضة`,designInStudio:`التصميم في Studio →`,designInStudioHint:`التصميم في Studio`}},lookup:{recentlyUsed:`المستخدمة مؤخرًا`,allResults:`كل النتائج`,createNew:`إنشاء جديد`,createNamed:`إنشاء «{{name}}»`,showingResults:`عرض {{shown}} من {{total}} نتيجة`,showAllResults:`عرض كل النتائج ({{count}})`,selectedBadge:`محدد`,browseAll:`استعراض كل السجلات`,remove:`إزالة {{label}}`,selectFirst:`اختر {{fields}} أولاً`,selectRecord:`اختيار سجل`,recordCount:`{{count}} سجل`,recordCountOne:`سجل واحد`,pageOf:`صفحة {{current}} من {{total}}`,filters:`عوامل التصفية`,clear:`مسح`,yes:`نعم`,filterPlaceholder:`تصفية {{label}}`,prevPage:`الصفحة السابقة`,nextPage:`الصفحة التالية`,jumpToPage:`الانتقال إلى الصفحة`,retry:`إعادة المحاولة`,loading:`جارٍ التحميل…`,noOptions:`لا توجد خيارات`,noRecords:`لا توجد سجلات`},common:{addToFavorites:`إضافة إلى المفضلة`,removeFromFavorites:`إزالة من المفضلة`,loading:`جاري التحميل…`,save:`حفظ`,cancel:`إلغاء`,delete:`حذف`,edit:`تعديل`,create:`إنشاء`,filter:`تصفية`,reset:`إعادة تعيين`,confirm:`تأكيد`,close:`إغلاق`,back:`رجوع`,next:`التالي`,previous:`السابق`,submit:`إرسال`,refresh:`تحديث`,export:`تصدير`,import:`استيراد`,yes:`نعم`,no:`لا`,ok:`موافق`,actions:`إجراءات`,more:`المزيد`,selectAll:`تحديد الكل`,clearAll:`مسح الكل`,noData:`لا توجد بيانات`,noResults:`لم يتم العثور على نتائج`,required:`مطلوب`,optional:`اختياري`,selectOption:`اختر خياراً`,select:`اختر…`,openChat:`فتح المحادثة`,closeChat:`إغلاق المحادثة`,closePanel:`إغلاق اللوحة`,resizeDrawer:`تغيير عرض اللوحة`,itemCount:`{{count}} عناصر`,itemCountOne:`{{count}} عنصر`,toggleSidebar:`تبديل الشريط الجانبي`,package:`الحزمة`,done:`تم`,editInStudio:`التعديل في Studio`,record:`سجل`,retry:`إعادة المحاولة`,printDialogHint:`يفتح مربع حوار الطباعة في المتصفح (ليس تصديرًا إلى PDF)`},actions:{decisionOutput:{help:`يُمرَّر إلى التدفق كمخرج للقرار.`,helpMultiValue:`يُمرَّر إلى التدفق كمخرج للقرار. افصل بين القيم المتعددة بفواصل.`},resultDialog:{defaultTitle:`احفظ هذه القيمة الآن`,acknowledge:`لقد حفظتها`,copyAll:`نسخ الكل`}},validation:{required:`{{field}} مطلوب`,minLength:`{{field}} يجب أن يكون {{min}} حرفاً على الأقل`,maxLength:`{{field}} يجب ألا يتجاوز {{max}} حرفاً`,min:`{{field}} يجب أن يكون {{min}} على الأقل`,max:`{{field}} يجب ألا يتجاوز {{max}}`,email:`يرجى إدخال بريد إلكتروني صالح`,url:`يرجى إدخال رابط صالح`,pattern:`صيغة {{field}} غير صالحة`,formInvalid:`يرجى التحقق من الحقول المميزة: {{fields}}`,formInvalidJoiner:`، `,unique:`{{field}} يجب أن يكون فريداً`,type:`{{field}} يجب أن يكون {{type}} صالحاً`},form:{noPermissionToSave:`ليس لديك إذن لحفظ هذا السجل.`,submitFailed:`تعذّر الحفظ. يرجى المحاولة مرة أخرى.`,discardTitle:`تجاهل التغييرات؟`,discardMessage:`لديك تغييرات غير محفوظة. إذا أغلقت هذا النموذج الآن، ستفقد تعديلاتك.`,dialogDescriptionFallback:`املأ حقول النموذج ثم أرسل أو ألغِ.`,keepEditing:`متابعة التحرير`,discard:`تجاهل`,conflictTitle:`تعارض في الحفظ`,conflictMessage:`قام شخص آخر بتغيير هذا السجل أثناء تحريرك. الكتابة فوقه ستستبدل تغييراته بتغييراتك.`,conflictLatestVersion:`وقت حفظه: {{time}}`,conflictOverwrite:`الكتابة فوقه`,addItem:`إضافة عنصر`,removeItem:`إزالة عنصر`,fieldRequired:`هذا الحقل مطلوب`,invalidFormat:`صيغة غير صالحة`,saveSuccess:`تم الحفظ بنجاح`,saveError:`فشل في الحفظ`,unsavedChanges:`لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟`,stepOf:`الخطوة {{current}} من {{total}}`,createTitle:`إنشاء {{object}}`,editTitle:`تعديل {{object}}`,viewTitle:`عرض {{object}}`,createTargetOrg:`الإنشاء في {{org}}`,saveRecord:`حفظ السجل`,create:`إنشاء`,update:`تحديث`,createSuccess:`تم إنشاء {{object}}`,updateSuccess:`تم تحديث {{object}}`,deleteSuccess:`تم حذف {{object}}`,fullscreen:{title:`تحرير النص`,description:`حرّر قيمة النص الكاملة، ثم احفظ التغييرات أو ألغِها.`,done:`تم`,toggle:`تحرير {{label}} بملء الشاشة`,textFallback:`النص`}},fields:{image:{upload:`رفع صورة`,addMore:`إضافة المزيد من الصور`,uploading:`جارٍ الرفع…`,imageAlt:`صورة {{index}}`,crop:`قص الصورة {{index}}`,remove:`إزالة الصورة {{index}}`,enlarge:`تكبير {{name}}`,preview:`معاينة الصورة`,previous:`الصورة السابقة`,next:`الصورة التالية`,counter:`{{current}} / {{total}}`},relativeDate:{overdue:`متأخر {{count}} يوم`},file:{dragDropHere:`اسحب الملفات وأفلتها هنا`,dropFilesHere:`أفلت الملفات هنا`,browseHint:`أو انقر للتصفح`,browseHintCamera:`أو انقر للتصفح • استخدم زر الكاميرا أدناه`,takePhoto:`التقاط صورة`,takeSelfie:`التقاط صورة ذاتية`,cameraCapture:`التقاط بالكاميرا`,uploading:`جارٍ الرفع…`,uploadingPct:`جارٍ الرفع… ({{pct}}%)`,fileFallback:`ملف`,upload:`رفع`,remove:`إزالة {{name}}`,exceedsMaxSize:`"{{name}}" يتجاوز الحجم الأقصى ({{max}} ميغابايت)`,uploadFailed:`فشل رفع "{{name}}": {{error}}`},richText:{format:`التنسيق: {{format}}`,basicEditorHint:`محرر النص الغني (أساسي)`,placeholder:`اكتب شيئاً…`},options:{empty:`لا توجد خيارات متاحة`,selectFirst:`اختر {{fields}} أولاً`},objectRef:{loading:`جارٍ تحميل الكائنات…`,placeholder:`اختر كائناً`,search:`بحث في الكائنات…`,empty:`لم يتم العثور على كائنات`},recipient:{selectTypeFirst:`اختر نوع المستلم أولاً.`,loading:`جارٍ التحميل…`,search:`بحث…`,empty:`لا توجد نتائج مطابقة`,select:`اختر مستلماً`,selectUser:`اختر مستخدماً`,selectTeam:`اختر فريقاً`,selectBusinessUnit:`اختر وحدة عمل`,selectPosition:`اختر منصباً`,selectUnitAndSubordinates:`اختر وحدة عمل`},filterCondition:{selectObjectFirst:`اختر كائناً أولاً.`,noCriteria:`لا توجد معايير — لا تشارك هذه القاعدة أي شيء`,criteriaRequired:`أضف شرطًا واحدًا على الأقل. القاعدة بدون معايير ستشارك كل السجلات، لذا لا يمكن حفظها.`,invalidJson:`JSON غير صالح — لن تطابق القاعدة أي سجل حتى يتم إصلاحه.`,jsonOnly:`لا يمكن تحرير هذا المعيار إلا بصيغة JSON`,editAsJson:`التحرير بصيغة JSON`,useVisualBuilder:`استخدام المُنشئ المرئي`},tags:{placeholder:`اكتب واضغط Enter للإضافة…`},textarea:{characterCount:`عدد الأحرف: {{count}} من {{max}}`,charactersRemaining:`الأحرف المتبقية: {{count}}`}},table:{rowsPerPage:`صفوف في الصفحة`,showing:`عرض {{from}} إلى {{to}} من {{total}}`,noRows:`لا توجد صفوف للعرض`,sortAsc:`ترتيب تصاعدي`,sortDesc:`ترتيب تنازلي`,filterColumn:`تصفية {{column}}`,columns:`الأعمدة`,exportCSV:`تصدير CSV`,exportExcel:`تصدير Excel`,selectRow:`تحديد صف`,selectAllRows:`تحديد جميع الصفوف`,expandRow:`توسيع الصف`,collapseRow:`طي الصف`,hideColumn:`إخفاء العمود`,freezeColumn:`تجميد العمود`,unfreezeColumn:`إلغاء تجميد العمود`,pageInfo:`صفحة {{current}} من {{total}}`,totalRecords:`{{count}} إجمالي`,noResults:`لا نتائج`,noResultsHint:`حاول تعديل الفلاتر أو مصطلحات البحث.`,cancelAll:`إلغاء الكل`,saveAll:`حفظ الكل ({{count}})`,addRecord:`إضافة سجل`,open:`فتح`,search:`بحث…`,modified:`{{count}} صف(صفوف) معدّل(ة)`,saveFailed:`فشل الحفظ`,selected:`{{count}} محدد(ة)`,edit:`تعديل`,delete:`حذف`},grid:{bulkSelected:`تم تحديد {{count}}`,bulkSelectedAllMatches:`تم تحديد {{count}} (كل النتائج المطابقة)`,bulkClear:`إلغاء التحديد`,bulkAllOnPage:`تم تحديد جميع العناصر ({{count}}) في هذه الصفحة.`,bulkSelectAllMatching:`تحديد كل النتائج المطابقة ({{count}})`,bulkAllMatchingSelected:`تم تحديد جميع السجلات المطابقة ({{count}}).`,bulk:{confirmDefault:`سيُطبَّق هذا على {{count}} من السجلات.`,overLimit:`التحديد ({{count}}) يتجاوز حد الإجراء ({{limit}}). قلّل التحديد للمتابعة.`,affectedRecords:`السجلات المتأثرة ({{count}}):`,skippedIneligible:`{{count}} من السجلات المحددة غير مؤهلة لهذا الإجراء وسيتم تخطيها.`,rowFallback:`الصف {{index}}`,andMore:`… و{{count}} أخرى`,processed:`تمت معالجة {{count}} / {{total}}`,processedFailed:` · فشل {{count}}`,undonePrefix:`تم التراجع — `,succeeded:`نجح {{count}} / {{total}}`,resultFailed:` · فشل {{count}}`,retry:`إعادة المحاولة`,downloadErrorCsv:`تنزيل ملف CSV للأخطاء`,cancel:`إلغاء`,back:`رجوع`,next:`التالي`,run:`تشغيل`,running:`قيد التشغيل…`,undo:`تراجع`,undoing:`جارٍ التراجع…`,done:`تم`,selectPlaceholder:`اختر…`,loading:`جارٍ التحميل…`},actions:`إجراءات`,edit:`تعديل`,delete:`حذف`,export:`تصدير`,exportAs:`تصدير كـ {{format}}`,loading:`جاري تحميل الشبكة…`,errorLoading:`خطأ في تحميل الشبكة`,pullToRefresh:`اسحب للتحديث`,refreshing:`جاري التحديث…`,openRecord:`فتح السجل`,rowHeight:`ارتفاع الصف: {{mode}}`,openMenu:`فتح القائمة`,empty:`فارغ`,yes:`نعم`,no:`لا`,systemFields:`النظام`,summary:{pattern:`{{label}}: {{value}}`,count:`العدد`,countEmpty:`فارغة`,countFilled:`ممتلئة`,countUnique:`فريدة`,percentEmpty:`فارغة`,percentFilled:`ممتلئة`,sum:`المجموع`,avg:`المتوسط`,min:`الأدنى`,max:`الأعلى`},toolbar:{densityMode:`الكثافة`,densityCompact:`مضغوط`,densityComfortable:`عادي`,densitySpacious:`فسيح`,densityCycleHint:`{{label}} (انقر للتغيير)`,densityCycleShortHint:`انقر للتغيير`},import:{downloadTemplate:`تنزيل القالب`,downloadTemplateHint:`احصل على ملف CSV بالأعمدة الصحيحة (الحقول المطلوبة معلَّمة بـ *).`,templateFileName:`{{object}}-import-template`,autoMatched:`تمت المطابقة تلقائيًا`,autoMatchedSummary:`تمت مطابقة {{count}} عمودًا تلقائيًا — راجعها وعدّلها أدناه.`,confidence:{high:`ثقة عالية`,medium:`ثقة متوسطة`,low:`ثقة منخفضة`},asyncQueued:`في الانتظار — يجري تجهيز الاستيراد…`,asyncProcessing:`جارٍ استيراد {{processed}} من {{total}} صفًا… {{progress}}%`,asyncLargeHint:`هذا الملف كبير، لذلك سيتم استيراده في الخلفية.`,largeSampleNotice:`معاينة أول {{shown}} صفًا من أصل {{total}}.`,cancelImport:`إلغاء الاستيراد`,importCancelled:`تم إلغاء الاستيراد`,resultsTruncated:`عرض نتائج أول {{count}} صفًا (من أصل {{total}}).`,createdCount:`تم إنشاء {{count}}`,updatedCount:`تم تحديث {{count}}`,downloadFailed:`تنزيل الصفوف الفاشلة`,options:`خيارات الاستيراد`,writeMode:`عند تطابق صف مع سجل موجود`,writeModeOpt:{insert:`إنشاء سجل جديد دائمًا`,update:`تحديث الموجود (تخطٍّ عند عدم التطابق)`,upsert:`التحديث عند التطابق، وإلا الإنشاء`},matchFields:`المطابقة حسب`,matchFieldsPlaceholder:`اختر حقول المطابقة…`,matchFieldsHint:`تتم مطابقة الصفوف بالسجلات الموجودة عبر هذه الحقول.`,needMatchFields:`اختر حقلًا واحدًا على الأقل للمطابقة.`,matchOnlyField:`(للمطابقة فقط)`,optCreateOptions:`الاحتفاظ بقيم الخيارات غير المعروفة`,optRunAutomations:`تشغيل الأتمتة والمشغّلات`,optTreatHistorical:`الاستيراد كبيانات تاريخية`,optTreatHistoricalHint:`(استيراد السجلات المكتملة كما هي — تخطي فحوصات آلة الحالات والاحتفاظ بالطوابع الزمنية والمؤلف الأصليين بدل ختمها الآن)`,optSkipBlankKey:`تخطي الصفوف التي تكون قيمة المطابقة فيها فارغة`,optBackground:`الاستيراد في الخلفية`,optBackgroundHint:`(يعمل كمهمة قابلة للتراجع)`,validate:`التحقق من البيانات`,validating:`جارٍ التحقق…`,validateHint:`التحقق من كل صف على الخادم قبل الاستيراد.`,validatePassed:`جميع الصفوف ({{ok}}) صالحة.`,validateFailed:`{{ok}} صالحة، و{{errors}} بها أخطاء.`,errorRowPrefix:`الصف {{row}}: `,referenceNotFound:`لا يوجد سجل مطابق لـ «{{value}}»`,referenceAmbiguous:`«{{value}}» يطابق أكثر من سجل — استخدم قيمة فريدة أو معرّف السجل`,invalidBoolean:`«{{value}}» ليست قيمة صواب/خطأ صالحة`,invalidNumber:`«{{value}}» ليست رقمًا صالحًا`,invalidDate:`«{{value}}» ليست تاريخًا صالحًا`,invalidOption:`«{{value}}» ليست ضمن الخيارات المسموح بها`,requiredValue:`هذا الحقل مطلوب`,matchAmbiguous:`يطابق أكثر من سجل موجود — استخدم قيمة فريدة أو معرّف السجل`,history:`السجل`,historyBack:`العودة إلى الاستيراد`,historyDescription:`عمليات الاستيراد الأخيرة لهذا الكائن.`,historyHint:`مهام الاستيراد في الخلفية، الأحدث أولًا.`,historyRefresh:`تحديث`,historyLoading:`جارٍ التحميل…`,historyEmpty:`لا توجد عمليات استيراد بعد.`,historyUnsupported:`سجل الاستيراد غير متاح لمصدر البيانات هذا.`,historyColStatus:`الحالة`,historyColRows:`الصفوف`,historyColResult:`النتيجة`,historyColTime:`الوقت`,errorCount:`{{count}} من الأخطاء`,undoImport:`التراجع عن الاستيراد`,undoing:`جارٍ التراجع…`,undoConfirm:`هل تريد التراجع عن هذا الاستيراد؟ ستُحذف السجلات التي أنشأها وتُستعاد السجلات التي حدّثها إلى قيمها السابقة.`,reverted:`تم التراجع`,jobStatus:{pending:`قيد الانتظار`,running:`قيد التنفيذ`,succeeded:`نجح`,failed:`فشل`,cancelled:`أُلغي`},legacyReferenceBlocked:`تم حظر الاستيراد: {{fields}} حقول علاقات تحتاج إلى مسار الاستيراد على الخادم لتحويل الأسماء إلى معرّفات سجلات، وهذا الاتصال لا يدعم ذلك. استيرادها كنص عادي سيُفسد البيانات. حدّث الخادم/العميل، أو ألغِ ربط هذه الأعمدة واستوردها على حدة.`,missingRequiredHint:`لا يمكن المتابعة — حقول مطلوبة غير مرتبطة: {{fields}}. أضف عمودًا مطابقًا إلى ملفك، أو ارجع وارفع ملفًا يتضمنه.`,legacyFallbackNotice:`تم الاستيراد عبر وضع توافقي: هذا الاتصال لا يدعم مسار الاستيراد على الخادم، لذلك حُفظت القيم كنص دون تحويل للأنواع على الخادم. حدّث الخادم/العميل للحصول على دعم الاستيراد الكامل (تحويل الأنواع والبحث عن العلاقات).`,title:`استيراد {{object}}`,notAllowed:`هذا الكائن غير متاح للاستيراد.`,stepUpload:`رفع`,stepMapping:`تعيين`,stepPreview:`معاينة`,uploadDescription:`ارفع ملف CSV أو Excel، أو الصق من جدول بيانات للبدء.`,mappingDescription:`عيّن الأعمدة إلى حقول الكائن.`,previewDescription:`راجع البيانات قبل الاستيراد.`,dragDrop:`اسحب وأفلت ملف CSV أو Excel هنا، أو انقر للتصفح`,browseFiles:`تصفح الملفات`,parsing:`جارٍ التحليل…`,pasteHint:`أو الصق (Ctrl/⌘+V) صفوفًا منسوخة من Excel أو Google Sheets`,legacyXls:`ملفات .xls القديمة غير مدعومة — يرجى إعادة حفظها بصيغة .xlsx.`,unsupportedFile:`نوع الملف غير مدعوم. استخدم CSV أو TSV أو Excel (.xlsx).`,parseFailed:`تعذّر قراءة هذا الملف. يرجى التحقق من التنسيق والمحاولة مرة أخرى.`,fileNeedsHeader:`يجب أن يحتوي الملف على صف رأسي وصف بيانات واحد على الأقل.`,mappingTemplate:`قالب التعيين:`,chooseTemplate:`اختر قالباً…`,noSavedTemplates:`لا قوالب محفوظة`,noneOption:`— لا شيء —`,saveCurrent:`حفظ الحالي`,templateName:`اسم القالب`,save:`حفظ`,deleteTemplate:`حذف القالب`,savedMapping:`التعيين المحفوظ:`,chooseSavedMapping:`اختر تعييناً محفوظاً…`,manualMapping:`— تعيين الأعمدة يدويًا —`,transform:`التحويل`,savedMappingHint:`يطبّق التعيين "{{name}}" إعادة التسمية + التحويلات + تحويل الأنواع على الخادم. تعيين الأعمدة للقراءة فقط.`,savedMappingPreviewNote:`تعرض المعاينة الأعمدة المصدر لديك؛ وعند الاستيراد يطبّق التعيين "{{name}}" إعادة التسمية والتحويلات وتحويل الأنواع على الخادم.`,csvColumn:`العمود`,mapsTo:`يُعيَّن إلى`,typeMismatch:`يبدو أنه {{type}}`,type:{number:`رقم`,boolean:`قيمة منطقية`,date:`تاريخ`,datetime:`التاريخ والوقت`,text:`نص`},status:`الحالة`,skipColumn:`تخطي العمود`,skip:`— تخطي —`,mapped:`مُعيَّن`,skipped:`مُتخطَّى`,rowsWithErrors:`{{count}} صف(صفوف) بها أخطاء`,rowsCorrected:`{{count}} صف(صفوف) تم تصحيحها`,clickToFix:`— انقر على خلية مميزة للتعديل.`,showingRows:`عرض {{shown}} من {{total}} صف`,importing:`جارٍ الاستيراد… {{progress}}%`,importComplete:`اكتمل الاستيراد`,imported:`{{count}} مُستورَد(ة)`,skippedCount:`{{count}} مُتخطَّى(ة)`,moreErrors:`…و{{count}} خطأ(أخطاء) أخرى`,cancel:`إلغاء`,back:`رجوع`,next:`التالي`,close:`إغلاق`,importNRows:`استيراد {{count}} صف`,importingProgress:`جارٍ الاستيراد…`,requiredMark:`*`,required:`مطلوب`,invalidType:`{{type}} غير صالح`}},calendar:{today:`اليوم`,month:`شهر`,week:`أسبوع`,day:`يوم`,agenda:`جدول أعمال`,allDay:`طوال اليوم`,noEvents:`لا توجد أحداث`,newEvent:`حدث جديد`,moreEvents:`+{{count}} المزيد`},list:{firstRunTitle:`لا يوجد شيء هنا بعد`,firstRunMessage:`أنشئ سجلك الأول للبدء.`,noMatches:`لا توجد سجلات مطابقة`,noMatchesMessage:`لا توجد سجلات تطابق عوامل التصفية أو البحث الحالية. حاول تعديلها أو مسحها.`,loadErrorTitle:`تعذّر تحميل السجلات`,loadErrorMessage:`حدث خطأ أثناء تحميل هذه البيانات. تحقق من اتصالك وحاول مرة أخرى.`,loadErrorForbiddenTitle:`ليس لديك صلاحية الوصول`,loadErrorForbiddenMessage:`ليس لديك إذن لعرض هذه السجلات. تواصل مع المسؤول إذا كنت تعتقد أنه يجب أن يكون لديك وصول.`,loadErrorUnauthorizedTitle:`يلزم تسجيل الدخول`,loadErrorUnauthorizedMessage:`انتهت صلاحية جلستك أو تم تسجيل خروجك. سجّل الدخول مرة أخرى لعرض هذه السجلات.`,loadErrorRejectedTitle:`تم رفض استعلام طريقة العرض هذه`,loadErrorRejectedMessage:`تعذّر على الخادم معالجة عامل التصفية أو خيارات الاستعلام لطريقة العرض هذه. مسح عوامل التصفية يحل المشكلة عادةً؛ وإذا كانت طريقة العرض محفوظة بهذا الشكل، فيجب على المسؤول تصحيحها.`,loadErrorApiDisabledTitle:`هذا الكائن غير متاح عبر واجهة API`,loadErrorApiDisabledMessage:`لا يمكن لهذه الصفحة تحميل سجلاتها لأن الكائن غير معروض عبر واجهة API. هذا إعداد خاص بالكائن نفسه وليس صلاحية — يجب على المسؤول تفعيل الوصول عبر API حتى تعمل هذه الصفحة.`,retry:`إعادة المحاولة`,managedBy:{system:{title:`لا يوجد شيء هنا بعد`,message:`تظهر الإدخالات تلقائيًا عند تنفيذ الإجراء المصدر (مثل إرسال للموافقة، أو المشاركة، أو الدعوة). نفّذ أحدها على سجل مصدر لإنشاء صف.`},appendOnly:{title:`لم تُسجَّل أي أحداث`,message:`هذا سجل تدقيق غير قابل للتعديل. تكتب المنصة الصفوف عند وقوع الأحداث — يمكنك تصدير السجل لكن لا يمكنك إنشاء إدخالات من هنا.`},betterAuth:{title:`لا توجد سجلات هوية`,message:`ينشئ مزوّد المصادقة هذه السجلات — من خلال تسجيل الدخول والتزويد وإجراءات الأمان — ولا تُضاف يدويًا من هنا.`},betterAuthUser:{title:`لا يوجد مستخدمون بعد`,message:`يزوّد مزوّد المصادقة حسابات المستخدمين، ولا تُنشأ من هنا. ادعُ زملاءك إلى مؤسستك وسيظهرون تلقائيًا عند أول تسجيل دخول (التزويد الفوري عبر SSO). أما مستخدمو التطبيق النهائيون فيُضافون عند تسجيلهم عبر تطبيقك.`},betterAuthTeam:{title:`لا توجد فرق بعد`,message:`تجمع الفرق الأعضاء داخل المؤسسة. أنشئ فريقًا عبر «إنشاء فريق»، أو تأتي الفرق من خلال إجراءات تزويد المؤسسات و SSO لدى مزوّد المصادقة.`}},refresh:`تحديث`,loading:`جارٍ تحميل السجلات…`,recordCount:`{{count}} سجلات`,recordCountOne:`{{count}} سجل`,addRecord:`إضافة سجل`,tabs:`علامات التبويب`,allRecords:`جميع السجلات`,search:`بحث`,filter:`تصفية`,filterRecords:`تصفية السجلات`,sort:`ترتيب`,sortRecords:`ترتيب السجلات`,sortByIdSuffix:`(حسب المعرّف)`,sortRelationalHint:`الأعمدة التي تشير إلى سجل آخر غير مدرجة هنا: يمكن ترتيبها حسب المعرّف المخزَّن فقط، وليس حسب الاسم الظاهر في الخلية. للترتيب حسب ذلك الاسم، أضِف الاسم إلى هذا الكائن نفسه (إلغاء التطبيع) كحقل مخزَّن يُكتب عند تغيّر المصدر، ثم رتّب حسبه. وليس حقل صيغة: فهو افتراضي، ولا يُخزَّن له أي عمود، ويرفض الخادم الترتيب حسبه.`,resetSortToDefault:`إعادة التعيين إلى الترتيب الافتراضي للعرض`,group:`تجميع`,groupBy:`تجميع حسب`,export:`تصدير`,exportAs:`تصدير كـ {{format}}`,color:`لون`,rowColor:`لون الصف`,colorByField:`تلوين حسب الحقل`,clear:`مسح`,none:`لا شيء`,hideFields:`إخفاء الحقول`,noItems:`لم يتم العثور على عناصر`,noItemsMessage:`لا توجد سجلات للعرض. حاول تعديل الفلاتر أو إضافة بيانات جديدة.`,showAll:`عرض الكل`,pullToRefresh:`اسحب للتحديث`,refreshing:`جارٍ التحديث…`,share:`مشاركة`,print:`طباعة`,hideFieldsTitle:`إخفاء الحقول`,dataLimitReached:`يتم عرض أول {{limit}} سجل. قد تتوفر بيانات إضافية.`,viewSettings:`إعدادات العرض`,viewSettingsHint:`التجميع واللون والكثافة والحقول المرئية.`,addGroup:`إضافة حقل مجموعة`,collapsedByDefault:`مطوي افتراضياً`,removeGroup:`إزالة`,inlineEditShort:`تحرير مضمّن`,inlineEditLabel:`حرّر السجلات مباشرة (انقر خلية للتحرير)`,recordEditingTitle:`تحرير السجلات`},managedByBadge:{systemWritable:{short:`مخطط المنصة`,title:`تحدده المنصة وقابل للكتابة من المسؤول`,body:`تحدد المنصة مخطط هذا الكائن، لكن صفوفه لك تنشئها وتحررها هنا. ومن يحق له الكتابة تحدده الإدارة المفوَّضة والأمان على مستوى السجل، لا هذه الشارة.`},config:{short:`إعدادات المسؤول`,title:`تكوين المسؤول`,body:`تحدد هذه الصفوف سلوك المنصة أثناء التشغيل. أنشئها هنا؛ وتُخزَّن بيانات التشغيل الناتجة في جدول منفصل.`},system:{short:`يديره النظام`,title:`تديره المنصة`,body:`تُنشأ الصفوف تلقائيًا عند تشغيل الإجراءات على السجل المصدر. القائمة أدناه واجهة مراقبة للقراءة فقط — وتوجد إجراءات مستوى الصف (اعتماد، استرجاع، إعادة إرسال، …) على كل صف.`},appendOnly:{short:`للقراءة فقط · سجل التدقيق`,title:`سجل تاريخي للقراءة فقط`,body:`سجل تدقيق غير قابل للتغيير. لا يمكن إنشاء الصفوف أو تعديلها أو حذفها من الواجهة — تكتبها المنصة عند وقوع الأحداث. استخدم التصدير للتنزيل لمراجعة الامتثال.`},betterAuth:{short:`الهوية`,title:`يديره مزوّد الهوية`,body:`مخطط هذا الكائن مملوك لـ {{provider}}. التعديلات المباشرة تتجاوز تجزئة كلمات المرور والتحقق من الجلسات وفحوصات المصادقة الثنائية وخطافات التدقيق. أدر هذه السجلات عبر تدفقات تسجيل الدخول والدعوة والأمان لدى مزوّد المصادقة.`}},kanban:{uncategorized:`غير مصنّف`,columns:`أعمدة`,addCard:`إضافة بطاقة`,addColumn:`إضافة عمود`,moveCard:`نقل بطاقة`,deleteCard:`حذف بطاقة`,deleteColumn:`حذف عمود`,noCards:`لا بطاقات`,cardTitlePlaceholder:`أدخل عنوان البطاقة…`,requiredFieldsTitle:`أكمل الحقول المطلوبة`,requiredFieldsDescription:`يجعل هذا النقل الحقول أدناه مطلوبة. أكملها للمتابعة.`},timeline:{bucket:{overdue:`متأخر`,today:`اليوم`,tomorrow:`غداً`,thisWeek:`هذا الأسبوع`,nextWeek:`الأسبوع القادم`,later:`لاحقاً`,noDate:`بدون تاريخ`,unassigned:`غير معين`},scale:{week:`الأسبوع {{n}}`,quarter:`الربع {{quarter}} {{year}}`},gantt:{rowLabel:`العناصر`}},gantt:{viewMode:{day:`يوم`,week:`أسبوع`,month:`شهر`,quarter:`ربع سنة`,year:`سنة`},row:{expand:`توسيع`,collapse:`طي`,open:`فتح التفاصيل`},aria:{taskList:`قائمة المهام`},tooltip:{days:`ي`},menu:{view:`عرض التفاصيل`,edit:`تحرير مباشر`,delete:`حذف`,addPredecessor:`إضافة مهمة سابقة…`,addSuccessor:`إضافة مهمة لاحقة…`,removeDependency:`إزالة التبعية`,noCandidates:`لا توجد مهام متاحة`,searchTasks:`البحث في المهام…`},delete:{title:`حذف هذه المهمة؟`,body:`ستُحذف «{{title}}» نهائيًا. لا يمكن التراجع عن هذا الإجراء.`,cancel:`إلغاء`,confirm:`حذف`,deleting:`جارٍ الحذف…`},drawer:{fallbackTitle:`تفاصيل المهمة`},linkType:{fs:`نهاية → بداية`,ss:`بداية → بداية`,ff:`نهاية → نهاية`,sf:`بداية → نهاية`},linkEnd:{start:`بداية`,end:`نهاية`},link:{rejected:{self:`لا يمكن أن تعتمد المهمة على نفسها.`,locked:`هذا الصف مقفل ولا يمكنه استقبال تبعية جديدة.`,group:`لا يمكن لصف التلخيص استقبال تبعية — اربط إحدى مهامه بدلاً من ذلك.`,cycle:`هذا الرابط سينشئ تبعية دائرية.`}},conflict:{title:`تعارض في الجدولة`,body:`يتعارض هذا النقل مع قيود التبعية. هل تريد إعادة جدولة {{count}} من المهام المتأثرة تلقائيًا؟`,confirm:`إعادة الجدولة تلقائيًا`,cancel:`الإبقاء كما هو`},autoScheduleDlg:{title:`الجدولة التلقائية`,body:`هل تريد تأخير {{count}} من المهام لتلبية روابط التبعية؟`,skipped:`{{count}} من المهام المقفلة تخالف الروابط أيضًا وقد تم تخطيها.`,confirm:`تطبيق`,cancel:`إلغاء`,none:`جميع التبعيات مستوفاة — لا شيء لإعادة جدولته.`},resource:{header:`المورد`,peak:`الذروة`,over:`محمّل بإفراط`,empty:`لا توجد مهام لتخصيصها.`},quickFilter:{all:`الكل`,clear:`مسح عوامل التصفية`,empty:`لا توجد خيارات`,resultSummary:`عرض {shown} / {total} من المهام`},readOnly:`للقراءة فقط`,readOnlyHint:`التحرير معطّل في هذا العرض.`,lockedHint:`لا توجد صلاحية تحرير`,writeFailed:`فشل الحفظ — تم التراجع عن التغيير`,column:{taskName:`اسم المهمة`,start:`البداية`,end:`النهاية`},toolbar:{thisWeek:`هذا الأسبوع`,thisMonth:`هذا الشهر`,viewMode:`دقة الخط الزمني`,enterFullscreen:`ملء الشاشة`,exitFullscreen:`إنهاء ملء الشاشة`,criticalPath:`إبراز المسار الحرج`,autoSchedule:`جدولة التبعيات تلقائيًا`,exportPng:`تصدير بصيغة PNG`,exportPdf:`تصدير PDF`,saveLayout:`حفظ التخطيط`,refresh:`تحديث`,undo:`تراجع`,redo:`إعادة`,prevPeriod:`الفترة السابقة`,nextPeriod:`الفترة التالية`,zoomIn:`تكبير`,zoomOut:`تصغير`,jumpToToday:`الانتقال إلى اليوم`,today:`اليوم`,showTaskList:`إظهار قائمة المهام`,hideTaskList:`إخفاء قائمة المهام`}},view:{editViewConfig:`تعديل إعدادات العرض`,rename:`إعادة تسمية`,duplicateView:`تكرار العرض`,shareView:`مشاركة العرض`,setAsDefault:`تعيين كافتراضي`,pinView:`تثبيت العرض`,unpinView:`إلغاء تثبيت العرض`,changeViewType:`تغيير نوع العرض`,deleteView:`حذف العرض`,addView:`إضافة عرض`,unsavedChanges:`تغييرات غير محفوظة`,saveAsView:`حفظ كعرض`,moreViews:`{{count}} المزيد`,activeFilters:`الفلاتر نشطة`,activeSort:`الترتيب نشط`,manageViews:`إدارة العروض`,manageAllViews:`إدارة جميع العروض…`,manageViewsDescription:`إعادة ترتيب جميع طرق عرض هذا الكائن أو إعادة تسميتها أو تثبيتها أو حذفها.`,searchViews:`البحث في العروض`,addNewView:`إضافة عرض جديد`,done:`تم`,noViewsFound:`لا توجد عروض تطابق بحثك.`,dragToReorder:`اسحب لإعادة الترتيب`,defaultView:`العرض الافتراضي`,defaultBadge:`افتراضي`,tabActionsFor:`إجراءات العرض لـ {{name}}`,readonlyAriaLabel:`عرض للقراءة فقط`,readonlyTooltip:`عرض النظام — معرَّف في الكود، للقراءة فقط.`},designer:{undo:`تراجع`,redo:`إعادة`},detail:{editInlineHint:`انقر نقرًا مزدوجًا للتحرير`,systemActor:`النظام`,unknownUser:`غير معروف`,created:`أُنشئ`,updated:`حُدِّث`,back:`رجوع`,edit:`تحرير`,editInline:`تحرير`,save:`حفظ`,saveChanges:`حفظ التغييرات`,editFieldsInline:`تحرير الحقول`,share:`مشاركة`,duplicate:`نسخ`,export:`تصدير`,viewHistory:`عرض السجل`,delete:`حذف`,moreActions:`المزيد من الإجراءات`,addReaction:`إضافة تفاعل`,pageHeaderActions:`إجراءات رأس الصفحة`,emojiPicker:`منتقي الرموز التعبيرية`,reactionCount:`{{emoji}} {{count}} تفاعلات`,reactionCountOne:`{{emoji}} {{count}} تفاعل`,recordDetail:`تفاصيل السجل`,recordDetailWithLabel:`تفاصيل {{label}}`,openAsFullPage:`فتح كصفحة كاملة`,recordDetailOverlay:`طبقة تفاصيل السجل الخاصة بـ {{title}}.`,addToFavorites:`إضافة إلى المفضلة`,removeFromFavorites:`إزالة من المفضلة`,previousRecord:`السجل السابق`,nextRecord:`السجل التالي`,recordOf:`{{current}} من {{total}}`,recordNotFound:`لم يتم العثور على السجل`,recordNotFoundDescription:`السجل الذي تبحث عنه غير موجود أو ربما تم حذفه.`,goBack:`رجوع`,details:`التفاصيل`,related:`ذات صلة`,relatedRecords:`{{count}} سجلات`,relatedRecordOne:`{{count}} سجل`,noRelatedRecords:`لا توجد سجلات ذات صلة`,loading:`جاري التحميل…`,copyToClipboard:`نسخ إلى الحافظة`,copied:`تم النسخ!`,deleteConfirmation:`هل أنت متأكد أنك تريد حذف هذا السجل؟`,deleted:`تم حذف السجل`,editRecord:`تحرير السجل`,viewAll:`عرض الكل`,new:`جديد`,add:`إضافة`,emptyValue:`—`,comments:`التعليقات`,searchComments:`البحث في التعليقات…`,addCommentPlaceholder:`أضف تعليقاً… (Ctrl+Enter للإرسال)`,noMatchingComments:`لا توجد تعليقات مطابقة`,noCommentsYet:`لا توجد تعليقات بعد`,pinned:`مثبت`,pin:`تثبيت`,unpin:`إلغاء التثبيت`,justNow:`الآن`,minutesAgo:`منذ {{count}} دقيقة`,hoursAgo:`منذ {{count}} ساعة`,daysAgo:`منذ {{count}} يوم`,dropFilesToUpload:`اسحب الملفات هنا أو انقر للرفع`,attachmentCount:`{{count}} مرفق`,attachmentCountPlural:`{{count}} مرفقات`,removeAttachment:`إزالة المرفق`,attachments:`المرفقات`,uploadAttachment:`رفع`,loadingAttachments:`جارٍ تحميل المرفقات…`,noAttachments:`لا توجد مرفقات بعد. ارفع ملفًا للبدء.`,downloadAttachment:`تنزيل`,deleteAttachment:`حذف المرفق`,attachmentDeleteDenied:`لا يمكن حذف هذا المرفق إلا لمن رفعه أو لمن يمكنه تعديل هذا السجل.`,attachmentParentAccessDenied:`ليس لديك صلاحية إرفاق ملفات بهذا السجل.`,attachmentDownloadDenied:`ليس لديك صلاحية تنزيل هذا المرفق.`,attachmentAuthRequired:`يرجى تسجيل الدخول لتنزيل هذا المرفق.`,attachmentPermissionDenied:`ليس لديك إذن للقيام بذلك.`,unifiedDiff:`عرض موحد`,sideBySideDiff:`عرض جنباً إلى جنب`,noChanges:`لا توجد تغييرات`,previousVersion:`السابق`,currentVersion:`الحالي`,discussion:`المناقشة`,showDiscussion:`إظهار المناقشة ({{count}})`,hideDiscussion:`إخفاء المناقشة`,bold:`غامق (Ctrl+B)`,italic:`مائل (Ctrl+I)`,listFormat:`قائمة`,inlineCode:`كود مضمن`,mentionSomeone:`إشارة إلى شخص`,preview:`معاينة`,submitComment:`إرسال (Ctrl+Enter)`,sendComment:`إرسال`,writeComment:`اكتب تعليقاً…`,subscribedTooltip:`مشترك — انقر لإلغاء الاشتراك`,unsubscribedTooltip:`الاشتراك في الإشعارات`,firstRecord:`السجل الأول (Home)`,previousRecordKey:`السجل السابق (←)`,nextRecordKey:`السجل التالي (→)`,lastRecord:`السجل الأخير (End)`,noRecords:`لا توجد سجلات`,searchWhileNavigating:`البحث أثناء التصفح`,searchRecords:`البحث في السجلات…`,allActivity:`كل النشاط`,commentsOnly:`التعليقات فقط`,fieldChangesFilter:`تغييرات الحقول`,tasksOnly:`المهام فقط`,leaveCommentPlaceholder:`اترك تعليقاً… (Ctrl+Enter للإرسال)`,noActivity:`لا يوجد نشاط مسجل`,loadMore:`تحميل المزيد`,edited:`(معدل)`,via:`عبر {{source}}`,viewSource:`عرض المصدر`,replyCount:`{{count}} رد`,replyCountPlural:`{{count}} ردود`,replyPlaceholder:`رد…`,filterActivity:`تصفية النشاط`,openDiscussion:`فتح لوحة المناقشة`,closeDiscussion:`إغلاق لوحة المناقشة`,subscribeAriaLabel:`الاشتراك في الإشعارات`,unsubscribeAriaLabel:`إلغاء الاشتراك من الإشعارات`,clearSearch:`مسح البحث`,saving:`جارٍ الحفظ…`,lockedByApproval:`مقفل للموافقة`,lockedTooltip:`يحتوي هذا السجل على طلب موافقة معلق؛ التعديل مقفل`,writeStrippedTitle:`تم الحفظ، لكن بعض الحقول لم تُطبَّق`,writeStrippedReadonly:`للقراءة فقط، لذلك لم تُطبَّق: {{fields}}`,writeStrippedByState:`غير قابلة للتعديل في الحالة الحالية لهذا السجل، لذلك لم تُطبَّق: {{fields}}`,approvalPendingEditable:`قيد الموافقة · قابل للتعديل`,approvalPendingTooltip:`يحتوي هذا السجل على طلب موافقة معلق، لكن هذه الخطوة لا تزال تسمح بالتعديل`,approvalProgress:`الموافقات — {{got}} من {{need}}`,approvalProgressGroups:`التوقيعات — {{got}} من {{need}} مجموعات`,approvalProgressLabel:`تقدّم الموافقة`,approvalsPanelTitle:`الموافقات`,cancelApproval:`إلغاء الموافقة`,cancelApprovalInFlight:`جارٍ الإلغاء…`,cancelApprovalTooltip:`إلغاء طلب الموافقة المعلق لفتح قفل السجل`,cancelApprovalTooltipUnlocked:`إلغاء طلب الموافقة المعلق`,cancelApprovalFailed:`فشل إلغاء الموافقة`,cancelApprovalUnavailable:`إلغاء الموافقات غير مدعوم من مصدر البيانات هذا`,linkCopied:`تم نسخ الرابط إلى الحافظة`,linkCopyFailed:`فشل نسخ الرابط`,cancel:`إلغاء`,cancelEdit:`تجاهل التغييرات`,sectionMoreDetails:`مزيد من التفاصيل`,concurrentUpdateTitle:`تم تعديل هذا السجل من قِبل شخص آخر`,concurrentUpdateDescription:`قام مستخدم آخر بحفظ نسخة أحدث من {{field}} أثناء تعديلك. اختر كيفية حل التعارض.`,concurrentUpdateYourEdit:`تعديلك`,concurrentUpdateCurrentValue:`القيمة الحالية`,concurrentUpdateUpdatedBy:`حدّثه {{name}}`,concurrentUpdateUpdatedAt:`حُدِّث في {{when}}`,concurrentUpdateReload:`تحميل النسخة الحالية`,concurrentUpdateOverwrite:`الكتابة فوقه على أي حال`,concurrentUpdateCancel:`إلغاء`,concurrentUpdateRecordLabel:`هذا السجل`,openInNewTab:`فتح في علامة تبويب جديدة`,activity:`النشاط`,history:`السجل`,historyEmpty:`لا يوجد سجل بعد`,editRow:`تعديل`,deleteRow:`حذف`,deleteRowConfirmation:`حذف هذا السجل؟`,deleteRowTitle:`حذف السجل`,actions:`الإجراءات`,previousPage:`السابق`,nextPage:`التالي`,pageOf:`صفحة {{current}} من {{total}}`,sortBy:`ترتيب حسب`,filterPlaceholder:`تصفية…`,highlightFields:`الحقول الرئيسية`,createdBy:`أنشأه`,updatedBy:`حدّثه`,showEmptyRelated:`+ {{count}} فارغ(فارغة)`,showEmptyRelated_one:`+ {{count}} فارغ`,showEmptyRelated_other:`+ {{count}} فارغة`,copyEmail:`نسخ البريد الإلكتروني`,copyPhone:`نسخ الهاتف`,copyRecordId:`نسخ معرف السجل`,showEmptyFields:`إظهار {{count}} حقل(حقول) فارغة`,hideEmptyFields:`إخفاء الحقول الفارغة`,noValue:`لا قيمة`},chart:{noData:`لا تتوفر بيانات للرسم البياني`,loading:`جاري تحميل الرسم البياني…`,nullCategory:`(غير محدد)`},map:{searchLocations:`البحث عن المواقع…`,locationDetails:`تفاصيل الموقع`,markersCount:`{{count}} علامة`,invalidCoordinates:`{{count}} سجل بإحداثيات مفقودة أو غير صالحة مستبعد من الخريطة.`,invalidCoordinatesPlural:`{{count}} سجلات بإحداثيات مفقودة أو غير صالحة مستبعدة من الخريطة.`},workflow:{draft:`مسودة`,active:`نشط`,paused:`متوقف مؤقتاً`,completed:`مكتمل`,cancelled:`ملغي`,save:`حفظ`,publish:`نشر`,addNode:`إضافة عقدة`,workflowFlow:`سير العمل`,properties:`الخصائص`,connections:`الاتصالات`,quickConnect:`اتصال سريع`,fromPlaceholder:`من…`,toPlaceholder:`إلى…`,connect:`ربط`,label:`التسمية`,type:`النوع`,description:`الوصف`,assignee:`المسؤول`,assigneeType:`نوع المسؤول`,user:`مستخدم`,role:`دور`,group:`مجموعة`,expression:`تعبير`,timeoutMinutes:`المهلة (دقائق)`,selectNodeToEdit:`حدد عقدة لتعديل خصائصها`,workflowTitle:`عنوان سير العمل`,newWorkflow:`سير عمل جديد`,outConnections:`{{count}} مخرج`,start:`بداية`,end:`نهاية`,task:`مهمة`,userTask:`مهمة مستخدم`,serviceTask:`مهمة خدمة`,scriptTask:`مهمة نصية`,approval:`موافقة`,condition:`شرط`,parallelGateway:`بوابة متوازية`,joinGateway:`بوابة دمج`,boundaryEvent:`حدث حدودي`,delay:`تأخير`,notification:`إشعار`,webhook:`Webhook`,allowConcurrency:`السماح (تنفيذ متزامن)`,forbidConcurrency:`منع (تخطي الجديد)`,replaceConcurrency:`استبدال (إلغاء الحالي)`,queueConcurrency:`طابور (تنفيذ بعد الحالي)`,conditionEvent:`شرط`,manualEvent:`يدوي`,webhookEvent:`Webhook`,timerEvent:`مؤقت`,signalEvent:`إشارة`,versionHistory:`تاريخ الإصدارات`,importBpmn:`استيراد BPMN`,exportBpmn:`تصدير BPMN`,undo:`تراجع`,redo:`إعادة`,resetZoom:`إعادة تعيين التكبير`},dashboard:{noRows:`لا توجد صفوف`,loading:`جارٍ التحميل…`,pickMeasures:`اختر المقاييس (القيم) لأداة مجموعة البيانات هذه.`,datasetUnsupported:`مصدر البيانات هذا لا يدعم استعلامات مجموعات البيانات.`,details:`التفاصيل`,exportCsv:`تصدير CSV`,openInList:`فتح في القائمة`,filters:{label:`عوامل تصفية لوحة المعلومات`,dateRange:`النطاق الزمني`,allTime:`كل الأوقات`,custom:`مخصص…`,all:`الكل`,reset:`إعادة تعيين`,range:{today:`اليوم`,yesterday:`أمس`,this_week:`هذا الأسبوع`,last_week:`الأسبوع الماضي`,this_month:`هذا الشهر`,last_month:`الشهر الماضي`,this_quarter:`هذا الربع`,last_quarter:`الربع الماضي`,this_year:`هذه السنة`,last_year:`السنة الماضية`,last_7_days:`آخر 7 أيام`,last_30_days:`آخر 30 يومًا`,last_90_days:`آخر 90 يومًا`}},addWidget:`إضافة أداة`,removeWidget:`إزالة أداة`,editLayout:`تعديل التخطيط`,saveLayout:`حفظ التخطيط`,resetLayout:`إعادة تعيين التخطيط`,total:`الإجمالي`,noDataAvailable:`لا بيانات متاحة`,noDataSourceFor:`لا مصدر بيانات لـ`,trend:{vsLastQuarter:`مقابل الربع الماضي`,vsLastMonth:`مقابل الشهر الماضي`,vsLastWeek:`مقابل الأسبوع الماضي`,vsLastYear:`مقابل العام الماضي`,vsYesterday:`مقابل أمس`,vsPreviousPeriod:`مقابل الفترة السابقة`}},configPanel:{save:`حفظ`,discard:`تجاهل`,close:`إغلاق`,layout:`التخطيط`,columns:`الأعمدة`,gap:`المسافة`,rowHeight:`ارتفاع الصف`,data:`البيانات`,refreshInterval:`فترة التحديث`,appearance:`المظهر`,title:`العنوان`,showDescription:`إظهار الوصف`,theme:`السمة`,configuration:`الإعداد`,general:`عام`,advanced:`متقدم`},appDesigner:{createApp:`إنشاء تطبيق`,editApp:`تعديل التطبيق`,basicInfo:`المعلومات الأساسية`,objects:`الكائنات`,navigation:`التنقل`,branding:`العلامة التجارية`,appName:`اسم التطبيق`,appTitle:`العنوان`,appDescription:`الوصف`,appIcon:`الأيقونة`,template:`القالب`,layout:`التخطيط`,layoutSidebar:`الشريط الجانبي`,layoutHeader:`الرأس`,layoutEmpty:`فارغ`,selectObjects:`تحديد الكائنات`,searchObjects:`البحث في الكائنات…`,selectAll:`تحديد الكل`,deselectAll:`إلغاء تحديد الكل`,navBuilder:`منشئ التنقل`,addGroup:`إضافة مجموعة`,addUrl:`إضافة URL`,addSeparator:`إضافة فاصل`,noNavItems:`لا توجد عناصر تنقل بعد.`,logoUrl:`Logo URL`,primaryColor:`اللون الأساسي`,faviconUrl:`Favicon URL`,preview:`معاينة`,complete:`إكمال`,snakeCaseHint:`يجب أن يكون بصيغة snake_case (مثل my_app)`,modeEdit:`تعديل`,modePreview:`معاينة`,modeCode:`كود`,addWidget:`إضافة عنصر واجهة`,widgetProperties:`خصائص العنصر`,dataSource:`مصدر البيانات`,valueField:`حقل القيمة`,aggregate:`تجميع`,colorVariant:`متغير اللون`,addComponent:`إضافة مكون`,componentProperties:`خصائص المكون`,viewType:`نوع العرض`,fields:`الحقول`,toolbar:`شريط الأدوات`,showSearch:`إظهار البحث`,showFilters:`إظهار الفلاتر`,showSort:`إظهار الترتيب`,appearance:`المظهر`,rowHeight:`ارتفاع الصف`,stripedRows:`صفوف متناوبة`,bordered:`محاط بإطار`,livePreview:`معاينة مباشرة`,stepBasicDesc:`الاسم والعنوان والتخطيط`,stepObjectsDesc:`اختيار كائنات الأعمال`,stepNavigationDesc:`بناء شجرة التنقل`,stepBrandingDesc:`الشعار والألوان والأيقونة`,noObjectsFound:`لم يتم العثور على كائنات.`,noNavItemsHint:`لا توجد عناصر تنقل بعد. حدد كائنات في الخطوة السابقة أو أضف عناصر يدويًا.`,separator:`فاصل`,separatorLabel:`— فاصل —`,newGroup:`مجموعة جديدة`,newLink:`رابط جديد`,saveDraft:`حفظ المسودة`,cancelConfirmTitle:`تجاهل التغييرات؟`,cancelConfirmMessage:`لديك تغييرات غير محفوظة. هل أنت متأكد من الإلغاء؟`,confirmDiscard:`تجاهل`,keepEditing:`متابعة التحرير`,navNoItems:`لا توجد عناصر تنقل. انقر على الأزرار أعلاه لإضافة عناصر.`,navNoPreviewItems:`لا توجد عناصر`,navLivePreview:`معاينة مباشرة`,navCollapseGroup:`طي المجموعة`,navExpandGroup:`توسيع المجموعة`,navAddChild:`إضافة عنصر فرعي`,navMoveUp:`نقل لأعلى`,navMoveDown:`نقل لأسفل`,navRemove:`إزالة`,navObjectPage:`صفحة الكائن`,navDashboard:`لوحة القيادة`,navPage:`صفحة`,navReport:`تقرير`,navGroup:`مجموعة`,navUrl:`رابط`,navSeparator:`فاصل`,navTypeObject:`كائن`,navTypeDashboard:`لوحة تحكم`,navTypePage:`صفحة`,navTypeReport:`تقرير`,navTypeUrl:`رابط`,navTypeGroup:`مجموعة`,navTypeSeparator:`فاصل`,navTypeAction:`إجراء`,navTypeComponent:`مكوّن`,navEditIcon:`تعديل الأيقونة`,navToggleVisible:`تبديل الرؤية`,navHidden:`مخفي`,navExportSchema:`تصدير JSON`,navImportSchema:`استيراد JSON`,navExportSuccess:`تم تصدير مخطط التنقل`,navImportSuccess:`تم استيراد مخطط التنقل`,navImportError:`JSON تنقل غير صالح`,navIconPlaceholder:`اسم الأيقونة (مثل Users)`,dashboardEditor:`محرر لوحة التحكم`,noWidgets:`لا عناصر واجهة. انقر فوق زر أعلاه لإضافة واحد.`,widgetLayoutSize:`حجم التخطيط`,widgetWidth:`العرض`,widgetHeight:`الارتفاع`,dashboardPreview:`معاينة لوحة التحكم`,noWidgetsPreview:`لا عناصر واجهة للمعاينة`,pageCanvasEditor:`محرر قماش الصفحة`,emptyPage:`صفحة فارغة. انقر فوق زر أعلاه لإضافة مكون.`,pagePreview:`معاينة الصفحة`,noComponentsPreview:`لا مكونات للمعاينة`,modePage:`صفحة`,modeDashboard:`لوحة تحكم`,undo:`تراجع`,redo:`إعادة`,brandingEditor:`محرر العلامة التجارية`,brandingExport:`تصدير JSON`,brandingImport:`استيراد JSON`,brandingPreview:`معاينة`,brandingSampleButton:`زر نموذجي`,brandingSampleText:`هكذا سيبدو سمة علامتك التجارية.`,colorPalette:`لوحة الألوان`,fontFamily:`عائلة الخطوط`,fontDefault:`افتراضي (النظام)`,modeLight:`فاتح`,modeDark:`داكن`,mobilePreview:`معاينة الجوال`,objectManager:{title:`مدير الكائنات`,addObject:`كائن جديد`,searchPlaceholder:`البحث في الكائنات…`,noObjects:`لم يتم العثور على كائنات.`,objectName:`اسم API`,objectLabel:`التسمية`,pluralLabel:`التسمية الجمعية`,icon:`أيقونة`,selectIcon:`اختر أيقونة…`,group:`مجموعة`,noGroup:`بلا مجموعة`,sortOrder:`ترتيب الفرز`,enabled:`مفعل`,relationships:`العلاقات`,systemBadge:`النظام`,fieldCount:`{{count}} حقل(حقول)`,ungrouped:`غير مجمع`,deleteConfirmTitle:`حذف الكائن؟`,deleteConfirmMessage:`سيؤدي هذا إلى حذف الكائن وجميع حقوله بشكل دائم. لا يمكن التراجع عن هذا الإجراء.`},fieldDesigner:{title:`مصمم الحقول`,addField:`حقل جديد`,searchPlaceholder:`البحث في الحقول…`,allTypes:`جميع الأنواع`,noFields:`لم يتم العثور على حقول.`,fieldName:`اسم API`,fieldLabel:`التسمية`,fieldType:`النوع`,fieldGroup:`المجموعة`,description:`الوصف`,required:`مطلوب`,unique:`فريد`,readOnly:`للقراءة فقط`,hidden:`مخفي`,indexed:`مفهرس`,externalId:`معرف خارجي`,trackHistory:`تتبع السجل`,defaultValue:`القيمة الافتراضية`,placeholder:`نص تلميحي`,referenceTo:`مرجع إلى`,formula:`صيغة`,options:`خيارات`,addOption:`إضافة خيار`,validationRules:`قواعد التحقق`,addRule:`إضافة قاعدة`,systemBadge:`النظام`,ungrouped:`عام`,deleteConfirmTitle:`حذف الحقل؟`,deleteConfirmMessage:`سيتم حذف الحقل بشكل دائم. ستُفقد البيانات الموجودة في هذا الحقل.`,basicSection:`أساسي`,typeSpecificSection:`إعدادات النوع`,advancedSection:`متقدم`,typeCategory:{text:`نص`,number:`رقم`,date:`التاريخ والوقت`,choice:`اختيار`,relation:`علاقة`,advanced:`متقدم`}}},console:{saveAdvisoryTitle:`تم الحفظ — أنتج فحص التأليف {{count}} ملاحظة إرشادية`,settingsHub:{title:`الإعدادات`,subtitle:`اضبط مساحة العمل والتكاملات وأعلام الميزات.`,loadError:`تعذّر تحميل الإعدادات`,empty:`لا توجد إعدادات مسجّلة. يمكن للإضافات تسجيل بيانات الإعدادات عبر SettingsService.`,settingsCount:`{{n}} من الإعدادات`,beta:`إصدار تجريبي`,categories:{Workspace:`مساحة العمل`,Communication:`الاتصالات`,Security:`الأمان`,Infrastructure:`البنية التحتية`,Beta:`إصدار تجريبي`,Other:`أخرى`}},objectData:{badge:`البيانات`,description:`شريحة بيانات محددة عبر الرابط — غير مرتبطة بأي عرض محفوظ.`,filteredBy:`مُرشَّح حسب`,removeFilter:`إزالة عامل التصفية {{field}}`,saveAsView:`الحفظ كعرض`,noAccessTitle:`تم رفض الوصول`,noAccess:`ليس لديك إذن لعرض هذه البيانات.`},identityImport:{policyTitle:`إعداد تسجيل الدخول للمستخدمين المستوردين`,policy:{auto:`تلقائي (موصى به)`,invite:`إرسال دعوات`,temporary:`كلمات مرور مؤقتة`,none:`بدون كلمة مرور (هوية فقط)`},policyHint:{auto:`يتلقى المستخدمون الذين يمكن الوصول إليهم دعوة (بريد إلكتروني أو رسالة نصية)؛ ومن يتعذّر الوصول إليه يحصل على كلمة مرور لمرة واحدة تُعرض مرة واحدة فقط في شاشة النتائج. تعمل مع خدمة البريد/الرسائل أو بدونها.`,invite:`يتلقى كل مستخدم يتم إنشاؤه بريدًا لتعيين كلمة المرور (أو رسالة دعوة نصية للصفوف التي تحتوي على هاتف فقط). يتطلب خدمة بريد/رسائل مُهيّأة — وتفشل الصفوف التي يتعذّر الوصول إليها.`,temporary:`للتنصيبات التي لا تتوفر فيها خدمة بريد/رسائل: يحصل كل مستخدم يتم إنشاؤه على كلمة مرور لمرة واحدة تُعرض مرة واحدة فقط في شاشة النتائج. ويفرض تسجيل الدخول الأول تغييرها.`,none:`يسجّل المستخدمون الدخول أولًا برمز لمرة واحدة عبر الهاتف أو برابط سحري أو برابط إعادة تعيين كلمة المرور، ثم يعيّنون كلمة المرور الخاصة بهم.`},passwordsNote:`كلمات مرور مؤقتة — تُعرض مرة واحدة ولا تُخزَّن أبدًا. احفظها الآن؛ وعلى كل مستخدم تغيير كلمته عند أول تسجيل دخول.`,passwordsMore:`تم حذف إدخالات إضافية — استخدم التنزيل.`,passwordsDownload:`تنزيل ملف CSV`},ai:{usage:{title:`استخدام الذكاء الاصطناعي`,meterBuild:`الإنشاء`,meterAsk:`السؤال`,statusOk:`المتبقّي وفير`,statusLow:`على وشك النفاد`,statusFull:`تم بلوغ الحد`,resetsDaily:`تُعاد التهيئة الليلة`,resetsMonthly:`تُعاد التهيئة في الدورة القادمة`,ctaUpgrade:`قم بالترقية للمتابعة`,ctaTopUp:`أضف أرصدة للمتابعة`,ariaLabel:`استخدام الذكاء الاصطناعي: {{status}}`},workspaceTitle:`مساحة عمل الذكاء الاصطناعي`,workspaceSubtitle:`اسأل وافحص واستأنف المحادثات`,openChats:`فتح المحادثات`,chats:`المحادثات`,chatsDescription:`تصفّح محادثات الذكاء الاصطناعي وأدرها.`,share:`مشاركة`,shareTitle:`مشاركة هذه المحادثة`,shareDisabledTitle:`ابدأ المحادثة لتفعيل المشاركة`,newChat:`جديدة`,searchChats:`البحث في المحادثات…`,noChatsYet:`لا توجد محادثات بعد`,noChatsDescription:`ابدأ محادثة جديدة لتظهر هنا.`,noMatchingChats:`لا توجد محادثات مطابقة.`,newConversation:`محادثة جديدة`,renameConversation:`إعادة تسمية المحادثة`,deleteConversation:`حذف المحادثة`,saveRename:`حفظ الاسم`,cancelRename:`إلغاء إعادة التسمية`,loadingHistory:`جارٍ تحميل سجل المحادثة…`,conversationReady:`المحادثة جاهزة`,preparingConversation:`جارٍ تجهيز محادثة جديدة`,offlineDemoMode:`وضع العرض دون اتصال — قائمة الوكلاء غير متاحة`,sendFailedRateLimited:`أنت ترسل الرسائل بسرعة كبيرة. رسالتك محفوظة بالأسفل — انتظر لحظة ثم أعد المحاولة.`,sendFailedGeneric:`تعذّر إرسال رسالتك. وهي محفوظة بالأسفل — يرجى إعادة المحاولة.`,askAgent:`اسأل {{agent}}…`,assistant:`المساعد`,liveCanvas:`معاينة حية — {{app}} (مسودة)`,liveCanvasUnlisted:`تطبيق حي — {{app}} (غير مُدرج حتى النشر)`,loadingAgents:`جارٍ تحميل الوكلاء…`,askAnything:`اسأل عن أي شيء…`,emptyTitle:`ابدأ محادثة`,emptyDescription:`اسأل عن أي شيء — يمكن للمساعد الاطلاع على سياق تطبيقك الحالي.`,switchAssistant:`تبديل المساعد`,chooseAgent:`اختر مساعدًا…`,empty:{build:{title:`الإنشاء بالذكاء الاصطناعي`,description:`صف تطبيقًا أو سير عمل بلغة بسيطة — سأعدّ مسودة الكائنات والشاشات والأتمتة، ثم تراجعها وتنشرها.`},ask:{title:`اسأل بياناتك`,description:`اطرح أسئلة عن سجلاتك — أعداد وقوائم وملخصات للبيانات التي يمكنك الوصول إليها.`},editApp:{title:`تحرير «{{app}}»`,titleGeneric:`تحرير هذا التطبيق`,description:`ما الذي تريد تغييره؟ سأعدّل هذا التطبيق في مكانه — إضافة حقل أو كائن أو عرض أو أتمتة، أو تعديل ما هو موجود.`}},clearConversation:`مسح`,sendHint:`للإرسال`,agentActivity:`نشاط الوكيل`,toolCompleted:`مكتمل`,toolRunning:`قيد التنفيذ`,toolAwaitingApproval:`بانتظار الموافقة`,toolFailed:`فشل`,toolDetailsHidden:`مدخلات الأدوات والنتائج الخام مخفية في هذا العرض.`,copy:`نسخ`,copied:`تم النسخ`,regenerate:`إعادة التوليد`,model:`النموذج`,submit:`إرسال`,uploadFiles:`رفع الملفات`,stopResponse:`إيقاف الرد`,trace:`التتبّع`,viewTrace:`عرض التتبّع`,nextSteps:`الخطوة التالية`,publishDrafts:`نشر`,publishOk:`تم النشر — الكائنات فعّالة الآن.`,seedWarn:`تم النشر، لكن تعذّر تحميل بعض البيانات التجريبية.`,openBuiltApp:`فتح التطبيق`,designBuiltApp:`التصميم في Studio`,previewDraft:`معاينة`,previewApp:`معاينة التطبيق`,resizeSplit:`تغيير حجم المحادثة والمعاينة`,hideChats:`إخفاء المحادثات`,showChats:`إظهار المحادثات`,planTitle:`الخطة المقترحة`,planQuestions:`التأكيد قبل الإنشاء`,planAssumptions:`الافتراضات`,planApproveHint:`أجب للموافقة على هذه الخطة أو تعديلها.`,planApprove:`ابدأ الإنشاء`,planAdjust:`تعديل`,justNow:`الآن`,minutesAgo:`قبل {{count}} د`,hoursAgo:`قبل {{count}} س`,daysAgo:`قبل {{count}} ي`,agentLabels:{ask:`السؤال`,build:`الإنشاء`,dataChat:`المساعد`,metadataAssistant:`مساعد البيانات الوصفية`},suggestions:{dataChat:{userCount:`كم عدد المستخدمين في النظام؟ اذكر عناوين بريدهم الإلكتروني.`,recentRecords:`اذكر أحدث 5 سجلات تم إنشاؤها.`,recordCounts:`احسب عدد السجلات لكل كائن.`},metadataAssistant:{buildCrm:`أنشئ نظام إدارة علاقات عملاء للمبيعات — عملاء وجهات اتصال ومسار صفقات يمكنني تجميعه حسب المرحلة.`,buildApp:`أنشئ متتبّع مشاريع — مشاريع ومهام بمسؤولين وتواريخ استحقاق ولوحة حسب الحالة.`,buildFlow:`صمّم مكتب دعم — تذاكر بأولوية وسير عمل للحالات وروابط بالعملاء.`,buildInventory:`أنشئ تطبيق مخزون — منتجات ومستويات مخزون وموردين وتنبيه لانخفاض المخزون.`,buildRecruiting:`أنشئ متتبّع متقدمين — مرشحون ووظائف شاغرة ومراحل مقابلات وملاحظات.`},generic:{help:`بماذا يمكنك مساعدتي؟`,availableObjects:`اذكر كائنات البيانات المتاحة.`,recentActivity:`لخّص نشاطي الأخير.`},editApp:{addField:`أضف حقلًا إلى أحد الكائنات.`,addObject:`أضف كائنًا جديدًا واربطه بكائن موجود.`,addDashboard:`أضف لوحة معلومات للمؤشرات الرئيسية.`,addAutomation:`أضف أتمتة — موافقة أو سير حالات أو إشعارًا.`}},changesTitle:`تأكيد التغييرات`,changesConfirmed:`تم التأكيد`,changesConfirm:`تأكيد`,changesConfirmHint:`أجب لتأكيد هذا التغيير أو تعديله.`,changeVerb:{createObject:`إنشاء كائن`,addField:`إضافة حقل`,modifyField:`تعديل حقل`,deleteField:`حذف حقل`,createMetadata:`إنشاء`,updateMetadata:`تعديل`,createSeed:`إنشاء بيانات تجريبية`,createPackage:`إنشاء حزمة تطبيق`},collapseToDock:`طيّ إلى اللوحة الجانبية`,switchApp:`تبديل التطبيق`,switchAppLabel:`محادثات الإنشاء حسب التطبيق`,newApp:`تطبيق جديد`,connectionWaiting:`في انتظار الخادم…`,connectionStalled:`لا يزال العمل جاريًا…`,connectionOffline:`انقطع الاتصال — جارٍ إعادة الاتصال…`,designingPlan:`جارٍ تصميم تطبيقك…`,designingPlanHint:{data:`جارٍ تحديد البيانات التي ستتابعها…`,objects:`جارٍ تشكيل الكائنات وحقولها…`,relations:`جارٍ ربط السجلات ذات الصلة…`,lookups:`جارٍ إعداد العلاقات وحقول البحث…`,views:`جارٍ التخطيط للشاشات والعروض…`,forms:`جارٍ تنسيق النماذج والقوائم…`,defaults:`جارٍ إضافة قيم افتراضية ومعايير تحقّق منطقية…`,dashboard:`جارٍ رسم لوحة معلومات للمتابعة…`,review:`جارٍ التحقّق من تماسك البنية…`,finalize:`جارٍ تجميع الخطة…`},planBuilding:`جارٍ الإنشاء…`,planBuilt:`تم الإنشاء`,planDeferred:`لم يُنشأ بعد`,planReady:`الخطة جاهزة. ابدأ الإنشاء الآن، أو أخبرني بما تريد تعديله.`,published:`تم النشر`,publishFailed:`فشل النشر`,unavailableTitle:`مساعد الذكاء الاصطناعي غير متاح`,unavailableDescription:`لم يتم تمكين مساعد الذكاء الاصطناعي في هذا النشر. وكل شيء آخر يعمل كالمعتاد.`,unavailableError:`تعذّر الوصول إلى خدمة الذكاء الاصطناعي. قد تكون غير متصلة مؤقتًا — أعد المحاولة أو عد إلى الرئيسية.`,unavailableRetry:`إعادة المحاولة`,unavailableHome:`العودة إلى الرئيسية`,dock:{title:`المساعد`,description:`محادثة مساعد الذكاء الاصطناعي`,resize:`تغيير حجم المحادثة`,collapse:`طي المحادثة`,maximize:`فتح كصفحة كاملة`,open:`فتح المساعد`},group:{today:`اليوم`,yesterday:`أمس`,previous7Days:`آخر 7 أيام`,previous30Days:`آخر 30 يومًا`,older:`أقدم`}},title:`وحدة تحكم ObjectStack`,initializing:`جاري تهيئة التطبيق…`,loadingHint:`قد يستغرق إعداد بيئة جديدة بعض الوقت.`,breadcrumb:{dashboards:`لوحات المعلومات`,pages:`الصفحات`,reports:`التقارير`,system:`النظام`},settingsView:{backToHub:`جميع الإعدادات`,back:`رجوع`,noNamespace:`لم يتم تحديد أي مساحة اسم.`,loadError:`تعذّر تحميل الإعدادات`,saved:`تم حفظ الإعدادات`,saveFailed:`فشل في الحفظ`,lockedByEnv:`مقفل بواسطة البيئة: {{key}}`,lockedByEnvNoKey:`مقفل بواسطة البيئة`,actionSucceeded:`نجح الإجراء`,actionFailed:`فشل الإجراء`,discard:`تجاهل`,saveChanges:`حفظ التغييرات`,unsavedCount:`{{count}} تغيير(تغييرات) غير محفوظ`,unsavedCount_one:`{{count}} تغيير غير محفوظ`,unsavedCount_other:`{{count}} تغييرات غير محفوظة`,cryptoRefusalTitle:`لا يمكن لهذا النشر تشفير الأسرار`,cryptoRefusalSubjectSuffix:`معلن كمشفَّر، لذلك لم تتم كتابة أي شيء.`,cryptoRefusalNoSubject:`تم رفض القيمة المعلنة كمشفَّرة، لذلك لم تتم كتابة أي شيء.`,cryptoRefusalToast:`تعذّر تشفير الأسرار: {{subject}}`,cryptoRefusalToastNoSubject:`تعذّر تشفير الأسرار`},loadingSteps:{connecting:`جاري الاتصال بمصدر البيانات`,loadingConfig:`جاري تحميل الإعدادات`,preparingWorkspace:`جاري تجهيز مساحة العمل`},error:{connectionFailed:`تعذّر الاتصال بالخادم`,serverUnreachable:`الخادم {{url}} غير قابل للوصول.`,checkServer:`يرجى التحقق من اتصال الشبكة أو من تشغيل الواجهة الخلفية.`,timeout:`انتهت مهلة الاتصال بعد 10 ثوانٍ.`},actions:{retry:`إعادة المحاولة`,retrying:`جاري إعادة المحاولة…`},serverAction:{openingTitle:`جارٍ الفتح…`,openingBody:`جارٍ الفتح… قد يستغرق ذلك لحظة.`,popupBlockedTitle:`تم حظر النافذة المنبثقة`,popupBlockedDescription:`حظر المتصفح فتح علامة التبويب الجديدة.`,popupBlockedAction:`فتح في علامة تبويب جديدة`},shortcuts:{title:`اختصارات لوحة المفاتيح`,description:`مرجع سريع لجميع اختصارات لوحة المفاتيح المتاحة.`,groups:{general:`عام`,navigation:`التنقل`,dataViews:`عروض البيانات`,aiChat:`مساعد الذكاء الاصطناعي`,preferences:`التفضيلات`},openCommandPalette:`فتح لوحة الأوامر`,showShortcuts:`عرض اختصارات لوحة المفاتيح`,closeDialog:`إغلاق النافذة / اللوحة`,toggleSidebar:`تبديل الشريط الجانبي`,focusSearch:`التركيز على البحث`,createRecord:`إنشاء سجل جديد`,refreshData:`تحديث البيانات`,editRecord:`تعديل السجل المحدد`,newChat:`محادثة جديدة`,toggleChatsList:`تبديل قائمة المحادثات`,toggleDarkMode:`تبديل الوضع الداكن`},commandPalette:{title:`لوحة الأوامر`,placeholder:`اكتب أمراً أو ابحث…`,noResults:`لم يتم العثور على نتائج.`,objects:`الكائنات`,dashboards:`لوحات المعلومات`,pages:`الصفحات`,reports:`التقارير`,switchApp:`تبديل التطبيق`,current:`الحالي`,preferences:`التفضيلات`,lightTheme:`المظهر الفاتح`,darkTheme:`المظهر الداكن`,systemTheme:`مظهر النظام`,actions:`الإجراءات`,openFullSearch:`فتح صفحة البحث الكاملة`,createApp:`إنشاء تطبيق جديد`,searching:`جارٍ البحث…`,records:`السجلات`,recentRecords:`شوهد مؤخراً`},errors:{somethingWentWrong:`حدث خطأ ما`,unexpectedError:`حدث خطأ غير متوقع أثناء عرض هذا المحتوى.`,tryAgain:`إعادة المحاولة`,goHome:`العودة للرئيسية`,errorDetails:`تفاصيل الخطأ (وضع التطوير فقط)`},notFound:{title:`الصفحة غير موجودة`,description:`الرابط الذي فتحته لا يطابق أي عرض في هذا التطبيق.`,back:`رجوع`},theme:{toggle:`تبديل المظهر`,light:`فاتح`,dark:`داكن`,system:`النظام`},objectView:{viewTypeTree:`شجرة`,viewTypeTreeDesc:`يرتّب السجلات ذاتية المرجعية في تسلسل هرمي عبر حقل أب.`,parentField:`الحقل الأب`,parentFieldHelp:`الحقل الذي يشير إلى السجل الأب (الكائن نفسه) ويحدد التسلسل الهرمي. الحقول ذاتية المرجعية فقط هي المؤهلة.`,viewName:`الاسم`,viewNameHelp:`مفتاح برمجي (snake_case). يُملأ تلقائيًا من العنوان — عدّله إن أردت.`,viewNameRequired:`أدخل مفتاحًا (أحرف إنجليزية صغيرة وأرقام وشرطة سفلية). لا يُملأ تلقائيًا للعناوين غير اللاتينية.`,viewNameInvalid:`استخدم أحرفًا إنجليزية صغيرة وأرقامًا وشرطات سفلية؛ وابدأ بحرف أو شرطة سفلية.`,systemViewReadonly:`عرض النظام معرَّف في الكود — للقراءة فقط.`,cannotEditMetaView:`هذا عرض مدمج معرَّف في الكود — لا يمكن تعديله.`,cannotDeleteMetaView:`هذا عرض مدمج معرَّف في الكود — لا يمكن حذفه.`,expandToPage:`فتح كصفحة كاملة`,objectNotFound:`الكائن غير موجود`,objectNotFoundDescription:`الكائن "{{objectName}}" غير موجود في الإعدادات الحالية.`,objectNotFoundHint:`تحقق من إعدادات التنقل في تطبيقك أو اختر كائنًا آخر من الشريط الجانبي.`,filterOrNotSavable:`يستخدم هذا الفلتر «أو» بين الشروط، وهو ما لا يمكن للعرض المحفوظ تخزينه بعد. لا يزال مطبقًا على هذه القائمة — أزل تجميع «أو» لحفظه في العرض.`,filterNestedNotSavable:`يستخدم هذا الفلتر مجموعات شروط متداخلة لا يمكن للعرض المحفوظ تخزينها. حوّله إلى قائمة شروط واحدة لحفظه في العرض.`,allRecords:`جميع السجلات`,exitDesignMode:`الخروج من وضع التصميم`,enterDesignMode:`الدخول إلى وضع التصميم`,metadataInspector:`مفتش البيانات الوصفية`,editView:`تعديل العرض`,addView:`إضافة عرض`,designTools:`أدوات التصميم`,new:`جديد`,configureView:`تكوين العرض`,closePanel:`إغلاق اللوحة`,page:`الصفحة`,pageConfigHint:`شريط الأدوات والتنقل وإعدادات غلاف العرض`,listConfigHint:`عرض البيانات والأعمدة والمظهر لهذا النوع من القائمة`,general:`عام`,generalHint:`عنوان العرض والوصف والنوع`,toolbar:`شريط الأدوات`,toolbarHint:`البحث والتصفية والفرز والتجميع ومفاتيح الكثافة`,toolbarEnabledCount:`{{count}} من {{total}} مفعّل`,navigationSection:`التنقل`,navigationHint:`سلوك النقر على الصف وإعدادات العرض التفصيلي`,records:`السجلات`,recordsHint:`وضع التحديد وإضافة سجل والتحرير المباشر`,exportPrint:`التصدير والطباعة`,exportPrintHint:`صيغ التصدير والطباعة وعرض عدد السجلات`,showAllFields:`إظهار الكل`,hideAllFields:`إخفاء الكل`,searchFields:`البحث في الحقول…`,title:`العنوان`,description:`الوصف`,data:`البيانات`,source:`المصدر`,columns:`الأعمدة`,filterBy:`تصفية حسب`,sortBy:`ترتيب حسب`,appearance:`المظهر`,showDescription:`عرض الوصف`,viewType:`نوع العرض`,userFilters:`مرشحات المستخدم`,enableSearch:`تفعيل البحث`,enableFilter:`تفعيل التصفية`,enableSort:`تفعيل الترتيب`,enableHideFields:`تفعيل إخفاء الحقول`,enableGroup:`تفعيل التجميع`,enableColor:`تفعيل اللون`,enableDensity:`تفعيل الكثافة`,userActions:`إجراءات المستخدم`,addRecordViaForm:`إضافة سجلات عبر النموذج`,advanced:`متقدم`,allowExport:`السماح بالتصدير`,recordCount:`{{count}} سجل`,noDescription:`لا يوجد وصف`,none:`لا شيء`,columnsConfigured:`{{count}} أعمدة`,save:`حفظ`,discard:`تجاهل`,createView:`إنشاء عرض`,newView:`عرض جديد`,typeOptions:`خيارات النوع`,groupByField:`حقل التجميع`,startDateField:`حقل تاريخ البدء`,titleField:`حقل العنوان`,latitudeField:`حقل خط العرض`,longitudeField:`حقل خط الطول`,imageField:`حقل الصورة`,dateField:`حقل التاريخ`,selectField:`اختر حقلاً…`,gridOptionsHint:`يستخدم عرض الشبكة الأعمدة المكونة أعلاه.`,groupBy:`تجميع حسب`,prefixField:`حقل البادئة`,fields:`الحقول`,fieldsVisible:`{{count}} مرئي`,sortsCount:`{{count}} ترتيبات`,filtersCount:`{{count}} مرشحات`,endDateField:`حقل تاريخ الانتهاء`,color:`اللون`,fieldTextColor:`لون نص الحقل`,rowHeight:`ارتفاع الصف`,wrapHeaders:`التفاف العناوين`,showFieldDescriptions:`إظهار أوصاف الحقول`,collapseAllByDefault:`طي الكل افتراضياً`,striped:`صفوف مخططة`,bordered:`خلايا محاطة بحدود`,inlineEdit:`تحرير السجلات مباشرة`,addDeleteRecordsInline:`إضافة/حذف السجلات مباشرة`,clickIntoRecordDetails:`انقر لعرض تفاصيل السجل`,navigationMode:`وضع التنقل`,navigationWidth:`عرض التنقل`,navigationWidthHint:`متاح لأوضاع التنقل: الدرج والنافذة المنبثقة والعرض المقسم`,openNewTab:`فتح في علامة تبويب جديدة`,openNewTabHint:`متاح لأوضاع التنقل: الصفحة والنافذة الجديدة`,import:`استيراد`,importTitle:`استيراد من CSV`,importedToast:`تم استيراد {{count}} صف(صفوف).`,importedWithSkipped:`تم استيراد {{ok}} صف(صفوف)؛ تم تخطي {{skipped}}.`,showAdvancedSettings:`إظهار الإعدادات المتقدمة`,showFewerSettings:`إظهار إعدادات أقل`,createViewDesc:`اختر نوع العرض وأعطه اسماً. يمكن تغيير جميع الإعدادات لاحقاً.`,cancel:`إلغاء`,create:`إنشاء`,delete:`حذف`,deleteViewTitle:`حذف العرض`,deleteViewConfirm:`حذف العرض "{{name}}"؟ لا يمكن التراجع عن ذلك.`,bulkDeleteConfirm:`حذف {{count}} سجل(ات) محدد(ة)؟ لا يمكن التراجع عن ذلك.`,duplicateViewName:`يوجد عرض بهذا الاسم بالفعل.`,viewTypeGrid:`شبكة`,viewTypeGridDesc:`جدول سجلات بأسلوب جدول البيانات.`,viewTypeKanban:`كانبان`,viewTypeKanbanDesc:`بطاقات مجمعة في أعمدة بحقل تحديد واحد.`,viewTypeCalendar:`تقويم`,viewTypeCalendarDesc:`سجلات موضوعة حسب التاريخ في تقويم شهري.`,viewTypeGallery:`معرض`,viewTypeGalleryDesc:`بطاقات صور كبيرة من حقل المرفقات.`,viewTypeTimeline:`الجدول الزمني`,viewTypeTimelineDesc:`سجلات على محور زمني أفقي.`,viewTypeGantt:`غانت`,viewTypeGanttDesc:`أشرطة مشروع مع البداية/النهاية والتبعيات.`,viewTypeMap:`خريطة`,viewTypeMapDesc:`علامات جغرافية من حقول خط العرض/الطول.`,viewTypeChart:`مخطط`,viewTypeChartDesc:`مخططات شريطية/خطية/دائرية مجمعة.`,groupByFieldHelp:`تُجمّع لوحة كانبان السجلات في أعمدة حسب قيم الحقل.`,startDateFieldHelp:`يضع التقويم السجلات في الخلية المقابلة لهذا التاريخ.`,ganttStartDateFieldHelp:`يستخدم الحد الأيسر لكل شريط غانت هذا التاريخ.`,ganttEndDateFieldHelp:`يستخدم الحد الأيمن لكل شريط غانت هذا التاريخ.`,timelineDateFieldHelp:`تُوضع السجلات على الجدول الزمني بناءً على هذا التاريخ.`,latitudeFieldHelp:`حقل يحتوي على خط العرض (حقول جغرافية فقط).`,longitudeFieldHelp:`حقل يحتوي على خط الطول (حقول جغرافية فقط).`,imageFieldHelp:`تأتي غلاف المعرض من هذا الحقل للصورة أو المرفق.`,selectOption:`تحديد…`,noEligibleFieldForType:`لا يوجد حقل مؤهل من هذا النوع. أضف حقلاً إلى الكائن أولاً.`,viewTypeUnavailable:`لا يحتوي هذا الكائن على حقل يمكن أن يعمل كـ "{{field}}".`,viewTypeUnavailableShort:`غير مدعوم من هذا الكائن.`,chartType:`نوع المخطط`,chartTypeHelp:`يحدد كيفية عرض البيانات.`,chartTypeBar:`مخطط شريطي`,chartTypeLine:`مخطط خطي`,chartTypePie:`مخطط دائري`,chartTypeArea:`مخطط مساحة`,chartTypeScatter:`مخطط نقطي`,xAxisField:`حقل المحور X`,xAxisFieldHelp:`البُعد الفئوي أو الزمني.`,yAxisField:`حقل المحور Y`,yAxisFieldHelp:`الحقل الرقمي للتجميع.`,selectionMode:`وضع التحديد`,selectionNone:`لا شيء`,selectionSingle:`فردي`,selectionMultiple:`متعدد`,pageSize:`حجم الصفحة`,pageSizeOptions:`خيارات حجم الصفحة`,exportFormats:`تنسيقات التصدير`,exportMaxRecords:`الحد الأقصى للسجلات`,exportIncludeHeaders:`تضمين الرؤوس`,exportFileNamePrefix:`بادئة اسم الملف`,searchableFields:`الحقول القابلة للبحث`,filterableFields:`الحقول القابلة للتصفية`,resizableColumns:`أعمدة قابلة لتغيير الحجم`,densityCompact:`مضغوط`,densityComfortable:`عادي`,densitySpacious:`فسيح`,densityMode:`وضع الكثافة`,hiddenFields:`الحقول المخفية`,rowActions:`إجراءات الصف`,bulkActions:`إجراءات جماعية`,sharing:`مشاركة`,sharingEnabled:`المشاركة مفعلة`,sharingVisibility:`الرؤية`,addRecordEnabled:`إضافة سجل مفعلة`,addRecordPosition:`الموضع`,addRecordMode:`الوضع`,addRecordFormView:`عرض النموذج`,conditionalFormatting:`التنسيق الشرطي`,addRule:`إضافة قاعدة`,quickFilters:`فلاتر سريعة`,addQuickFilter:`إضافة فلتر سريع`,ufElements:`العناصر`,ufDropdown:`قائمة منسدلة`,ufTabs:`علامات تبويب`,ufToggle:`تبديل`,ufAddField:`+ إضافة حقل فلتر…`,ufNoFields:`لا حقول متاحة`,ufAddTab:`+ إضافة علامة تبويب`,ufTabLabel:`التسمية`,ufShowAllRecords:`إظهار علامة "جميع السجلات"`,ufAllowAddTab:`السماح بإضافة علامات تبويب`,showRecordCount:`إظهار عدد السجلات`,allowPrinting:`السماح بالطباعة`,virtualScroll:`التمرير الافتراضي`,emptyStateTitle:`عنوان الحالة الفارغة`,emptyStateMessage:`رسالة الحالة الفارغة`,emptyStateIcon:`رمز الحالة الفارغة`,ariaLabel:`تسمية ARIA`,ariaDescribedBy:`موصوف بـ ARIA`,ariaLive:`ARIA Live`,accessibility:`إمكانية الوصول`,viewTabs:`علامات تبويب العرض`},localeSwitcher:{label:`اللغة`},search:`بحث…`,nav:{pinItem:`تثبيت {{name}}`,unpinItem:`إلغاء تثبيت {{name}}`,dragToReorder:`اسحب لإعادة الترتيب`,favorites:`المفضلة`}},auth:{setPassword:{title:`تعيين كلمة مرور للاسترداد`,description:`لقد سجّلت الدخول عبر الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن من الدخول إلى هذه البيئة مباشرةً إذا أصبح الدخول الموحّد غير متاح.`,email:`البريد الإلكتروني`,newPassword:`كلمة المرور الجديدة`,confirmPassword:`تأكيد كلمة المرور`,submit:`تعيين كلمة المرور`,submitting:`جارٍ الحفظ…`,success:`تم تعيين كلمة المرور المحلية`,failed:`تعذّر تعيين كلمة المرور`,passwordsMismatch:`كلمتا المرور غير متطابقتين`,noSession:`انتهت صلاحية جلستك.`,backToSignIn:`تسجيل الدخول مرة أخرى`},login:{signingIn:`جارٍ تسجيل دخولك…`,ssoHandoff:`المتابعة إلى {{target}}`,devAdminHint:{title:`بيئة تطوير`,body:`سجّل الدخول بحساب مسؤول التطوير المهيأ مسبقًا:`,dismiss:`تجاهل`},title:`تسجيل الدخول إلى حسابك`,description:`أدخل بريدك الإلكتروني وكلمة المرور للمتابعة`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordPlaceholder:`أدخل كلمة المرور`,forgotPasswordText:`نسيت كلمة المرور؟`,submitButton:`تسجيل الدخول`,submittingButton:`جارٍ تسجيل الدخول…`,noAccountText:`ليس لديك حساب؟`,signUpText:`إنشاء حساب`,errors:{oauthCallbackFailed:`تعذّر إكمال الدخول الموحّد — انتهت صلاحية رابط تسجيل الدخول أو سبق استخدامه. يرجى المحاولة مرة أخرى.`,invalidCredentials:`بريد إلكتروني أو كلمة مرور غير صحيحة. يرجى المحاولة مرة أخرى.`,emailNotVerified:`يرجى التحقق من بريدك الإلكتروني قبل تسجيل الدخول.`},emailOrPhoneLabel:`البريد الإلكتروني أو رقم الهاتف`,emailOrPhonePlaceholder:`name@example.com أو +1 555 000 0000`,phoneLabel:`رقم الهاتف`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`رمز التحقق`,otpCodePlaceholder:`رمز مكوّن من 6 أرقام`,sendOtpButton:`الحصول على رمز`,resendOtpCountdownText:`إعادة الإرسال بعد {seconds} ثانية`,usePhoneOtpText:`تسجيل الدخول برمز التحقق`,usePasswordSignInText:`تسجيل الدخول بكلمة المرور بدلاً من ذلك`},register:{title:`إنشاء حساب`,description:`أدخل معلوماتك للبدء`,nameLabel:`الاسم`,namePlaceholder:`محمد أحمد`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordPlaceholder:`إنشاء كلمة مرور (8 أحرف على الأقل)`,confirmPasswordLabel:`تأكيد كلمة المرور`,confirmPasswordPlaceholder:`أكّد كلمة المرور`,passwordMismatchError:`كلمتا المرور غير متطابقتين`,passwordTooShortError:`يجب أن تتكون كلمة المرور من 8 أحرف على الأقل`,submitButton:`إنشاء حساب`,submittingButton:`جارٍ إنشاء الحساب…`,hasAccountText:`لديك حساب بالفعل؟`,signInText:`تسجيل الدخول`,errors:{userExists:`يوجد حساب بهذا البريد الإلكتروني بالفعل. حاول تسجيل الدخول.`},verifyInbox:{title:`تحقق من صندوق الوارد`,description:`أرسلنا رابط التحقق إلى {{email}}. انقر على الرابط لتفعيل حسابك.`,resend:`إعادة إرسال بريد التحقق`,resending:`جارٍ الإرسال…`,resent:`تم إرسال بريد التحقق.`,backToSignIn:`العودة إلى تسجيل الدخول`}},forgotPassword:{title:`إعادة تعيين كلمة المرور`,description:`أدخل عنوان بريدك الإلكتروني وسنرسل لك رابطًا لإعادة تعيين كلمة المرور`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,submitButton:`إرسال رابط إعادة التعيين`,submittingButton:`جارٍ الإرسال…`,successTitle:`تحقق من بريدك الإلكتروني`,successDescription:`لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى {{email}}. يرجى التحقق من بريدك الوارد.`,backToSignInText:`العودة إلى تسجيل الدخول`,rememberPasswordText:`تتذكر كلمة المرور؟`,signInText:`تسجيل الدخول`,phoneLabel:`رقم الهاتف`,phonePlaceholder:`+1 555 000 0000`,otpCodeLabel:`رمز التحقق`,otpCodePlaceholder:`رمز مكوّن من 6 أرقام`,sendOtpButton:`الحصول على رمز`,resendOtpCountdownText:`إعادة الإرسال بعد {seconds} ثانية`,newPasswordLabel:`كلمة المرور الجديدة`,newPasswordPlaceholder:`أدخل كلمة مرور جديدة`,resetButton:`إعادة تعيين كلمة المرور`,usePhoneResetText:`إعادة التعيين برمز SMS`,useEmailResetText:`إعادة التعيين بالبريد الإلكتروني بدلاً من ذلك`,phoneSuccessTitle:`تمت إعادة تعيين كلمة المرور`,phoneSuccessDescription:`تمت إعادة تعيين كلمة المرور. يمكنك الآن تسجيل الدخول بكلمة المرور الجديدة.`},resetPassword:{title:`تعيين كلمة مرور جديدة`,description:`اختر كلمة مرور لم تستخدمها من قبل.`,newPassword:`كلمة المرور الجديدة`,confirmPassword:`تأكيد كلمة المرور`,submit:`تحديث كلمة المرور`,submitting:`جارٍ التحديث…`,success:`تم تحديث كلمة المرور`,failed:`فشل إعادة التعيين`,invalidToken:`رابط إعادة التعيين هذا غير صالح أو منتهي الصلاحية.`,missingToken:`رابط إعادة التعيين مفقود أو منتهي الصلاحية`,passwordsMismatch:`كلمتا المرور غير متطابقتين`,requestNewLink:`طلب رابط جديد`},verifyEmail:{title:`التحقق من عنوان البريد الإلكتروني`,description:`أرسلنا رابط التحقق إلى بريدك الإلكتروني. انقر على الرابط للتحقق من حسابك.`,sentTo:`أُرسل إلى:`,verifyingTitle:`جارٍ التحقق…`,verifyingDescription:`نقوم بالتحقق من بريدك الإلكتروني. يرجى الانتظار.`,successTitle:`تم التحقق من البريد الإلكتروني`,successDescription:`تم التحقق من بريدك الإلكتروني. يمكنك الآن تسجيل الدخول.`,errorTitle:`فشل التحقق`,errorDescription:`فشل التحقق. يرجى طلب رابط جديد.`,missingToken:`رابط التحقق لا يحتوي على رمز.`,emailMissing:`عنوان البريد الإلكتروني مفقود`,resendButton:`إعادة إرسال بريد التحقق`,resending:`جارٍ الإرسال…`,resent:`تم إرسال البريد! تحقق من صندوق الوارد`,resentSuccess:`تم إرسال بريد التحقق!`,resentDescription:`يرجى التحقق من صندوق الوارد والنقر على رابط التحقق.`,resendFailed:`تعذر إعادة إرسال بريد التحقق`,signInLink:`الانتقال إلى تسجيل الدخول`,backToSignIn:`العودة إلى تسجيل الدخول`,backToLogin:`العودة إلى تسجيل الدخول`,checkSpam:`لم تستلم البريد؟ تحقق من مجلد البريد غير المرغوب أو تواصل مع الدعم.`,or:`أو`,resendUnavailable:`قد يكون إرسال البريد الإلكتروني غير مُهيأ في هذه البيئة. تواصل مع الدعم إذا استمرت المشكلة.`},setup:{welcomeTitle:`مرحباً بك في ObjectStack`,description:`أنشئ أول حساب مالك لإتمام الإعداد.`,yourName:`اسمك`,orgName:`اسم المنظمة`,orgNamePlaceholder:`شركة مثال`,emailLabel:`البريد الإلكتروني`,emailPlaceholder:`name@example.com`,passwordLabel:`كلمة المرور`,passwordHint:`8 أحرف على الأقل`,submit:`إنشاء حساب المالك`,submitting:`جارٍ الإعداد…`,failed:`فشل الإعداد`},device:{title:`تفويض جهاز جديد`,subtitle:`وافق على هذا الجهاز لتسجيل الدخول بوصفك {{email}}.`,userCodeLabel:`رمز الجهاز`,requesterLabel:`طلب اتصال من`,approveWarning:`وافق فقط إذا كنت قد بدأت هذا الاتصال بنفسك قبل لحظات. بعد الموافقة، سيتمكن وقت التشغيل هذا من الوصول إلى الحزم الخاصة بمؤسستك.`,loggedInAs:`مسجل الدخول بوصفك {{email}}`,approve:`الموافقة على الجهاز`,approving:`جارٍ الموافقة…`,approvedTitle:`تم تفويض الجهاز`,approvedDescription:`يمكنك العودة إلى الجهاز — يجب أن يسجل الدخول قريباً.`,approveSuccess:`تم تفويض الجهاز`,approveSuccessDescription:`يمكنك إغلاق هذه النافذة.`,approveFailed:`فشلت الموافقة`,deny:`رفض الطلب`,denying:`جارٍ الرفض…`,deniedTitle:`تم رفض الوصول`,deniedDescription:`لن يُمنح الجهاز وصولاً.`,denyFailed:`تعذر رفض الطلب`,invalidTitle:`رابط جهاز غير صالح`,invalidDescription:`لم يتم تقديم رمز جهاز في URL.`,loading:`جارٍ التحميل…`,cancel:`إلغاء`,disabledTitle:`تفويض الأجهزة غير مُمكَّن`,disabledDescription:`لم يتم تمكين تفويض الأجهزة في هذا النشر، لذا لا يمكن الموافقة على هذا الجهاز هنا.`},shell:{tenantHostHint:`تسجل الدخول إلى مساحة العمل هذه`},layout:{headline:`أنشئ تطبيقات أعمال قوية بسرعة أكبر.`,subhead:`المنصة الموحدة لإدارة بيانات المؤسسات وسير العمل والتحليلات.`},remediation:{signOut:`تسجيل الخروج بدلاً من ذلك`,password:{title:`انتهت صلاحية كلمة المرور`,fallbackMessage:`يرجى تعيين كلمة مرور جديدة للمتابعة.`,current:`كلمة المرور الحالية`,next:`كلمة المرور الجديدة`,confirm:`تأكيد كلمة المرور الجديدة`,submit:`تغيير كلمة المرور والمتابعة`,submitting:`جارٍ التحديث…`,mismatch:`كلمتا المرور الجديدتان غير متطابقتين.`,failed:`تعذّر تغيير كلمة المرور.`},mfa:{title:`إعداد المصادقة الثنائية`,fallbackMessage:`تتطلب مؤسستك تطبيق مصادقة للمتابعة.`,confirmPassword:`أكّد كلمة المرور`,continue:`متابعة`,preparing:`جارٍ التحضير…`,enrollFailed:`تعذّر بدء التسجيل.`,scanTitle:`امسح الرمز بتطبيق المصادقة`,scanBody:`امسح رمز QR هذا باستخدام Google Authenticator أو 1Password أو Authy وغيرها، ثم أدخل الرمز المكوّن من 6 أرقام.`,backupTitle:`احفظ رموز النسخ الاحتياطي`,backupBody:`احتفظ بها في مكان آمن — يمكن استخدام كل رمز مرة واحدة إذا فقدت جهازك.`,codeLabel:`رمز مكوّن من 6 أرقام`,verify:`تحقّق وتابع`,verifying:`جارٍ التحقق…`,invalidCode:`رمز غير صالح. حاول مرة أخرى.`}}},oauth:{consent:{title:`يطلب {{appName}} الوصول إلى حسابك`,request:`يطلب {{appName}} الإذن{{suffix}}.`,unknownApp:`تطبيق ما`,willAllow:`سيتمكن هذا التطبيق من:`,scope:{openid:`تأكيد هويتك`,profile:`قراءة ملفك الشخصي الأساسي (الاسم، الصورة)`,email:`قراءة عنوان بريدك الإلكتروني`,offlineAccess:`البقاء مسجّلاً للدخول (تحديث الوصول)`},deny:`رفض`,authorize:`تفويض`,submitting:`جارٍ التفويض…`,granted:`تم منح الوصول`,denied:`تم رفض الوصول`,noRedirect:`لم يُرجع الخادم أي عنوان URL لإعادة التوجيه.`,failed:`فشلت الموافقة`,footer:`يمكنك إلغاء الوصول في أي وقت من إعدادات حسابك.`}},profile:{title:`الملف الشخصي`,subtitle:`إدارة إعدادات حسابك`,saving:`جارٍ الحفظ…`,avatar:{upload:`رفع`,replace:`استبدال`,remove:`إزالة`},info:{title:`المعلومات الشخصية`,description:`قم بتحديث اسمك وعرض تفاصيل حسابك`,saved:`تم تحديث الملف الشخصي بنجاح.`,name:`الاسم`,email:`البريد الإلكتروني`,emailImmutable:`لا يمكن تغيير البريد الإلكتروني.`,role:`الدور`,save:`حفظ التغييرات`},password:{changeTitle:`تغيير كلمة المرور`,setTitle:`تعيين كلمة مرور محلية`,changeDescription:`قم بتحديث كلمة المرور التي تستخدمها لتسجيل الدخول إلى هذه البيئة.`,setDescription:`لقد سجّلت الدخول عبر تسجيل الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن أيضاً من تسجيل الدخول بالبريد الإلكتروني وكلمة المرور في هذه البيئة.`,current:`كلمة المرور الحالية`,new:`كلمة المرور الجديدة`,password:`كلمة المرور`,confirm:`تأكيد كلمة المرور`,tooShort:`يجب أن تتكون كلمة المرور من 8 أحرف على الأقل`,mismatch:`كلمتا المرور غير متطابقتين`,enterCurrent:`أدخل كلمة المرور الحالية`,changed:`تم تغيير كلمة المرور.`,localSet:`تم تعيين كلمة المرور المحلية. يمكنك الآن تسجيل الدخول بالبريد الإلكتروني وكلمة المرور في هذه البيئة.`,changeAction:`تغيير كلمة المرور`,setAction:`تعيين كلمة المرور`}},errors:{networkError:`خطأ في الشبكة. يرجى التحقق من اتصالك.`,serverError:`خطأ في الخادم. يرجى المحاولة مرة أخرى لاحقاً.`,notFound:`المورد غير موجود.`,unauthorized:`ليس لديك صلاحية لتنفيذ هذا الإجراء.`,forbidden:`تم رفض الوصول.`,timeout:`انتهت مهلة الطلب. يرجى المحاولة مرة أخرى.`,unknown:`حدث خطأ غير متوقع.`},workspace:{label:`مساحات العمل`,default:`مساحة العمل الخاصة بي`,switch:`تبديل مساحة العمل`,create:`إنشاء مساحة عمل`,createTitle:`إنشاء مساحة عمل`,createDescription:`مساحة العمل هي مساحة مشتركة لفريقك للتعاون.`,createButton:`إنشاء مساحة عمل`,nameLabel:`اسم مساحة العمل`,namePlaceholder:`مثلاً، Acme Inc`,slugLabel:`معرف URL`,slugHint:`يستخدم في عناوين URL. أحرف صغيرة وأرقام وشرطات فقط.`,invite:`دعوة عضو`,members:`الأعضاء`,settings:`إعدادات مساحة العمل`,multiOrgDisabled:`إنشاء مؤسسات جديدة معطّل في هذا النشر.`,createFailed:`تعذّر إنشاء مساحة العمل`},help:{onThisPage:`في هذه الصفحة`,keyboardShortcuts:`اختصارات لوحة المفاتيح`,appDocs:`وثائق هذا التطبيق`,allDocs:`كل الوثائق`,onlineDocs:`الوثائق عبر الإنترنت`},sidebar:{packageManagement:`إدارة الحزم`,searchNavigation:`البحث في التنقل…`,settings:`الإعدادات`,help:`المساعدة`,helpTooltip:`المساعدة والوثائق`,activityFeed:`موجز النشاط`,notifications:`الإشعارات`,approvals:`الموافقات`,inbox:`صندوق الوارد`,inboxAriaLabel:`فتح صندوق الوارد`,area:`المنطقة`,scope:`النطاق`,recent:`الأخيرة`,favorites:`المفضلة`,starred:`المميزة`,removeFromFavorites:`إزالة {{name}} من المفضلة`},topbar:{openAssistant:`فتح مساعد {{name}}`,offline:`غير متصل`,usersOnline:`المستخدمون المتصلون الآن`,switchView:`تبديل العرض`,switchObject:`تبديل الكائن`,connection:{connected:`متصل`,connecting:`جارٍ الاتصال…`,reconnecting:`جارٍ إعادة الاتصال…`,disconnected:`منقطع`,error:`خطأ في الاتصال`},stage:{preview:`معاينة`,beta:`إصدار تجريبي`,tooltip:`هذه المنصة في مرحلة المعاينة — وقد تتغير الميزات.`},aiAssistant:`مساعد الذكاء الاصطناعي`,designInStudio:`التصميم في Studio`},home:{build:{title:`إنشاء تطبيق`,subtitle:`ابدأ من الصفر — صمّم الكائنات والنماذج والأتمتة والواجهات.`},template:{title:`ابدأ من قالب`,subtitle:`ثبّت تطبيق قالب من السوق وخصّصه.`},welcomeAdminDescription:`صف نشاطك التجاري في جملة واحدة — وسيولّد الذكاء الاصطناعي الكائنات والشاشات وواجهات البرمجة وأدوات الوكيل. أو أعدّها بنفسك من القائمة على اليسار.`,welcomeAdminDescriptionNoBuild:`أعدّ تطبيقك الأول من قائمة الإدارة على اليسار. وبمجرد توفر البيانات، يمكن لمساعد الذكاء الاصطناعي مساعدتك في استكشافها.`,welcomeAdminDescriptionNoAi:`أعدّ تطبيقك الأول من قائمة الإدارة على اليسار.`,noAppsTitle:`لا توجد تطبيقات بعد`,noAppsDescription:`يجري إعداد مساحة عملك — وستظهر هنا التطبيقات التي يشاركها معك المسؤول.`,buildWithAI:`الإنشاء بالذكاء الاصطناعي`,askAI:`اسأل الذكاء الاصطناعي`,recoveryReminder:{message:`عيّن كلمة مرور للاسترداد كي تتمكن من تسجيل الدخول إذا تعذّر الدخول الموحّد في أي وقت.`,cta:`تعيين كلمة المرور`,dismiss:`تجاهل`},pendingDrafts:{message:`لديك {{count}} من التغييرات غير المنشورة — انشرها لتصبح فعّالة.`,cta:`نشر`,publishing:`جارٍ النشر…`,published:`تم النشر! تغييراتك فعّالة الآن.`,publishFailed:`فشل النشر`,nothing:`لا شيء للنشر.`,probeWarn:`تم النشر، لكن التحقق وجد مشكلات.`,seedWarn:`تم النشر، لكن تعذّر تحميل بعض البيانات التجريبية.`,publishedVerified:`تم النشر والتحقق — {{count}} صف(صفوف) من البيانات التجريبية فعّالة الآن.`,capabilityWarn:`فحص التأليف: {{count}} مرجع(مراجع) قدرات لا تشير إلى شيء.`},title:`الرئيسية`,subtitle:`لوحة تحكم مساحة العمل`,nav:`الرئيسية`,allApps:`جميع التطبيقات`,yourApps:`تطبيقاتك`,showMoreApps:`المزيد`,showLess:`عرض أقل`,continueEmpty:`ستظهر هنا العناصر التي تفتحها.`,actionCenter:{title:`يتطلب انتباهك`,empty:`لقد أنجزت كل شيء`},loading:`جارٍ تحميل مساحة العمل…`,recent:`الأخيرة`,starred:`المميزة بنجمة`,welcome:`مرحباً بك في ObjectUI`,welcomeDescription:`ابدأ بإنشاء تطبيقك الأول أو تكوين إعدادات النظام.`,createFirstApp:`أنشئ أول تطبيق لك`,systemSettings:`إعدادات النظام`,browseMarketplace:`تصفح متجر التطبيقات`,quickActions:{title:`إجراءات سريعة`,createApp:`إنشاء تطبيق`,createAppDesc:`ابدأ بتطبيق جديد`,manageObjects:`إدارة الكائنات`,manageObjectsDesc:`تكوين نماذج البيانات`,systemSettings:`إعدادات النظام`,systemSettingsDesc:`تكوين مساحة العمل الخاصة بك`},appCard:{noDescription:`لا يوجد وصف`,default:`افتراضي`},greetingMorning:`صباح الخير`,greetingAfternoon:`مساء الخير`,greetingEvening:`مساء النور`,greetingNight:`وردية الليل`,heroTagline:`استمر من حيث توقفت أو اكتشف شيئاً جديداً.`,open:`فتح`,stats:{apps:`التطبيقات`,starred:`المميزة`,recent:`الأخيرة`},recentApps:{title:`فُتح مؤخراً`,itemType:{object:`كائن`,dashboard:`لوحة تحكم`,page:`صفحة`,record:`سجل`}},starredApps:{title:`المميزة`},gettingStarted:{title:`تخصيص الصفحة الرئيسية`,description:`ضع علامة مميزة على تطبيق لتثبيته هنا والوصول إليه بنقرة واحدة. سيظهر كل ما تفتحه تلقائياً في "فُتح مؤخراً".`,cta:`استعراض جميع التطبيقات`}},layout:{systemNav:{systemSettings:`إعدادات النظام`,applications:`التطبيقات`,appMarketplace:`سوق التطبيقات`,objectManager:`مدير الكائنات`,users:`المستخدمون`,organizations:`المؤسسات`,roles:`الأدوار`,configuration:`التهيئة`,createApp:`إنشاء تطبيق`,administration:`الإدارة`,datasources:`مصادر البيانات`,documentation:`الوثائق`},appSwitcher:{switchApplication:`تبديل التطبيق`,appsAvailable:`{{count}} من التطبيقات المتاحة`,editNavigation:`تحرير التنقل`,home:`الرئيسية`,addApp:`إضافة تطبيق`,editApp:`تعديل التطبيق`,manageAllApps:`إدارة جميع التطبيقات`,systemConsole:`وحدة تحكم النظام`,noAppsConfigured:`لا تطبيقات مُهيأة`},activityFeed:{title:`النشاط الأخير`,filter:`تصفية`,empty:`لا نشاط أخير`,ariaLabel:`تغذية النشاط`,typeCreate:`إنشاء`,typeUpdate:`تحديث`,typeDelete:`حذف`,typeComment:`تعليق`,relativeJustNow:`الآن`,relativeSecondsAgo:`منذ {{count}} ث`,relativeMinutesAgo:`منذ {{count}} د`,relativeHoursAgo:`منذ {{count}} س`,relativeDaysAgo:`منذ {{count}} ي`,viewAll:`عرض كل النشاط`},metadata:{label:`البيانات الوصفية`,toggleTitle:`تبديل مفتش البيانات الوصفية`,panelTitle:`مفتش البيانات الوصفية`,jsonBadge:`JSON`,copyJson:`نسخ JSON`}},search:{title:`بحث`,back:`رجوع`,placeholder:`ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير…`,inputAriaLabel:`ابحث في الكائنات، لوحات التحكم، الصفحات، التقارير`,resultsCount:`{{count}} نتيجة لـ "{{query}}"`,resultsCountPlural:`{{count}} نتيجة لـ "{{query}}"`,itemsAvailable:`{{count}} عنصر(عناصر) متاح(ة)`,noResults:`لم يتم العثور على نتائج`,noResultsHint:`جرب تعديل مصطلحات البحث`,typeObjects:`الكائنات`,typeDashboards:`لوحات التحكم`,typePages:`الصفحات`,typeReports:`التقارير`,badgeObject:`كائن`,badgeDashboard:`لوحة تحكم`,badgePage:`صفحة`,badgeReport:`تقرير`},empty:{objectNotFound:`الكائن غير موجود`,objectNotFoundDescription:`تعريف الكائن "{{name}}" مفقود. تحقق من الإعداد أو ارجع للخلف.`,interfacePageSourceMissing:`تشير صفحة الواجهة هذه إلى "{{name}}"، وهو غير متاح.`,pageNotFound:`الصفحة غير موجودة`,pageNotFoundDescription:`الصفحة "{{name}}" غير موجودة. ربما تم إزالتها أو إعادة تسميتها.`,dashboardNotFound:`لوحة التحكم غير موجودة`,dashboardNotFoundDescription:`لوحة التحكم "{{name}}" غير موجودة. ربما تم إزالتها أو إعادة تسميتها.`,reportNotFound:`التقرير غير موجود`,reportNotFoundDescription:`التقرير "{{name}}" غير موجود. ربما تم إزالته أو إعادة تسميته.`,noAppsConfigured:`لا تطبيقات مُهيأة`,noAppsConfiguredDescription:`لا تطبيقات مسجلة. أنشئ تطبيقك الأول أو زر إعدادات النظام.`,appNotAvailable:`التطبيق غير متاح`,appNotAvailableDescription:`هذا التطبيق غير متاح بعد — قد يكون النشر ما زال جارياً. أعد المحاولة بعد لحظات.`,appAccessDenied:`ليس لديك حق الوصول إلى هذا التطبيق`,appAccessDeniedDescription:`هذا التطبيق موجود، لكن حسابك غير مخوَّل بفتحه. اطلب من المسؤول منحك حق الوصول.`,appAccessDeniedHome:`العودة إلى الرئيسية`,createFirstApp:`إنشاء أول تطبيق`,systemSettings:`إعدادات النظام`,back:`رجوع`,recordNotFound:`السجل غير موجود`,recordNotFoundDescription:`السجل الذي تبحث عنه غير موجود أو ربما تم حذفه.`},renderer:{noPageSchema:`لم يتم توفير مخطط الصفحة`,noFormSchema:`لم يتم توفير مخطط النموذج`,noDashboardSchema:`لم يتم توفير مخطط لوحة التحكم`,pageRendering:`تصيير الصفحة: {{name}}`,dashboardRendering:`تصيير لوحة التحكم: {{name}}`,formRenderingMode:`تصيير النموذج في وضع {{mode}}`,formRenderingFor:`للسجل {{id}}`,createRecord:`إنشاء سجل`,editRecord:`تعديل السجل`,page:`صفحة`,dashboard:`لوحة تحكم`,save:`حفظ`,cancel:`إلغاء`},actionDialog:{title:`معامِلات الإجراء`,description:`يرجى إدخال المعلومات المطلوبة للمتابعة.`,selectPlaceholder:`تحديد {{label}}`,requiredError:`{{label}} مطلوب`,cancel:`إلغاء`,confirm:`تأكيد`,uploading:`جارٍ الرفع…`,defaultActionTitle:`إجراء`,ok:`موافق`,lookupPlaceholder:`معرف السجل لـ {{label}}`,lookupHelpText:`لم يتم تكوين كائن مرجعي لهذه المعلمة، لذا فإن أداة اختيار السجلات غير متاحة. أدخل معرف السجل، أو اطلب من المسؤول تصحيح معلمة الإجراء.`},actionConfirm:{title:`تأكيد الإجراء`,confirm:`متابعة`,cancel:`إلغاء`},rowAction:{openMenu:`فتح القائمة`,edit:`تعديل`,delete:`حذف`},navigationSync:{addedPage:`تم تحديث التنقل: تمت إضافة الصفحة "{{name}}"`,addedDashboard:`تم تحديث التنقل: تمت إضافة لوحة التحكم "{{name}}"`,removedPage:`تم تحديث التنقل: تمت إزالة الصفحة "{{name}}"`,removedDashboard:`تم تحديث التنقل: تمت إزالة لوحة التحكم "{{name}}"`,renamedPage:`تم تحديث التنقل: تمت إعادة تسمية الصفحة "{{oldName}}" إلى "{{newName}}"`,renamedDashboard:`تم تحديث التنقل: تمت إعادة تسمية لوحة التحكم "{{oldName}}" إلى "{{newName}}"`,undoLabel:`تراجع`,undone:`تم التراجع عن تغيير التنقل`,undoFailed:`تعذر التراجع عن تغيير التنقل`,updateFailed:`تعذر تحديث التنقل`},objectActions:{resetPackageSetConfirm:`مجموعة الأذونات هذه تأتي ضمن حزمة مثبَّتة ولا يمكن إزالتها. الحذف يعيدها إلى الحالة الأصلية المرفقة بالحزمة ويتجاهل تخصيصاتك في هذه البيئة. هل تريد المتابعة؟`,resetPackageSetSuccess:`تمت إعادة مجموعة الأذونات إلى حالتها الأصلية المرفقة بالحزمة`,deleteSuccess:`تم حذف {{label}} بنجاح`,deleteFailed:`تعذر حذف {{label}}`,noRecordId:`لم يتم توفير معرف سجل`,deleteConfirm:`حذف هذا السجل؟`,bulkDeleteSuccess:`تم حذف {{count}} سجل(ات) {{label}}`,bulkDeletePartial:`تم حذف {{succeeded}}، فشل {{failed}}`},objectViewActions:{renameFailed:`تعذر إعادة تسمية العرض`,deleteFailed:`تعذر حذف العرض`},dashboardActions:{printDialogOpening:`جارٍ فتح مربع حوار الطباعة في المتصفح (ليس تصديرًا إلى PDF)`,exportFailed:`فشل التصدير: {{message}}`,forecastSoon:`عرض التوقعات قادم قريباً`},recordDetail:{viewersTooltip:`المستخدمون يشاهدون هذا السجل الآن`},cellRender:{empty:`فارغ`,yes:`نعم`,no:`لا`,systemFields:`النظام`},user:{profile:`الملف الشخصي`,settings:`الإعدادات`,logout:`تسجيل الخروج`,preferences:`التفضيلات`,theme:`السمة`,language:`اللغة`},report:{total:`الإجمالي`,rowTotal:`إجمالي الصف`,columnTotal:`إجمالي العمود`,grandTotal:`الإجمالي الكلي`,totals:`الإجماليات`,rowsLabel:`صف`,columnsLabel:`عمود`,allLabel:`(الكل)`,emptyLabel:`(فارغ)`,loading:`جارٍ التحميل…`,failedToLoad:`فشل تحميل المصفوفة: {{message}}`,needsAcross:"يتطلب تقرير المصفوفة حقل `groupingsAcross` واحداً على الأقل.",aggregate:{count:`عدد`,countDistinct:`عدد الفريد`,sum:`مجموع`,avg:`متوسط`,min:`الحد الأدنى`,max:`الحد الأقصى`,first:`الأول`},editor:{panelTitle:`تعديل التقرير`}},organizations:{create:`إنشاء مساحة عمل`,mine:`مؤسساتي`,title:`المؤسسات`,heading:`مؤسساتك`,subtitle:`اختر مؤسسة للمتابعة، أو أنشئ مؤسسة جديدة.`,searchPlaceholder:`ابحث عن مؤسسة`,new:`مؤسسة جديدة`,current:`المؤسسة الحالية`,manage:`إدارة`,emptyTitle:`لا توجد مؤسسات بعد`,emptyDescription:`أنشئ مؤسستك الأولى للبدء.`,noMatches:`لا توجد مؤسسات تطابق بحثك.`},organization:{roles:{owner:`المالك`,admin:`المسؤول`,delegatedAdmin:`مسؤول مفوَّض`,member:`عضو`},errors:{notAllowedToInvite:`لا يُسمح لك بدعوة مستخدمين إلى هذه المؤسسة.`,notAllowedToInviteWithRole:`لا يُسمح لك بدعوة مستخدم بهذا الدور.`,alreadyInvited:`تمت دعوة هذا المستخدم إلى هذه المؤسسة بالفعل.`,organizationExists:`هذه المؤسسة موجودة بالفعل.`,slugTaken:`هذا المُعرِّف مستخدَم بالفعل.`,notAllowedToCreate:`لا يُسمح لك بإنشاء مؤسسة جديدة.`,notTheRecipient:`لست المستلم المقصود بهذه الدعوة.`,invitationNotFound:`لم تعد هذه الدعوة موجودة أو أنها منتهية الصلاحية.`,unknown:`حدث خطأ ما. يرجى المحاولة مرة أخرى.`},backToList:`العودة إلى المؤسسات`,notFound:`المؤسسة غير موجودة`,notFoundDescription:`هذه المؤسسة غير موجودة أو ليس لديك صلاحية الوصول إليها.`,tabs:{members:`الأعضاء`,invitations:`الدعوات`,settings:`الإعدادات`},members:{title:`الأعضاء`,inviteMember:`دعوة عضو`,inviteRestrictedNote:`لا يمكن دعوة الأعضاء إلا لمسؤولي المؤسسة.`,removeMember:`إزالة العضو`,removeConfirmTitle:`إزالة العضو؟`,removeConfirmDescription:`سيؤدي ذلك إلى إزالة {{name}} من المؤسسة، وسيفقد صلاحية الوصول فورًا.`,removeConfirmAction:`إزالة`,memberRemoved:`تمت إزالة العضو`,removeFailed:`فشل إزالة العضو`,roleUpdated:`تم تحديث الدور`,roleUpdateFailed:`فشل تحديث الدور`,memberActions:`إجراءات العضو`,loadFailed:`تعذّر تحميل الأعضاء`},invitations:{title:`الدعوات`,empty:`لا توجد دعوات.`,expiresAt:`تنتهي في`,linkCopied:`تم نسخ رابط الدعوة`,copyFailed:`فشل نسخ الرابط`,canceled:`تم إلغاء الدعوة`,cancelFailed:`فشل إلغاء الدعوة`,cancelTitle:`إلغاء الدعوة؟`,cancelDescription:`سيتم إبطال الدعوة المرسلة إلى {{email}}.`,cancelAction:`إلغاء الدعوة`,inviteTitle:`دعوة عضو`,inviteDescription:`سيتلقى دعوة للانضمام إلى هذه المؤسسة.`,emailLabel:`البريد الإلكتروني`,roleLabel:`الدور`,placementLabel:`التعيين (اختياري)`,placementDescription:`يُطبَّق عند قبول الدعوة. تُعرض فقط الوحدات والمناصب التي يمكنك تفويضها.`,businessUnitLabel:`وحدة العمل`,businessUnitPlaceholder:`بدون تعيين`,positionsLabel:`المناصب`,sendInvite:`إرسال الدعوة`,sentTitle:`تم إنشاء الدعوة`,sentDescription:`شارك الرابط أدناه مع المدعوّ. سيحتاج إلى تسجيل الدخول للقبول.`,linkLabel:`رابط القبول`,invitedAs:`تمت دعوة {{email}} بصفة {{role}}`,copyLinkLabel:`نسخ رابط الدعوة`,loadFailed:`تعذّر تحميل الدعوات`,inviteFailed:`تعذّرت دعوة العضو`,status:{all:`الكل`,pending:`قيد الانتظار`,accepted:`مقبولة`,rejected:`مرفوضة`,canceled:`ملغاة`}},settings:{generalTitle:`عام`,generalDescription:`حدّث معلومات مؤسستك.`,readOnlyNote:`يمكن للمالكين فقط تغيير الإعدادات.`,nameLabel:`اسم المؤسسة`,slugLabel:`المعرف`,logoLabel:`الشعار`,logoUpload:`رفع`,logoReplace:`استبدال`,logoClear:`إزالة`,logoUploaded:`تم رفع الشعار — احفظ لتطبيقه`,logoUploadFailed:`فشل رفع الشعار`,save:`حفظ التغييرات`,saved:`تم حفظ الإعدادات`,saveFailed:`فشل حفظ الإعدادات`,leaveTitle:`مغادرة المؤسسة`,leaveDescription:`ستفقد صلاحية الوصول إلى هذه المؤسسة.`,leaveAction:`مغادرة`,leaveConfirmTitle:`مغادرة المؤسسة؟`,leaveConfirmDescription:`هل أنت متأكد أنك تريد مغادرة {{name}}؟ ستفقد صلاحية الوصول فورًا.`,leaveConfirmAction:`مغادرة`,leftOrg:`لقد غادرت المؤسسة`,leaveFailed:`فشلت مغادرة المؤسسة`,dangerZone:`منطقة الخطر`,deleteTitle:`حذف المؤسسة`,deleteDescription:`احذف هذه المؤسسة وجميع بياناتها نهائيًا.`,deleteAction:`حذف`,deleteConfirmTitle:`حذف المؤسسة؟`,deleteConfirmDescription:`هذا الإجراء لا يمكن التراجع عنه. ستُحذف جميع البيانات نهائيًا. اكتب معرف المؤسسة للتأكيد.`,deleteConfirmSlugLabel:`اكتب "{{slug}}" للتأكيد`,deleteConfirmAction:`حذف المؤسسة`,deleted:`تم حذف المؤسسة`,deleteFailed:`فشل حذف المؤسسة`},accept:{title:`لقد تلقيت دعوة`,description:`تمت دعوتك للانضمام إلى {{orgName}} بصفة {{role}}.`,errorTitle:`الدعوة غير متاحة`,goToOrgs:`الانتقال إلى المؤسسات`,loading:`جارٍ تحميل الدعوة…`,organization:`المؤسسة`,role:`الدور`,expiresAt:`تنتهي في`,accept:`قبول الدعوة`,accepted:`تم قبول الدعوة`,acceptFailed:`فشل قبول الدعوة`,decline:`رفض`,declined:`تم رفض الدعوة`,declineFailed:`فشل رفض الدعوة`},switcher:{label:`تبديل المؤسسة`,groupLabel:`مؤسسة العمل`,groupHint:`تُنشأ السجلات الجديدة هنا. تعرض العروض بيانات من جميع مؤسساتك.`,manageMembers:`إدارة الأعضاء`}},notifications:{regionLabel:`الإشعارات`,groupCount:`{{count}} من الإشعارات`,groupUnread:`{{count}} غير مقروء`,groupMarkRead:`تعليم كمقروء`,groupMarkReadTitle:`تعليم كل هذا النوع كمقروء`,empty:`لا توجد إشعارات`,markAllRead:`تعليم الكل كمقروء`,viewAll:`عرض جميع الإشعارات`,approvalsPending:`{{count}} موافقات معلقة`,viewApprovals:`عرض الموافقات`,noPendingApprovals:`لا توجد موافقات معلقة`,openApprovalsInbox:`فتح صندوق الموافقات`,badgeTotal:`{{total}} إجمالاً`,badgeNotifications:`{{unread}} إشعارات`,badgeApprovals:`{{approvals}} موافقات معلقة`,emptyUnread:`كل شيء مقروء`,filterUnread:`غير مقروء`,filterAll:`الكل`},publicForm:{submit:`إرسال`,submitting:`جارٍ الإرسال…`,submitAnother:`إرسال رد آخر`,poweredBy:`مدعوم بـ ObjectStack`,secureNotice:`يتم نقل معلوماتك بأمان وتستخدم فقط لمعالجة طلبك.`,thankYouTitle:`شكراً!`,thankYouMessage:`تم استلام إرسالك بنجاح.`,redirecting:`إعادة توجيه خلال {{seconds}} ثانية(ثوانٍ)…`,unavailableTitle:`النموذج غير متاح`,unavailableDescription:`لا يوجد نموذج عام متاح على هذا الرابط. تأكد من تمكين المشاركة المجهولة للعرض الأساسي.`,tryDemo:`تجربة العرض التوضيحي`,retry:`إعادة المحاولة`,loading:`جارٍ تحميل النموذج…`,requiredHint:`* حقل مطلوب`,consentLabelDefault:`أوافق على سياسة الخصوصية وأعطي موافقتي على معالجة بياناتي لهذا الطلب.`,consentLink:`سياسة الخصوصية`,consentRequired:`يرجى قبول سياسة الخصوصية للمتابعة.`,rateLimited:`خذ لحظة لمراجعة إجاباتك قبل الإرسال.`,redirectBlocked:`تم قبول الإرسال، لكن رابط إعادة التوجيه تم حظره لأسباب أمنية.`,demo:{contactTitle:`تواصل معنا`,contactDescription:`أخبرنا عن مشروعك وسيتواصل معك أحد ممثلي المبيعات خلال يوم عمل.`,supportTitle:`إرسال طلب دعم`,supportDescription:`صف لنا المشكلة وسيرد فريقنا خلال يوم عمل.`,thankYouSalesTitle:`شكراً — لقد استلمنا رسالتك!`,thankYouSalesMessage:`سيتواصل معك أحد ممثلي المبيعات خلال يوم عمل.`,thankYouSupportTitle:`تم — طلبك في قائمة الانتظار.`,thankYouSupportMessage:`سيتابع معك مهندس الدعم قريباً. احفظ هذه الصفحة إذا كان لديك لقطات شاشة إضافية.`,field:{firstName:`الاسم الأول`,lastName:`اسم العائلة`,email:`البريد الإلكتروني للعمل`,phone:`الهاتف`,jobTitle:`المسمى الوظيفي`,company:`الشركة`,website:`الموقع الإلكتروني`,industry:`القطاع`,companySize:`حجم الشركة`,howCanWeHelp:`كيف يمكننا مساعدتك؟`,subject:`الموضوع`,description:`الوصف`,issueType:`نوع المشكلة`,priority:`الأولوية`},industry:{technology:`التكنولوجيا`,software:`البرمجيات / SaaS`,finance:`المالية`,healthcare:`الرعاية الصحية`,retail:`التجزئة`,other:`أخرى`},issueType:{question:`سؤال`,problem:`مشكلة`,bug:`خطأ برمجي`,feature_request:`طلب ميزة`},priority:{low:`منخفضة`,medium:`متوسطة`,high:`عالية`,critical:`حرجة`}}},connectAgent:{disabled:{title:`MCP معطّل في هذا النشر`,body:`واجهة MCP متوقفة (OS_MCP_SERVER_ENABLED=false). اطلب من المشغّل إعادة تفعيلها.`},url:{title:`نقطة نهاية MCP لهذه البيئة`,body:`أي عميل ذكاء اصطناعي يدعم MCP يتصل عبر هذا العنوان. الهوية ذاتية الخدمة: النشر هو خادم تفويض OAuth 2.1 الخاص به — تسجّل الدخول بهويتك، وكل استدعاء يخضع لصلاحياتك وأمان مستوى الصفوف.`,downloadSkill:`تنزيل SKILL.md`,skillHint:`مهارة الوكيل المحمولة: تعلّم أي وكيل داعم للمهارات كيفية العمل مع هذه البيئة.`},claude:{body:`الإعدادات ← الموصلات ← إضافة موصل مخصص، الصق هذا العنوان وسجّل الدخول عبر المتصفح.`,reachability:`يتصل claude.ai (الويب) من خوادم Anthropic — يجب أن يكون النشر متاحًا عبر HTTPS عام. عملاء سطح المكتب والمحليون يصلون أيضًا إلى نشر الشبكات الداخلية.`},claudeCode:{body:`أمر واحد — يفتح تسجيل دخول OAuth تلقائيًا عند أول استخدام:`,plugin:`أو ثبّت الإضافة الرسمية (تضيف مهارة ObjectStack وأمر /objectstack:connect الموجَّه):`},cursor:{addButton:`أضِف إلى Cursor`,body:`استخدم زر النقرة الواحدة، أو أضف ما يلي إلى .cursor/mcp.json:`},vscode:{body:`أضِف إلى .vscode/mcp.json (أو عبر أمر MCP: Add Server):`},codex:{body:`أضِف إلى ~/.codex/config.toml. إذا كانت نسخة Codex لديك لا تدعم تدفق OAuth، فاستخدم ترويسة مفتاح API (انظر أدناه):`},apiKey:{title:`مفاتيح API`,badge:`بدون واجهة`,body:`للتكامل المستمر والسكربتات والوكلاء بلا متصفح. المفتاح يتصرف بهويتك — تعامل معه ككلمة مرور. يُعرض مرة واحدة فقط.`,namePlaceholder:`اسم المفتاح (مثل ci-agent)`,mint:`إنشاء مفتاح`,minting:`جارٍ الإنشاء…`,showOnce:`أُنشئ المفتاح «{{name}}» — انسخه الآن، لن يُعرض مجددًا:`,done:`تم — إخفاء`}},excelImport:{noImportableFields:`لا تحتوي هذه الكائن على حقول قابلة للاستيراد.`,schemaReadFailed:`تعذّرت قراءة مخطط الكائن.`,imported:`تم استيراد {{count}} صف إلى {{object}}.`,importFrom:`استيراد الصفوف الفعلية من`,into:`إلى`,opening:`جارٍ الفتح…`,importAction:`استيراد`,dismiss:`تجاهل`},cloudOnboarding:{hintCreate:`أنشئ بيئتك الأولى — مساحة عمل خاصة لها رابطها وقاعدة بياناتها وخطتها. يجري بناء التطبيقات داخلها.`,hintReady:`بيئة الإنتاج جاهزة. افتحها لبناء تطبيقاتك وتشغيلها — كل ذلك يحدث داخل البيئة.`,createEnvironment:`أنشئ بيئتك`,openProduction:`فتح بيئة الإنتاج`,manageEnvironments:`إدارة البيئات`},aiModelStatus:{summary:`يستخدم الإنشاء / السؤال {{conversational}} ({{conversationalSource}})؛ ويستخدم الإخراج المهيكل {{structured}} ({{structuredSource}}).`,summaryRouting:`سياسة التوجيه: الخطط المجانية ← {{free}}، الخطط المدفوعة ← {{paid}}.`,modelUnknown:`غير معروف`,sourceUnknown:`لم يبلّغ عنه المحوّل`,rowConversational:`نموذج Build / Ask`,rowStructured:`مُهيكل (blueprint / seed)`,rowReasoning:`مستوى الاستدلال`,readFailed:`تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال. قد لا تُشغّل هذه البيئة خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.`,readFailedWithStatus:`تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال (HTTP {{status}}). قد لا تُشغّل هذه البيئة خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.`,overridesInEffect:`التجاوزات السارية: `,noOverrides:`لا شيء — يجري تشغيل القيم الافتراضية للكود المنشور.`,adapter:`المحوّل: `,sourceCodeDefault:`القيمة الافتراضية في الكود (بدون تجاوز env)`,sourceInherits:`مثل build/ask`,sourcePinned:`مثبّت بواسطة {{source}}`},chatbotError:{title:`فشل الرد`,fallbackDetail:`حدث خطأ ما. يرجى المحاولة مرة أخرى.`,details:`التفاصيل`,hide:`إخفاء`,retry:`إعادة المحاولة`},chatbotQuota:{title:`الترقية مطلوبة`,fallbackMessage:`لقد بلغت حصتك من الذكاء الاصطناعي.`,buyCredits:`شراء باقة أرصدة`,upgradePlan:`ترقية الخطة`},environment:{addEnvironment:`إضافة بيئة`,setUpProduction:`إعداد بيئة الإنتاج`,addDevelopment:`إضافة بيئة تطوير`,entitlement:{productionLimitTitle:`لديك بالفعل بيئة الإنتاج الخاصة بك`,productionLimitBody:`تتضمّن كل مؤسسة بيئة إنتاج واحدة فقط. أنشئ مؤسسة منفصلة للحصول على بيئة أخرى، أو تواصل معنا بشأن ترتيبات الخطة المؤسسية.`,planLockedTitle:`بيئات التطوير ميزة مدفوعة`,planLockedBody:`تتضمّن {{plan}} بيئة إنتاج واحدة. قم بالترقية لإضافة بيئات تطوير — أنشئ في بيئة التطوير ثم انشر إلى الإنتاج.`,limitTitle:`تم بلوغ الحد الأقصى لبيئات التطوير`,limitBody:`تزداد السعة مع مقاعد الذكاء الاصطناعي. أضف مقعدًا، أو أرشف بيئة تطوير غير مستخدمة لتحرير مكان.`,limitBodyWithCount:`تستخدم {{used}} من أصل {{limit}} بيئة تطوير. تزداد السعة مع مقاعد الذكاء الاصطناعي — أضف مقعدًا، أو أرشف بيئة تطوير غير مستخدمة.`,freePlan:`الخطة المجانية`,namedPlan:`خطة {{plan}}`,upgradeCta:`ترقية الخطة`,contactSalesCta:`تواصل مع المبيعات`}},cloudConnection:{checking:`جارٍ التحقق من الاتصال…`,retry:`إعادة المحاولة`,errors:{expired:`انتهت صلاحية الطلب قبل الموافقة عليه. ابدأ من جديد.`,bindFailed:`فشل الربط.`,deviceCodeFailed:`فشل طلب رمز الجهاز.`},waiting:{popupOpened:`وافق على الاتصال في النافذة التي فُتحت للتو — سيتم تحديث هذه الصفحة تلقائيًا.`,polling:`في انتظار الموافقة في وحدة التحكم السحابية…`,openApproval:`فتح صفحة الموافقة`,copy:`نسخ`,copied:`تم النسخ`,codePrefilled:`الرمز مُعبَّأ مسبقًا في صفحة الموافقة.`,openItHere:`لم تظهر النافذة؟ افتحها من هنا`,cancel:`إلغاء`},bound:{title:`متصل بـ ObjectStack Cloud`,runtime:`بيئة التشغيل`,organization:`المؤسسة`,approvedBy:`تمت الموافقة بواسطة`,runtimeId:`معرّف بيئة التشغيل`,environment:`البيئة`,since:`متصل منذ`,privatePackages:`تظهر الآن الحزم الخاصة بمؤسستك في السوق ضمن «مؤسستك».`,disconnect:`قطع الاتصال`},unbound:{title:`غير متصل`,body:`اربط بيئة التشغيل هذه بمستوى تحكم ObjectStack لتصفّح الحزم الخاصة بمؤسستك وتثبيتها هنا. الموافقة بنقرة واحدة في حسابك السحابي — دون إدخال أي معرّفات أو بيانات اعتماد في هذه الصفحة.`,connect:`اتصال`}},marketplace:{suggestedBindings:{promptEveryone:`يقترح هذا التطبيق منح «{{set}}» لجميع المستخدمين المسجّلين (موضع Everyone).`,promptGuest:`يقترح هذا التطبيق منح «{{set}}» للزوار غير المصادَق عليهم (موضع Guest).`,confirm:`منح`,confirming:`جارٍ المنح…`,dismiss:`تجاهل`,confirmedToast:`تم الآن منح «{{set}}» إلى {{anchor}}.`,dismissedToast:`تم تجاهل اقتراح «{{set}}».`},title:`سوق التطبيقات`,subtitle:`استعرض التطبيقات المعتمدة المنشورة في كتالوج ObjectStack. انقر على تطبيق لرؤية التفاصيل وتثبيته في أحد بيئاتك.`,searchPlaceholder:`ابحث عن التطبيقات بالاسم أو معرف المانيفست…`,searchAria:`البحث في تطبيقات السوق`,installed:`مثبت`,installedCount:`مثبت ({{count}})`,refresh:`تحديث`,all:`الكل`,noApprovedYet:`لا توجد تطبيقات معتمدة للسوق بعد.`,noMatchFilters:`لا توجد تطبيقات تطابق الفلاتر.`,noDescription:`لا وصف متاح.`,back:`العودة إلى السوق`,installedTitle:`التطبيقات المثبتة`,installedSubtitle:`حزم السوق المثبتة حالياً في نواة هذا الوقت التشغيل.`,installedEmpty:`لا توجد تطبيقات سوق مثبتة في هذا الوقت التشغيل بعد.`,browseLink:`استعراض السوق →`,installedAdditiveNote:`<strong>ملاحظة:</strong> واجهة برمجة النواة إضافية فقط — إلغاء التثبيت يزيل المانيفست من القرص لكي لا يتم تحميل الحزمة عند التشغيل التالي، لكن النواة الجارية تبقي التطبيق مسجلاً حتى إعادة التشغيل.`,installedAt:`تم التثبيت {{when}}`,installedBy:`بواسطة {{user}}`,installedPackageId:`الحزمة`,cachedAs:`مخزن مؤقتاً كـ <code>{{path}}</code>`,versionBadge:`v{{version}}`,installedBadge:`مثبت v{{version}}`,load:{failed:`تعذر تحميل السوق`,failedHint:`بشكل افتراضي، يشير هذا الوقت التشغيل إلى سحابة ObjectStack العامة. تأكد من أن الوقت التشغيل متصل بالإنترنت.`,packageFailed:`تعذر تحميل الحزمة`,notFound:`غير موجود.`},detail:{homepage:`الصفحة الرئيسية`,installedV:`مثبت · v{{version}}`,about:`حول`,noReadme:`لا يوجد readme متاح.`,versions:`الإصدارات`,noApprovedVersions:`لا توجد إصدارات معتمدة.`,prerelease:`ما قبل الإصدار`,moreOptions:`مزيد من خيارات التثبيت`,uninstallFromRuntime:`إلغاء التثبيت من هذا الوقت التشغيل`,addSampleData:`إضافة بيانات تجريبية`,reseedAgain:`إعادة تحميل البيانات التجريبية`,purgeSampleData:`حذف البيانات التجريبية`,purgeConfirm:`حذف جميع السجلات التجريبية التي أنشأتها هذه الحزمة؟ لن تتأثر السجلات التي أضافها المستخدم.`,purgeSuccess:`تم حذف {{count}} سجل تجريبي.`,purgeNoData:`لا توجد سجلات تجريبية للحذف.`,reseedQueued:`ستتم إعادة تحميل البيانات التجريبية عند الوصول التالي إلى البيئة.`,reseedLocalSuccess:`تمت إعادة تحميل البيانات التجريبية: {{inserted}} مضافة، {{updated}} محدثة.`,reseedPartialErrors:`(فشل في كتابة {{count}} سجل)`,updateAvailable:`يتوفر تحديث`},action:{installed:`مثبَّت`,install:`تثبيت`,reinstall:`إعادة التثبيت`,working:`جارٍ المعالجة…`,installToCloud:`تثبيت في السحابة…`,installing:`جارٍ التثبيت…`,uninstall:`إلغاء التثبيت`,uninstalling:`جارٍ إلغاء التثبيت…`,details:`التفاصيل`,close:`إغلاق`,dismiss:`رفض`,openOnCloud:`فتح في السحابة`,backHome:`العودة إلى الرئيسية`,updateTo:`تحديث`},install:{dialogTitle:`تثبيت {{name}}`,dialogDescCurrent:`تثبيت في هذه البيئة ({{host}}).`,dialogDescPicker:`اختر بيئة لتثبيت هذا التطبيق. يجب أن تكون مسجلاً في ObjectStack Cloud.`,environment:`البيئة`,environmentPlaceholder:`تحديد بيئة`,includeSampleData:`تضمين بيانات نموذجية`,noEnvs:`لم يتم العثور على بيئات في مؤسستك النشطة.`,noPermission:`ليس لديك إذن لتثبيت التطبيقات. فقط مالكو المؤسسة والمشرفون يمكنهم التثبيت.`,signInFirst:`يجب عليك أولاً تسجيل الدخول إلى ObjectStack Cloud.`,success:`تم التثبيت بنجاح. افتح البيئة لرؤية التطبيق الجديد.`,localSuccess:`تم تثبيت v{{version}} في هذا الوقت التشغيل. يجب أن يظهر "{{name}}" الآن في مبدّل التطبيقات.`,localManifestConflict:`{{message}}
|
|
33
|
-
ملاحظة: تطبيق محلي يمتلك بالفعل هذا المعرف. أزله أولاً من objectstack.config.ts.`,localUnauthorized:`سجل الدخول إلى هذا الوقت التشغيل أولاً.`,localMarketplaceUnavailable:`هذا الوقت التشغيل لا يحتوي على OS_CLOUD_URL مُهيأ.`,updateTo:`تحديث → v{{version}}`,installedVersion:`مثبت v{{version}}`},org:{heading:`مؤسستك`,install:`تثبيت`,installed:`تم تثبيت {{name}}`,installedBadge:`مثبت`,installing:`جارٍ التثبيت…`},disclosure:{containsCode:`تحتوي هذه الحزمة على تعليمات برمجية`,reviewed:`تمت المراجعة والموافقة`,unreviewed:`لم تتم المراجعة بعد`,signed:`موقَّع`,grantsIntro:`عند التثبيت، ستُمنح هذه الحزمة:`,services:`خدمات المنصة`,hooks:`خطافات دورة الحياة`,network:`الوصول إلى الشبكة`,fs:`الوصول إلى نظام الملفات`,noPermissions:`لا تطلب أي أذونات خاصة.`,acknowledge:`أفهم أن هذه الحزمة تنفّذ تعليمات برمجية وتحصل على الأذونات المذكورة أعلاه.`,runtime:{node:`داخل العملية · ثقة كاملة`,sandbox:`في بيئة معزولة`,worker:`خارج العملية`}},uninstall:{confirm:`إلغاء تثبيت {{manifestId}} v{{version}} من هذا الوقت التشغيل؟
|
|
34
|
-
|
|
35
|
-
سيتم إزالة المانيفست المخزن مؤقتاً.`,successInList:`تم إزالة {{manifestId}}. أعد تشغيل الوقت التشغيل لتفريغه بالكامل.`,successInDetail:`تم إزالة المانيفست المخزن مؤقتاً لـ {{manifestId}}.`},accessDenied:{title:`سوق التطبيقات للمشرفين فقط`,description:`ليس لديك إذن لتثبيت التطبيقات في هذه البيئة.`},category:{crm:`CRM`,erp:`ERP`,hr:`الموارد البشرية`,finance:`المالية`,project:`إدارة المشاريع`,collaboration:`التعاون`,analytics:`التحليلات`,integration:`التكامل`,automation:`الأتمتة`,ai:`الذكاء الاصطناعي`,security:`الأمان`,"developer-tools":`أدوات المطور`,"ui-theme":`سمة واجهة المستخدم`,storage:`التخزين`,other:`أخرى`},pricing:{free:`مجاني`,freemium:`مجاني جزئياً`,paid:`مدفوع`,subscription:`اشتراك`,"usage-based":`حسب الاستخدام`,"contact-sales":`تواصل مع المبيعات`},relativeTime:{today:`اليوم`,daysAgo:`منذ {{count}} ي`,monthsAgo:`منذ {{count}} شهر(أشهر)`,yearsAgo:`منذ {{count}} سنة(سنوات)`}},approvals:{approve:`الموافقة`,reject:`رفض`,comment:`تعليق (اختياري)`,approveSuccess:`تمت الموافقة`,rejectSuccess:`تم الرفض`,rejectConfirm:`هل تريد رفض طلب الموافقة هذا؟`},approvalsInbox:{loadMore:`تحميل المزيد`,loadingMore:`جارٍ التحميل…`,loadedOf:`تم تحميل {{loaded}} من {{total}}`,actEscalate:`تصعيد SLA`,systemSlaActor:`النظام (SLA)`,reassignBtn:`إعادة إسناد`,reassignTitle:`تسليم هذه الموافقة لشخص آخر؟`,reassignBody:`ينتقل مقعدك كموافق إلى الشخص المختار — يتم إخطاره ويمكنه التصرف فورًا.`,reassignTo:`الموافق الجديد`,reassignToPlaceholder:`اختر مستخدمًا أو اكتب بريدًا / role:<الاسم>`,reassignSuccess:`تم التسليم إلى {{to}}`,requestInfoBtn:`طلب معلومات`,requestInfoTitle:`طلب مزيد من المعلومات من مقدم الطلب؟`,requestInfoBody:`يبقى الطلب قيد الانتظار؛ يُخطر مقدم الطلب ويمكنه الرد في السلسلة.`,requestInfoPlaceholder:`ماذا تحتاج من مقدم الطلب؟`,requestInfoSent:`أُعيد إلى مقدم الطلب لاستكمال المعلومات`,remindBtn:`تذكير`,remindSuccess:`أُرسل تذكير إلى {{count}} موافق`,remindThrottled:`أُرسل تذكير مؤخرًا — حاول لاحقًا.`,replyPlaceholder:`الرد على هذا الطلب…`,slaRemaining:`SLA المتبقي {{dur}}`,slaOverdue:`SLA متأخر {{dur}}`,actReassign:`إعادة إسناد`,reassignFromTo:`من {{from}} إلى {{to}}`,actRemind:`تذكير`,actRequestInfo:`طلب معلومات`,actComment:`تعليق`,stepProgress:`خطوات الموافقة`,prevRequest:`السابق`,nextRequest:`التالي`,positionOf:`الطلب {{index}} من {{total}}`,progressApprovals:`الموافقات — {{got}} من {{need}}`,progressGroups:`تقدم التوقيعات — {{got}} من {{need}} مجموعات`,progressEligible:`{{count}} معتمِد مؤهل`,progressBar:`تقدم القرار`,declaredActions:`الإجراءات`,attachmentChip:`مرفق`,attachmentOpenFailed:`تعذّر فتح المرفق — يرجى المحاولة مرة أخرى`,approveOneTitle:`الموافقة على "{{title}}"؟`,approveOneBody:`ستتم الموافقة على الطلب بهويتك. لإضافة تعليق أو مرفق، افتح الطلب.`,flowOrigin:`بدأها التدفق`,sortBy:`ترتيب`,sortRecent:`الأحدث أولاً`,sortOldest:`الأقدم أولاً`,sortAmount:`المبلغ (تنازلي)`,quickPhrase1:`موافق — مستوفٍ للمتطلبات.`,quickPhrase2:`موافقة مشروطة — يرجى متابعة التنفيذ.`,quickPhrase3:`يرجى إضافة مستندات داعمة وإعادة التقديم.`,title:`مركز الموافقات`,subtitle:`راجع طلبات الموافقة وتعامل معها.`,refresh:`تحديث`,tabMyPending:`بانتظار موافقتي`,tabSubmitted:`المقدمة مني`,tabAll:`الكل`,searchPlaceholder:`ابحث عن سجل أو عملية أو مقدم طلب…`,clearSearch:`مسح البحث`,statusFilter:`الحالة`,allStatuses:`كل الحالات`,processFilter:`العملية`,allProcesses:`كل العمليات`,objectFilter:`الكائن`,allObjects:`كل الكائنات`,filterCount:`{{shown}} من {{total}}`,selected:`محدد`,actionableCount:`({{count}} قابلة للتنفيذ)`,selectAll:`تحديد الكل`,selectRow:`تحديد الطلب`,colRequest:`الطلب`,colRecord:`السجل`,colRequester:`مقدم الطلب`,colStatus:`الحالة`,colWaiting:`تاريخ التقديم`,colActions:`إجراءات`,statusPending:`قيد الانتظار`,statusApproved:`تمت الموافقة`,statusRejected:`مرفوض`,statusRecalled:`مسحوب`,statusReturned:`أُعيد للمراجعة`,sendBackBtn:`إعادة للمراجعة`,sendBackTitle:`إعادة هذا الطلب للمراجعة؟`,sendBackBody:`تنتهي هذه الجولة ويُفتح قفل السجل ليتمكن مقدم الطلب من تصحيح البيانات. عند إعادة الإرسال تبدأ جولة موافقة جديدة لجميع الموافقين.`,sendBackPlaceholder:`ما الذي يجب تصحيحه قبل الموافقة؟`,sendBackSuccess:`أُعيد للمراجعة — يمكن لمقدم الطلب الآن التعديل وإعادة الإرسال`,sendBackAutoRejected:`تم بلوغ حد المراجعات — رُفض الطلب تلقائيًا`,actRevise:`أُعيد للمراجعة`,actResubmit:`أُعيد الإرسال`,roundChip:`الجولة {{n}}`,returnedHint:`أعاد أحد الموافقين هذا الطلب إليك. السجل غير مقفل — صحّح البيانات ثم أعد الإرسال لبدء جولة موافقة جديدة.`,resubmitBtn:`إعادة الإرسال`,resubmitting:`جارٍ إعادة الإرسال…`,resubmitSuccess:`أُعيد الإرسال — بدأت جولة موافقة جديدة`,resubmitPlaceholder:`ما الذي غيّرته؟`,editRecordBtn:`تحرير السجل`,abandonTitle:`التخلي عن هذه المراجعة؟`,abandonBody:`يُسحب الطلب بدلاً من إعادة إرساله. تنتهي الموافقة هنا.`,emptyTitle:`لا توجد طلبات`,emptyPending:`كل شيء منجز — لا يوجد ما ينتظر موافقتك.`,emptyOther:`لا يوجد شيء هنا بعد.`,emptyViewAll:`عرض كل الطلبات`,noMatches:`لا نتائج مطابقة للمرشحات الحالية.`,keyboardHint:`لوحة المفاتيح: j/k تنقل · Enter فتح · x تحديد · a موافقة · r رفض`,drawerTitle:`طلب موافقة`,submittedAgo:`قُدِّم {{when}}`,completedAt:`اكتمل {{when}}`,waitingOn:`بانتظار`,history:`النشاط`,noActions:`لا إجراءات بعد.`,actSubmit:`تقديم`,actApprove:`موافقة`,actReject:`رفض`,actRecall:`سحب`,rawData:`البيانات الخام (JSON)`,copy:`نسخ`,copied:`تم النسخ`,copyFailed:`فشل النسخ`,overrideActor:`التصرف بهوية أخرى (مسؤول)`,actor:`الهوية`,auto:`تلقائي`,overrideHint:`مثال: role:sales_manager. اتركه فارغًا لاستخدام الهوية المكتشفة تلقائيًا.`,comment:`تعليق (اختياري)`,approve:`موافقة`,approving:`جارٍ الموافقة…`,reject:`رفض`,rejecting:`جارٍ الرفض…`,recall:`سحب`,recalling:`جارٍ السحب…`,cancel:`إلغاء`,clear:`مسح`,approveN:`الموافقة على {{count}}`,rejectN:`رفض {{count}}`,bulkApproveTitle:`الموافقة على {{count}} طلبات؟`,bulkApproveBody:`ستتم الموافقة على كل طلب بهويتك ويتابع التدفق عبر فرع الموافقة.`,bulkRejectTitle:`رفض {{count}} طلبات؟`,bulkRejectBody:`سيتم رفض الطلبات المحددة وإخطار مقدميها.`,bulkApproved:`تمت الموافقة على {{count}} طلبات`,bulkRejected:`تم رفض {{count}} طلبات`,bulkPartial:`نجح {{ok}}، فشل {{fail}}: {{which}}`,rejectOneTitle:`رفض "{{title}}"؟`,rejectOneBody:`سيتم رفض الطلب وإخطار مقدمه.`,rejectTitle:`رفض هذا الطلب؟`,rejectBody:`سيتم وضع علامة مرفوض على الطلب وإخطار مقدمه.`,recallTitle:`سحب هذا الطلب؟`,recallBody:`بعد السحب لن يتمكن الموافقون من التصرف، وسيتم فك قفل السجل.`,inlineApproved:`تمت الموافقة على "{{title}}"`,inlineRejected:`تم رفض "{{title}}"`,approvedFinal:`تمت الموافقة`,approvedWaiting:`تمت الموافقة — بانتظار بقية الموافقين`,rejectedToast:`تم الرفض`,recalledToast:`تم سحب الطلب`,whyDisabled:`لا يمكن التصرف إلا للموافقين المعينين. بانتظار: {{who}}.`,whyDisabledSubmitter:`أنت قدمت هذا الطلب لذا يمكنك سحبه — لكن الموافقة أو الرفض للموافقين المعينين فقط.`,noActor:`تعذر تحديد هوية التنفيذ`,actionFailed:`فشل الإجراء`,loadFailed:`فشل تحميل الطلب`,recallUnavailable:`السحب غير متاح في هذا النشر.`,requestGone:`لم يعد هذا الطلب موجودًا. حدّث القائمة.`,notAllowed:`ليست لديك صلاحية لهذا الإجراء.`,alreadyDecided:`تم البت في هذا الطلب بالفعل. حدّث القائمة.`,justNow:`الآن`,minutesAgo:`قبل {{count}} دقيقة`,hoursAgo:`قبل {{count}} ساعة`,daysAgo:`قبل {{count}} يوم`},preview:{empty:{loadFailedTitle:`تعذّر تحميل معاينة المسودة`,loadFailedDescription:`تعذّرت قراءة طبقة المسودة. أعد المحاولة أو تحقق من الاتصال.`,notReadyTitle:`"{{app}}" ليس في المسودة بعد`,notReadyDescription:`قد يكون البناء قيد التشغيل، أو فشل قبل تجهيز هذا التطبيق. تحقق من حالة البناء في المحادثة — تتحدث هذه اللوحة عند وصول المسودات.`,nothingTitle:`لا شيء للمعاينة بعد`,retry:`إعادة المحاولة`},draftBar:{messageClean:`معاينة المسودة — لا توجد تغييرات غير منشورة؛ كل ما هنا منشور بالفعل.`,sampleDataTitle:`تظهر البيانات التجريبية بعد النشر`,sampleDataBody:`أنت تعاين بنية تطبيقك. انشره لتحميل سجلات تجريبية وتفعيله.`,publishCta:`انشر لتراه مباشرةً`,message:`معاينة المسودة — أنت ترى تغييرات غير منشورة. لن يصبح أي شيء فعليًا حتى تنشر.`,publish:`نشر`,publishing:`جارٍ النشر…`,exit:`إنهاء المعاينة`,changes:`التغييرات`},changes:{title:`التغييرات المعلّقة`,description:`ما الذي سيغيّره النشر. تُضاف العناصر الجديدة؛ وتستبدل التحديثات النسخة المنشورة.`,loading:`جارٍ تحميل التغييرات المعلّقة…`,loadFailed:`تعذّر تحميل التغييرات المعلّقة:`,empty:`لا شيء معلّق — نُشرت كل المسودات.`,kindNew:`جديد`,kindUpdate:`تحديث`,detailLoading:`جارٍ تحميل التفاصيل…`,detailLoadFailed:`تعذر تحميل تفاصيل التغيير:`,detailNone:`لم يتم اكتشاف اختلافات — المسودة مطابقة للنسخة المنشورة.`,detailChangedKeys:`تغييرات أخرى:`,confirmNote:`النشر يُصدر كل المسودات المعلقة ({{count}}) لهذه الحزمة دفعة واحدة.`,publishConfirm:`نشر الكل`},unpublishedBar:{message:`تطبيق غير منشور — يعمل بالكامل، لكن لا يراه سوى المنشئين. انشره ليصبح مرئياً لمستخدميك.`,publish:`نشر`,publishing:`جارٍ النشر…`,published:`تم النشر! التطبيق مرئي الآن لمستخدميك.`,publishFailed:`فشل النشر`},history:{button:`السجل`,title:`سجل البناء`,description:`كل تغيير في هذا التطبيق، الأحدث أولاً. تراجع عن أي خطوة لإلغائها — لا حاجة لتأكيد النشر.`,loadFailed:`تعذر تحميل السجل:`,loadFailedUnavailable:`يتعذّر الوصول مؤقتًا إلى مخزن الإيداعات — لم تتم هذه القراءة، لذلك لا يُعرض أي سجل. أعد المحاولة بعد قليل.`,loading:`جارٍ تحميل السجل…`,empty:`لا يوجد سجل لهذا التطبيق بعد.`,revertLabel:`تم التراجع عن تغيير`,applyLabel:`تغيير من البناء`,revert:`تراجع`,items:`عناصر`,revertAction:`تراجع`,reverted:`تم التراجع — أُلغي التغيير.`,revertFailed:`فشل التراجع`,revertUnavailable:`يتعذّر الوصول مؤقتًا إلى مخزن الإيداعات — قد لا يكون التراجع قد طُبِّق. أعد فتح هذا السجل للتحقق قبل إعادة المحاولة.`}},filterBuilder:{where:`حيث`,and:`و`,or:`أو`,clearAll:`مسح الكل`,selectField:`اختر الحقل`,operator:`العامل`,selectValue:`اختر القيمة`,value:`القيمة`,addFilter:`إضافة عامل تصفية`,removeCondition:`إزالة الشرط`,trueLabel:`نعم`,falseLabel:`لا`,noResults:`لا توجد نتائج`,searchField:`بحث {{label}}…`,enterId:`أدخل معرّف {{label}}`,operators:{equals:`يساوي`,notEquals:`لا يساوي`,contains:`يحتوي`,notContains:`لا يحتوي`,isEmpty:`فارغ`,isNotEmpty:`غير فارغ`,greaterThan:`أكبر من`,lessThan:`أصغر من`,greaterOrEqual:`أكبر من أو يساوي`,lessOrEqual:`أصغر من أو يساوي`,before:`قبل`,after:`بعد`,between:`بين`,in:`ضمن`,notIn:`ليس ضمن`}},sortBuilder:{sortBy:`ترتيب حسب`,thenBy:`ثم حسب`,selectField:`اختر الحقل`,ascending:`A → Z`,descending:`Z → A`,addSort:`إضافة ترتيب`,removeSort:`إزالة الترتيب`},collaboration:{commentCount:`{{count}} تعليقات`,commentCountOne:`{{count}} تعليق`,resolvedSuffix:` · تم الحل`,sortComments:`ترتيب التعليقات`,sortOldest:`الأقدم أولاً`,sortNewest:`الأحدث أولاً`,resolve:`وضع علامة كمحلول`,reopen:`إعادة الفتح`,justNow:`الآن`,minutesAgo:`قبل {{count}} دقيقة`,hoursAgo:`قبل {{count}} ساعة`,daysAgo:`قبل {{count}} يوم`,edited:`(تم التعديل)`,reactionCount:`{{count}} تفاعلات`,reactionCountOne:`{{count}} تفاعل`,addThumbsUp:`إضافة إعجاب`,reply:`رد`,reactThumbsUp:`التفاعل بإعجاب`,reactHeart:`التفاعل بقلب`,cancelReply:`إلغاء الرد`,replyingTo:`الرد على {{name}}…`,replyingToComment:`الرد على التعليق…`,commentPlaceholder:`أضف تعليقًا… (استخدم @ للإشارة)`,send:`إرسال`,presentUserCount:`{{count}} مستخدمين متواجدين`,presentUserCountOne:`{{count}} مستخدم متواجد`,moreUserCount:`{{count}} مستخدمين آخرين`,moreUserCountOne:`{{count}} مستخدم آخر`,userStatusTitle:`{{name}} ({{status}})`,statusActive:`نشط`,statusIdle:`خامل`,statusAway:`غائب`},wizard:{missingRequired:`يرجى إكمال الحقول المطلوبة: {{fields}}`},appManagement:{title:`التطبيقات`,subtitle:`إدارة جميع التطبيقات المُعدّة`,newApp:`تطبيق جديد`,searchLabel:`البحث في التطبيقات`,searchPlaceholder:`البحث في التطبيقات…`,selectedCount:`{{n}} محدد`,bulkEnable:`تفعيل`,bulkDisable:`تعطيل`,selectAll:`تحديد الكل ({{n}})`,empty:`لم يتم العثور على تطبيقات.`,defaultBadge:`افتراضي`,active:`نشط`,inactive:`غير نشط`,selectApp:`تحديد {{name}}`,openApp:`فتح التطبيق`,openAppNamed:`فتح {{name}}`,editApp:`تعديل التطبيق`,editAppNamed:`تعديل {{name}}`,editWithAi:`التعديل بالذكاء الاصطناعي`,editWithAiNamed:`تعديل {{name}} بالذكاء الاصطناعي`,enableApp:`تفعيل التطبيق`,disableApp:`تعطيل التطبيق`,enableAppNamed:`تفعيل {{name}}`,disableAppNamed:`تعطيل {{name}}`,setDefault:`تعيين كافتراضي`,setDefaultNamed:`تعيين {{name}} كافتراضي`,deleteApp:`حذف التطبيق`,deleteAppNamed:`حذف {{name}}`,confirmDelete:`انقر مرة أخرى لتأكيد الحذف`,confirmDeleteNamed:`تأكيد حذف {{name}}`,toast:{noClient:`تعذّر الوصول إلى خدمة البيانات الوصفية`,unknownError:`خطأ غير معروف`,appEnabled:`تم تفعيل {{name}}`,appDisabled:`تم تعطيل {{name}}`,toggleFailed:`فشل تغيير حالة التطبيق: {{reason}}`,setDefaultDone:`تم تعيين {{name}} كافتراضي`,setDefaultFailed:`فشل تعيين التطبيق الافتراضي: {{reason}}`,appDeleted:`تم حذف {{name}}`,deleteFailed:`فشل حذف التطبيق: {{reason}}`,bulkEnabled:`تم تفعيل {{n}} تطبيقات`,bulkDisabled:`تم تعطيل {{n}} تطبيقات`,bulkFailed:`فشل لـ {{n}}: {{details}}`,bulkFailureEntry:`{{name}} ({{reason}})`,bulkFailureJoiner:`؛ `,bulkOperationFailed:`فشلت العملية الجماعية: {{reason}}`}}}},$o=[`ar`,`he`,`fa`,`ur`];function es(e){return $o.includes(e)}var ts=`__ouiLabelProbe`;function ns(){return typeof process>`u`||!1}function rs(){let e=new Set;return(t,n,r,i,a,o)=>{if(o&&o.__ouiLabelProbe)return;let s=Array.isArray(t)?t[0]:String(t??``),c=`${s}:${r}`;if(e.has(c))return;e.add(c);let l=i?`"${i}"`:`the key itself`;console.warn(`[object-ui i18n] Missing translation for "${r}" (language "${s}") — falling back to ${l}.`)}}function is(e={}){let{defaultLanguage:t=`en`,fallbackLanguage:n=`en`,resources:r={},detectBrowserLanguage:i=!0,interpolation:a,warnMissingKeys:o=ns()}=e,s={};for(let[e,t]of Object.entries(Qo))s[e]={translation:{...t,...r[e]||{}}};for(let[e,t]of Object.entries(r))s[e]||(s[e]={translation:t});let c=t;if(i&&typeof navigator<`u`){let e=navigator.language?.split(`-`)[0];e&&s[e]&&(c=e)}let l=d.createInstance();return l.use(p).init({lng:c,fallbackLng:n,resources:s,interpolation:{escapeValue:!1,...a},returnNull:!1,saveMissing:o,missingKeyHandler:o?rs():void 0,react:{useSuspense:!1}}),l}function as(e){return es(e)?`rtl`:`ltr`}var os=`objectui-locale`;function ss(){if(typeof window>`u`)return null;try{return window.localStorage.getItem(os)}catch{return null}}function cs(e){if(!(typeof window>`u`))try{window.localStorage.setItem(os,e)}catch{}}function ls(){if(!(typeof window>`u`))try{window.localStorage.removeItem(os)}catch{}}var us=`objectui-locale-seed`;function ds(){if(typeof window>`u`)return null;try{return window.localStorage.getItem(us)}catch{return null}}function fs(e){if(!(typeof window>`u`))try{typeof e==`string`&&e.length>0?window.localStorage.setItem(us,e):window.localStorage.removeItem(us)}catch{}}function ps(e,t){let n=Object.prototype.hasOwnProperty;return n.call(Qo,e)||!!(t?.resources&&n.call(t.resources,e))}var ms=Object.freeze(Object.keys(Qo));function hs(e){let t=Object.keys(e?.resources??{}).filter(e=>!ms.includes(e));return[...ms,...t]}function gs(e){if(typeof Intl>`u`||typeof Intl.getCanonicalLocales!=`function`)return/^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/.test(e);try{return Intl.getCanonicalLocales(e).length===1}catch{return!1}}function _s(e,t,n=!1){return ps(e,t)?!0:n&&gs(e)}function vs(e,t){if(_s(e,t))return e;let n=e.split(`-`)[0];return n&&n!==e&&_s(n,t)?n:null}function ys(e){let t=ds();if(!t)return null;let n=vs(t,e);return n?{config:{...e,defaultLanguage:n,detectBrowserLanguage:!1},provisional:null}:null}function bs(e,t,n){if(!t)return{config:e,provisional:null};let r=ss();return r?_s(r,e,n)?{config:{...e,defaultLanguage:r,detectBrowserLanguage:!1},provisional:ps(r,e)?null:r}:(ls(),ys(e)??{config:e,provisional:null}):ys(e)??{config:e,provisional:null}}var xs=(0,K.createContext)(null);function Ss({config:e,instance:t,loadLanguage:n,loadLocales:r,persistLanguage:i=!0,children:a}){let o=!!n,s=(0,K.useMemo)(()=>{if(t)return{instance:t,provisional:null};let n=bs(e,i,o);return{instance:is(n.config),provisional:n.provisional}},[t,e,i,o]),c=s.instance,[l,u]=(0,K.useState)(c.language||`en`),d=as(l),f=(0,K.useRef)(new Set);(0,K.useEffect)(()=>{let e=e=>{u(e),i&&cs(e),typeof document<`u`&&(document.documentElement.dir=as(e),document.documentElement.lang=e)},t=c.language||l;return typeof document<`u`&&t&&(document.documentElement.dir=as(t),document.documentElement.lang=t),c.on(`languageChanged`,e),()=>{c.off(`languageChanged`,e)}},[c,i]),(0,K.useEffect)(()=>{if(!n)return;let e=c.language||`en`;f.current.has(e)||(f.current.add(e),n(e).then(t=>{t&&Object.keys(t).length>0&&(c.addResourceBundle(e,`translation`,t,!0,!0),u(e))}).catch(t=>{f.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}))},[c,n]);let[p,h]=(0,K.useState)(null),g=!!r,_=(0,K.useRef)(!1);(0,K.useEffect)(()=>{!r||_.current||(_.current=!0,r().then(e=>h(Array.isArray(e)?e:[])).catch(e=>{h([]),console.warn(`[i18n] Failed to load the app locale list:`,e)}))},[r]);let v=(0,K.useMemo)(()=>{let t=hs(e);if(!g)return t;if(p===null)return null;let n=p.filter(t=>_s(t,e,o));return n.length>0?n:t},[e,g,p,o]);(0,K.useEffect)(()=>{let t=s.provisional;if(!t||!p||p.length===0||p.includes(t)||(c.language||``)!==t)return;let n=e?.defaultLanguage||e?.fallbackLanguage||`en`;(async()=>{await c.changeLanguage(n),(c.language||``)===n&&ls()})()},[s,p,c,e]);let y=(0,K.useMemo)(()=>({language:l,changeLanguage:async e=>{if(n&&!f.current.has(e)){f.current.add(e);try{let t=await n(e);c.addResourceBundle(e,`translation`,t,!0,!0)}catch(t){f.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}}await c.changeLanguage(e)},direction:d,i18n:c,offerableLanguages:v}),[l,d,c,n,v]);return K.createElement(xs.Provider,{value:y},K.createElement(m,{i18n:c},a))}function Cs(e){let t=(0,K.useContext)(xs),{t:n,i18n:r}=f(e);return{t:n,language:t?.language||r.language||`en`,changeLanguage:t?.changeLanguage||(async e=>{await r.changeLanguage(e)}),direction:t?.direction||`ltr`,i18n:r,offerableLanguages:t?t.offerableLanguages:ms}}var ws=new Set([`common`,`validation`,`form`,`table`,`grid`,`calendar`,`list`,`kanban`,`chart`,`dashboard`,`configPanel`,`appDesigner`,`console`,`errors`,`detail`]);function Ts(){let{t:e,i18n:t}=Cs();return(0,K.useMemo)(()=>{let n=()=>{if(!t||typeof t.getResourceBundle!=`function`)return[];let e=t.language||`en`,n=t.getResourceBundle(e,`translation`);return n?Object.keys(n).filter(e=>!ws.has(e)&&n[e]&&typeof n[e]==`object`&&(n[e].objects||n[e].fields||n[e].apps||n[e].dashboards||n[e].pages||n[e].reports||n[e].globalActions)):[]},r=e=>{if(typeof e!=`string`)return``;let t=e.indexOf(`__`);return t>0?e.slice(t+2):e},i=(t,r)=>{let i=Array.isArray(t)?t:[t];try{let t=n();for(let n of t)for(let t of i){let r=`${n}.${t}`,i=e(r,{defaultValue:``,[ts]:!0});if(i&&i!==r&&i!==``)return i}}catch{}return r},a=(e,t)=>{let n=r(e);return n===e?[`objects.${e}.${t}`]:[`objects.${e}.${t}`,`objects.${n}.${t}`]},o=(e,t,n)=>{let r=`globalActions.${t}.${n}`;return e?[...a(e,`_actions.${t}.${n}`),r]:[r]},s=(e,t)=>{let n=r(e);return n===e?[`fields.${e}.${t}`]:[`fields.${e}.${t}`,`fields.${n}.${t}`]},c=(e,t,n)=>{let i=r(e);return i===e?[`fieldOptions.${e}.${t}.${n}`]:[`fieldOptions.${e}.${t}.${n}`,`fieldOptions.${i}.${t}.${n}`]},l=(e,t)=>{let n=r(e);return n===e?[`dashboards.${e}.${t}`]:[`dashboards.${e}.${t}`,`dashboards.${n}.${t}`]},u=(e,t)=>{let n=r(e);return n===e?[`pages.${e}.${t}`]:[`pages.${e}.${t}`,`pages.${n}.${t}`]},d=(e,t)=>{let n=r(e);return n===e?[`reports.${e}.${t}`]:[`reports.${e}.${t}`,`reports.${n}.${t}`]},f=(e,t,n)=>{let i=[e,r(e)].map(e=>`${e}.`).find(e=>t.startsWith(e)),o=i?t.slice(i.length):t;return a(e,`_views.${o}.${n}`)};return{objectLabel:e=>i(a(e.name,`label`),e.label),objectDescription:e=>{if(e.description)return i(a(e.name,`description`),e.description)},fieldLabel:(e,t,n)=>i(s(e,t),n),fieldOptionLabel:(e,t,n,r)=>i(c(e,t,n),r),translateOptions:(e,t,n)=>n.map(n=>({...n,label:i(c(e,t,n.value),n.label)})),appLabel:e=>i(`apps.${e.name}.label`,e.label??e.name),appDescription:e=>{let t=e.description??``;return i(`apps.${e.name}.description`,t)||void 0},navGroupLabel:(e,t,n)=>i(`apps.${e}.navigation.${t}.label`,n),dashboardLabel:e=>i(l(e.name,`label`),e.label??e.name),dashboardDescription:e=>{let t=e.description??``;return i(l(e.name,`description`),t)||void 0},dashboardActionLabel:(e,t,n)=>i(l(e,`actions.${t}.label`),n),widgetTitle:(e,t,n)=>i(l(e,`widgets.${t}.title`),n),widgetDescription:(e,t,n)=>{let r=n??``;return i(l(e,`widgets.${t}.description`),r)||void 0},pageLabel:e=>i(u(e.name,`label`),e.label??e.name),reportLabel:e=>i(d(e.name,`label`),e.label??e.name),viewLabel:(e,t,n)=>i(f(e,t,`label`),n),viewDescription:(e,t,n)=>{let r=n??``;return i(f(e,t,`description`),r)||void 0},viewEmptyState:(e,t,n)=>{if(!n)return;let r=n.title?i(f(e,t,`emptyState.title`),n.title):n.title,a=n.message?i(f(e,t,`emptyState.message`),n.message):n.message;return{...n,title:r,message:a}},sectionLabel:(e,t,n)=>i(a(e,`_sections.${t}.label`),n),actionLabel:(e,t,n)=>i(o(e,t,`label`),n),actionConfirm:(e,t,n)=>{let r=n??``;return i(o(e,t,`confirmText`),r)||void 0},actionSuccess:(e,t,n)=>{let r=n??``;return i(o(e,t,`successMessage`),r)||void 0},actionDescription:(e,t,n)=>{let r=n??``;return t?i(o(e,t,`description`),r)||void 0:r||void 0},actionResultDialog:(t,r,a)=>{if(!a||!r)return a;let s=e=>o(t,r,`resultDialog.${e}`),c=e=>i(s(e),a[e]??``)||a[e],l=(()=>{try{for(let t of n())for(let n of s(`fields`)){let r=e(`${t}.${n}`,{returnObjects:!0,defaultValue:null,[ts]:!0});if(r&&typeof r==`object`&&!Array.isArray(r))return r}}catch{}})(),u=Array.isArray(a.fields)?a.fields.map(e=>{if(!e||typeof e.path!=`string`)return e;let t=l?.[e.path];return typeof t==`string`&&t.length>0?{...e,label:t}:e}):a.fields;return{...a,title:c(`title`),description:c(`description`),acknowledge:c(`acknowledge`),fields:u}},actionParamText:(e,t,n,r,a)=>{let s=a??``;return!t||!n?s||void 0:i(o(e,t,`params.${n}.${r}`),s)||void 0},actionParamOptionLabel:(e,t,n,r,a)=>!t||!n?a:i(o(e,t,`params.${n}.options.${r}`),a)}},[e,t])}var Es={fieldLabel:(e,t,n)=>n,translateOptions:(e,t,n)=>n,fieldOptionLabel:(e,t,n,r)=>r,sectionLabel:(e,t,n)=>n,actionLabel:(e,t,n)=>n};function Ds(){return Ts()??Es}function Os(e,t){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(typeof e==`object`){let n=e,r=e=>{if(!Object.prototype.hasOwnProperty.call(n,e))return;let t=n[e];return typeof t==`string`?t:void 0},i=(t||`en`).trim(),a=i.split(`-`)[0],o=Object.keys(n).find(e=>e.split(`-`)[0]===a&&r(e)!==void 0);return r(i)??r(a)??(o===void 0?void 0:r(o))??r(`default`)??r(`en`)??Object.values(n).find(e=>typeof e==`string`)??``}return String(e)}function ks(){let{actionLabel:e,actionConfirm:t,actionSuccess:n}=Ts(),{language:r}=Cs();return(0,K.useMemo)(()=>((i,a,o)=>{if(!a||typeof a!=`object`)return a;let s=Os(a.label,r),c=typeof a.name==`string`&&a.name?a.name:void 0,l=s||c||o?.fallbackLabel||``;if(!c)return l===a.label?a:{...a,label:l};let u={...a,label:e(i,c,l)};return a.confirmText!==void 0&&(u.confirmText=t(i,c,a.confirmText)),a.successMessage!==void 0&&(u.successMessage=n(i,c,a.successMessage)),u}),[e,t,n,r])}function As(){let e=(0,K.useContext)(X),t=Y(),n=e?.runner?.getContext?.()?.user;if(Array.isArray(n?.systemPermissions))return n.systemPermissions;let r=t?.user;if(Array.isArray(r?.systemPermissions))return r.systemPermissions}function js(){let e=As();return(0,K.useCallback)(t=>!Array.isArray(t)||t.length===0||!Array.isArray(e)||t.every(t=>typeof t==`string`&&e.includes(t)),[e])}function Ms(e,t,n,r){let i=(0,K.useContext)(J)?.apiFetch,a=r?.enabled??!0,[o,s]=(0,K.useState)(null),c=(n??[]).filter(Boolean),l=[a?`1`:`0`,e??``,c.join(`,`),JSON.stringify(t??null)].join(`|`);return(0,K.useEffect)(()=>{if(!a||!e||c.length===0){s(null);return}let n=e=>t&&t[e]||e,r=!1;return(async()=>{try{let t=i??fetch,a=await _i(async e=>{let n=await(await t(`/api/v1/meta/object/${encodeURIComponent(e)}`,{headers:{accept:`application/json`},credentials:`include`})).json().catch(()=>null);return n?.item??n?.data??n},e,c.map(n));r||s({metaByPath:a,relabel:c.map(e=>({dim:e,path:n(e)}))})}catch{r||s(null)}})(),()=>{r=!0}},[l,i]),o}function Ns(e,t,n,r){let{fieldOptionLabel:i}=Ds(),a=Ms(e,t,n,r);return(0,K.useMemo)(()=>gi(a?.metaByPath,a?.relabel,i),[a,i])}function Ps(e,t){return!0}function Fs(e,t={}){let n=$a(),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(null);(0,K.useEffect)(()=>{let e=!1;if(!n.ensureType){i(!0);return}return n.ensureType(`page`).then(()=>{e||(i(!0),o(null))}).catch(t=>{e||(o(t instanceof Error?t:Error(String(t))),i(!0))}),()=>{e=!0}},[n]);let s=(0,K.useMemo)(()=>{if(!e&&!t.pageName)return null;let r=Array.isArray(n.pages)?n.pages:[];if(!r.length)return null;if(t.pageName)return r.find(e=>e?.name===t.pageName)??null;let i=r.filter(n=>!n||(n.pageType??(n.type===`record`?`record`:void 0))!==`record`||n.object!==e?!1:Ps(n,t));return i.length?(i.sort((e,t)=>(t?.priority??0)-(e?.priority??0)),i[0]):null},[n.pages,e,t.pageName,t.recordType,t.profile,t.app,t.formFactor]),{page:c,slots:l}=(0,K.useMemo)(()=>s?s.kind===`slotted`?{page:null,slots:s.slots??{}}:{page:s,slots:null}:{page:null,slots:null},[s]);return{page:c,slots:l,loading:n.loading||!r,error:a??n.error??null}}function Is(e,t,n){if(!e)return 0;let r=e.toLowerCase(),i=(t||``).toLowerCase();return(n||``).toLowerCase()===r?110:i===r?100:i.startsWith(r)?80:i.split(/[\s_\-/.,:;()[\]]+/).filter(Boolean).some(e=>e.startsWith(r))?60:i.includes(r)?40:0}function Ls(e){let{query:t,objects:n,dataSource:r,objectNames:i,maxObjectsQueried:a=8,topPerObject:o=3,minLength:s=2,debounceMs:c=250,enabled:l=!0,getDisplayName:u=Ie}=e,[d,f]=(0,K.useState)([]),[p,m]=(0,K.useState)(!1),[h,g]=(0,K.useState)(void 0),_=(0,K.useMemo)(()=>{if(!Array.isArray(n)||n.length===0)return[];let e;if(Array.isArray(i)&&i.length>0){let t=new Map;for(let e of n){let n=e?.name;typeof n==`string`&&t.set(n,e)}e=i.map(e=>t.get(e)).filter(e=>e!=null)}else e=n.filter(e=>e?.searchable!==!1);return e},[n,i]),v=(0,K.useMemo)(()=>_.map(e=>`${e?.name}:${e?.titleField??``}`).join(`|`),[_]),y=(0,K.useRef)(0);return(0,K.useEffect)(()=>{if(!l||!r||_.length===0){f([]),m(!1),g(void 0);return}let e=(t??``).trim();if(e.length<s){f([]),m(!1),g(void 0);return}let n=++y.current;m(!0),g(void 0);let i=setTimeout(()=>{if(y.current!==n)return;let t=r.searchAll;if(typeof t==`function`){let i=new Map;for(let e of _)typeof e?.name==`string`&&i.set(e.name,e);Promise.resolve().then(()=>t.call(r,e,{limit:a*o,objects:Array.from(i.keys())})).then(t=>{if(y.current!==n)return;let r=Array.isArray(t?.hits)?t.hits:Array.isArray(t)?t:[],a=[];for(let t of r){let n=t?.object??t?.objectName;if(typeof n!=`string`||i.size>0&&!i.has(n))continue;let r=t?.id??t?.record?.id??t?.record?._id;if(r==null)continue;let o=i.get(n)??{name:n},s=(typeof t?.title==`string`&&t.title.trim()!==``?t.title.trim():``)||u(o,t?.record??{})||`Record #${r}`,c=typeof t?.snippet==`string`?t.snippet.trim():``;a.push({objectName:n,objectLabel:typeof o.label==`string`&&o.label.length>0?o.label:n,recordId:String(r),display:s,subtitle:c&&c!==s?c:void 0,icon:o?.icon,score:Is(e,s,String(r)),raw:t?.record??t})}a.sort((e,t)=>(t.score===110)-+(e.score===110)),f(a),m(!1),g(void 0)}).catch(e=>{y.current===n&&(f([]),m(!1),g(e instanceof Error?e:Error(String(e))))});return}let i=_.slice(0,a).map(t=>Promise.resolve().then(()=>r.find(t.name,{$search:e,$top:o})).then(e=>({obj:t,res:e,err:null})).catch(e=>({obj:t,res:null,err:e})));Promise.allSettled(i).then(t=>{if(y.current!==n)return;let r=[],i;for(let n of t){if(n.status!==`fulfilled`)continue;let{obj:t,res:a,err:s}=n.value;if(s){let e=s?.httpStatus??s?.status;if(s?.code,e===404||rn(s,`OBJECT_NOT_FOUND`))continue;i=s instanceof Error?s:Error(String(s));continue}let c=Array.isArray(a?.data)?a.data:Array.isArray(a)?a:[];for(let n of c.slice(0,o)){let i=n?.id??n?._id;if(i==null)continue;let a=u(t,n);r.push({objectName:t.name,objectLabel:typeof t.label==`string`&&t.label.length>0?t.label:t.name,recordId:String(i),display:a,icon:t?.icon,score:Is(e,a,String(i)),raw:n})}}r.sort((e,t)=>t.score-e.score),f(r),m(!1),g(i)})},c);return()=>{clearTimeout(i)}},[t,l,r,v,o,a,s,c,u]),{results:d,isSearching:p,error:h}}var Rs=new Set,zs=`objectui:related-changed`;function Bs(e){for(let t of Array.from(Rs))try{t(e)}catch{}typeof window<`u`&&window.dispatchEvent(new CustomEvent(zs,{detail:{objectName:e.objectName,recordId:e.recordId}}))}function Vs(e){return Rs.add(e),()=>Rs.delete(e)}function Hs(e,t,n){return e.objectName===`*`?!0:e.objectName===t?n===void 0||e.recordId===void 0||e.recordId===n:!1}function Us(e,t){let[n,r]=(0,K.useState)(0);return(0,K.useEffect)(()=>{if(e)return Vs(n=>{Hs(n,e,t)&&r(e=>e+1)})},[e,t]),n}function Ws(e){(0,K.useEffect)(()=>{let t=e;if(t?.onMutation)return t.onMutation(e=>{e?.resource&&Bs({objectName:e.resource,recordId:e.id==null?void 0:String(e.id)})})},[e])}var Gs=(e,t)=>t===`pagination.pageSize`?e.pagination?.pageSize:e[t],Ks=(e,t,n,r)=>{if(n===`pagination.pageSize`){e.pagination={...t.pagination??{},pageSize:r};return}e[n]=r};function qs(e,t={},n){let r=Do(e,Vn(n)?void 0:n),{object:i=`objectName`,columns:a,filter:o,sort:s,limit:c,viewType:l}=t,u=K.useMemo(()=>{let t=r.composed;if(!t)return e;let n=e??{},u={...n};if(i!==!1&&(u[i]=t.object),a&&!(Array.isArray(n.columns)&&n.columns.length>0)&&t.columns!==void 0&&(u.columns=t.columns),o){let e=T(n.filter,t.filter);e===void 0?delete u.filter:u.filter=e}return s&&t.sort!==void 0&&(r.config?.sort!==void 0||n.sort===void 0)&&(u.sort=t.sort),c&&t.limit!==void 0&&(r.config?.limit!==void 0||Gs(n,c)===void 0)&&Ks(u,n,c,t.limit),l&&t.viewType!==void 0&&n.viewType===void 0&&(u.viewType=t.viewType),u},[e,r.composed,r.config,i,a,o,s,c,l]);return K.useMemo(()=>({status:r.status,schema:u,config:r.config,error:r.error}),[r.status,r.config,r.error,u])}function Js({testId:e,title:t=`This component’s data source could not be resolved`,message:n}){return(0,q.jsxs)(`div`,{className:`p-4 border border-red-500 rounded text-red-500 bg-red-50 my-2`,role:`alert`,"data-testid":`${e}-datasource-error`,children:[(0,q.jsx)(`p`,{className:`font-medium`,children:t}),n?(0,q.jsx)(`p`,{className:`text-sm mt-1`,children:n}):null]})}function Ys({testId:e}){return(0,q.jsx)(`div`,{className:`p-2 text-sm text-muted-foreground animate-pulse`,role:`status`,"aria-live":`polite`,"data-testid":`${e}-resolving-view`,children:`Loading view…`})}function Xs({schema:e,mapping:t,dataSource:n,testId:r,errorTitle:i,children:a}){let o=qs(e,t,n);return o.status===`missing`?(0,q.jsx)(Js,{testId:r,title:i,message:o.error}):o.status===`loading`?(0,q.jsx)(Ys,{testId:r}):a(o.schema)}function $(...e){for(let t of e)if(typeof t==`string`&&t.trim())return t;return null}function Zs(e){let t=e,n=t&&typeof t==`object`?$(t.details?.error,t.details?.message,t.error):null;if(!n){let r=e instanceof Error?e.message:typeof e==`string`?e:typeof t?.message==`string`?t.message:``,i=r.indexOf(`{`);if(i>=0)try{let e=JSON.parse(r.slice(i));n=$(e?.error,e?.message)}catch{}!n&&r.trim()&&(n=r)}return n&&n.replace(/^\[[^\]]+\]\s*/,``).replace(/^[A-Z][A-Z0-9_]+:\s*/,``).trim()||null}function Qs(e){let t=e;if(!t||typeof t!=`object`)return null;let n=Array.isArray(t.validationErrors)&&t.validationErrors||Array.isArray(t.details?.fields)&&t.details.fields||Array.isArray(t.fields)&&t.fields||null;if(!n||!Array.isArray(n))return null;let r=[];for(let e of n){if(!e||typeof e!=`object`)continue;let t=e,n=$(t.field,t.name,t.path);if(!n)continue;let i=$(t.message,t.error,t.code)??``;r.push({field:n,message:i})}return r.length>0?r:null}function $s(e){let t=e;if(!t||typeof t!=`object`)return!1;if((t.httpStatus??t.status??t.statusCode)===403)return!0;let n=$(t.code,t.details?.code)??``;if(n===`PERMISSION_DENIED`||n===`FORBIDDEN`)return!0;let r=`${typeof t.message==`string`?t.message:``} ${t.details?.error??t.error??``}`;return/row-level security|access denied|permission denied|not permitted/i.test(r)}var ec=n(((t,n)=>{var r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,s=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},c=(e,t,n,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let c of a(t))!o.call(e,c)&&c!==n&&r(e,c,{get:()=>t[c],enumerable:!(s=i(t,c))||s.enumerable});return e},l=e=>c(r({},`__esModule`,{value:!0}),e),u={};s(u,{ObjectLogger:()=>S,createLogger:()=>C}),n.exports=l(u);var d={debug:0,info:1,warn:2,error:3,fatal:4,silent:5},f={debug:`\x1B[36m`,info:`\x1B[32m`,warn:`\x1B[33m`,error:`\x1B[31m`,fatal:`\x1B[35m`,silent:``},p=`\x1B[0m`;function m(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/([A-Z]+)([A-Z][a-z])/g,`$1 $2`).replace(/([a-zA-Z])([0-9])/g,`$1 $2`).split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.toLowerCase())}function h(e){return/(?:ss|us|is)$/.test(e)?e:/(?:ch|sh|s|x|z)es$/.test(e)?e.slice(0,-2):/[a-z0-9]s$/.test(e)?e.slice(0,-1):e}var g=new Set(`access.account.admin.api.app.auth.bearer.client.csrf.db.database.encryption.id.jwt.master.oauth.private.public.refresh.root.secret.service.session.shared.sign.signing.ssh.token.user.webhook.xsrf`.split(`.`));function _(e,t){for(let n of[e,h(e)])if(!(n.length<=t.length||!n.endsWith(t))&&g.has(n.slice(0,n.length-t.length)))return!0;return!1}function v(e,t){for(let n=0;n+t.length<=e.length;n++)if(t.every((t,r)=>e[n+r]===t))return!0;return!1}function y(e,t){if(t.length===0||e.length===0)return!1;if(t.length>1){let n=t.join(``);return v(e,t)||e.some(e=>e===n||h(e)===n)}let n=t[0],r=e.filter(e=>/[a-z]/.test(e)).length>1;return e.some(e=>e===n||r&&h(e)===n||_(e,n))}function b(e){if(typeof process<`u`){let e={}.NO_COLOR;if(e!==void 0&&e!==``)return!1}return!!e?.isTTY}function x(t){if(typeof process>`u`)return;let n=process.getBuiltinModule;if(typeof n==`function`)try{return n.call(process,`node:${t}`)}catch{return}try{return e(t)}catch{return}}var S=class e{constructor(e={},t={}){this.ownsFileStream=!1,this.fileLoggingDisabled=!1,this.config={name:e.name,level:e.level??`info`,format:e.format??`pretty`,redact:e.redact??[`password`,`token`,`secret`,`key`],sourceLocation:e.sourceLocation??!1,file:e.file,rotation:{maxSize:e.rotation?.maxSize??`10m`,maxFiles:e.rotation?.maxFiles??5}},this.bindings=t,this.redactPatterns=this.config.redact.map(m).filter(e=>e.length>0),this.config.file&&typeof process<`u`&&this.openFileStream(this.config.file)}openFileStream(e){let t=x(`fs`),n=x(`path`);if(!t||!n){this.disableFileLogging(e,`no filesystem access in this runtime`);return}try{t.mkdirSync(n.dirname(e),{recursive:!0});let r=t.createWriteStream(e,{flags:`a`});r.on(`error`,t=>this.disableFileLogging(e,t.message)),this.fileStream=r,this.ownsFileStream=!0}catch(t){this.disableFileLogging(e,t.message)}}disableFileLogging(e,t){if(this.fileStream=void 0,this.ownsFileStream=!1,this.fileLoggingDisabled)return;this.fileLoggingDisabled=!0;let n=`${this.config.name?`[${this.config.name}] `:``}logger: file logging disabled \u2014 cannot write to ${e}: ${t}`;typeof process<`u`&&process.stderr?process.stderr.write(n+`
|
|
36
|
-
`):typeof console<`u`&&console.warn(n)}isEnabled(e){return d[e]>=d[this.config.level]}isRedactedFieldName(e){let t=m(e);return this.redactPatterns.some(e=>y(t,e))}redactSensitive(e){if(!e||typeof e!=`object`)return e;let t=Array.isArray(e)?[...e]:{...e};for(let e in t)this.isRedactedFieldName(e)?t[e]=`***REDACTED***`:typeof t[e]==`object`&&t[e]!==null&&(t[e]=this.redactSensitive(t[e]));return t}write(e,t,n,r){if(!this.isEnabled(e))return;let i=this.redactSensitive({...this.bindings,...n,...r?{error:{message:r.message,stack:r.stack}}:{}}),a=Object.keys(i).length>0,o=new Date().toISOString(),s=e===`error`||e===`fatal`,c=typeof process<`u`?process:void 0,l=c?s?c.stderr:c.stdout:void 0,u,d;if(this.config.format===`json`)u=d=JSON.stringify({time:o,level:e,...this.config.name?{name:this.config.name}:{},msg:t,...i});else if(this.config.format===`text`){let n=[o,e.toUpperCase(),t];a&&n.push(JSON.stringify(i)),u=d=n.join(` | `)}else{let n=this.config.name?`[${this.config.name}] `:``,r=`${o} ${e.toUpperCase()}`,s=` ${n}${t}`;a&&(s+=` ${JSON.stringify(i)}`),d=r+s;let c=f[e]||``;u=c&&b(l)?`${c}${r}${p}${s}`:d}l?l.write(u+`
|
|
37
|
-
`):typeof console<`u`&&(e===`error`||e===`fatal`?console.error:e===`warn`?console.warn:e===`debug`?console.debug:console.log)(u),this.fileStream&&this.fileStream.write(d+`
|
|
38
|
-
`)}debug(e,t){this.write(`debug`,e,t)}info(e,t){this.write(`info`,e,t)}warn(e,t){this.write(`warn`,e,t)}error(e,t,n){this.writeErrorLike(`error`,e,t,n)}fatal(e,t,n){this.writeErrorLike(`fatal`,e,t,n)}writeErrorLike(e,t,n,r){if(n instanceof Error){this.write(e,t,r,n);return}let i=n&&r?{...n,...r}:n??r;this.write(e,t,i)}log(e,...t){this.info(e,t.length>0?{args:t}:void 0)}child(t){let n=new e({...this.config,file:void 0},{...this.bindings,...t});return n.config.file=this.config.file,n.fileStream=this.fileStream,n}withTrace(e,t){return this.child({traceId:e,spanId:t})}async destroy(){let e=this.fileStream;this.fileStream=void 0,!(!e||!this.ownsFileStream)&&(this.ownsFileStream=!1,await new Promise(t=>e.end(t)))}};function C(e){return new S(e)}0&&(n.exports={ObjectLogger:S,createLogger:C})}));export{eo as $,Ut as $n,oi as $t,Jo as A,Tn as An,g as Ar,Ji as At,go as B,an as Bn,zi as Bt,ds as C,Vn as Cn,ue as Cr,oa as Ct,Zo as D,An as Dn,ne as Dr,Y as Dt,Qo as E,kn as En,w as Er,$i as Et,wo as F,dn as Fn,qi as Ft,lo as G,Yt as Gn,Oi as Gt,po as H,tn as Hn,ji as Ht,So as I,ln as In,Hi as It,io as J,Zt as Jn,wi as Jt,ro as K,Xt as Kn,Ei as Kt,Co as L,pn as Ln,Pi as Lt,No as M,yn as Mn,Yi as Mt,Oo as N,vn as Nn,Bi as Nt,Xo as O,En as On,re as Or,na as Ot,Do as P,cn as Pn,Vi as Pt,$a as Q,Vt as Qn,yi as Qt,yo as R,fn as Rn,Ri as Rt,fs as S,Qn as Sn,E as Sr,ca as St,Cs as T,zn as Tn,T as Tr,ta as Tt,mo as U,en as Un,G as Ut,_o as V,nn as Vn,Ni as Vt,no as W,Qt as Wn,Di as Wt,Za as X,Wt as Xn,Si as Xt,Ya as Y,qt as Yn,Ci as Yt,Xa as Z,Ht as Zn,bi as Zt,ks as _,br as _n,Ce as _r,xa as _t,Js as a,ii as an,F as ar,Va as at,Ds as b,gr as bn,fe as br,la as bt,Bs as c,ri as cn,N as cr,X as ct,Ws as d,Yr as dn,ze as dr,ja as dt,si as en,bt as er,qa as et,Ls as f,Jr as fn,Re as fr,Da as ft,js as g,Or as gn,k as gr,ba as gt,Ms as h,Dr as hn,Ie as hr,Sa as ht,$s as i,hi as in,rt as ir,Ha as it,Ho as j,bn as jn,Xi as jt,Yo as k,wn as kn,_ as kr,J as kt,Vs as l,$r as ln,Ze as lr,ka as lt,Ns as m,Ur as mn,ke as mr,Ta as mt,Qs as n,ai as nn,dt as nr,Ba as nt,Xs as o,_i as on,$e as or,Ga as ot,Fs as p,Wr as pn,Le as pr,Oa as pt,uo as q,Jt as qn,Ti as qt,Zs as r,gi as rn,ht as rr,Wa as rt,Ys as s,li as sn,P as sr,Ua as st,ec as t,ni as tn,xt as tr,Ja as tt,Us as u,Qr as un,Be as ur,Aa as ut,Os as v,Sr as vn,Se as vr,va as vt,ss as w,Bn as wn,oe as wr,Qi as wt,Ss as x,hr as xn,D as xr,aa as xt,Ts as y,xr as yn,ge as yr,_a as yt,bo as z,rn as zn,Fi as zt};
|