Skip to content

Updated next payment display for once offers#26065

Merged
sagzy merged 2 commits intomainfrom
retention-offers/update-copy-for-once-offers
Jan 29, 2026
Merged

Updated next payment display for once offers#26065
sagzy merged 2 commits intomainfrom
retention-offers/update-copy-for-once-offers

Conversation

@sagzy
Copy link
Copy Markdown
Contributor

@sagzy sagzy commented Jan 29, 2026

ref https://linear.app/ghost/issue/FEA-547

  • Changed displayed label for once offers from "$5/month - Next payment" to "$5 - Next payment", following how Stripe renders the discounted price for once offers
  • Also added the corresponding i18n key

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jan 29, 2026

Walkthrough

Adds an internal helper getOfferLabel({nextPayment}) to compute translated offer labels (handles discount.duration: forever, once, repeating with end date) and updates PaidAccountActions to use it. Adjusts unit tests to expect the new label/price formatting. Inserts a new "Next payment" translation key (empty value) across many portal locale JSON files. Bumps apps/portal/package.json version from 2.58.0 to 2.58.1. No exported API signatures were changed.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • aileen
  • 9larsons
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: updating the display format for next payment labels in once offers by removing the interval.
Description check ✅ Passed The description accurately explains the changes made, including the specific format change for once offers and the addition of i18n keys, with reference to the related issue.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

sagzy added 2 commits January 29, 2026 15:41
ref https://linear.app/ghost/issue/FEA-547

- Changed displayed label for once offers from "$5/month - Next payment" to "$5 - Next payment", following how Stripe renders the discounted price for once offers
- Also added the corresponding i18n key
Changelog for v2.58.0 -> 2.58.1:
  - Updated i18n translations
  - 4529ad74b8
@sagzy sagzy force-pushed the retention-offers/update-copy-for-once-offers branch from d781826 to eb8ba4d Compare January 29, 2026 14:42
@sagzy sagzy enabled auto-merge (rebase) January 29, 2026 14:42
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@ghost/i18n/locales/de-CH/portal.json`:
- Around line 121-122: The JSON entry for the "Next payment" key currently has
an empty string; replace that empty value with the Swiss German translation
"Nächste Zahlung" so the de-CH locale shows a proper label (update the JSON
value for the "Next payment" key in portal.json accordingly).

Comment on lines 121 to +122
"Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter können aus zwei Gründen in Ihrem Konto deaktiviert werden: Eine frühere E-Mail wurde als Spam markiert oder der Versuch, eine E-Mail zu senden, führte zu einem dauerhaften Fehler (Bounce).",
"Next payment": "",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Provide a de-CH translation instead of an empty string.

An empty value will likely display a blank label for German (Switzerland) users. Consider translating to “Nächste Zahlung” (Swiss German spelling uses no ß).

💡 Suggested translation
-    "Next payment": "",
+    "Next payment": "Nächste Zahlung",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter können aus zwei Gründen in Ihrem Konto deaktiviert werden: Eine frühere E-Mail wurde als Spam markiert oder der Versuch, eine E-Mail zu senden, führte zu einem dauerhaften Fehler (Bounce).",
"Next payment": "",
"Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Newsletter können aus zwei Gründen in Ihrem Konto deaktiviert werden: Eine frühere E-Mail wurde als Spam markiert oder der Versuch, eine E-Mail zu senden, führte zu einem dauerhaften Fehler (Bounce).",
"Next payment": "Nächste Zahlung",
🤖 Prompt for AI Agents
In `@ghost/i18n/locales/de-CH/portal.json` around lines 121 - 122, The JSON entry
for the "Next payment" key currently has an empty string; replace that empty
value with the Swiss German translation "Nächste Zahlung" so the de-CH locale
shows a proper label (update the JSON value for the "Next payment" key in
portal.json accordingly).

@sagzy sagzy merged commit fb8026e into main Jan 29, 2026
36 checks passed
@sagzy sagzy deleted the retention-offers/update-copy-for-once-offers branch January 29, 2026 15:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants