@eifi1/ui-kit 0.41.0 → 0.43.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 (190) hide show
  1. package/README.md +26 -7
  2. package/dist/admin/admin-area-labels.d.ts +59 -0
  3. package/dist/admin/admin-area-labels.js +35 -0
  4. package/dist/admin/admin-area-labels.js.map +1 -0
  5. package/dist/admin/admin-forbidden.d.ts +35 -0
  6. package/dist/admin/admin-forbidden.js +36 -0
  7. package/dist/admin/admin-forbidden.js.map +1 -0
  8. package/dist/admin/admin-overview.d.ts +110 -0
  9. package/dist/admin/admin-overview.js +92 -0
  10. package/dist/admin/admin-overview.js.map +1 -0
  11. package/dist/admin/admin-sections.d.ts +94 -0
  12. package/dist/admin/admin-sections.js +81 -0
  13. package/dist/admin/admin-sections.js.map +1 -0
  14. package/dist/admin/admin-tool-links.d.ts +48 -0
  15. package/dist/admin/admin-tool-links.js +31 -0
  16. package/dist/admin/admin-tool-links.js.map +1 -0
  17. package/dist/billing/billing-banner.d.ts +33 -2
  18. package/dist/billing/billing-banner.js +29 -3
  19. package/dist/billing/billing-banner.js.map +1 -1
  20. package/dist/billing/billing-labels.d.ts +36 -0
  21. package/dist/billing/billing-labels.js +10 -0
  22. package/dist/billing/billing-labels.js.map +1 -1
  23. package/dist/billing/billing-overview.d.ts +33 -0
  24. package/dist/billing/billing-overview.js +6 -0
  25. package/dist/billing/billing-overview.js.map +1 -1
  26. package/dist/billing/billing-standing.d.ts +8 -0
  27. package/dist/billing/billing-standing.js.map +1 -1
  28. package/dist/billing/cancel-request.d.ts +53 -0
  29. package/dist/billing/cancel-request.js +21 -0
  30. package/dist/billing/cancel-request.js.map +1 -0
  31. package/dist/billing/cancel-subscription.d.ts +46 -0
  32. package/dist/billing/cancel-subscription.js +57 -0
  33. package/dist/billing/cancel-subscription.js.map +1 -0
  34. package/dist/billing/plan-card.d.ts +45 -1
  35. package/dist/billing/plan-card.js +53 -2
  36. package/dist/billing/plan-card.js.map +1 -1
  37. package/dist/billing/plan-switch.d.ts +10 -1
  38. package/dist/billing/plan-switch.js +22 -13
  39. package/dist/billing/plan-switch.js.map +1 -1
  40. package/dist/billing/provider-page.d.ts +40 -0
  41. package/dist/billing/provider-page.js +33 -0
  42. package/dist/billing/provider-page.js.map +1 -0
  43. package/dist/billing/subscription-actions.d.ts +68 -4
  44. package/dist/billing/subscription-actions.js +65 -5
  45. package/dist/billing/subscription-actions.js.map +1 -1
  46. package/dist/components/account-chips.d.ts +50 -2
  47. package/dist/components/account-chips.js +33 -0
  48. package/dist/components/account-chips.js.map +1 -1
  49. package/dist/components/empty-state.d.ts +2 -1
  50. package/dist/components/empty-state.js.map +1 -1
  51. package/dist/eslint/index.js +1 -1
  52. package/dist/feedback/feedback-menu.d.ts +7 -4
  53. package/dist/feedback/feedback-menu.js +4 -2
  54. package/dist/feedback/feedback-menu.js.map +1 -1
  55. package/dist/hooks/use-search-param-state.js +4 -1
  56. package/dist/hooks/use-search-param-state.js.map +1 -1
  57. package/dist/i18n/defaults.js +7 -1
  58. package/dist/i18n/defaults.js.map +1 -1
  59. package/dist/i18n/german.js +113 -0
  60. package/dist/i18n/german.js.map +1 -1
  61. package/dist/i18n/kit-labels.d.ts +12 -0
  62. package/dist/i18n/kit-labels.js.map +1 -1
  63. package/dist/i18n/locales/en.js +142 -1
  64. package/dist/i18n/locales/en.js.map +3 -3
  65. package/dist/i18n/locales/es.js +110 -0
  66. package/dist/i18n/locales/es.js.map +1 -1
  67. package/dist/i18n/locales/fr.js +109 -0
  68. package/dist/i18n/locales/fr.js.map +1 -1
  69. package/dist/i18n/locales/hu.js +110 -0
  70. package/dist/i18n/locales/hu.js.map +1 -1
  71. package/dist/i18n/locales/it.js +110 -0
  72. package/dist/i18n/locales/it.js.map +1 -1
  73. package/dist/i18n/locales/zh.js +109 -0
  74. package/dist/i18n/locales/zh.js.map +1 -1
  75. package/dist/i18n/review.js +34 -1
  76. package/dist/i18n/review.js.map +1 -1
  77. package/dist/index.d.ts +24 -2
  78. package/dist/index.js +29 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/search/global-search.d.ts +3 -0
  81. package/dist/search/global-search.js +3 -1
  82. package/dist/search/global-search.js.map +1 -1
  83. package/dist/settings/settings-catalogue.d.ts +9 -1
  84. package/dist/settings/settings-catalogue.js +1 -1
  85. package/dist/settings/settings-catalogue.js.map +1 -1
  86. package/dist/settings/settings-layout.d.ts +7 -1
  87. package/dist/settings/settings-layout.js +35 -27
  88. package/dist/settings/settings-layout.js.map +1 -1
  89. package/dist/shell/account-menu-language.d.ts +46 -0
  90. package/dist/shell/account-menu-language.js +64 -0
  91. package/dist/shell/account-menu-language.js.map +1 -0
  92. package/dist/shell/admin-menu.d.ts +69 -0
  93. package/dist/shell/admin-menu.js +64 -0
  94. package/dist/shell/admin-menu.js.map +1 -0
  95. package/dist/shell/app-shell.d.ts +10 -0
  96. package/dist/shell/app-shell.js +22 -4
  97. package/dist/shell/app-shell.js.map +1 -1
  98. package/dist/shell/dev-switchers.d.ts +53 -0
  99. package/dist/shell/dev-switchers.js +107 -0
  100. package/dist/shell/dev-switchers.js.map +1 -0
  101. package/dist/shell/sync-status-indicator.d.ts +86 -0
  102. package/dist/shell/sync-status-indicator.js +170 -0
  103. package/dist/shell/sync-status-indicator.js.map +1 -0
  104. package/dist/shell/top-bar-actions.d.ts +49 -0
  105. package/dist/shell/top-bar-actions.js +31 -0
  106. package/dist/shell/top-bar-actions.js.map +1 -0
  107. package/dist/shell/top-bar-parts-labels.d.ts +90 -0
  108. package/dist/shell/top-bar-parts-labels.js +51 -0
  109. package/dist/shell/top-bar-parts-labels.js.map +1 -0
  110. package/dist/shell/topbar-action-menu.d.ts +13 -1
  111. package/dist/shell/topbar-action-menu.js +5 -2
  112. package/dist/shell/topbar-action-menu.js.map +1 -1
  113. package/dist/shell/topbar-controls.d.ts +16 -3
  114. package/dist/shell/topbar-controls.js +5 -1
  115. package/dist/shell/topbar-controls.js.map +1 -1
  116. package/dist/shell/tour-menu.d.ts +67 -0
  117. package/dist/shell/tour-menu.js +87 -0
  118. package/dist/shell/tour-menu.js.map +1 -0
  119. package/dist/shell.d.ts +16 -0
  120. package/dist/shell.js +21 -0
  121. package/dist/shell.js.map +1 -1
  122. package/dist/tour/tour-catalogue-labels.d.ts +44 -0
  123. package/dist/tour/tour-catalogue-labels.js +32 -0
  124. package/dist/tour/tour-catalogue-labels.js.map +1 -0
  125. package/dist/tour/tour-catalogue.d.ts +68 -0
  126. package/dist/tour/tour-catalogue.js +189 -0
  127. package/dist/tour/tour-catalogue.js.map +1 -0
  128. package/dist/tour/tour-info.d.ts +112 -0
  129. package/dist/tour/tour-info.js +36 -0
  130. package/dist/tour/tour-info.js.map +1 -0
  131. package/dist/tour/use-tour-progress.d.ts +61 -0
  132. package/dist/tour/use-tour-progress.js +116 -0
  133. package/dist/tour/use-tour-progress.js.map +1 -0
  134. package/dist/tour/use-tour-url-sync.d.ts +58 -0
  135. package/dist/tour/use-tour-url-sync.js +110 -0
  136. package/dist/tour/use-tour-url-sync.js.map +1 -0
  137. package/dist/tour.d.ts +8 -0
  138. package/dist/tour.js +18 -0
  139. package/dist/tour.js.map +1 -1
  140. package/package.json +1 -1
  141. package/src/admin/admin-area-labels.ts +91 -0
  142. package/src/admin/admin-forbidden.tsx +75 -0
  143. package/src/admin/admin-overview.tsx +217 -0
  144. package/src/admin/admin-sections.tsx +198 -0
  145. package/src/admin/admin-tool-links.tsx +84 -0
  146. package/src/billing/billing-banner.tsx +57 -6
  147. package/src/billing/billing-labels.ts +59 -0
  148. package/src/billing/billing-overview.ts +37 -0
  149. package/src/billing/billing-standing.ts +8 -0
  150. package/src/billing/cancel-request.ts +75 -0
  151. package/src/billing/cancel-subscription.tsx +102 -0
  152. package/src/billing/plan-card.tsx +97 -1
  153. package/src/billing/plan-switch.tsx +16 -0
  154. package/src/billing/provider-page.ts +75 -0
  155. package/src/billing/subscription-actions.tsx +155 -20
  156. package/src/components/account-chips.tsx +89 -2
  157. package/src/components/empty-state.tsx +2 -1
  158. package/src/feedback/feedback-menu.tsx +8 -3
  159. package/src/hooks/use-search-param-state.ts +6 -1
  160. package/src/i18n/defaults.ts +6 -0
  161. package/src/i18n/german.ts +127 -0
  162. package/src/i18n/kit-labels.tsx +12 -0
  163. package/src/i18n/locales/en.ts +32 -0
  164. package/src/i18n/locales/es.ts +121 -0
  165. package/src/i18n/locales/fr.ts +121 -0
  166. package/src/i18n/locales/hu.ts +119 -0
  167. package/src/i18n/locales/it.ts +122 -0
  168. package/src/i18n/locales/zh.ts +114 -0
  169. package/src/i18n/review.ts +33 -0
  170. package/src/index.ts +38 -2
  171. package/src/search/global-search.tsx +5 -0
  172. package/src/settings/settings-catalogue.ts +10 -2
  173. package/src/settings/settings-layout.tsx +58 -34
  174. package/src/shell/account-menu-language.tsx +116 -0
  175. package/src/shell/admin-menu.tsx +146 -0
  176. package/src/shell/app-shell.tsx +44 -3
  177. package/src/shell/dev-switchers.tsx +179 -0
  178. package/src/shell/sync-status-indicator.tsx +301 -0
  179. package/src/shell/top-bar-actions.tsx +79 -0
  180. package/src/shell/top-bar-parts-labels.ts +142 -0
  181. package/src/shell/topbar-action-menu.tsx +15 -2
  182. package/src/shell/topbar-controls.tsx +20 -3
  183. package/src/shell/tour-menu.tsx +179 -0
  184. package/src/shell.ts +27 -0
  185. package/src/tour/tour-catalogue-labels.ts +75 -0
  186. package/src/tour/tour-catalogue.tsx +316 -0
  187. package/src/tour/tour-info.ts +144 -0
  188. package/src/tour/use-tour-progress.ts +198 -0
  189. package/src/tour/use-tour-url-sync.ts +221 -0
  190. package/src/tour.ts +11 -0
@@ -216,6 +216,38 @@ export function uiKitLabelsEn(numberLocale = "en-US"): UiKitLabels {
216
216
  ...d.settings,
217
217
  matchCount: (count) => (count === 1 ? "1 match" : `${n(count)} matches`),
218
218
  },
219
+ // 0.42.0: the admin area's two counts (docs/admin-harmonization.md §3.1).
220
+ adminArea: {
221
+ ...d.adminArea,
222
+ waiting: (count) => `${n(count)} waiting`,
223
+ tiles: { ...d.adminArea.tiles, usersNew: (count) => `${n(count)} new in 7 days` },
224
+ },
225
+ // 0.43.0: the tours page's counts (docs/tours-harmonization.md §3).
226
+ tourCatalogue: {
227
+ ...d.tourCatalogue,
228
+ groupAll: (count) => `All topics (${n(count)})`,
229
+ groupOption: (group, count) => `${group} (${n(count)})`,
230
+ stateAll: (count) => `All (${n(count)})`,
231
+ stateTodo: (count) => `To do (${n(count)})`,
232
+ stateDone: (count) => `Completed (${n(count)})`,
233
+ showing: (shown, total) => `Showing ${n(shown)} of ${n(total)} tours`,
234
+ points: (count) => `+${n(count)} pts`,
235
+ steps: (count) => (count === 1 ? "1 step" : `${n(count)} steps`),
236
+ duration: (minutes) => `About ${n(minutes)} min`,
237
+ },
238
+ // 0.42.0: the top bar's three counts (docs/top-bar-harmonization.md §3.1).
239
+ topBarParts: {
240
+ ...d.topBarParts,
241
+ sync: {
242
+ ...d.topBarParts.sync,
243
+ blocked: (count) =>
244
+ count === 1
245
+ ? "1 change cannot be sent from this device"
246
+ : `${n(count)} changes cannot be sent from this device`,
247
+ pending: (count) => (count === 1 ? "1 change waiting to sync" : `${n(count)} changes waiting to sync`),
248
+ waitingShort: (count) => `${n(count)} waiting`,
249
+ },
250
+ },
219
251
  demo: {
220
252
  ...d.demo,
221
253
  rateLimited: (minutes) =>
@@ -609,6 +609,34 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
609
609
  awaitClickHint: "Haga clic en el elemento resaltado para continuar",
610
610
  step: (current, total) => `${n(current)} / ${n(total)}`,
611
611
  },
