PY-90678 update subscription/trial expiration dialog texts

Reword the subscription/trial expiration dialog (SubscriptionExpirationDialog)
to match the updated design: titles read "Your {0} trial has ended" / "Your {0}
subscription has ended", the free-mode OK button becomes "Restart to Continue
for Free", and trailing ellipses are dropped from the OK buttons that no longer
open a follow-up step.

The activate radio needs a different indefinite article per edition ("an
Ultimate" vs "a Pro"), which can't be derived from a {0} parameter without
breaking translation. Its text is therefore split into two dedicated keys,
subscription.dialog.activate.button.{ultimate,pro}, chosen through a new
ProductDescriptor.activateButtonText field. Other strings keep the single {0} =
edition tier parameter so IDEA and PyCharm each render their own tier.


Merge-request: IJ-MR-211395
Merged-by: Vladimir Koshelev <Vladimir.Koshelev@jetbrains.com>

(cherry picked from commit 0f6a26b5d6a8042a6377c85d85a207c73f1c39dc)

IJ-MR-217424

GitOrigin-RevId: 849802bb0917ca687418390dba53b58292d52151
This commit is contained in:
Vladimir.Koshelev
2026-08-07 15:19:47 +00:00
committed by intellij-monorepo-bot
parent 81ed5723cc
commit ea4b7b4958
2 changed files with 12 additions and 9 deletions
@@ -3249,17 +3249,18 @@ in.product.notification.action.dismiss.button=Dismiss
banner.button.close=Close
subscription.dialog.title.subscription=Your {0} subscription expired
subscription.dialog.title.evaluation=Your Trial of {0} subscription expired
subscription.dialog.title.subscription=Your {0} subscription has ended
subscription.dialog.title.evaluation=Your {0} trial has ended
subscription.dialog.link=How {0} subscription helps you
subscription.dialog.activate.button=Activate a new {0} subscription
subscription.dialog.activate.button.pro=Activate a Pro subscription
subscription.dialog.activate.button.ultimate=Activate an Ultimate subscription
subscription.dialog.promise.button=Promise to pay later
subscription.dialog.extend.button=Extend trial for 7 days
subscription.dialog.continue.button=Continue without a subscription
subscription.dialog.activate.ok.text=Activate {0}\u2026
subscription.dialog.continue.button=Continue for free without a subscription
subscription.dialog.activate.ok.text=Activate {0}
subscription.dialog.promise.ok.text=Promise\u2026
subscription.dialog.extend.ok.text=Proceed\u2026
subscription.dialog.continue.ok.text=Continue and Restart\u2026
subscription.dialog.continue.ok.text=Restart to Continue for Free
subscription.dialog.cancel.button=Quit {0}
subscription.dialog.rd.hint=Remote Development won't be available
subscription.dialog.ultimate=Ultimate
@@ -87,7 +87,7 @@ class SubscriptionExpirationDialog(project: Project?, private val settings: Subs
buttonsGroup {
val listener = ActionListener { e ->
selectionButton = when (e.actionCommand) {
IdeBundle.message("subscription.dialog.activate.button", productDescriptor.platformName) -> 0
productDescriptor.activateButtonText -> 0
IdeBundle.message("subscription.dialog.promise.button") -> 1
IdeBundle.message("subscription.dialog.extend.button") -> 2
else -> 3
@@ -96,7 +96,7 @@ class SubscriptionExpirationDialog(project: Project?, private val settings: Subs
}
row {
radioButton(IdeBundle.message("subscription.dialog.activate.button", productDescriptor.platformName), 0).component.addActionListener(listener)
radioButton(productDescriptor.activateButtonText, 0).component.addActionListener(listener)
}
if (settings.showPromise) {
row {
@@ -141,11 +141,12 @@ class SubscriptionExpirationDialog(project: Project?, private val settings: Subs
override fun getCancelActionText(): @Nls String = IdeBundle.message("subscription.dialog.cancel.button", productDescriptor.applicationName)
}
private data class ProductDescriptor(val applicationName: String, val platformName: String, val promoUrl: String, val imagePath: String) {
private data class ProductDescriptor(val applicationName: String, val platformName: String, val activateButtonText: @Nls String, val promoUrl: String, val imagePath: String) {
companion object {
val idea = ProductDescriptor(
applicationName = IdeBundle.message("subscription.dialog.idea"),
platformName = IdeBundle.message("subscription.dialog.ultimate"),
activateButtonText = IdeBundle.message("subscription.dialog.activate.button.ultimate"),
promoUrl = "https://www.jetbrains.com/products/compare/?product=idea&product=idea-ult",
imagePath = "/images/IdeaBannerLogo.png",
)
@@ -153,6 +154,7 @@ private data class ProductDescriptor(val applicationName: String, val platformNa
val pyCharm = ProductDescriptor(
applicationName = IdeBundle.message("subscription.dialog.pycharm"),
platformName = IdeBundle.message("subscription.dialog.pro"),
activateButtonText = IdeBundle.message("subscription.dialog.activate.button.pro"),
promoUrl = "https://www.jetbrains.com/pycharm/editions",
imagePath = "/images/PyCharmBannerLogo.png",
)