@objectstack/console 17.6.0 → 17.7.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.
Files changed (277) hide show
  1. package/CHANGELOG.md +428 -0
  2. package/dist/.objectstack-injection.json +2 -2
  3. package/dist/.objectui-sha +1 -1
  4. package/dist/assets/{ActionResultDialog-4kHDGnT3.js → ActionResultDialog-ChYnuROr.js} +3 -3
  5. package/dist/assets/{AiPendingActionsPage-JjOddm0h.js → AiPendingActionsPage-Dh3-i4BB.js} +1 -1
  6. package/dist/assets/{ApiConsolePage-BgS26lbp.js → ApiConsolePage-CKYEqlMs.js} +1 -1
  7. package/dist/assets/{AppDocsIndex-BDoH5ECM.js → AppDocsIndex-B5Tky2xg.js} +1 -1
  8. package/dist/assets/{AppManagementPage-CCgKmNTj.js → AppManagementPage-ZwyvnHpM.js} +1 -1
  9. package/dist/assets/ApprovalsInboxPage-DD4fe0Em.js +1 -0
  10. package/dist/assets/AuditLogPage-Sed6iMqP.js +1 -0
  11. package/dist/assets/BookPage-DYjUsQIc.js +1 -0
  12. package/dist/assets/{ComponentNavView-B5g9c6fx.js → ComponentNavView-DrlxM4SY.js} +1 -1
  13. package/dist/assets/CreateViewDialog-Cp72x_O7.js +1 -0
  14. package/dist/assets/{DashboardView-BOcovpPd.js → DashboardView-juicRxcP.js} +1 -1
  15. package/dist/assets/DocPage-CxJaQ-pC.js +1 -0
  16. package/dist/assets/{DocsIndex-DwW2QsYY.js → DocsIndex-LALVtIVR.js} +1 -1
  17. package/dist/assets/{DocsLayout-D63StSgd.js → DocsLayout-BAwlJQQf.js} +1 -1
  18. package/dist/assets/{DocsSlug-CP9fcabi.js → DocsSlug-CkF1E-Zs.js} +1 -1
  19. package/dist/assets/ExpressionProvider-Dr0e99r1.js +1 -0
  20. package/dist/assets/FlowRunsPage-R3W3t2s4.js +1 -0
  21. package/dist/assets/{IntegrationsPage-DvG0x0Nb.js → IntegrationsPage-DIuFLEbF.js} +2 -2
  22. package/dist/assets/InterfaceListPage-BfoCldGu.js +1 -0
  23. package/dist/assets/{MarketplaceInstalledPage-B7KETQG2.js → MarketplaceInstalledPage-DyjhcUNB.js} +1 -1
  24. package/dist/assets/MarketplacePackagePage-BbO27Pgs.js +4 -0
  25. package/dist/assets/MarketplacePage-DO2_b64U.js +1 -0
  26. package/dist/assets/{MetadataInspector-EP0I3-Kq.js → MetadataInspector-BQyu9pOE.js} +1 -1
  27. package/dist/assets/ObjectDataPage-DIY-yefK.js +1 -0
  28. package/dist/assets/PageView-C-qWu3Jw.js +1 -0
  29. package/dist/assets/ProfilePage-Qp8DL8CF.js +1 -0
  30. package/dist/assets/{PublicFormsPage-D3uCTR-8.js → PublicFormsPage-D3AT2EH9.js} +1 -1
  31. package/dist/assets/RecordDetailView-B3XBEgk2.js +3 -0
  32. package/dist/assets/{RecordFormPage-kiJI-ieF.js → RecordFormPage-CcoZfUJ3.js} +1 -1
  33. package/dist/assets/ReportDefaultInspector-DVcWM6sh.js +1 -0
  34. package/dist/assets/ReportView-pJCFptzp.js +2 -0
  35. package/dist/assets/RuntimeDraftBar-DObTyFu2.js +1 -0
  36. package/dist/assets/SchemaForm-BWSWYMLE.js +3 -0
  37. package/dist/assets/SearchResultsPage-ChVIzFob.js +1 -0
  38. package/dist/assets/{SettingsHub-DP1mrzEN.js → SettingsHub-CPP9FDe8.js} +1 -1
  39. package/dist/assets/{SettingsView-u7mc6pcc.js → SettingsView-CrHAROu9.js} +1 -1
  40. package/dist/assets/{SkeletonDetail-DIwlbHTr.js → SkeletonDetail-CP-35B8x.js} +1 -1
  41. package/dist/assets/{af-DPUgkQl0.js → af-Bhbso4Pg.js} +1 -1
  42. package/dist/assets/ai-BAPiCsNk.js +3 -0
  43. package/dist/assets/app-shell-eager-leaves-D9tgfJOe.js +1 -0
  44. package/dist/assets/{ar-B-6GTIRU.js → ar-DG8TAFtm.js} +1 -1
  45. package/dist/assets/{ar-DZ-wEl298ti.js → ar-DZ-BtSien-d.js} +1 -1
  46. package/dist/assets/{ar-EG-YBT90_S0.js → ar-EG-DpXC0zoY.js} +1 -1
  47. package/dist/assets/{ar-MA-3uT-EYh6.js → ar-MA-D1qVJLyE.js} +1 -1
  48. package/dist/assets/{ar-SA-SiQsjhhc.js → ar-SA-BIYKNgv8.js} +1 -1
  49. package/dist/assets/{ar-TN-CfzXjKzS.js → ar-TN-mUR5Mq3s.js} +1 -1
  50. package/dist/assets/{az-BqAfcNza.js → az-B7IqwHGK.js} +1 -1
  51. package/dist/assets/{be-CQgWXa9_.js → be-CnZyPaSX.js} +1 -1
  52. package/dist/assets/{be-tarask-BmNg0Sir.js → be-tarask--uMMCC7l.js} +1 -1
  53. package/dist/assets/{bg-D3evgRuS.js → bg-CZwuirtY.js} +1 -1
  54. package/dist/assets/{bn-uItkARwm.js → bn-BbOX0r-z.js} +1 -1
  55. package/dist/assets/{bs-DueReOpO.js → bs-B5W75cYR.js} +1 -1
  56. package/dist/assets/{ca-Cr3AHktR.js → ca-Be69LdIM.js} +1 -1
  57. package/dist/assets/{ckb-CTi5BET7.js → ckb-B-nKM1Vn.js} +1 -1
  58. package/dist/assets/{createDerive-CjN1i5vn.js → createDerive-CynsXU-B.js} +1 -1
  59. package/dist/assets/{cs-43mFX9jr.js → cs-qHngxH7l.js} +1 -1
  60. package/dist/assets/{cy-BBSkg3F8.js → cy-DscO2Pgf.js} +1 -1
  61. package/dist/assets/{da-C5oA5qcs.js → da-vibkaLMF.js} +1 -1
  62. package/dist/assets/data-adapter-BDsrq0TX.js +2 -0
  63. package/dist/assets/{de-AT-CApxwJzu.js → de-AT--JneEuBw.js} +1 -1
  64. package/dist/assets/{de-CPtbLlAf.js → de-BCT78XYW.js} +1 -1
  65. package/dist/assets/default-inspector-registry-Dktr6x_q.js +1 -0
  66. package/dist/assets/dist-yh3dYtHt.js +14 -0
  67. package/dist/assets/drillUrlFilters-N0RngQg6.js +1 -0
  68. package/dist/assets/{el-Dto2xBQU.js → el-Cl0y9T2b.js} +1 -1
  69. package/dist/assets/en-AU-By42tTB7.js +1 -0
  70. package/dist/assets/{en-CA-DKuJPN1U.js → en-CA-BqEEoj-Y.js} +1 -1
  71. package/dist/assets/en-GB-Cx8B9nkB.js +1 -0
  72. package/dist/assets/en-IE-CX9nv6uO.js +1 -0
  73. package/dist/assets/en-IN-ByGSBHa4.js +1 -0
  74. package/dist/assets/en-NZ-BPMwa2ZN.js +1 -0
  75. package/dist/assets/en-ZA-lj_N4R6c.js +1 -0
  76. package/dist/assets/{eo-BL8JXIWd.js → eo-oOXROuhF.js} +1 -1
  77. package/dist/assets/{es-BnoaNxsu.js → es-EudscwjH.js} +1 -1
  78. package/dist/assets/{et-tPYLNenO.js → et-CB-5LLh6.js} +1 -1
  79. package/dist/assets/{eu-CUBG6bT0.js → eu-B4-hcseX.js} +1 -1
  80. package/dist/assets/{fa-IR-Rr2d9xSs.js → fa-IR-CogavcMJ.js} +1 -1
  81. package/dist/assets/{fi-B0NVIZsV.js → fi-CIBE0mYa.js} +1 -1
  82. package/dist/assets/{formatLong-1-gt9bpo.js → formatLong-qqgm7lV1.js} +1 -1
  83. package/dist/assets/{fr-CA-CBDvLXFg.js → fr-CA-BugXMutW.js} +1 -1
  84. package/dist/assets/{fr-BbhHek8e.js → fr-CDReXYWW.js} +1 -1
  85. package/dist/assets/{fr-CH-WPNmwPn7.js → fr-CH-fiTiB6X1.js} +1 -1
  86. package/dist/assets/framework-CAuH4h0L.js +35 -0
  87. package/dist/assets/{fy-DvOBbvEF.js → fy-t_GzIAg_.js} +1 -1
  88. package/dist/assets/{gd-BQPiTPX5.js → gd-CSncIxtN.js} +1 -1
  89. package/dist/assets/getIcon-BDkBRQFw.js +1 -0
  90. package/dist/assets/{gl-BJCXK8uO.js → gl-_138Mj2S.js} +1 -1
  91. package/dist/assets/{gu-CctPRz3V.js → gu-COfH-YUT.js} +1 -1
  92. package/dist/assets/{he-CVFMk6p2.js → he-BXL4lOKY.js} +1 -1
  93. package/dist/assets/{hi-Ba30-RwS.js → hi-kXuYI0TJ.js} +1 -1
  94. package/dist/assets/{highlighted-body-OFNGDK62-BQ57IrBV.js → highlighted-body-OFNGDK62-CK7x7Gzm.js} +1 -1
  95. package/dist/assets/{hr-BZUqTbZs.js → hr-DAOsQWzI.js} +1 -1
  96. package/dist/assets/{ht-BLe05tPx.js → ht-Ch8SKz8p.js} +1 -1
  97. package/dist/assets/{hu-2CQ_Mkww.js → hu-q6W_rWPT.js} +1 -1
  98. package/dist/assets/{hy-CclcPG4H.js → hy-0M8OmwnM.js} +1 -1
  99. package/dist/assets/{i18n-BnUsCaSC.js → i18n-DTfZonAM.js} +3 -3
  100. package/dist/assets/i18n-locale-ar-O6rs-Cir.js +4 -0
  101. package/dist/assets/i18n-locale-de-CMc1jk4a.js +4 -0
  102. package/dist/assets/i18n-locale-en-CbRQO81h.js +4 -0
  103. package/dist/assets/i18n-locale-es-t47nyoCX.js +4 -0
  104. package/dist/assets/i18n-locale-fr-E425EqJM.js +4 -0
  105. package/dist/assets/i18n-locale-ja-y_fk77fz.js +4 -0
  106. package/dist/assets/i18n-locale-ko-CdnY2uCg.js +4 -0
  107. package/dist/assets/i18n-locale-pt-BaUOXS6y.js +4 -0
  108. package/dist/assets/i18n-locale-ru-pFlhX9wg.js +4 -0
  109. package/dist/assets/i18n-locale-zh-Dkj4ROTN.js +4 -0
  110. package/dist/assets/i18n-runtime-CdWyaiOD.js +1 -0
  111. package/dist/assets/{id-6JLB8s-f.js → id-BM_H1_jv.js} +1 -1
  112. package/dist/assets/index-ocmkyCt6.js +19 -0
  113. package/dist/assets/index-v2Ijn9Gr.css +2 -0
  114. package/dist/assets/{infrastructure-Cc34lEqb.js → infrastructure-CSnL6ntj.js} +2 -2
  115. package/dist/assets/integration-7NqwVHuJ.js +1 -0
  116. package/dist/assets/{is-to0CWzm1.js → is-B_7jXZfS.js} +1 -1
  117. package/dist/assets/isSameWeek-D90tBsli.js +1 -0
  118. package/dist/assets/{it-ea0B8Ujp.js → it-CBM0J9cD.js} +1 -1
  119. package/dist/assets/{it-CH-DhdfjP5Z.js → it-CH-BQltCNsR.js} +1 -1
  120. package/dist/assets/{ja-B1bzkgDW.js → ja-DBjnsx21.js} +1 -1
  121. package/dist/assets/{ja-Hira-CMrY5hXO.js → ja-Hira-BZfSmj1i.js} +1 -1
  122. package/dist/assets/{ka-DKSXLnXP.js → ka-HwpuKgUY.js} +1 -1
  123. package/dist/assets/{kk-DHwMv8Dn.js → kk-DLKA9paj.js} +1 -1
  124. package/dist/assets/{km-tpLG1xNr.js → km-BU5kermq.js} +1 -1
  125. package/dist/assets/{kn-MLreVnHA.js → kn-BNFqbCoi.js} +1 -1
  126. package/dist/assets/{ko-CI0DBazn.js → ko-D8n4uMqQ.js} +1 -1
  127. package/dist/assets/{lb-CmL572Xe.js → lb-B1empQ7m.js} +1 -1
  128. package/dist/assets/{lt-DRtUOLdw.js → lt-gMukpK3G.js} +1 -1
  129. package/dist/assets/{lv-COSHgkOP.js → lv-D2O5AnsZ.js} +1 -1
  130. package/dist/assets/{match-BQoOW8Cj.js → match-BTF6WqJh.js} +1 -1
  131. package/dist/assets/{match-B-ergJQb.js → match-Cyum2eeW.js} +1 -1
  132. package/dist/assets/{match-dfBS0YSQ.js → match-ScHH8kYk.js} +1 -1
  133. package/dist/assets/mermaid-GHXKKRXX-D4H6EVJQ.js +1 -0
  134. package/dist/assets/metadata-admin-CEhVmXFv.js +9 -0
  135. package/dist/assets/{mk-B0IH_YL_.js → mk-D-Zl0xVN.js} +1 -1
  136. package/dist/assets/{mn-P-QdQ2n3.js → mn-jJbTslgD.js} +1 -1
  137. package/dist/assets/{ms-CtyEOINy.js → ms-CUuJHLA4.js} +1 -1
  138. package/dist/assets/{mt-DfuZ2HRm.js → mt-yIcbfxKY.js} +1 -1
  139. package/dist/assets/{nb-2Hp-5Tnt.js → nb-D9WNypoj.js} +1 -1
  140. package/dist/assets/{nl-BE-mmxbfNoR.js → nl-BE-B1vKiw2h.js} +1 -1
  141. package/dist/assets/{nl-CZ_nLREz.js → nl-DC7b5e90.js} +1 -1
  142. package/dist/assets/{nn-ccWhYsNa.js → nn-uP4yJ9s0.js} +1 -1
  143. package/dist/assets/{oc-z504BFRV.js → oc-DHTqadJI.js} +1 -1
  144. package/dist/assets/{pl-DeQ7ASt-.js → pl-Bxnnizf5.js} +1 -1
  145. package/dist/assets/plugin-calendar-b7C35ANT.js +1 -0
  146. package/dist/assets/plugin-charts-b-yVtmdI.js +7 -0
  147. package/dist/assets/{plugin-chatbot-Ck47EhDX.js → plugin-chatbot-D1KW_oIO.js} +8 -8
  148. package/dist/assets/plugin-dashboard-DTkPoPEb.js +6 -0
  149. package/dist/assets/plugin-form-UIRm-FpQ.js +1 -0
  150. package/dist/assets/plugin-gantt-9dtc8zzX.js +63 -0
  151. package/dist/assets/plugin-grid-Cp4RKtMJ.js +10 -0
  152. package/dist/assets/plugin-kanban-B2JOPZIJ.js +1 -0
  153. package/dist/assets/plugin-map-CBJcVJYk.js +1 -0
  154. package/dist/assets/{plugin-markdown-BOkHcir_.js → plugin-markdown-CNlDzqP-.js} +1 -1
  155. package/dist/assets/plugin-report-IZzgQb-Q.js +59 -0
  156. package/dist/assets/plugin-timeline-DsmtjcJ3.js +1 -0
  157. package/dist/assets/plugin-tree-DTRPBdhe.js +1 -0
  158. package/dist/assets/plugin-view-D9ixsNDG.js +1 -0
  159. package/dist/assets/plugins-views-CnvkdSJK.js +3 -0
  160. package/dist/assets/{pt-BR-D80_lPYF.js → pt-BR-D416seHT.js} +1 -1
  161. package/dist/assets/{pt-CJJ1RmXd.js → pt-DwHBy9_c.js} +1 -1
  162. package/dist/assets/{ro-EuFb2TCj.js → ro-DDf1X3Np.js} +1 -1
  163. package/dist/assets/{ru-CMaVQScp.js → ru-8eM3mcgK.js} +1 -1
  164. package/dist/assets/{runtime-metadata-persistence-ClOTznqa.js → runtime-metadata-persistence-DX29lQ62.js} +1 -1
  165. package/dist/assets/{se-DsfdKLdF.js → se-D4JvQeRX.js} +1 -1
  166. package/dist/assets/{sk-BNV9omI8.js → sk-DvpgttGI.js} +1 -1
  167. package/dist/assets/{sl-DJS_nINU.js → sl-B3gCZ-_a.js} +1 -1
  168. package/dist/assets/{sq-HEgjcbHe.js → sq-CVaTmL0V.js} +1 -1
  169. package/dist/assets/{sr-CO0CFu4X.js → sr-CnH5Ffyz.js} +1 -1
  170. package/dist/assets/{sr-Latn-eE1Idzey.js → sr-Latn-Dw9w61q6.js} +1 -1
  171. package/dist/assets/src-BUry7633.js +2 -0
  172. package/dist/assets/{src-BU7L2v4J.js → src-DMDT5a27.js} +1 -1
  173. package/dist/assets/src-ZxH3AOCu.js +16 -0
  174. package/dist/assets/{studioEntry-WeMfaSGn.js → studioEntry-DAqcBFtr.js} +1 -1
  175. package/dist/assets/{submitRedirect-C2lfZSHt.js → submitRedirect-iy0oOi7I.js} +1 -1
  176. package/dist/assets/{sv-5uTzgQT3.js → sv-CU7wdxyK.js} +1 -1
  177. package/dist/assets/{ta-BzgdkBZG.js → ta-DPH6q0HR.js} +1 -1
  178. package/dist/assets/{te-Ct_pl7ZJ.js → te-BSaThkGV.js} +1 -1
  179. package/dist/assets/{th-DouAlk0-.js → th-NXP8_Qb8.js} +1 -1
  180. package/dist/assets/{tr-3XNBsI40.js → tr-DDXoH663.js} +1 -1
  181. package/dist/assets/types-zod-ChJ30y25.js +1 -0
  182. package/dist/assets/{ug-B9n24h9G.js → ug-Guus6pPe.js} +1 -1
  183. package/dist/assets/ui-components-D8wcRNrt.js +37 -0
  184. package/dist/assets/ui-layout-BYO3rRIl.js +1 -0
  185. package/dist/assets/{uk-DCAenByf.js → uk-uiy4vsp8.js} +1 -1
  186. package/dist/assets/use-book-data-DFTswcKm.js +1 -0
  187. package/dist/assets/{useActionModal-Blp4rhOk.js → useActionModal-h52Z5Pkl.js} +1 -1
  188. package/dist/assets/useCanAuthorMetadata-TDrVrYGB.js +1 -0
  189. package/dist/assets/useDatasetCatalog-BOd0Ybr1.js +1 -0
  190. package/dist/assets/{useNavTargetLabel-BOJncjIb.js → useNavTargetLabel-D8lRdb6O.js} +1 -1
  191. package/dist/assets/useOpenRecordList-C7oqUD3F.js +1 -0
  192. package/dist/assets/{usePackageL10n-Ci9uVkRZ.js → usePackageL10n-Jl2XiF2F.js} +1 -1
  193. package/dist/assets/{useSettingsLabel-CeMnMWsh.js → useSettingsLabel-CSpBDTdy.js} +1 -1
  194. package/dist/assets/{uz-Cyrl-JSeHEqu-.js → uz-Cyrl-Cmb5bvbf.js} +1 -1
  195. package/dist/assets/{uz-DT3s9bZS.js → uz-DJWxoTz4.js} +1 -1
  196. package/dist/assets/vendor-objectstack-C4eD5dbT.js +139 -0
  197. package/dist/assets/{vi-D2p-h6bY.js → vi-Bb3QoIJC.js} +1 -1
  198. package/dist/assets/{zh-CN-DHOKqAit.js → zh-CN-C-Hts1ZR.js} +1 -1
  199. package/dist/assets/{zh-HK-D4iIPY7I.js → zh-HK-CtBAZ_ZS.js} +1 -1
  200. package/dist/assets/{zh-TW-gORQ_tZh.js → zh-TW-B7DDahD-.js} +1 -1
  201. package/dist/chunk-membership.json +28 -26
  202. package/dist/eager-closure.json +107 -101
  203. package/dist/index.html +4 -4
  204. package/dist/sdui.manifest.json +486 -63
  205. package/package.json +1 -1
  206. package/dist/assets/ApprovalsInboxPage-C6S1vk0X.js +0 -1
  207. package/dist/assets/AuditLogPage-v2dKXMuk.js +0 -1
  208. package/dist/assets/BookPage-DwFMcTSN.js +0 -1
  209. package/dist/assets/CreateViewDialog-D3l-tYHM.js +0 -1
  210. package/dist/assets/DocPage-B6AkH5WI.js +0 -1
  211. package/dist/assets/ExpressionProvider-CrL6jhVq.js +0 -1
  212. package/dist/assets/FlowRunsPage-CxdaiUyk.js +0 -1
  213. package/dist/assets/InterfaceListPage-C4wPYohR.js +0 -1
  214. package/dist/assets/MarketplacePackagePage-CfgKDpNH.js +0 -4
  215. package/dist/assets/MarketplacePage-DNEyU5AE.js +0 -1
  216. package/dist/assets/ObjectDataPage-CykEm9MD.js +0 -1
  217. package/dist/assets/PageView-C6u86tni.js +0 -1
  218. package/dist/assets/ProfilePage-C3SjXMzi.js +0 -1
  219. package/dist/assets/RecordDetailView-DgR_zhP4.js +0 -3
  220. package/dist/assets/ReportDefaultInspector-BIinF0EQ.js +0 -1
  221. package/dist/assets/ReportView-BREO-ADE.js +0 -2
  222. package/dist/assets/RuntimeDraftBar-BCWfd2yS.js +0 -1
  223. package/dist/assets/SchemaForm-C4uMMZ13.js +0 -3
  224. package/dist/assets/SearchResultsPage-C6Hw_Lpn.js +0 -1
  225. package/dist/assets/ai-DPBykF2N.js +0 -3
  226. package/dist/assets/app-shell-eager-leaves-Cf2bM6uT.js +0 -1
  227. package/dist/assets/data-adapter-Cymvlczj.js +0 -1
  228. package/dist/assets/default-inspector-registry-Bs6GBn00.js +0 -1
  229. package/dist/assets/dist-BF-ssUpn.js +0 -14
  230. package/dist/assets/drillUrlFilters-hi-2d3DW.js +0 -1
  231. package/dist/assets/en-AU-FVwCiDJO.js +0 -1
  232. package/dist/assets/en-GB-DQ_y5VbJ.js +0 -1
  233. package/dist/assets/en-IE-DaXOhsZW.js +0 -1
  234. package/dist/assets/en-IN-CnRZnAom.js +0 -1
  235. package/dist/assets/en-NZ-CBZLEToK.js +0 -1
  236. package/dist/assets/en-ZA-BE59v0wZ.js +0 -1
  237. package/dist/assets/framework-DFR4HNtj.js +0 -35
  238. package/dist/assets/getIcon-Cfwf-Egt.js +0 -1
  239. package/dist/assets/i18n-locale-ar-92O_xtDZ.js +0 -4
  240. package/dist/assets/i18n-locale-de-T5ic3yH9.js +0 -4
  241. package/dist/assets/i18n-locale-en-rxr7WJYl.js +0 -4
  242. package/dist/assets/i18n-locale-es-D_WOifJ_.js +0 -4
  243. package/dist/assets/i18n-locale-fr-3cvyjMkp.js +0 -4
  244. package/dist/assets/i18n-locale-ja-DXlIkB8I.js +0 -4
  245. package/dist/assets/i18n-locale-ko-DngRpS45.js +0 -4
  246. package/dist/assets/i18n-locale-pt-BkPaFCqZ.js +0 -4
  247. package/dist/assets/i18n-locale-ru-E5wLh-y6.js +0 -4
  248. package/dist/assets/i18n-locale-zh-BL4_Yand.js +0 -4
  249. package/dist/assets/i18n-runtime-97_bDVjP.js +0 -1
  250. package/dist/assets/index-Cadlh4t_.css +0 -2
  251. package/dist/assets/index-D98sa5GF.js +0 -20
  252. package/dist/assets/integration-CeAF4JFT.js +0 -1
  253. package/dist/assets/isSameWeek-DBXaA1Gd.js +0 -1
  254. package/dist/assets/mermaid-GHXKKRXX-Bb17TtNP.js +0 -1
  255. package/dist/assets/metadata-admin-CABUxbJl.js +0 -9
  256. package/dist/assets/plugin-calendar-Cn5HaZU8.js +0 -1
  257. package/dist/assets/plugin-charts-B6RcFWbo.js +0 -7
  258. package/dist/assets/plugin-dashboard-DjEx8e5Y.js +0 -6
  259. package/dist/assets/plugin-form-CLDvL0up.js +0 -1
  260. package/dist/assets/plugin-gantt-CrVrxVdi.js +0 -63
  261. package/dist/assets/plugin-grid-D2rmQEW_.js +0 -11
  262. package/dist/assets/plugin-kanban-BUNHFfIC.js +0 -1
  263. package/dist/assets/plugin-map-y-7RQQC5.js +0 -1
  264. package/dist/assets/plugin-report-mT3jpna0.js +0 -59
  265. package/dist/assets/plugin-timeline-B1EF83D3.js +0 -1
  266. package/dist/assets/plugin-tree-MTHUt3_S.js +0 -1
  267. package/dist/assets/plugin-view-DHJI-ahf.js +0 -1
  268. package/dist/assets/plugins-views-CfkgqD30.js +0 -3
  269. package/dist/assets/src-BUtIBFDA.js +0 -1
  270. package/dist/assets/src-C0eXlKtx.js +0 -16
  271. package/dist/assets/types-zod-DXpXw10W.js +0 -1
  272. package/dist/assets/ui-components-D6cEVg0T.js +0 -37
  273. package/dist/assets/ui-layout-DgVDuPEM.js +0 -1
  274. package/dist/assets/use-book-data-CwRldFxP.js +0 -1
  275. package/dist/assets/useCanAuthorMetadata-BxCMgFRf.js +0 -1
  276. package/dist/assets/useOpenRecordList-BrwJFojQ.js +0 -1
  277. package/dist/assets/vendor-objectstack-DFqu45yM.js +0 -138