612
+ // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page.
613
+ tourCatalogue: {
614
+ searchLabel: "Buscar visitas",
615
+ searchPlaceholder: "Buscar visitas…",
616
+ groupLabel: "Tema",
617
+ groupAll: (count) => `Todos los temas (${n(count)})`,
618
+ groupOption: (group, count) => `${group} (${n(count)})`,
619
+ stateLabel: "Filtrar visitas",
620
+ stateAll: (count) => `Todas (${n(count)})`,
621
+ stateTodo: (count) => `Pendientes (${n(count)})`,
622
+ stateDone: (count) => `Completadas (${n(count)})`,
623
+ showing: (shown, total) => `Mostrando ${n(shown)} de ${n(total)} visitas`,
624
+ noMatches: "Ninguna visita coincide",
625
+ noMatchesHint: "Pruebe con otra palabra o borre los filtros.",
626
+ clearFilters: "Borrar filtros",
627
+ badgeNew: "Nuevo",
628
+ badgeUpdated: "Actualizado",
629
+ resetOn: (date, reason) => (reason ? `Restablecida el ${date}: ${reason}` : `Restablecida el ${date}`),
630
+ points: (count) => `+${n(count)} pts`,
631
+ steps: (count) => (count === 1 ? `${n(count)} paso` : `${n(count)} pasos`),
632
+ duration: (minutes) => `Unos ${n(minutes)} min`,
633
+ completedOn: (date) => `Completada el ${date}`,
634
+ completed: "Completada",
635
+ notCompleted: "No completada",
636
+ markUndone: "Marcar como no completada",
637
+ start: "Empezar",
638
+ replay: "Repetir",
639
+ },
612
640
  commandPalette: {
613
641
  clear: "Borrar búsqueda",
614
642
  submit: "Buscar",
@@ -1683,6 +1711,11 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1683
1711
  "Su pago se está procesando. Su plan empieza en cuanto se confirme; esta página se actualiza sola.",
1684
1712
  choosePlan: "Elegir un plan",
1685
1713
  updatePayment: "Actualizar el método de pago",
1714
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1715
+ paymentFailedAskBuyer: (buyer) =>
1716
+ buyer
1717
+ ? `El pago no se ha completado. ${buyer} puede actualizar el método de pago.`
1718
+ : "El pago no se ha completado. El administrador que contrató la suscripción puede actualizar el método de pago.",
1686
1719
  checkAgain: "Volver a comprobar",
1687
1720
  lockReason: "Su plan ha terminado. Elija un plan para volver a hacer cambios.",
1688
1721
  // As `characterCount.limitReached` ("Límite de caracteres alcanzado").
@@ -1713,6 +1746,21 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1713
1746
  switchCredited: "Abonado a sus próximos cargos",
1714
1747
  switchNextCharge: (date) => `Próximo cargo el ${date}`,
1715
1748
  switchConfirm: "Cambiar de plan",
1749
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1750
+ buyerHolds: (buyer) =>
1751
+ buyer
1752
+ ? `El método de pago y las facturas los gestiona ${buyer}, que contrató la suscripción.`
1753
+ : "El método de pago y las facturas los gestiona el administrador que contrató la suscripción.",
1754
+ cancelConfirmTitle: "Cancelar la suscripción",
1755
+ cancelConfirmBody: (date) => `Su suscripción termina el ${date}. Hasta entonces, todo funciona como antes.`,
1756
+ cancelConfirmAction: "Cancelar ahora la suscripción",
1757
+ keepSubscription: "Mantener la suscripción",
1758
+ portalOpensNewTab: (provider, app) =>
1759
+ `Los pagos y las facturas se abren en ${provider} en una pestaña nueva; ${app ? `${app} sigue abierto aquí` : "esta página sigue abierta"}.`,
1760
+ grantWarningTitle: "Su acceso gratuito continúa",
1761
+ grantWarningBody:
1762
+ "Su acceso gratuito no tiene fecha de fin. Mientras dure, una compra no cambia su plan: pagaría por un plan que no se aplica.",
1763
+ grantWarningAction: "Comprar de todos modos",
1716
1764
  waitingChanges: (count) => `${n(count)} ${plural(count, "cambio", "cambios")} a la espera de un plan`,
1717
1765
  // "Descartar", as `wizard.cancelConfirmLabel`.
1718
1766
  discardWaiting: "Descartar los cambios en espera",
@@ -1781,6 +1829,79 @@ export function uiKitLabelsEs(numberLocale = "es-ES"): UiKitLabels {
1781
1829
  more: "Más",
1782
1830
  moreTitle: "Más páginas",
1783
1831
  },
1832
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Usted",
1833
+ // as the rest of the catalogue.
1834
+ adminArea: {
1835
+ title: "Administración",
1836
+ waiting: (count) => `${n(count)} ${plural(count, "pendiente", "pendientes")}`,
1837
+ forbiddenTitle: "Solo para administradores",
1838
+ forbiddenBody: (appName) =>
1839
+ `Aquí es donde los administradores gestionan ${appName}. Su cuenta no puede abrir esta página.`,
1840
+ forbiddenHome: "Ir a la página de inicio",
1841
+ forbiddenReviewer: "Revisar traducciones",
1842
+ sections: {
1843
+ overview: { title: "Resumen", help: "Lo que está pendiente, de un vistazo." },
1844
+ users: { title: "Usuarios", help: "Quién tiene una cuenta y qué puede hacer cada uno." },
1845
+ invitations: { title: "Invitaciones", help: "Invite a personas por correo electrónico en su idioma; reenvíe o revoque las invitaciones aún pendientes." },
1846
+ billing: { title: "Facturación", help: "El plan, el pago y las facturas." },
1847
+ activity: { title: "Actividad", help: "Lo que hicieron los administradores, lo más reciente primero." },
1848
+ },
1849
+ tiles: {
1850
+ feedbackWaiting: "Por clasificar",
1851
+ deletionRequests: "Solicitudes de eliminación",
1852
+ invitationsPending: "Invitaciones pendientes",
1853
+ users: "Usuarios",
1854
+ usersNew: (count) => `${n(count)} ${plural(count, "nuevo", "nuevos")} en 7 días`,
1855
+ },
1856
+ overviewError: "No se pudo cargar el resumen.",
1857
+ retry: "Reintentar",
1858
+ tools: "Herramientas",
1859
+ },
1860
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts; "plan" as
1861
+ // `billing`, "usted" as the rest of the catalogue.
1862
+ topBarParts: {
1863
+ tours: {
1864
+ menu: "Visitas guiadas",
1865
+ newDot: "Visitas nuevas",
1866
+ thisPage: "En esta página",
1867
+ newTours: "Visitas nuevas",
1868
+ allTours: "Todas las visitas…",
1869
+ badgeNew: "Nuevo",
1870
+ completed: "Completada",
1871
+ badgeUpdated: "Actualizado",
1872
+ updatedDot: "Visitas actualizadas",
1873
+ newAndUpdated: "Nuevas y actualizadas",
1874
+ },
1875
+ sync: {
1876
+ blocked: (count) =>
1877
+ `${n(count)} ${plural(count, "cambio no se puede enviar", "cambios no se pueden enviar")} desde este dispositivo`,
1878
+ offline: "Sin conexión: los cambios se guardan en este dispositivo y se sincronizarán al volver a conectarse",
1879
+ refused: "El servidor rechazó la última sincronización",
1880
+ syncing: "Sincronizando…",
1881
+ pending: (count) =>
1882
+ `${n(count)} ${plural(count, "cambio", "cambios")} a la espera de sincronizarse`,
1883
+ syncedAt: (time) => `Sincronizado a las ${time}`,
1884
+ idle: "Al día",
1885
+ syncHint: "Toque para sincronizar ahora",
1886
+ offlineHint: "no hay nada que sincronizar sin conexión",
1887
+ withHint: (state, hint) => `${state} — ${hint}`,
1888
+ scoped: (scope, state) => `${scope}: ${state}`,
1889
+ offlineShort: "Sin conexión",
1890
+ syncingShort: "Sincronizando…",
1891
+ waitingShort: (count) => `${n(count)} en espera`,
1892
+ refusedShort: "Sin sincronizar",
1893
+ offlineUnsaved: "Sin conexión: los cambios no se pueden guardar hasta que vuelva a conectarse",
1894
+ saving: "Guardando…",
1895
+ },
1896
+ dev: {
1897
+ roleHeading: "Dev · rol",
1898
+ switchPlan: "Cambiar de plan",
1899
+ plan: (value) => `Plan: ${value}`,
1900
+ planHeading: "Dev · plan",
1901
+ backTo: (role) => `Volver a ${role}`,
1902
+ billingOff: "La facturación está desactivada en local: los planes no cambian nada",
1903
+ },
1904
+ },
1784
1905
  };
