fe(payg): remove em dashes from Plan page copy (#6610)

## What

Removes all em dash (`—`) characters from the **user-facing text** on
the Plan page (PAYG section), replacing them with colons, commas, or
restructured punctuation so the copy reads naturally.

## Changes

- `frontend/editor/public/locales/en-GB/translation.toml` — all `payg.*`
strings (this is what actually renders on the page)
- `PaygFree.tsx` — `t()` default fallbacks + the `{" — "}` JSX
benefit-list separators (now `{": "}`)
- `Payg.tsx` — `t()` default fallback for the editor-plan body

## Notes

- The en-dash range separator (`{{start}} – {{end}}`) in the
billing-period string is intentionally **kept** — only em dashes were
targeted.
- JSDoc / code comments containing em dashes were **left unchanged**,
since they aren't rendered text on the page.
<img width="990" height="502" alt="image"
src="https://github.com/user-attachments/assets/13d89b0f-007c-4b4c-b72d-1d912f968bc7"
/>
This commit is contained in:
ConnorYoh
2026-06-11 16:50:27 +01:00
committed by GitHub
parent d52c7ced7c
commit f16ca4795c
3 changed files with 21 additions and 21 deletions
@@ -708,7 +708,7 @@ const Payg: React.FC<PaygProps> = ({ role, wallet, onSaveCap, onOpenPortal }) =>
<p className="payg-planhead__body">
{t(
"payg.header.freeBody",
"View, edit, merge, split, sign, watermark, compress, convert and manual OCR as much as you want, no matter where you trigger it.",
"View, edit, merge, split, sign, watermark, compress, convert and manual OCR, as much as you want, no matter where you trigger it.",
)}
</p>
</div>
@@ -123,7 +123,7 @@ function EditorPlanCard({ pill, leader }: EditorPlanCardProps) {
<p className="payg-planhead__body">
{t(
"payg.free.header.freeBody",
"View, edit, merge, split, sign, watermark, compress, convert and manual OCR as much as you want, no matter where you trigger it.",
"View, edit, merge, split, sign, watermark, compress, convert and manual OCR, as much as you want, no matter where you trigger it.",
)}
</p>
</div>
@@ -174,7 +174,7 @@ function FreeMeterPanel({ snap }: { snap: FreeSnapshot }) {
{t("payg.free.hero.metaCategories", "Automation · AI · API requests")}
</span>
<span className="payg-hero__meta-dot"></span>
<span>{t("payg.free.hero.neverResets", "One-time never resets")}</span>
<span>{t("payg.free.hero.neverResets", "One-time, never resets")}</span>
</div>
</div>
);
@@ -207,7 +207,7 @@ function ProcessorCard({ snap, isLeader, onTurnOn }: ProcessorCardProps) {
<p className="paygf-cta__subtitle">
{t(
"payg.free.cta.subtitle",
"Keep going past your {{limit}} free PDFs with automation, AI, and the API. Set a monthly ceiling you stay in control.",
"Keep going past your {{limit}} free PDFs with automation, AI, and the API. Set a monthly ceiling, so you stay in control.",
{ limit: snap.billableLimit.toLocaleString() },
)}
</p>
@@ -219,7 +219,7 @@ function ProcessorCard({ snap, isLeader, onTurnOn }: ProcessorCardProps) {
<strong>
{t("payg.free.cta.benefit1Title", "Automation pipelines")}
</strong>
{" "}
{": "}
{t(
"payg.free.cta.benefit1Body",
"chain tools, schedule runs, batch process",
@@ -230,7 +230,7 @@ function ProcessorCard({ snap, isLeader, onTurnOn }: ProcessorCardProps) {
<CheckIcon className="paygf-cta__check" fontSize="small" />
<span>
<strong>{t("payg.free.cta.benefit2Title", "AI tools")}</strong>
{" "}
{": "}
{t(
"payg.free.cta.benefit2Body",
"summarise, classify, redact, AI-OCR",
@@ -241,7 +241,7 @@ function ProcessorCard({ snap, isLeader, onTurnOn }: ProcessorCardProps) {
<CheckIcon className="paygf-cta__check" fontSize="small" />
<span>
<strong>{t("payg.free.cta.benefit3Title", "API access")}</strong>
{" "}
{": "}
{t(
"payg.free.cta.benefit3Body",
"call any Stirling endpoint programmatically",