@antelopejs/dms-marketing 0.3.2 → 0.4.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 (287) hide show
  1. package/README.md +18 -15
  2. package/dist/config.d.ts +1 -0
  3. package/dist/config.js +4 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/data-api/funnels.d.ts +2 -0
  6. package/dist/data-api/funnels.js +8 -1
  7. package/dist/data-api/funnels.js.map +1 -1
  8. package/dist/db/models/funnels.model.d.ts +2 -0
  9. package/dist/db/models/funnels.model.js +9 -0
  10. package/dist/db/models/funnels.model.js.map +1 -1
  11. package/dist/db/models/index.d.ts +1 -0
  12. package/dist/db/models/index.js +1 -0
  13. package/dist/db/models/index.js.map +1 -1
  14. package/dist/db/models/marketing_events.model.d.ts +22 -0
  15. package/dist/db/models/marketing_events.model.js +70 -5
  16. package/dist/db/models/marketing_events.model.js.map +1 -1
  17. package/dist/db/models/marketing_preferences.model.d.ts +25 -0
  18. package/dist/db/models/marketing_preferences.model.js +29 -0
  19. package/dist/db/models/marketing_preferences.model.js.map +1 -0
  20. package/dist/db/models/marketing_sessions.model.d.ts +2 -1
  21. package/dist/db/models/marketing_sessions.model.js +11 -1
  22. package/dist/db/models/marketing_sessions.model.js.map +1 -1
  23. package/dist/db/models/page_snapshots.model.d.ts +2 -1
  24. package/dist/db/models/page_snapshots.model.js +7 -7
  25. package/dist/db/models/page_snapshots.model.js.map +1 -1
  26. package/dist/db/models/website_statistics.model.d.ts +4 -1
  27. package/dist/db/models/website_statistics.model.js +15 -1
  28. package/dist/db/models/website_statistics.model.js.map +1 -1
  29. package/dist/db/tables/index.d.ts +1 -0
  30. package/dist/db/tables/index.js +1 -0
  31. package/dist/db/tables/index.js.map +1 -1
  32. package/dist/db/tables/marketing_preferences.table.d.ts +6 -0
  33. package/dist/db/tables/marketing_preferences.table.js +31 -0
  34. package/dist/db/tables/marketing_preferences.table.js.map +1 -0
  35. package/dist/hooks/index.js +8 -0
  36. package/dist/hooks/index.js.map +1 -1
  37. package/dist/index.js +18 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/pages/acquisition/page.d.ts +9 -0
  40. package/dist/pages/acquisition/page.js +181 -0
  41. package/dist/pages/acquisition/page.js.map +1 -0
  42. package/dist/pages/all.d.ts +5 -1
  43. package/dist/pages/all.js +5 -1
  44. package/dist/pages/all.js.map +1 -1
  45. package/dist/pages/blocks.d.ts +18 -0
  46. package/dist/pages/blocks.js +56 -0
  47. package/dist/pages/blocks.js.map +1 -0
  48. package/dist/pages/funnel/page.d.ts +9 -0
  49. package/dist/pages/funnel/page.js +36 -0
  50. package/dist/pages/funnel/page.js.map +1 -0
  51. package/dist/pages/funnel-builder/page.d.ts +9 -0
  52. package/dist/pages/funnel-builder/page.js +29 -0
  53. package/dist/pages/funnel-builder/page.js.map +1 -0
  54. package/dist/pages/funnels/page.d.ts +1 -1
  55. package/dist/pages/funnels/page.js +200 -3
  56. package/dist/pages/funnels/page.js.map +1 -1
  57. package/dist/pages/index.d.ts +1 -0
  58. package/dist/pages/index.js +1 -0
  59. package/dist/pages/index.js.map +1 -1
  60. package/dist/pages/{campaigns → install}/page.d.ts +3 -3
  61. package/dist/pages/{campaigns → install}/page.js +14 -12
  62. package/dist/pages/install/page.js.map +1 -0
  63. package/dist/pages/module.d.ts +3 -0
  64. package/dist/pages/module.js +30 -3
  65. package/dist/pages/module.js.map +1 -1
  66. package/dist/pages/overview/page.d.ts +1 -1
  67. package/dist/pages/overview/page.js +122 -3
  68. package/dist/pages/overview/page.js.map +1 -1
  69. package/dist/pages/pages/page.d.ts +1 -1
  70. package/dist/pages/pages/page.js +9 -4
  71. package/dist/pages/pages/page.js.map +1 -1
  72. package/dist/pages/quick-actions.d.ts +1 -0
  73. package/dist/pages/quick-actions.js +25 -0
  74. package/dist/pages/quick-actions.js.map +1 -0
  75. package/dist/pages/settings/form.d.ts +2 -1
  76. package/dist/pages/settings/form.js +62 -20
  77. package/dist/pages/settings/form.js.map +1 -1
  78. package/dist/pages/settings/page.d.ts +4 -1
  79. package/dist/pages/settings/page.js +50 -4
  80. package/dist/pages/settings/page.js.map +1 -1
  81. package/dist/pages/websites/page.d.ts +11 -0
  82. package/dist/pages/websites/page.js +62 -0
  83. package/dist/pages/websites/page.js.map +1 -0
  84. package/dist/routes/blocks.d.ts +50 -0
  85. package/dist/routes/blocks.js +269 -0
  86. package/dist/routes/blocks.js.map +1 -0
  87. package/dist/routes/collect.d.ts +1 -2
  88. package/dist/routes/collect.js +19 -12
  89. package/dist/routes/collect.js.map +1 -1
  90. package/dist/routes/context.d.ts +8 -0
  91. package/dist/routes/context.js +54 -0
  92. package/dist/routes/context.js.map +1 -0
  93. package/dist/routes/experiments.js +2 -1
  94. package/dist/routes/experiments.js.map +1 -1
  95. package/dist/routes/funnels.d.ts +21 -3
  96. package/dist/routes/funnels.js +150 -7
  97. package/dist/routes/funnels.js.map +1 -1
  98. package/dist/routes/index.d.ts +2 -0
  99. package/dist/routes/index.js +2 -0
  100. package/dist/routes/index.js.map +1 -1
  101. package/dist/routes/settings.d.ts +6 -1
  102. package/dist/routes/settings.js +65 -4
  103. package/dist/routes/settings.js.map +1 -1
  104. package/dist/routes/snapshot.d.ts +1 -1
  105. package/dist/routes/snapshot.js +24 -25
  106. package/dist/routes/snapshot.js.map +1 -1
  107. package/dist/routes/stats.d.ts +14 -23
  108. package/dist/routes/stats.js +73 -97
  109. package/dist/routes/stats.js.map +1 -1
  110. package/dist/routes/tracker.js +6 -4
  111. package/dist/routes/tracker.js.map +1 -1
  112. package/dist/routes/websites.d.ts +4 -0
  113. package/dist/routes/websites.js +111 -12
  114. package/dist/routes/websites.js.map +1 -1
  115. package/dist/services/acquisition-report.d.ts +62 -0
  116. package/dist/services/acquisition-report.js +181 -0
  117. package/dist/services/acquisition-report.js.map +1 -0
  118. package/dist/services/acquisition.d.ts +9 -3
  119. package/dist/services/acquisition.js +35 -5
  120. package/dist/services/acquisition.js.map +1 -1
  121. package/dist/services/catalog.d.ts +3 -0
  122. package/dist/services/catalog.js +17 -0
  123. package/dist/services/catalog.js.map +1 -0
  124. package/dist/services/collect.d.ts +1 -2
  125. package/dist/services/collect.js +49 -24
  126. package/dist/services/collect.js.map +1 -1
  127. package/dist/services/composed.d.ts +9 -0
  128. package/dist/services/composed.js +62 -0
  129. package/dist/services/composed.js.map +1 -0
  130. package/dist/services/context.d.ts +20 -0
  131. package/dist/services/context.js +76 -0
  132. package/dist/services/context.js.map +1 -0
  133. package/dist/services/dashboard.d.ts +74 -0
  134. package/dist/services/dashboard.js +343 -0
  135. package/dist/services/dashboard.js.map +1 -0
  136. package/dist/services/experiments/results.d.ts +12 -1
  137. package/dist/services/experiments/results.js +19 -2
  138. package/dist/services/experiments/results.js.map +1 -1
  139. package/dist/services/experiments/stats.d.ts +7 -1
  140. package/dist/services/experiments/stats.js +43 -5
  141. package/dist/services/experiments/stats.js.map +1 -1
  142. package/dist/services/funnel-report.d.ts +64 -0
  143. package/dist/services/funnel-report.js +280 -0
  144. package/dist/services/funnel-report.js.map +1 -0
  145. package/dist/services/funnels/compute.d.ts +2 -0
  146. package/dist/services/funnels/compute.js +25 -13
  147. package/dist/services/funnels/compute.js.map +1 -1
  148. package/dist/services/funnels/results.js +4 -1
  149. package/dist/services/funnels/results.js.map +1 -1
  150. package/dist/services/funnels/step-path.d.ts +4 -0
  151. package/dist/services/funnels/step-path.js +47 -0
  152. package/dist/services/funnels/step-path.js.map +1 -0
  153. package/dist/services/funnels-table.d.ts +31 -0
  154. package/dist/services/funnels-table.js +230 -0
  155. package/dist/services/funnels-table.js.map +1 -0
  156. package/dist/services/heatmap.d.ts +15 -3
  157. package/dist/services/heatmap.js +54 -11
  158. package/dist/services/heatmap.js.map +1 -1
  159. package/dist/services/hourly-traffic.d.ts +4 -0
  160. package/dist/services/hourly-traffic.js +35 -0
  161. package/dist/services/hourly-traffic.js.map +1 -0
  162. package/dist/services/origin-guard.d.ts +9 -1
  163. package/dist/services/origin-guard.js +46 -1
  164. package/dist/services/origin-guard.js.map +1 -1
  165. package/dist/services/period.d.ts +26 -1
  166. package/dist/services/period.js +99 -9
  167. package/dist/services/period.js.map +1 -1
  168. package/dist/services/prune.d.ts +6 -0
  169. package/dist/services/prune.js +35 -0
  170. package/dist/services/prune.js.map +1 -1
  171. package/dist/services/request-body.d.ts +1 -2
  172. package/dist/services/request-body.js +10 -36
  173. package/dist/services/request-body.js.map +1 -1
  174. package/dist/services/request-meta.d.ts +0 -1
  175. package/dist/services/request-meta.js +0 -11
  176. package/dist/services/request-meta.js.map +1 -1
  177. package/dist/services/rollups.d.ts +25 -0
  178. package/dist/services/rollups.js +102 -0
  179. package/dist/services/rollups.js.map +1 -0
  180. package/dist/services/sessionize.d.ts +5 -1
  181. package/dist/services/sessionize.js +52 -10
  182. package/dist/services/sessionize.js.map +1 -1
  183. package/dist/services/settings.d.ts +41 -2
  184. package/dist/services/settings.js +219 -6
  185. package/dist/services/settings.js.map +1 -1
  186. package/dist/services/snapshots.d.ts +3 -2
  187. package/dist/services/snapshots.js +110 -9
  188. package/dist/services/snapshots.js.map +1 -1
  189. package/dist/services/tenant-website.js +1 -0
  190. package/dist/services/tenant-website.js.map +1 -1
  191. package/dist/services/url.js +12 -4
  192. package/dist/services/url.js.map +1 -1
  193. package/dist/services/website-hosts.d.ts +15 -0
  194. package/dist/services/website-hosts.js +67 -0
  195. package/dist/services/website-hosts.js.map +1 -0
  196. package/dist/services/website-report.d.ts +40 -0
  197. package/dist/services/website-report.js +84 -0
  198. package/dist/services/website-report.js.map +1 -0
  199. package/dist/types/constants.d.ts +14 -2
  200. package/dist/types/constants.js +17 -6
  201. package/dist/types/constants.js.map +1 -1
  202. package/dist/types/events.d.ts +221 -68
  203. package/dist/types/events.js +60 -11
  204. package/dist/types/events.js.map +1 -1
  205. package/dist/types/snapshots.d.ts +6 -0
  206. package/dist/types/snapshots.js +2 -0
  207. package/dist/types/snapshots.js.map +1 -1
  208. package/dist/types/statistics.d.ts +2 -1
  209. package/dist/types/statistics.js +9 -2
  210. package/dist/types/statistics.js.map +1 -1
  211. package/dist/utils/experiment-type.js +1 -1
  212. package/dist/utils/experiment-type.js.map +1 -1
  213. package/dist/utils/funnel-steps-type.d.ts +21 -3
  214. package/dist/utils/funnel-steps-type.js +7 -2
  215. package/dist/utils/funnel-steps-type.js.map +1 -1
  216. package/frontend-vue/app/components/ChannelsCard.vue +265 -0
  217. package/frontend-vue/app/components/Context.vue +479 -0
  218. package/frontend-vue/app/components/ExperimentInput.vue +3 -1
  219. package/frontend-vue/app/components/ExperimentReport.vue +736 -0
  220. package/frontend-vue/app/components/FirstRun.vue +60 -0
  221. package/frontend-vue/app/components/FunnelBuilder.vue +1595 -0
  222. package/frontend-vue/app/components/FunnelFigure.vue +640 -0
  223. package/frontend-vue/app/components/FunnelReport.vue +532 -0
  224. package/frontend-vue/app/components/FunnelStepsInput.vue +3 -1
  225. package/frontend-vue/app/components/FunnelTemplates.vue +161 -0
  226. package/frontend-vue/app/components/HeatmapCanvas.vue +11 -4
  227. package/frontend-vue/app/components/InstallGuide.vue +753 -0
  228. package/frontend-vue/app/components/PagePreview.vue +889 -416
  229. package/frontend-vue/app/components/PagesExplorer.vue +552 -0
  230. package/frontend-vue/app/components/ScrollDepthOverlay.vue +48 -20
  231. package/frontend-vue/app/components/TopListTabs.vue +317 -0
  232. package/frontend-vue/app/components/TrackerSnippet.vue +50 -16
  233. package/frontend-vue/app/components/VariationsInput.vue +15 -5
  234. package/frontend-vue/app/components/WebsitesGrid.vue +799 -0
  235. package/frontend-vue/app/composables/useContextLink.ts +16 -0
  236. package/frontend-vue/app/composables/useExperiment.ts +1 -2
  237. package/frontend-vue/app/composables/useFunnelSteps.ts +1 -2
  238. package/frontend-vue/app/composables/useLatestRequest.ts +2 -4
  239. package/frontend-vue/app/composables/useMarketingApi.ts +298 -133
  240. package/frontend-vue/app/composables/useMarketingContext.ts +55 -0
  241. package/frontend-vue/app/composables/useMarketingRoutes.ts +80 -27
  242. package/frontend-vue/app/composables/useSnapshotFrame.ts +26 -4
  243. package/frontend-vue/app/constants.ts +22 -0
  244. package/frontend-vue/app/plugins/funnel-steps-data-type.client.ts +2 -1
  245. package/frontend-vue/app/utils/channels.ts +37 -0
  246. package/frontend-vue/app/utils/format.ts +132 -0
  247. package/frontend-vue/app/utils/funnel-draft.ts +264 -0
  248. package/frontend-vue/app/utils/heatmap.ts +82 -0
  249. package/frontend-vue/app/utils/heatmapPalette.ts +10 -0
  250. package/frontend-vue/app/utils/host-conflict.ts +48 -0
  251. package/frontend-vue/app/utils/sample-size.ts +17 -0
  252. package/frontend-vue/app/utils/snapshotViewportUnits.ts +15 -5
  253. package/frontend-vue/app/utils/snippet.ts +53 -0
  254. package/frontend-vue/app/utils/step-path.ts +32 -0
  255. package/frontend-vue/dms.frontend.ts +4 -3
  256. package/frontend-vue/i18n/locales/marketing-en-GB.json +1083 -316
  257. package/frontend-vue/i18n/locales/marketing-fr-FR.json +1087 -320
  258. package/frontend-vue/package.json +3 -0
  259. package/frontend-vue/tests/drafts.test.ts +3 -3
  260. package/frontend-vue/tests/format.test.ts +73 -0
  261. package/frontend-vue/tests/funnel-draft.test.ts +194 -0
  262. package/frontend-vue/tests/heatmap.test.ts +32 -0
  263. package/frontend-vue/tests/i18n.test.ts +87 -4
  264. package/frontend-vue/tests/latest-request.test.ts +6 -3
  265. package/frontend-vue/tests/locale-typography.test.ts +115 -0
  266. package/frontend-vue/tests/registration.test.ts +21 -11
  267. package/frontend-vue/tests/routes.test.ts +67 -7
  268. package/frontend-vue/tests/server-parity.test.ts +77 -0
  269. package/frontend-vue/tests/stubs/frontend-module.ts +18 -3
  270. package/package.json +9 -7
  271. package/static/snapshot.js +46 -16
  272. package/static/tracker.js +139 -48
  273. package/dist/pages/campaigns/page.js.map +0 -1
  274. package/frontend-vue/app/components/CampaignsView.vue +0 -330
  275. package/frontend-vue/app/components/FunnelDetail.vue +0 -1026
  276. package/frontend-vue/app/components/FunnelsView.vue +0 -493
  277. package/frontend-vue/app/components/NoWebsiteState.vue +0 -18
  278. package/frontend-vue/app/components/OverviewView.vue +0 -493
  279. package/frontend-vue/app/components/PagesView.vue +0 -391
  280. package/frontend-vue/app/components/TextKpiCard.vue +0 -28
  281. package/frontend-vue/app/components/TopListTabsCard.vue +0 -162
  282. package/frontend-vue/app/composables/useChildId.ts +0 -13
  283. package/frontend-vue/app/composables/useMarketingPeriod.ts +0 -65
  284. package/frontend-vue/app/composables/useMarketingWebsiteForm.ts +0 -69
  285. package/frontend-vue/app/composables/useMarketingWebsites.ts +0 -80
  286. package/frontend-vue/app/utils/dmsComponent.ts +0 -18
  287. package/frontend-vue/tests/period.test.ts +0 -35