1785
1906
  }
1786
1907
 
@@ -624,6 +624,34 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
624
624
  awaitClickHint: "Cliquez sur l’élément mis en évidence pour continuer",
625
625
  step: (current, total) => `${n(current)} / ${n(total)}`,
626
626
  },
627
+ // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page. keksdose's reviewed words.
628
+ tourCatalogue: {
629
+ searchLabel: "Rechercher une visite",
630
+ searchPlaceholder: "Rechercher une visite…",
631
+ groupLabel: "Thème",
632
+ groupAll: (count) => `Tous les thèmes (${n(count)})`,
633
+ groupOption: (group, count) => `${group} (${n(count)})`,
634
+ stateLabel: "Filtrer les visites",
635
+ stateAll: (count) => `Toutes (${n(count)})`,
636
+ stateTodo: (count) => `À faire (${n(count)})`,
637
+ stateDone: (count) => `Terminées (${n(count)})`,
638
+ showing: (shown, total) => `${n(shown)} visites sur ${n(total)}`,
639
+ noMatches: "Aucune visite ne correspond",
640
+ noMatchesHint: "Essayez un autre mot, ou effacez les filtres.",
641
+ clearFilters: "Effacer les filtres",
642
+ badgeNew: "Nouveau",
643
+ badgeUpdated: "Mise à jour",
644
+ resetOn: (date, reason) => (reason ? `Réinitialisée le ${date}\u202f: ${reason}` : `Réinitialisée le ${date}`),
645
+ points: (count) => `+${n(count)} pts`,
646
+ steps: (count) => (count === 1 ? `${n(count)} étape` : `${n(count)} étapes`),
647
+ duration: (minutes) => `Environ ${n(minutes)} min`,
648
+ completedOn: (date) => `Terminée le ${date}`,
649
+ completed: "Terminée",
650
+ notCompleted: "Non terminée",
651
+ markUndone: "Marquer comme non terminée",
652
+ start: "Démarrer",
653
+ replay: "Rejouer",
654
+ },
627
655
  commandPalette: {
628
656
  clear: "Effacer la recherche",
629
657
  submit: "Rechercher",
@@ -1716,6 +1744,11 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1716
1744
  "Votre paiement est en cours de traitement. Votre formule démarre dès qu’il est confirmé\u202f; cette page se met à jour d’elle-même.",
1717
1745
  choosePlan: "Choisir une formule",
1718
1746
  updatePayment: "Mettre à jour le moyen de paiement",
1747
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1748
+ paymentFailedAskBuyer: (buyer) =>
1749
+ buyer
1750
+ ? `Le paiement a échoué. ${buyer} peut mettre à jour le moyen de paiement.`
1751
+ : "Le paiement a échoué. L’administrateur qui a souscrit l’abonnement peut mettre à jour le moyen de paiement.",
1719
1752
  checkAgain: "Vérifier à nouveau",
1720
1753
  lockReason: "Votre formule a pris fin. Choisissez une formule pour pouvoir de nouveau apporter des modifications.",
1721
1754
  // As `characterCount.limitReached` ("Limite de caractères atteinte").
@@ -1747,6 +1780,22 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1747
1780
  switchCredited: "Crédité sur vos prochains paiements",
1748
1781
  switchNextCharge: (date) => `Prochain prélèvement le ${date}`,
1749
1782
  switchConfirm: "Changer de formule",
1783
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1784
+ buyerHolds: (buyer) =>
1785
+ buyer
1786
+ ? `Le moyen de paiement et les factures sont gérés par ${buyer}, qui a souscrit l’abonnement.`
1787
+ : "Le moyen de paiement et les factures sont gérés par l’administrateur qui a souscrit l’abonnement.",
1788
+ cancelConfirmTitle: "Résilier l’abonnement",
1789
+ cancelConfirmBody: (date) =>
1790
+ `Votre abonnement prendra fin le ${date}. D’ici là, tout fonctionne comme avant.`,
1791
+ cancelConfirmAction: "Résilier maintenant",
1792
+ keepSubscription: "Conserver l’abonnement",
1793
+ portalOpensNewTab: (provider, app) =>
1794
+ `Le paiement et les factures s’ouvrent chez ${provider} dans un nouvel onglet\u202f; ${app ? `${app} reste ouvert ici` : "cette page reste ouverte"}.`,
1795
+ grantWarningTitle: "Votre accès gratuit continue",
1796
+ grantWarningBody:
1797
+ "Votre accès gratuit n’a pas de date de fin. Tant qu’il dure, un achat ne change pas votre formule : vous paieriez pour une formule qui ne s’applique pas.",
1798
+ grantWarningAction: "Acheter quand même",
1750
1799
  waitingChanges: (count) =>
1751
1800
  `${n(count)} ${plural(count, "modification en attente", "modifications en attente")} d’une formule`,
1752
1801
  // "Abandonner", as `wizard.cancelConfirmLabel`.
@@ -1820,6 +1869,78 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
1820
1869
  more: "Plus",
1821
1870
  moreTitle: "Autres pages",
1822
1871
  },
