Security improvements and API compatibility fixes (v0.3.6)

- Add recursive key sorting for response signing compatibility
- Fix IP header spoofing in rate limiting with trusted proxy support
- Add CSRF protection to CSV export with nonce verification
- Explicit Twig autoescape for XSS prevention
- Escape status values in CSS classes
- Update README with security documentation and trusted proxy config
- Update translations for v0.3.6

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-23 21:18:32 +01:00
parent c7967f71ab
commit 35d802c2b8
11 changed files with 669 additions and 392 deletions

View File

@@ -1,14 +1,14 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# This file is distributed under the same license as the wc-licensed-product package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: wc-licensed-product 0.3.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-23 16:05+0100\n"
"POT-Creation-Date: 2026-01-23 21:09+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -49,15 +49,15 @@ msgstr ""
#: src/Admin/OrderLicenseController.php:118
#: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:150
#: src/Admin/AdminController.php:1329 src/Admin/AdminController.php:1349
#: src/Admin/AdminController.php:1370
#: src/Admin/AdminController.php:1340 src/Admin/AdminController.php:1360
#: src/Admin/AdminController.php:1381
msgid "Save"
msgstr ""
#: src/Admin/OrderLicenseController.php:127
#: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:76
#: src/Admin/AdminController.php:77 src/Admin/AdminController.php:90
#: src/Admin/AdminController.php:1189 src/Frontend/AccountController.php:90
#: src/Admin/AdminController.php:1200 src/Frontend/AccountController.php:90
msgid "Licenses"
msgstr ""
@@ -76,41 +76,41 @@ msgid "Licenses will be generated when the order is marked as paid/completed."
msgstr ""
#: src/Admin/OrderLicenseController.php:144
#: src/Admin/SettingsController.php:142 src/Admin/AdminController.php:1280
#: src/Admin/AdminController.php:1431 src/Admin/AdminController.php:1480
#: src/Admin/SettingsController.php:142 src/Admin/AdminController.php:1291
#: src/Admin/AdminController.php:1442 src/Admin/AdminController.php:1491
#: src/Email/LicenseEmailController.php:269
msgid "License Key"
msgstr ""
#: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1281
#: src/Admin/AdminController.php:1432 src/Admin/AdminController.php:1597
#: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1292
#: src/Admin/AdminController.php:1443 src/Admin/AdminController.php:1608
#: src/Email/LicenseEmailController.php:268
msgid "Product"
msgstr ""
#: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1283
#: src/Admin/AdminController.php:1434 src/Admin/AdminController.php:1484
#: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1294
#: src/Admin/AdminController.php:1445 src/Admin/AdminController.php:1495
msgid "Domain"
msgstr ""
#: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1284
#: src/Admin/AdminController.php:1435 src/Admin/VersionAdminController.php:140
#: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1295
#: src/Admin/AdminController.php:1446 src/Admin/VersionAdminController.php:140
msgid "Status"
msgstr ""
#: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1286
#: src/Admin/AdminController.php:1437 src/Admin/AdminController.php:1600
#: src/Admin/AdminController.php:1602 src/Email/LicenseEmailController.php:270
#: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1297
#: src/Admin/AdminController.php:1448 src/Admin/AdminController.php:1611
#: src/Admin/AdminController.php:1613 src/Email/LicenseEmailController.php:270
msgid "Expires"
msgstr ""
#: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1287
#: src/Admin/AdminController.php:1438 src/Admin/VersionAdminController.php:142
#: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1298
#: src/Admin/AdminController.php:1449 src/Admin/VersionAdminController.php:142
msgid "Actions"
msgstr ""
#: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:195
#: src/Admin/AdminController.php:1014
#: src/Admin/AdminController.php:1019
msgid "Unknown"
msgstr ""
@@ -119,16 +119,16 @@ msgid "Edit domain"
msgstr ""
#: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:149
#: src/Admin/AdminController.php:1330 src/Admin/AdminController.php:1350
#: src/Admin/AdminController.php:1371 src/Admin/AdminController.php:1526
#: src/Admin/AdminController.php:1341 src/Admin/AdminController.php:1361
#: src/Admin/AdminController.php:1382 src/Admin/AdminController.php:1537
#: src/Frontend/AccountController.php:271
msgid "Cancel"
msgstr ""
#: src/Admin/OrderLicenseController.php:201
#: src/Admin/SettingsController.php:192 src/Admin/AdminController.php:151
#: src/Admin/AdminController.php:266 src/Admin/AdminController.php:1362
#: src/Admin/AdminController.php:1602 src/Product/LicensedProductType.php:110
#: src/Admin/AdminController.php:266 src/Admin/AdminController.php:1373
#: src/Admin/AdminController.php:1613 src/Product/LicensedProductType.php:110
#: src/Product/LicensedProductType.php:158
msgid "Lifetime"
msgstr ""
@@ -137,6 +137,7 @@ msgstr ""
msgid "View in Licenses"
msgstr ""
#. translators: %s: Link to licenses page
#: src/Admin/OrderLicenseController.php:221
#, php-format
msgid "For more actions (revoke, extend, delete), go to the %s page."
@@ -293,6 +294,7 @@ msgstr ""
msgid "Expiration Warning Schedule"
msgstr ""
#. translators: %s: URL to WooCommerce email settings
#: src/Admin/SettingsController.php:223
#, php-format
msgid ""
@@ -348,8 +350,9 @@ msgstr ""
#: src/Admin/SettingsController.php:454 src/Admin/AdminController.php:455
#: src/Admin/AdminController.php:475 src/Admin/AdminController.php:493
#: src/Admin/AdminController.php:511 src/Admin/AdminController.php:531
#: src/Admin/AdminController.php:549 src/Admin/AdminController.php:616
#: src/Admin/AdminController.php:806 src/Frontend/AccountController.php:326
#: src/Admin/AdminController.php:549 src/Admin/AdminController.php:577
#: src/Admin/AdminController.php:621 src/Admin/AdminController.php:811
#: src/Frontend/AccountController.php:326
msgid "Security check failed."
msgstr ""
@@ -394,8 +397,8 @@ msgid ""
"Are you sure you want to revoke this license? This action cannot be undone."
msgstr ""
#: src/Admin/AdminController.php:148 src/Admin/AdminController.php:1324
#: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1365
#: src/Admin/AdminController.php:148 src/Admin/AdminController.php:1335
#: src/Admin/AdminController.php:1350 src/Admin/AdminController.php:1376
msgid "Edit"
msgstr ""
@@ -407,34 +410,34 @@ msgstr ""
msgid "Copy failed"
msgstr ""
#: src/Admin/AdminController.php:156 src/Admin/AdminController.php:902
#: src/Admin/AdminController.php:1221 src/Admin/AdminController.php:1344
#: src/Admin/AdminController.php:156 src/Admin/AdminController.php:907
#: src/Admin/AdminController.php:1232 src/Admin/AdminController.php:1355
#: src/Admin/VersionAdminController.php:182
#: src/Admin/VersionAdminController.php:413
#: src/Admin/DashboardWidgetController.php:151
msgid "Active"
msgstr ""
#: src/Admin/AdminController.php:157 src/Admin/AdminController.php:909
#: src/Admin/AdminController.php:1222 src/Admin/AdminController.php:1345
#: src/Admin/AdminController.php:157 src/Admin/AdminController.php:914
#: src/Admin/AdminController.php:1233 src/Admin/AdminController.php:1356
#: src/Admin/VersionAdminController.php:182
#: src/Admin/VersionAdminController.php:413
msgid "Inactive"
msgstr ""
#: src/Admin/AdminController.php:158 src/Admin/AdminController.php:916
#: src/Admin/AdminController.php:1223 src/Admin/AdminController.php:1346
#: src/Admin/AdminController.php:158 src/Admin/AdminController.php:921
#: src/Admin/AdminController.php:1234 src/Admin/AdminController.php:1357
#: src/Admin/DashboardWidgetController.php:159
#: src/Email/LicenseExpiredEmail.php:210 src/Email/LicenseExpiredEmail.php:259
msgid "Expired"
msgstr ""
#: src/Admin/AdminController.php:159 src/Admin/AdminController.php:923
#: src/Admin/AdminController.php:1224 src/Admin/AdminController.php:1347
#: src/Admin/AdminController.php:159 src/Admin/AdminController.php:928
#: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1358
msgid "Revoked"
msgstr ""
#: src/Admin/AdminController.php:196 src/Admin/AdminController.php:1018
#: src/Admin/AdminController.php:196 src/Admin/AdminController.php:1023
msgid "Guest"
msgstr ""
@@ -474,7 +477,7 @@ msgstr ""
msgid "Failed to update domain."
msgstr ""
#: src/Admin/AdminController.php:352 src/Admin/AdminController.php:1083
#: src/Admin/AdminController.php:352 src/Admin/AdminController.php:1094
msgid "License revoked successfully."
msgstr ""
@@ -486,472 +489,481 @@ msgstr ""
msgid "License key and domain are required."
msgstr ""
#: src/Admin/AdminController.php:576
#: src/Admin/AdminController.php:581
msgid "You do not have permission to export licenses."
msgstr ""
#: src/Admin/AdminController.php:620
#: src/Admin/AdminController.php:625
msgid "You do not have permission to import licenses."
msgstr ""
#: src/Admin/AdminController.php:740
#: src/Admin/AdminController.php:745
msgid "Row missing domain"
msgstr ""
#: src/Admin/AdminController.php:744
#: src/Admin/AdminController.php:749
msgid "Row missing valid product ID"
msgstr ""
#: src/Admin/AdminController.php:797
#: src/Admin/AdminController.php:802
#, php-format
msgid "Failed to import license for domain %s"
msgstr ""
#: src/Admin/AdminController.php:887
#: src/Admin/AdminController.php:892
msgid "License Dashboard"
msgstr ""
#: src/Admin/AdminController.php:895
#: src/Admin/AdminController.php:900
#: src/Admin/DashboardWidgetController.php:147
msgid "Total Licenses"
msgstr ""
#: src/Admin/AdminController.php:932
#: src/Admin/AdminController.php:937
msgid "Attention:"
msgstr ""
#: src/Admin/AdminController.php:937
#: src/Admin/AdminController.php:942
#, php-format
msgid "%d license is expiring within the next 30 days."
msgid_plural "%d licenses are expiring within the next 30 days."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:945
#: src/Admin/AdminController.php:950
msgid "View Licenses"
msgstr ""
#: src/Admin/AdminController.php:951
#: src/Admin/AdminController.php:956
msgid "Quick Actions"
msgstr ""
#: src/Admin/AdminController.php:955
#: src/Admin/AdminController.php:960
msgid "Manage Licenses"
msgstr ""
#: src/Admin/AdminController.php:959
#: src/Admin/AdminController.php:964
msgid "Export to CSV"
msgstr ""
#: src/Admin/AdminController.php:963 wc-licensed-product.php:137
#: src/Admin/AdminController.php:968 wc-licensed-product.php:137
msgid "Settings"
msgstr ""
#: src/Admin/AdminController.php:1077
#: src/Admin/AdminController.php:1088
msgid "License updated successfully."
msgstr ""
#: src/Admin/AdminController.php:1080
#: src/Admin/AdminController.php:1091
msgid "License deleted successfully."
msgstr ""
#: src/Admin/AdminController.php:1086
#: src/Admin/AdminController.php:1097
msgid "License extended successfully."
msgstr ""
#: src/Admin/AdminController.php:1089
#: src/Admin/AdminController.php:1100
msgid "License set to lifetime successfully."
msgstr ""
#: src/Admin/AdminController.php:1095
#. translators: %d: number of licenses
#: src/Admin/AdminController.php:1106
#, php-format
msgid "%d license activated."
msgid_plural "%d licenses activated."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1103
#. translators: %d: number of licenses
#: src/Admin/AdminController.php:1114
#, php-format
msgid "%d license deactivated."
msgid_plural "%d licenses deactivated."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1111
#. translators: %d: number of licenses
#: src/Admin/AdminController.php:1122
#, php-format
msgid "%d license revoked."
msgid_plural "%d licenses revoked."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1119
#. translators: %d: number of licenses
#: src/Admin/AdminController.php:1130
#, php-format
msgid "%d license deleted."
msgid_plural "%d licenses deleted."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1127
#. translators: %d: number of licenses
#: src/Admin/AdminController.php:1138
#, php-format
msgid "%d license extended."
msgid_plural "%d licenses extended."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1132
#: src/Admin/AdminController.php:1143
msgid "License transferred to new domain successfully."
msgstr ""
#: src/Admin/AdminController.php:1135
#: src/Admin/AdminController.php:1146
msgid "Failed to transfer license. The license may be revoked or invalid."
msgstr ""
#: src/Admin/AdminController.php:1138
#: src/Admin/AdminController.php:1149
msgid "No licenses to export."
msgstr ""
#: src/Admin/AdminController.php:1148
#. translators: %d: number of licenses imported
#: src/Admin/AdminController.php:1159
#, php-format
msgid "%d license imported."
msgid_plural "%d licenses imported."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1155
#. translators: %d: number of licenses updated
#: src/Admin/AdminController.php:1166
#, php-format
msgid "%d updated."
msgid_plural "%d updated."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1163
#. translators: %d: number of licenses skipped
#: src/Admin/AdminController.php:1174
#, php-format
msgid "%d skipped."
msgid_plural "%d skipped."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1171
#. translators: %d: number of errors
#: src/Admin/AdminController.php:1182
#, php-format
msgid "%d error."
msgid_plural "%d errors."
msgstr[0] ""
msgstr[1] ""
#: src/Admin/AdminController.php:1192
#: src/Admin/AdminController.php:1203
msgid "Export CSV"
msgstr ""
#: src/Admin/AdminController.php:1196
#: src/Admin/AdminController.php:1207
msgid "Import CSV"
msgstr ""
#: src/Admin/AdminController.php:1211
#: src/Admin/AdminController.php:1222
msgid "Search Licenses"
msgstr ""
#: src/Admin/AdminController.php:1213
#: src/Admin/AdminController.php:1224
msgid "Search license key or domain..."
msgstr ""
#: src/Admin/AdminController.php:1214
#: src/Admin/AdminController.php:1225
msgid "Search"
msgstr ""
#: src/Admin/AdminController.php:1220
#: src/Admin/AdminController.php:1231
msgid "All Statuses"
msgstr ""
#: src/Admin/AdminController.php:1228
#: src/Admin/AdminController.php:1239
msgid "All Products"
msgstr ""
#: src/Admin/AdminController.php:1234
#: src/Admin/AdminController.php:1245
msgid "Filter"
msgstr ""
#: src/Admin/AdminController.php:1237
#: src/Admin/AdminController.php:1248
msgid "Clear"
msgstr ""
#: src/Admin/AdminController.php:1242
#: src/Admin/AdminController.php:1253
msgid "item"
msgstr ""
#: src/Admin/AdminController.php:1242
#: src/Admin/AdminController.php:1253
msgid "items"
msgstr ""
#: src/Admin/AdminController.php:1248
#: src/Admin/AdminController.php:1259
msgid "Showing"
msgstr ""
#: src/Admin/AdminController.php:1248
#: src/Admin/AdminController.php:1259
msgid "license"
msgstr ""
#: src/Admin/AdminController.php:1248
#: src/Admin/AdminController.php:1259
msgid "licenses"
msgstr ""
#: src/Admin/AdminController.php:1250
#: src/Admin/AdminController.php:1261
msgid "filtered"
msgstr ""
#: src/Admin/AdminController.php:1252
#: src/Admin/AdminController.php:1263
msgid "View Dashboard"
msgstr ""
#: src/Admin/AdminController.php:1261 src/Admin/AdminController.php:1446
#: src/Admin/AdminController.php:1272 src/Admin/AdminController.php:1457
msgid "Bulk Actions"
msgstr ""
#: src/Admin/AdminController.php:1262 src/Admin/AdminController.php:1447
#: src/Admin/AdminController.php:1273 src/Admin/AdminController.php:1458
#: src/Admin/VersionAdminController.php:188
#: src/Admin/VersionAdminController.php:419
msgid "Activate"
msgstr ""
#: src/Admin/AdminController.php:1263 src/Admin/AdminController.php:1448
#: src/Admin/AdminController.php:1274 src/Admin/AdminController.php:1459
#: src/Admin/VersionAdminController.php:188
#: src/Admin/VersionAdminController.php:419
msgid "Deactivate"
msgstr ""
#: src/Admin/AdminController.php:1264 src/Admin/AdminController.php:1408
#: src/Admin/AdminController.php:1449
#: src/Admin/AdminController.php:1275 src/Admin/AdminController.php:1419
#: src/Admin/AdminController.php:1460
msgid "Revoke"
msgstr ""
#: src/Admin/AdminController.php:1265 src/Admin/AdminController.php:1450
#: src/Admin/AdminController.php:1276 src/Admin/AdminController.php:1461
msgid "Extend 30 days"
msgstr ""
#: src/Admin/AdminController.php:1266 src/Admin/AdminController.php:1451
#: src/Admin/AdminController.php:1277 src/Admin/AdminController.php:1462
msgid "Extend 90 days"
msgstr ""
#: src/Admin/AdminController.php:1267 src/Admin/AdminController.php:1452
#: src/Admin/AdminController.php:1278 src/Admin/AdminController.php:1463
msgid "Extend 1 year"
msgstr ""
#: src/Admin/AdminController.php:1268 src/Admin/AdminController.php:1417
#: src/Admin/AdminController.php:1453 src/Admin/VersionAdminController.php:191
#: src/Admin/AdminController.php:1279 src/Admin/AdminController.php:1428
#: src/Admin/AdminController.php:1464 src/Admin/VersionAdminController.php:191
#: src/Admin/VersionAdminController.php:422
msgid "Delete"
msgstr ""
#: src/Admin/AdminController.php:1270 src/Admin/AdminController.php:1455
#: src/Admin/AdminController.php:1281 src/Admin/AdminController.php:1466
msgid "Apply"
msgstr ""
#: src/Admin/AdminController.php:1282 src/Admin/AdminController.php:1433
#: src/Admin/AdminController.php:1293 src/Admin/AdminController.php:1444
#: src/Email/LicenseExpirationEmail.php:104
#: src/Email/LicenseExpiredEmail.php:96
msgid "Customer"
msgstr ""
#: src/Admin/AdminController.php:1285 src/Admin/AdminController.php:1436
#: src/Admin/AdminController.php:1296 src/Admin/AdminController.php:1447
msgid "Created"
msgstr ""
#: src/Admin/AdminController.php:1293
#: src/Admin/AdminController.php:1304
msgid "No licenses found."
msgstr ""
#: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:194
#: src/Admin/AdminController.php:1314 src/Frontend/AccountController.php:194
msgid "Copy to clipboard"
msgstr ""
#: src/Admin/AdminController.php:1369
#: src/Admin/AdminController.php:1380
msgid "Leave empty for lifetime"
msgstr ""
#: src/Admin/AdminController.php:1372 src/Admin/AdminController.php:1401
#: src/Admin/AdminController.php:1383 src/Admin/AdminController.php:1412
msgid "Set to lifetime"
msgstr ""
#: src/Admin/AdminController.php:1382
#: src/Admin/AdminController.php:1393
msgid "Test license against API"
msgstr ""
#: src/Admin/AdminController.php:1382
#: src/Admin/AdminController.php:1393
msgid "Test"
msgstr ""
#: src/Admin/AdminController.php:1389 src/Frontend/AccountController.php:207
#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:207
msgid "Transfer to new domain"
msgstr ""
#: src/Admin/AdminController.php:1389 src/Frontend/AccountController.php:209
#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:209
msgid "Transfer"
msgstr ""
#: src/Admin/AdminController.php:1395
#: src/Admin/AdminController.php:1406
msgid "Extend by 30 days"
msgstr ""
#: src/Admin/AdminController.php:1407
#: src/Admin/AdminController.php:1418
msgid "Are you sure?"
msgstr ""
#: src/Admin/AdminController.php:1416
#: src/Admin/AdminController.php:1427
msgid "Are you sure you want to delete this license?"
msgstr ""
#: src/Admin/AdminController.php:1476
#: src/Admin/AdminController.php:1487
msgid "License Validation Test"
msgstr ""
#: src/Admin/AdminController.php:1491
#: src/Admin/AdminController.php:1502
msgid "Testing license..."
msgstr ""
#: src/Admin/AdminController.php:1497 src/Frontend/AccountController.php:249
#: src/Admin/AdminController.php:1508 src/Frontend/AccountController.php:249
msgid "Close"
msgstr ""
#: src/Admin/AdminController.php:1506 src/Frontend/AccountController.php:250
#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:250
msgid "Transfer License to New Domain"
msgstr ""
#: src/Admin/AdminController.php:1513 src/Frontend/AccountController.php:255
#: src/Admin/AdminController.php:1524 src/Frontend/AccountController.php:255
msgid "Current Domain"
msgstr ""
#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:260
#: src/Admin/AdminController.php:1528 src/Frontend/AccountController.php:260
msgid "New Domain"
msgstr ""
#: src/Admin/AdminController.php:1520 src/Frontend/AccountController.php:264
#: src/Admin/AdminController.php:1531 src/Frontend/AccountController.php:264
msgid "Enter the new domain without http:// or www."
msgstr ""
#: src/Admin/AdminController.php:1525 src/Frontend/AccountController.php:269
#: src/Admin/AdminController.php:1536 src/Frontend/AccountController.php:269
msgid "Transfer License"
msgstr ""
#: src/Admin/AdminController.php:1595
#: src/Admin/AdminController.php:1606
msgid "License is VALID"
msgstr ""
#: src/Admin/AdminController.php:1598 src/Admin/VersionAdminController.php:81
#: src/Admin/AdminController.php:1609 src/Admin/VersionAdminController.php:81
#: src/Admin/VersionAdminController.php:136
msgid "Version"
msgstr ""
#: src/Admin/AdminController.php:1606
#: src/Admin/AdminController.php:1617
msgid "License is INVALID"
msgstr ""
#: src/Admin/AdminController.php:1608
#: src/Admin/AdminController.php:1619
msgid "Error Code"
msgstr ""
#: src/Admin/AdminController.php:1609
#: src/Admin/AdminController.php:1620
msgid "Message"
msgstr ""
#: src/Admin/AdminController.php:1622
#: src/Admin/AdminController.php:1633
msgid "Failed to test license. Please try again."
msgstr ""
#: src/Admin/AdminController.php:1660 src/Admin/AdminController.php:1753
#: src/Admin/AdminController.php:1671 src/Admin/AdminController.php:1764
msgid "Import Licenses"
msgstr ""
#: src/Admin/AdminController.php:1662
#: src/Admin/AdminController.php:1673
msgid "Back to Licenses"
msgstr ""
#: src/Admin/AdminController.php:1672
#: src/Admin/AdminController.php:1683
msgid "Error uploading file. Please try again."
msgstr ""
#: src/Admin/AdminController.php:1675
#: src/Admin/AdminController.php:1686
msgid "Invalid file type. Please upload a CSV file."
msgstr ""
#: src/Admin/AdminController.php:1678
#: src/Admin/AdminController.php:1689
msgid "Error reading file. Please check the file format."
msgstr ""
#: src/Admin/AdminController.php:1681
#: src/Admin/AdminController.php:1692
msgid "An error occurred during import."
msgstr ""
#: src/Admin/AdminController.php:1689
#: src/Admin/AdminController.php:1700
msgid "Import Licenses from CSV"
msgstr ""
#: src/Admin/AdminController.php:1692
#: src/Admin/AdminController.php:1703
msgid ""
"Upload a CSV file to import licenses. You can use the exported CSV format or "
"a simplified format."
msgstr ""
#: src/Admin/AdminController.php:1695
#: src/Admin/AdminController.php:1706
msgid "CSV Format"
msgstr ""
#: src/Admin/AdminController.php:1697
#: src/Admin/AdminController.php:1708
msgid "The CSV file should contain the following columns:"
msgstr ""
#: src/Admin/AdminController.php:1701
#: src/Admin/AdminController.php:1712
msgid "Full Format (from Export):"
msgstr ""
#: src/Admin/AdminController.php:1704
#: src/Admin/AdminController.php:1715
msgid "Simplified Format:"
msgstr ""
#: src/Admin/AdminController.php:1709
#: src/Admin/AdminController.php:1720
msgid "Notes:"
msgstr ""
#: src/Admin/AdminController.php:1710
#: src/Admin/AdminController.php:1721
msgid "Leave License Key empty to auto-generate."
msgstr ""
#: src/Admin/AdminController.php:1711
#: src/Admin/AdminController.php:1722
msgid "Status can be: active, inactive, expired, revoked (defaults to active)."
msgstr ""
#: src/Admin/AdminController.php:1712
#: src/Admin/AdminController.php:1723
msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"."
msgstr ""
#: src/Admin/AdminController.php:1724
#: src/Admin/AdminController.php:1735
msgid "CSV File"
msgstr ""
#: src/Admin/AdminController.php:1728
#: src/Admin/AdminController.php:1739
msgid "Select a CSV file to import."
msgstr ""
#: src/Admin/AdminController.php:1732
#: src/Admin/AdminController.php:1743
msgid "Options"
msgstr ""
#: src/Admin/AdminController.php:1736
#: src/Admin/AdminController.php:1747
msgid "Skip first row (header row)"
msgstr ""
#: src/Admin/AdminController.php:1741
#: src/Admin/AdminController.php:1752
msgid "Update existing licenses (by license key)"
msgstr ""
#: src/Admin/AdminController.php:1744
#: src/Admin/AdminController.php:1755
msgid ""
"If enabled, licenses with matching keys will be updated instead of skipped."
msgstr ""
#: src/Admin/AdminController.php:1771
#: src/Admin/AdminController.php:1782
msgid "License"
msgstr ""
#: src/Admin/AdminController.php:1830
#: src/Admin/AdminController.php:1841
msgid "No domain specified"
msgstr ""
@@ -1171,28 +1183,28 @@ msgstr ""
msgid "Too many requests. Please try again later."
msgstr ""
#: src/Api/RestApiController.php:222 src/Api/RestApiController.php:255
#: src/Api/RestApiController.php:345 src/Api/RestApiController.php:378
#: src/License/LicenseManager.php:357
msgid "License key not found."
msgstr ""
#: src/Api/RestApiController.php:263
#: src/Api/RestApiController.php:386
msgid "This license is not valid."
msgstr ""
#: src/Api/RestApiController.php:273
#: src/Api/RestApiController.php:396
msgid "License is already activated for this domain."
msgstr ""
#: src/Api/RestApiController.php:282
#: src/Api/RestApiController.php:405
msgid "Maximum number of activations reached."
msgstr ""
#: src/Api/RestApiController.php:293
#: src/Api/RestApiController.php:416
msgid "Failed to activate license."
msgstr ""
#: src/Api/RestApiController.php:299
#: src/Api/RestApiController.php:422
msgid "License activated successfully."
msgstr ""
@@ -1238,6 +1250,14 @@ msgstr ""
msgid "Domain for license activation"
msgstr ""
#: src/License/PluginLicenseChecker.php:117
msgid "License settings not configured."
msgstr ""
#: src/License/PluginLicenseChecker.php:153
msgid "Could not connect to license server."
msgstr ""
#: src/License/LicenseManager.php:366
msgid "This license has been revoked."
msgstr ""
@@ -1260,18 +1280,11 @@ msgstr ""
msgid "Unknown Product"
msgstr ""
#: src/License/PluginLicenseChecker.php:117
msgid "License settings not configured."
msgstr ""
#: src/License/PluginLicenseChecker.php:153
msgid "Could not connect to license server."
msgstr ""
#: src/Product/VersionManager.php:166
msgid "Attachment file not found."
msgstr ""
#. translators: 1: provided hash, 2: calculated hash
#: src/Product/VersionManager.php:177
#, php-format
msgid "File checksum does not match. Expected: %1$s, Got: %2$s"
@@ -1290,6 +1303,7 @@ msgstr ""
msgid "%d days"
msgstr ""
#. translators: %s: URL to settings page
#: src/Product/LicensedProductType.php:119
#, php-format
msgid "Leave fields empty to use default settings from %s."
@@ -1303,6 +1317,7 @@ msgstr ""
msgid "Max Activations"
msgstr ""
#. translators: %d: default max activations value
#: src/Product/LicensedProductType.php:131
#, php-format
msgid "Maximum number of domain activations per license. Default: %d"
@@ -1312,6 +1327,7 @@ msgstr ""
msgid "License Validity (Days)"
msgstr ""
#. translators: %s: default validity value
#: src/Product/LicensedProductType.php:149
#, php-format
msgid "Number of days the license is valid. Leave empty for default (%s)."
@@ -1321,6 +1337,7 @@ msgstr ""
msgid "Bind to Major Version"
msgstr ""
#. translators: %s: default bind to version value (Yes/No)
#: src/Product/LicensedProductType.php:167
#, php-format
msgid ""
@@ -1400,11 +1417,11 @@ msgid "You have no licenses yet."
msgstr ""
#: src/Frontend/AccountController.php:190
#: src/Email/LicenseExpirationEmail.php:207
#: src/Email/LicenseExpirationEmail.php:270
#: src/Email/LicenseEmailController.php:212
#: src/Email/LicenseEmailController.php:216
#: src/Email/LicenseEmailController.php:320
#: src/Email/LicenseExpirationEmail.php:207
#: src/Email/LicenseExpirationEmail.php:270
#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256
msgid "License Key:"
msgstr ""
@@ -1417,9 +1434,9 @@ msgid "Domain:"
msgstr ""
#: src/Frontend/AccountController.php:213
#: src/Email/LicenseEmailController.php:323
#: src/Email/LicenseExpirationEmail.php:219
#: src/Email/LicenseExpirationEmail.php:272
#: src/Email/LicenseEmailController.php:323
msgid "Expires:"
msgstr ""
@@ -1481,24 +1498,6 @@ msgstr ""
msgid "Failed to transfer license. Please try again."
msgstr ""
#: src/Email/LicenseEmailController.php:256
msgid "Your License Keys"
msgstr ""
#: src/Email/LicenseEmailController.php:260
#: src/Email/LicenseEmailController.php:315
msgid "Licensed Domain:"
msgstr ""
#: src/Email/LicenseEmailController.php:296
#: src/Email/LicenseEmailController.php:330
msgid "You can also view your licenses in your account under \"Licenses\"."
msgstr ""
#: src/Email/LicenseEmailController.php:311
msgid "YOUR LICENSE KEYS"
msgstr ""
#: src/Email/LicenseExpirationEmail.php:55
msgid "License Expiration Warning"
msgstr ""
@@ -1561,6 +1560,7 @@ msgid ""
"expiration date."
msgstr ""
#. translators: %s: list of placeholders
#: src/Email/LicenseExpirationEmail.php:301
#: src/Email/LicenseExpiredEmail.php:288
#, php-format
@@ -1607,6 +1607,24 @@ msgstr ""
msgid "Choose which format of email to send."
msgstr ""
#: src/Email/LicenseEmailController.php:256
msgid "Your License Keys"
msgstr ""
#: src/Email/LicenseEmailController.php:260
#: src/Email/LicenseEmailController.php:315
msgid "Licensed Domain:"
msgstr ""
#: src/Email/LicenseEmailController.php:296
#: src/Email/LicenseEmailController.php:330
msgid "You can also view your licenses in your account under \"Licenses\"."
msgstr ""
#: src/Email/LicenseEmailController.php:311
msgid "YOUR LICENSE KEYS"
msgstr ""
#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76
msgid "License Expired"
msgstr ""
@@ -1648,19 +1666,20 @@ msgstr ""
msgid "To continue using this product, please renew your license."
msgstr ""
#: src/Plugin.php:257
#: src/Plugin.php:258
msgid "WC Licensed Product"
msgstr ""
#: src/Plugin.php:258
#: src/Plugin.php:259
msgid ""
"Plugin license is not configured or invalid. Frontend features are disabled."
msgstr ""
#: src/Plugin.php:259
#: src/Plugin.php:260
msgid "Configure License"
msgstr ""
#. translators: %s: WooCommerce plugin name
#: wc-licensed-product.php:61
#, php-format
msgid "%s requires WooCommerce to be installed and active."