page-primary should not be automatically translated
What changed, and why it matters
This commit is a user-interface localization cleanup, not a security fix. It stops the system from automatically translating any button or link with the ID 'page-primary'. Instead, developers must now explicitly mark each primary button/link with a 'text-translate' attribute if they want it translated. The commit adds that attribute to many existing buttons and links so translations continue to work as intended. There is no security vulnerability here.
No security action needed. Treat as a normal UI/internationalization refactor.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The TranslateTagHelper previously targeted elements with [id=page-primary] for automatic translation. The commit removes that rule and adds explicit text-translate=’true’ attributes to the relevant Razor views. One view (SetPassword.cshtml) also switches a local string to use StringLocalizer. The Playwright test changes are unrelated waits. No security-relevant behavior is changed.
Changed components
BTCPayServer.TagHelpers.TranslateTagHelperRazor views using id='page-primary'Inspect captured patch +41 / −37
diff --git a/BTCPayServer.Tests/PlaywrightTests.cs b/BTCPayServer.Tests/PlaywrightTests.cs
index 8224e82..b0b54b3 100644
--- a/BTCPayServer.Tests/PlaywrightTests.cs
+++ b/BTCPayServer.Tests/PlaywrightTests.cs
@@ -2299,6 +2299,7 @@ namespace BTCPayServer.Tests
// unarchive via list
await s.Page.Locator("#StatusOptionsToggle").ClickAsync();
await s.Page.Locator("#StatusOptionsIncludeArchived").ClickAsync();
+ await s.Page.WaitForLoadStateAsync(LoadState.DOMContentLoaded);
Assert.Contains(invoiceId, await s.Page.ContentAsync());
await s.Page.ClickAsync($".mass-action-select[value=\"{invoiceId}\"]");
await s.Page.ClickAsync("#UnarchiveSelected");
@@ -2797,7 +2798,7 @@ namespace BTCPayServer.Tests
await s.Page.EvaluateAsync("document.getElementById('logincode-form').submit()");
await s.Page.WaitForLoadStateAsync();
await s.Page.WaitForLoadStateAsync();
-
+
await s.CreateNewStore();
await s.GoToHome();
await s.Page.WaitForLoadStateAsync();
diff --git a/BTCPayServer/Plugins/Emails/Views/Shared/EmailSettings.cshtml b/BTCPayServer/Plugins/Emails/Views/Shared/EmailSettings.cshtml
index 93be12c..548453c 100644
--- a/BTCPayServer/Plugins/Emails/Views/Shared/EmailSettings.cshtml
+++ b/BTCPayServer/Plugins/Emails/Views/Shared/EmailSettings.cshtml
@@ -34,7 +34,7 @@
Go to email rules
</a>
}
- <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save" permission="@Model.ModifyPermission">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save" permission="@Model.ModifyPermission" text-translate="true">Save</button>
</div>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Plugins/Subscriptions/Views/UIPlanCheckout/PlanCheckout.cshtml b/BTCPayServer/Plugins/Subscriptions/Views/UIPlanCheckout/PlanCheckout.cshtml
index 2464de4..5235163 100644
--- a/BTCPayServer/Plugins/Subscriptions/Views/UIPlanCheckout/PlanCheckout.cshtml
+++ b/BTCPayServer/Plugins/Subscriptions/Views/UIPlanCheckout/PlanCheckout.cshtml
@@ -239,14 +239,14 @@
{
<button type="submit" name="command" value="start-trial" class="btn btn-primary btn-checkout btn-lg" id="page-primary">
<i class="fas fa fa-lock me-2"></i>
- Proceed to free trial
+ <span text-translate="true">Proceed to free trial</span>
</button>
}
else
{
<button type="submit" name="command" value="pay" class="btn btn-primary btn-checkout btn-lg" id="page-primary">
<i class="fas fa fa-lock me-2"></i>
- Proceed to Secure Payment
+ <span text-translate="true">Proceed to Secure Payment</span>
</button>
}
</form>
diff --git a/BTCPayServer/Plugins/Webhooks/Views/Webhooks.cshtml b/BTCPayServer/Plugins/Webhooks/Views/Webhooks.cshtml
index 2f8c316..3f617ab 100644
--- a/BTCPayServer/Plugins/Webhooks/Views/Webhooks.cshtml
+++ b/BTCPayServer/Plugins/Webhooks/Views/Webhooks.cshtml
@@ -6,7 +6,7 @@
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <a id="page-primary" asp-action="NewWebhook" class="btn btn-primary" role="button" asp-route-storeId="@Context.GetRouteValue("storeId")" permission="@Policies.CanModifyStoreSettings">
+ <a id="page-primary" text-translate="true" asp-action="NewWebhook" class="btn btn-primary" role="button" asp-route-storeId="@Context.GetRouteValue("storeId")" permission="@Policies.CanModifyStoreSettings">
Create Webhook
</a>
</div>
diff --git a/BTCPayServer/TagHelpers/TranslateTagHelper.cs b/BTCPayServer/TagHelpers/TranslateTagHelper.cs
index 1f6ee62..60c295d 100644
--- a/BTCPayServer/TagHelpers/TranslateTagHelper.cs
+++ b/BTCPayServer/TagHelpers/TranslateTagHelper.cs
@@ -15,7 +15,6 @@ namespace BTCPayServer.TagHelpers
[HtmlTargetElement(Attributes = "text-translate")]
[HtmlTargetElement(Attributes = "html-translate")]
[HtmlTargetElement("input", Attributes = "[type=submit]")]
- [HtmlTargetElement(Attributes = "[id=page-primary]")]
public class TranslateTagHelper : TagHelper
{
private readonly IStringLocalizer<TranslateTagHelper> _localizer;
diff --git a/BTCPayServer/Views/Shared/ListRoles.cshtml b/BTCPayServer/Views/Shared/ListRoles.cshtml
index 8478400..af933b8 100644
--- a/BTCPayServer/Views/Shared/ListRoles.cshtml
+++ b/BTCPayServer/Views/Shared/ListRoles.cshtml
@@ -25,7 +25,7 @@
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <a id="page-primary" class="btn btn-primary" role="button" asp-controller="@controller" asp-action="CreateOrEditRole" asp-route-role="create" asp-route-storeId="@storeId" permission="@permission">Add Role</a>
+ <a id="page-primary" text-translate="true" class="btn btn-primary" role="button" asp-controller="@controller" asp-action="CreateOrEditRole" asp-route-role="create" asp-route-storeId="@storeId" permission="@permission">Add Role</a>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIAccount/SetPassword.cshtml b/BTCPayServer/Views/UIAccount/SetPassword.cshtml
index 1b58e09..6446e1e 100644
--- a/BTCPayServer/Views/UIAccount/SetPassword.cshtml
+++ b/BTCPayServer/Views/UIAccount/SetPassword.cshtml
@@ -1,6 +1,6 @@
@model BTCPayServer.Models.AccountViewModels.SetPasswordViewModel
@{
- var cta = Model.HasPassword ? "Reset your password" : "Create Account";
+ var cta = Model.HasPassword ? StringLocalizer["Reset your password"] : StringLocalizer["Create Account"];
ViewData["Title"] = cta;
Layout = "_LayoutSignedOut";
}
diff --git a/BTCPayServer/Views/UIApps/ListApps.cshtml b/BTCPayServer/Views/UIApps/ListApps.cshtml
index 711d74d..816884f 100644
--- a/BTCPayServer/Views/UIApps/ListApps.cshtml
+++ b/BTCPayServer/Views/UIApps/ListApps.cshtml
@@ -40,7 +40,7 @@
</a>
</small>
</h2>
- <a id="page-primary" asp-action="CreateApp" asp-route-storeId="@Context.GetStoreData().Id" class="btn btn-primary" role="button">Create a new app</a>
+ <a id="page-primary" asp-action="CreateApp" asp-route-storeId="@Context.GetStoreData().Id" class="btn btn-primary" role="button" text-translate="true">Create a new app</a>
</div>
<div class="table-responsive-md">
diff --git a/BTCPayServer/Views/UIForms/Modify.cshtml b/BTCPayServer/Views/UIForms/Modify.cshtml
index af38f01..1f55a41 100644
--- a/BTCPayServer/Views/UIForms/Modify.cshtml
+++ b/BTCPayServer/Views/UIForms/Modify.cshtml
@@ -213,7 +213,7 @@
</h2>
</nav>
<div>
- <button id="page-primary" type="submit" class="btn btn-primary order-sm-1">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary order-sm-1" text-translate="true">Save</button>
@if (!isNew)
{
<a class="btn btn-secondary" asp-action="ViewPublicForm" asp-route-formId="@formId" id="ViewForm" text-translate="true">View</a>
diff --git a/BTCPayServer/Views/UILNURL/EditLightningAddress.cshtml b/BTCPayServer/Views/UILNURL/EditLightningAddress.cshtml
index ba393b3..78304d4 100644
--- a/BTCPayServer/Views/UILNURL/EditLightningAddress.cshtml
+++ b/BTCPayServer/Views/UILNURL/EditLightningAddress.cshtml
@@ -26,7 +26,8 @@
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <a id="page-primary" data-bs-toggle="collapse" data-bs-target="#AddAddress" class="btn btn-primary" role="button">
+ <a id="page-primary" data-bs-toggle="collapse" data-bs-target="#AddAddress" class="btn btn-primary" role="button"
+ text-translate="true">
Add Address
</a>
</div>
diff --git a/BTCPayServer/Views/UILightningAutomatedPayoutProcessors/Configure.cshtml b/BTCPayServer/Views/UILightningAutomatedPayoutProcessors/Configure.cshtml
index 42377bf..bbecacf 100644
--- a/BTCPayServer/Views/UILightningAutomatedPayoutProcessors/Configure.cshtml
+++ b/BTCPayServer/Views/UILightningAutomatedPayoutProcessors/Configure.cshtml
@@ -18,7 +18,8 @@
</ol>
<h2>@ViewData["Title"]</h2>
</nav>
- <button id="page-primary" name="command" type="submit" class="btn btn-primary" value="Save">Save</button>
+ <button id="page-primary" name="command" type="submit" class="btn btn-primary" value="Save"
+ text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
<div class="row">
diff --git a/BTCPayServer/Views/UIManage/APIKeys.cshtml b/BTCPayServer/Views/UIManage/APIKeys.cshtml
index f608676..7061dcf 100644
--- a/BTCPayServer/Views/UIManage/APIKeys.cshtml
+++ b/BTCPayServer/Views/UIManage/APIKeys.cshtml
@@ -13,7 +13,7 @@
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <a id="page-primary" class="btn btn-primary" asp-action="AddApiKey">
+ <a id="page-primary" class="btn btn-primary" asp-action="AddApiKey" text-translate="true">
Generate Key
</a>
</div>
diff --git a/BTCPayServer/Views/UIManage/AddApiKey.cshtml b/BTCPayServer/Views/UIManage/AddApiKey.cshtml
index b4a6d7f..12d53b7 100644
--- a/BTCPayServer/Views/UIManage/AddApiKey.cshtml
+++ b/BTCPayServer/Views/UIManage/AddApiKey.cshtml
@@ -37,7 +37,7 @@
</ol>
<h2>@ViewData["Title"]</h2>
</nav>
- <button id="page-primary" type="submit" class="btn btn-primary">Generate API Key</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" text-translate="true">Generate API Key</button>
</div>
<p text-translate="true">Generate a new api key to use BTCPay through its API.</p>
<div class="row">
diff --git a/BTCPayServer/Views/UIManage/ChangePassword.cshtml b/BTCPayServer/Views/UIManage/ChangePassword.cshtml
index 14153ab..133203e 100644
--- a/BTCPayServer/Views/UIManage/ChangePassword.cshtml
+++ b/BTCPayServer/Views/UIManage/ChangePassword.cshtml
@@ -7,7 +7,7 @@
<form method="post">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" type="submit" class="btn btn-primary">Update Password</button>
+ <button id="page-primary" text-translate="true" type="submit" class="btn btn-primary">Update Password</button>
</div>
<partial name="_StatusMessage" />
<div class="row">
diff --git a/BTCPayServer/Views/UIManage/Index.cshtml b/BTCPayServer/Views/UIManage/Index.cshtml
index 2ddf2af..b4beeb9 100644
--- a/BTCPayServer/Views/UIManage/Index.cshtml
+++ b/BTCPayServer/Views/UIManage/Index.cshtml
@@ -11,7 +11,7 @@
<form method="post" enctype="multipart/form-data">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" type="submit" class="btn btn-primary">Save</button>
+ <button id="page-primary" text-translate="true" type="submit" class="btn btn-primary">Save</button>
</div>
<partial name="_StatusMessage" />
<div class="col-xxl-constrain col-xl-8">
diff --git a/BTCPayServer/Views/UIManage/NotificationSettings.cshtml b/BTCPayServer/Views/UIManage/NotificationSettings.cshtml
index 530537c..7d16bec 100644
--- a/BTCPayServer/Views/UIManage/NotificationSettings.cshtml
+++ b/BTCPayServer/Views/UIManage/NotificationSettings.cshtml
@@ -15,7 +15,7 @@
</ol>
<h2>@ViewData["Title"]</h2>
</nav>
- <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="update">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="update" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
<div class="row">
diff --git a/BTCPayServer/Views/UIManage/SetPassword.cshtml b/BTCPayServer/Views/UIManage/SetPassword.cshtml
index d0b5891..7fbd8b0 100644
--- a/BTCPayServer/Views/UIManage/SetPassword.cshtml
+++ b/BTCPayServer/Views/UIManage/SetPassword.cshtml
@@ -7,7 +7,7 @@
<form method="post">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" type="submit" class="btn btn-primary">Set Password</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" text-translate="true">Set Password</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIPaymentRequest/GetPaymentRequests.cshtml b/BTCPayServer/Views/UIPaymentRequest/GetPaymentRequests.cshtml
index 7fdd1bf..8a25070 100644
--- a/BTCPayServer/Views/UIPaymentRequest/GetPaymentRequests.cshtml
+++ b/BTCPayServer/Views/UIPaymentRequest/GetPaymentRequests.cshtml
@@ -33,7 +33,8 @@
<vc:icon symbol="info" />
</a>
</h2>
- <a id="page-primary" asp-action="EditPaymentRequest" asp-route-storeId="@storeId" class="btn btn-primary mt-3 mt-sm-0" role="button" permission="@Policies.CanModifyPaymentRequests">
+ <a id="page-primary" asp-action="EditPaymentRequest" asp-route-storeId="@storeId" class="btn btn-primary mt-3 mt-sm-0" role="button" permission="@Policies.CanModifyPaymentRequests"
+ text-translate="true">
Create Request
</a>
</div>
diff --git a/BTCPayServer/Views/UIPullPayment/EditPullPayment.cshtml b/BTCPayServer/Views/UIPullPayment/EditPullPayment.cshtml
index fc8bb13..a88e085 100644
--- a/BTCPayServer/Views/UIPullPayment/EditPullPayment.cshtml
+++ b/BTCPayServer/Views/UIPullPayment/EditPullPayment.cshtml
@@ -28,11 +28,11 @@
<div>
@if (string.IsNullOrEmpty(Model.Id))
{
- <button id="page-primary" type="submit" class="btn btn-primary">Create</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" text-translate="true">Create</button>
}
else
{
- <button id="page-primary" type="submit" class="btn btn-primary order-sm-1">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary order-sm-1" text-translate="true">Save</button>
<a class="btn btn-secondary" asp-action="ViewPullPayment" asp-route-pullPaymentId="@Model.Id" id="ViewPullPayment" target="_blank" text-translate="true">View</a>
}
</div>
diff --git a/BTCPayServer/Views/UIReports/StoreReports.cshtml b/BTCPayServer/Views/UIReports/StoreReports.cshtml
index 5ca4084..f993606 100644
--- a/BTCPayServer/Views/UIReports/StoreReports.cshtml
+++ b/BTCPayServer/Views/UIReports/StoreReports.cshtml
@@ -42,7 +42,7 @@
<div>
<a cheat-mode="true" class="btn btn-outline-info text-nowrap" asp-action="StoreReports" asp-route-fakeData="true"
asp-route-viewName="@Model.Request?.ViewName">Create fake data</a>
- <button id="page-primary" class="btn btn-primary text-nowrap" type="button" data-action="exportCSV">Export</button>
+ <button id="page-primary" class="btn btn-primary text-nowrap" type="button" data-action="exportCSV" text-translate="true">Export</button>
</div>
</div>
<div class="row">
diff --git a/BTCPayServer/Views/UIServer/Branding.cshtml b/BTCPayServer/Views/UIServer/Branding.cshtml
index b771090..98974a4 100644
--- a/BTCPayServer/Views/UIServer/Branding.cshtml
+++ b/BTCPayServer/Views/UIServer/Branding.cshtml
@@ -17,7 +17,7 @@
<form method="post" enctype="multipart/form-data">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIServer/CreateUser.cshtml b/BTCPayServer/Views/UIServer/CreateUser.cshtml
index 5ca9651..413532a 100644
--- a/BTCPayServer/Views/UIServer/CreateUser.cshtml
+++ b/BTCPayServer/Views/UIServer/CreateUser.cshtml
@@ -17,7 +17,7 @@
</ol>
<h2>@ViewData["Title"]</h2>
</nav>
- <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save">Create Account</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save" text-translate="true">Create Account</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIServer/DynamicDnsService.cshtml b/BTCPayServer/Views/UIServer/DynamicDnsService.cshtml
index 8a278d9..e5100ae 100644
--- a/BTCPayServer/Views/UIServer/DynamicDnsService.cshtml
+++ b/BTCPayServer/Views/UIServer/DynamicDnsService.cshtml
@@ -32,7 +32,7 @@
</small>
</h2>
</nav>
- <button id="page-primary" name="command" class="btn btn-primary" type="submit" value="Save">Save</button>
+ <button id="page-primary" name="command" class="btn btn-primary" type="submit" value="Save" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIServer/ListDictionaries.cshtml b/BTCPayServer/Views/UIServer/ListDictionaries.cshtml
index ecdd79a..1c3abea 100644
--- a/BTCPayServer/Views/UIServer/ListDictionaries.cshtml
+++ b/BTCPayServer/Views/UIServer/ListDictionaries.cshtml
@@ -10,7 +10,7 @@
<button type="button" class="btn btn-secondary" data-bs-toggle="modal" data-bs-target="#downloadLanguagePackModal" text-translate="true">
Download language pack
</button>
- <a id="page-primary" asp-action="CreateDictionary" class="btn btn-primary" role="button">
+ <a id="page-primary" asp-action="CreateDictionary" class="btn btn-primary" role="button" text-translate="true">
Create
</a>
</div>
diff --git a/BTCPayServer/Views/UIServer/ListUsers.cshtml b/BTCPayServer/Views/UIServer/ListUsers.cshtml
index c96a773..886569d 100644
--- a/BTCPayServer/Views/UIServer/ListUsers.cshtml
+++ b/BTCPayServer/Views/UIServer/ListUsers.cshtml
@@ -30,7 +30,7 @@
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <a id="page-primary" asp-action="CreateUser" class="btn btn-primary" role="button">
+ <a id="page-primary" asp-action="CreateUser" class="btn btn-primary" role="button" text-translate="true">
Add User
</a>
</div>
diff --git a/BTCPayServer/Views/UIServer/Policies.cshtml b/BTCPayServer/Views/UIServer/Policies.cshtml
index 3aed718..57f42b1 100644
--- a/BTCPayServer/Views/UIServer/Policies.cshtml
+++ b/BTCPayServer/Views/UIServer/Policies.cshtml
@@ -22,7 +22,7 @@
<form method="post">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIServer/ResetUserPassword.cshtml b/BTCPayServer/Views/UIServer/ResetUserPassword.cshtml
index ab247b2..0c49509 100644
--- a/BTCPayServer/Views/UIServer/ResetUserPassword.cshtml
+++ b/BTCPayServer/Views/UIServer/ResetUserPassword.cshtml
@@ -14,7 +14,7 @@
</ol>
<h2>@ViewData["Title"]</h2>
</nav>
- <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save">Reset Password</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" name="command" value="Save" text-translate="true">Reset Password</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIStorePullPayments/PullPayments.cshtml b/BTCPayServer/Views/UIStorePullPayments/PullPayments.cshtml
index 678c0d7..ce3fec1 100644
--- a/BTCPayServer/Views/UIStorePullPayments/PullPayments.cshtml
+++ b/BTCPayServer/Views/UIStorePullPayments/PullPayments.cshtml
@@ -32,7 +32,8 @@
<vc:icon symbol="info" />
</a>
</h2>
- <a id="page-primary" permission="@Policies.CanCreateNonApprovedPullPayments" asp-action="NewPullPayment" asp-route-storeId="@storeId" class="btn btn-primary" role="button">
+ <a id="page-primary" permission="@Policies.CanCreateNonApprovedPullPayments" asp-action="NewPullPayment" asp-route-storeId="@storeId" class="btn btn-primary" role="button"
+ text-translate="true">
Create Pull Payment
</a>
</div>
diff --git a/BTCPayServer/Views/UIStores/CheckoutAppearance.cshtml b/BTCPayServer/Views/UIStores/CheckoutAppearance.cshtml
index 10c2e91..06bac2b 100644
--- a/BTCPayServer/Views/UIStores/CheckoutAppearance.cshtml
+++ b/BTCPayServer/Views/UIStores/CheckoutAppearance.cshtml
@@ -66,7 +66,7 @@
<form method="post" enctype="multipart/form-data" permissioned="@Policies.CanModifyStoreSettings">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" type="submit" class="btn btn-primary">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIStores/GeneralSettings.cshtml b/BTCPayServer/Views/UIStores/GeneralSettings.cshtml
index 7d217d0..74d58ad 100644
--- a/BTCPayServer/Views/UIStores/GeneralSettings.cshtml
+++ b/BTCPayServer/Views/UIStores/GeneralSettings.cshtml
@@ -11,7 +11,7 @@
<form method="post" enctype="multipart/form-data" permissioned="@Policies.CanModifyStoreSettings">
<div class="sticky-header">
<h2 text-translate="true">Store Settings</h2>
- <button id="page-primary" type="submit" class="btn btn-primary">Save</button>
+ <button id="page-primary" type="submit" class="btn btn-primary" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
diff --git a/BTCPayServer/Views/UIStores/LightningSettings.cshtml b/BTCPayServer/Views/UIStores/LightningSettings.cshtml
index da4d2e4..a397135 100644
--- a/BTCPayServer/Views/UIStores/LightningSettings.cshtml
+++ b/BTCPayServer/Views/UIStores/LightningSettings.cshtml
@@ -10,7 +10,7 @@
<form method="post">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" name="command" type="submit" value="save" class="btn btn-primary">Save</button>
+ <button id="page-primary" name="command" type="submit" value="save" class="btn btn-primary" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
<div class="row">
diff --git a/BTCPayServer/Views/UIStores/Rates.cshtml b/BTCPayServer/Views/UIStores/Rates.cshtml
index f098a74..82e4847 100644
--- a/BTCPayServer/Views/UIStores/Rates.cshtml
+++ b/BTCPayServer/Views/UIStores/Rates.cshtml
@@ -7,7 +7,7 @@
<form method="post" permissioned="@Policies.CanModifyStoreSettings">
<div class="sticky-header">
<h2>@ViewData["Title"]</h2>
- <button id="page-primary" name="command" type="submit" class="btn btn-primary" value="Save">Save</button>
+ <button id="page-primary" name="command" type="submit" class="btn btn-primary" value="Save" text-translate="true">Save</button>
</div>
<partial name="_StatusMessage" />
@if (!ViewContext.ModelState.IsValid)
diff --git a/BTCPayServer/Views/UIStores/RequestPairing.cshtml b/BTCPayServer/Views/UIStores/RequestPairing.cshtml
index 24deb96..a8bb781 100644
--- a/BTCPayServer/Views/UIStores/RequestPairing.cshtml
+++ b/BTCPayServer/Views/UIStores/RequestPairing.cshtml
@@ -37,7 +37,7 @@
{
<h2>@ViewData["Title"]</h2>
}
- <button id="page-primary" type="submit" class="btn btn-primary mt-3" title="@StringLocalizer["Approve this pairing demand"]">Approve</button>
+ <button id="page-primary" type="submit" class="btn btn-primary mt-3" title="@StringLocalizer["Approve this pairing demand"]" text-translate="true">Approve</button>
</div>
<partial name="_StatusMessage" />
<div class="row">
diff --git a/BTCPayServer/Views/UIStores/SetupLightningNode.cshtml b/BTCPayServer/Views/UIStores/SetupLightningNode.cshtml
index b0edaf0..5a6b8c8 100644
--- a/BTCPayServer/Views/UIStores/SetupLightningNode.cshtml
+++ b/BTCPayServer/Views/UIStores/SetupLightningNode.cshtml
@@ -242,7 +242,7 @@
</div>
<div class="text-start mt-4">
- <button id="page-primary" name="command" type="submit" value="save" class="btn btn-primary me-2">Save</button>
+ <button id="page-primary" name="command" type="submit" value="save" class="btn btn-primary me-2" text-translate="true">Save</button>
</div>
</form>
diff --git a/BTCPayServer/Views/UIWallets/WalletBumpFee.cshtml b/BTCPayServer/Views/UIWallets/WalletBumpFee.cshtml
index ed4ebc9..835c8f0 100644
--- a/BTCPayServer/Views/UIWallets/WalletBumpFee.cshtml
+++ b/BTCPayServer/Views/UIWallets/WalletBumpFee.cshtml
@@ -137,7 +137,7 @@
@Html.HiddenFor(a => a.IsMultiSigOnServer)
@if (Model.IsMultiSigOnServer)
{
- <button type="submit" id="page-primary" name="command" value="createpending" class="btn btn-primary">Create pending transaction</button>
+ <button type="submit" id="page-primary" name="command" value="createpending" class="btn btn-primary" text-translate="true">Create pending transaction</button>
}
else
{
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.