1872
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words.
1873
+ adminArea: {
1874
+ title: "Administration",
1875
+ waiting: (count) => `${n(count)} en attente`,
1876
+ forbiddenTitle: "Réservé aux administrateurs",
1877
+ forbiddenBody: (appName) =>
1878
+ `C’est ici que les administrateurs gèrent ${appName}. Votre compte ne peut pas ouvrir cette page.`,
1879
+ forbiddenHome: "Aller à la page d’accueil",
1880
+ forbiddenReviewer: "Relire les traductions",
1881
+ sections: {
1882
+ overview: { title: "Vue d’ensemble", help: "Ce qui est en attente, en un coup d’œil." },
1883
+ users: { title: "Utilisateurs", help: "Qui a un compte, et ce que chacun peut faire." },
1884
+ invitations: { title: "Invitations", help: "Invitez des personnes par e-mail dans leur langue\u202f; renvoyez ou révoquez les invitations encore ouvertes." },
1885
+ billing: { title: "Facturation", help: "L’offre, le paiement et les factures." },
1886
+ activity: { title: "Activité", help: "Ce que les administrateurs ont fait, du plus récent au plus ancien." },
1887
+ },
1888
+ tiles: {
1889
+ feedbackWaiting: "À trier",
1890
+ deletionRequests: "Demandes de suppression",
1891
+ invitationsPending: "Invitations en attente",
1892
+ users: "Utilisateurs",
1893
+ usersNew: (count) => `${n(count)} ${plural(count, "nouveau", "nouveaux")} en 7 jours`,
1894
+ },
1895
+ overviewError: "La vue d’ensemble n’a pas pu être chargée.",
1896
+ retry: "Réessayer",
1897
+ tools: "Outils",
1898
+ },
1899
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts, keksdose's
1900
+ // reviewed sync words where they are not about its budgets; "formule" as `billing`.
1901
+ topBarParts: {
1902
+ tours: {
1903
+ menu: "Visites guidées",
1904
+ newDot: "Nouvelles visites",
1905
+ thisPage: "Sur cette page",
1906
+ newTours: "Nouvelles visites",
1907
+ allTours: "Toutes les visites…",
1908
+ badgeNew: "Nouveau",
1909
+ completed: "Terminée",
1910
+ badgeUpdated: "Mise à jour",
1911
+ updatedDot: "Visites mises à jour",
1912
+ newAndUpdated: "Nouvelles et mises à jour",
1913
+ },
1914
+ sync: {
1915
+ blocked: (count) =>
1916
+ `${n(count)} ${plural(count, "modification ne peut pas être envoyée", "modifications ne peuvent pas être envoyées")} depuis cet appareil`,
1917
+ offline: "Hors ligne — les modifications sont enregistrées sur cet appareil et seront synchronisées à la reconnexion",
1918
+ refused: "Le serveur a refusé la dernière synchronisation",
1919
+ syncing: "Synchronisation…",
1920
+ pending: (count) =>
1921
+ `${n(count)} ${plural(count, "modification", "modifications")} en attente de synchronisation`,
1922
+ syncedAt: (time) => `Synchronisé à ${time}`,
1923
+ idle: "À jour",
1924
+ syncHint: "Touchez pour synchroniser maintenant",
1925
+ offlineHint: "rien à synchroniser hors ligne",
1926
+ withHint: (state, hint) => `${state} — ${hint}`,
1927
+ scoped: (scope, state) => `${scope}\u00a0: ${state}`,
1928
+ offlineShort: "Hors ligne",
1929
+ syncingShort: "Synchronisation…",
1930
+ waitingShort: (count) => `${n(count)} en attente`,
1931
+ refusedShort: "Non synchronisé",
1932
+ offlineUnsaved: "Hors ligne — les modifications ne peuvent pas être enregistrées avant la reconnexion",
1933
+ saving: "Enregistrement…",
1934
+ },
1935
+ dev: {
1936
+ roleHeading: "Dev · rôle",
1937
+ switchPlan: "Changer de formule",
1938
+ plan: (value) => `Formule\u00a0: ${value}`,
1939
+ planHeading: "Dev · formule",
1940
+ backTo: (role) => `Revenir à ${role}`,
1941
+ billingOff: "La facturation est désactivée en local\u00a0: les formules ne changent rien",
1942
+ },
1943
+ },
1823
1944
  };