@@ -1,4 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-C0FnF6B9.js";var t=e({default:()=>n}),n={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_org_presentation:`管理组织展示`,manage_platform_settings:`管理平台设置`,setup_access:`访问 Setup`,setup_write:`保存设置`,studio_access:`访问 Studio`,manage_sharing:`管理共享`}},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:`保存`,discard:`放弃`,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)`,rowCeilingNote:`仅显示 {{total}} 条记录中的前 {{shown}} 条。请缩小筛选范围。`,rowCeilingNoteUnknownTotal:`仅显示前 {{shown}} 条记录。请缩小筛选范围。`},actions:{decisionOutput:{help:`作为决策输出传递给流程。`,helpMultiValue:`作为决策输出传递给流程。多个值请用逗号分隔。`},resultDialog:{defaultTitle:`请立即保存此值`,acknowledge:`我已保存`,copyAll:`全部复制`},notAvailableHere:`「{{action}}」在当前页面不可用。`,completedSuccessfully:`操作已成功完成`,failed:`操作失败`,parallelFailed:`一个或多个并行操作失败`,undo:`撤销`,undone:`已撤销更改`,undoneOperation:`撤销:{{description}}`,redoneOperation:`重做:{{description}}`},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:`您没有权限保存这条记录。`,noPermissionToCreate:`您没有创建{{object}}的权限,字段均为只读。`,noPermissionToEdit:`您没有编辑{{object}}的权限,字段均为只读。`,submitFailed:`保存失败,请重试。`,uploadInFlight:`请等待上传完成后再保存。`,clearedOnHide:`已清空不再适用于当前取值的字段:{{fields}}`,visibleWhenFaulted:`无法提交:{{fields}} 的 visibleWhen 规则无法求值。需先修正该规则,才能提交此表单。`,removeItem:`移除项目`,fieldRequired:`此字段为必填项`,invalidFormat:`格式不正确`,saveSuccess:`保存成功`,saveError:`保存失败`,unsavedChanges:`您有未保存的更改,确定要离开吗?`,discardTitle:`放弃更改?`,discardMessage:`您有未保存的更改。如果现在关闭此表单,您的编辑将会丢失。`,dialogDescriptionFallback:`填写表单字段,然后提交或取消。`,deniedDescription:`您没有此字段的编辑权限。`,masterDetail:{loadingColumns:`正在加载列…`,subtotal:`小计`,tax:`税额({{rate}}%)`,total:`合计`,lineItem:`明细行`,rowTitle:`{{title}} — 第 {{row}} 行`,applyRow:`应用`,editorDescription:`填写记录及其明细行,然后保存。`,noChildObject:`此集合未配置子对象:请将 {{property}} 设为其所列行所属的对象。`,schemaUnavailable:`无法加载 {{object}} 的对象结构,因此此集合没有可显示的列。请检查该对象是否存在且可读,然后重新加载。`,noRelationshipField:`无法确定 {{object}} 如何关联到 {{parent}}:它没有引用父对象的 lookup 或 master_detail 字段。请在此集合上将 {{property}} 设为保存父记录的字段。`},lineItems:{title:`明细行`,saveRecordFirst:`保存记录后才能添加明细行。`,notLoaded:`此记录的明细行尚未加载。`,loadFailed:`明细行加载失败`,saveFailed:`明细行保存失败`,noChildObject:`此面板未配置子对象:请将 {{property}} 设为其所列行所属的对象。`},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}}删除成功`,created:`已创建`,saved:`已保存`,savedNamed:`{{title}}已保存`,submitted:`已提交`,errorLoading:`表单加载失败`,navigateRefused:"此表单声明的 `navigateOnSuccess` 跳转目标被拒绝,因此未执行跳转。",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}}`,uploadIncomplete:`“{{name}}” 上传未完成:未返回文件 ID,未保存任何内容`},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:`请选择业务单元`,selectField:`请选择用户字段`,noUserFields:`此对象没有用户字段`,fieldNotUserTyped:`{{name}} — 不是用户字段`},filterCondition:{selectObjectFirst:`请先选择对象。`,noCriteria:`未设置条件 —— 该规则不共享任何记录`,criteriaRequired:`请至少添加一个条件。没有条件的规则会共享该对象的全部记录,因此无法保存。`,invalidJson:`JSON 无效 —— 修正之前该规则不会匹配任何记录。`,jsonOnly:`该条件只能以 JSON 方式编辑`,editAsJson:`以 JSON 编辑`,useVisualBuilder:`使用可视化构建器`},object:{invalidJson:`JSON 无效`},location:{refusedFormat:`未保存:请输入纬度, 经度坐标对(例如 30.2741, 120.1551)。`,refusedRange:`未保存:{{detail}}`,latitude:`纬度`,longitude:`经度`,refusedResidueOne:`未保存:{{name}}“{{text}}”不是数字。请输入普通小数(例如 30.2741, 120.1551)。`,refusedResidue:`未保存:{{name}}“{{text}}”和{{otherName}}“{{otherText}}”不是数字。请输入普通小数(例如 30.2741, 120.1551)。`},date:{impossibleDay:`存储的值“{{value}}”不是真实存在的日期。请选择日期以替换它。`},dateTime:{impossibleDay:`存储的值“{{value}}”不是真实存在的日期。请选择日期和时间以替换它。`},number:{badInput:`未保存:此输入框中的文本不是数字。请输入普通小数(例如 {{example}})。`},tags:{placeholder:`输入后回车添加…`},address:{street:`街道地址`,city:`城市`,state:`省 / 州`,postalCode:`邮政编码`,country:`国家 / 地区`},textarea:{characterCount:`已输入 {{count}} 个字符,最多 {{max}} 个`,charactersRemaining:`还可输入 {{count}} 个字符`},grid:{addLine:`添加行`,noItems:`暂无条目`,noItemsAddHint:`暂无条目,点击“{{label}}”开始添加。`,optionalColumns:`可选列`,computed:`自动计算`,openRow:`打开行`,duplicateRow:`复制行`,removeRow:`删除行`}},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:`系统字段`,grouping:{needsHeaderQuery:`此视图已分组,但其数据源未实现 queryGroupHeaders,因此无法统计分组。移除分组即可显示记录。`,needsWholeRows:`分组需要全部记录,但此表格只收到其中一页,因此无法统计分组。请传入全部记录,或让表格从实现了 queryGroupHeaders 的数据源获取记录。`},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:`完成`,loading:`加载中…`}},calendar:{today:`今天`,month:`月`,week:`周`,day:`日`,allDay:`全天`,newEvent:`新建事件`,moreEvents:`+{{count}} 更多`,unscheduled:`未排期 ({{count}})`,loading:`加载日历中…`,loadError:`错误:{{message}}`,configRequired:`需要日历配置。请指定 startDateField,这是日历唯一必填的键;事件标题无需 titleField 也能解析。`,configRequiredHint:`它属于视图的 calendar 块。界面页面没有自己的日历插槽:请将其 sourceView 指向一个声明了日历的视图。`,eventDetails:`事件详情`,pullToRefresh:`下拉刷新`,refreshing:`刷新中…`,onDate:`{{date}}`,eventTitle:`标题`,eventTitlePlaceholder:`这个事件是关于什么的?`,creating:`创建中…`,titleRequired:`请填写标题`,a11y:{region:`日历`,grid:`日历网格`,goToToday:`转到今天`,previousPeriod:`上一时段`,nextPeriod:`下一时段`,currentDate:`当前日期:{{date}}`,dayCell:`{{date}},{{count}} 个日程`,dayCell_one:`{{date}},{{count}} 个日程`,dayCell_other:`{{date}},{{count}} 个日程`,resizeEventEnd:`调整日程结束时间`,resizeEventEndHint:`拖动以更改结束日期`,resizeStart:`调整开始时间`,resizeEnd:`调整结束时间`}},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:`条目`,unusableRange:{malformedDate:`甘特图日期区间不可用 —— {{path}} 的值是 {{value}},无法解析为日期。每个甘特图日期都必须能被解析:每行条目的 startDate 与 endDate,以及 schema 上钉住的 minDate / maxDate。`,malformedRow:`甘特图行不可用 —— {{path}} 的值是 {{value}},不是行的形状。甘特图把 items 读作行的列表,每一行是带 label 和自身 items 的对象,每一行的 items 是条形的列表;这些位置上出现 null、数字、字符串或普通对象都无法绘制。`,inverted:`甘特图日期区间不可用 —— minDate {{minDate}} 晚于 maxDate {{maxDate}}。钉住的 minDate / maxDate 会覆盖由行数据算出的区间,因此该坐标轴没有任何列,也无法放置任何条形;请对调这两个值。`}},unsupported:{objectBoundGantt:`不支持的变体 "gantt" —— 对象绑定的时间线只渲染 feed 变体({{variants}})。甘特图需要字面量行,每行自带嵌套的 items,因此此处的甘特轴(scale)不起作用。`},unconfigured:{noDateAxis:`时间线需要日期轴 —— 该视图未声明任何日期字段,而对象绑定的时间线不会虚构一个。请声明以下之一:{{fields}}。第一个是 spec 写法,其余为遗留别名。`}},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:`任务列表`,refreshing:`刷新中…`},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:`系统视图 — 由代码定义,只读。`,malformedFilter:`此视图的筛选条件有误,因此不显示任何记录:无法应用 {{subject}} 条件。`},designer:{undo:`撤销`,redo:`重做`},detail:{back:`返回`,edit:`编辑`,editInline:`编辑`,save:`保存`,saveChanges:`保存更改`,saving:`保存中…`,editFieldsInline:`编辑字段`,editInlineHint:`双击编辑`,lockedByApproval:`审批中已锁定`,lockedTooltip:`该记录有待审批的请求,编辑已被锁定`,writeStrippedTitle:`已保存,但部分字段未生效`,writeStrippedReadonly:`以下字段为只读,未生效:{{fields}}`,writeStrippedByState:`以下字段在记录当前状态下不可编辑,未生效:{{fields}}`,writeStrippedPrimaryKey:`以下字段是记录的标识符,保存时无法修改,未生效:{{fields}}`,writeStrippedComputed:`以下字段由服务端按公式计算,提交的值未生效:{{fields}}`,writeStrippedUnknownReason:`以下字段未被服务端写入:{{fields}}`,approvalPendingEditable:`审批中 · 可编辑`,approvalPendingTooltip:`该记录有待审批的请求,但当前审批节点仍允许编辑`,approvalProgress:`审批 — 已通过 {{got}} / 共需 {{need}}`,approvalProgressGroups:`会签 — 已完成 {{got}} / 共 {{need}} 个组`,approvalProgressLabel:`审批进度`,approvalsPanelTitle:`审批`,cancelApproval:`撤回审批`,cancelApprovalInFlight:`撤回中…`,cancelApprovalTooltip:`撤回当前的待审批请求以解除记录锁定`,cancelApprovalTooltipUnlocked:`撤回当前的待审批请求`,cancelApprovalFailed:`撤回审批失败`,cancelApprovalUnavailable:`当前数据源不支持撤回审批`,pathLabel:`记录路径`,pathStageCompleted:`{{stage}},已完成`,pathStageCurrent:`{{stage}},当前阶段`,pathStageUpcoming:`{{stage}},未开始`,pathStageLostCurrent:`{{stage}},已失败,当前阶段`,pathStageLostUpcoming:`{{stage}},已失败,未到达`,pathStageWonUpcoming:`{{stage}},目标阶段,未到达`,linkCopied:`链接已复制到剪贴板`,commentFailed:`评论未发布,内容没有保存,请重试。`,reactionFailed:`表情回应未保存,请重试。`,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:`添加`,activity:`活动`,history:`历史`,historyEmpty:`暂无历史记录`,editRow:`编辑`,deleteRow:`删除`,deleteRowConfirmation:`确定要删除此记录吗?`,deleteRowTitle:`删除记录`,actions:`操作`,previousPage:`上一页`,nextPage:`下一页`,pageOf:`第 {{current}} 页,共 {{total}} 页`,sortBy:`排序`,filterPlaceholder:`筛选…`,highlightFields:`关键字段`,highlightsLabel:`记录关键字段`,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:`您没有执行此操作的权限。`,attachmentsAccessDenied:`您没有访问这些附件的权限。`,attachmentsLoadFailed:`无法加载此记录的附件。`,attachmentsApiUnavailable:`此对象上的附件列表不可用。`,retryLoadAttachments:`重试`,discussion:`讨论`,showDiscussion:`显示讨论 ({{count}})`,hideDiscussion:`隐藏讨论`,bold:`粗体 (Ctrl+B)`,italic:`斜体 (Ctrl+I)`,listFormat:`列表`,inlineCode:`行内代码`,mentionSomeone:`提及某人`,preview:`预览`,submitComment:`提交 (Ctrl+Enter)`,sendComment:`发送`,writeComment:`写评论…`,subscribedTooltip:`已订阅 — 点击取消订阅`,unsubscribedTooltip:`订阅通知`,noRecords:`无记录`,showEmptyRelated:`+ {{count}} 个为空`,showEmptyRelated_one:`+ {{count}} 个为空`,showEmptyRelated_other:`+ {{count}} 个为空`,allActivity:`全部动态`,commentsOnly:`仅评论`,fieldChangesFilter:`字段变更`,tasksOnly:`仅任务`,leaveCommentPlaceholder:`留下评论… (Ctrl+Enter 提交)`,noActivity:`暂无活动记录`,activityAccessDenied:`您没有查看此记录活动的权限。`,commentsAccessDenied:`您没有查看此记录评论的权限。`,allFilter:`全部`,createsFilter:`创建`,deletesFilter:`删除`,statusChangesFilter:`状态变更`,activityEmptyValue:`(空)`,activityFieldChanged:`将 {{field}} 从“{{old}}”改为“{{new}}”`,activityCreated:`创建了此记录`,activityDeleted:`删除了此记录`,activityStatusChanged:`将状态改为“{{value}}”`,activityUpdated:`更新了记录`,loadMore:`加载更多`,edited:`(已编辑)`,via:`通过 {{source}}`,viewSource:`查看来源`,replyCount:`{{count}} 条回复`,replyCountPlural:`{{count}} 条回复`,replyPlaceholder:`回复…`,filterActivity:`筛选活动`,openDiscussion:`打开讨论面板`,closeDiscussion:`关闭讨论面板`,subscribeAriaLabel:`订阅通知`,unsubscribeAriaLabel:`取消订阅通知`,clearSearch:`清除搜索`,copyEmail:`复制邮箱`,copyPhone:`复制电话号码`,copyRecordId:`复制记录 ID`,showEmptyFields:`显示 {{count}} 个空字段`,hideEmptyFields:`隐藏空字段`,noValue:`无`,unresolvedReference:`未解析的引用:{{value}} 未能解析为用户`,unresolvedLookupReference:`未解析的引用:{{value}} 在本屏未能解析为记录`,repeaterItemCount:`{{count}} 项`,repeaterItemCount_one:`{{count}} 项`,repeaterItemCount_other:`{{count}} 项`,fileCount:`{{count}} 个文件`,fileCount_one:`{{count}} 个文件`,fileCount_other:`{{count}} 个文件`},chart:{loading:`图表加载中…`,refreshing:`刷新中…`,nullCategory:`(未指定)`,scatterOneMeasure:`散点图只绘制一个度量。请只保留一个系列:`,unconfigured:{noCategoryAxis:`图表需要分类轴 —— 对象绑定的图表不会虚构一个。请声明以下之一:`}},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:`编辑报表`}},dashboard:{addWidget:`添加组件`,editLayout:`编辑布局`,saveLayout:`保存布局`,resetLayout:`重置布局`,total:`总计`,noDataSourceFor:`没有可用的数据源:`,empty:{title:`暂时还没有数据`,message:`该组件已成功加载,只是查询目前没有返回任何记录。`,sourceLabel:`数据源:`},loading:`加载中…`,refreshing:`刷新中…`,refreshAll:`全部刷新`,refreshDashboard:`刷新仪表盘`,pickMeasures:`请为该数据集组件选择度量(值)。`,datasetUnsupported:`当前数据源不支持数据集查询。`,widgetForbiddenTitle:`无权访问`,widgetForbiddenMessage:`你没有查看该组件数据的权限。`,details:`明细`,exportCsv:`导出 CSV`,openInList:`在列表中打开`,config:{breadcrumb:{dashboard:`仪表盘`,configuration:`配置`,widget:`组件`,chart:`图表`,table:`表格`,pivotTable:`透视表`},section:{general:`基本`,layout:`布局`,data:`数据`,dataBinding:`数据绑定`,appearance:`外观`},field:{title:`标题`,description:`描述`,columns:`列数`,gap:`间距`,rowHeight:`行高 (px)`,autoRefresh:`自动刷新`,showDescription:`显示描述`,theme:`主题`,widgetType:`组件类型`,colorVariant:`颜色`,dataset:`数据集`,dimensions:`维度`,values:`度量值`,width:`宽度 (列数)`,height:`高度 (行数)`},placeholder:{dashboardTitle:`仪表盘标题`,dashboardDescription:`显示在标题下方的简短说明`,widgetTitle:`组件标题`,widgetDescription:`组件描述`,datasetName:`数据集名称`,selectDataset:`选择数据集…`,searchDatasets:`搜索数据集…`,addDimension:`添加维度…`,addMeasure:`添加度量…`,searchMembers:`搜索…`},empty:{datasets:`未找到数据集。`,dimensions:`未选择维度。`,measures:`未选择度量。`,nothingToAdd:`没有可添加的项。`},help:{dataset:`该组件绑定的语义层数据集 (ADR-0021)。`,dimensions:`按这些数据集维度对度量值进行分组/拆分。`,dimensionsPivot:`分组/拆分字段。最后一个维度将横向展开为列。`,values:`要展示的数据集度量 (至少一个)。`},action:{add:`添加`,remove:`移除 {{name}}`},refresh:{off:`关闭`,every30s:`每 30 秒`,every1m:`每 1 分钟`,every5m:`每 5 分钟`,every15m:`每 15 分钟`,every30m:`每 30 分钟`,every1h:`每 1 小时`},themeOption:{light:`浅色`,dark:`深色`,auto:`自动`},widgetType:{metric:`指标`,bar:`柱状图`,horizontalBar:`条形图`,line:`折线图`,pie:`饼图`,donut:`环形图`,area:`面积图`,scatter:`散点图`,funnel:`漏斗图`,table:`表格`,pivot:`透视表`},color:{default:`默认`,blue:`蓝色`,teal:`青色`,orange:`橙色`,purple:`紫色`,success:`成功`,warning:`警告`,danger:`危险`}},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 天`}}},appDesigner:{createApp:`创建应用`,editApp:`编辑应用`,basicInfo:`基本信息`,objects:`业务对象`,navigation:`导航`,branding:`品牌`,appName:`应用名称`,appTitle:`标题`,appDescription:`描述`,appIcon:`图标`,template:`模板`,selectObjects:`选择对象`,searchObjects:`搜索对象…`,selectAll:`全选`,deselectAll:`取消全选`,navBuilder:`导航构建器`,addGroup:`添加分组`,addUrl:`添加链接`,addSeparator:`添加分隔线`,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:`行高`,livePreview:`实时预览`,stepBasicDesc:`名称、标题和图标`,stepObjectsDesc:`选择业务对象`,stepNavigationDesc:`构建导航树`,stepBrandingDesc:`Logo、颜色和图标`,noObjectsFound:`未找到对象。`,noNavItemsHint:`暂无导航项。请在上一步选择对象或手动添加项目。`,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:`组件`,navTypeDoc:`文档`,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:`隐藏`,externalId:`外部 ID`,trackHistory:`追踪历史`,defaultValue:`默认值`,placeholder:`占位文本`,referenceTo:`引用对象`,options:`选项`,addOption:`添加选项`,validationRules:`验证规则`,addRule:`添加规则`,systemBadge:`系统`,ungrouped:`通用`,deleteConfirmTitle:`删除字段?`,deleteConfirmMessage:`这将永久删除该字段。此字段中的现有数据将丢失。`,basicSection:`基础`,typeSpecificSection:`类型设置`,advancedSection:`高级`,typeCategory:{text:`文本`,number:`数字`,date:`日期时间`,choice:`选择`,relation:`关联`,advanced:`高级`}}},console:{studio:{backToHome:`返回首页`},saveAdvisoryTitle:`已保存 — 编辑检查提出了 {{count}} 条建议`,publishAdvisoryTitle:`已发布 — 编辑检查提出了 {{count}} 条建议`,importMappingsUnavailable:`无法加载 {{object}} 的已保存导入映射`,importMappingsRefused:`服务器拒绝了此请求,因此该列表为空是因为读取失败,而不是因为没有注册任何映射。请重新登录,或联系管理员申请访问权限。`,importMappingsUnreadable:`该列表为空是因为读取失败,而不是因为没有注册任何映射。请重试;如果反复出现,请反馈此问题。`,savedViewsUnavailable:`无法加载 {{object}} 的已保存视图`,savedViewsRefused:`服务器拒绝了此请求,因此该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重新登录,或联系管理员申请访问权限。`,savedViewsUnreadable:`该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重试;如果反复出现,请反馈此问题。`,title:`ObjectStack 控制台`,initializing:`正在初始化应用程序…`,search:`搜索…`,breadcrumb:{dashboards:`仪表盘`,pages:`页面`,reports:`报表`,system:`系统`,marketplace:`应用市场`,settings:`设置`,apps:`应用`,profile:`个人资料`,approvals:`审批`,aiApprovals:`AI 审批`,auditLog:`审计日志`},nav:{pinItem:`固定 {{name}}`,unpinItem:`取消固定 {{name}}`,dragToReorder:`拖动以重新排序`,favorites:`收藏`,launcherLabel:`应用启动台`,menuLabel:`应用导航`,menuEmpty:`此应用没有你可以打开的导航项。`},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:{pendingDrafts:{count:`有 {{count}} 项改动尚未发布——用户还看不到。`,publish:`发布`,published:`全部待发布改动已生效。`,failed:`发布失败。`,publishedWithFindings:`已发布,但运行时探针发现问题:{{detail}}`},usage:{title:`AI 用量`,meterBuild:`AI 搭建`,meterAsk:`数据问询`,statusOk:`额度充足`,statusLow:`即将用完`,statusFull:`额度已用完`,resetsDaily:`今晚重置`,resetsMonthly:`下个周期重置`,resetsWeeklyDays:`{{count}} 天后重置`,resetsWeeklyDays_one:`{{count}} 天后重置`,resetsWeeklyDays_other:`{{count}} 天后重置`,resetsWeeklyHours:`{{count}} 小时后重置`,resetsWeeklyHours_one:`{{count}} 小时后重置`,resetsWeeklyHours_other:`{{count}} 小时后重置`,ctaUpgrade:`升级以继续使用`,ctaTopUp:`购买额度包以继续`,ariaLabel:`AI 用量:{{status}}`,breakdownTitle:`已用额度构成`},workspaceTitle:`AI 工作区`,workspaceSubtitle:`提问、查看并继续历史对话`,openChats:`打开对话列表`,chats:`对话`,chatsDescription:`浏览和管理 AI 对话。`,share:`分享`,shareTitle:`分享此对话`,shareDisabledTitle:`开始对话后即可分享`,buildDoctor:`构建诊断`,buildDoctorTitle:`构建诊断 — 实际生效了哪些变更?`,buildDoctorDisabledTitle:`请先发送一条消息`,buildDoctorDrawer:{description:`智能体声称的变更与实际已生效的内容对照。只读诊断。`,reconciling:`正在核对…`,notAvailable:`不可用——未找到该对话,或你没有访问权限。`,untitled:`(无标题)`,summary:`{{turns}} 轮 · {{messages}} 条消息 · {{tokens}} tok · LLM {{seconds}} 秒`,allLive:`全部 {{count}} 项尝试的变更均已生效——没有丢失。`,discrepancies:`{{count}} 处不一致——对话中所说的与实际生效的内容不符。`,orphanedTitle:`已提议但从未应用`,orphanedHint:`智能体提议了确认卡片,但之后没有任何一轮应用它——该变更被静默丢弃。`,missingTitle:`声称已应用但缺失`,missingHint:`工具结果称已应用,但该产物并未在 sys_metadata 中生效。`,toolErrorsTitle:`工具错误`,toolErrorsHint:`构建期间返回错误的工具调用。`,verifyTitle:`构建检查(verify_build)`,yourApp:`你的应用:`,noIssues:`0 个问题`,issueCount:`{{count}} 个问题`,platformNoise:`已隐藏 {{count}} 条平台 sys_* 发现`,pendingActions:`待处理操作`,timeline:`时间线({{count}})`},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:`回复以确认或调整该改动。`,changesApplying:`应用中…`,changesApplied:`已生效`,changesDrafted:`已暂存为草稿`,changesFailed:`未生效`,discussing:`正在讨论:{{target}}`,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:`加一个展示关键指标的仪表盘。`,addSampleData:`给现有对象补一批贴近真实的示例数据,好拿去演示。`}},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:`更早`}},readRate:{ratioTitle:`本环境读取量异常`,ratio:`每写入 1 行就读取 {{ratio}} 行。平台会标记高于 {{threshold}} 的比率。没有任何东西被限制或阻断;这只是一份报告,便于检查读取方式。`,noWritesTitle:`本环境只有读取、完全没有写入`,noWrites:`有行被读取,却完全没有任何写入,因此读取比率没有上限。这是最严重的读数。平台会标记高于 {{threshold}} 的比率。没有任何东西被限制或阻断;这只是一份报告,便于检查读取方式。`},storageUsage:{warningTitle:`存储空间即将用满`,warning:`已用 {{used}} MB / {{limit}} MB。存储用满后,上传与导入将暂停。`,blockedTitle:`存储已满,上传与导入已暂停`,blocked:`已用 {{used}} MB / {{limit}} MB。现有数据不受影响,读取、导出与单条记录编辑照常。`,upgrade:`升级以继续`},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:`该视图为内置视图,由代码定义,无法修改。`,viewConfigPermissionDenied:`视图配置对所有使用该视图的用户生效,因此修改它需要「管理元数据」权限。请联系管理员进行修改。`,cannotDeleteMetaView:`该视图为内置视图,由代码定义,无法删除。`,expandToPage:`以完整页面打开`,objectNotFound:`未找到对象`,objectNotFoundDescription:`对象"{{objectName}}"在当前配置中不存在。`,objectNotFoundHint:`请检查您的应用导航设置或从侧边栏选择其他对象。`,filterOrNotSavable:`该筛选条件之间使用「或」,保存到视图暂不支持这种结构。它仍会作用于当前列表 —— 取消「或」分组后才能保存到视图。`,filterNestedNotSavable:`该筛选使用了嵌套条件分组,保存到视图不支持这种结构。请改为单层条件列表后再保存到视图。`,allRecords:`所有记录`,new:`新建`,import:`导入`,importTitle:`从 CSV 文件导入`,importedToast:`成功导入 {{count}} 行。`,importedWithSkipped:`已导入 {{ok}} 行;跳过 {{skipped}} 行。`,configureView:`配置视图`,toolbarEnabledCount:`已启用 {{count}}/{{total}} 项`,searchFields:`搜索字段…`,title:`标题`,viewType:`视图类型`,recordCount:`{{count}} 条记录`,recordCountOne:`{{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:`仅限小写字母、数字和下划线,且以字母或下划线开头。`,groupByField:`分组字段`,groupByFieldHelp:`看板会按该字段的不同取值分列。`,startDateField:`开始日期字段`,startDateFieldHelp:`日历将按该日期把记录放到对应日期格。`,ganttStartDateFieldHelp:`甘特条形图的左端使用该日期。`,ganttEndDateFieldHelp:`甘特条形图的右端使用该日期。`,timelineDateFieldHelp:`记录在时间轴上按该日期定位。`,titleField:`标题字段`,latitudeField:`纬度字段`,latitudeFieldHelp:`提供纬度坐标的字段(仅地理坐标字段可选)。`,longitudeField:`经度字段`,longitudeFieldHelp:`提供经度坐标的字段(仅地理坐标字段可选)。`,imageField:`图片字段`,imageFieldHelp:`画廊封面来自该图片或附件字段。`,selectField:`选择字段…`,selectOption:`选择…`,noEligibleFieldForType:`没有符合条件的字段。请先在对象上添加该类型字段。`,viewTypeUnavailable:`该对象缺少所需的“{{field}}”字段。`,viewTypeUnavailableShort:`当前对象不支持。`,chartType:`图表类型`,chartTypeHelp:`决定数据如何呈现。`,chartTypeBar:`柱状图`,chartTypeLine:`折线图`,chartTypePie:`饼图`,chartTypeArea:`面积图`,chartTypeScatter:`散点图`,xAxisField:`X 轴字段`,xAxisFieldHelp:`用于分类或时间维度的字段。`,yAxisField:`Y 轴字段`,yAxisFieldHelp:`用于数值聚合的字段。`,endDateField:`结束日期字段`,ufTabs:`标签页`,ufAddField:`+ 添加筛选字段…`,ufShowAllRecords:`显示"全部记录"标签页`},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:`改用密码登录`,socialButton:`使用 {provider} 继续`,orText:`或使用邮箱继续`},register:{title:`创建账户`,description:`创建账号,开始搭建。`,nameLabel:`姓名`,namePlaceholder:`张三`,emailLabel:`邮箱`,emailPlaceholder:`name@example.com`,passwordLabel:`密码`,passwordPlaceholder:`创建密码(至少8个字符)`,confirmPasswordLabel:`确认密码`,confirmPasswordPlaceholder:`确认您的密码`,passwordMismatchError:`两次输入的密码不一致`,passwordTooShortError:`密码至少需要8个字符`,submitButton:`创建账户`,submittingButton:`创建中…`,hasAccountText:`已有账户?`,signInText:`登录`,socialButton:`使用 {provider} 注册`,orText:`或使用邮箱继续`,errors:{userExists:`该邮箱已被注册,请直接登录或更换邮箱。`,selfRegistrationClosed:`本环境未开放自助注册,请联系管理员获取邀请。`,emailDomainNotAllowed:`该邮箱的域名不允许在此注册,请使用组织邮箱,或联系管理员获取邀请。`},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:`保存更改`},language:{title:`语言`,description:`发送给您的通知和消息所使用的语言。界面语言另行设置,在地球图标菜单中切换。`,label:`首选语言`,systemDefault:`使用部署默认值`,save:`保存`,saved:`语言偏好已更新。`,readOnly:`您账户的语言由管理员管理。`},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:`切换工作区`,createTitle:`创建工作区`,createDescription:`工作区是团队协作的共享空间。`,createButton:`创建工作区`,nameLabel:`工作区名称`,namePlaceholder:`例如:极客科技`,slugLabel:`URL 标识`,slugHint:`用于 URL 中,仅支持小写字母、数字和连字符。`,invite:`邀请成员`,members:`成员`,settings:`工作区设置`,multiOrgDisabled:`此实例已禁用创建新组织。`,createFailed:`创建工作区失败`},help:{keyboardShortcuts:`键盘快捷键`,onThisPage:`本页目录`,appDocs:`本应用文档`,allDocs:`全部文档`,onlineDocs:`在线文档`},sidebar:{settings:`设置`,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:`首页`,nav:`首页`,allApps:`全部应用`,yourApps:`我的应用`,showMoreApps:`更多`,showLess:`收起`,continueEmpty:`你打开过的内容会显示在这里。`,actionCenter:{title:`待办事项`,empty:`全部处理完毕`},greetingMorning:`早上好`,greetingAfternoon:`下午好`,greetingEvening:`晚上好`,greetingNight:`夜深了`,heroTagline:`从上次离开的地方继续,或者探索新的内容。`,build:{title:`构建应用`,subtitle:`从零开始 — 设计对象、表单、自动化与界面。`,noCapability:`此工作区不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。`},template:{title:`从模板开始`,subtitle:`从应用市场安装模板应用并按需定制。`,marketplaceDisabled:`本运行时未配置应用市场,因此这里没有可安装的模板。`},open:`打开`,loading:`正在加载工作区…`,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:`快捷操作`,manageObjects:`管理对象`,manageObjectsDesc:`配置数据模型`,systemSettings:`系统设置`,systemSettingsDesc:`配置您的工作区`},recentApps:{title:`最近访问`,itemType:{object:`对象`,dashboard:`仪表盘`,page:`页面`,report:`报表`,record:`记录`,metadata:`元数据`}},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:`配置`,administration:`管理`,datasources:`数据源`,documentation:`文档`},activityFeed:{title:`最近动态`,filter:`筛选`,empty:`暂无最近动态`,viewAll:`查看全部动态`,ariaLabel:`动态消息`,typeCreate:`创建`,typeUpdate:`更新`,typeDelete:`删除`,typeComment:`评论`,typeSystem:`系统`,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}} 项可搜索`,itemsAvailableOne:`共 {{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:`此应用不可用 —— 请稍后重试。`,appNotFound:`无法打开此应用`,appNotFoundDescription:`服务器未返回你的账号可访问的此应用。`,appUnreachable:`无法连接到服务器`,appUnreachableDescription:`无法检查此应用。请稍后重试。`,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:`全部发布`,securityBlockTitle:`发布会被拒绝 —— 有 {{count}} 项需要先做出决定`,securityBlockWhere:`请在对象的“设置 → 记录共享模型”中修改后重新发布。`},unpublishedBar:{message:`未发布的应用 —— 功能完整,但只有构建者能看到。发布后即可让您的用户看到。`,publish:`发布`,publishing:`发布中…`,published:`已发布!应用现在对您的用户可见。`,publishFailed:`发布失败`},history:{button:`历史`,title:`构建历史`,description:`此应用的每一次变更,最新的在最前。撤销任一步骤即可回退 —— 无需确认发布。`,loadFailed:`无法加载历史记录:`,loadFailedUnavailable:`提交存储暂时不可达 —— 本次读取并未发生,因此不显示任何历史记录。请稍后重试。`,loading:`正在加载历史记录…`,empty:`此应用暂无历史记录。`,revertLabel:`已撤销一处变更`,applyLabel:`构建变更`,revert:`撤销`,items:`{{count}} 项`,revertAction:`撤销`,reverted:`已撤销 —— 该变更已还原。`,revertFailed:`撤销失败`,revertUnavailable:`提交存储暂时不可达 —— 此次撤销可能尚未生效。请重新打开历史记录确认后再重试。`}},actionDialog:{title:`操作参数`,description:`请填写以下信息以继续操作。`,selectPlaceholder:`请选择 {{label}}`,requiredError:`{{label}} 为必填项`,lookupPlaceholder:`{{label}} 的记录 ID`,lookupHelpText:`该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。`,unresolvedParam:`无法显示该参数:它所依据的字段不在对象元数据中,因此无法构建它所需的控件。请联系管理员修正该动作定义。`,carryOverHint:`原样带入(只读)`,cancel:`取消`,confirm:`确认`,uploading:`上传中…`},actionConfirm:{title:`确认操作`,confirm:`继续`,cancel:`取消`},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:`预测视图即将上线`},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:`拒绝邀请失败`},current:{label:`当前组织`},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}} 条待审批`,arrivalMany:`{{count}} 条新消息`,arrivalRepeats:`该主题有 {{count}} 条新消息`,arrivalOpen:`查看`,toastEnabled:`站内提醒`,desktopEnabled:`桌面通知`,desktopBlocked:`已被拦截。请在浏览器设置中允许本站发送通知。`,desktopUnsupported:`当前浏览器不支持桌面通知。`},publicForm:{submit:`提交`,submitting:`提交中…`,submitAnother:`再填一份`,poweredBy:`由 ObjectStack 提供技术支持`,secureNotice:`您的信息将通过安全通道传输,仅用于回复您本次请求。`,thankYouTitle:`感谢您的提交!`,thankYouMessage:`我们已成功收到您的信息。`,redirecting:`将在 {{seconds}} 秒后跳转…`,redirectPending:`正在跳转…`,unavailableTitle:`表单不可用`,unavailableDescription:`该链接当前没有可用的公开表单。请确认对应视图已启用匿名分享并匹配此 slug。`,tryDemo:`试用演示`,retry:`重试`,loading:`正在加载表单…`,requiredHint:`* 为必填项`,requiredFields:`必填项:{{fields}}`,consentLabelDefault:`我已阅读并同意隐私政策,授权对本次请求所提供的信息进行处理。`,consentLink:`隐私政策`,consentRequired:`请先勾选同意隐私政策。`,rateLimited:`请再花点时间核对一下您的填写内容,再点击提交。`,redirectBlocked:`提交成功,但出于安全考虑,跳转链接已被阻止。`},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:`管理环境`},cloudPlanStatus:{current:`当前套餐`},ai:{nlQuery:{placeholder:`就您的数据提问…`,ask:`提问`,results:`结果`,match:`匹配度 {{percent}}`,simulatedSummary:`查询结果:{{query}}`,noResults:`未找到匹配的记录`,recentQueries:`最近的查询`},formAssist:{title:`AI 建议`,suggestionCount:`{{count}} 条建议`,suggestionCountOne:`{{count}} 条建议`,applyAll:`全部应用`,confidence:`置信度 {{percent}}`,appliedCount:`已应用 {{count}} 条建议`,appliedCountOne:`已应用 {{count}} 条建议`},recommendations:{title:`推荐`,generating:`正在生成推荐…`,empty:`暂无推荐`}},aiApprovals:{title:`AI 审批`,description:`AI 智能体提出的操作,需要人工审核后才会执行。`,tabPending:`待审批`,tabDecided:`已处理`,tabAll:`全部`,statusPending:`待审批`,statusApproved:`已通过`,statusExecuted:`已执行`,statusFailed:`失败`,statusRejected:`已拒绝`,colTool:`工具`,colAction:`动作`,colObject:`对象`,colStatus:`状态`,colProposed:`提出时间`,colDecision:`决定`,emptyTitle:`暂无待处理操作`,emptyDescription:`当 AI 提出敏感操作时,会显示在这里等待审核。`,view:`查看`,approve:`通过`,reject:`拒绝`,working:`处理中…`,approveAndExecute:`通过并执行`,outcomeApprove:`对 {{id}} 的通过操作:{{message}}`,outcomeReject:`对 {{id}} 的拒绝操作:{{message}}`,outcomeExecuteFailed:`操作执行失败`,drawerFallbackTitle:`待处理操作`,drawerSubtitle:`在 {{object}} 上执行工具 {{tool}}`,fieldProposedBy:`提出者`,fieldDecidedBy:`处理人`,fieldConversation:`会话`,fieldToolInput:`工具输入`,fieldResult:`结果`,fieldError:`错误`,fieldRejectionReason:`拒绝原因`,rejectTitle:`要拒绝此操作吗?`,rejectBody:`该原因会回传给 AI,便于它调整下一步回复。`,rejectPlaceholder:`可选原因(例如:“记录 ID 有误 — 请先与用户确认。”)`},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}} 钉住`},chatbot:{tool:{aggregate_data:`汇总数据`,get_record:`读取记录`,query_data:`查询数据`,query_records:`查询记录`,search_knowledge:`搜索知识库`,visualize_data:`生成图表`,add_field:`添加字段`,apply_blueprint:`搭建应用`,apply_edit:`应用修改`,create_metadata:`新建元数据`,create_object:`新建对象`,create_package:`新建应用包`,create_seed:`生成示例数据`,delete_field:`删除字段`,describe_metadata:`查看元数据`,describe_object:`查看对象结构`,get_active_package:`读取当前应用包`,get_authoring_rules:`读取编写规范`,get_metadata_schema:`读取元数据结构`,get_package:`读取应用包`,list_metadata:`列出元数据`,list_objects:`列出对象`,list_packages:`列出应用包`,load_tools:`加载工具`,modify_field:`修改字段`,open_record:`打开记录`,propose_blueprint:`设计应用方案`,set_active_package:`切换当前应用包`,suggest_builder:`推荐搭建方式`,test_flow:`测试流程`,todo_write:`记录待办`,toggle_flow:`启停流程`,update_metadata:`更新元数据`,validate_expression:`校验表达式`,verify_build:`校验搭建结果`},toolState:{agentActivity:`智能体活动`,pending:`等待中`,running:`运行中`,awaitingApproval:`待确认`,responded:`已回复`,completed:`已完成`,error:`出错`,denied:`已拒绝`,failed:`失败`},plan:{countObjects:`{{count}} 个对象`,countObjects_one:`{{count}} 个对象`,countViews:`{{count}} 个视图`,countViews_one:`{{count}} 个视图`,countDashboards:`{{count}} 个仪表板`,countDashboards_one:`{{count}} 个仪表板`,countSeedData:`示例数据`},build:{building:`正在构建{{app}}…`,built:`已构建{{app}}`,appFallback:`你的应用`,addingSampleData:`正在添加示例数据`,group:{object:`对象`,view:`视图`,dashboard:`仪表板`,app:`应用`,seed:`示例数据`},moreArtifacts:`+{{n}} 个`}},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:`请求在获批前已过期,请重新开始。`,accessDenied:`连接请求已被拒绝,请重新开始。`,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:`按名称或标识搜索应用…`,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:`应用市场加载失败`,failedHintConfigured:`本运行时通过 {{url}} 上的控制面访问应用市场。请检查该地址是否在线、能否从本运行时访问。`,failedHintSameOrigin:`本运行时自己提供应用市场目录。请检查运行时是否在线。`,packageFailed:`应用加载失败`,notFound:`未找到。`},disabled:{title:`应用市场已关闭`,description:`本运行时未配置应用市场,因此这里没有可浏览或安装的内容。`,hint:`当运行时以 <code>OS_CLOUD_URL=off</code>(或 <code>none</code>、<code>local</code>、<code>disabled</code>)启动时,这就是预期状态。如需开启应用市场,请把 <code>OS_CLOUD_URL</code> 指向一个控制面并重启运行时。`},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}} 条记录写入失败)`,sampleDataKernelUnavailable:`此控制面没有环境内核,因此无法在这里重新加载或清除示例数据。请在该环境自己的运行时中操作。`,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}}
2
- 提示:本地已有应用占用此 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:`此软件包请求以下权限:`,notEnforced:`安装时会记录这份清单,后续版本要求更多权限时会再次征求同意;但运行时目前还不会把该软件包限制在此清单内。`,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}}?
3
-
4
- 磁盘上的清单缓存将被移除。运行中的内核仍会保留该应用,直到下次重启运行时才会真正卸载。`,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:`其他`},relativeTime:{today:`今天`,daysAgo:`{{count}} 天前`,monthsAgo:`{{count}} 个月前`,yearsAgo:`{{count}} 年前`}},approvalsInbox:{recordUnresolvable:`无法打开此记录`,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:`等待以下审批人`,approverNameSeparator:`、`,approverUnstaffed:`{{seat}}(暂无在岗人员)`,history:`审批动态`,noActions:`暂无操作记录。`,actSubmit:`提交`,actApprove:`通过`,actReject:`拒绝`,actRecall:`撤回`,overrideActionLabel:`越权{{action}}`,overrideNotice:`你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,尚未表态的审批人都会被跳过。此决定将记录为管理员越权。`,overrideNoticeWho:`你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,并跳过尚未表态的审批人 —— {{who}}。此决定将记录为管理员越权。`,viaOverrideChip:`管理员越权`,viaOverrideHint:`操作者在该步骤没有审批人席位 —— 经管理员越权通道进入。`,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`,addValue:`输入值后按回车`,removeValue:`移除 {{value}}`,rangeStart:`起始值`,rangeEnd:`结束值`,operators:{equals:`等于`,not_equals:`不等于`,contains:`包含`,icontains:`包含(忽略大小写)`,not_contains:`不包含`,is_empty:`为空`,is_not_empty:`不为空`,greater_than:`大于`,less_than:`小于`,greater_than_or_equal:`大于或等于`,less_than_or_equal:`小于或等于`,before:`早于`,after:`晚于`,between:`介于`,in:`属于`,not_in:`不属于`,starts_with:`以…开头`,ends_with:`以…结尾`,is_null:`为 null`,is_not_null:`不为 null`,exists:`已设置`,notExists:`未设置`}},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}}`,back:`上一步`,submitting:`提交中…`,stepFallback:`第 {{n}} 步`,progressLabel:`进度`,emptyStep:`此步骤未配置字段`},flowRunner:{title:`输入`,submitting:`提交中…`,saveAndContinue:`保存并继续`,nextStep:`已保存 — 下一步`,completed:`流程「{{flow}}」已完成`},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}}`}},packagedAutomation:{title:`打包自动化`,subtitle:`由已安装软件包提供的流程与动作。可在本部署中关闭其中之一,流程还可以新名称克隆后再自定义。编辑在 Studio 中进行。`,refresh:`刷新`,flowsHeading:`打包流程`,actionsHeading:`打包动作`,colFlow:`流程`,colActivation:`启用状态`,colActions:`操作`,toggleLabel:`{{label}} 的启用状态`,on:`已启用`,off:`已关闭`,clone:`克隆`,cloneTitle:`克隆打包流程`,cloneBody:`副本会带上完整定义,并需要新的机器名和标签。请在 Studio 中编辑副本。`,cloneName:`新机器名`,cloneLabel:`新标签`,cancel:`取消`,cloneConfirm:`创建克隆`,cloneCreated:`已创建流程「{{name}}」。`,emptyTitle:`没有打包流程`,emptyBody:`本部署中没有任何已安装软件包提供自动化流程。你自己编写的流程在 Studio 中。`,loadFailed:`无法加载打包自动化。`,toggleFailedHttp:`无法更改启用状态(HTTP {{status}})。`,toggleFailed:`无法更改启用状态。`,cloneFailedHttp:`无法克隆此流程(HTTP {{status}})。`,cloneFailed:`无法克隆此流程。`,actionsSubtitle:`由已安装软件包提供的动作。在本部署中关闭后,它在所有提供它的位置都不再运行。你仍然可以在 Studio 中另行编写自己的动作。`,colAction:`动作`,colObject:`对象`,actionToggleLabel:`{{object}} 上 {{label}} 的启用状态`,actionsEmptyTitle:`没有打包动作`,actionsEmptyBody:`本部署中没有任何已安装软件包声明动作。你自己编写的动作在 Studio 中。`,actionsLoadFailed:`无法加载打包动作。`},element:{number:{noObject:`未指定对象:请设置 object 或 dataSource.object。`}}};export{t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{h as t,t as n,v as r}from"./vendor-react-BggL7APJ.js";import{Er as i}from"./framework-DFR4HNtj.js";import{i as a,n as o,r as s,t as c}from"./vendor-i18n-CxhD37Cc.js";import{t as l}from"./i18n-locale-en-rxr7WJYl.js";var u=e(r(),1),d=Object.freeze({zh:()=>t(()=>import(`./i18n-locale-zh-BL4_Yand.js`).then(e=>e.t),[],import.meta.url),ja:()=>t(()=>import(`./i18n-locale-ja-DXlIkB8I.js`).then(e=>e.t),[],import.meta.url),ko:()=>t(()=>import(`./i18n-locale-ko-DngRpS45.js`).then(e=>e.t),[],import.meta.url),de:()=>t(()=>import(`./i18n-locale-de-T5ic3yH9.js`).then(e=>e.t),[],import.meta.url),fr:()=>t(()=>import(`./i18n-locale-fr-3cvyjMkp.js`).then(e=>e.t),[],import.meta.url),es:()=>t(()=>import(`./i18n-locale-es-D_WOifJ_.js`).then(e=>e.t),[],import.meta.url),pt:()=>t(()=>import(`./i18n-locale-pt-BkPaFCqZ.js`).then(e=>e.t),[],import.meta.url),ru:()=>t(()=>import(`./i18n-locale-ru-E5wLh-y6.js`).then(e=>e.t),[],import.meta.url),ar:()=>t(()=>import(`./i18n-locale-ar-92O_xtDZ.js`).then(e=>e.t),[],import.meta.url)}),f=Object.freeze([`en`,...Object.keys(d)]);function p(e){return e===`en`||Object.prototype.hasOwnProperty.call(d,e)}var m={en:l},h=new Map;function g(){return{...m}}async function _(e){let t=m[e];if(t)return t;let n=Object.prototype.hasOwnProperty.call(d,e)?d[e]:void 0;if(!n)return null;let r=h.get(e);if(r)return r;let i=n().then(t=>{let n=t.default;return m[e]=n,n}).finally(()=>{h.delete(e)});return h.set(e,i),i}var v=[`ar`,`he`,`fa`,`ur`];function y(e){return v.includes(e)}var b=`__ouiLabelProbe`;function x(){return typeof process>`u`||!1}function S(){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 C(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function w(e,t){let n={...e};for(let e of Object.keys(t)){if(e===`__proto__`)continue;let r=t[e],i=n[e];n[e]=C(i)&&C(r)?w(i,r):r}return n}function T(e={}){let{defaultLanguage:t=`en`,resources:n={},detectBrowserLanguage:r=!0}=e;if(!r||typeof navigator>`u`)return t;let i=navigator.language?.split(`-`)[0];return i&&(p(i)||Object.prototype.hasOwnProperty.call(n,i))?i:t}function ee(e={}){let{fallbackLanguage:t=`en`,resources:n={},interpolation:r,warnMissingKeys:i=x()}=e,o={},c=g();for(let e of f)o[e]={translation:w(c[e]??{},n[e]||{})};for(let[e,t]of Object.entries(n))o[e]||(o[e]={translation:t});let l=T(e),u=a.createInstance();return u.use(s).init({lng:l,fallbackLng:t,resources:o,interpolation:{escapeValue:!1,...r},returnNull:!1,saveMissing:i,missingKeyHandler:i?S():void 0,react:{useSuspense:!1}}),u}function E(e){return y(e)?`rtl`:`ltr`}var D=`defaultValue`;function O(e,t){if(!t)return e;let n=e;for(let[e,r]of Object.entries(t))e!==`defaultValue`&&(n=n.split(`{{${e}}}`).join(String(r)));return n}function te(e){if(e.length<2)return;let t=e[e.length-1];if(typeof t==`object`&&t&&!Array.isArray(t))return t}var k=`objectui-locale`;function A(){if(typeof window>`u`)return null;try{return window.localStorage.getItem(k)}catch{return null}}function ne(e){if(!(typeof window>`u`))try{window.localStorage.setItem(k,e)}catch{}}function j(){if(!(typeof window>`u`))try{window.localStorage.removeItem(k)}catch{}}var M=`objectui-locale-seed`;function N(){if(typeof window>`u`)return null;try{return window.localStorage.getItem(M)}catch{return null}}function re(e){if(!(typeof window>`u`))try{typeof e==`string`&&e.length>0?window.localStorage.setItem(M,e):window.localStorage.removeItem(M)}catch{}}function P(e,t){let n=Object.prototype.hasOwnProperty;return p(e)||!!(t?.resources&&n.call(t.resources,e))}var F=f;function ie(e){let t=Object.keys(e?.resources??{}).filter(e=>!F.includes(e));return[...F,...t]}function ae(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 I(e,t,n=!1){return P(e,t)?!0:n&&ae(e)}function L(e,t){if(I(e,t))return e;let n=e.split(`-`)[0];return n&&n!==e&&I(n,t)?n:null}function R(e){let t=N();if(!t)return null;let n=L(t,e);return n?{config:{...e,defaultLanguage:n,detectBrowserLanguage:!1},provisional:null}:null}function z(e,t,n){if(!t)return{config:e,provisional:null};let r=A();return r?I(r,e,n)?{config:{...e,defaultLanguage:r,detectBrowserLanguage:!1},provisional:P(r,e)?null:r}:(j(),R(e)??{config:e,provisional:null}):R(e)??{config:e,provisional:null}}function B(e={}){let{config:t,persistLanguage:n=!0,hasLoader:r=!1}=e;return T(z(t,n,r).config)}async function oe(e={}){try{await _(B(e))}catch(e){console.warn(`[i18n] Failed to preload the bootstrap locale catalogue:`,e)}}var V=(0,u.createContext)(null),se=Object.freeze({bindI18nStore:`added`}),H=Object.freeze({silent:!0});function U(e){return typeof e==`object`&&!!e}function W(e,t){for(let n of Object.keys(t)){if(!(n in e))return!0;let r=e[n],i=t[n];if(U(r)&&U(i)&&W(r,i))return!0}return!1}function G({config:e,instance:t,loadLanguage:n,loadLocales:r,persistLanguage:i=!0,children:a}){let o=!!n,s=(0,u.useMemo)(()=>{if(t)return{instance:t,provisional:null};let n=z(e,i,o);return{instance:ee(n.config),provisional:n.provisional}},[t,e,i,o]),l=s.instance,[d,f]=(0,u.useState)(l.language||`en`),m=E(d),h=(0,u.useRef)(new Set);(0,u.useEffect)(()=>{let e=e=>{f(e),i&&ne(e),typeof document<`u`&&(document.documentElement.dir=E(e),document.documentElement.lang=e)},t=l.language||d;return typeof document<`u`&&t&&(document.documentElement.dir=E(t),document.documentElement.lang=t),l.on(`languageChanged`,e),()=>{l.off(`languageChanged`,e)}},[l,i]),(0,u.useEffect)(()=>{let e=l.language||`en`;if(!p(e))return;let t=!1;return _(e).then(n=>{if(t||!n)return;let r=l.getResourceBundle(e,`translation`);if(U(r)){if(!W(r,n))return;l.addResourceBundle(e,`translation`,n,!0,!1)}else l.addResourceBundle(e,`translation`,n)}).catch(t=>{console.warn(`[i18n] Failed to load the built-in catalogue for '${e}':`,t)}),()=>{t=!0}},[l,d]),(0,u.useEffect)(()=>{if(!n)return;let e=l.language||`en`;h.current.has(e)||(h.current.add(e),n(e).then(t=>{t&&Object.keys(t).length>0&&l.addResourceBundle(e,`translation`,t,!0,!0)}).catch(t=>{h.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}))},[l,n]);let[g,v]=(0,u.useState)(null),y=!!r,b=(0,u.useRef)(!1);(0,u.useEffect)(()=>{r&&!b.current&&(b.current=!0,r().then(e=>v(Array.isArray(e)?e:[])).catch(e=>{v([]),console.warn(`[i18n] Failed to load the app locale list:`,e)}))},[r]);let x=(0,u.useMemo)(()=>{let t=ie(e);if(!y)return t;if(g===null)return null;let n=g.filter(t=>I(t,e,o));return n.length>0?n:t},[e,y,g,o]);(0,u.useEffect)(()=>{let t=s.provisional;if(!t||!g||g.length===0||g.includes(t)||(l.language||``)!==t)return;let n=e?.defaultLanguage||e?.fallbackLanguage||`en`;(async()=>{await l.changeLanguage(n),(l.language||``)===n&&j()})()},[s,g,l,e]);let S=(0,u.useMemo)(()=>({language:d,changeLanguage:async e=>{let t=await _(e).catch(t=>(console.warn(`[i18n] Failed to load the built-in catalogue for '${e}':`,t),null));if(t&&(l.hasResourceBundle(e,`translation`)?l.addResourceBundle(e,`translation`,t,!0,!1,H):l.addResourceBundle(e,`translation`,t,!1,!1,H)),n&&!h.current.has(e)){h.current.add(e);try{let t=await n(e);l.addResourceBundle(e,`translation`,t,!0,!0,H)}catch(t){h.current.delete(e),console.warn(`[i18n] Failed to load app translations for '${e}':`,t)}}await l.changeLanguage(e)},direction:m,i18n:l,offerableLanguages:x}),[d,m,l,n,x]);return u.createElement(V.Provider,{value:S},u.createElement(c,{i18n:l},a))}function K(e){let t=(0,u.useContext)(V),{t:n,i18n:r}=o(e,se),i=typeof r?.t==`function`;return{t:(0,u.useMemo)(()=>i?n:(...e)=>{let t=n(...e);return typeof t==`string`?O(t,te(e)):t},[n,i]),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:F}}function ce(e,t){let n=(t,n)=>{let r=n?.[D],i=e[t]||(typeof r==`string`?r:``)||t;return i=O(i,n),i};return function(){let e=K();return e.t(t)===t?{t:n,language:e.language}:{t:e.t,language:e.language}}}function le(){let{t:e}=K();return(t,n)=>{let r=Array.isArray(t)?t:[t];for(let t of r){let n=e(t);if(n&&n!==t)return n}return n}}function ue(e){return{count:e(`report.aggregate.count`,`Count`),count_distinct:e(`report.aggregate.countDistinct`,`Distinct Count`),sum:e(`report.aggregate.sum`,`Sum`),avg:e(`report.aggregate.avg`,`Average`),min:e(`report.aggregate.min`,`Min`),max:e(`report.aggregate.max`,`Max`)}}var de=new Set([`common`,`validation`,`form`,`table`,`grid`,`calendar`,`list`,`kanban`,`chart`,`dashboard`,`configPanel`,`appDesigner`,`console`,`errors`,`detail`]);function q(e){return!!e&&typeof e?.getResourceBundle==`function`}var fe=((e,t)=>typeof t?.defaultValue==`string`?t.defaultValue:e),pe=Object.freeze({});function J(){let{t:e,i18n:t}=K(),n=q(t),r=n?e:fe,i=n?t:pe;return(0,u.useMemo)(()=>{let e=()=>{if(!q(i))return[];let e=i.language||`en`,t=i.getResourceBundle(e,`translation`);return t?Object.keys(t).filter(e=>!de.has(e)&&t[e]&&typeof t[e]==`object`&&(t[e].objects||t[e].fields||t[e].apps||t[e].dashboards||t[e].pages||t[e].reports||t[e].globalActions)):[]},t=e=>{if(typeof e!=`string`)return``;let t=e.indexOf(`__`);return t>0?e.slice(t+2):e},n=(t,n)=>{let i=Array.isArray(t)?t:[t];try{let t=e();for(let e of t)for(let t of i){let n=`${e}.${t}`,i=r(n,{defaultValue:``,[b]:!0});if(i&&i!==n&&i!==``)return i}}catch{}return n},a=(e,n)=>{let r=t(e);return r===e?[`objects.${e}.${n}`]:[`objects.${e}.${n}`,`objects.${r}.${n}`]},o=(e,t,n)=>{let r=`globalActions.${t}.${n}`;return e?[...a(e,`_actions.${t}.${n}`),r]:[r]},s=(e,n)=>{let r=t(e);return r===e?[`fields.${e}.${n}`]:[`fields.${e}.${n}`,`fields.${r}.${n}`]},c=(e,n,r)=>{let i=t(e);return i===e?[`fieldOptions.${e}.${n}.${r}`]:[`fieldOptions.${e}.${n}.${r}`,`fieldOptions.${i}.${n}.${r}`]},l=(e,n)=>{let r=t(e);return r===e?[`dashboards.${e}.${n}`]:[`dashboards.${e}.${n}`,`dashboards.${r}.${n}`]},u=(e,n)=>{let r=t(e);return r===e?[`pages.${e}.${n}`]:[`pages.${e}.${n}`,`pages.${r}.${n}`]},d=(e,n)=>{let r=t(e);return r===e?[`reports.${e}.${n}`]:[`reports.${e}.${n}`,`reports.${r}.${n}`]},f=(e,n,r)=>{let i=[e,t(e)].map(e=>`${e}.`).find(e=>n.startsWith(e)),o=i?n.slice(i.length):n;return a(e,`_views.${o}.${r}`)};return{objectLabel:e=>n(a(e.name,`label`),e.label),objectDescription:e=>{if(e.description)return n(a(e.name,`description`),e.description)},fieldLabel:(e,t,r)=>n(s(e,t),r),fieldOptionLabel:(e,t,r,i)=>n(c(e,t,r),i),translateOptions:(e,t,r)=>r.map(r=>({...r,label:n(c(e,t,r.value),r.label)})),appLabel:e=>n(`apps.${e.name}.label`,e.label??e.name),appDescription:e=>{let t=e.description??``;return n(`apps.${e.name}.description`,t)||void 0},navGroupLabel:(e,t,r)=>n(`apps.${e}.navigation.${t}.label`,r),dashboardLabel:e=>n(l(e.name,`label`),e.label??e.name),dashboardDescription:e=>{let t=e.description??``;return n(l(e.name,`description`),t)||void 0},dashboardActionLabel:(e,t,r)=>n(l(e,`actions.${t}.label`),r),widgetTitle:(e,t,r)=>n(l(e,`widgets.${t}.title`),r),widgetDescription:(e,t,r)=>{let i=r??``;return n(l(e,`widgets.${t}.description`),i)||void 0},widgetSubCaption:(e,t,r)=>{let i=r??``;return n(l(e,`widgets.${t}.subCaption`),i)||void 0},pageLabel:e=>n(u(e.name,`label`),e.label??e.name),reportLabel:e=>n(d(e.name,`label`),e.label??e.name),viewLabel:(e,t,r)=>n(f(e,t,`label`),r),viewEmptyState:(e,t,r)=>{if(!r)return;let i=r.title?n(f(e,t,`emptyState.title`),r.title):r.title,a=r.message?n(f(e,t,`emptyState.message`),r.message):r.message;return{...r,title:i,message:a}},sectionLabel:(e,t,r)=>n(a(e,`_sections.${t}.label`),r),actionLabel:(e,t,r)=>n(o(e,t,`label`),r),actionConfirm:(e,t,r)=>{let i=r??``;return n(o(e,t,`confirmText`),i)||void 0},actionSuccess:(e,t,r)=>{let i=r??``;return n(o(e,t,`successMessage`),i)||void 0},actionDescription:(e,t,r)=>{let i=r??``;return t?n(o(e,t,`description`),i)||void 0:i||void 0},actionResultDialog:(t,i,a)=>{if(!a||!i)return a;let s=e=>o(t,i,`resultDialog.${e}`),c=e=>n(s(e),a[e]??``)||a[e],l=(()=>{try{for(let t of e())for(let e of s(`fields`)){let n=r(`${t}.${e}`,{returnObjects:!0,defaultValue:null,[b]:!0});if(n&&typeof n==`object`&&!Array.isArray(n))return n}}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,r,i,a)=>{let s=a??``;return!t||!r?s||void 0:n(o(e,t,`params.${r}.${i}`),s)||void 0},actionParamOptionLabel:(e,t,r,i,a)=>!t||!r?a:n(o(e,t,`params.${r}.options.${i}`),a)}},[r,i])}var me={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 he(){return J()??me}function ge(e,t=`en`){let n=i(e);if(isNaN(n.getTime()))return String(e);let r=new Date,a=n.getTime()-r.getTime(),o=Math.round(a/1e3),s=Math.round(o/60),c=Math.round(s/60),l=Math.round(c/24),u=new Intl.RelativeTimeFormat(t,{numeric:`auto`});if(Math.abs(o)<60)return u.format(o,`second`);if(Math.abs(s)<60)return u.format(s,`minute`);if(Math.abs(c)<24)return u.format(c,`hour`);if(Math.abs(l)<30)return u.format(l,`day`);let d=Math.round(l/30);return Math.abs(d)<12?u.format(d,`month`):u.format(Math.round(l/365),`year`)}function _e(e,t={}){let{locale:n=`en`,...r}=t;return new Intl.NumberFormat(n,r).format(e)}var ve=[`objects`,`apps`,`messages`,`globalActions`,`dashboards`,`datasets`,`pages`,`flows`,`settings`,`metadataForms`,`settingsCommon`];function Y(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ye(e){return Y(e)?ve.some(t=>Y(e[t])):!1}var X=[`apps`,`messages`,`validationMessages`,`dashboards`,`globalActions`];function be(e){let t={},n={},r={},i=e.objects;if(i)for(let[e,a]of Object.entries(i)){if(!a||typeof a!=`object`)continue;let i={};a.label&&(i.label=a.label),a.pluralLabel&&(i.pluralLabel=a.pluralLabel),a.description&&(i.description=a.description);for(let[e,t]of Object.entries(a))e.startsWith(`_`)&&(i[e]=t);if(t[e]=i,a.fields&&typeof a.fields==`object`){let t=Object.entries(a.fields);for(let[i,a]of t)a?.label&&(n[e]||(n[e]={}),n[e][i]=a.label),a?.options&&typeof a.options==`object`&&Object.keys(a.options).length>0&&(r[e]||(r[e]={}),r[e][i]=a.options)}}let a={};Object.keys(t).length>0&&(a.objects=t),Object.keys(n).length>0&&(a.fields=n),Object.keys(r).length>0&&(a.fieldOptions=r);for(let t of X)e[t]!==void 0&&(a[t]=e[t]);let o=new Set([`objects`,...X]);for(let[t,n]of Object.entries(e))o.has(t)||(a[t]=n);return{app:a}}function xe(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 Z(e,t){let n=(t||`en`).trim()||`en`,r=n.split(`-`)[0],i=t=>Object.prototype.hasOwnProperty.call(e,t)&&typeof e[t]==`string`;return i(n)?n:i(r)?r:Object.keys(e).find(e=>e.split(`-`)[0]===r&&i(e))??n}function Se(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e))return n;let r=e;return{...r,[Z(r,t)]:n}}function Ce(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return;let n=e,r=Z(n,t);if(!Object.prototype.hasOwnProperty.call(n,r))return n;let i=Object.fromEntries(Object.entries(n).filter(([e])=>e!==r));return Object.keys(i).length>0?i:void 0}var we=n(),Q=u.createContext({});function Te({value:e,children:t}){let n=u.useMemo(()=>({currency:e.currency,locale:e.locale}),[e.currency,e.locale]);return(0,we.jsx)(Q.Provider,{value:n,children:t})}function $(){return u.useContext(Q)}function Ee(e,t){let n=e?.currencyConfig;return e?.currency||(n?.currencyMode===`fixed`?n.defaultCurrency:void 0)||e?.defaultCurrency||t||void 0}function De(){let{locale:e}=$(),{language:t}=K();return e||t||`en`}export{B as C,A as S,g as T,G as _,Ce as a,oe as b,ye as c,ge as d,J as f,le as g,ce as h,$ as i,be as l,ue as m,Ee as n,xe as o,he as p,Te as r,Se as s,De as t,_e as u,k as v,K as w,N as x,re as y};