@protobase/ui 0.63.5 → 0.65.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/dist/account/change-email-dialog.js +1 -1
  2. package/dist/account/devices-section.js +11 -5
  3. package/dist/account/messages.js +2 -333
  4. package/dist/account/passkeys-section.js +2 -2
  5. package/dist/account/password-change-dialog.js +3 -3
  6. package/dist/account/sign-in-policy-form.js +6 -3
  7. package/dist/account/sign-in-providers-section.js +1 -1
  8. package/dist/account/staff-sign-in-log.js +4 -4
  9. package/dist/action-card/messages.js +2 -5
  10. package/dist/activity-chart/activity-chart.js +4 -6
  11. package/dist/activity-chart/messages.js +2 -11
  12. package/dist/app/app.js +1 -2
  13. package/dist/app/batch-failure.js +5 -1
  14. package/dist/app/bottom-bar-from-meta.js +2 -3
  15. package/dist/app/change-confirm/messages.js +2 -13
  16. package/dist/app/change-confirm/use-change-confirm.js +1 -1
  17. package/dist/app/charts/chart-groups.js +3 -1
  18. package/dist/app/charts/group-bars.js +1 -1
  19. package/dist/app/charts/messages.js +2 -23
  20. package/dist/app/charts/period-chart.js +1 -1
  21. package/dist/app/comments/messages.js +2 -19
  22. package/dist/app/confirm-sign-in-messages.js +2 -19
  23. package/dist/app/confirm-sign-in.js +1 -1
  24. package/dist/app/create/create-page.js +3 -3
  25. package/dist/app/create/create-record-form.js +2 -2
  26. package/dist/app/create/create-route.js +1 -1
  27. package/dist/app/create/messages.js +2 -29
  28. package/dist/app/custom-section.js +1 -2
  29. package/dist/app/delete/blocked-delete.js +5 -2
  30. package/dist/app/delete/dialogs.js +21 -8
  31. package/dist/app/delete/messages.js +2 -63
  32. package/dist/app/delete/use-delete-flow.js +5 -4
  33. package/dist/app/displays/board-column.js +1 -1
  34. package/dist/app/displays/board-columns.js +1 -1
  35. package/dist/app/displays/board-display.js +21 -9
  36. package/dist/app/displays/calendar-display.js +15 -6
  37. package/dist/app/displays/cards-display.js +1 -1
  38. package/dist/app/displays/custom-display.js +1 -2
  39. package/dist/app/displays/list-cards.js +1 -1
  40. package/dist/app/displays/map-display.js +19 -6
  41. package/dist/app/displays/messages.js +2 -147
  42. package/dist/app/displays/period-controls.js +2 -2
  43. package/dist/app/displays/timeline-display.js +15 -6
  44. package/dist/app/displays/timeline-range.js +1 -1
  45. package/dist/app/displays/use-board-move.js +3 -3
  46. package/dist/app/displays/use-calendar-move.js +1 -1
  47. package/dist/app/document-title.js +1 -1
  48. package/dist/app/embedded-list/cut-off-note.js +7 -1
  49. package/dist/app/embedded-list/embedded-row-targets.js +3 -3
  50. package/dist/app/embedded-list/messages.js +2 -21
  51. package/dist/app/export/builder-port.js +1 -1
  52. package/dist/app/export/export-dialog.js +14 -8
  53. package/dist/app/export/messages.js +2 -75
  54. package/dist/app/export/use-export-flow.js +9 -3
  55. package/dist/app/field-editor.js +2 -2
  56. package/dist/app/field-errors.js +18 -7
  57. package/dist/app/field-messages.js +2 -45
  58. package/dist/app/field-types/members/messages.js +2 -15
  59. package/dist/app/field-types/messages.js +2 -5
  60. package/dist/app/field-types/widget-part.js +1 -1
  61. package/dist/app/file-field.js +3 -3
  62. package/dist/app/gallery/gallery-section.js +5 -2
  63. package/dist/app/gallery/messages.js +2 -27
  64. package/dist/app/gallery/photo-details.js +2 -2
  65. package/dist/app/hand-order/hand-sorted-list.js +1 -2
  66. package/dist/app/hand-order/messages.js +2 -29
  67. package/dist/app/hand-order/use-hand-order.js +1 -1
  68. package/dist/app/history/describe-change.js +1 -1
  69. package/dist/app/history/messages.js +2 -29
  70. package/dist/app/import/convert.js +19 -10
  71. package/dist/app/import/import-check-step.js +5 -5
  72. package/dist/app/import/import-dialog.js +5 -2
  73. package/dist/app/import/import-file-step.js +1 -1
  74. package/dist/app/import/import-mapping-step.js +3 -3
  75. package/dist/app/import/messages.js +2 -197
  76. package/dist/app/import/prepare-rows.js +11 -4
  77. package/dist/app/import/sheet-cell.js +1 -1
  78. package/dist/app/import/xlsx-reader.js +2 -2
  79. package/dist/app/import/zip-reader.js +4 -1
  80. package/dist/app/list-actions/use-list-actions.js +4 -1
  81. package/dist/app/list-edit/messages.js +2 -11
  82. package/dist/app/list-empty-state.js +7 -4
  83. package/dist/app/list-group-chart.js +1 -1
  84. package/dist/app/list-messages.js +2 -53
  85. package/dist/app/list-page.js +9 -9
  86. package/dist/app/live-update/messages.js +2 -11
  87. package/dist/app/map/messages.js +2 -11
  88. package/dist/app/menu-icons.js +10 -3
  89. package/dist/app/messages.js +2 -139
  90. package/dist/app/meta-gate-messages.js +2 -13
  91. package/dist/app/nav-from-meta.js +8 -9
  92. package/dist/app/new-version/messages.js +2 -21
  93. package/dist/app/new-version/new-version-banner.js +1 -2
  94. package/dist/app/pages/action-inputs/action-inputs-dialog.js +1 -1
  95. package/dist/app/pages/action-inputs/input-answers.js +1 -1
  96. package/dist/app/pages/blocks/modal-form.js +1 -1
  97. package/dist/app/pages/blocks/settings.js +1 -1
  98. package/dist/app/pages/blocks/tabs.js +1 -1
  99. package/dist/app/pages/composed-page.js +1 -2
  100. package/dist/app/pages/custom-boundary.js +1 -2
  101. package/dist/app/pages/messages.js +2 -79
  102. package/dist/app/pages/render-node.js +2 -3
  103. package/dist/app/pages/use-run-action.js +14 -6
  104. package/dist/app/rank-after/dependency-rule.js +8 -2
  105. package/dist/app/rank-after/messages.js +2 -5
  106. package/dist/app/rank-after/ranked-place.js +7 -1
  107. package/dist/app/record-chart/messages.js +2 -25
  108. package/dist/app/record-lines-cell.js +4 -1
  109. package/dist/app/record-lines.js +2 -2
  110. package/dist/app/record-messages.js +2 -83
  111. package/dist/app/record-page.js +3 -3
  112. package/dist/app/record-row/messages.js +2 -23
  113. package/dist/app/record-row/record-row-body.js +1 -1
  114. package/dist/app/record-row/record-row.js +2 -2
  115. package/dist/app/record-row/saved-record-row.js +2 -2
  116. package/dist/app/related-cards/messages.js +2 -15
  117. package/dist/app/related-dots/dots-summary.js +1 -1
  118. package/dist/app/related-dots/messages.js +2 -5
  119. package/dist/app/related-dots/related-dots.js +2 -3
  120. package/dist/app/relation-picker.js +1 -1
  121. package/dist/app/runtime/messages.js +2 -55
  122. package/dist/app/runtime/runtime-status.js +12 -3
  123. package/dist/app/saved/messages.js +2 -19
  124. package/dist/app/saved/saved-list.js +2 -2
  125. package/dist/app/search/messages.js +2 -19
  126. package/dist/app/search/navigation-hits.js +1 -1
  127. package/dist/app/search/search-model.js +9 -3
  128. package/dist/app/searches/messages.js +2 -93
  129. package/dist/app/searches/save-search-button.js +3 -3
  130. package/dist/app/searches/saved-search-rows.js +2 -2
  131. package/dist/app/searches/saved-search-section.js +3 -3
  132. package/dist/app/searches/saved-searches.js +13 -11
  133. package/dist/app/searches/search-controls.js +1 -1
  134. package/dist/app/searches/search-diff.js +8 -2
  135. package/dist/app/searches/update-search-dialog.js +9 -3
  136. package/dist/app/searches/use-save-search.js +1 -1
  137. package/dist/app/searches/use-search-row.js +2 -2
  138. package/dist/app/sensitive-field.js +3 -3
  139. package/dist/app/source-notice.js +3 -3
  140. package/dist/app/staff-banner.js +12 -8
  141. package/dist/app/use-live-save.js +2 -2
  142. package/dist/app/user-menu-from-meta.js +2 -3
  143. package/dist/app/value-badge.js +3 -4
  144. package/dist/app-shell/global-search.js +2 -2
  145. package/dist/app-shell/messages.js +2 -63
  146. package/dist/app-shell/sidebar-group.js +2 -2
  147. package/dist/app-shell/sidebar.js +1 -2
  148. package/dist/app-shell/top-bar.js +1 -1
  149. package/dist/assistant-dock/messages.js +2 -23
  150. package/dist/auth/auth-gate.js +1 -1
  151. package/dist/auth/auth-messages.js +9 -88
  152. package/dist/auth/email-code-form.js +2 -3
  153. package/dist/auth/forgot-password-form.js +2 -3
  154. package/dist/auth/messages.js +2 -203
  155. package/dist/auth/provider-sign-in-page.js +3 -3
  156. package/dist/auth/resend-code-button.js +1 -1
  157. package/dist/auth/reset-password-form.js +1 -1
  158. package/dist/auth/reset-password-page.js +1 -1
  159. package/dist/auth/sign-in-form.js +2 -2
  160. package/dist/auth/sign-up-code-form.js +2 -3
  161. package/dist/auth/sign-up-details-form.js +3 -4
  162. package/dist/auth/staff-sign-in-form.js +3 -3
  163. package/dist/calls/call-guests-panel.js +1 -1
  164. package/dist/calls/call-lobby-notice.js +1 -1
  165. package/dist/calls/call-mark.js +1 -1
  166. package/dist/calls/call-people.js +1 -1
  167. package/dist/calls/call-tile.js +2 -2
  168. package/dist/calls/messages.js +2 -139
  169. package/dist/carousel/carousel-controls.js +4 -1
  170. package/dist/carousel/messages.js +2 -13
  171. package/dist/chat/messages.js +2 -19
  172. package/dist/compact-table/compact-table.js +1 -1
  173. package/dist/compact-table/messages.js +2 -15
  174. package/dist/data-grid/cell-text.js +6 -5
  175. package/dist/data-grid/cells.js +7 -4
  176. package/dist/data-grid/grid-footer.js +1 -1
  177. package/dist/data-grid/grid-row.js +1 -1
  178. package/dist/data-grid/header-menu.js +1 -1
  179. package/dist/data-grid/messages.js +2 -49
  180. package/dist/data-grid/resize-handle.js +1 -1
  181. package/dist/data-grid/row-reorder.js +20 -5
  182. package/dist/filter-panel/active-filter-chips.js +1 -1
  183. package/dist/filter-panel/date-presets.js +2 -2
  184. package/dist/filter-panel/facet-combobox.js +1 -1
  185. package/dist/filter-panel/facet-group.js +1 -1
  186. package/dist/filter-panel/messages.js +2 -49
  187. package/dist/filter-panel/range-filter.js +1 -1
  188. package/dist/format/date.js +4 -4
  189. package/dist/format/messages.js +2 -21
  190. package/dist/format/money.js +1 -1
  191. package/dist/format/number.js +5 -2
  192. package/dist/forms/messages.js +2 -21
  193. package/dist/inline-child-table/inline-child-table.js +19 -4
  194. package/dist/inline-child-table/line-row.js +2 -2
  195. package/dist/inline-child-table/messages.js +2 -35
  196. package/dist/invitations/link-notice.js +2 -3
  197. package/dist/invitations/messages.js +2 -21
  198. package/dist/invitations/pending-invitation-row.js +1 -1
  199. package/dist/lists/messages.js +2 -5
  200. package/dist/live/columns-from-model.js +14 -31
  201. package/dist/live/display-value.js +1 -1
  202. package/dist/live/messages.js +2 -15
  203. package/dist/live/value-color.js +13 -3
  204. package/dist/live/view-fields.js +4 -2
  205. package/dist/locale/en.js +1399 -0
  206. package/dist/locale/messages.js +38 -7
  207. package/dist/locale/nl.js +1399 -0
  208. package/dist/markdown/messages.js +2 -13
  209. package/dist/mentions/messages.js +2 -13
  210. package/dist/notifications/bell/messages.js +2 -35
  211. package/dist/notifications/bell/unread-label.js +1 -1
  212. package/dist/organizations/invitation-page.js +31 -13
  213. package/dist/organizations/invitations-page.js +1 -1
  214. package/dist/organizations/members-page.js +2 -2
  215. package/dist/organizations/messages.js +2 -187
  216. package/dist/organizations/organization-page.js +4 -4
  217. package/dist/organizations/organizations-page.js +1 -1
  218. package/dist/package.js +1 -1
  219. package/dist/plugins/load-plugin.js +2 -2
  220. package/dist/plugins/messages.js +2 -33
  221. package/dist/plugins/plugin-notice.js +7 -5
  222. package/dist/primitives/badge.d.ts +2 -1
  223. package/dist/primitives/messages.js +2 -13
  224. package/dist/primitives/token.js +1 -1
  225. package/dist/record-view/field.js +2 -2
  226. package/dist/record-view/messages.js +2 -33
  227. package/dist/record-view/record-header.js +2 -2
  228. package/dist/roles/messages.js +2 -11
  229. package/dist/shell/assets/app-BOuBCV1m.js +8 -0
  230. package/dist/shell/assets/{calls-CPiQcC70.js → calls-C22bYKio.js} +2 -2
  231. package/dist/shell/assets/export-worker-ClXdfeuq.js +15 -0
  232. package/dist/shell/assets/{index-_ZpZ2ro0.js → index-G0fdUd70.js} +2 -2
  233. package/dist/shell/assets/{maplibre-CjNYwEqW.js → maplibre-CRmpQfDl.js} +3 -3
  234. package/dist/shell/assets/parse-worker-DxsmAjef.js +18 -0
  235. package/dist/shell/assets/preload-helper-BgLOXTzV.js +2 -0
  236. package/dist/shell/assets/{record-map-DjqQGqZ2.js → record-map-DsP4sXes.js} +2 -2
  237. package/dist/shell/assets/{records-map-DU29d6QK.js → records-map-BtWK38Kn.js} +2 -2
  238. package/dist/shell/assets/shared-protobase-ui-xqMMtr7u.js +2 -0
  239. package/dist/shell/assets/vendor-Kvdo8Jrw.js +73 -0
  240. package/dist/shell/index.html +5 -5
  241. package/dist/shell/protobase.shell.json +2 -2
  242. package/dist/shell/protobase.sw.js +2 -2
  243. package/dist/shell-source-maps/assets/app-BOuBCV1m.js.map +1 -0
  244. package/dist/shell-source-maps/assets/{calls-CPiQcC70.js.map → calls-C22bYKio.js.map} +1 -1
  245. package/dist/shell-source-maps/assets/export-worker-ClXdfeuq.js.map +1 -0
  246. package/dist/shell-source-maps/assets/{index-_ZpZ2ro0.js.map → index-G0fdUd70.js.map} +1 -1
  247. package/dist/shell-source-maps/assets/{maplibre-CjNYwEqW.js.map → maplibre-CRmpQfDl.js.map} +1 -1
  248. package/dist/shell-source-maps/assets/parse-worker-DxsmAjef.js.map +1 -0
  249. package/dist/shell-source-maps/assets/preload-helper-BgLOXTzV.js.map +1 -0
  250. package/dist/shell-source-maps/assets/{record-map-DjqQGqZ2.js.map → record-map-DsP4sXes.js.map} +1 -1
  251. package/dist/shell-source-maps/assets/{records-map-DU29d6QK.js.map → records-map-BtWK38Kn.js.map} +1 -1
  252. package/dist/shell-source-maps/assets/shared-protobase-ui-xqMMtr7u.js.map +1 -0
  253. package/dist/shell-source-maps/assets/vendor-Kvdo8Jrw.js.map +1 -0
  254. package/dist/side-panel/messages.js +2 -5
  255. package/dist/status/messages.js +2 -59
  256. package/dist/toasts/messages.js +2 -5
  257. package/dist/users/create-user-form.js +1 -1
  258. package/dist/users/messages.js +2 -49
  259. package/package.json +5 -4
  260. package/dist/app/icons.js +0 -27
  261. package/dist/app-shell/nav.js +0 -85
  262. package/dist/locale/slotted.js +0 -14
  263. package/dist/mocks/activity.js +0 -24
  264. package/dist/mocks/rng.js +0 -20
  265. package/dist/mocks/users.js +0 -63
  266. package/dist/shell/assets/app-BPv_SjnU.js +0 -9
  267. package/dist/shell/assets/export-worker-3e4Zsv0a.js +0 -3
  268. package/dist/shell/assets/parse-worker-UhbwEjS0.js +0 -6
  269. package/dist/shell/assets/preload-helper-SYSsmQ2O.js +0 -2
  270. package/dist/shell/assets/shared-protobase-ui-Cab5nqST.js +0 -2
  271. package/dist/shell/assets/vendor-iwLB0x-s.js +0 -63
  272. package/dist/shell-source-maps/assets/app-BPv_SjnU.js.map +0 -1
  273. package/dist/shell-source-maps/assets/export-worker-3e4Zsv0a.js.map +0 -1
  274. package/dist/shell-source-maps/assets/parse-worker-UhbwEjS0.js.map +0 -1
  275. package/dist/shell-source-maps/assets/preload-helper-SYSsmQ2O.js.map +0 -1
  276. package/dist/shell-source-maps/assets/shared-protobase-ui-Cab5nqST.js.map +0 -1
  277. package/dist/shell-source-maps/assets/vendor-iwLB0x-s.js.map +0 -1