1824
1945
  }
1825
1946
 
@@ -611,6 +611,34 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
611
611
  awaitClickHint: "A folytatáshoz kattintson a kiemelt elemre",
612
612
  step: (current, total) => `${n(current)} / ${n(total)}`,
613
613
  },
614
+ // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page.
615
+ tourCatalogue: {
616
+ searchLabel: "Bemutatók keresése",
617
+ searchPlaceholder: "Bemutatók keresése…",
618
+ groupLabel: "Téma",
619
+ groupAll: (count) => `Összes téma (${n(count)})`,
620
+ groupOption: (group, count) => `${group} (${n(count)})`,
621
+ stateLabel: "Bemutatók szűrése",
622
+ stateAll: (count) => `Összes (${n(count)})`,
623
+ stateTodo: (count) => `Teendő (${n(count)})`,
624
+ stateDone: (count) => `Elvégezve (${n(count)})`,
625
+ showing: (shown, total) => `${n(shown)} / ${n(total)} bemutató látható`,
626
+ noMatches: "Nincs megfelelő bemutató",
627
+ noMatchesHint: "Próbáljon egy másik szót, vagy törölje a szűrőket.",
628
+ clearFilters: "Szűrők törlése",
629
+ badgeNew: "Új",
630
+ badgeUpdated: "Frissítve",
631
+ resetOn: (date, reason) => (reason ? `Visszaállítva: ${date} – ${reason}` : `Visszaállítva: ${date}`),
632
+ points: (count) => `+${n(count)} pont`,
633
+ steps: (count) => `${n(count)} lépés`,
634
+ duration: (minutes) => `Kb. ${n(minutes)} perc`,
635
+ completedOn: (date) => `Elvégezve: ${date}`,
636
+ completed: "Elvégezve",
637
+ notCompleted: "Még nincs elvégezve",
638
+ markUndone: "Megjelölés el nem végzettként",
639
+ start: "Indítás",
640
+ replay: "Újra",
641
+ },
614
642
  commandPalette: {
615
643
  clear: "Keresés törlése",
616
644
  submit: "Keresés",
@@ -1684,6 +1712,11 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1684
1712
  "A fizetése feldolgozás alatt áll. A csomagja a megerősítés után azonnal elindul; ez az oldal magától frissül.",
1685
1713
  choosePlan: "Csomag választása",
1686
1714
  updatePayment: "Fizetési mód frissítése",
1715
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1716
+ paymentFailedAskBuyer: (buyer) =>
1717
+ buyer
1718
+ ? `A fizetés sikertelen volt. ${buyer} tudja frissíteni a fizetési módot.`
1719
+ : "A fizetés sikertelen volt. Az előfizetést megvásárló adminisztrátor tudja frissíteni a fizetési módot.",
1687
1720
  checkAgain: "Újraellenőrzés",
1688
1721
  lockReason: "A csomagja lejárt. Ha ismét módosítani szeretne, válasszon csomagot.",
1689
1722
  // As `characterCount.limitReached` ("Elérte a karakterkorlátot").
@@ -1716,6 +1749,21 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1716
1749
  switchCredited: "A következő terhelésekből levonva",
1717
1750
  switchNextCharge: (date) => `Következő terhelés: ${date}`,
1718
1751
  switchConfirm: "Csomag módosítása",
1752
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1753
+ buyerHolds: (buyer) =>
1754
+ buyer
1755
+ ? `A fizetési módot és a számlákat ${buyer} kezeli, aki az előfizetést megvásárolta.`
1756
+ : "A fizetési módot és a számlákat az előfizetést megvásárló adminisztrátor kezeli.",
1757
+ cancelConfirmTitle: "Előfizetés lemondása",
1758
+ cancelConfirmBody: (date) => `Az előfizetése ekkor ér véget: ${date}. Addig minden a megszokott módon működik.`,
1759
+ cancelConfirmAction: "Lemondás most",
1760
+ keepSubscription: "Előfizetés megtartása",
1761
+ portalOpensNewTab: (provider, app) =>
1762
+ `A fizetés és a számlák új lapon nyílnak meg a(z) ${provider} oldalán; ${app ? `a(z) ${app} itt nyitva marad` : "ez az oldal nyitva marad"}.`,
1763
+ grantWarningTitle: "Az ingyenes hozzáférése továbbra is él",
1764
+ grantWarningBody:
1765
+ "Az ingyenes hozzáférésének nincs lejárati dátuma. Amíg tart, a vásárlás nem változtatja meg a csomagját: olyan csomagért fizetne, amely nem érvényes.",
1766
+ grantWarningAction: "Mégis megvásárolom",
1719
1767
  // No plural after a numeral (convention 2).
1720
1768
  waitingChanges: (count) => `${n(count)} módosítás csomagra vár`,
1721
1769
  // "Elvetés", as `wizard.cancelConfirmLabel`.
@@ -1787,6 +1835,77 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
1787
1835
  more: "Továbbiak",
1788
1836
  moreTitle: "További oldalak",
1789
1837
  },