@@ -1,381 +1,1148 @@
1
1
  {
2
2
  "page": {
3
3
  "marketing": {
4
+ "acquisition": {
5
+ "campaigns": {
6
+ "all": "All",
7
+ "campaign": "Campaign",
8
+ "channel": "Channel",
9
+ "count": "{count} campaign | {count} campaigns",
10
+ "empty_description": "Sessions only land here when their URL carries utm_* parameters.",
11
+ "empty_title": "No tagged campaign in this period",
12
+ "filter": "Filter source, medium or campaign",
13
+ "flags": "Flags",
14
+ "medium": "Medium",
15
+ "missing_description": "Without utm_medium they are classified by their referrer alone: Direct when there is none, as from a mail client. Add utm_medium to the link.",
16
+ "missing_medium": "No medium",
17
+ "missing_title": "{count} session tagged without a medium | {count} sessions tagged without a medium",
18
+ "no_match": "No campaign matches this filter.",
19
+ "not_set": "not set",
20
+ "note": "One row per source × medium × campaign and the channel its sessions got. \"not set\": the landing URL did not carry that parameter.",
21
+ "per_day": "Per day",
22
+ "sessions": "Sessions",
23
+ "share": "Share",
24
+ "source": "Source",
25
+ "tagged": "{count} tagged session · {share} of traffic | {count} tagged sessions · {share} of traffic",
26
+ "title": "UTM campaigns"
27
+ },
28
+ "channels": {
29
+ "channel": "Channel",
30
+ "compare_unavailable": "No comparison: the details of days this old are no longer kept.",
31
+ "empty": "No session in this period.",
32
+ "show_campaigns": "Show the {channel} campaigns",
33
+ "sessions": "Sessions",
34
+ "share": "Share",
35
+ "split": "Channel split: {shares}",
36
+ "title": "Channels · {count} session | Channels · {count} sessions",
37
+ "vs_previous": "Sessions vs prev.",
38
+ "vs_previous_hint": "Change of the channel's sessions against the comparison period"
39
+ },
40
+ "description": "Where sessions come from: the channel split and every UTM-tagged campaign.",
41
+ "rules": {
42
+ "direct": "No referrer and nothing above: a typed URL, a bookmark, a mail client or an app.",
43
+ "email": "utm_medium is email, e-mail, e_mail, mail or newsletter. Mail clients send no referrer, so this tag is the only proof.",
44
+ "organic": "utm_medium is organic, or a known search engine as referrer (google, bing, duckduckgo…).",
45
+ "paid": "utm_medium is cpc, ppc, cpm, display, banner, retargeting… or starts with paid, or an ad click id (gclid, msclkid…). Checked first.",
46
+ "referral": "Any other referrer, or utm_medium is referral, affiliate or partner.",
47
+ "social": "utm_medium is social, a known network as referrer (facebook, linkedin, t.co…), or a fbclid click id.",
48
+ "title": "How a session gets its channel"
49
+ },
50
+ "title": "Acquisition",
51
+ "tops": {
52
+ "contents": "UTM contents",
53
+ "empty": "Nothing in this period.",
54
+ "referrers": "Top referrers",
55
+ "terms": "UTM terms"
56
+ }
57
+ },
58
+ "blocks": {
59
+ "acquisition_contents": {
60
+ "description": "utm_content values.",
61
+ "name": "UTM contents"
62
+ },
63
+ "acquisition_referrers": {
64
+ "description": "Referring domains.",
65
+ "name": "Top referrers"
66
+ },
67
+ "acquisition_terms": {
68
+ "description": "utm_term values.",
69
+ "name": "UTM terms"
70
+ },
71
+ "acquisition_tops": {
72
+ "description": "Top referrers, UTM contents and UTM terms.",
73
+ "name": "Referrers and UTM details"
74
+ },
75
+ "campaigns": {
76
+ "description": "Every source × medium × campaign of the period.",
77
+ "name": "UTM campaigns"
78
+ },
79
+ "campaigns_missing": {
80
+ "description": "Warns when tagged sessions carry no utm_medium and get their channel from the referrer alone.",
81
+ "name": "Missing medium notice"
82
+ },
83
+ "campaigns_tagged": {
84
+ "description": "The UTM-tagged sessions of the period and their share of the traffic.",
85
+ "name": "Tagged sessions"
86
+ },
87
+ "channel_rules": {
88
+ "description": "How a session gets its channel.",
89
+ "name": "Channel rules"
90
+ },
91
+ "channels": {
92
+ "description": "Sessions per channel, their share and change.",
93
+ "name": "Channel split"
94
+ },
95
+ "channels_row": {
96
+ "description": "The channel split and its rules.",
97
+ "name": "Channels"
98
+ },
99
+ "collection": {
100
+ "description": "Pause or resume collection on every website.",
101
+ "name": "Collection switch"
102
+ },
103
+ "collection_paused": {
104
+ "description": "Shown while collection is paused for the whole module, with a link to Settings.",
105
+ "name": "Collection paused notice"
106
+ },
107
+ "context": {
108
+ "description": "Picks the website and the period every block of the page reads.",
109
+ "name": "Website and period bar"
110
+ },
111
+ "devices": {
112
+ "description": "Sessions by device type.",
113
+ "name": "Devices"
114
+ },
115
+ "funnel_builder": {
116
+ "description": "Create and edit funnels and A/B tests.",
117
+ "name": "Funnel builder"
118
+ },
119
+ "funnel_report": {
120
+ "description": "One funnel or A/B test, step by step.",
121
+ "name": "Funnel report"
122
+ },
123
+ "funnels_table": {
124
+ "description": "Every funnel with its conversion and A/B status.",
125
+ "name": "Funnels and A/B tests"
126
+ },
127
+ "funnels_winner": {
128
+ "description": "The running A/B test that reached significance, with a link to its report.",
129
+ "name": "Winning test"
130
+ },
131
+ "glance_raw": {
132
+ "description": "Days of raw events kept.",
133
+ "name": "Raw events retention"
134
+ },
135
+ "glance_snapshots": {
136
+ "description": "Days of page snapshots kept.",
137
+ "name": "Snapshots retention"
138
+ },
139
+ "glance_statistics": {
140
+ "description": "Days of rollups kept.",
141
+ "name": "Statistics retention"
142
+ },
143
+ "install_guide": {
144
+ "description": "Add a website and check its tracker.",
145
+ "name": "Tracker install"
146
+ },
147
+ "kpi_custom_events": {
148
+ "description": "Custom events sent by the site over the period.",
149
+ "name": "Custom events"
150
+ },
151
+ "kpi_new_visitors": {
152
+ "description": "First-time visitors over the period.",
153
+ "name": "New visitors"
154
+ },
155
+ "kpi_pageviews": {
156
+ "description": "Pageviews over the period, with the change and a sparkline.",
157
+ "name": "Pageviews"
158
+ },
159
+ "kpi_sessions": {
160
+ "description": "Sessions over the period, with the change and a sparkline.",
161
+ "name": "Sessions"
162
+ },
163
+ "kpis": {
164
+ "description": "Pageviews, sessions, new visitors and custom events with their change.",
165
+ "name": "Volume KPIs"
166
+ },
167
+ "pages_explorer": {
168
+ "description": "Tracked pages with their click and scroll heatmaps.",
169
+ "name": "Pages and heatmaps"
170
+ },
171
+ "quality": {
172
+ "description": "Bounce rate, average session duration and pages per session.",
173
+ "name": "Session quality"
174
+ },
175
+ "retention_form": {
176
+ "description": "Edits the retention periods.",
177
+ "name": "Retention form"
178
+ },
179
+ "sampling_form": {
180
+ "description": "Edits the heatmap sampling.",
181
+ "name": "Sampling form"
182
+ },
183
+ "settings_collection": {
184
+ "description": "The master switch of collection.",
185
+ "name": "Collection"
186
+ },
187
+ "settings_glance": {
188
+ "description": "The retention periods on one scale.",
189
+ "name": "Retention at a glance"
190
+ },
191
+ "settings_retention": {
192
+ "description": "How long each kind of data is kept.",
193
+ "name": "Retention"
194
+ },
195
+ "settings_sampling": {
196
+ "description": "The share of page loads recording clicks.",
197
+ "name": "Sampling"
198
+ },
199
+ "tops": {
200
+ "description": "Content, acquisition, audience and custom events.",
201
+ "name": "Top lists"
202
+ },
203
+ "tops_acquisition": {
204
+ "description": "Channels, campaigns and referrers.",
205
+ "name": "Top acquisition"
206
+ },
207
+ "tops_audience": {
208
+ "description": "Countries, languages and browsers.",
209
+ "name": "Audience"
210
+ },
211
+ "tops_content": {
212
+ "description": "Top, entry and exit pages.",
213
+ "name": "Top content"
214
+ },
215
+ "tops_events": {
216
+ "description": "The custom events the site sends, goals flagged.",
217
+ "name": "Custom events"
218
+ },
219
+ "traffic": {
220
+ "description": "Sessions or pageviews over time, against the compared period.",
221
+ "name": "Traffic"
222
+ },
223
+ "traffic_pageviews": {
224
+ "description": "Pageviews per day, or per hour over a single day.",
225
+ "name": "Pageviews over time"
226
+ },
227
+ "traffic_row": {
228
+ "description": "The traffic curve and the device split.",
229
+ "name": "Traffic and devices"
230
+ },
231
+ "traffic_sessions": {
232
+ "description": "Sessions per day, or per hour over a single day.",
233
+ "name": "Sessions over time"
234
+ },
235
+ "website_waiting": {
236
+ "description": "Shown while the website has sent no pageview, with a link to the install guide.",
237
+ "name": "First pageview notice"
238
+ },
239
+ "websites_grid": {
240
+ "description": "The tracked websites and their settings.",
241
+ "name": "Websites"
242
+ }
243
+ },
244
+ "builder": {
245
+ "add_event_step": "Add {name} as a step",
246
+ "add_step": "Add a step",
247
+ "add_variation": "Add a variation",
248
+ "copy_name": "Copy of {name}",
249
+ "description": "Create or edit a funnel and its A/B split.",
250
+ "draft_description": "No visitor is assigned until you start the test. Once started, the key and the variations freeze.",
251
+ "draft_title": "Saved as a draft",
252
+ "duplicate": "Duplicate",
253
+ "edit_title": "Edit {name}",
254
+ "end_to_end": "End to end",
255
+ "errors": {
256
+ "key": "Use lowercase letters, digits, hyphens and underscores, starting with a letter or a digit ({max} characters max).",
257
+ "name": "Give the funnel a name.",
258
+ "name_length": "Keep the name to {max} characters.",
259
+ "step_length": "Step {index} is longer than {max} characters.",
260
+ "steps": "Add at least one step.",
261
+ "variations": "Every variation needs its own key: lowercase letters, digits, hyphens and underscores, starting with a letter or a digit ({max} characters max).",
262
+ "website": "Pick a website.",
263
+ "weights": "Weights are numbers, 0 or more, and at least one must be above 0.",
264
+ "window": "Enter a whole number of hours, from 1 to {max}."
265
+ },
266
+ "events_hint": "Send more with dmsMarketing.track(\"name\")",
267
+ "events_title": "Events this site sends",
268
+ "frozen_description": "Its key and variations are frozen: changing them would reassign visitors. The name, steps and window stay editable.",
269
+ "frozen_title": "This test has started",
270
+ "goal_hint": "The last step is the goal.",
271
+ "hours": "hours",
272
+ "key": "Experiment key",
273
+ "key_hint": "What the page asks for: lowercase letters, digits, hyphens and underscores, starting with a letter or a digit.",
274
+ "load_error": "Couldn't load this funnel.",
275
+ "months": "{months} month | {months} months",
276
+ "months_under": "under {months} month",
277
+ "move_down_step": "Move step {n} down",
278
+ "move_up_step": "Move step {n} up",
279
+ "name": "Funnel name",
280
+ "name_placeholder": "Sale page to order",
281
+ "no_events": "No custom event yet.",
282
+ "objective_confirm": {
283
+ "cancel": "Keep editing",
284
+ "confirm": "Save and re-score",
285
+ "description": "Every arm is scored again over the whole test with the new steps and window: the verdict may change. To test a new hypothesis, duplicate the funnel instead.",
286
+ "title": "Change what this running test measures?"
287
+ },
288
+ "objective_description": "Saving re-scores every arm over the whole test with these steps and this window: the verdict may change. To test a new hypothesis, duplicate the funnel instead.",
289
+ "objective_title": "You are changing the goal of a started test",
290
+ "optional": "Optional",
291
+ "or": "or",
292
+ "page_title": "Funnel builder",
293
+ "preview": "Preview · last 30 days",
294
+ "preview_empty": "Add a step to see how many sessions match.",
295
+ "preview_error": "The preview is unavailable right now. You can still save.",
296
+ "preview_invalid": "Fix the steps and the window to see the preview.",
297
+ "remove_step_n": "Remove step {n}",
298
+ "remove_variation_n": "Remove variation {letter}",
299
+ "sample_hint": "Detecting a +20% lift on {rate} needs about {total} entered sessions: {duration} at this traffic. Test a bigger change, or score an earlier step.",
300
+ "save": "Save funnel",
301
+ "save_error": "The funnel could not be saved.",
302
+ "saved": "Funnel saved",
303
+ "sections": {
304
+ "basics": "Basics",
305
+ "split": "A/B split",
306
+ "steps": "Steps",
307
+ "window": "Conversion window"
308
+ },
309
+ "sessions_short": "sessions",
310
+ "snippet_title": "Add to the page · {path}",
311
+ "split_description": "Visitors get an arm server-side; each arm is scored against the steps above.",
312
+ "split_title": "Split traffic between variations",
313
+ "step_kind_label": "Step {n} type",
314
+ "step_rate": "Share of the previous step's sessions",
315
+ "step_value_label": "Step {n} page or event",
316
+ "steps_hint": "1 to {max} · matched in order within one session",
317
+ "subtitle": "Pick pages and events in the order visitors should hit them. The preview scores the last 30 days while you edit.",
318
+ "title": "New funnel",
319
+ "tracked_events": "Events this site sends",
320
+ "tracked_pages": "Tracked pages",
321
+ "triggers": "{count} trigger | {count} triggers",
322
+ "variation_key_label": "Variation {letter} key",
323
+ "variation_weight_label": "Variation {letter} weight",
324
+ "variations": "Variations",
325
+ "variations_hint": "{min} to {max} · the first one is the control",
326
+ "views": "{count} view | {count} views",
327
+ "website": "Website",
328
+ "website_locked": "A started test stays on its website.",
329
+ "weight": "weight",
330
+ "window_hint": "Time allowed after entering step 1, within the same session (it ends after 30 min without activity)",
331
+ "window_label": "Custom window, in hours",
332
+ "window_max": "Max {max} h",
333
+ "window_presets": {
334
+ "1": "1 h",
335
+ "24": "Whole session"
336
+ },
337
+ "step_matched_as": "Matched as {path}",
338
+ "step_unseen": "No raw event matches it in the last 30 days: funnels count raw events, not the daily statistics beside"
339
+ },
340
+ "catalog": {
341
+ "collecting": "Collection is on",
342
+ "paused": "Collection is paused",
343
+ "resume_hint": "Resume it in Marketing › Settings"
344
+ },
345
+ "catalog_category": "Analytics",
4
346
  "category_name": "Marketing",
347
+ "channels": {
348
+ "direct": "Direct",
349
+ "email": "Email",
350
+ "organic": "Organic search",
351
+ "paid": "Paid",
352
+ "referral": "Referral",
353
+ "social": "Social"
354
+ },
355
+ "common": {
356
+ "cancel": "Cancel",
357
+ "data_safe": "Tracking keeps running and the collected data is not affected.",
358
+ "edit": "Edit",
359
+ "load_error": "Couldn't load this block",
360
+ "more": "More",
361
+ "new": "New",
362
+ "retry": "Try again",
363
+ "save_changes": "Save changes"
364
+ },
365
+ "compose": {
366
+ "delta": "{sign}{value} · vs previous period",
367
+ "delta_previous_year": "{sign}{value} · vs previous year",
368
+ "duration_hours": "{hours}h {minutes}m",
369
+ "duration_minutes": "{minutes}m {seconds}s",
370
+ "duration_seconds": "{seconds}s",
371
+ "number": "{value}",
372
+ "percent": "{value}%",
373
+ "points": "{value} pt",
374
+ "range": "{from} – {to}",
375
+ "signed": "{sign}{value}"
376
+ },
377
+ "context": {
378
+ "add_website": "Add a website",
379
+ "comparisons": {
380
+ "none": "No comparison",
381
+ "previous-period": "vs previous period",
382
+ "previous-year": "vs previous year"
383
+ },
384
+ "error": {
385
+ "description": "Tracking keeps running and nothing was lost. Try again in a moment.",
386
+ "title": "Couldn't load your websites"
387
+ },
388
+ "idle": "Last event {ago}",
389
+ "label": "Website and period",
390
+ "live": "Live · last event {ago}",
391
+ "no_website": "No website yet",
392
+ "presets": {
393
+ "custom": "Custom",
394
+ "last-30-days": "30D",
395
+ "last-7-days": "7D",
396
+ "last-90-days": "90D",
397
+ "today": "Today"
398
+ },
399
+ "range_cut": "Only the last {days} days of this range are shown.",
400
+ "refresh": "Refresh",
401
+ "state": {
402
+ "live": "Live",
403
+ "paused": "Tracking paused for this website",
404
+ "waiting": "Waiting for the first event"
405
+ },
406
+ "switch_error": "Couldn't switch to this website",
407
+ "switch_website": "Switch website",
408
+ "utc_days": "Statistics are counted per UTC day: each day shown here starts at {time} your time.",
409
+ "vs_previous": "vs previous period",
410
+ "vs_previous_short": "vs previous",
411
+ "waiting_guide": {
412
+ "action": "Open the install guide",
413
+ "description": "Add the tracker to the site, then open one of its pages: the first figures show up here within a minute.",
414
+ "title": "{name} hasn't received any event yet"
415
+ }
416
+ },
417
+ "devices": {
418
+ "console": "Console",
419
+ "desktop": "Desktop",
420
+ "embedded": "Embedded",
421
+ "mobile": "Mobile",
422
+ "smarttv": "Smart TV",
423
+ "tablet": "Tablet",
424
+ "wearable": "Wearable",
425
+ "xr": "XR headset"
426
+ },
5
427
  "errors": {
428
+ "duplicate_host": "Another website of this workspace already declares this host.",
429
+ "duplicate_host_named": "{site} already declares {host}: a host belongs to one website of the workspace.",
430
+ "duplicate_experiment_key": "Another A/B test on this website already uses this key.",
431
+ "experiment_locked": "This test has started: its key, its variations and its website can no longer change.",
432
+ "funnel_not_found": "This funnel no longer exists.",
6
433
  "invalid_body": "The request body is not valid JSON.",
7
- "invalid_steps": "Invalid funnel steps: check each step's kind and value — 1 to 10 steps.",
8
- "invalid_website": "Invalid website details: check the name, the domain and the extra domains.",
434
+ "invalid_hostname": "Enter a hostname without scheme or path, such as shop.example.com.",
435
+ "invalid_experiment_key": "Invalid key: lowercase letters, digits, hyphens and underscores, starting with a letter or a digit, 64 characters max.",
436
+ "invalid_metric": "Unknown metric.",
9
437
  "invalid_settings": "Invalid settings: check that every value is within its allowed range.",
10
- "website_not_found": "This website does not exist, or belongs to another workspace.",
11
- "funnel_not_found": "This funnel no longer exists.",
438
+ "invalid_status_transition": "This status change is not allowed: a draft can start, a running test can stop and a stopped test can resume.",
439
+ "invalid_steps": "Invalid steps: 1 to 10 steps, each a page or an event of 500 characters max.",
440
+ "invalid_variations": "Invalid variations: 2 to 8, each with its own key, weights of 0 or more with at least one above 0.",
441
+ "invalid_website": "Invalid website details: check the name, the domain and the extra domains.",
12
442
  "missing_path": "A page path is required.",
13
- "invalid_variations": "Invalid variations: 2 to 8 arms, unique lowercase keys, non-negative weights with a positive total.",
14
- "invalid_experiment_key": "Invalid experiment key: lowercase letters, digits, hyphens and underscores only.",
15
- "duplicate_experiment_key": "Another experiment on this website already uses this key.",
16
- "experiment_locked": "Only the name, the steps, the window and the status can change once the A/B split has left draft.",
17
- "invalid_status_transition": "This status change is not allowed: draft goes to running, running goes to stopped."
443
+ "no_website": "This workspace tracks no website yet.",
444
+ "retention_cut": {
445
+ "raw_events": "Save again to confirm. On the hour, the cleanup deletes the raw events older than this ({deleted}).",
446
+ "rollups": "Save again to confirm. On the hour, the cleanup deletes the daily statistics older than this ({deleted}, days × websites).",
447
+ "sessions": "Save again to confirm. On the hour, the cleanup deletes the sessions older than this, and their daily statistics ({deleted}).",
448
+ "snapshots": "Save again to confirm. On the hour, the cleanup deletes the page snapshots older than this ({deleted})."
449
+ },
450
+ "snapshot_retention_above_raw": "Snapshots can't be kept longer than raw events: they would outlive every click they back.",
451
+ "statistics_retention_below_raw": "Statistics can't be kept shorter than raw events: funnels and A/B results would lose the sessions of their events.",
452
+ "website_not_found": "This website does not exist, or belongs to another workspace."
18
453
  },
19
- "overview": {
20
- "title": "Overview",
21
- "subtitle": "Traffic, acquisition and engagement across your tracked sites.",
22
- "description": "Marketing analytics — traffic, funnels and retention.",
454
+ "experiment": {
455
+ "colours_note": "Arms keep their colour everywhere: A is neutral, B is the primary colour. Green and red only mean a verdict.",
456
+ "control_arm": "control arm",
457
+ "exposed": "Exposed sessions",
458
+ "frozen": "Frozen",
459
+ "insufficient_badge": "Not enough data yet",
460
+ "insufficient_description": "Rates on a sample this thin would be noise. A verdict appears once every arm has at least {count} conversions.",
461
+ "insufficient_title": "Too few conversions to compare the arms",
462
+ "lift": "Relative lift",
463
+ "lift_hint": "{letter} vs A at the goal",
464
+ "not_significant": "Not significant",
465
+ "on_site": "On the site",
466
+ "raw_counts": "{exposed} exposed · {goal} reached the goal",
467
+ "ready": "Ready to decide",
468
+ "significant": "Significant at {level}%",
469
+ "srm_failed": "Observed {observed} for a {expected} split. Assignment or exposure reporting is broken: don't trust this reading.",
470
+ "srm_passed": "Split check passed: {observed} observed for {expected} configured",
471
+ "srm_title": "Sample ratio mismatch",
472
+ "steps_title": "Each arm, step by step · share of exposed sessions",
473
+ "truncated_description": "The run holds more raw events than one read covers; the numbers cover its oldest part only.",
474
+ "truncated_title": "Window truncated · verdict withheld",
475
+ "variations": "Variations",
476
+ "verdict": {
477
+ "flat": "No difference you can trust yet",
478
+ "flat_detail": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control. Keep the test running or keep the control.",
479
+ "loser": "Variation {letter} converts {lift} worse than the control",
480
+ "loser_detail": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control. Stop the test and keep the control.",
481
+ "winner": "Variation {letter} converts {lift} better than the control",
482
+ "winner_detail": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control. Stop the test, then ship {key} on the site.",
483
+ "withheld": "Verdict withheld",
484
+ "withheld_detail": "The warning above voids this reading.",
485
+ "early": "Too early to call",
486
+ "early_detail": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control. Significant so far, but a verdict waits for {minDays} days and {minConversions} conversions in every arm ({days} days served): read every day before that, chance alone crowns winners. Keep it running.",
487
+ "flat_detail_stopped": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control: no difference you can trust. Keep the control and remove the variation(\"{experiment}\") call.",
488
+ "loser_detail_stopped": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control. Keep the control and remove the variation(\"{experiment}\") call.",
489
+ "winner_detail_stopped": "{key} reached {goal} in {best} of its exposed sessions, against {control} for the control. Ship {key} on the site, then remove the variation(\"{experiment}\") call."
490
+ },
491
+ "days_served": "in {days} day | in {days} days",
492
+ "lift_interval": "{level}% interval: {low} to {high}",
493
+ "no_exposure_badge": "No exposure yet",
494
+ "no_exposure_description": "The site has not asked for an arm: check that its pages load the tracker and call window.dmsMarketing.variation(\"{key}\").",
495
+ "no_exposure_title": "No visitor of {website} has been exposed since the start",
496
+ "on_site_stopped": "Code to remove",
497
+ "on_site_stopped_hint": "The test is stopped: variation(\"{key}\") answers null and every visitor gets the control. Ship the winner, then remove this call.",
498
+ "p_value": "p-value",
499
+ "p_value_hint": "two-sided z-test · significant below {alpha}",
500
+ "too_early": "Too early to decide",
501
+ "code_show": "show {variation}",
502
+ "code_keep": "null or \"{control}\": keep the current page"
503
+ },
504
+ "first_run": {
505
+ "add": "Add a website",
506
+ "description": "Add your website and paste one script tag. Pageviews, sources and devices show up here within a minute; heatmaps and funnels build on the same data.",
507
+ "eyebrow": "Cookieless · first-party",
508
+ "how": "How tracking works",
509
+ "title": "See how your site is doing, without a cookie banner"
510
+ },
511
+ "funnel": {
512
+ "back": "Back to the funnels",
513
+ "basis": {
514
+ "entered": "% of entered",
515
+ "previous": "% of previous step"
516
+ },
517
+ "converted": "converted",
518
+ "definition": {
519
+ "steps": "Steps",
520
+ "title": "Definition",
521
+ "website": "Website",
522
+ "window": "Window",
523
+ "window_value": "{hours} h after step 1, within the same session"
524
+ },
525
+ "delete": {
526
+ "action": "Delete funnel…",
527
+ "confirm": "Delete funnel",
528
+ "description": "The definition goes; the collected events stay. Type the name to confirm.",
529
+ "done": "Funnel deleted",
530
+ "title": "Delete “{name}”?",
531
+ "description_running": "This test is running: deleting it stops it at once, and its results can no longer be read. Type the name to confirm.",
532
+ "impact_running": "variation(\"{key}\") answers null within a minute: every visitor gets the control."
533
+ },
534
+ "description": "One funnel or A/B test, step by step.",
535
+ "draft_description": "No visitor is assigned until you start the test. Once started, the key and the variations freeze.",
536
+ "draft_title": "Saved as a draft",
537
+ "edit": "Edit",
538
+ "edit_steps": "Edit steps",
23
539
  "empty": {
24
- "title": "No website tracked yet",
25
- "description": "Add a website, then embed the tracker snippet on the site to start collecting."
540
+ "description": "Nobody matched {step} in this period, though the site sent other events. Check the step: a page path matches whatever its case, query string or trailing slash, and a final * matches every path that starts with it.",
541
+ "title": "No session entered this funnel"
26
542
  },
27
- "error": {
28
- "title": "Overview unavailable",
29
- "description": "Loading the marketing data failed. The collected data is unaffected."
543
+ "error": "Couldn't load this funnel",
544
+ "figure_note": "A session counts at step N only if it matched steps 1 to N−1 earlier in the same session, within {hours} h. A session ends after 30 minutes without activity (by default): a longer window changes nothing.",
545
+ "figure_title": "Sessions at each step",
546
+ "goal": "goal",
547
+ "kind": {
548
+ "custom": "Custom event",
549
+ "url": "Page view"
30
550
  },
31
- "retry": "Retry",
551
+ "kind_ab": "A/B test",
552
+ "kind_funnel": "Funnel",
32
553
  "kpis": {
33
- "pageviews": "Pageviews",
34
- "sessions": "Sessions",
35
- "new_visitors": "New visitors",
36
- "custom_events": "Custom events",
37
- "bounce_rate": "Bounce rate",
38
- "avg_session_duration": "Avg. session duration",
39
- "pages_per_session": "Pages / session"
554
+ "biggest_loss": "Biggest loss",
555
+ "completed": "Completed",
556
+ "end_to_end": "End to end",
557
+ "entered": "Entered"
40
558
  },
41
- "traffic": {
42
- "title": "Traffic",
43
- "subtitle": "Pageviews and sessions per day",
44
- "pageviews": "Pageviews",
45
- "sessions": "Sessions",
46
- "empty": "No traffic recorded in this period."
559
+ "lifecycle": {
560
+ "error": "The status could not be changed.",
561
+ "resume": "Resume test",
562
+ "resume_confirm": "Resume test",
563
+ "resume_description": "Visitors get their variations again, bucketed as before; the pause counts for nothing. Resume an accidental or early stop only: resuming until the numbers look significant makes the verdict meaningless.",
564
+ "resume_title": "Resume this test?",
565
+ "running_done": "Test running",
566
+ "start": "Start test",
567
+ "start_code": "The page must ask for the arm: check that the site calls variation(\"{key}\").",
568
+ "start_confirm": "Start test",
569
+ "start_description": "Visitors of {website} start receiving variations within a minute.",
570
+ "start_freezes": "The key and the variations freeze: {key} · {shares}.",
571
+ "start_title": "Start “{name}”?",
572
+ "stop": "Stop test",
573
+ "stop_confirm": "Stop test",
574
+ "stop_description": "Every visitor gets the control again. Results stay readable for the raw-event retention; shipping the winner is a change on the site.",
575
+ "stop_title": "Stop this test?",
576
+ "stopped_done": "Test stopped",
577
+ "start_rescored": "The name, steps and window stay editable, but changing the steps or the window scores the whole test again: the verdict may change.",
578
+ "start_unseen": "{step} was never received on {website} in this period: check its tracking first, or the test measures nothing.",
579
+ "stop_code": "Then ship the winner on the site, or remove the variation(\"{key}\") call: it answers null and the page shows the control.",
580
+ "stop_reading_early": "Reading at the stop: too early to call, the decision rule is not met yet.",
581
+ "stop_reading_flat": "Reading at the stop: no significant difference.",
582
+ "stop_reading_loser": "Reading at the stop: {key} converts {lift} worse than the control (significant).",
583
+ "stop_reading_winner": "Reading at the stop: {key} converts {lift} better than the control (significant).",
584
+ "stop_reading_withheld": "Reading at the stop: verdict withheld, a warning voids this reading.",
585
+ "stop_settles": "Sessions exposed before the stop keep counting their conversions for {hours} h (the conversion window); the numbers settle after that."
586
+ },
587
+ "lost": "{count} session lost · {rate} | {count} sessions lost · {rate}",
588
+ "lost_rate": "{rate} leave before {next}",
589
+ "next": {
590
+ "first": "{rate} of entering sessions never reach {step}",
591
+ "first_hint": "Test a different version of {step} with an A/B split.",
592
+ "heatmap": "Heatmap",
593
+ "none": "No loss between the steps in this period.",
594
+ "split": "Split",
595
+ "title": "Where to look next",
596
+ "worst": "{rate} of sessions leave {step}",
597
+ "worst_hint": "The step with the highest loss rate. Its heatmap shows where they click before leaving.",
598
+ "nobody": "Nobody entered the funnel in this period.",
599
+ "unseen": "Fix the tracking of the step never received first: a loss before it is not a drop-off."
600
+ },
601
+ "of_entered": "of entered",
602
+ "of_previous": "of previous",
603
+ "see_clicks": "see clicks",
604
+ "split": "Split into A/B test",
605
+ "subtitle": "Steps matched in order within one session on {website} · conversion window {hours} h",
606
+ "subtitle_draft": "Key {key} on {website} · draft: no visitor is assigned yet",
607
+ "subtitle_running": "Key {key} on {website} · running since {date} ({days}) · read over its own run, not the selected period",
608
+ "subtitle_stopped": "Key {key} on {website} · ran {date} – {until} · read over its own run, not the selected period",
609
+ "title": "Funnel",
610
+ "truncated_description": "The period holds more raw events than one read covers: these numbers cover its oldest part only. Narrow the period.",
611
+ "truncated_title": "Window truncated",
612
+ "worst_step": "worst step",
613
+ "duplicate": "Duplicate",
614
+ "no_traffic": {
615
+ "description": "There is nothing to count: check the period, or that the tracker is still on the site's pages.",
616
+ "overview": "Open the overview",
617
+ "title": "{website} sent no page view or event in this period"
618
+ },
619
+ "not_found_description": "It may have been deleted. The collected events are not affected.",
620
+ "run_days": "{days} day | {days} days",
621
+ "run_today": "started today",
622
+ "unseen": {
623
+ "badge": "never received",
624
+ "description": "Its 0% is a tracking gap, not a result: check that the page exists, or that the site calls dmsMarketing.track() with this exact name.",
625
+ "title": "{step} was never received on {website} in this period"
626
+ },
627
+ "sessions_count": "{count} session | {count} sessions"
628
+ },
629
+ "funnels": {
630
+ "column": {
631
+ "created": "Created",
632
+ "name": "Name",
633
+ "website": "Website"
47
634
  },
635
+ "columns": {
636
+ "conversion": "Conversion",
637
+ "entered": "Entered",
638
+ "kind": "Kind",
639
+ "name": "Name",
640
+ "status": "Status",
641
+ "steps": "Steps",
642
+ "completed_of_entered": "Completed / entered"
643
+ },
644
+ "count": "{count} funnel | {count} funnels",
645
+ "description": "Where visitors drop off, step by step, and which variation converts. Results are computed from raw events, so a new funnel scores past traffic at once.",
646
+ "empty": {
647
+ "blank": "Blank",
648
+ "description": "A funnel is a list of pages or events matched in order within a session. It scores past traffic as soon as you save it. These templates follow the journeys {website} already records.",
649
+ "entering": "{count} session would enter | {count} sessions would enter",
650
+ "scratch": "Start from scratch",
651
+ "scratch_description": "Pick pages and events one by one, with a live count of sessions at each step.",
652
+ "template": "Template",
653
+ "title": "No funnel on {website} yet",
654
+ "title_plain": "No funnel on this website yet",
655
+ "description_none": "The raw events of {website} over this period hold no custom event to build a template from. Start from scratch, or track an event with dmsMarketing.track() first.",
656
+ "description_waiting": "{website} hasn't sent anything yet. Install the tracker first: funnels score what it collects.",
657
+ "install": "Open the install guide"
658
+ },
659
+ "form": {
660
+ "add_step": "Add a step",
661
+ "add_variation": "Add a variation",
662
+ "event_placeholder": "signup_submitted",
663
+ "experiment": "A/B split",
664
+ "experiment_description": "Serve variations of the page to visitors, assigned server-side, and score each arm against the steps above.",
665
+ "experiment_toggle": "Split traffic between variations",
666
+ "key": "hero-cta",
667
+ "key_description": "The identifier page code passes to dmsMarketing.variation(…). Lowercase letters, digits, hyphens and underscores.",
668
+ "key_label": "Experiment key",
669
+ "name": "Funnel name",
670
+ "steps": "Steps",
671
+ "steps_description": "Each step is a page URL or a custom event, matched in order within a session — a single step counts conversions on its own.",
672
+ "url_placeholder": "/pricing",
673
+ "variation_key": "variation-key",
674
+ "variations": "Variations",
675
+ "variations_description": "2 to 8 arms with relative weights; the first arm is the control.",
676
+ "window": "Conversion window (hours)"
677
+ },
678
+ "list_title": "Funnels",
679
+ "locked_hint": "Key and variations are frozen outside draft — weights moved mid-run would silently reassign visitors.",
680
+ "new": "New funnel",
681
+ "no_match": "Nothing matches these filters.",
682
+ "note": "Steps match in order within one session. A/B tests are read over their own run, not the selected period.",
683
+ "open": "Open report",
684
+ "results": {
685
+ "control": "control"
686
+ },
687
+ "row": {
688
+ "draft": "{key} · A/B · {count} variation | {key} · A/B · {count} variations",
689
+ "leader": "{key} · {letter} leads by {lift}",
690
+ "no_leader": "{key} · no leader yet",
691
+ "no_traffic": "{key} · no visitor exposed yet",
692
+ "plain": "{steps} step · window {hours} h | {steps} steps · window {hours} h",
693
+ "since": "since {date}",
694
+ "control_leads": "{key} · the control leads",
695
+ "unseen": "{step} never received in this period"
696
+ },
697
+ "status": {
698
+ "draft": "Draft",
699
+ "running": "Running",
700
+ "stopped": "Stopped"
701
+ },
702
+ "step_kind": {
703
+ "custom": "event",
704
+ "url": "page view"
705
+ },
706
+ "tabs": {
707
+ "ab": "A/B tests",
708
+ "all": "All",
709
+ "funnels": "Funnels"
710
+ },
711
+ "title": "Funnels & A/B tests",
712
+ "winner": {
713
+ "description": "Lift between {low} and {high} (95% interval), over {exposed} exposed sessions in {days} day. Stop the test, then ship the winner on the site. | Lift between {low} and {high} (95% interval), over {exposed} exposed sessions in {days} days. Stop the test, then ship the winner on the site.",
714
+ "review": "Review results",
715
+ "title": "{name} has a winner: it converts {lift} better"
716
+ },
717
+ "actions": {
718
+ "edit": "Edit",
719
+ "duplicate": "Duplicate",
720
+ "delete": "Delete…"
721
+ },
722
+ "coverage": {
723
+ "period_title": "Funnels cover this period from {date} only",
724
+ "previous_title": "No comparison with the previous period",
725
+ "description": "Funnels are computed from raw events, kept from {date} on: earlier days count nothing, and a comparison window they don't cover is left out rather than shown as a huge change."
726
+ }
727
+ },
728
+ "install": {
729
+ "add": "Add website",
730
+ "allow": "Allow this host",
731
+ "allow_confirm": {
732
+ "title": "Allow {host}?",
733
+ "description": "We haven't checked that this domain is yours: anyone can send page views naming any host. Allow it only if you know it, such as your staging site; its visits then count in this website's statistics.",
734
+ "confirm": "Allow",
735
+ "cancel": "Cancel"
736
+ },
737
+ "allow_error": "The host could not be added.",
738
+ "allowed": "{host} is now accepted",
739
+ "and_subdomains": "and its subdomains.",
740
+ "back": "Back to the websites",
741
+ "check_again": "Check again",
742
+ "connected": "Pageview received on {when}",
743
+ "copy_instructions": "Copy instructions for a developer",
744
+ "create_error": "The website could not be added. Check the name and the domain.",
745
+ "description": "Add a website and check its tracker.",
746
+ "developer_note": "Please add the analytics tag to every page of {name} ({domain}), before {'<'}/body> or inside {'<'}head>:\n\n{snippet}\n\nIt sets no cookie and stores no IP address.",
747
+ "done": "Done",
748
+ "flavors": {
749
+ "gtm": "Google Tag Manager",
750
+ "html": "HTML",
751
+ "nuxt": "Nuxt"
752
+ },
753
+ "listening": "Listening for the first pageview from {domain}…",
754
+ "listening_again": "Listening for a new pageview from {domain}…",
755
+ "listening_again_since": "Only a pageview sent after {when} counts: open or reload a page of the site.",
756
+ "listening_since": "Added on {when} · keeps listening if you leave this page",
757
+ "live_description": "Report business events to build funnels on them:",
758
+ "live_title": "Once it's live",
759
+ "missing": {
760
+ "description": "It was deleted, or the link is wrong.",
761
+ "title": "This website doesn't exist"
762
+ },
763
+ "open_overview": "Open the overview",
764
+ "open_site": "Open the site",
765
+ "option_dnt": "\"false\" to ignore the browser's Do Not Track signal.",
766
+ "option_host": "The origin beacons go to, when it is not the script's.",
767
+ "option_sample": "0 to 1: share of page loads recording clicks and scrolls, overriding the module setting.",
768
+ "options": "Options",
769
+ "options_hint": "Do Not Track, sampling",
770
+ "poll_error": "The connection check failed; it keeps trying.",
771
+ "records": {
772
+ "clicks": "Clicks and scroll depth",
773
+ "clicks_hint": "On a sample of page loads, for heatmaps.",
774
+ "pageviews": "Pageviews and sources",
775
+ "pageviews_hint": "Including SPA navigations and all five utm_* parameters.",
776
+ "privacy": "Nothing personal",
777
+ "privacy_hint": "No cookie, no IP, no user agent stored. Do Not Track honoured.",
778
+ "snapshots": "Page snapshots, if you enable them",
779
+ "snapshots_hint": "Form fields always masked."
780
+ },
781
+ "records_title": "What the tracker records",
782
+ "refused": "{count} event refused from {host} | {count} events refused from {host}",
783
+ "refused_hint": "That host isn't declared for this website. Declare it, or install on the production site.",
784
+ "step1": "Add the website",
785
+ "step2": "Paste the script on every page",
786
+ "step2_description": "Before {'<'}/body> or inside {'<'}head>. It is the same for every page, loads deferred and sets no cookie.",
787
+ "step3": "Check the connection",
788
+ "step3_description": "Open any page of the site once the tag is live. This page updates by itself.",
789
+ "subtitle": "Three steps, about five minutes. Nothing to configure on the site beyond one script tag.",
790
+ "title": "Install the tracker",
791
+ "title_for": "Install the tracker on {name}"
792
+ },
793
+ "module_description": "Cookieless analytics: traffic, heatmaps, funnels and A/B tests.",
794
+ "nav": {
795
+ "analytics": "Analytics",
796
+ "conversion": "Conversion",
797
+ "setup": "Setup"
798
+ },
799
+ "overview": {
800
+ "description": "How the site is doing: traffic, where visitors come from and what they do. Cookieless, first-party, read from daily rollups.",
48
801
  "devices": {
49
- "title": "Devices",
50
- "empty": "No device data in this period."
802
+ "empty": "No device recorded in this period.",
803
+ "title": "Devices"
51
804
  },
52
805
  "groups": {
53
- "empty": "Nothing recorded in this period.",
54
- "content": {
55
- "title": "Content",
56
- "view_all": "View tracked pages",
57
- "tabs": {
58
- "pages": "Top pages",
59
- "entry": "Entries",
60
- "exit": "Exits"
61
- }
62
- },
63
806
  "acquisition": {
64
- "title": "Acquisition",
65
- "view_all": "View sources",
807
+ "note": "Email counts tagged newsletter links",
66
808
  "tabs": {
809
+ "campaigns": "Campaigns",
67
810
  "channels": "Channels",
68
811
  "referrers": "Referrers"
69
- }
812
+ },
813
+ "title": "Acquisition",
814
+ "value": "Sessions",
815
+ "view_all": "Open acquisition"
70
816
  },
71
817
  "audience": {
72
- "title": "Audience",
818
+ "note": "The visitor's IP address is never stored",
73
819
  "tabs": {
74
820
  "browsers": "Browsers",
75
- "languages": "Languages",
76
- "countries": "Countries"
77
- }
821
+ "countries": "Countries",
822
+ "languages": "Languages"
823
+ },
824
+ "title": "Audience",
825
+ "value": "Sessions"
78
826
  },
827
+ "content": {
828
+ "note": "Click a page to see its heatmap",
829
+ "tabs": {
830
+ "entry": "Entry pages",
831
+ "exit": "Exit pages",
832
+ "pages": "Top pages"
833
+ },
834
+ "title": "Content",
835
+ "value": "Views",
836
+ "view_all": "Open heatmaps"
837
+ },
838
+ "empty": "Nothing recorded in this period.",
79
839
  "events": {
80
- "title": "Events",
81
- "view_all": "View funnels"
840
+ "goal": "Goal",
841
+ "note": "Goal: the last step of a funnel",
842
+ "tabs": {
843
+ "events": "Custom events"
844
+ },
845
+ "title": "Custom events",
846
+ "value": "Triggers",
847
+ "view_all": "Build a funnel from these events"
82
848
  }
83
- }
84
- },
85
- "campaigns": {
86
- "title": "Sources",
87
- "description": "Acquisition channels and UTM campaigns of your tracked sites.",
88
- "subtitle": "Where sessions come from: channels and UTM campaigns.",
89
- "empty": {
90
- "title": "No website tracked yet",
91
- "description": "Add a website, then embed the tracker snippet on the site to start collecting."
92
849
  },
93
- "error": {
94
- "title": "Sources unavailable",
95
- "description": "Loading the acquisition data failed. The collected data is unaffected."
850
+ "kpis": {
851
+ "custom-events": "Custom events",
852
+ "new-visitors": "New visitors",
853
+ "pageviews": "Pageviews",
854
+ "sessions": "Sessions"
96
855
  },
97
- "retry": "Retry",
98
- "channels": {
99
- "title": "Channels",
100
- "subtitle": "Sessions by acquisition channel",
101
- "empty": "No channel data in this period.",
102
- "direct": "Direct",
103
- "organic": "Organic search",
104
- "social": "Social",
105
- "referral": "Referral",
106
- "paid": "Paid"
107
- },
108
- "table": {
109
- "title": "UTM campaigns",
110
- "subtitle": "Sessions by source, medium and campaign",
111
- "source": "Source",
112
- "medium": "Medium",
113
- "campaign": "Campaign",
114
- "sessions": "Sessions",
115
- "search_placeholder": "Filter campaigns…",
116
- "empty": "No UTM-tagged session in this period.",
117
- "truncated": "Only the top campaigns are shown — narrow the filter to see the rest."
856
+ "quality": {
857
+ "avg_session_duration": "Avg. session duration",
858
+ "bounce_rate": "Bounce rate",
859
+ "pages_per_session": "Pages / session"
118
860
  },
119
- "top": {
120
- "referrers": "Top referrers",
121
- "terms": "Top UTM terms",
122
- "contents": "Top UTM contents",
123
- "empty": "Nothing recorded in this period."
124
- }
861
+ "title": "Overview",
862
+ "traffic": {
863
+ "compared_period": "Compared period",
864
+ "pageviews_title": "Pageviews over time",
865
+ "series": {
866
+ "custom-events": "Custom events",
867
+ "in_progress": "In progress (partial)",
868
+ "new-visitors": "New visitors",
869
+ "pageviews": "Pageviews",
870
+ "previous": "Previous period",
871
+ "previous_year": "Previous year",
872
+ "sessions": "Sessions"
873
+ },
874
+ "sessions_title": "Sessions over time",
875
+ "tabs": {
876
+ "pageviews": "Pageviews",
877
+ "sessions": "Sessions"
878
+ },
879
+ "this_period": "This period"
880
+ },
881
+ "view_funnels": "View funnels"
125
882
  },
126
883
  "pages": {
127
- "title": "Tracked pages",
128
- "subtitle": "Pages your visitors actually loaded, where they clicked, and how far they scrolled.",
129
- "description": "Tracked pages — visited paths, clicks and scroll depth of each one.",
130
- "inventory": "Pages",
131
- "search_placeholder": "Filter, or type a path…",
132
- "row_hint": {
133
- "views": "{count} view | {count} views",
134
- "sampled": "~{count} sampled | ~{count} sampled"
135
- },
136
- "select_hint": "Select a page to see its clicks and scroll depth.",
137
- "to_funnels": "Funnels",
138
- "clicks": "{count} click | {count} clicks",
139
- "pageviews": "{count} view | {count} views",
140
- "overlay": {
141
- "clicks": "Clicks",
142
- "scroll": "Scroll"
143
- },
144
- "scroll": {
145
- "views": "{count} scrolled view | {count} scrolled views",
146
- "truncated": "Partial scroll depth",
147
- "truncated_hint": "This page recorded more scrolls than one read walks through. Narrow the period to see them all.",
148
- "reach_line": "{percent}% of visitors see down to here",
149
- "fold_line": "Bottom of the first screen"
150
- },
151
- "error": "Loading the tracked pages failed.",
152
- "error_hint": "The collected data is unaffected.",
153
- "retry": "Retry",
154
- "truncated": "Partial heatmap",
155
- "truncated_hint": "This page recorded more clicks than one heatmap reads. Narrow the period to see them all.",
156
- "list_truncated": "Long inventory",
157
- "list_truncated_hint": "More pages were visited than this list shows. Filter to reach the rest.",
158
- "no_website": {
159
- "title": "No website tracked yet",
160
- "description": "Add a website, then embed the tracker snippet on the site to start collecting."
161
- },
162
- "no_pages": {
163
- "title": "No page visited in this period",
164
- "description": "Nothing was recorded for this site over the selected window. You can still type a path to inspect it."
165
- },
166
- "tracking_off": {
167
- "title": "Collection is disabled",
168
- "description": "The tracker is switched off in the module settings: nothing new is being recorded, no page snapshot either."
169
- },
884
+ "anchoring_note": "Clicks stick to the element they hit, so they stay on the right button at every width.",
885
+ "clicks_unit": "click | clicks",
886
+ "count": "{count} page | {count} pages",
887
+ "count_of": "{count} of {total} page | {count} of {total} pages",
888
+ "density": "Click density",
889
+ "density_few": "Few",
890
+ "density_many": "Many",
891
+ "description": "Pages your visitors actually loaded, where they clicked and how far they scrolled.",
170
892
  "empty": {
171
- "title": "No click recorded on this page",
172
893
  "no_clicks": "Visitors loaded this page but no click was captured over the selected period.",
894
+ "no_scrolls": "Visitors loaded this page but no scroll depth was measured over the selected period.",
895
+ "none_sampled": "None of this page's views was sampled for clicks and scrolls over the selected period. Widen the period, or raise the sampling (module settings, or data-heatmap-sample in the snippet).",
896
+ "none_sampled_rate": "None of this page's views was sampled over the selected period: this site records clicks and scrolls on {rate} of page loads. Widen the period, or raise the sampling (module settings, or data-heatmap-sample in the snippet).",
173
897
  "scroll_title": "No scroll measured on this page",
174
- "no_scrolls": "Visitors loaded this page but no depth was measured over the selected period — a page that fits the screen never scrolls, so it measures nothing.",
175
- "sampled_out": "Clicks and scrolls are sampled on {rate}% of page loads, and this page is too quiet for that rate to have caught any. Raise the sampling in the settings, or widen the period.",
898
+ "title": "No click recorded on this page",
176
899
  "tracking_off": "Collection is disabled in the module settings, so no click or scroll is being recorded."
177
900
  },
901
+ "list_truncated": "Only the first {count} pages are listed. Filter, or type a path, to find another.",
902
+ "missing_hint": "Missing a page? Type its exact path above.",
903
+ "more_list": "More list actions",
904
+ "most_clicked": "Most clicked",
905
+ "most_clicked_empty": "No element anchored yet: clicks show on the page only.",
906
+ "no_match": {
907
+ "description": "No page listed over this period. Press Enter to inspect the path anyway.",
908
+ "inspect": "Inspect {path}",
909
+ "title": "No page matches this filter"
910
+ },
911
+ "no_pages": {
912
+ "description": "You can still type a path in the filter to inspect it.",
913
+ "title": "No page visited on {website} in this period"
914
+ },
915
+ "overlay": {
916
+ "clicks": "Clicks",
917
+ "label": "Overlay",
918
+ "scroll": "Scroll"
919
+ },
178
920
  "preview": {
179
- "snapshots_off": "Page snapshots are off for this site",
180
- "snapshots_off_hint": "Clicks and scrolls are still counted, but the heatmap is only drawn over a snapshot of the page as visitors see it: its text and images are then stored, every form field masked, for the snapshot retention set in the module settings. Enable it if that fits this site's privacy commitments.",
921
+ "all_masked": "All text masked",
922
+ "approximate_layout": "Showing the {layout} snapshot at {width}px",
923
+ "approximate_layout_hint": "No visitor has been captured at this width yet, so the layout is reflowed. Clicks still land on their element.",
181
924
  "enable_snapshots": "Enable page snapshots",
182
- "no_snapshot": "No snapshot of this page yet",
183
- "no_snapshot_hint": "The next sampled visit captures one — snapshots share the {rate}% click sampling — and it is refreshed daily. The heatmap is drawn as soon as it exists; the figures above are already exact.",
184
- "approximate_layout": "Snapshot from another layout",
185
- "approximate_layout_hint": "No visitor has been captured at this width yet, so the {layout} snapshot is reflowed here. Anchored clicks still land on their element.",
186
- "too_heavy": "Page too heavy to capture",
187
- "too_heavy_hint": "The last sampled visit serialised {size} MiB of HTML and CSS, past the {limit} MiB upload cap, so this page has no backdrop. The click and scroll figures above are unaffected. A visit retries daily: lighter markup — or a heavy section marked data-dms-marketing-block — brings it under the cap.",
188
- "captured_at": "snapshot from {date}",
189
- "attempted_at": "capture attempted {date}",
190
- "options": "Snapshot options",
191
- "snapshots_enabled": "Page snapshots",
192
- "snapshots_enabled_hint": "Capture the page as visitors see it, to draw the heatmap over it. Stores page content; changing this discards the site's snapshots.",
925
+ "fields_masked": "Text visible, form fields masked",
926
+ "layout": "Layout",
927
+ "layout_desktop": "Desktop",
928
+ "layout_phone": "Phone",
929
+ "layout_tablet": "Tablet (portrait)",
193
930
  "mask_text": "Mask all text",
194
- "mask_text_hint": "Replace every character of captured text with a placeholder. Form fields are always masked.",
931
+ "more": "More page actions",
932
+ "no_backdrop": "Nothing to draw the clicks on yet",
933
+ "no_backdrop_hint": "The counts in the header are exact; the heatmap appears once a snapshot is captured.",
934
+ "no_snapshot": "No snapshot of this page yet",
935
+ "no_snapshot_hint": "The next sampled visit captures one. The numbers above are already exact.",
936
+ "no_snapshot_hint_rate": "The next sampled visit captures one ({rate} of page loads are sampled on this site). The numbers above are already exact.",
937
+ "open_in_tab": "Open",
195
938
  "options_error": "Saving the snapshot options failed. Retry in a moment.",
196
939
  "overflow": "Page wider than the chosen layout",
197
940
  "overflow_hint": "The snapshot lays out at {width}px. The overlay follows the document, so it stays aligned; the backdrop may be cut off.",
198
- "layout_desktop": "Desktop",
199
- "layout_tablet": "Tablet (portrait)",
200
- "layout_phone": "Phone",
201
- "height_override": "Render height (px)",
202
- "open_in_tab": "Open",
203
941
  "oversized": "Page too tall to preview accurately",
204
- "oversized_hint": "The document exceeds the largest surface that can be drawn, so the overlay and the backdrop no longer line up. The click figures are unaffected."
942
+ "oversized_hint": "The document exceeds the largest surface that can be drawn, so the overlay and the backdrop no longer line up. The click figures are unaffected.",
943
+ "snapshots_enabled": "Page snapshots",
944
+ "snapshots_off": "Page snapshots are off for this site",
945
+ "snapshots_off_hint": "Clicks and scrolls are still counted, but the heatmap is only drawn over a snapshot of the page as visitors see it: its text and images are then stored, every form field masked, for the snapshot retention set in the module settings. Enable it if that fits this site's privacy commitments.",
946
+ "status_line": "Snapshot captured {date} · {layout} {width}px",
947
+ "too_heavy": "Page too heavy to capture",
948
+ "too_heavy_hint": "The last sampled visit serialised {size} MiB of HTML and CSS, past the {limit} MiB upload cap, so this page has no backdrop. The click and scroll figures above are unaffected. A visit retries daily: lighter markup — or a heavy section marked data-dms-marketing-block — brings it under the cap."
205
949
  },
206
950
  "reset": {
207
- "page_button": "Reset this page's heatmap",
208
- "site_button": "Reset heatmaps",
209
- "page_title": "Reset this page's heatmap?",
210
- "page_description": "Every click and scroll depth recorded on {path} will be deleted, whatever the period — useful after the page changed. Pageviews, sessions and funnels are unaffected.",
211
- "site_title": "Reset every heatmap of this site?",
212
- "site_description": "Every click and scroll depth recorded on {name} will be deleted, on every page and whatever the period. Pageviews, sessions and funnels are unaffected.",
213
- "confirm": "Delete the data",
214
- "done": "{count} event deleted | {count} events deleted",
215
- "error": "Resetting the heatmap failed. Retry in a moment."
216
- }
217
- },
218
- "funnels": {
219
- "title": "Funnels & A/B",
220
- "description": "Conversion funnels — where visitors drop off, step by step — and the A/B splits scored against them.",
221
- "subtitle": "Where visitors drop off, and which variation converts.",
222
- "list": "Funnels",
223
- "summary": "{entered} session entered · {rate}% converted | {entered} sessions entered · {rate}% converted",
224
- "lost": "{count} session lost | {count} sessions lost",
225
- "retained": "retained",
226
- "sessions": "sessions",
227
- "goal_suffix": "goal",
228
- "select_hint": "Select a funnel to see its figure.",
229
- "see_heatmap": "See the clicks on this page",
230
- "results_error": "Loading the funnel results failed.",
231
- "error": "Loading the funnels failed.",
232
- "error_hint": "The collected data is not affected.",
233
- "retry": "Retry",
234
- "no_website": {
235
- "title": "No website tracked yet",
236
- "description": "Add a website, then embed the tracker snippet on the site to start collecting."
951
+ "and": "{first} and {second}",
952
+ "confirm": "Delete the heatmap",
953
+ "confirm_count": "Delete {what}",
954
+ "done": "Deleted: {what}.",
955
+ "events": "{count} event | {count} events",
956
+ "impact_events": "Clicks and scroll depths, every period",
957
+ "impact_kept": "Traffic, sessions and funnels are not affected",
958
+ "impact_snapshots": "Page snapshots",
959
+ "page_button": "Reset this page…",
960
+ "page_description": "Deletes the clicks, scroll depths and snapshots of this page, whatever the period. Type its path to confirm.",
961
+ "page_done": "Heatmap of the page reset",
962
+ "page_title": "Reset the heatmap of this page?",
963
+ "site_button": "Reset every heatmap…",
964
+ "site_description": "Deletes every click, scroll depth and page snapshot of the website, whatever the period. Type the domain to confirm.",
965
+ "site_done": "Heatmaps of {name} reset",
966
+ "site_title": "Reset the heatmaps of {name}?",
967
+ "snapshots": "{count} snapshot | {count} snapshots"
237
968
  },
238
- "empty": {
239
- "title": "No funnel on this site yet",
240
- "description": "Create your first funnel: each step is a page URL or a custom event, matched in order within a session. Split it into A/B variations whenever you want to test a change against it."
241
- },
242
- "no_sessions": {
243
- "title": "No session entered this funnel",
244
- "description": "No session matched the first step over the selected period."
245
- },
246
- "new": "New funnel",
247
- "create_title": "Create a funnel",
248
- "edit_title": "Edit the funnel",
249
- "edit": "Edit",
250
- "start": "Start",
251
- "stop": {
252
- "button": "Stop",
253
- "title": "Stop this split?",
254
- "description": "Every visitor goes back to the control variation within a minute, pages already open at their next reload. Measurement stops and the results stay readable.",
255
- "confirm": "Stop"
256
- },
257
- "resume": {
258
- "button": "Resume",
259
- "title": "Resume this split?",
260
- "description": "The split resumes with the same variations and keeps the sessions already exposed; resuming to get another verdict can increase false positives.",
261
- "confirm": "Resume"
262
- },
263
- "more_actions": "More actions",
264
- "locked_hint": "Key and variations are frozen outside draft — weights moved mid-run would silently reassign visitors.",
265
- "status_updated": "Status updated.",
266
- "status_error": "The status change was refused.",
267
- "delete": {
268
- "button": "Delete",
269
- "title": "Delete this funnel?",
270
- "description": "“{name}” and its figure will disappear. The collected events and exposures stay until their retention passes.",
271
- "confirm": "Delete",
272
- "done": "Funnel deleted.",
273
- "error": "The deletion failed."
274
- },
275
- "steps_count": "{count} step | {count} steps",
276
- "variations_count": "{count} variation | {count} variations",
277
- "status": {
278
- "draft": "Draft",
279
- "running": "Running",
280
- "stopped": "Stopped"
969
+ "row_clicks": "{count} click | {count} clicks",
970
+ "row_views": "{count} view | {count} views",
971
+ "sampled_unit": "sampled view | sampled views",
972
+ "sampling_note": "Clicks and scrolls were recorded on {rate} of page loads over this period.",
973
+ "scroll": {
974
+ "fold_line": "Bottom of the first screen",
975
+ "legend_all": "All views",
976
+ "legend_few": "Few",
977
+ "legend_title": "Scroll depth",
978
+ "lines_hint": "Dashed lines: how far 75%, 50% and 25% of the sampled views get. Point at the page to read any depth.",
979
+ "mark": "{percent}%",
980
+ "median": "Half of the sampled views reach {depth}% of the page.",
981
+ "reach_line": "{percent}% of sampled views reach here",
982
+ "truncated": "Partial scroll depth",
983
+ "truncated_hint": "This page recorded more scrolls than one read walks through. Narrow the period to see them all."
281
984
  },
282
- "step_kind": {
283
- "url": "page view",
284
- "custom": "event"
985
+ "search_placeholder": "Filter, or type a path…",
986
+ "select_hint": "Pick a page to see its heatmap",
987
+ "sort": "Sort by",
988
+ "strip": {
989
+ "collection_off": "Collection is off",
990
+ "collection_off_hint": "The tracker is switched off in settings: no new click, scroll or snapshot is recorded on any site.",
991
+ "open_settings": "Open settings"
285
992
  },
286
- "column": {
287
- "website": "Website",
288
- "name": "Name",
289
- "created": "Created"
993
+ "title": "Pages & heatmaps",
994
+ "tracking_off": {
995
+ "description": "The tracker is switched off in the module settings: nothing new is being recorded, no page snapshot either.",
996
+ "title": "Collection is disabled"
290
997
  },
291
- "form": {
292
- "name": "Funnel name",
293
- "steps": "Steps",
294
- "steps_description": "Each step is a page URL or a custom event, matched in order within a session — a single step counts conversions on its own.",
295
- "url_placeholder": "/pricing",
296
- "event_placeholder": "signup_submitted",
297
- "add_step": "Add a step",
298
- "window": "Conversion window (hours)",
299
- "experiment": "A/B split",
300
- "experiment_description": "Serve variations of the page to visitors, assigned server-side, and score each arm against the steps above.",
301
- "experiment_toggle": "Split traffic between variations",
302
- "key_label": "Experiment key",
303
- "key": "hero-cta",
304
- "key_description": "The identifier page code passes to dmsMarketing.variation(…). Lowercase letters, digits, hyphens and underscores.",
305
- "variations": "Variations",
306
- "variations_description": "2 to 8 arms with relative weights; the first arm is the control.",
307
- "variation_key": "variation-key",
308
- "add_variation": "Add a variation"
998
+ "truncated": "Partial heatmap",
999
+ "truncated_hint": "This page recorded more clicks than one heatmap reads. Narrow the period to see them all.",
1000
+ "used_in": "Used in",
1001
+ "views": "Views",
1002
+ "views_unit": "view | views",
1003
+ "waiting": {
1004
+ "action": "Check the installation",
1005
+ "description": "Pages and heatmaps appear once the tracker is on the site and a first page is loaded.",
1006
+ "title": "{website} hasn't received a visit yet"
309
1007
  },
310
- "results": {
311
- "control": "control",
312
- "arm_control": "control {letter}",
313
- "arm_variation": "variation {letter}",
314
- "end_to_end": "{value} end to end",
315
- "exposed": "{count} exposed session | {count} exposed sessions",
316
- "meta_frozen": "{split} split, frozen",
317
- "meta_draft": "{split} split · no traffic assigned yet",
318
- "window_running": "running since {since}",
319
- "window_stopped": "run {since} – {until}",
320
- "window_runs": "{count} run | {count} runs",
321
- "verdict": {
322
- "lift": "Relative lift",
323
- "confidence": "Confidence",
324
- "sessions": "Sessions"
325
- },
326
- "reached_goal": "{count} session reached the goal | {count} sessions reached the goal",
327
- "significant": "Significant at 95%",
328
- "not_significant": "Not significant",
329
- "insufficient": "Not enough data",
330
- "insufficient_data": {
331
- "title": "Not enough data yet",
332
- "description": "Too few sessions to compare the arms — rates on a sample this thin would be noise, not signal. Raw counts below; verdicts appear once every arm has enough outcomes."
333
- },
334
- "srm_warning": {
335
- "title": "Sample ratio mismatch",
336
- "description": "The observed split across arms is far from the configured weights — assignment or exposure reporting may be broken; read these numbers with suspicion."
337
- },
338
- "truncated": {
339
- "title": "Window truncated",
340
- "description": "The raw-event window hit its cap: numbers cover the oldest part of the period only, and A/B verdicts are withheld."
341
- },
342
- "empty": {
343
- "title": "No exposure yet",
344
- "description": "No session was exposed to this experiment while it was running. Its numbers are read over its own run, not over the selected period."
345
- }
346
- }
1008
+ "quoted": "“{text}”"
1009
+ },
1010
+ "quick_actions": {
1011
+ "add_website": "Add a website to track",
1012
+ "new_funnel": "New funnel or A/B test"
347
1013
  },
348
1014
  "settings": {
1015
+ "collection": {
1016
+ "collecting": "Collecting",
1017
+ "impact_delay": "Browsers holding the cached script stop within an hour",
1018
+ "impact_script": "The tracker script turns into a stub that records nothing, on every site",
1019
+ "impact_tests": "Running A/B tests stop assigning variations",
1020
+ "pause": "Pause collection…",
1021
+ "pause_confirm": "Pause collection",
1022
+ "pause_description": "Nothing new is recorded until you resume. What was collected stays.",
1023
+ "pause_title": "Pause collection on every website?",
1024
+ "paused": "Paused",
1025
+ "paused_toast": "Collection paused",
1026
+ "resume": "Resume collection",
1027
+ "resumed": "Collection resumed",
1028
+ "summary": "{websites} website · {sessions} sessions in 30 days | {websites} websites · {sessions} sessions in 30 days"
1029
+ },
1030
+ "description": "Collection, retention and sampling for every website of the workspace. Per-site capture options live on Websites.",
1031
+ "glance": {
1032
+ "days": "{count} day | {count} days",
1033
+ "raw": "Raw events",
1034
+ "snapshots": "Snapshots",
1035
+ "statistics": "Statistics"
1036
+ },
1037
+ "heatmap_sample": "Heatmap sampling (%)",
1038
+ "heatmap_sample_description": "0 to 100. At 0, no heatmap records anything, except on sites whose snippet sets its own rate.",
1039
+ "raw_retention": "Raw events (days)",
1040
+ "raw_retention_description": "Funnels, heatmaps and A/B results read this window. Dashboards use daily rollups. 1 to 366.",
1041
+ "retention_saved": "Retention saved. The next hourly cleanup applies it, on the hour.",
1042
+ "sampling_saved": "Sampling saved. Visitors get it within an hour.",
1043
+ "sections": {
1044
+ "collection": "Collection",
1045
+ "collection_description": "Master switch for every website. Off, the tracker script records nothing — pages calling it keep working — and nothing new is recorded.",
1046
+ "glance": "At a glance",
1047
+ "glance_description": "The three retention periods on one 760-day scale, the statistics ceiling.",
1048
+ "retention": "Retention",
1049
+ "retention_description": "A cleanup runs every hour, on the hour, and deletes what is older. Lowering a value that deletes data asks you to save twice. Empty a field to use the default.",
1050
+ "sampling": "Sampling",
1051
+ "sampling_description": "Share of page loads that record clicks, scrolls and, on sites that enable them, page snapshots. Lower it on busy sites. The tracker script is cached: visitors get a change within an hour."
1052
+ },
1053
+ "snapshot_retention": "Page snapshots (days)",
1054
+ "snapshot_retention_description": "Backdrops of the heatmaps; they hold page content. Never longer than the raw events.",
1055
+ "stats_retention": "Statistics (days)",
1056
+ "stats_retention_description": "Daily rollups and sessions behind the overview and acquisition pages. Never shorter than the raw events, 760 at most (25 months).",
349
1057
  "title": "Settings",
350
- "description": "Collection, retention and sampling configuration.",
351
1058
  "tracker_enabled": "Collection enabled",
352
- "tracker_enabled_description": "Master switch for the collect endpoint and the served tracker script.",
353
- "raw_retention": "Raw events retention (days)",
354
- "raw_retention_description": "How long raw events are kept. Funnels and heatmaps read this window; dashboards use the daily rollups.",
355
- "stats_retention": "Statistics retention (days)",
356
- "stats_retention_description": "How long daily rollups and sessions are kept. Capped at 760 days (25 months, the usual audience-measurement ceiling).",
357
- "heatmap_sample": "Heatmap sampling (%)",
358
- "heatmap_sample_description": "Share of visits capturing click and scroll positions. Lower it on high-traffic sites.",
359
- "snapshot_retention": "Page snapshot retention (days)",
360
- "snapshot_retention_description": "How long a captured page rendering is kept as a heatmap backdrop. Snapshots hold page content; never kept longer than the raw events."
1059
+ "tracker_enabled_description": "Master switch for the collect endpoint and the served tracker script."
361
1060
  },
362
1061
  "websites": {
1062
+ "also_accepts": "Also accepts",
1063
+ "collection_paused": {
1064
+ "description": "No website records anything until collection is resumed in Settings.",
1065
+ "open": "Open settings",
1066
+ "title": "Collection is paused for the whole module"
1067
+ },
363
1068
  "column": {
364
- "name": "Name",
365
- "domain": "Domain"
1069
+ "domain": "Domain",
1070
+ "name": "Name"
366
1071
  },
367
1072
  "create": "Add a website",
368
- "create_title": "New website",
369
- "form": {
370
- "name": "Main site",
371
- "domain": "example.com",
372
- "domain_description": "The site's apex domain, without scheme (example.com). Its subdomains are accepted as they are; other hosts — a staging host, another TLD — are added through the API's extraDomains."
373
- },
374
- "snippet": {
375
- "button": "Tracker snippet",
376
- "title": "Install the tracker",
377
- "description": "Add this tag to every page of {name}, right before the closing body tag or inside head. It is the same for every page of the site."
378
- }
1073
+ "delete": {
1074
+ "action": "Delete website…",
1075
+ "confirm": "Delete website",
1076
+ "description": "Everything tracked on this website goes, for every period. Type the domain to confirm.",
1077
+ "done": "{name} deleted",
1078
+ "funnels": "Funnels and their A/B tests",
1079
+ "impact_error": "Couldn't list what deleting this website would remove.",
1080
+ "pageviews": "Pageviews, all time",
1081
+ "pageviews_since": "Pageviews since {date}",
1082
+ "section": "Delete this website",
1083
+ "section_description": "Its sessions, rollups, raw events, snapshots and funnels (with their A/B tests) are deleted.",
1084
+ "sessions": "Sessions, all time",
1085
+ "sessions_since": "Sessions since {date}",
1086
+ "snapshots": "Snapshots",
1087
+ "title": "Delete {name}?"
1088
+ },
1089
+ "description": "The sites sending data to this workspace, their tracker, and what is captured on each.",
1090
+ "drawer": {
1091
+ "added": "added {date}",
1092
+ "capture": "Capture",
1093
+ "close": "Close",
1094
+ "danger": "Danger zone",
1095
+ "eyebrow": "Website",
1096
+ "general": "General"
1097
+ },
1098
+ "error": "Couldn't load the websites",
1099
+ "fields": {
1100
+ "discard": "This change discards the site's snapshot. Clicks are kept. | This change discards the site's {count} snapshots. Clicks are kept.",
1101
+ "domain": "Domain",
1102
+ "domain_hint": "Without scheme (example.com). Its subdomains are accepted.",
1103
+ "hosts": "Also accepts",
1104
+ "hosts_hint": "Other hosts the tag may run on: a staging host, another TLD.",
1105
+ "mask": "Mask all text",
1106
+ "mask_hint": "Replace every captured character with a placeholder.",
1107
+ "name": "Name",
1108
+ "snapshots": "Page snapshots",
1109
+ "snapshots_hint": "Capture the page as visitors see it to draw heatmaps over it. Stores page text and images; form fields are always masked.",
1110
+ "tracking": "Collect data",
1111
+ "tracking_hint": "Off: the tag's beacons are refused and nothing new is recorded for this site. What was collected stays."
1112
+ },
1113
+ "finish_install": "Finish install",
1114
+ "open_overview": "Open overview",
1115
+ "paused_description": "Nothing new is recorded for this site until tracking resumes.",
1116
+ "privacy": "No cookie and no IP address are stored. Visitors are counted with a server-side hash salted every month; Do Not Track is honoured.",
1117
+ "refused": "{count} event refused from {host}, an undeclared host | {count} events refused from {host}, an undeclared host",
1118
+ "sampling": "Heatmap sampling",
1119
+ "resume": "Resume tracking",
1120
+ "resumed": "Tracking resumed",
1121
+ "sampling_default": "module setting",
1122
+ "save_error": "The website could not be saved.",
1123
+ "saved": "Website saved",
1124
+ "snapshots": "Page snapshots",
1125
+ "snapshots_masked": "On · text masked",
1126
+ "snapshots_off": "Off",
1127
+ "snapshots_on": "On · text visible",
1128
+ "snippet_button": "Tracker snippet",
1129
+ "stats": {
1130
+ "funnels": "Funnels",
1131
+ "pages": "Distinct pages",
1132
+ "sessions": "Sessions",
1133
+ "window": "30 days"
1134
+ },
1135
+ "subdomains_only": "Subdomains only",
1136
+ "title": "Websites",
1137
+ "waiting_description": "Added {date}. No pageview has arrived yet: the snippet is probably not on the site.",
1138
+ "waiting_install": "Install the tracker",
1139
+ "waiting_notice": "Channels, campaigns and referrers fill in from the first pageview. Add the tracker snippet to the site to start.",
1140
+ "waiting_refused": "Added {date}. The tag is running, but on a host this website doesn't declare.",
1141
+ "waiting_title": "{name} hasn't sent a visit yet",
1142
+ "edit_named": "Settings of {name}",
1143
+ "snippet_named": "Tracker snippet for {name}",
1144
+ "open_overview_named": "Open the {name} overview",
1145
+ "finish_install_named": "Finish installing {name}"
379
1146
  }
380
1147
  }
381
1148
  }