@@ -0,0 +1,1399 @@
1
+ //#region src/locale/en.json
2
+ var en_default = {
3
+ account: {
4
+ "account": "Account",
5
+ "noAccount": "No account page",
6
+ "noAccountDescription": "This app has no account page for you.",
7
+ "signInPolicy": "Sign-in policy",
8
+ "couldNotReadMethods": "Could not read your sign-in methods",
9
+ "couldNotReadProfile": "Could not read your profile",
10
+ "profile": "Profile",
11
+ "profileDescription": "Your name as others see it in this app, and the address you sign in with.",
12
+ "email": "Email",
13
+ "changeName": "Change name",
14
+ "changeNameDescription": "The name others see on your comments, changes and invitations.",
15
+ "changeEmail": "Change email",
16
+ "changeEmailDescription": "We email a code to the new address. Once you enter it here, you sign in with that address.",
17
+ "newEmail": "New email",
18
+ "sendCode": "Send code",
19
+ "codeSentTo": "Enter the 6-digit code we emailed to {email}. It works for 5 minutes. No code comes when another account has the address.",
20
+ "code": "Code",
21
+ "otherAddress": "Use another address",
22
+ "theProvider": "the provider",
23
+ "loading": "Loading",
24
+ "backupCodes": "Backup codes",
25
+ "copied": "Copied",
26
+ "copy": "Copy",
27
+ "download": "Download",
28
+ "cancel": "Cancel",
29
+ "save": "Save",
30
+ "name": "Name",
31
+ "yourPassword": "Your password",
32
+ "passwordIsSet": "Sign in with your email address and this password. Changing it asks for the current one.",
33
+ "passwordNotSet": "You sign in without a password now. Set one to sign in with your email address and a password too; you stay signed in everywhere.",
34
+ "passwordForbidden": "Your admin turned passwords off for this app, so they cannot be used to sign in.",
35
+ "passwordStaff": "Staff signed in as someone cannot change their password.",
36
+ "passwordSaved": "Your password is saved.",
37
+ "changePassword": "Change password",
38
+ "setPassword": "Set a password",
39
+ "currentPassword": "Current password",
40
+ "newPassword": "New password",
41
+ "repeatPassword": "Repeat new password",
42
+ "atLeast": "At least {length} characters.",
43
+ "useAtLeast": "Use at least {length} characters.",
44
+ "passwordTooLong": "That password is too long.",
45
+ "passwordsDiffer": "The passwords are not the same.",
46
+ "continue": "Continue",
47
+ "on": "On",
48
+ "off": "Off",
49
+ "optional": "Optional",
50
+ "required": "Required",
51
+ "passkeys": "Passkeys",
52
+ "passkey": "Passkey",
53
+ "passkeysAllowed": "Sign in with Face ID, Touch ID, Windows Hello, your phone or a security key instead of a password.",
54
+ "passkeysRequired": "This app requires a passkey for every account. Sign in with Face ID, Touch ID, Windows Hello, your phone or a security key.",
55
+ "passkeysForbidden": "Your admin turned passkeys off for this app, so they cannot be used to sign in.",
56
+ "addedOn": "Added {date}",
57
+ "addedEarlier": "Added earlier",
58
+ "synced": "Synced across your devices",
59
+ "oneDevice": "On one device",
60
+ "rename": "Rename",
61
+ "remove": "Remove",
62
+ "keepLastPasskey": "Passkeys are required: add another one before removing this one.",
63
+ "addPasskey": "Add a passkey",
64
+ "renamePasskey": "Rename passkey",
65
+ "renamePasskeyDescription": "A name that tells you where this passkey lives, such as the device or password manager.",
66
+ "removePasskey": "Remove passkey?",
67
+ "removePasskeyDescription": "{name} will no longer sign you in here. It stays on the device until you delete it there.",
68
+ "thisPasskey": "This passkey",
69
+ "connectedAccounts": "Connected accounts",
70
+ "connectedAccountsDescription": "Sign in with these instead of your password. Connecting one asks you to sign in there; its address may differ from yours here.",
71
+ "connected": "Connected",
72
+ "connect": "Connect {name}",
73
+ "mailbox": "Mailbox",
74
+ "mailboxDescription": "Mail this app sends for you goes out from your own mailbox. Connecting one asks you to sign in there and allow sending mail; it cannot read your mail.",
75
+ "stopped": "Stopped {time}",
76
+ "ended": "Ended {time}",
77
+ "signedInUntil": "Signed in until {time}",
78
+ "devices": "Devices",
79
+ "devicesDescription": "The browsers and apps signed in to your account. To sign out this one, use Sign out in the menu.",
80
+ "couldNotReadDevices": "Could not read your devices",
81
+ "noDevices": "No device is signed in.",
82
+ "thisDevice": "This device",
83
+ "browserOn": "{browser} on {system}",
84
+ "aBrowserOn": "A browser on {system}",
85
+ "unknownDevice": "Unknown device",
86
+ "staffOf": "{operator} staff",
87
+ "staff": "Staff",
88
+ "signedInFromUntil": "Signed in {from}, until {until}",
89
+ "signOut": "Sign out",
90
+ "signOutDevice": "Sign out {name}?",
91
+ "signOutDeviceDescription": "It has to sign in again to use your account.",
92
+ "signOutOthers": "Sign out of all other devices",
93
+ "signOutOthersTitle": "Sign out of all other devices?",
94
+ "signOutOthersDescription": "Every other browser and app signed in to your account has to sign in again. This device stays signed in.",
95
+ "staffSignIns": "Staff sign-ins",
96
+ "staffSignInsDescription": "Each time staff of {operator} signed in as someone here, newest first.",
97
+ "noStaffSignIns": "No staff has signed in as anyone yet.",
98
+ "as": "as",
99
+ "qrCode": "QR code for your authenticator app",
100
+ "twoFactor": "Two-factor authentication",
101
+ "twoFactorAllowed": "Ask for a second step after your password or an emailed sign-in code: a code from an authenticator app, or one emailed to you. A passkey needs no second step.",
102
+ "twoFactorRequired": "This app requires two-factor authentication for every account. Turn it on to keep using the app.",
103
+ "twoFactorForbidden": "Your admin turned two-factor authentication off for this app.",
104
+ "twoFactorOnWithApp": "Signing in with a password or an emailed sign-in code also asks for a code from your authenticator app. Backup codes work when you do not have the app.",
105
+ "twoFactorOnWithAppOrMail": "Signing in with a password or an emailed sign-in code also asks for a code from your authenticator app, or one emailed to you. Backup codes work when you do not have the app.",
106
+ "twoFactorOnWithMail": "Signing in with a password or an emailed sign-in code also asks for a code emailed to you.",
107
+ "turnOn": "Turn on",
108
+ "turnOff": "Turn off",
109
+ "addAuthenticator": "Add an authenticator app",
110
+ "newBackupCodes": "New backup codes",
111
+ "twoFactorIsRequired": "This app requires two-factor authentication.",
112
+ "turnOffTitle": "Turn off two-factor authentication?",
113
+ "turnOffDescription": "Signing in then needs only your password or an emailed code. Your backup codes stop working.",
114
+ "newCodesTitle": "Make new backup codes?",
115
+ "newCodesDescription": "Your current backup codes stop working, and you get ten new ones.",
116
+ "makeNewCodes": "Make new codes",
117
+ "yourNewCodes": "Your new backup codes",
118
+ "keepCodesSafe": "Keep them somewhere safe: each one signs you in once if you lose your phone. They are not shown again.",
119
+ "savedCodes": "I saved my backup codes",
120
+ "authenticatorApp": "Authenticator app",
121
+ "authenticatorAppDescription": "A code from an app such as Google Authenticator, Microsoft Authenticator or 1Password. Comes with backup codes.",
122
+ "emailedCode": "Emailed code",
123
+ "emailedCodeDescription": "A code mailed to your address each time you sign in with a password or an emailed sign-in code.",
124
+ "twoFactorIsOn": "Two-factor authentication is on. Keep these backup codes somewhere safe: each one signs you in once if you lose your phone. They are not shown again.",
125
+ "scanCode": "Scan this code with your authenticator app, then enter the 6-digit code it shows.",
126
+ "cannotScan": "Can't scan it? Enter this key in the app:",
127
+ "codeFromApp": "Code from the app",
128
+ "secondStep": "Second step",
129
+ "password": "Password",
130
+ "passwordDescription": "Sign in with the email address and a password.",
131
+ "emailedSignInCode": "Emailed sign-in code",
132
+ "emailedSignInCodeDescription": "Sign in with a one-time code mailed to the account's address.",
133
+ "passkeysPolicyDescription": "Sign in with Face ID, Touch ID, Windows Hello, a phone or a security key. Required: everyone adds one after signing in.",
134
+ "twoFactorPolicyDescription": "A code from an authenticator app, or an emailed one, after a password or an emailed sign-in code. Required: everyone turns it on after signing in.",
135
+ "staffAccess": "Staff sign-in as a person",
136
+ "staffAccessDescription": "The team that runs this app signs in as someone to help them, with a reason, for a short session. Each time is in the log below; with \"Email the person\" they are told too.",
137
+ "emailThePerson": "Email the person",
138
+ "platformSignIn": "Sign-in through the platform",
139
+ "platformSignInDescription": "The sign-in provider the platform that runs this app adds, for people who have an account here already. It never creates accounts.",
140
+ "platformSignInWith": "Sign in with {provider} through the platform",
141
+ "codeNeedsMail": "Needs mail settings (PROTOBASE_SMTP_URL and PROTOBASE_MAIL_FROM): off until they are set.",
142
+ "passwordStaysOn": "Without mail settings, password sign-in stays on so nobody is locked out.",
143
+ "staffNeedsMail": "Needs mail settings (PROTOBASE_SMTP_URL and PROTOBASE_MAIL_FROM): staff cannot sign in until they are set.",
144
+ "platformOff": "Off while passkeys or two-factor authentication are required: it skips the second step.",
145
+ "appliesAs": "Applies as {rule} for now.",
146
+ "lastSaved": "Last saved on {time}.",
147
+ "lastSavedBy": "Last saved by {name} on {time}.",
148
+ "neverChanged": "Never changed: this is the app's default.",
149
+ "reset": "Reset",
150
+ "couldNotReadStaffSignIns": "Could not read the staff sign-ins",
151
+ "couldNotReadPolicy": "Could not read the sign-in policy",
152
+ "policySaved": "Saved. It applies to every sign-in from now on.",
153
+ "policySubtitle": "How people sign in to this app. Signed-in people keep their session, and are asked for what is newly required within 15 minutes.",
154
+ "mcpAddress": "MCP address",
155
+ "mcpAddressDescription": "Add this address to an AI assistant or code editor that speaks MCP, as a custom connector or remote MCP server. It opens this app in your browser, where you sign in and allow it; it then works with your access.",
156
+ "copyMcpAddress": "Copy the MCP address",
157
+ "addToClaude": "Add to Claude",
158
+ "deleteAccount": "Delete account",
159
+ "deleteAccountDescription": "Delete your account and sign out everywhere. You can no longer sign in with it, and this cannot be undone.",
160
+ "deleteAccountStaff": "Staff signed in as someone cannot delete their account.",
161
+ "deleteAccountQuestion": "Delete your account?",
162
+ "deleteAccountWarning": "Your account, its sign-in methods and every device signed in to it are deleted. This cannot be undone.",
163
+ "deleteAccountPassword": "Enter your password to confirm.",
164
+ "deleteAccountConfirm": "Delete my account",
165
+ "deleteAccountLastAdmin": "You are the last admin of this app. Make someone else an admin first.",
166
+ "deleteAccountLocked": "This account is locked, so it cannot be deleted."
167
+ },
168
+ "action-card": { "cancel": "Cancel" },
169
+ "activity-chart": {
170
+ "day": "Day",
171
+ "week": "Week"
172
+ },
173
+ app: {
174
+ "notFound": "Not found",
175
+ "noResource": "There is no resource called {name}.",
176
+ "somethingWentWrong": "Something went wrong",
177
+ "signInPolicy": "Sign-in policy",
178
+ "adminsOnly": "Admins only",
179
+ "onlyAdminPolicy": "Only an admin can change how people sign in.",
180
+ "ownersOnly": "Owners and admins only",
181
+ "onlyOwners": "Only the organization's owners and admins manage its members.",
182
+ "chooseResource": "Choose a resource",
183
+ "pickFromSidebar": "Pick one from the sidebar.",
184
+ "nothingHere": "There is nothing at this address.",
185
+ "noPage": "There is no page called {page}.",
186
+ "assistant": "Assistant",
187
+ "operationFailed": "Operation {index} ({label}) failed: {message} Nothing was saved.",
188
+ "nothingSaved": "{message} Nothing was saved.",
189
+ "admin": "Admin",
190
+ "new": "New",
191
+ "loadingRecord": "Loading record",
192
+ "noComponent": "No component is registered as {component}. Export it from protobase.ui.tsx, or load the plugin that provides it.",
193
+ "choose": "Choose...",
194
+ "fileMissing": "The file is missing from storage",
195
+ "chooseFileFor": "Choose a file for {label}",
196
+ "notUploaded": "Not uploaded",
197
+ "uploadingLabel": "Uploading {label}",
198
+ "uploading": "Uploading… {percent}%",
199
+ "replace": "Replace",
200
+ "remove": "Remove",
201
+ "dropFile": "Drop a file here or",
202
+ "chooseFile": "Choose a file",
203
+ "average": "Average <lower>{label}</lower>",
204
+ "pages": "Pages",
205
+ "account": "Account",
206
+ "sales": "Sales",
207
+ "crm": "CRM",
208
+ "catalog": "Catalog",
209
+ "inventory": "Inventory",
210
+ "hr": "HR",
211
+ "cannotReach": "Cannot reach {label}",
212
+ "searchPlural": "Search {plural}",
213
+ "couldNotLoadOptions": "Could not load the options",
214
+ "noMatches": "No matches",
215
+ "loading": "Loading",
216
+ "leaveTitle": "Leave without saving?",
217
+ "leaveDescription": "You have unsaved changes on this page. They stay in this browser, and come back when you open the record again.",
218
+ "leaveInputLost": "You have unsaved changes on this page. They are lost when you leave.",
219
+ "stay": "Stay",
220
+ "leave": "Leave",
221
+ "reloadTitle": "Reload without saving?",
222
+ "reloadDraftKept": "You have unsaved changes on this page. They stay in this browser, and come back after the page reloads.",
223
+ "reloadInputLost": "You have unsaved changes on this page. They are lost when the page reloads.",
224
+ "keepEditing": "Keep editing",
225
+ "reload": "Reload",
226
+ "show": "Show {label}",
227
+ "hide": "Hide {label}",
228
+ "couldNotShow": "Could not show the {label}",
229
+ "setNewValue": "Set a new value",
230
+ "noAnswer": "It did not answer.",
231
+ "signInRefused": "It did not accept your sign-in: {message}",
232
+ "loadingFrom": "Loading from {label}",
233
+ "restWorks": "The rest of the app works as before.",
234
+ "tryAgain": "Try again",
235
+ "staffSession": "Staff session",
236
+ "staffSignedIn": "{staff} is signed in as {user} until {until}. Reason: {reason}",
237
+ "stopStaffSession": "Stop staff session",
238
+ "open": "Open",
239
+ "openLabel": "Open {label}"
240
+ },
241
+ "app-shell": {
242
+ "navigation": "Navigation",
243
+ "resources": "Resources",
244
+ "breadcrumb": "Breadcrumb",
245
+ "tabs": "Tabs",
246
+ "more": "More",
247
+ "openNavigation": "Open navigation",
248
+ "backTo": "Back to {label}",
249
+ "search": "Search",
250
+ "closeSearch": "Close search",
251
+ "clearSearch": "Clear search",
252
+ "globalSearch": "Global search",
253
+ "searchResults": "Search results",
254
+ "searching": "Searching",
255
+ "noMatches": "No matches for “{query}”",
256
+ "profileMenu": "Profile menu",
257
+ "organizations": "Organizations",
258
+ "roles": "Roles",
259
+ "signIn": "Sign in",
260
+ "signOut": "Sign out",
261
+ "theme": "Theme",
262
+ "light": "Light",
263
+ "dark": "Dark",
264
+ "system": "System",
265
+ "recent": "Recent {plural}",
266
+ "loading": "Loading...",
267
+ "couldNotLoad": "Could not load",
268
+ "viewAll": "View all",
269
+ "couldNotSearch": "Could not search <lower>{label}</lower>"
270
+ },
271
+ "app/change-confirm": {
272
+ "title": "Change {label}?",
273
+ "change": "Change",
274
+ "cancel": "Cancel"
275
+ },
276
+ "app/charts": {
277
+ "notSet": "Not set",
278
+ "yes": "Yes",
279
+ "no": "No",
280
+ "nothingYet": "Nothing to chart yet.",
281
+ "couldNotLoad": "Could not load the chart.",
282
+ "weekOf": "Week of {day}",
283
+ "other": "Other",
284
+ "records": "{count} records"
285
+ },
286
+ "app/comments": {
287
+ "couldNotPost": "Could not post the comment",
288
+ "comment": "Comment",
289
+ "placeholder": "Write a comment, @ to mention someone",
290
+ "couldNotLoad": "Could not load the comments",
291
+ "showEarlier": "Show earlier comments",
292
+ "noComments": "No comments yet."
293
+ },
294
+ "app/confirm-sign-in": {
295
+ "confirmTitle": "Confirm it's you",
296
+ "confirmWhy": "Showing this needs a passkey or your authenticator app in the last {minutes} minutes.",
297
+ "usePasskey": "Use a passkey",
298
+ "authenticatorCode": "Code from your authenticator app",
299
+ "confirm": "Confirm",
300
+ "nothingToConfirmWith": "Add a passkey or an authenticator app on your account page first."
301
+ },
302
+ "app/create": {
303
+ "title": "New <lower>{noun}</lower>",
304
+ "subject": "New <lower>{noun}</lower>",
305
+ "submit": "Create <lower>{noun}</lower>",
306
+ "notCreated": "Not created",
307
+ "notSaved": "Not saved",
308
+ "cancel": "Cancel",
309
+ "setByDatabase": "Set by the database",
310
+ "details": "Details",
311
+ "otherFields": "Other fields",
312
+ "notAllowed": "Not allowed",
313
+ "cannotCreate": "You cannot create {plural}."
314
+ },
315
+ "app/delete": {
316
+ "confirmTitle": "Delete {title}?",
317
+ "confirmDescription": "This <lower>{noun}</lower> will be removed. This cannot be undone.",
318
+ "cancel": "Cancel",
319
+ "delete": "Delete",
320
+ "changedTitle": "{title} was changed since you opened it",
321
+ "changedDescription": "Someone saved this record in the meantime. Review what changed before you delete it.",
322
+ "reviewChanges": "Review changes",
323
+ "deleteAnyway": "Delete anyway",
324
+ "noVisibleChanges": "No visible fields differ; the record was saved again with the same values.",
325
+ "bulkConfirmTitle": "Delete {count, plural, one {# <lower>{noun}</lower>} other {# <lower>{plural}</lower>}}?",
326
+ "bulkConfirmDescription": "This cannot be undone. Each record is deleted only if it has not changed since the list loaded; anything that changed is reported and kept.",
327
+ "deleteCount": "Delete {count}",
328
+ "deleting": "Deleting",
329
+ "progress": "{done} of {total} done",
330
+ "working": "Working",
331
+ "deleted": "Deleted {count}",
332
+ "deletedOf": "Deleted {count} of {total}",
333
+ "kept": "{count} could not be deleted and were kept.",
334
+ "done": "Done",
335
+ "deletedToast": "{title} deleted",
336
+ "undo": "Undo",
337
+ "restored": "{title} restored",
338
+ "alreadyBack": "{title} is already back",
339
+ "couldNotRestore": "Could not restore {title}",
340
+ "couldNotDelete": "Could not delete {title}",
341
+ "changedSinceLoaded": "Changed since the list loaded, so it was kept.",
342
+ "stillPointAt": "{plural} still point at this <lower>{noun}</lower>.",
343
+ "show": "Show <lower>{plural}</lower>"
344
+ },
345
+ "app/displays": {
346
+ "table": "Table",
347
+ "display": "Display",
348
+ "sort": "Sort",
349
+ "ascending": "ascending",
350
+ "descending": "descending",
351
+ "movedTo": "Moved to {column}",
352
+ "orderChanged": "Order changed",
353
+ "stayedIn": "Saved, still in {column}",
354
+ "undo": "Undo",
355
+ "couldNotUndo": "Could not undo",
356
+ "couldNotLoadRows": "Could not load rows",
357
+ "noPlural": "No {plural}",
358
+ "noValue": "No <lower>{label}</lower>",
359
+ "somethingWrong": "Something went wrong",
360
+ "showMore": "Show more",
361
+ "noDrop": "No board drop is registered as {drop}. Give it in boardDrops in protobase.ui.tsx, or load the plugin that provides it.",
362
+ "noComponent": "No component is registered as {component}. Export it from protobase.ui.tsx, or load the plugin that provides it.",
363
+ "pickedUp": "Picked up {title}.",
364
+ "isOver": "{title} is over {over}.",
365
+ "putBack": "{title} was put back.",
366
+ "wasMovedTo": "{title} was moved to {to}.",
367
+ "cancelled": "Moving {title} was cancelled.",
368
+ "startsOn": "{title} starts on {day}.",
369
+ "noColumn": "no column",
370
+ "noDay": "no day",
371
+ "placeOf": "{column}, place {place} of {count}",
372
+ "place": "{column}, place {place}",
373
+ "boardAcross": "To move a card to another column, press Space, move it with the left and right arrow keys, and press Space again to drop it there. Escape puts it back.",
374
+ "boardAnywhere": "To move a card, press Space, move it with the up and down arrow keys within its column and the left and right arrow keys to another column, and press Space again to drop it there. Escape puts it back.",
375
+ "boardWithin": "To move a card, press Space, move it with the up and down arrow keys within its column, and press Space again to drop it there. Escape puts it back.",
376
+ "calendarInstructions": "To move an event to another day, press Space, move it a day with the left and right arrow keys or a week with the up and down arrow keys, and press Space again to drop it there. Escape puts it back.",
377
+ "timelineInstructions": "To move a bar to other days, press Space, move it a day with the left and right arrow keys, and press Space again to drop it there. Escape puts it back.",
378
+ "week": "Week",
379
+ "month": "Month",
380
+ "quarter": "Quarter",
381
+ "calendarScale": "Calendar scale",
382
+ "timelineScale": "Timeline scale",
383
+ "previousPeriod": "Previous {unit}",
384
+ "nextPeriod": "Next {unit}",
385
+ "today": "Today",
386
+ "capped": "Showing the first {limit} records of this {unit}. Narrow the filter to see the rest.",
387
+ "nothingIn": "Nothing in this {unit}.",
388
+ "noneMatch": "No {plural} match.",
389
+ "list": "List",
390
+ "showOneApproximate": "Show the {singular}, at an approximate position",
391
+ "showOne": "Show the {singular}",
392
+ "showMany": "Show {count} {plural}",
393
+ "showManyApproximate": "Show {count} {plural}, at approximate positions",
394
+ "showManySomeApproximate": "Show {count} {plural}, {near} at approximate positions",
395
+ "zoomIn": "Zoom in on {count} {noun}",
396
+ "needsStyle": "The map display needs a map style: set PROTOBASE_MAP_STYLE_URL.",
397
+ "noneHere": "No {plural} in this part of the map.",
398
+ "showAll": "Show all",
399
+ "chosen": "Chosen {singular}",
400
+ "approximatePosition": "Approximate position",
401
+ "previous": "Previous",
402
+ "next": "Next",
403
+ "close": "Close",
404
+ "features": "Features",
405
+ "couldNotReorder": "Could not change the order",
406
+ "couldNotMoveTo": "Could not move it to {to}",
407
+ "moreHidden": "+{count} more"
408
+ },
409
+ "app/embedded-list": {
410
+ "firstOf": "The first {shown} of {total}.",
411
+ "firstOfAbout": "The first {shown} of about {total}.",
412
+ "open": "Open {singular}",
413
+ "edit": "Edit {singular}",
414
+ "viewAll": "View all",
415
+ "couldNotLoad": "Could not load",
416
+ "nothingYet": "Nothing here yet."
417
+ },
418
+ "app/export": {
419
+ "excel": "Excel (.xlsx)",
420
+ "csv": "CSV",
421
+ "asShown": "As shown",
422
+ "rawValues": "Raw values",
423
+ "shownHint": "Labels, dates and numbers as the list shows them.",
424
+ "rawHint": "Values as they are stored, such as keys and codes.",
425
+ "counting": "Counting rows…",
426
+ "moreThan": "more than 10,000 rows",
427
+ "columns": "Columns",
428
+ "moveUp": "Move {label} up",
429
+ "moveDown": "Move {label} down",
430
+ "selectedRows": "{count} selected {rows, plural, one {row} other {rows}}",
431
+ "rowsInList": "Rows in the list",
432
+ "selected": "Selected ({count})",
433
+ "exportPlural": "Export <lower>{plural}</lower>",
434
+ "cancel": "Cancel",
435
+ "export": "Export",
436
+ "format": "Format",
437
+ "rows": "Rows",
438
+ "listHint": "With the list’s filters, search and sort.",
439
+ "values": "Values",
440
+ "exports": "Exports {rows}.",
441
+ "overLimit": " A file holds at most {limit} rows; the rest are left out.",
442
+ "exporting": "Exporting <lower>{plural}</lower>",
443
+ "rowsExported": "Rows exported",
444
+ "doneOf": "{done} of {total} rows",
445
+ "done": "{done} rows",
446
+ "exported": "Exported {count} <lower>{plural}</lower>",
447
+ "truncated": "{name}: the first {count} rows, as many as a file holds.",
448
+ "couldNotExport": "Could not export <lower>{plural}</lower>",
449
+ "cancelled": "The export was cancelled",
450
+ "couldNotBuild": "The export could not be built: {message}",
451
+ "workbook": "Excel workbook",
452
+ "csvFile": "CSV file"
453
+ },
454
+ "app/field": {
455
+ "atLeastCharacters": "{label} needs at least {count} {n, plural, one {character} other {characters}}",
456
+ "atMostCharacters": "{label} can have at most {count} {n, plural, one {character} other {characters}}",
457
+ "wholeNumberAtLeast": "Enter a whole number of at least {min}",
458
+ "wholeNumberAtMost": "Enter a whole number of at most {max}",
459
+ "wholeNumber": "Enter a whole number",
460
+ "number": "Enter a number",
461
+ "wholeNumberBelow": "Enter a whole number below {below}",
462
+ "decimalsBelow": "Enter a number with at most {scale, plural, one {# decimal} other {# decimals}}, below {below}",
463
+ "date": "Enter a date",
464
+ "timestamp": "Enter a date and time",
465
+ "country": "Enter a two-letter country code, such as NL",
466
+ "currency": "Enter a three-letter currency code, such as EUR",
467
+ "uuid": "Enter a valid ID",
468
+ "enum": "Choose one of the options",
469
+ "relation": "Choose a record",
470
+ "json": "Enter valid JSON",
471
+ "required": "{label} is required",
472
+ "checkField": "Check the marked field.",
473
+ "checkFields": "Check {count} fields."
474
+ },
475
+ "app/field-types": { "fieldType": "The field type {name}" },
476
+ "app/field-types/members": {
477
+ "needsOrganizations": "Choosing members needs organizations: turn them on in the auth config.",
478
+ "couldNotLoadMembers": "Could not load the members.",
479
+ "unknownMember": "Unknown member",
480
+ "searchMembers": "Search members"
481
+ },
482
+ "app/gallery": {
483
+ "couldNotLoad": "Could not load the photos",
484
+ "showAll": "Show all {count} photos",
485
+ "showPhoto": "Show photo {index} of {count}",
486
+ "details": "Details",
487
+ "holderDetails": "{singular} details",
488
+ "close": "Close",
489
+ "previousPhoto": "Previous photo",
490
+ "nextPhoto": "Next photo",
491
+ "couldNotLoadOne": "Could not load the {singular}",
492
+ "open": "Open {singular}"
493
+ },
494
+ "app/hand-order": {
495
+ "done": "Done",
496
+ "reorder": "Reorder",
497
+ "couldNotLoad": "Could not load",
498
+ "nothingYet": "Nothing here yet.",
499
+ "couldNotChange": "Could not change the order",
500
+ "orderChanged": "Order changed",
501
+ "undo": "Undo",
502
+ "couldNotUndo": "Could not undo",
503
+ "movedToPlace": "Moved to place {place}",
504
+ "notMoved": "Left in its place",
505
+ "noRule": "No drop rule is registered as {rule}. Give it in dropRules in protobase.ui.tsx, or load the plugin that provides it."
506
+ },
507
+ "app/history": {
508
+ "create": "created this",
509
+ "update": "changed",
510
+ "delete": "deleted this",
511
+ "undelete": "restored this",
512
+ "database": "Database",
513
+ "databaseRole": "Database ({role})",
514
+ "changed": "changed",
515
+ "changedThis": "changed this",
516
+ "couldNotLoad": "Could not load the history",
517
+ "noChanges": "No changes kept yet.",
518
+ "showMore": "Show more"
519
+ },
520
+ "app/import": {
521
+ "import": "Import",
522
+ "importPlural": "Import <lower>{plural}</lower>",
523
+ "couldNotReadFile": "Could not read the file",
524
+ "couldNotCheck": "Could not check the rows",
525
+ "cancel": "Cancel",
526
+ "next": "Next",
527
+ "checkRows": "Check rows",
528
+ "back": "Back",
529
+ "checking": "Checking",
530
+ "importRows": "Import {count} {rows, plural, one {row} other {rows}}",
531
+ "cancelImport": "Cancel import",
532
+ "done": "Done",
533
+ "file": "File",
534
+ "fileHint": "An Excel workbook (.xlsx) or a CSV file saved as UTF-8. Its first row names the columns.",
535
+ "reading": "Reading {name}…",
536
+ "theFile": "the file",
537
+ "sheet": "Sheet",
538
+ "create": "Create",
539
+ "update": "Update",
540
+ "upsert": "Create or update",
541
+ "createHint": "Each row creates a record.",
542
+ "updateHint": "Each row updates the record its value finds; a row that finds none is not imported.",
543
+ "upsertHint": "Each row updates the record its value finds, or creates one when it finds none.",
544
+ "doNotImport": "Do not import",
545
+ "rows": "Rows",
546
+ "whatEachRowDoes": "What each row does",
547
+ "findBy": "Find records by",
548
+ "chooseField": "Choose a field",
549
+ "findByHint": "A field no two records share, such as the key or an email.",
550
+ "foundInColumn": "Found in column",
551
+ "chooseColumn": "Choose a column",
552
+ "numbers": "Numbers",
553
+ "dates": "Dates",
554
+ "dayFirst": "Day first (31/12/2026)",
555
+ "monthFirst": "Month first (12/31/2026)",
556
+ "datesHint": "Dates written as 2026-12-31 read the same either way. Times without a zone are your own time.",
557
+ "requiredMarked": "New records need the fields marked *.",
558
+ "columns": "Columns",
559
+ "emptyInFirstRows": "Empty in the first rows",
560
+ "field": "Field",
561
+ "fieldFor": "Field for {name}",
562
+ "foundBy": "Found by",
563
+ "pluralFoundBy": "{plural} found by",
564
+ "noColumnFills": "No column fills {fields}, which new records need.",
565
+ "rowsNotImported": "Rows not imported",
566
+ "rowProblems": "Row {line}:",
567
+ "andMore": "And {count} more rows, all in the file.",
568
+ "checkingRows": "Checking rows… {count} read",
569
+ "check": "Check",
570
+ "toCreate": "To create",
571
+ "toUpdate": "To update",
572
+ "withProblems": "With problems",
573
+ "firstRows": "First rows",
574
+ "row": "Row",
575
+ "problemRows": "Rows with problems, which are skipped",
576
+ "download": "Download",
577
+ "batches": "Rows are saved in batches of {size}. Cancelling, or an error, keeps the batches already saved; a row the server refuses is listed and the others are saved.",
578
+ "stopping": "Stopping after this batch…",
579
+ "saving": "Saving rows…",
580
+ "rowsSaved": "Rows saved",
581
+ "stopped": "The import stopped. The rows counted below were saved.",
582
+ "cancelled": "Cancelled. The rows counted below were saved.",
583
+ "summary": "Import summary",
584
+ "created": "Created",
585
+ "updated": "Updated",
586
+ "skipped": "Skipped",
587
+ "failed": "Failed",
588
+ "notWrittenHint": "Skipped rows had problems in the file; the server refused the failed ones. The file holds each with the reason, to fix and import again.",
589
+ "notImportedFile": "{name} - not imported.csv",
590
+ "line": "Line",
591
+ "problems": "Problems",
592
+ "notNumber": "{cell} is not a number",
593
+ "notWholeNumber": "{cell} is not a whole number",
594
+ "tooLarge": "{cell} is too large",
595
+ "notBoolean": "{cell} is not true or false (true, false, yes, no, 1 or 0)",
596
+ "notDate": "{cell} is not a date (2026-04-03 or {dayFirst, select, true {day/month/year} other {month/day/year}})",
597
+ "hasTime": "{cell} has a time of day; the field holds a date",
598
+ "severalValues": "{cell} matches more than one value: {values}",
599
+ "notOneOf": "{cell} is not one of {values}",
600
+ "notText": "{cell} is true or false, not text",
601
+ "emptyRequired": "is empty, and it is required",
602
+ "noneHas": "no <lower>{singular}</lower> has {named}",
603
+ "severalHave": "{count} <lower>{plural}</lower> have {named}",
604
+ "notOneRecord": "Not one record: {found}",
605
+ "nothingToUpdate": "Nothing to update: {found}",
606
+ "fileNotUtf8": "The file is not UTF-8 text. Save it as \"CSV UTF-8\" and choose it again.",
607
+ "noSheets": "The workbook has no sheets",
608
+ "missingSheetPart": "The workbook names a sheet it does not hold",
609
+ "notZip": "The file is not an Excel workbook (.xlsx): it is no ZIP archive",
610
+ "zip64": "The workbook is too large to read: it is a ZIP64 archive",
611
+ "compression": "The workbook's part {part} is compressed in a way that cannot be read (method {method})",
612
+ "notWorkbook": "The file is not an Excel workbook (.xlsx): it has no {part}",
613
+ "noSheetCalled": "The workbook has no sheet called {name}",
614
+ "unreadable": "The file could not be read",
615
+ "column": "Column {letters}"
616
+ },
617
+ "app/list": {
618
+ "noList": "There is no list called {name}.",
619
+ "searchPlural": "Search <lower>{plural}</lower>",
620
+ "search": "Search",
621
+ "sort": "Sort",
622
+ "filters": "Filters",
623
+ "filtersCount": "Filters ({count})",
624
+ "newRecord": "New <lower>{singular}</lower>",
625
+ "export": "Export",
626
+ "openRecord": "Open <lower>{singular}</lower>",
627
+ "delete": "Delete",
628
+ "exportCount": "Export {count}",
629
+ "deleteCount": "Delete {count}",
630
+ "actionCount": "{label} ({count})",
631
+ "dragToSort": "Drag a row by its handle to move it. Every move is saved as you drop it.",
632
+ "unreadableFilter": "The filter in the address could not be read",
633
+ "couldNotLoadRows": "Could not load rows",
634
+ "created": "{plural} created",
635
+ "noMatchSearch": "No <lower>{plural}</lower> match “{search}”.",
636
+ "noMatchFilters": "No <lower>{plural}</lower> match these filters.",
637
+ "noMatch": "No <lower>{plural}</lower> match.",
638
+ "noneYet": "No <lower>{plural}</lower> yet.",
639
+ "clearSearch": "Clear search",
640
+ "clearFilters": "Clear filters"
641
+ },
642
+ "app/list-edit": {
643
+ "changedBySomeoneElse": "Changed by someone else",
644
+ "couldNotSave": "Could not save"
645
+ },
646
+ "app/live-update": {
647
+ "holdTitle": "Updating the app",
648
+ "holdLine": "The new version is downloading. The app opens it in a moment."
649
+ },
650
+ "app/map": {
651
+ "mapLayer": "Map layer",
652
+ "map": "Map"
653
+ },
654
+ "app/meta-gate": {
655
+ "loading": "Loading",
656
+ "cannotReach": "Cannot reach the API",
657
+ "noAnswer": "The server did not answer. Is it running?"
658
+ },
659
+ "app/new-version": {
660
+ "title": "This app has been updated",
661
+ "description": "Reload the page to use the new version, when it suits you.",
662
+ "reload": "Reload",
663
+ "reloadPage": "Reload page",
664
+ "reloadPageHint": "Reload page to use the new version",
665
+ "bannerTitle": "{app} updated",
666
+ "bannerLine": "Save your work, then click here to reload. You may see errors until you do."
667
+ },
668
+ "app/pages": {
669
+ "notFound": "Not found",
670
+ "noPage": "There is no page called {page}.",
671
+ "tabs": "Tabs",
672
+ "noTab": "This page has no tab called {name}.",
673
+ "cancel": "Cancel",
674
+ "couldNotDraw": "{name} could not be drawn.",
675
+ "noComponent": "No component is registered as {component}. Export it from protobase.ui.tsx, or load the plugin that provides it.",
676
+ "unknownBlock": "{type} is not a block this version of the app knows.",
677
+ "somethingWrong": "Something went wrong",
678
+ "needsRecord": "Needs a record",
679
+ "cannotChange": "You cannot change this record",
680
+ "cannotDelete": "You cannot delete this record",
681
+ "doesNotApply": "Does not apply to this record",
682
+ "noHandler": "The app has no handler for \"{name}\"",
683
+ "noInputComponent": "The app has no component \"{component}\" for input \"{input}\"",
684
+ "done": "{label}: done",
685
+ "doneOn": "{label}: done on {done}{skipped, plural, =0 {} other {, skipped # it does not apply to}}{failed, plural, =0 {} other {, failed on #}}",
686
+ "failed": "{label} failed",
687
+ "noAction": "No action \"{name}\"",
688
+ "couldNotLoad": "Could not load",
689
+ "nothingYet": "Nothing here yet.",
690
+ "saved": "{label}: saved",
691
+ "create": "Create",
692
+ "save": "Save",
693
+ "notSaved": "Not saved",
694
+ "settings": "Settings",
695
+ "couldNotCount": "Could not count",
696
+ "required": "Required",
697
+ "wholeNumber": "A whole number",
698
+ "number": "A number",
699
+ "dateFormat": "A date as YYYY-MM-DD",
700
+ "atMost": "At most {max} characters"
701
+ },
702
+ "app/rank-after": { "dependsOn": "{record} depends on {other}." },
703
+ "app/record": {
704
+ "details": "Details",
705
+ "history": "History",
706
+ "comments": "Comments",
707
+ "summary": "Summary",
708
+ "loading": "Loading",
709
+ "fetching": "Fetching the record.",
710
+ "noRecord": "This record does not exist, or you cannot see it.",
711
+ "openingElsewhere": "Opening the record in its organization.",
712
+ "couldNotLoad": "Could not load the record",
713
+ "someoneElse": "Someone else",
714
+ "justNow": "just now",
715
+ "saved": "Saved",
716
+ "save": "Save",
717
+ "cancel": "Cancel",
718
+ "unsavedChanges": "Unsaved changes",
719
+ "notSaved": "Not saved",
720
+ "linesChanged": "The lines were changed by someone else",
721
+ "linesReloaded": "The lines were reloaded. Your new order is kept: Save again to apply it.",
722
+ "unsavedKept": "You have unsaved changes to this record.",
723
+ "continueEditing": "Continue editing",
724
+ "discard": "Discard",
725
+ "unsavedRestored": "Your unsaved changes were restored.",
726
+ "keep": "Keep",
727
+ "savingSubject": "Saving {subject}...",
728
+ "subjectSaved": "{subject} saved",
729
+ "changedBySomeoneElse": "Changed by someone else",
730
+ "couldNotSave": "Could not save",
731
+ "recordActions": "Record actions",
732
+ "edit": "Edit",
733
+ "delete": "Delete",
734
+ "nothingYet": "Nothing here yet.",
735
+ "couldNotLoadRelated": "Could not load",
736
+ "relatedRecords": "Related records",
737
+ "lines": "Lines",
738
+ "linesHelp": "What the document bills for. Edit a line in place, add one, or drag the handle to change the order; Save applies it all.",
739
+ "lineNumber": "Line {place}",
740
+ "lineField": "{label}, line {place}",
741
+ "tooManyLines": "This record has more than {limit} lines, so they show here read-only."
742
+ },
743
+ "app/record-chart": {
744
+ "range": "Range",
745
+ "hour": "Hour",
746
+ "day": "Day",
747
+ "week": "Week",
748
+ "measure": "Per bucket",
749
+ "average": "Average",
750
+ "maximum": "Maximum",
751
+ "noSamples": "No samples in this range.",
752
+ "couldNotLoad": "Could not load the chart."
753
+ },
754
+ "app/record-row": {
755
+ "couldNotLoad": "Could not load",
756
+ "noneMatch": "No {plural} match.",
757
+ "viewAll": "View all",
758
+ "new": "New",
759
+ "previous": "Previous {label}",
760
+ "next": "Next {label}",
761
+ "couldNotLoadYour": "Could not load your {plural}",
762
+ "noneYet": "No {plural} yet."
763
+ },
764
+ "app/related-cards": {
765
+ "showMore": "Show more",
766
+ "showLess": "Show less",
767
+ "couldNotLoad": "Could not load",
768
+ "nothingYet": "Nothing here yet."
769
+ },
770
+ "app/related-dots": { "none": "No {plural}" },
771
+ "app/runtime": {
772
+ "immediate": "Updates as soon as a release is out",
773
+ "weekly": "Updates at a set time every week",
774
+ "scheduled": "Updates at the time set for this release",
775
+ "manual": "Updates only when asked to",
776
+ "job": "Preparing the update",
777
+ "build": "Building",
778
+ "updatingNow": "Updating now",
779
+ "started": "{stage}, started {ago}",
780
+ "nextOn": "{policy}: next on {when}",
781
+ "succeeded": "Updated to {version} on {when}",
782
+ "unchanged": "The update to {version} on {when} changed nothing",
783
+ "failed": "The update to {version} failed on {when}",
784
+ "alreadyLatest": "Already on the latest version, or an update is running.",
785
+ "onlyAdmin": "Only an admin can update the runtime.",
786
+ "couldNotStart": "The update could not be started. Try again later.",
787
+ "runtimeUpdate": "Runtime update",
788
+ "close": "Close",
789
+ "updating": "Updating…",
790
+ "updateNow": "Update now",
791
+ "currentVersion": "Current version",
792
+ "latestVersion": "Latest version",
793
+ "checkFailed": "The status could not be checked again; this is the last one read.",
794
+ "updateAvailable": "Update available",
795
+ "update": "Update"
796
+ },
797
+ "app/saved": {
798
+ "favorite": "Favorite",
799
+ "couldNotLoadYour": "Could not load your {plural}",
800
+ "noneYet": "No {plural} yet.",
801
+ "somethingWrong": "Something went wrong",
802
+ "couldNotTakeOff": "Could not take it off",
803
+ "couldNotSave": "Could not save it"
804
+ },
805
+ "app/search": {
806
+ "search": "Search",
807
+ "searchOne": "Search {name}",
808
+ "searchTwo": "Search {first} and {second}",
809
+ "searchMore": "Search {first}, {second} and more",
810
+ "goTo": "Go to",
811
+ "create": "Create"
812
+ },
813
+ "app/searches": {
814
+ "saveSearch": "Save search",
815
+ "saveAsNew": "Save as new {noun}",
816
+ "updateName": "Update {name}",
817
+ "updateNameQuestion": "Update {name}?",
818
+ "updateNounQuestion": "Update this {noun}?",
819
+ "couldNotLoadYour": "Could not load your {plural}",
820
+ "noneYet": "No {plural} yet.",
821
+ "somethingWrong": "Something went wrong",
822
+ "couldNotRename": "Could not rename the search",
823
+ "renameTitle": "Rename {title}",
824
+ "deleteTitle": "Delete {title}",
825
+ "unreadableFilter": "A filter that cannot be read",
826
+ "notFound": "Not found",
827
+ "noResource": "There is no resource called {resource}.",
828
+ "noSavedYet": "No {plural} yet. Filter the {list} and save the search.",
829
+ "on": "On",
830
+ "off": "Off",
831
+ "saved": "{title} saved",
832
+ "couldNotChange": "Could not change the search",
833
+ "asMany": "As many {plural}",
834
+ "more": "{count} more {noun}",
835
+ "fewer": "{count} fewer {noun}",
836
+ "cancel": "Cancel",
837
+ "save": "Save",
838
+ "optional": "Optional",
839
+ "added": "Added",
840
+ "removed": "Removed",
841
+ "changed": "Changed",
842
+ "filterChanges": "Filter changes",
843
+ "firstOf": "The first {limit} of {total}.",
844
+ "noPlural": "No {plural}.",
845
+ "update": "Update",
846
+ "addedRemoved": "{added} added, {removed} removed",
847
+ "searchSaved": "Search saved",
848
+ "openPlural": "Open <lower>{plural}</lower>",
849
+ "couldNotSave": "Could not save the search",
850
+ "couldNotTakeOff": "Could not take the search off",
851
+ "searchUpdated": "Search updated",
852
+ "couldNotUpdate": "Could not update the search",
853
+ "noneMatch": "No {plural} match.",
854
+ "noNew": "No new {plural} since you last looked.",
855
+ "viewAll": "View all results",
856
+ "filters": "Filters"
857
+ },
858
+ "assistant-dock": {
859
+ "askQuestion": "Ask a question...",
860
+ "assistant": "Assistant",
861
+ "reconnecting": "Reconnecting...",
862
+ "empty": "Ask a question about this app or its data.",
863
+ "noAnswer": "The assistant did not answer",
864
+ "backendNoAnswer": "The assistant backend did not answer",
865
+ "couldNotDraw": "It could not be drawn.",
866
+ "cannotShowLive": "This version of the app cannot show it live."
867
+ },
868
+ auth: {
869
+ "loading": "Loading",
870
+ "cannotReach": "Cannot reach the server: {message}",
871
+ "tryAgain": "Try again",
872
+ "passwordChanged": "Your password is changed. Sign in with the new one.",
873
+ "noAnswer": "The server did not answer",
874
+ "code": "Code",
875
+ "backupCode": "Backup code",
876
+ "email": "Email",
877
+ "password": "Password",
878
+ "passwordOptional": "Password (optional)",
879
+ "signIn": "Sign in",
880
+ "signOut": "Sign out",
881
+ "continue": "Continue",
882
+ "backToSignIn": "Back to sign in",
883
+ "useAnotherAddress": "Use another address",
884
+ "checkEmail": "Check your email",
885
+ "newCodeSent": "A new code is on its way. Only the newest one works.",
886
+ "sendNewCode": "Send a new code",
887
+ "sendNewCodeIn": "Send a new code in {seconds}s",
888
+ "signInCodeDescription": "Enter the code we sent to sign in.",
889
+ "signInCodeSent": "If {email} has an account, a 6-digit code is on its way. It works for 5 minutes, once.",
890
+ "signUpCodeDescription": "Enter the code we sent to create your account.",
891
+ "signUpCodeSent": "A 6-digit code is on its way to {email}. It works for 5 minutes, once. If the address has an account already, the email says so instead.",
892
+ "noAdminTitle": "No admin yet",
893
+ "noAdminDescription": "This Protobase has no users to sign in with.",
894
+ "noAdminExplanation": "Run this in the terminal where Protobase runs, then reload. The first admin is created on the server, not in the browser, so nobody else can claim a fresh URL.",
895
+ "copyCommand": "Copy command",
896
+ "firstAdminExplanation": "The first user is added in the Protobase Cloud console, not in the browser, so nobody else can claim a fresh URL. Add yourself there, then reload.",
897
+ "firstAdminLink": "Add your first user in the Protobase Cloud console",
898
+ "reload": "Reload",
899
+ "tooManyRequests": "Too many requests. Wait a minute and try again.",
900
+ "tooManyAttempts": "Too many attempts. Wait a minute and try again.",
901
+ "resetTitle": "Reset your password",
902
+ "resetDescription": "We email you a link to choose a new one.",
903
+ "sendResetLink": "Send reset link",
904
+ "resetSent": "If {email} has an account, an email with a link to choose a new password is on its way. The link works once, for a limited time.",
905
+ "linkExpiredTitle": "This link no longer works",
906
+ "linkExpiredExplanation": "A reset link works once, for a limited time. Ask for a new one to choose your password.",
907
+ "sendNewLink": "Send a new link",
908
+ "passwordsDiffer": "The passwords are not the same.",
909
+ "choosePassword": "Choose a new password",
910
+ "atLeast": "At least {length} characters.",
911
+ "useAtLeast": "Use at least {length} characters.",
912
+ "passwordTooLong": "That password is too long.",
913
+ "newPassword": "New password",
914
+ "repeatPassword": "Repeat new password",
915
+ "setPassword": "Set new password",
916
+ "signingInWith": "Signing in with {name}",
917
+ "takingYouTo": "Taking you to {name}…",
918
+ "providerNotOffered": "Signing in with {name} is not offered here. Sign in another way.",
919
+ "turnOnTwoFactor": "Turn on two-factor authentication",
920
+ "addPasskey": "Add a passkey",
921
+ "requiredForEveryAccount": "This app requires it for every account.",
922
+ "passkeyExplanation": "A passkey signs you in with Face ID, Touch ID, Windows Hello, your phone or a security key. Your browser asks which one to use.",
923
+ "couldNotReadAccount": "Could not read your account",
924
+ "signInTitle": "Sign in to Protobase",
925
+ "continueWith": "Continue with {name}",
926
+ "signInWithPasskey": "Sign in with a passkey",
927
+ "passkeyFor": "Use a passkey made for {domain}",
928
+ "or": "or",
929
+ "emailSignInCode": "Email me a sign-in code",
930
+ "usePassword": "Use a password",
931
+ "forgotPassword": "Forgot password?",
932
+ "newHere": "New here?",
933
+ "haveAccount": "Have an account?",
934
+ "createAnAccount": "Create an account",
935
+ "browse": "Continue without signing in",
936
+ "notNow": "Not now",
937
+ "detailsTitle": "Your details",
938
+ "detailsDescription": "One last step to create your account.",
939
+ "yourName": "Your name",
940
+ "codeWasRight": "The code was right: the account is for {email}.",
941
+ "withoutPassword": " Without one, you sign in with a code we email you.",
942
+ "createAccount": "Create account",
943
+ "codeToConfirm": "We email you a code to make sure the address is yours.",
944
+ "emailCode": "Email me a code",
945
+ "browseWithoutAccount": "Continue without an account",
946
+ "staffTitle": "Staff sign-in",
947
+ "staffUnavailable": "Staff of the team that runs this app cannot sign in as people here.",
948
+ "signInAsPerson": "Sign in as a person",
949
+ "forStaffOf": "For staff of {operator}, to help someone with this app.",
950
+ "theirEmail": "Their email",
951
+ "reason": "Reason",
952
+ "reasonExample": "Ticket 4211: the invoice totals look wrong",
953
+ "staffExplanation": "You sign in at {operator} with a passkey or a second step. The session is short, shows a banner, and cannot change their sign-in. The app's admins see who signed in as whom, and why.",
954
+ "totpInstruction": "Enter the 6-digit code from your authenticator app.",
955
+ "otpInstruction": "Enter the 6-digit code we emailed you. It works for 5 minutes.",
956
+ "backupInstruction": "Enter one of the backup codes you saved when you set up the authenticator app. Each works once.",
957
+ "twoFactorTitle": "Two-factor authentication",
958
+ "twoFactorDescription": "One more step to sign in.",
959
+ "codeToFinish": "We email you a code to finish signing in.",
960
+ "trustBrowser": "Trust this browser",
961
+ "trustBrowserFor": "Don't ask again in this browser for 30 days",
962
+ "verify": "Verify",
963
+ "useAuthenticator": "Use the authenticator app",
964
+ "emailCodeInstead": "Email me a code instead",
965
+ "useBackupCode": "Use a backup code",
966
+ "admin": "Admin"
967
+ },
968
+ "auth/errors": {
969
+ "tooManyRequests": "Too many attempts. Wait a minute and try again.",
970
+ "passkeyClosed": "The passkey prompt closed before it finished. Try again.",
971
+ "wrongEmailOrPassword": "The email or password is not right.",
972
+ "wrongPassword": "The password is not right.",
973
+ "wrongCode": "The code is not right.",
974
+ "wrongOrExpiredCode": "The code is not right, or has expired. Ask for a new one.",
975
+ "codeExpired": "The code has expired. Ask for a new one.",
976
+ "tooManyCodes": "Too many wrong codes. Ask for a new one.",
977
+ "wrongBackupCode": "The backup code is not right, or was used before.",
978
+ "tooManyCodesSignIn": "Too many wrong codes. Sign in again.",
979
+ "locked": "Too many wrong codes. Wait 15 minutes and try again.",
980
+ "tooSlow": "This sign-in took too long. Sign in again.",
981
+ "passkeyNotFound": "This passkey is not registered for an account here.",
982
+ "passkeyFailed": "The passkey could not be checked. Try again.",
983
+ "passkeyAdded": "This passkey is added already.",
984
+ "notFresh": "For this change, sign out and sign in again first.",
985
+ "staffPermissionMissing": "Your staff account has no permission to sign in as people here.",
986
+ "staffNotStrong": "Sign in to your staff account with a passkey or a second step, then try again.",
987
+ "staffStale": "Your staff sign-in is too old. Sign in to your staff account again.",
988
+ "staffExpired": "This staff sign-in took too long or was used already. Start again.",
989
+ "staffProviderFailed": "The staff sign-in did not go through at the provider. Try again.",
990
+ "staffUserUnavailable": "There is no account with this address, or it is disabled.",
991
+ "staffReasonRequired": "Say why you sign in as this person, in at least 10 characters.",
992
+ "staffForbidden": "Staff sign-in is turned off for this app.",
993
+ "untrustedCallback": "This page is not on an address the server trusts.",
994
+ "staffFailed": "The staff sign-in did not go through. Try again.",
995
+ "passwordLeaked": "This password appears in a known data breach. Choose a different one.",
996
+ "signupDisabled": "No account here belongs to this {name} account. Ask an admin to add you, or sign in another way.",
997
+ "notLinked": "Your {name} account is not linked to your account here. Sign in another way, then connect {name} on your account page.",
998
+ "linkedToOther": "This {name} account is linked to someone else here already.",
999
+ "couldNotLink": "Your {name} account could not be linked. Try again.",
1000
+ "accessDenied": "{name} did not let you in, or you cancelled.",
1001
+ "domainNotAllowed": "{name} signed you in with an address this app does not accept from it. Sign in another way.",
1002
+ "providerFailed": "Signing in with {name} did not go through. Try again."
1003
+ },
1004
+ calls: {
1005
+ "accept": "Accept",
1006
+ "decline": "Decline",
1007
+ "startCall": "Start call",
1008
+ "join": "Join",
1009
+ "inProgress": "Call in progress",
1010
+ "people": "{count, plural, one {# person} other {# people}}",
1011
+ "joinCall": "Join call",
1012
+ "leave": "Leave",
1013
+ "microphone": "Microphone",
1014
+ "camera": "Camera",
1015
+ "shareScreen": "Share screen",
1016
+ "stopSharing": "Stop sharing",
1017
+ "muted": "Muted",
1018
+ "you": "You",
1019
+ "alone": "You are the only one here",
1020
+ "connecting": "Joining…",
1021
+ "reconnecting": "Reconnecting…",
1022
+ "full": "This call is full",
1023
+ "removed": "You were removed from this call",
1024
+ "ended": "The call ended",
1025
+ "refused": "You cannot join this call",
1026
+ "unavailable": "The call cannot be reached now. Try again in a moment.",
1027
+ "callAgain": "Join again",
1028
+ "noMicrophone": "Your microphone is blocked: allow it in the browser to be heard.",
1029
+ "noCamera": "Your camera is blocked: allow it in the browser to be seen.",
1030
+ "noDevices": "No camera or microphone was found.",
1031
+ "cannotConnect": "Cannot connect to {name}",
1032
+ "poorConnection": "Poor connection",
1033
+ "goodConnection": "Good connection",
1034
+ "sharing": "{name} is sharing their screen",
1035
+ "youAreSharing": "You are sharing your screen",
1036
+ "speaking": "Speaking",
1037
+ "preview": "Your camera before you join",
1038
+ "guestName": "{name} (guest)",
1039
+ "denied": "Nobody in the call let you in",
1040
+ "waiting": "Waiting for someone in the call to let you in…",
1041
+ "askToJoin": "Ask to join",
1042
+ "someone": "Someone in the call",
1043
+ "guests": "Guests",
1044
+ "waitingGuest": "{name} is waiting to join",
1045
+ "admit": "Let in",
1046
+ "deny": "Turn away",
1047
+ "remove": "Remove",
1048
+ "revoke": "Revoke",
1049
+ "newLink": "Create guest link",
1050
+ "copyLink": "Copy link",
1051
+ "copied": "Copied",
1052
+ "guestLinks": "Guest links",
1053
+ "noLinks": "No guest link yet. Anyone with a link waits here until someone in the call lets them in.",
1054
+ "inLobby": "Waiting to join",
1055
+ "guestsInCall": "Guests in the call",
1056
+ "guestsMaySend": "Guests may send",
1057
+ "sendAll": "Everything",
1058
+ "sendCamera": "Camera and mic",
1059
+ "sendMicrophone": "Mic only",
1060
+ "linkUntil": "Until {until}",
1061
+ "linkUntilEnd": "Until the call ends",
1062
+ "linkLasts": "The link works",
1063
+ "forAnHour": "For an hour",
1064
+ "addressesVisible": "In a call between browsers, a guest and the people in the call can see each other’s network addresses.",
1065
+ "guestRefused": "This could not be done: the guest or link is gone, the call is full, or guest links are off.",
1066
+ "close": "Close",
1067
+ "yourName": "Your name",
1068
+ "guestIntro": "You are invited to a call. Give your name, check your microphone and camera, and someone in the call lets you in.",
1069
+ "continue": "Continue",
1070
+ "youLeft": "You left the call"
1071
+ },
1072
+ carousel: {
1073
+ "photoOf": "Photo {index} of {count}",
1074
+ "previousPhoto": "Previous photo",
1075
+ "nextPhoto": "Next photo"
1076
+ },
1077
+ chat: {
1078
+ "message": "Message",
1079
+ "send": "Send",
1080
+ "today": "Today",
1081
+ "yesterday": "Yesterday",
1082
+ "newMessages": "New messages",
1083
+ "loadEarlier": "Load earlier messages"
1084
+ },
1085
+ "compact-table": {
1086
+ "table": "Table",
1087
+ "noRows": "No rows.",
1088
+ "rows": "{count, plural, one {# row} other {# rows}}",
1089
+ "cutOff": ", cut off at the limit"
1090
+ },
1091
+ "data-grid": {
1092
+ "unsortable": "This column can't be sorted",
1093
+ "columnMenu": "{header} column menu",
1094
+ "unpin": "Unpin",
1095
+ "pinToLeft": "Pin to left",
1096
+ "resizeColumn": "Resize {header} column",
1097
+ "selected": "{count} selected",
1098
+ "no": "No",
1099
+ "shownIn": "Shown in {zone}",
1100
+ "new": "New",
1101
+ "clearSelection": "Clear selection",
1102
+ "noRowsSelected": "No rows selected",
1103
+ "selectRow": "Select row {row}",
1104
+ "rowActions": "Row actions",
1105
+ "row": "row",
1106
+ "move": "Move {label}",
1107
+ "reorderInstructions": "To move a row, press Space on its handle, move it with the up and down arrow keys, and press Space again to drop it there. Escape puts it back.",
1108
+ "pickedUp": "Picked up {name}, row {row} of {rows}.",
1109
+ "isOver": "{name} is over row {row} of {rows}.",
1110
+ "droppedAt": "{name} was dropped at row {row} of {rows}.",
1111
+ "putBack": "{name} was put back.",
1112
+ "cancelled": "Moving {name} was cancelled. It is back at row {row}."
1113
+ },
1114
+ "filter-panel": {
1115
+ "today": "Today",
1116
+ "yesterday": "Yesterday",
1117
+ "24h": "Last 24 hours",
1118
+ "7d": "Last 7 days",
1119
+ "30d": "Last 30 days",
1120
+ "90d": "Last 90 days",
1121
+ "month": "This month",
1122
+ "quarter": "This quarter",
1123
+ "year": "This year",
1124
+ "unknownPreset": "The server offers the preset \"{id}\", which this UI does not know",
1125
+ "unsupported": "{id} (unsupported)",
1126
+ "remove": "Remove {label}",
1127
+ "clearAll": "Clear all",
1128
+ "searchIn": "Search <lower>{label}</lower>",
1129
+ "noMatches": "No matches",
1130
+ "moreFilters": "More filters",
1131
+ "filters": "Filters",
1132
+ "date": "Date",
1133
+ "showOnly": "Show only",
1134
+ "minimum": "{label} minimum",
1135
+ "maximum": "{label} maximum"
1136
+ },
1137
+ format: {
1138
+ "rows": "{count} {n, plural, one {row} other {rows}}",
1139
+ "aboutRows": "about {count} rows",
1140
+ "secondsAgo": "{count} s ago",
1141
+ "minutesAgo": "{count} min ago",
1142
+ "hoursAgo": "{count} h ago",
1143
+ "daysAgo": "{count} d ago",
1144
+ "justNow": "just now"
1145
+ },
1146
+ forms: {
1147
+ "loading": "Loading",
1148
+ "notFound": "Not found",
1149
+ "noForm": "There is no form at this address.",
1150
+ "setByDatabase": "Set by the database",
1151
+ "notSent": "Not sent",
1152
+ "send": "Send",
1153
+ "checkTooLong": "The check that you are not a bot took too long; send the form again"
1154
+ },
1155
+ "inline-child-table": {
1156
+ "instructions": "To pick up a line, press space or enter on its drag handle. Use the up and down arrow keys to move it, space or enter to drop it, and escape to cancel. The row menu also has Move up and Move down.",
1157
+ "line": "line",
1158
+ "pickedUp": "Picked up {name}, line {place} of {count}.",
1159
+ "over": "{name} is over line {place} of {count}.",
1160
+ "dropped": "{name} was dropped at line {place} of {count}.",
1161
+ "droppedAtStart": "{name} was dropped where it started.",
1162
+ "cancelled": "Moving {name} was cancelled. It is back at line {place}.",
1163
+ "addLine": "Add line",
1164
+ "noLines": "No lines yet.",
1165
+ "moveUp": "Move up",
1166
+ "moveDown": "Move down",
1167
+ "removeLine": "Remove line",
1168
+ "dragToReorder": "Drag to reorder {name}",
1169
+ "actionsFor": "Actions for {name}"
1170
+ },
1171
+ invitations: {
1172
+ "email": "Email",
1173
+ "invite": "Invite",
1174
+ "expired": "Expired",
1175
+ "until": "Until {date}",
1176
+ "sendAgain": "Send again",
1177
+ "revoke": "Revoke",
1178
+ "passLinkOn": "This app cannot send email, so pass this link on yourself. It works once, until the invitation expires: {link}"
1179
+ },
1180
+ lists: { "showMore": "Show more" },
1181
+ live: {
1182
+ "yes": "Yes",
1183
+ "no": "No",
1184
+ "shownIn": "Shown in {zone}",
1185
+ "fileMissing": "File missing"
1186
+ },
1187
+ markdown: {
1188
+ "write": "Write",
1189
+ "preview": "Preview",
1190
+ "nothingToPreview": "Nothing to preview"
1191
+ },
1192
+ mentions: {
1193
+ "peopleToMention": "People to mention",
1194
+ "noOneFound": "No one found",
1195
+ "couldNotSearch": "Could not search for people"
1196
+ },
1197
+ "notifications/bell": {
1198
+ "notifications": "Notifications",
1199
+ "notificationsUnread": "Notifications, {count} unread",
1200
+ "notificationsManyUnread": "Notifications, more than 99 unread",
1201
+ "markAllRead": "Mark all as read",
1202
+ "empty": "No notifications yet",
1203
+ "showMore": "Show more",
1204
+ "loadFailed": "Your notifications could not be loaded.",
1205
+ "tryAgain": "Try again",
1206
+ "unread": "Unread",
1207
+ "pushOff": "Get notifications on this device, even when the app is closed.",
1208
+ "turnOn": "Turn on",
1209
+ "pushOn": "Notifications are on for this device.",
1210
+ "turnOff": "Turn off",
1211
+ "pushBlocked": "Notifications are blocked on this device. To get them, allow notifications for this site in your browser or device settings."
1212
+ },
1213
+ organizations: {
1214
+ "organizations": "Organizations",
1215
+ "manageOrganizations": "Manage organizations",
1216
+ "organization": "Organization",
1217
+ "members": "Members",
1218
+ "invitations": "Invitations",
1219
+ "owner": "Owner",
1220
+ "admin": "Admin",
1221
+ "member": "Member",
1222
+ "loading": "Loading",
1223
+ "name": "Name",
1224
+ "slug": "Slug",
1225
+ "save": "Save",
1226
+ "cancel": "Cancel",
1227
+ "delete": "Delete",
1228
+ "remove": "Remove",
1229
+ "create": "Create",
1230
+ "current": "Current",
1231
+ "open": "Open",
1232
+ "allOrganizations": "All organizations",
1233
+ "allOrganizationsDescription": "Every organization in the app. Your global roles let you work in any of them, with what those roles allow there. Opening one you are not a member of is written to the audit log.",
1234
+ "findOrganization": "Find an organization",
1235
+ "nameOrSlug": "Name or slug",
1236
+ "cannotChangeRole": "You cannot give or take away this role",
1237
+ "makeAccountToJoin": "Make your account for {email} to join.",
1238
+ "makeAccount": "Make your account for {email}.",
1239
+ "yourName": "Your name",
1240
+ "password": "Password",
1241
+ "passwordOptional": "Password (optional, {length}+ characters)",
1242
+ "passwordRequired": "Password ({length}+ characters)",
1243
+ "createAndJoin": "Create account and join",
1244
+ "createYourAccount": "Create your account",
1245
+ "invalidLink": "This invitation link is not valid",
1246
+ "invitation": "Invitation",
1247
+ "goToApp": "Go to the app",
1248
+ "invitesToApp": "{inviter} invites you to join {app}.",
1249
+ "invitesTo": "{inviter} invites you to {organization} as {role}.",
1250
+ "invitesToWith": "{inviter} invites you to {organization} as {role}, with {roles}.",
1251
+ "join": "Join {name}",
1252
+ "hasAccount": "{email} has an account already: sign in with it.",
1253
+ "signOut": "Sign out",
1254
+ "signInAs": "Sign in as {email}",
1255
+ "signInAsToJoin": "Sign in as {email} to join",
1256
+ "otherAddress": "This invitation is for {invited}, and you are signed in as {signedIn}.",
1257
+ "signOutToAccept": "Sign out to accept it",
1258
+ "inviteSomeone": "Invite someone",
1259
+ "inviteDescription": "They get an email with a link to join, or to make an account first. You can give the app roles you hold, and those your roles grant.",
1260
+ "organizationRole": "Organization role",
1261
+ "peopleInvited": "People invited to {organization}.",
1262
+ "notAcceptedYet": "Not accepted yet",
1263
+ "sendingAgain": "Sending again gives a new link, which replaces the earlier one.",
1264
+ "nobodyWaiting": "Nobody is waiting.",
1265
+ "roleOf": "Organization role of {name}",
1266
+ "couldNotReadMembers": "Could not read the members",
1267
+ "whoWorks": "Who works in {organization}, and with which roles.",
1268
+ "membersDescription": "Owners and admins manage the organization; app roles decide what each member sees and does in the app.",
1269
+ "details": "Details",
1270
+ "detailsEditable": "The name people see, and the slug that names it in links.",
1271
+ "detailsReadOnly": "Owners and admins can change these.",
1272
+ "guestLinks": "Guest links to calls",
1273
+ "guestLinksDescription": "Someone in a call can share a link that lets a person from outside wait in its lobby and join that one call once let in. Turning guest links off revokes every link and takes every guest out at once. Owners and admins can change this.",
1274
+ "guestLinksAllowed": "Allow guest links",
1275
+ "handOver": "Hand over",
1276
+ "handOverDescription": "Make another member the owner. You stay as an admin.",
1277
+ "newOwner": "New owner",
1278
+ "chooseMember": "Choose a member",
1279
+ "deleteOrganization": "Delete organization",
1280
+ "deleteDescription": "Takes the organization and its members and invitations away. Its records must be deleted first.",
1281
+ "deleteTitle": "Delete {name}?",
1282
+ "deleteConfirm": "Type its name to confirm. This cannot be undone.",
1283
+ "organizationName": "Organization name",
1284
+ "leave": "Leave",
1285
+ "leaveOwner": "An organization keeps an owner: hand it over before you leave, unless it has another owner.",
1286
+ "leaveMember": "You stop being a member, and lose your roles here.",
1287
+ "leaveName": "Leave {name}",
1288
+ "noOrganization": "You do not work in an organization now. Choose one under Organizations.",
1289
+ "youAre": "You are {role} here.",
1290
+ "throughGlobalRoles": "You work here through your global roles, without being a member.",
1291
+ "newOrganization": "New organization",
1292
+ "newOrganizationDescription": "You become its owner, with every role, and work in it once it is made.",
1293
+ "invitationsForYou": "Invitations for you",
1294
+ "invitationsForYouDescription": "Accept one to become a member and work there.",
1295
+ "accept": "Accept",
1296
+ "anOrganization": "An organization",
1297
+ "noAppRoles": "no app roles",
1298
+ "until": "Until {date}",
1299
+ "organizationsSubtitle": "You work in one organization at a time; what you see follows from your roles there.",
1300
+ "yourOrganizations": "Your organizations",
1301
+ "memberOf": "The organizations you are a member of.",
1302
+ "notMember": "You are not a member of an organization yet.",
1303
+ "couldNotReadOrganizations": "Could not read your organizations"
1304
+ },
1305
+ plugins: {
1306
+ "loading": "Loading",
1307
+ "pluginsOff": "Plugins off",
1308
+ "pluginOff": "The plugin {plugin} is off: {reason}.",
1309
+ "dismiss": "Dismiss",
1310
+ "answered": "its plugin.json answered {status}",
1311
+ "couldNotLoad": "it could not be loaded: {reason}",
1312
+ "notObject": "its plugin.json is not an object",
1313
+ "noName": "its plugin.json names no plugin",
1314
+ "noApi": "its plugin.json names no plugin API",
1315
+ "noVersions": "its plugin.json names no Protobase versions",
1316
+ "noModule": "its plugin.json names no module",
1317
+ "badStylesheet": "its plugin.json names a stylesheet that is no URL",
1318
+ "badVersion": "its plugin.json has a version that is no text"
1319
+ },
1320
+ primitives: {
1321
+ "close": "Close",
1322
+ "loading": "Loading",
1323
+ "remove": "Remove {label}"
1324
+ },
1325
+ "record-view": {
1326
+ "savedDifferent": "{name} saved a different value",
1327
+ "example": "Example:",
1328
+ "savedThis": "saved this {ago}:",
1329
+ "keepMine": "Keep mine",
1330
+ "useTheirs": "Use theirs",
1331
+ "actions": "Actions",
1332
+ "saving": "Saving...",
1333
+ "savedAgo": "Saved {ago}",
1334
+ "notSavedRetrying": "Not saved, retrying",
1335
+ "lastEditedBy": "Last edited by",
1336
+ "lastUpdated": "Last updated {ago}",
1337
+ "viewing": "{count} viewing",
1338
+ "tabs": "Tabs"
1339
+ },
1340
+ roles: {
1341
+ "couldNotReadRoles": "Could not read your roles",
1342
+ "couldNotSwitch": "Could not switch the role"
1343
+ },
1344
+ "side-panel": { "close": "Close" },
1345
+ status: {
1346
+ "setStatus": "Set a status",
1347
+ "editStatus": "Edit status",
1348
+ "availability": "Availability",
1349
+ "automatic": "Automatic",
1350
+ "busy": "Busy",
1351
+ "doNotDisturb": "Do not disturb",
1352
+ "doNotDisturbHint": "You get no push notifications; they wait in the bell.",
1353
+ "statusText": "Status",
1354
+ "statusPlaceholder": "Having lunch",
1355
+ "clearsAfter": "Clear after",
1356
+ "never": "Never",
1357
+ "thirtyMinutes": "30 minutes",
1358
+ "oneHour": "1 hour",
1359
+ "fourHours": "4 hours",
1360
+ "today": "Today",
1361
+ "thisWeek": "This week",
1362
+ "custom": "Choose a date and time",
1363
+ "clearsAt": "Clears at",
1364
+ "pickTime": "Choose a date and time still to come",
1365
+ "save": "Save",
1366
+ "cancel": "Cancel",
1367
+ "clear": "Clear status",
1368
+ "couldNotSave": "Could not save your status",
1369
+ "until": "Until {time}",
1370
+ "online": "Online",
1371
+ "away": "Away"
1372
+ },
1373
+ toasts: { "dismiss": "Dismiss" },
1374
+ users: {
1375
+ "inviteSomeone": "Invite someone",
1376
+ "inviteDescription": "They get an email with a link to make their account, with the roles you tick.",
1377
+ "notAcceptedYet": "Not accepted yet",
1378
+ "sendingAgain": "Sending again gives a new link, which replaces the earlier one.",
1379
+ "nobodyWaiting": "Nobody is waiting.",
1380
+ "addAnAccount": "Add an account",
1381
+ "addDescription": "Makes the account at once, with the address counted as verified. Without a password, the person signs in another way this app allows, such as an emailed code.",
1382
+ "email": "Email",
1383
+ "name": "Name",
1384
+ "password": "Password",
1385
+ "passwordOptional": "Password (optional, {length}+ characters)",
1386
+ "addAccount": "Add account",
1387
+ "couldNotReadRoles": "Could not read the roles",
1388
+ "people": "People",
1389
+ "peopleDescription": "Everyone with an account. Roles decide what each sees and does; someone blocked cannot sign in, and is signed out at once.",
1390
+ "findSomeone": "Find someone",
1391
+ "emailAddress": "Email address",
1392
+ "keepOneRole": "Keep at least one role.",
1393
+ "blocked": "Blocked",
1394
+ "unblock": "Unblock",
1395
+ "block": "Block"
1396
+ }
1397
+ };
1398
+ //#endregion
1399
+ export { en_default as default };