1838
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Ön", as
1839
+ // the rest of the catalogue.
1840
+ adminArea: {
1841
+ title: "Adminisztráció",
1842
+ waiting: (count) => `${n(count)} várakozik`,
1843
+ forbiddenTitle: "Csak adminisztrátoroknak",
1844
+ forbiddenBody: (appName) =>
1845
+ `Itt kezelik az adminisztrátorok a(z) ${appName} alkalmazást. Az Ön fiókja nem nyithatja meg ezt az oldalt.`,
1846
+ forbiddenHome: "Ugrás a kezdőlapra",
1847
+ forbiddenReviewer: "Fordítások ellenőrzése",
1848
+ sections: {
1849
+ overview: { title: "Áttekintés", help: "Ami most várakozik, egy pillantásra." },
1850
+ users: { title: "Felhasználók", help: "Kinek van fiókja, és ki mit tehet." },
1851
+ invitations: { title: "Meghívások", help: "Hívjon meg embereket e-mailben a saját nyelvükön; küldje újra vagy vonja vissza a még nyitott meghívókat." },
1852
+ billing: { title: "Számlázás", help: "A csomag, a fizetés és a számlák." },
1853
+ activity: { title: "Tevékenység", help: "Mit tettek az adminisztrátorok, a legújabb elöl." },
1854
+ },
1855
+ tiles: {
1856
+ feedbackWaiting: "Osztályozásra vár",
1857
+ deletionRequests: "Törlési kérelmek",
1858
+ invitationsPending: "Függő meghívások",
1859
+ users: "Felhasználók",
1860
+ usersNew: (count) => `${n(count)} új az elmúlt 7 napban`,
1861
+ },
1862
+ overviewError: "Az áttekintést nem sikerült betölteni.",
1863
+ retry: "Próbálja újra",
1864
+ tools: "Eszközök",
1865
+ },
1866
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts; "csomag" as
1867
+ // `billing`, the formal register as the rest of the catalogue.
1868
+ topBarParts: {
1869
+ tours: {
1870
+ menu: "Bemutatók",
1871
+ newDot: "Új bemutatók",
1872
+ thisPage: "Ezen az oldalon",
1873
+ newTours: "Új bemutatók",
1874
+ allTours: "Összes bemutató…",
1875
+ badgeNew: "Új",
1876
+ completed: "Elvégezve",
1877
+ badgeUpdated: "Frissítve",
1878
+ updatedDot: "Frissített bemutatók",
1879
+ newAndUpdated: "Új és frissített",
1880
+ },
1881
+ sync: {
1882
+ blocked: (count) => `${n(count)} módosítás nem küldhető el erről az eszközről`,
1883
+ offline: "Offline – a módosítások ezen az eszközön maradnak, és az újracsatlakozáskor szinkronizálódnak",
1884
+ refused: "A szerver elutasította a legutóbbi szinkronizálást",
1885
+ syncing: "Szinkronizálás…",
1886
+ pending: (count) => `${n(count)} módosítás szinkronizálásra vár`,
1887
+ syncedAt: (time) => `Szinkronizálva: ${time}`,
1888
+ idle: "Naprakész",
1889
+ syncHint: "Koppintson a szinkronizáláshoz",
1890
+ offlineHint: "offline nincs mit szinkronizálni",
1891
+ withHint: (state, hint) => `${state} – ${hint}`,
1892
+ scoped: (scope, state) => `${scope}: ${state}`,
1893
+ offlineShort: "Offline",
1894
+ syncingShort: "Szinkronizálás…",
1895
+ waitingShort: (count) => `${n(count)} várakozik`,
1896
+ refusedShort: "Nincs szinkronizálva",
1897
+ offlineUnsaved: "Offline – a módosítások az újracsatlakozásig nem menthetők",
1898
+ saving: "Mentés…",
1899
+ },
1900
+ dev: {
1901
+ roleHeading: "Dev · szerepkör",
1902
+ switchPlan: "Csomag váltása",
1903
+ plan: (value) => `Csomag: ${value}`,
1904
+ planHeading: "Dev · csomag",
1905
+ backTo: (role) => `Vissza: ${role}`,
1906
+ billingOff: "A számlázás helyben ki van kapcsolva: a csomagok semmin nem változtatnak",
1907
+ },
1908
+ },
1790
1909
  };
1791
1910
  }
1792
1911
 
@@ -613,6 +613,34 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
613
613
  awaitClickHint: "Faccia clic sull’elemento evidenziato per continuare",
614
614
  step: (current, total) => `${n(current)} / ${n(total)}`,
615
615
  },
616
+ // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page. keksdose's reviewed words.
617
+ tourCatalogue: {
618
+ searchLabel: "Cerca tour",
619
+ searchPlaceholder: "Cerca tour…",
620
+ groupLabel: "Argomento",
621
+ groupAll: (count) => `Tutti gli argomenti (${n(count)})`,
622
+ groupOption: (group, count) => `${group} (${n(count)})`,
623
+ stateLabel: "Filtra i tour",
624
+ stateAll: (count) => `Tutti (${n(count)})`,
625
+ stateTodo: (count) => `Da fare (${n(count)})`,
626
+ stateDone: (count) => `Completati (${n(count)})`,
627
+ showing: (shown, total) => `${n(shown)} di ${n(total)} tour`,
628
+ noMatches: "Nessun tour corrisponde",
629
+ noMatchesHint: "Provi un’altra parola o cancelli i filtri.",
630
+ clearFilters: "Cancella filtri",
631
+ badgeNew: "Nuovo",
632
+ badgeUpdated: "Aggiornato",
633
+ resetOn: (date, reason) => (reason ? `Reimpostato il ${date}: ${reason}` : `Reimpostato il ${date}`),
634
+ points: (count) => `+${n(count)} pt`,
635
+ steps: (count) => (count === 1 ? `${n(count)} passaggio` : `${n(count)} passaggi`),
636
+ duration: (minutes) => `Circa ${n(minutes)} min`,
637
+ completedOn: (date) => `Completato il ${date}`,
638
+ completed: "Completato",
639
+ notCompleted: "Non completato",
640
+ markUndone: "Segna come non completato",
641
+ start: "Avvia",
642
+ replay: "Ripeti",
643
+ },
616
644
  commandPalette: {
617
645
  clear: "Cancella ricerca",
618
646
  submit: "Cerca",
@@ -1699,6 +1727,11 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1699
1727
  "Il Suo pagamento è in elaborazione. Il Suo piano inizia non appena viene confermato; questa pagina si aggiorna da sola.",
1700
1728
  choosePlan: "Scegli un piano",
1701
1729
  updatePayment: "Aggiorna il metodo di pagamento",
1730
+ // 0.42 (§16.7 A): for an admin who isn't the buyer.
1731
+ paymentFailedAskBuyer: (buyer) =>
1732
+ buyer
1733
+ ? `Il pagamento non è andato a buon fine. ${buyer} può aggiornare il metodo di pagamento.`
1734
+ : "Il pagamento non è andato a buon fine. L’amministratore che ha sottoscritto l’abbonamento può aggiornare il metodo di pagamento.",
1702
1735
  checkAgain: "Verifica di nuovo",
1703
1736
  lockReason: "Il Suo piano è terminato. Scelga un piano per apportare di nuovo modifiche.",
1704
1737
  // As `characterCount.limitReached` ("Limite di caratteri raggiunto").
@@ -1729,6 +1762,22 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1729
1762
  switchCredited: "Accreditato sui prossimi addebiti",
1730
1763
  switchNextCharge: (date) => `Prossimo addebito il ${date}`,
1731
1764
  switchConfirm: "Cambia piano",
1765
+ // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.
1766
+ buyerHolds: (buyer) =>
1767
+ buyer
1768
+ ? `Il metodo di pagamento e le fatture sono gestiti da ${buyer}, che ha sottoscritto l’abbonamento.`
1769
+ : "Il metodo di pagamento e le fatture sono gestiti dall’amministratore che ha sottoscritto l’abbonamento.",
1770
+ cancelConfirmTitle: "Disdici l’abbonamento",
1771
+ cancelConfirmBody: (date) =>
1772
+ `Il Suo abbonamento termina il ${date}. Fino ad allora tutto funziona come prima.`,
1773
+ cancelConfirmAction: "Disdici ora",
1774
+ keepSubscription: "Mantieni l’abbonamento",
1775
+ portalOpensNewTab: (provider, app) =>
1776
+ `Pagamenti e fatture si aprono su ${provider} in una nuova scheda; ${app ? `${app} resta aperto qui` : "questa pagina resta aperta"}.`,
1777
+ grantWarningTitle: "Il Suo accesso gratuito continua",
1778
+ grantWarningBody:
1779
+ "Il Suo accesso gratuito non ha una data di fine. Finché dura, un acquisto non cambia il Suo piano: pagherebbe per un piano che non si applica.",
1780
+ grantWarningAction: "Acquista comunque",
1732
1781
  waitingChanges: (count) =>
1733
1782
  `${n(count)} ${plural(count, "modifica in attesa", "modifiche in attesa")} di un piano`,
1734
1783
  // "Scarta", as `wizard.cancelConfirmLabel`.
@@ -1799,6 +1848,79 @@ export function uiKitLabelsIt(numberLocale = "it-IT"): UiKitLabels {
1799
1848
  more: "Altro",
1800
1849
  moreTitle: "Altre pagine",
1801
1850
  },
1851
+ // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words. "Lei", as
1852
+ // the rest of the catalogue.
1853
+ adminArea: {
1854
+ title: "Amministrazione",
1855
+ waiting: (count) => `${n(count)} in attesa`,
1856
+ forbiddenTitle: "Solo per gli amministratori",
1857
+ forbiddenBody: (appName) =>
1858
+ `Qui gli amministratori gestiscono ${appName}. Il Suo account non può aprire questa pagina.`,
1859
+ forbiddenHome: "Vai alla pagina iniziale",
1860
+ forbiddenReviewer: "Rivedi le traduzioni",
1861
+ sections: {
1862
+ overview: { title: "Panoramica", help: "Ciò che è in attesa, a colpo d’occhio." },
1863
+ users: { title: "Utenti", help: "Chi ha un account e cosa può fare ciascuno." },
1864
+ invitations: { title: "Inviti", help: "Inviti persone via e-mail nella loro lingua; reinvii o revochi gli inviti ancora aperti." },
1865
+ billing: { title: "Fatturazione", help: "Il piano, il pagamento e le fatture." },
1866
+ activity: { title: "Attività", help: "Ciò che hanno fatto gli amministratori, dal più recente." },
1867
+ },
1868
+ tiles: {
1869
+ feedbackWaiting: "Da smistare",
1870
+ deletionRequests: "Richieste di eliminazione",
1871
+ invitationsPending: "Inviti in sospeso",
1872
+ users: "Utenti",
1873
+ usersNew: (count) => `${n(count)} ${plural(count, "nuovo", "nuovi")} in 7 giorni`,
1874
+ },
1875
+ overviewError: "Non è stato possibile caricare la panoramica.",
1876
+ retry: "Riprova",
1877
+ tools: "Strumenti",
1878
+ },
1879
+ // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts, keksdose's
1880
+ // reviewed sync words where they are not about its budgets; "piano" as `billing`.
1881
+ topBarParts: {
1882
+ tours: {
1883
+ menu: "Tour guidati",
1884
+ newDot: "Nuovi tour",
1885
+ thisPage: "In questa pagina",
1886
+ newTours: "Nuovi tour",
1887
+ allTours: "Tutti i tour…",
1888
+ badgeNew: "Nuovo",
1889
+ completed: "Completato",
1890
+ badgeUpdated: "Aggiornato",
1891
+ updatedDot: "Tour aggiornati",
1892
+ newAndUpdated: "Nuovi e aggiornati",
1893
+ },
1894
+ sync: {
1895
+ blocked: (count) =>
1896
+ `${n(count)} ${plural(count, "modifica non può essere inviata", "modifiche non possono essere inviate")} da questo dispositivo`,
1897
+ offline: "Offline: le modifiche vengono salvate su questo dispositivo e sincronizzate alla riconnessione",
1898
+ refused: "Il server ha rifiutato l’ultima sincronizzazione",
1899
+ syncing: "Sincronizzazione…",
1900
+ pending: (count) =>
1901
+ `${n(count)} ${plural(count, "modifica", "modifiche")} in attesa di sincronizzazione`,
1902
+ syncedAt: (time) => `Sincronizzato alle ${time}`,
1903
+ idle: "Aggiornato",
1904
+ syncHint: "Tocchi per sincronizzare ora",
1905
+ offlineHint: "offline non c’è nulla da sincronizzare",
1906
+ withHint: (state, hint) => `${state} — ${hint}`,
1907
+ scoped: (scope, state) => `${scope}: ${state}`,
1908
+ offlineShort: "Offline",
1909
+ syncingShort: "Sincronizzazione…",
1910
+ waitingShort: (count) => `${n(count)} in attesa`,
1911
+ refusedShort: "Non sincronizzato",
1912
+ offlineUnsaved: "Offline: le modifiche non possono essere salvate finché non si riconnette",
1913
+ saving: "Salvataggio…",
1914
+ },
1915
+ dev: {
1916
+ roleHeading: "Dev · ruolo",
1917
+ switchPlan: "Cambia piano",
1918
+ plan: (value) => `Piano: ${value}`,
1919
+ planHeading: "Dev · piano",
1920
+ backTo: (role) => `Torna a ${role}`,
1921
+ billingOff: "La fatturazione è disattivata in locale: i piani non cambiano nulla",
1922
+ },
1923
+ },
1802
1924
  };
1803
1925
  }
1804
1926