diff --git a/CHANGELOG.md b/CHANGELOG.md index e0d8403..c5cd686 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.1] - 2026-01-22 + +### Changed + +- SHA256 hash input changed from text field to file upload field +- Checksum files (.sha256 or .txt) can now be uploaded directly +- Improved user experience for version integrity verification + +### Technical Details + +- Added `readChecksumFile()` JavaScript function using FileReader API with Promise support +- Checksum file format supports both "hash filename" and plain "hash" formats +- Added localized error messages for checksum file validation + ## [0.2.0] - 2026-01-22 ### Added diff --git a/assets/js/versions.js b/assets/js/versions.js index 92205d6..da31462 100644 --- a/assets/js/versions.js +++ b/assets/js/versions.js @@ -101,9 +101,38 @@ $('#selected_file_name').text(''); $('#remove-version-file-btn').hide(); - // Hide and clear SHA256 hash field + // Hide and clear checksum file field $('#sha256-hash-row').hide(); - $('#new_file_hash').val(''); + $('#new_checksum_file').val(''); + }, + + /** + * Read checksum from uploaded file + * Supports formats: "hash filename" or just "hash" + */ + readChecksumFile: function(file) { + return new Promise(function(resolve, reject) { + if (!file) { + resolve(''); + return; + } + + var reader = new FileReader(); + reader.onload = function(e) { + var content = e.target.result.trim(); + // Extract hash from content (format: "hash filename" or just "hash") + var match = content.match(/^([a-fA-F0-9]{64})/); + if (match) { + resolve(match[1].toLowerCase()); + } else { + reject(new Error(wcLicensedProductVersions.strings.invalidChecksumFile || 'Invalid checksum file format')); + } + }; + reader.onerror = function() { + reject(new Error(wcLicensedProductVersions.strings.checksumReadError || 'Failed to read checksum file')); + }; + reader.readAsText(file); + }); }, /** @@ -134,13 +163,14 @@ addVersion: function(e) { e.preventDefault(); + var self = WCLicensedProductVersions; var $btn = $(this); var $spinner = $btn.siblings('.spinner'); var productId = $btn.data('product-id'); var version = $('#new_version').val().trim(); var releaseNotes = $('#new_release_notes').val().trim(); var attachmentId = $('#new_attachment_id').val(); - var fileHash = $('#new_file_hash').val().trim(); + var checksumFile = $('#new_checksum_file')[0].files[0]; // Validate version if (!version) { @@ -156,45 +186,52 @@ $btn.prop('disabled', true); $spinner.addClass('is-active'); - $.ajax({ - url: wcLicensedProductVersions.ajaxUrl, - type: 'POST', - data: { - action: 'wc_licensed_product_add_version', - nonce: wcLicensedProductVersions.nonce, - product_id: productId, - version: version, - release_notes: releaseNotes, - attachment_id: attachmentId, - file_hash: fileHash - }, - success: function(response) { - if (response.success) { - // Remove "no versions" row if present - $('#versions-table tbody .no-versions').remove(); + // Read checksum file if provided, then submit + self.readChecksumFile(checksumFile).then(function(fileHash) { + $.ajax({ + url: wcLicensedProductVersions.ajaxUrl, + type: 'POST', + data: { + action: 'wc_licensed_product_add_version', + nonce: wcLicensedProductVersions.nonce, + product_id: productId, + version: version, + release_notes: releaseNotes, + attachment_id: attachmentId, + file_hash: fileHash + }, + success: function(response) { + if (response.success) { + // Remove "no versions" row if present + $('#versions-table tbody .no-versions').remove(); - // Add new row to table - $('#versions-table tbody').prepend(response.data.html); + // Add new row to table + $('#versions-table tbody').prepend(response.data.html); - // Clear form - $('#new_version').val(''); - $('#new_release_notes').val(''); - $('#new_attachment_id').val(''); - $('#selected_file_name').text(''); - $('#remove-version-file-btn').hide(); - $('#sha256-hash-row').hide(); - $('#new_file_hash').val(''); - } else { - alert(response.data.message || wcLicensedProductVersions.strings.error); + // Clear form + $('#new_version').val(''); + $('#new_release_notes').val(''); + $('#new_attachment_id').val(''); + $('#selected_file_name').text(''); + $('#remove-version-file-btn').hide(); + $('#sha256-hash-row').hide(); + $('#new_checksum_file').val(''); + } else { + alert(response.data.message || wcLicensedProductVersions.strings.error); + } + }, + error: function() { + alert(wcLicensedProductVersions.strings.error); + }, + complete: function() { + $btn.prop('disabled', false); + $spinner.removeClass('is-active'); } - }, - error: function() { - alert(wcLicensedProductVersions.strings.error); - }, - complete: function() { - $btn.prop('disabled', false); - $spinner.removeClass('is-active'); - } + }); + }).catch(function(error) { + alert(error.message); + $btn.prop('disabled', false); + $spinner.removeClass('is-active'); }); }, diff --git a/languages/wc-licensed-product-de_CH.mo b/languages/wc-licensed-product-de_CH.mo index cb9618d..39a7e82 100644 Binary files a/languages/wc-licensed-product-de_CH.mo and b/languages/wc-licensed-product-de_CH.mo differ diff --git a/languages/wc-licensed-product-de_CH.po b/languages/wc-licensed-product-de_CH.po index 2d4d852..09a3574 100644 --- a/languages/wc-licensed-product-de_CH.po +++ b/languages/wc-licensed-product-de_CH.po @@ -3,10 +3,10 @@ # This file is distributed under the GPL-2.0-or-later. msgid "" msgstr "" -"Project-Id-Version: WC Licensed Product 0.2.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-22 11:52+0100\n" -"PO-Revision-Date: 2026-01-21T00:00:00+00:00\n" +"Project-Id-Version: WC Licensed Product 0.2.1\n" +"Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" +"POT-Creation-Date: 2026-01-22 17:10+0100\n" +"PO-Revision-Date: 2026-01-22T17:15:00+00:00\n" "Last-Translator: Marco Graetsch \n" "Language-Team: German (Switzerland) \n" "Language: de_CH\n" @@ -15,30 +15,285 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. translators: %s: WooCommerce plugin name -#: wc-licensed-product.php:61 -#, php-format -msgid "%s requires WooCommerce to be installed and active." -msgstr "%s benötigt WooCommerce als installierte und aktivierte Erweiterung." +#: src/Admin/SettingsController.php:45 +msgid "Licensed Products" +msgstr "Lizensierte Produkte" -#: wc-licensed-product.php:119 -msgid "WC Licensed Product requires WooCommerce to be installed and active." +#: src/Admin/SettingsController.php:56 +msgid "Default License Settings" +msgstr "Standard Lizenz-Einstellungen" + +#: src/Admin/SettingsController.php:58 +msgid "" +"These settings serve as defaults for new licensed products. Individual " +"product settings override these defaults." msgstr "" -"WC Licensed Product benötigt WooCommerce als installierte und aktivierte " -"Erweiterung." +"Diese Einstellungen dienen als Standard für neue lizensierte Produkte. " +"Individuelle Produkteinstellungen überschreiben diese Standards." -#: wc-licensed-product.php:137 src/Admin/AdminController.php:936 -msgid "Settings" -msgstr "Einstellungen" +#: src/Admin/SettingsController.php:62 +msgid "Default Max Activations" +msgstr "Standard Max. Aktivierungen" + +#: src/Admin/SettingsController.php:64 +msgid "Default maximum number of domain activations per license." +msgstr "Standard maximale Anzahl der Domain-Aktivierungen pro Lizenz." + +#: src/Admin/SettingsController.php:73 +msgid "Default License Validity (Days)" +msgstr "Standard Lizenz-Gültigkeit (Tage)" + +#: src/Admin/SettingsController.php:75 +msgid "" +"Default number of days a license is valid. Leave empty or set to 0 for " +"lifetime licenses." +msgstr "" +"Standard Anzahl Tage, die eine Lizenz gültig ist. Leer lassen oder auf 0 " +"setzen für lebenslange Lizenzen." + +#: src/Admin/SettingsController.php:78 src/Admin/OrderLicenseController.php:201 +#: src/Admin/AdminController.php:148 src/Admin/AdminController.php:263 +#: src/Admin/AdminController.php:1335 src/Product/LicensedProductType.php:104 +#: src/Product/LicensedProductType.php:152 +msgid "Lifetime" +msgstr "Lebenslang" + +#: src/Admin/SettingsController.php:85 +msgid "Default Bind to Major Version" +msgstr "Standard An Hauptversion binden" + +#: src/Admin/SettingsController.php:87 +msgid "" +"If enabled, licenses are bound to the major version at purchase time by " +"default." +msgstr "" +"Falls aktiviert, werden Lizenzen standardmässig an die Hauptversion zum " +"Kaufzeitpunkt gebunden." + +#: src/Admin/SettingsController.php:97 +msgid "Expiration Warning Schedule" +msgstr "Ablaufwarnung Zeitplan" + +#. translators: %s: URL to WooCommerce email settings +#: src/Admin/SettingsController.php:101 +#, php-format +msgid "" +"Configure when expiration warning emails are sent. To customize the email " +"template, enable/disable, or change the subject, go to %s." +msgstr "" +"Konfigurieren Sie, wann Ablaufwarnungs-E-Mails gesendet werden. Um die E-" +"Mail-Vorlage anzupassen, zu aktivieren/deaktivieren oder den Betreff zu " +"ändern, gehen Sie zu %s." + +#: src/Admin/SettingsController.php:103 +msgid "WooCommerce > Settings > Emails > License Expiration Warning" +msgstr "WooCommerce > Einstellungen > E-Mails > Lizenzablauf-Warnung" + +#: src/Admin/SettingsController.php:108 +msgid "First Warning (Days Before)" +msgstr "Erste Warnung (Tage vorher)" + +#: src/Admin/SettingsController.php:110 +msgid "Days before expiration to send the first warning email." +msgstr "Tage vor Ablauf, um die erste Warn-E-Mail zu senden." + +#: src/Admin/SettingsController.php:119 +msgid "Second Warning (Days Before)" +msgstr "Zweite Warnung (Tage vorher)" + +#: src/Admin/SettingsController.php:121 +msgid "" +"Days before expiration to send the second warning email. Set to 0 to disable." +msgstr "" +"Tage vor Ablauf, um die zweite Warn-E-Mail zu senden. Setzen Sie auf 0, um " +"sie zu deaktivieren." + +#: src/Admin/OrderLicenseController.php:56 +msgid "Product Licenses" +msgstr "Produktlizenzen" + +#: src/Admin/OrderLicenseController.php:77 +#: src/Admin/OrderLicenseController.php:313 +msgid "Order not found." +msgstr "Bestellung nicht gefunden." + +#: src/Admin/OrderLicenseController.php:92 +msgid "This order does not contain licensed products." +msgstr "Diese Bestellung enthält keine lizensierten Produkte." + +#: src/Admin/OrderLicenseController.php:106 +msgid "Order Domain" +msgstr "Bestellungs-Domain" + +#: src/Admin/OrderLicenseController.php:108 +msgid "" +"The domain specified during checkout. Changing this will not automatically " +"update existing license domains." +msgstr "" +"Die bei der Bestellung angegebene Domain. Eine Änderung aktualisiert nicht " +"automatisch bestehende Lizenz-Domains." + +#: src/Admin/OrderLicenseController.php:116 +#: src/Checkout/CheckoutController.php:89 +#: src/Checkout/CheckoutBlocksIntegration.php:102 +msgid "example.com" +msgstr "beispiel.ch" + +#: src/Admin/OrderLicenseController.php:118 +#: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:147 +#: src/Admin/AdminController.php:1302 src/Admin/AdminController.php:1322 +#: src/Admin/AdminController.php:1343 +msgid "Save" +msgstr "Speichern" -#: src/Admin/AdminController.php:73 src/Admin/AdminController.php:74 -#: src/Admin/AdminController.php:87 src/Admin/AdminController.php:1162 #: src/Admin/OrderLicenseController.php:127 -#: src/Admin/OrderLicenseController.php:222 -#: src/Frontend/AccountController.php:90 +#: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:73 +#: src/Admin/AdminController.php:74 src/Admin/AdminController.php:87 +#: src/Admin/AdminController.php:1162 src/Frontend/AccountController.php:90 msgid "Licenses" msgstr "Lizenzen" +#: src/Admin/OrderLicenseController.php:131 +msgid "No licenses have been generated for this order yet." +msgstr "Für diese Bestellung wurden noch keine Lizenzen generiert." + +#: src/Admin/OrderLicenseController.php:134 +msgid "" +"Licenses should be generated automatically when an order is paid. If " +"missing, check that a domain was specified during checkout." +msgstr "" +"Lizenzen sollten automatisch generiert werden, wenn eine Bestellung bezahlt " +"wird. Falls fehlend, prüfen Sie, ob bei der Bestellung eine Domain angegeben " +"wurde." + +#: src/Admin/OrderLicenseController.php:137 +msgid "Licenses will be generated when the order is marked as paid/completed." +msgstr "" +"Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen " +"markiert wird." + +#: src/Admin/OrderLicenseController.php:144 src/Admin/AdminController.php:1253 +#: src/Admin/AdminController.php:1391 src/Email/LicenseEmailController.php:230 +msgid "License Key" +msgstr "Lizenzschlüssel" + +#: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1254 +#: src/Admin/AdminController.php:1392 src/Email/LicenseEmailController.php:229 +msgid "Product" +msgstr "Produkt" + +#: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1256 +#: src/Admin/AdminController.php:1394 +msgid "Domain" +msgstr "Domain" + +#: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1257 +#: src/Admin/AdminController.php:1395 src/Admin/VersionAdminController.php:132 +msgid "Status" +msgstr "Status" + +#: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1259 +#: src/Admin/AdminController.php:1397 src/Email/LicenseEmailController.php:231 +msgid "Expires" +msgstr "Läuft ab" + +#: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1260 +#: src/Admin/AdminController.php:1398 src/Admin/VersionAdminController.php:134 +msgid "Actions" +msgstr "Aktionen" + +#: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:192 +#: src/Admin/AdminController.php:987 +msgid "Unknown" +msgstr "Unbekannt" + +#: src/Admin/OrderLicenseController.php:178 +msgid "Edit domain" +msgstr "Domain bearbeiten" + +#: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:146 +#: src/Admin/AdminController.php:1303 src/Admin/AdminController.php:1323 +#: src/Admin/AdminController.php:1344 src/Frontend/AccountController.php:270 +msgid "Cancel" +msgstr "Abbrechen" + +#: src/Admin/OrderLicenseController.php:208 +msgid "View in Licenses" +msgstr "In Lizenzen anzeigen" + +#. 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." +msgstr "" +"Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite " +"%s." + +#: src/Admin/OrderLicenseController.php:285 src/Admin/AdminController.php:141 +msgid "Saving..." +msgstr "Speichere..." + +#: src/Admin/OrderLicenseController.php:286 +msgid "Saved!" +msgstr "Gespeichert!" + +#: src/Admin/OrderLicenseController.php:287 +msgid "Error saving. Please try again." +msgstr "Fehler beim Speichern. Bitte versuchen Sie es erneut." + +#: src/Admin/OrderLicenseController.php:288 +#: src/Frontend/AccountController.php:313 +#: src/Frontend/AccountController.php:345 +msgid "Please enter a valid domain." +msgstr "Bitte geben Sie eine gültige Domain ein." + +#: src/Admin/OrderLicenseController.php:301 +#: src/Admin/OrderLicenseController.php:340 src/Admin/AdminController.php:170 +#: src/Admin/AdminController.php:210 src/Admin/AdminController.php:246 +#: src/Admin/AdminController.php:298 src/Admin/AdminController.php:336 +#: src/Admin/VersionAdminController.php:242 +#: src/Admin/VersionAdminController.php:311 +#: src/Admin/VersionAdminController.php:337 +msgid "Permission denied." +msgstr "Zugriff verweigert." + +#: src/Admin/OrderLicenseController.php:308 +msgid "Invalid order ID." +msgstr "Ungültige Bestellungs-ID." + +#: src/Admin/OrderLicenseController.php:319 +#: src/Admin/OrderLicenseController.php:357 +msgid "Invalid domain format." +msgstr "Ungültiges Domain-Format." + +#: src/Admin/OrderLicenseController.php:327 +msgid "Order domain updated." +msgstr "Bestellungs-Domain aktualisiert." + +#: src/Admin/OrderLicenseController.php:347 src/Admin/AdminController.php:217 +#: src/Admin/AdminController.php:253 src/Admin/AdminController.php:305 +#: src/Admin/AdminController.php:342 +msgid "Invalid license ID." +msgstr "Ungültige Lizenz-ID." + +#: src/Admin/OrderLicenseController.php:351 src/Admin/AdminController.php:309 +msgid "Domain cannot be empty." +msgstr "Domain darf nicht leer sein." + +#: src/Admin/OrderLicenseController.php:363 +#: src/Frontend/DownloadController.php:105 +#: src/Frontend/AccountController.php:351 +msgid "License not found." +msgstr "Lizenz nicht gefunden." + +#: src/Admin/OrderLicenseController.php:371 +msgid "License domain updated." +msgstr "Lizenz-Domain aktualisiert." + +#: src/Admin/OrderLicenseController.php:375 +msgid "Failed to update license domain." +msgstr "Lizenz-Domain konnte nicht aktualisiert werden." + #: src/Admin/AdminController.php:90 msgid "Overview" msgstr "Übersicht" @@ -55,10 +310,6 @@ msgstr "Suche..." msgid "Search failed" msgstr "Suche fehlgeschlagen" -#: src/Admin/AdminController.php:141 src/Admin/OrderLicenseController.php:285 -msgid "Saving..." -msgstr "Speichere..." - #: src/Admin/AdminController.php:142 msgid "Saved" msgstr "Gespeichert" @@ -79,27 +330,6 @@ msgstr "" msgid "Edit" msgstr "Bearbeiten" -#: src/Admin/AdminController.php:146 src/Admin/AdminController.php:1303 -#: src/Admin/AdminController.php:1323 src/Admin/AdminController.php:1344 -#: src/Admin/OrderLicenseController.php:185 -#: src/Frontend/AccountController.php:270 -msgid "Cancel" -msgstr "Abbrechen" - -#: src/Admin/AdminController.php:147 src/Admin/AdminController.php:1302 -#: src/Admin/AdminController.php:1322 src/Admin/AdminController.php:1343 -#: src/Admin/OrderLicenseController.php:118 -#: src/Admin/OrderLicenseController.php:182 -msgid "Save" -msgstr "Speichern" - -#: src/Admin/AdminController.php:148 src/Admin/AdminController.php:263 -#: src/Admin/AdminController.php:1335 src/Admin/OrderLicenseController.php:201 -#: src/Admin/SettingsController.php:78 src/Product/LicensedProductType.php:104 -#: src/Product/LicensedProductType.php:152 -msgid "Lifetime" -msgstr "Lebenslang" - #: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:308 msgid "Copied!" msgstr "Kopiert!" @@ -111,14 +341,14 @@ msgstr "Kopieren fehlgeschlagen" #: src/Admin/AdminController.php:153 src/Admin/AdminController.php:875 #: src/Admin/AdminController.php:1194 src/Admin/AdminController.php:1317 #: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:381 +#: src/Admin/VersionAdminController.php:387 msgid "Active" msgstr "Aktiv" #: src/Admin/AdminController.php:154 src/Admin/AdminController.php:882 #: src/Admin/AdminController.php:1195 src/Admin/AdminController.php:1318 #: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:381 +#: src/Admin/VersionAdminController.php:387 msgid "Inactive" msgstr "Inaktiv" @@ -132,31 +362,10 @@ msgstr "Abgelaufen" msgid "Revoked" msgstr "Widerrufen" -#: src/Admin/AdminController.php:170 src/Admin/AdminController.php:210 -#: src/Admin/AdminController.php:246 src/Admin/AdminController.php:298 -#: src/Admin/AdminController.php:336 src/Admin/OrderLicenseController.php:301 -#: src/Admin/OrderLicenseController.php:340 -#: src/Admin/VersionAdminController.php:240 -#: src/Admin/VersionAdminController.php:305 -#: src/Admin/VersionAdminController.php:331 -msgid "Permission denied." -msgstr "Zugriff verweigert." - -#: src/Admin/AdminController.php:192 src/Admin/AdminController.php:987 -#: src/Admin/OrderLicenseController.php:168 -msgid "Unknown" -msgstr "Unbekannt" - #: src/Admin/AdminController.php:193 src/Admin/AdminController.php:991 msgid "Guest" msgstr "Gast" -#: src/Admin/AdminController.php:217 src/Admin/AdminController.php:253 -#: src/Admin/AdminController.php:305 src/Admin/AdminController.php:342 -#: src/Admin/OrderLicenseController.php:347 -msgid "Invalid license ID." -msgstr "Ungültige Lizenz-ID." - #: src/Admin/AdminController.php:222 msgid "Invalid status." msgstr "Ungültiger Status." @@ -185,10 +394,6 @@ msgstr "Ablaufdatum erfolgreich aktualisiert." msgid "Invalid date format." msgstr "Ungültiges Datumsformat." -#: src/Admin/AdminController.php:309 src/Admin/OrderLicenseController.php:351 -msgid "Domain cannot be empty." -msgstr "Domain darf nicht leer sein." - #: src/Admin/AdminController.php:320 msgid "Domain updated successfully." msgstr "Domain erfolgreich aktualisiert." @@ -269,6 +474,10 @@ msgstr "Lizenzen verwalten" msgid "Export to CSV" msgstr "Als CSV exportieren" +#: src/Admin/AdminController.php:936 wc-licensed-product.php:137 +msgid "Settings" +msgstr "Einstellungen" + #: src/Admin/AdminController.php:1050 msgid "License updated successfully." msgstr "Lizenz erfolgreich aktualisiert." @@ -441,13 +650,13 @@ msgstr "Massenaktionen" #: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1407 #: src/Admin/VersionAdminController.php:171 -#: src/Admin/VersionAdminController.php:387 +#: src/Admin/VersionAdminController.php:393 msgid "Activate" msgstr "Aktivieren" #: src/Admin/AdminController.php:1236 src/Admin/AdminController.php:1408 #: src/Admin/VersionAdminController.php:171 -#: src/Admin/VersionAdminController.php:387 +#: src/Admin/VersionAdminController.php:393 msgid "Deactivate" msgstr "Deaktivieren" @@ -470,7 +679,7 @@ msgstr "1 Jahr verlängern" #: src/Admin/AdminController.php:1241 src/Admin/AdminController.php:1377 #: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:174 -#: src/Admin/VersionAdminController.php:390 +#: src/Admin/VersionAdminController.php:396 msgid "Delete" msgstr "Löschen" @@ -478,50 +687,15 @@ msgstr "Löschen" msgid "Apply" msgstr "Anwenden" -#: src/Admin/AdminController.php:1253 src/Admin/AdminController.php:1391 -#: src/Admin/OrderLicenseController.php:144 -#: src/Email/LicenseEmailController.php:230 -msgid "License Key" -msgstr "Lizenzschlüssel" - -#: src/Admin/AdminController.php:1254 src/Admin/AdminController.php:1392 -#: src/Admin/OrderLicenseController.php:145 -#: src/Email/LicenseEmailController.php:229 -msgid "Product" -msgstr "Produkt" - #: src/Admin/AdminController.php:1255 src/Admin/AdminController.php:1393 #: src/Email/LicenseExpirationEmail.php:104 msgid "Customer" msgstr "Kunde" -#: src/Admin/AdminController.php:1256 src/Admin/AdminController.php:1394 -#: src/Admin/OrderLicenseController.php:146 -msgid "Domain" -msgstr "Domain" - -#: src/Admin/AdminController.php:1257 src/Admin/AdminController.php:1395 -#: src/Admin/OrderLicenseController.php:147 -#: src/Admin/VersionAdminController.php:132 -msgid "Status" -msgstr "Status" - #: src/Admin/AdminController.php:1258 src/Admin/AdminController.php:1396 msgid "Created" msgstr "Erstellt" -#: src/Admin/AdminController.php:1259 src/Admin/AdminController.php:1397 -#: src/Admin/OrderLicenseController.php:148 -#: src/Email/LicenseEmailController.php:231 -msgid "Expires" -msgstr "Läuft ab" - -#: src/Admin/AdminController.php:1260 src/Admin/AdminController.php:1398 -#: src/Admin/OrderLicenseController.php:149 -#: src/Admin/VersionAdminController.php:134 -msgid "Actions" -msgstr "Aktionen" - #: src/Admin/AdminController.php:1266 msgid "No licenses found." msgstr "Keine Lizenzen gefunden." @@ -654,199 +828,6 @@ msgstr "Lizenz" msgid "No domain specified" msgstr "Keine Domain angegeben" -#: src/Admin/OrderLicenseController.php:56 -msgid "Product Licenses" -msgstr "Produktlizenzen" - -#: src/Admin/OrderLicenseController.php:77 -#: src/Admin/OrderLicenseController.php:313 -msgid "Order not found." -msgstr "Bestellung nicht gefunden." - -#: src/Admin/OrderLicenseController.php:92 -msgid "This order does not contain licensed products." -msgstr "Diese Bestellung enthält keine lizensierten Produkte." - -#: src/Admin/OrderLicenseController.php:106 -msgid "Order Domain" -msgstr "Bestellungs-Domain" - -#: src/Admin/OrderLicenseController.php:108 -msgid "" -"The domain specified during checkout. Changing this will not automatically " -"update existing license domains." -msgstr "" -"Die bei der Bestellung angegebene Domain. Eine Änderung aktualisiert nicht " -"automatisch bestehende Lizenz-Domains." - -#: src/Admin/OrderLicenseController.php:116 -#: src/Checkout/CheckoutController.php:89 -#: src/Checkout/CheckoutBlocksIntegration.php:102 -msgid "example.com" -msgstr "beispiel.ch" - -#: src/Admin/OrderLicenseController.php:131 -msgid "No licenses have been generated for this order yet." -msgstr "Für diese Bestellung wurden noch keine Lizenzen generiert." - -#: src/Admin/OrderLicenseController.php:134 -msgid "" -"Licenses should be generated automatically when an order is paid. If " -"missing, check that a domain was specified during checkout." -msgstr "" -"Lizenzen sollten automatisch generiert werden, wenn eine Bestellung bezahlt " -"wird. Falls fehlend, prüfen Sie, ob bei der Bestellung eine Domain angegeben " -"wurde." - -#: src/Admin/OrderLicenseController.php:137 -msgid "Licenses will be generated when the order is marked as paid/completed." -msgstr "" -"Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen " -"markiert wird." - -#: src/Admin/OrderLicenseController.php:178 -msgid "Edit domain" -msgstr "Domain bearbeiten" - -#: src/Admin/OrderLicenseController.php:208 -msgid "View in Licenses" -msgstr "In Lizenzen anzeigen" - -#. 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." -msgstr "" -"Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite " -"%s." - -#: src/Admin/OrderLicenseController.php:286 -msgid "Saved!" -msgstr "Gespeichert!" - -#: src/Admin/OrderLicenseController.php:287 -msgid "Error saving. Please try again." -msgstr "Fehler beim Speichern. Bitte versuchen Sie es erneut." - -#: src/Admin/OrderLicenseController.php:288 -#: src/Frontend/AccountController.php:313 -#: src/Frontend/AccountController.php:345 -msgid "Please enter a valid domain." -msgstr "Bitte geben Sie eine gültige Domain ein." - -#: src/Admin/OrderLicenseController.php:308 -msgid "Invalid order ID." -msgstr "Ungültige Bestellungs-ID." - -#: src/Admin/OrderLicenseController.php:319 -#: src/Admin/OrderLicenseController.php:357 -msgid "Invalid domain format." -msgstr "Ungültiges Domain-Format." - -#: src/Admin/OrderLicenseController.php:327 -msgid "Order domain updated." -msgstr "Bestellungs-Domain aktualisiert." - -#: src/Admin/OrderLicenseController.php:363 -#: src/Frontend/AccountController.php:351 -#: src/Frontend/DownloadController.php:105 -msgid "License not found." -msgstr "Lizenz nicht gefunden." - -#: src/Admin/OrderLicenseController.php:371 -msgid "License domain updated." -msgstr "Lizenz-Domain aktualisiert." - -#: src/Admin/OrderLicenseController.php:375 -msgid "Failed to update license domain." -msgstr "Lizenz-Domain konnte nicht aktualisiert werden." - -#: src/Admin/SettingsController.php:45 -msgid "Licensed Products" -msgstr "Lizensierte Produkte" - -#: src/Admin/SettingsController.php:56 -msgid "Default License Settings" -msgstr "Standard Lizenz-Einstellungen" - -#: src/Admin/SettingsController.php:58 -msgid "" -"These settings serve as defaults for new licensed products. Individual " -"product settings override these defaults." -msgstr "" -"Diese Einstellungen dienen als Standard für neue lizensierte Produkte. " -"Individuelle Produkteinstellungen überschreiben diese Standards." - -#: src/Admin/SettingsController.php:62 -msgid "Default Max Activations" -msgstr "Standard Max. Aktivierungen" - -#: src/Admin/SettingsController.php:64 -msgid "Default maximum number of domain activations per license." -msgstr "Standard maximale Anzahl der Domain-Aktivierungen pro Lizenz." - -#: src/Admin/SettingsController.php:73 -msgid "Default License Validity (Days)" -msgstr "Standard Lizenz-Gültigkeit (Tage)" - -#: src/Admin/SettingsController.php:75 -msgid "" -"Default number of days a license is valid. Leave empty or set to 0 for " -"lifetime licenses." -msgstr "" -"Standard Anzahl Tage, die eine Lizenz gültig ist. Leer lassen oder auf 0 " -"setzen für lebenslange Lizenzen." - -#: src/Admin/SettingsController.php:85 -msgid "Default Bind to Major Version" -msgstr "Standard An Hauptversion binden" - -#: src/Admin/SettingsController.php:87 -msgid "" -"If enabled, licenses are bound to the major version at purchase time by " -"default." -msgstr "" -"Falls aktiviert, werden Lizenzen standardmässig an die Hauptversion zum " -"Kaufzeitpunkt gebunden." - -#: src/Admin/SettingsController.php:97 -msgid "Expiration Warning Schedule" -msgstr "Ablaufwarnung Zeitplan" - -#. translators: %s: URL to WooCommerce email settings -#: src/Admin/SettingsController.php:101 -#, php-format -msgid "" -"Configure when expiration warning emails are sent. To customize the email " -"template, enable/disable, or change the subject, go to %s." -msgstr "" -"Konfigurieren Sie, wann Ablaufwarnungs-E-Mails gesendet werden. Um die E-" -"Mail-Vorlage anzupassen, zu aktivieren/deaktivieren oder den Betreff zu " -"ändern, gehen Sie zu %s." - -#: src/Admin/SettingsController.php:103 -msgid "WooCommerce > Settings > Emails > License Expiration Warning" -msgstr "WooCommerce > Einstellungen > E-Mails > Lizenzablauf-Warnung" - -#: src/Admin/SettingsController.php:108 -msgid "First Warning (Days Before)" -msgstr "Erste Warnung (Tage vorher)" - -#: src/Admin/SettingsController.php:110 -msgid "Days before expiration to send the first warning email." -msgstr "Tage vor Ablauf, um die erste Warn-E-Mail zu senden." - -#: src/Admin/SettingsController.php:119 -msgid "Second Warning (Days Before)" -msgstr "Zweite Warnung (Tage vorher)" - -#: src/Admin/SettingsController.php:121 -msgid "" -"Days before expiration to send the second warning email. Set to 0 to disable." -msgstr "" -"Tage vor Ablauf, um die zweite Warn-E-Mail zu senden. Setzen Sie auf 0, um " -"sie zu deaktivieren." - #: src/Admin/VersionAdminController.php:58 msgid "Product Versions" msgstr "Produktversionen" @@ -886,15 +867,15 @@ msgstr "" "Version wird automatisch aus dem Dateinamen erkannt (z.B. plugin-v1.2.3.zip)." #: src/Admin/VersionAdminController.php:102 -msgid "Or External URL" -msgstr "Oder externe URL" +msgid "Checksum File" +msgstr "Prüfsummendatei" #: src/Admin/VersionAdminController.php:105 msgid "" -"Alternative: Enter an external download URL instead of uploading a file." +"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." msgstr "" -"Alternativ: Geben Sie eine externe Download-URL ein, anstatt eine Datei " -"hochzuladen." +"Laden Sie eine SHA256-Prüfsummendatei (.sha256 oder .txt) hoch, um die " +"Dateiintegrität zu überprüfen." #: src/Admin/VersionAdminController.php:109 #: src/Admin/VersionAdminController.php:131 @@ -918,12 +899,12 @@ msgid "No versions found. Add your first version above." msgstr "Keine Versionen gefunden. Fügen Sie Ihre erste Version oben hinzu." #: src/Admin/VersionAdminController.php:156 -#: src/Admin/VersionAdminController.php:372 +#: src/Admin/VersionAdminController.php:378 msgid "Uploaded file" msgstr "Hochgeladene Datei" #: src/Admin/VersionAdminController.php:159 -#: src/Admin/VersionAdminController.php:375 +#: src/Admin/VersionAdminController.php:381 msgid "No download file" msgstr "Keine Download-Datei" @@ -951,54 +932,65 @@ msgstr "Download-Datei auswählen" msgid "Use this file" msgstr "Diese Datei verwenden" -#: src/Admin/VersionAdminController.php:250 +#: src/Admin/VersionAdminController.php:221 +msgid "" +"Invalid checksum file format. File must contain a 64-character SHA256 hash." +msgstr "" +"Ungültiges Prüfsummendateiformat. Die Datei muss einen 64-stelligen " +"SHA256-Hash enthalten." + +#: src/Admin/VersionAdminController.php:222 +msgid "Failed to read checksum file." +msgstr "Prüfsummendatei konnte nicht gelesen werden." + +#: src/Admin/VersionAdminController.php:252 msgid "Product ID and version are required." msgstr "Produkt-ID und Version sind erforderlich." -#: src/Admin/VersionAdminController.php:255 +#: src/Admin/VersionAdminController.php:257 msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." msgstr "" "Ungültiges Versionsformat. Verwenden Sie semantische Versionierung (z.B. " "1.0.0)." -#: src/Admin/VersionAdminController.php:260 +#: src/Admin/VersionAdminController.php:262 msgid "This version already exists." msgstr "Diese Version existiert bereits." -#: src/Admin/VersionAdminController.php:266 +#: src/Admin/VersionAdminController.php:268 msgid "Product not found." msgstr "Produkt nicht gefunden." -#: src/Admin/VersionAdminController.php:270 +#: src/Admin/VersionAdminController.php:272 msgid "This product is not a licensed product." msgstr "Dieses Produkt ist kein lizensiertes Produkt." -#: src/Admin/VersionAdminController.php:283 +#: src/Admin/VersionAdminController.php:289 msgid "Failed to create version." msgstr "Version konnte nicht erstellt werden." -#: src/Admin/VersionAdminController.php:291 +#: src/Admin/VersionAdminController.php:297 msgid "Version added successfully." msgstr "Version erfolgreich hinzugefügt." -#: src/Admin/VersionAdminController.php:311 -#: src/Admin/VersionAdminController.php:338 +#: src/Admin/VersionAdminController.php:317 +#: src/Admin/VersionAdminController.php:344 msgid "Version ID is required." msgstr "Versions-ID ist erforderlich." -#: src/Admin/VersionAdminController.php:317 +#: src/Admin/VersionAdminController.php:323 msgid "Failed to delete version." msgstr "Version konnte nicht gelöscht werden." -#: src/Admin/VersionAdminController.php:320 +#: src/Admin/VersionAdminController.php:326 msgid "Version deleted successfully." msgstr "Version erfolgreich gelöscht." -#: src/Admin/VersionAdminController.php:344 +#: src/Admin/VersionAdminController.php:350 msgid "Failed to update version." msgstr "Version konnte nicht aktualisiert werden." -#: src/Admin/VersionAdminController.php:348 +#: src/Admin/VersionAdminController.php:354 msgid "Version updated successfully." msgstr "Version erfolgreich aktualisiert." @@ -1075,160 +1067,152 @@ msgstr "Bitte geben Sie eine gültige Domain für Ihre Lizenz-Aktivierung ein." msgid "Domain for license activation" msgstr "Domain für Lizenz-Aktivierung" -#: src/Email/LicenseEmailController.php:173 -#: src/Email/LicenseEmailController.php:177 -#: src/Email/LicenseEmailController.php:281 -#: src/Email/LicenseExpirationEmail.php:207 -#: src/Email/LicenseExpirationEmail.php:270 -#: src/Frontend/AccountController.php:189 -msgid "License Key:" -msgstr "Lizenzschlüssel:" +#: src/License/LicenseManager.php:366 +msgid "This license has been revoked." +msgstr "Diese Lizenz wurde widerrufen." -#: src/Email/LicenseEmailController.php:217 -msgid "Your License Keys" -msgstr "Ihre Lizenzschlüssel" +#: src/License/LicenseManager.php:376 +msgid "This license has expired." +msgstr "Diese Lizenz ist abgelaufen." -#: src/Email/LicenseEmailController.php:221 -#: src/Email/LicenseEmailController.php:276 -msgid "Licensed Domain:" -msgstr "Lizensierte Domain:" +#: src/License/LicenseManager.php:384 +msgid "This license is inactive." +msgstr "Diese Lizenz ist inaktiv." -#: src/Email/LicenseEmailController.php:248 -#: src/Email/LicenseEmailController.php:287 -#: src/Frontend/AccountController.php:217 -msgid "Never" -msgstr "Nie" - -#: src/Email/LicenseEmailController.php:257 -#: src/Email/LicenseEmailController.php:291 -msgid "You can also view your licenses in your account under \"Licenses\"." -msgstr "" -"Sie können Ihre Lizenzen auch in Ihrem Konto unter \"Lizenzen\" einsehen." - -#: src/Email/LicenseEmailController.php:272 -msgid "YOUR LICENSE KEYS" -msgstr "IHRE LIZENZSCHLÜSSEL" - -#: src/Email/LicenseEmailController.php:284 -#: src/Email/LicenseExpirationEmail.php:219 -#: src/Email/LicenseExpirationEmail.php:272 -#: src/Frontend/AccountController.php:212 -msgid "Expires:" -msgstr "Läuft ab:" - -#: src/Email/LicenseExpirationEmail.php:55 -msgid "License Expiration Warning" -msgstr "Lizenzablauf-Warnung" - -#: src/Email/LicenseExpirationEmail.php:56 -msgid "" -"License expiration warning emails are sent to customers when their licenses " -"are about to expire." -msgstr "" -"Lizenzablauf-Warnungs-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " -"bald ablaufen." - -#: src/Email/LicenseExpirationEmail.php:74 -msgid "" -"[{site_title}] Your license for {product_name} expires in {days_remaining} " -"days" -msgstr "" -"[{site_title}] Ihre Lizenz für {product_name} läuft in {days_remaining} " -"Tagen ab" - -#: src/Email/LicenseExpirationEmail.php:82 -msgid "License Expiration Notice" -msgstr "Lizenzablauf-Benachrichtigung" +#: src/License/LicenseManager.php:394 +msgid "This license is not valid for this domain." +msgstr "Diese Lizenz ist für diese Domain nicht gültig." +#: src/License/LicenseManager.php:760 src/Frontend/AccountController.php:139 #: src/Email/LicenseExpirationEmail.php:107 -#: src/Frontend/AccountController.php:139 src/License/LicenseManager.php:760 msgid "Unknown Product" msgstr "Unbekanntes Produkt" -#: src/Email/LicenseExpirationEmail.php:176 -#: src/Email/LicenseExpirationEmail.php:246 +#: src/Product/LicensedProductType.php:55 +msgid "Licensed Product" +msgstr "Lizensiertes Produkt" + +#: src/Product/LicensedProductType.php:76 +msgid "License Settings" +msgstr "Lizenz-Einstellungen" + +#: src/Product/LicensedProductType.php:103 #, php-format -msgid "Hello %s," -msgstr "Guten Tag %s," +msgid "%d days" +msgstr "%d Tage" -#: src/Email/LicenseExpirationEmail.php:181 -#: src/Email/LicenseExpirationEmail.php:251 +#. translators: %s: URL to settings page +#: src/Product/LicensedProductType.php:113 #, php-format -msgid "Your license for %s will expire tomorrow (%s)." -msgstr "Ihre Lizenz für %s läuft morgen ab (%s)." +msgid "Leave fields empty to use default settings from %s." +msgstr "Felder leer lassen, um Standardeinstellungen von %s zu verwenden." -#: src/Email/LicenseExpirationEmail.php:189 -#: src/Email/LicenseExpirationEmail.php:257 +#: src/Product/LicensedProductType.php:115 +msgid "WooCommerce > Settings > Licensed Products" +msgstr "WooCommerce > Einstellungen > Lizensierte Produkte" + +#: src/Product/LicensedProductType.php:122 +msgid "Max Activations" +msgstr "Max. Aktivierungen" + +#. translators: %d: default max activations value +#: src/Product/LicensedProductType.php:125 #, php-format -msgid "Your license for %1$s will expire in %2$d days (%3$s)." -msgstr "Ihre Lizenz für %1$s läuft in %2$d Tagen ab (%3$s)." +msgid "Maximum number of domain activations per license. Default: %d" +msgstr "Maximale Anzahl der Domain-Aktivierungen pro Lizenz. Standard: %d" -#: src/Email/LicenseExpirationEmail.php:197 -#: src/Email/LicenseExpirationEmail.php:266 -msgid "License Details" -msgstr "Lizenzdetails" +#: src/Product/LicensedProductType.php:140 +msgid "License Validity (Days)" +msgstr "Lizenz-Gültigkeit (Tage)" -#: src/Email/LicenseExpirationEmail.php:203 -#: src/Email/LicenseExpirationEmail.php:269 -msgid "Product:" -msgstr "Produkt:" +#. translators: %s: default validity value +#: src/Product/LicensedProductType.php:143 +#, php-format +msgid "Number of days the license is valid. Leave empty for default (%s)." +msgstr "Anzahl Tage, die die Lizenz gültig ist. Leer lassen für Standard (%s)." -#: src/Email/LicenseExpirationEmail.php:215 -#: src/Email/LicenseExpirationEmail.php:271 -#: src/Frontend/AccountController.php:200 -msgid "Domain:" -msgstr "Domain:" +#: src/Product/LicensedProductType.php:158 +msgid "Bind to Major Version" +msgstr "An Hauptversion binden" -#: src/Email/LicenseExpirationEmail.php:235 -#: src/Email/LicenseExpirationEmail.php:281 -msgid "View My Licenses" -msgstr "Meine Lizenzen anzeigen" - -#: src/Email/LicenseExpirationEmail.php:291 +#. translators: %s: default bind to version value (Yes/No) +#: src/Product/LicensedProductType.php:161 +#, php-format msgid "" -"To continue using this product, please renew your license before the " -"expiration date." +"If enabled, licenses are bound to the major version at purchase time. " +"Default: %s" msgstr "" -"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz vor " -"dem Ablaufdatum." +"Falls aktiviert, werden Lizenzen an die Hauptversion zum Kaufzeitpunkt " +"gebunden. Standard: %s" -#. translators: %s: list of placeholders -#: src/Email/LicenseExpirationEmail.php:301 +#: src/Product/LicensedProductType.php:162 +msgid "Yes" +msgstr "Ja" + +#: src/Product/LicensedProductType.php:162 +msgid "No" +msgstr "Nein" + +#: src/Product/VersionManager.php:166 +msgid "Attachment file not found." +msgstr "Anhangs-Datei nicht gefunden." + +#. translators: 1: provided hash, 2: calculated hash +#: src/Product/VersionManager.php:177 #, php-format -msgid "Available placeholders: %s" -msgstr "Verfügbare Platzhalter: %s" +msgid "File checksum does not match. Expected: %1$s, Got: %2$s" +msgstr "Datei-Prüfsumme stimmt nicht überein. Erwartet: %1$s, Erhalten: %2$s" -#: src/Email/LicenseExpirationEmail.php:307 -msgid "Enable/Disable" -msgstr "Aktivieren/Deaktivieren" +#: src/Frontend/DownloadController.php:65 +#: src/Frontend/DownloadController.php:89 +msgid "Invalid download link." +msgstr "Ungültiger Download-Link." -#: src/Email/LicenseExpirationEmail.php:309 -msgid "Enable this email notification" -msgstr "Diese E-Mail-Benachrichtigung aktivieren" +#: src/Frontend/DownloadController.php:66 +#: src/Frontend/DownloadController.php:76 +#: src/Frontend/DownloadController.php:90 +#: src/Frontend/DownloadController.php:106 +#: src/Frontend/DownloadController.php:116 +#: src/Frontend/DownloadController.php:125 +#: src/Frontend/DownloadController.php:135 +#: src/Frontend/DownloadController.php:144 +#: src/Frontend/DownloadController.php:153 +#: src/Frontend/DownloadController.php:171 +#: src/Frontend/DownloadController.php:187 +msgid "Download Error" +msgstr "Download-Fehler" -#: src/Email/LicenseExpirationEmail.php:313 -msgid "Subject" -msgstr "Betreff" +#: src/Frontend/DownloadController.php:75 +msgid "Invalid download link format." +msgstr "Ungültiges Download-Link-Format." -#: src/Email/LicenseExpirationEmail.php:321 -msgid "Email heading" -msgstr "E-Mail-Überschrift" +#: src/Frontend/DownloadController.php:115 +msgid "You do not have permission to download this file." +msgstr "Sie haben keine Berechtigung, diese Datei herunterzuladen." -#: src/Email/LicenseExpirationEmail.php:329 -msgid "Additional content" -msgstr "Zusätzlicher Inhalt" +#: src/Frontend/DownloadController.php:124 +msgid "Your license is not active. Please contact support." +msgstr "Ihre Lizenz ist nicht aktiv. Bitte kontaktieren Sie den Support." -#: src/Email/LicenseExpirationEmail.php:330 -msgid "Text to appear below the main email content." -msgstr "Text, der unter dem Haupt-E-Mail-Inhalt erscheinen soll." +#: src/Frontend/DownloadController.php:134 +msgid "Version not found." +msgstr "Version nicht gefunden." -#: src/Email/LicenseExpirationEmail.php:338 -msgid "Email type" -msgstr "E-Mail-Typ" +#: src/Frontend/DownloadController.php:143 +msgid "Version does not match your licensed product." +msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein." -#: src/Email/LicenseExpirationEmail.php:340 -msgid "Choose which format of email to send." -msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." +#: src/Frontend/DownloadController.php:152 +msgid "This version is no longer available for download." +msgstr "Diese Version ist nicht mehr zum Download verfügbar." + +#: src/Frontend/DownloadController.php:170 +msgid "No download file available for this version." +msgstr "Keine Download-Datei für diese Version verfügbar." + +#: src/Frontend/DownloadController.php:186 +msgid "Download file not found." +msgstr "Download-Datei nicht gefunden." #: src/Frontend/AccountController.php:104 msgid "Please log in to view your licenses." @@ -1238,6 +1222,21 @@ msgstr "Bitte melden Sie sich an, um Ihre Lizenzen zu sehen." msgid "You have no licenses yet." msgstr "Sie haben noch keine Lizenzen." +#: src/Frontend/AccountController.php:189 +#: src/Email/LicenseEmailController.php:173 +#: src/Email/LicenseEmailController.php:177 +#: src/Email/LicenseEmailController.php:281 +#: src/Email/LicenseExpirationEmail.php:207 +#: src/Email/LicenseExpirationEmail.php:270 +msgid "License Key:" +msgstr "Lizenzschlüssel:" + +#: src/Frontend/AccountController.php:200 +#: src/Email/LicenseExpirationEmail.php:215 +#: src/Email/LicenseExpirationEmail.php:271 +msgid "Domain:" +msgstr "Domain:" + #: src/Frontend/AccountController.php:206 msgid "Transfer to new domain" msgstr "Auf neue Domain übertragen" @@ -1246,6 +1245,19 @@ msgstr "Auf neue Domain übertragen" msgid "Transfer" msgstr "Übertragen" +#: src/Frontend/AccountController.php:212 +#: src/Email/LicenseEmailController.php:284 +#: src/Email/LicenseExpirationEmail.php:219 +#: src/Email/LicenseExpirationEmail.php:272 +msgid "Expires:" +msgstr "Läuft ab:" + +#: src/Frontend/AccountController.php:217 +#: src/Email/LicenseEmailController.php:248 +#: src/Email/LicenseEmailController.php:287 +msgid "Never" +msgstr "Nie" + #: src/Frontend/AccountController.php:225 msgid "Available Downloads" msgstr "Verfügbare Downloads" @@ -1324,163 +1336,161 @@ msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain." msgid "Failed to transfer license. Please try again." msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut." -#: src/Frontend/DownloadController.php:65 -#: src/Frontend/DownloadController.php:89 -msgid "Invalid download link." -msgstr "Ungültiger Download-Link." +#: src/Email/LicenseEmailController.php:217 +msgid "Your License Keys" +msgstr "Ihre Lizenzschlüssel" -#: src/Frontend/DownloadController.php:66 -#: src/Frontend/DownloadController.php:76 -#: src/Frontend/DownloadController.php:90 -#: src/Frontend/DownloadController.php:106 -#: src/Frontend/DownloadController.php:116 -#: src/Frontend/DownloadController.php:125 -#: src/Frontend/DownloadController.php:135 -#: src/Frontend/DownloadController.php:144 -#: src/Frontend/DownloadController.php:153 -#: src/Frontend/DownloadController.php:171 -#: src/Frontend/DownloadController.php:187 -msgid "Download Error" -msgstr "Download-Fehler" +#: src/Email/LicenseEmailController.php:221 +#: src/Email/LicenseEmailController.php:276 +msgid "Licensed Domain:" +msgstr "Lizensierte Domain:" -#: src/Frontend/DownloadController.php:75 -msgid "Invalid download link format." -msgstr "Ungültiges Download-Link-Format." - -#: src/Frontend/DownloadController.php:115 -msgid "You do not have permission to download this file." -msgstr "Sie haben keine Berechtigung, diese Datei herunterzuladen." - -#: src/Frontend/DownloadController.php:124 -msgid "Your license is not active. Please contact support." -msgstr "Ihre Lizenz ist nicht aktiv. Bitte kontaktieren Sie den Support." - -#: src/Frontend/DownloadController.php:134 -msgid "Version not found." -msgstr "Version nicht gefunden." - -#: src/Frontend/DownloadController.php:143 -msgid "Version does not match your licensed product." -msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein." - -#: src/Frontend/DownloadController.php:152 -msgid "This version is no longer available for download." -msgstr "Diese Version ist nicht mehr zum Download verfügbar." - -#: src/Frontend/DownloadController.php:170 -msgid "No download file available for this version." -msgstr "Keine Download-Datei für diese Version verfügbar." - -#: src/Frontend/DownloadController.php:186 -msgid "Download file not found." -msgstr "Download-Datei nicht gefunden." - -#: src/License/LicenseManager.php:366 -msgid "This license has been revoked." -msgstr "Diese Lizenz wurde widerrufen." - -#: src/License/LicenseManager.php:376 -msgid "This license has expired." -msgstr "Diese Lizenz ist abgelaufen." - -#: src/License/LicenseManager.php:384 -msgid "This license is inactive." -msgstr "Diese Lizenz ist inaktiv." - -#: src/License/LicenseManager.php:394 -msgid "This license is not valid for this domain." -msgstr "Diese Lizenz ist für diese Domain nicht gültig." - -#: src/Product/LicensedProductType.php:55 -msgid "Licensed Product" -msgstr "Lizensiertes Produkt" - -#: src/Product/LicensedProductType.php:76 -msgid "License Settings" -msgstr "Lizenz-Einstellungen" - -#: src/Product/LicensedProductType.php:103 -#, php-format -msgid "%d days" -msgstr "%d Tage" - -#. translators: %s: URL to settings page -#: src/Product/LicensedProductType.php:113 -#, php-format -msgid "Leave fields empty to use default settings from %s." -msgstr "Felder leer lassen, um Standardeinstellungen von %s zu verwenden." - -#: src/Product/LicensedProductType.php:115 -msgid "WooCommerce > Settings > Licensed Products" -msgstr "WooCommerce > Einstellungen > Lizensierte Produkte" - -#: src/Product/LicensedProductType.php:122 -msgid "Max Activations" -msgstr "Max. Aktivierungen" - -#. translators: %d: default max activations value -#: src/Product/LicensedProductType.php:125 -#, php-format -msgid "Maximum number of domain activations per license. Default: %d" -msgstr "Maximale Anzahl der Domain-Aktivierungen pro Lizenz. Standard: %d" - -#: src/Product/LicensedProductType.php:140 -msgid "License Validity (Days)" -msgstr "Lizenz-Gültigkeit (Tage)" - -#. translators: %s: default validity value -#: src/Product/LicensedProductType.php:143 -#, php-format -msgid "Number of days the license is valid. Leave empty for default (%s)." -msgstr "Anzahl Tage, die die Lizenz gültig ist. Leer lassen für Standard (%s)." - -#: src/Product/LicensedProductType.php:158 -msgid "Bind to Major Version" -msgstr "An Hauptversion binden" - -#. translators: %s: default bind to version value (Yes/No) -#: src/Product/LicensedProductType.php:161 -#, php-format -msgid "" -"If enabled, licenses are bound to the major version at purchase time. " -"Default: %s" +#: src/Email/LicenseEmailController.php:257 +#: src/Email/LicenseEmailController.php:291 +msgid "You can also view your licenses in your account under \"Licenses\"." msgstr "" -"Falls aktiviert, werden Lizenzen an die Hauptversion zum Kaufzeitpunkt " -"gebunden. Standard: %s" +"Sie können Ihre Lizenzen auch in Ihrem Konto unter \"Lizenzen\" einsehen." -#: src/Product/LicensedProductType.php:162 -msgid "Yes" -msgstr "Ja" +#: src/Email/LicenseEmailController.php:272 +msgid "YOUR LICENSE KEYS" +msgstr "IHRE LIZENZSCHLÜSSEL" -#: src/Product/LicensedProductType.php:162 -msgid "No" -msgstr "Nein" +#: src/Email/LicenseExpirationEmail.php:55 +msgid "License Expiration Warning" +msgstr "Lizenzablauf-Warnung" -#: src/Admin/VersionAdminController.php:101 -msgid "SHA256 Hash" -msgstr "SHA256 Prüfsumme" - -#: src/Admin/VersionAdminController.php:103 -msgid "Enter SHA256 checksum..." -msgstr "SHA256 Prüfsumme eingeben..." - -#: src/Admin/VersionAdminController.php:104 +#: src/Email/LicenseExpirationEmail.php:56 msgid "" -"SHA256 checksum of the uploaded file (optional but recommended for integrity " -"verification)." +"License expiration warning emails are sent to customers when their licenses " +"are about to expire." msgstr "" -"SHA256 Prüfsumme der hochgeladenen Datei (optional, aber empfohlen zur " -"Integritätsprüfung)." +"Lizenzablauf-Warnungs-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " +"bald ablaufen." -#: src/Product/VersionManager.php:67 -msgid "Attachment file not found." -msgstr "Anhangs-Datei nicht gefunden." +#: src/Email/LicenseExpirationEmail.php:74 +msgid "" +"[{site_title}] Your license for {product_name} expires in {days_remaining} " +"days" +msgstr "" +"[{site_title}] Ihre Lizenz für {product_name} läuft in {days_remaining} " +"Tagen ab" -#. translators: 1: provided hash, 2: calculated hash -#: src/Product/VersionManager.php:73 +#: src/Email/LicenseExpirationEmail.php:82 +msgid "License Expiration Notice" +msgstr "Lizenzablauf-Benachrichtigung" + +#: src/Email/LicenseExpirationEmail.php:176 +#: src/Email/LicenseExpirationEmail.php:246 #, php-format -msgid "File checksum does not match. Expected: %1$s, Got: %2$s" -msgstr "Datei-Prüfsumme stimmt nicht überein. Erwartet: %1$s, Erhalten: %2$s" +msgid "Hello %s," +msgstr "Guten Tag %s," + +#: src/Email/LicenseExpirationEmail.php:181 +#: src/Email/LicenseExpirationEmail.php:251 +#, php-format +msgid "Your license for %s will expire tomorrow (%s)." +msgstr "Ihre Lizenz für %s läuft morgen ab (%s)." + +#: src/Email/LicenseExpirationEmail.php:189 +#: src/Email/LicenseExpirationEmail.php:257 +#, php-format +msgid "Your license for %1$s will expire in %2$d days (%3$s)." +msgstr "Ihre Lizenz für %1$s läuft in %2$d Tagen ab (%3$s)." + +#: src/Email/LicenseExpirationEmail.php:197 +#: src/Email/LicenseExpirationEmail.php:266 +msgid "License Details" +msgstr "Lizenzdetails" + +#: src/Email/LicenseExpirationEmail.php:203 +#: src/Email/LicenseExpirationEmail.php:269 +msgid "Product:" +msgstr "Produkt:" + +#: src/Email/LicenseExpirationEmail.php:235 +#: src/Email/LicenseExpirationEmail.php:281 +msgid "View My Licenses" +msgstr "Meine Lizenzen anzeigen" + +#: src/Email/LicenseExpirationEmail.php:291 +msgid "" +"To continue using this product, please renew your license before the " +"expiration date." +msgstr "" +"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz vor " +"dem Ablaufdatum." + +#. translators: %s: list of placeholders +#: src/Email/LicenseExpirationEmail.php:301 +#, php-format +msgid "Available placeholders: %s" +msgstr "Verfügbare Platzhalter: %s" + +#: src/Email/LicenseExpirationEmail.php:307 +msgid "Enable/Disable" +msgstr "Aktivieren/Deaktivieren" + +#: src/Email/LicenseExpirationEmail.php:309 +msgid "Enable this email notification" +msgstr "Diese E-Mail-Benachrichtigung aktivieren" + +#: src/Email/LicenseExpirationEmail.php:313 +msgid "Subject" +msgstr "Betreff" + +#: src/Email/LicenseExpirationEmail.php:321 +msgid "Email heading" +msgstr "E-Mail-Überschrift" + +#: src/Email/LicenseExpirationEmail.php:329 +msgid "Additional content" +msgstr "Zusätzlicher Inhalt" + +#: src/Email/LicenseExpirationEmail.php:330 +msgid "Text to appear below the main email content." +msgstr "Text, der unter dem Haupt-E-Mail-Inhalt erscheinen soll." + +#: src/Email/LicenseExpirationEmail.php:338 +msgid "Email type" +msgstr "E-Mail-Typ" + +#: src/Email/LicenseExpirationEmail.php:340 +msgid "Choose which format of email to send." +msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." + +#. translators: %s: WooCommerce plugin name +#: wc-licensed-product.php:61 +#, php-format +msgid "%s requires WooCommerce to be installed and active." +msgstr "%s benötigt WooCommerce als installierte und aktivierte Erweiterung." + +#: wc-licensed-product.php:119 +msgid "WC Licensed Product requires WooCommerce to be installed and active." +msgstr "" +"WC Licensed Product benötigt WooCommerce als installierte und aktivierte " +"Erweiterung." + +#~ msgid "Or External URL" +#~ msgstr "Oder externe URL" + +#~ msgid "" +#~ "Alternative: Enter an external download URL instead of uploading a file." +#~ msgstr "" +#~ "Alternativ: Geben Sie eine externe Download-URL ein, anstatt eine Datei " +#~ "hochzuladen." + +#~ msgid "SHA256 Hash" +#~ msgstr "SHA256 Prüfsumme" + +#~ msgid "Enter SHA256 checksum..." +#~ msgstr "SHA256 Prüfsumme eingeben..." + +#~ msgid "" +#~ "SHA256 checksum of the uploaded file (optional but recommended for " +#~ "integrity verification)." +#~ msgstr "" +#~ "SHA256 Prüfsumme der hochgeladenen Datei (optional, aber empfohlen zur " +#~ "Integritätsprüfung)." #~ msgid "Maximum number of domain activations per license. Default: 1" #~ msgstr "Maximale Anzahl der Domain-Aktivierungen pro Lizenz. Standard: 1" diff --git a/languages/wc-licensed-product.pot b/languages/wc-licensed-product.pot index d82df74..ba5a6e4 100644 --- a/languages/wc-licensed-product.pot +++ b/languages/wc-licensed-product.pot @@ -1,45 +1,282 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Marco Graetsch +# WooCommerce Licensed Product Translation Template +# Copyright (C) 2026 Marco Graetsch # This file is distributed under the same license as the WooCommerce Licensed Product package. -# FIRST AUTHOR , YEAR. +# Marco Graetsch , 2026. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: WooCommerce Licensed Product 0.2.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-22 11:52+0100\n" +"Project-Id-Version: WooCommerce Licensed Product 0.2.1\n" +"Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" +"POT-Creation-Date: 2026-01-22 17:10+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#. translators: %s: WooCommerce plugin name -#: wc-licensed-product.php:61 +#: src/Admin/SettingsController.php:45 +msgid "Licensed Products" +msgstr "" + +#: src/Admin/SettingsController.php:56 +msgid "Default License Settings" +msgstr "" + +#: src/Admin/SettingsController.php:58 +msgid "" +"These settings serve as defaults for new licensed products. Individual " +"product settings override these defaults." +msgstr "" + +#: src/Admin/SettingsController.php:62 +msgid "Default Max Activations" +msgstr "" + +#: src/Admin/SettingsController.php:64 +msgid "Default maximum number of domain activations per license." +msgstr "" + +#: src/Admin/SettingsController.php:73 +msgid "Default License Validity (Days)" +msgstr "" + +#: src/Admin/SettingsController.php:75 +msgid "" +"Default number of days a license is valid. Leave empty or set to 0 for " +"lifetime licenses." +msgstr "" + +#: src/Admin/SettingsController.php:78 src/Admin/OrderLicenseController.php:201 +#: src/Admin/AdminController.php:148 src/Admin/AdminController.php:263 +#: src/Admin/AdminController.php:1335 src/Product/LicensedProductType.php:104 +#: src/Product/LicensedProductType.php:152 +msgid "Lifetime" +msgstr "" + +#: src/Admin/SettingsController.php:85 +msgid "Default Bind to Major Version" +msgstr "" + +#: src/Admin/SettingsController.php:87 +msgid "" +"If enabled, licenses are bound to the major version at purchase time by " +"default." +msgstr "" + +#: src/Admin/SettingsController.php:97 +msgid "Expiration Warning Schedule" +msgstr "" + +#. translators: %s: URL to WooCommerce email settings +#: src/Admin/SettingsController.php:101 #, php-format -msgid "%s requires WooCommerce to be installed and active." +msgid "" +"Configure when expiration warning emails are sent. To customize the email " +"template, enable/disable, or change the subject, go to %s." msgstr "" -#: wc-licensed-product.php:119 -msgid "WC Licensed Product requires WooCommerce to be installed and active." +#: src/Admin/SettingsController.php:103 +msgid "WooCommerce > Settings > Emails > License Expiration Warning" msgstr "" -#: wc-licensed-product.php:137 src/Admin/AdminController.php:936 -msgid "Settings" +#: src/Admin/SettingsController.php:108 +msgid "First Warning (Days Before)" +msgstr "" + +#: src/Admin/SettingsController.php:110 +msgid "Days before expiration to send the first warning email." +msgstr "" + +#: src/Admin/SettingsController.php:119 +msgid "Second Warning (Days Before)" +msgstr "" + +#: src/Admin/SettingsController.php:121 +msgid "" +"Days before expiration to send the second warning email. Set to 0 to disable." +msgstr "" + +#: src/Admin/OrderLicenseController.php:56 +msgid "Product Licenses" +msgstr "" + +#: src/Admin/OrderLicenseController.php:77 +#: src/Admin/OrderLicenseController.php:313 +msgid "Order not found." +msgstr "" + +#: src/Admin/OrderLicenseController.php:92 +msgid "This order does not contain licensed products." +msgstr "" + +#: src/Admin/OrderLicenseController.php:106 +msgid "Order Domain" +msgstr "" + +#: src/Admin/OrderLicenseController.php:108 +msgid "" +"The domain specified during checkout. Changing this will not automatically " +"update existing license domains." +msgstr "" + +#: src/Admin/OrderLicenseController.php:116 +#: src/Checkout/CheckoutController.php:89 +#: src/Checkout/CheckoutBlocksIntegration.php:102 +msgid "example.com" +msgstr "" + +#: src/Admin/OrderLicenseController.php:118 +#: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:147 +#: src/Admin/AdminController.php:1302 src/Admin/AdminController.php:1322 +#: src/Admin/AdminController.php:1343 +msgid "Save" msgstr "" -#: src/Admin/AdminController.php:73 src/Admin/AdminController.php:74 -#: src/Admin/AdminController.php:87 src/Admin/AdminController.php:1162 #: src/Admin/OrderLicenseController.php:127 -#: src/Admin/OrderLicenseController.php:222 -#: src/Frontend/AccountController.php:90 +#: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:73 +#: src/Admin/AdminController.php:74 src/Admin/AdminController.php:87 +#: src/Admin/AdminController.php:1162 src/Frontend/AccountController.php:90 msgid "Licenses" msgstr "" +#: src/Admin/OrderLicenseController.php:131 +msgid "No licenses have been generated for this order yet." +msgstr "" + +#: src/Admin/OrderLicenseController.php:134 +msgid "" +"Licenses should be generated automatically when an order is paid. If " +"missing, check that a domain was specified during checkout." +msgstr "" + +#: src/Admin/OrderLicenseController.php:137 +msgid "Licenses will be generated when the order is marked as paid/completed." +msgstr "" + +#: src/Admin/OrderLicenseController.php:144 src/Admin/AdminController.php:1253 +#: src/Admin/AdminController.php:1391 src/Email/LicenseEmailController.php:230 +msgid "License Key" +msgstr "" + +#: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1254 +#: src/Admin/AdminController.php:1392 src/Email/LicenseEmailController.php:229 +msgid "Product" +msgstr "" + +#: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1256 +#: src/Admin/AdminController.php:1394 +msgid "Domain" +msgstr "" + +#: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1257 +#: src/Admin/AdminController.php:1395 src/Admin/VersionAdminController.php:132 +msgid "Status" +msgstr "" + +#: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1259 +#: src/Admin/AdminController.php:1397 src/Email/LicenseEmailController.php:231 +msgid "Expires" +msgstr "" + +#: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1260 +#: src/Admin/AdminController.php:1398 src/Admin/VersionAdminController.php:134 +msgid "Actions" +msgstr "" + +#: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:192 +#: src/Admin/AdminController.php:987 +msgid "Unknown" +msgstr "" + +#: src/Admin/OrderLicenseController.php:178 +msgid "Edit domain" +msgstr "" + +#: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:146 +#: src/Admin/AdminController.php:1303 src/Admin/AdminController.php:1323 +#: src/Admin/AdminController.php:1344 src/Frontend/AccountController.php:270 +msgid "Cancel" +msgstr "" + +#: src/Admin/OrderLicenseController.php:208 +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." +msgstr "" + +#: src/Admin/OrderLicenseController.php:285 src/Admin/AdminController.php:141 +msgid "Saving..." +msgstr "" + +#: src/Admin/OrderLicenseController.php:286 +msgid "Saved!" +msgstr "" + +#: src/Admin/OrderLicenseController.php:287 +msgid "Error saving. Please try again." +msgstr "" + +#: src/Admin/OrderLicenseController.php:288 +#: src/Frontend/AccountController.php:313 +#: src/Frontend/AccountController.php:345 +msgid "Please enter a valid domain." +msgstr "" + +#: src/Admin/OrderLicenseController.php:301 +#: src/Admin/OrderLicenseController.php:340 src/Admin/AdminController.php:170 +#: src/Admin/AdminController.php:210 src/Admin/AdminController.php:246 +#: src/Admin/AdminController.php:298 src/Admin/AdminController.php:336 +#: src/Admin/VersionAdminController.php:242 +#: src/Admin/VersionAdminController.php:311 +#: src/Admin/VersionAdminController.php:337 +msgid "Permission denied." +msgstr "" + +#: src/Admin/OrderLicenseController.php:308 +msgid "Invalid order ID." +msgstr "" + +#: src/Admin/OrderLicenseController.php:319 +#: src/Admin/OrderLicenseController.php:357 +msgid "Invalid domain format." +msgstr "" + +#: src/Admin/OrderLicenseController.php:327 +msgid "Order domain updated." +msgstr "" + +#: src/Admin/OrderLicenseController.php:347 src/Admin/AdminController.php:217 +#: src/Admin/AdminController.php:253 src/Admin/AdminController.php:305 +#: src/Admin/AdminController.php:342 +msgid "Invalid license ID." +msgstr "" + +#: src/Admin/OrderLicenseController.php:351 src/Admin/AdminController.php:309 +msgid "Domain cannot be empty." +msgstr "" + +#: src/Admin/OrderLicenseController.php:363 +#: src/Frontend/DownloadController.php:105 +#: src/Frontend/AccountController.php:351 +msgid "License not found." +msgstr "" + +#: src/Admin/OrderLicenseController.php:371 +msgid "License domain updated." +msgstr "" + +#: src/Admin/OrderLicenseController.php:375 +msgid "Failed to update license domain." +msgstr "" + #: src/Admin/AdminController.php:90 msgid "Overview" msgstr "" @@ -56,10 +293,6 @@ msgstr "" msgid "Search failed" msgstr "" -#: src/Admin/AdminController.php:141 src/Admin/OrderLicenseController.php:285 -msgid "Saving..." -msgstr "" - #: src/Admin/AdminController.php:142 msgid "Saved" msgstr "" @@ -78,27 +311,6 @@ msgstr "" msgid "Edit" msgstr "" -#: src/Admin/AdminController.php:146 src/Admin/AdminController.php:1303 -#: src/Admin/AdminController.php:1323 src/Admin/AdminController.php:1344 -#: src/Admin/OrderLicenseController.php:185 -#: src/Frontend/AccountController.php:270 -msgid "Cancel" -msgstr "" - -#: src/Admin/AdminController.php:147 src/Admin/AdminController.php:1302 -#: src/Admin/AdminController.php:1322 src/Admin/AdminController.php:1343 -#: src/Admin/OrderLicenseController.php:118 -#: src/Admin/OrderLicenseController.php:182 -msgid "Save" -msgstr "" - -#: src/Admin/AdminController.php:148 src/Admin/AdminController.php:263 -#: src/Admin/AdminController.php:1335 src/Admin/OrderLicenseController.php:201 -#: src/Admin/SettingsController.php:78 src/Product/LicensedProductType.php:104 -#: src/Product/LicensedProductType.php:152 -msgid "Lifetime" -msgstr "" - #: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:308 msgid "Copied!" msgstr "" @@ -110,14 +322,14 @@ msgstr "" #: src/Admin/AdminController.php:153 src/Admin/AdminController.php:875 #: src/Admin/AdminController.php:1194 src/Admin/AdminController.php:1317 #: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:381 +#: src/Admin/VersionAdminController.php:387 msgid "Active" msgstr "" #: src/Admin/AdminController.php:154 src/Admin/AdminController.php:882 #: src/Admin/AdminController.php:1195 src/Admin/AdminController.php:1318 #: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:381 +#: src/Admin/VersionAdminController.php:387 msgid "Inactive" msgstr "" @@ -131,31 +343,10 @@ msgstr "" msgid "Revoked" msgstr "" -#: src/Admin/AdminController.php:170 src/Admin/AdminController.php:210 -#: src/Admin/AdminController.php:246 src/Admin/AdminController.php:298 -#: src/Admin/AdminController.php:336 src/Admin/OrderLicenseController.php:301 -#: src/Admin/OrderLicenseController.php:340 -#: src/Admin/VersionAdminController.php:240 -#: src/Admin/VersionAdminController.php:305 -#: src/Admin/VersionAdminController.php:331 -msgid "Permission denied." -msgstr "" - -#: src/Admin/AdminController.php:192 src/Admin/AdminController.php:987 -#: src/Admin/OrderLicenseController.php:168 -msgid "Unknown" -msgstr "" - #: src/Admin/AdminController.php:193 src/Admin/AdminController.php:991 msgid "Guest" msgstr "" -#: src/Admin/AdminController.php:217 src/Admin/AdminController.php:253 -#: src/Admin/AdminController.php:305 src/Admin/AdminController.php:342 -#: src/Admin/OrderLicenseController.php:347 -msgid "Invalid license ID." -msgstr "" - #: src/Admin/AdminController.php:222 msgid "Invalid status." msgstr "" @@ -184,10 +375,6 @@ msgstr "" msgid "Invalid date format." msgstr "" -#: src/Admin/AdminController.php:309 src/Admin/OrderLicenseController.php:351 -msgid "Domain cannot be empty." -msgstr "" - #: src/Admin/AdminController.php:320 msgid "Domain updated successfully." msgstr "" @@ -268,6 +455,10 @@ msgstr "" msgid "Export to CSV" msgstr "" +#: src/Admin/AdminController.php:936 wc-licensed-product.php:137 +msgid "Settings" +msgstr "" + #: src/Admin/AdminController.php:1050 msgid "License updated successfully." msgstr "" @@ -438,13 +629,13 @@ msgstr "" #: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1407 #: src/Admin/VersionAdminController.php:171 -#: src/Admin/VersionAdminController.php:387 +#: src/Admin/VersionAdminController.php:393 msgid "Activate" msgstr "" #: src/Admin/AdminController.php:1236 src/Admin/AdminController.php:1408 #: src/Admin/VersionAdminController.php:171 -#: src/Admin/VersionAdminController.php:387 +#: src/Admin/VersionAdminController.php:393 msgid "Deactivate" msgstr "" @@ -467,7 +658,7 @@ msgstr "" #: src/Admin/AdminController.php:1241 src/Admin/AdminController.php:1377 #: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:174 -#: src/Admin/VersionAdminController.php:390 +#: src/Admin/VersionAdminController.php:396 msgid "Delete" msgstr "" @@ -475,50 +666,15 @@ msgstr "" msgid "Apply" msgstr "" -#: src/Admin/AdminController.php:1253 src/Admin/AdminController.php:1391 -#: src/Admin/OrderLicenseController.php:144 -#: src/Email/LicenseEmailController.php:230 -msgid "License Key" -msgstr "" - -#: src/Admin/AdminController.php:1254 src/Admin/AdminController.php:1392 -#: src/Admin/OrderLicenseController.php:145 -#: src/Email/LicenseEmailController.php:229 -msgid "Product" -msgstr "" - #: src/Admin/AdminController.php:1255 src/Admin/AdminController.php:1393 #: src/Email/LicenseExpirationEmail.php:104 msgid "Customer" msgstr "" -#: src/Admin/AdminController.php:1256 src/Admin/AdminController.php:1394 -#: src/Admin/OrderLicenseController.php:146 -msgid "Domain" -msgstr "" - -#: src/Admin/AdminController.php:1257 src/Admin/AdminController.php:1395 -#: src/Admin/OrderLicenseController.php:147 -#: src/Admin/VersionAdminController.php:132 -msgid "Status" -msgstr "" - #: src/Admin/AdminController.php:1258 src/Admin/AdminController.php:1396 msgid "Created" msgstr "" -#: src/Admin/AdminController.php:1259 src/Admin/AdminController.php:1397 -#: src/Admin/OrderLicenseController.php:148 -#: src/Email/LicenseEmailController.php:231 -msgid "Expires" -msgstr "" - -#: src/Admin/AdminController.php:1260 src/Admin/AdminController.php:1398 -#: src/Admin/OrderLicenseController.php:149 -#: src/Admin/VersionAdminController.php:134 -msgid "Actions" -msgstr "" - #: src/Admin/AdminController.php:1266 msgid "No licenses found." msgstr "" @@ -646,179 +802,6 @@ msgstr "" msgid "No domain specified" msgstr "" -#: src/Admin/OrderLicenseController.php:56 -msgid "Product Licenses" -msgstr "" - -#: src/Admin/OrderLicenseController.php:77 -#: src/Admin/OrderLicenseController.php:313 -msgid "Order not found." -msgstr "" - -#: src/Admin/OrderLicenseController.php:92 -msgid "This order does not contain licensed products." -msgstr "" - -#: src/Admin/OrderLicenseController.php:106 -msgid "Order Domain" -msgstr "" - -#: src/Admin/OrderLicenseController.php:108 -msgid "" -"The domain specified during checkout. Changing this will not automatically " -"update existing license domains." -msgstr "" - -#: src/Admin/OrderLicenseController.php:116 -#: src/Checkout/CheckoutController.php:89 -#: src/Checkout/CheckoutBlocksIntegration.php:102 -msgid "example.com" -msgstr "" - -#: src/Admin/OrderLicenseController.php:131 -msgid "No licenses have been generated for this order yet." -msgstr "" - -#: src/Admin/OrderLicenseController.php:134 -msgid "" -"Licenses should be generated automatically when an order is paid. If " -"missing, check that a domain was specified during checkout." -msgstr "" - -#: src/Admin/OrderLicenseController.php:137 -msgid "Licenses will be generated when the order is marked as paid/completed." -msgstr "" - -#: src/Admin/OrderLicenseController.php:178 -msgid "Edit domain" -msgstr "" - -#: src/Admin/OrderLicenseController.php:208 -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." -msgstr "" - -#: src/Admin/OrderLicenseController.php:286 -msgid "Saved!" -msgstr "" - -#: src/Admin/OrderLicenseController.php:287 -msgid "Error saving. Please try again." -msgstr "" - -#: src/Admin/OrderLicenseController.php:288 -#: src/Frontend/AccountController.php:313 -#: src/Frontend/AccountController.php:345 -msgid "Please enter a valid domain." -msgstr "" - -#: src/Admin/OrderLicenseController.php:308 -msgid "Invalid order ID." -msgstr "" - -#: src/Admin/OrderLicenseController.php:319 -#: src/Admin/OrderLicenseController.php:357 -msgid "Invalid domain format." -msgstr "" - -#: src/Admin/OrderLicenseController.php:327 -msgid "Order domain updated." -msgstr "" - -#: src/Admin/OrderLicenseController.php:363 -#: src/Frontend/AccountController.php:351 -#: src/Frontend/DownloadController.php:105 -msgid "License not found." -msgstr "" - -#: src/Admin/OrderLicenseController.php:371 -msgid "License domain updated." -msgstr "" - -#: src/Admin/OrderLicenseController.php:375 -msgid "Failed to update license domain." -msgstr "" - -#: src/Admin/SettingsController.php:45 -msgid "Licensed Products" -msgstr "" - -#: src/Admin/SettingsController.php:56 -msgid "Default License Settings" -msgstr "" - -#: src/Admin/SettingsController.php:58 -msgid "" -"These settings serve as defaults for new licensed products. Individual " -"product settings override these defaults." -msgstr "" - -#: src/Admin/SettingsController.php:62 -msgid "Default Max Activations" -msgstr "" - -#: src/Admin/SettingsController.php:64 -msgid "Default maximum number of domain activations per license." -msgstr "" - -#: src/Admin/SettingsController.php:73 -msgid "Default License Validity (Days)" -msgstr "" - -#: src/Admin/SettingsController.php:75 -msgid "" -"Default number of days a license is valid. Leave empty or set to 0 for " -"lifetime licenses." -msgstr "" - -#: src/Admin/SettingsController.php:85 -msgid "Default Bind to Major Version" -msgstr "" - -#: src/Admin/SettingsController.php:87 -msgid "" -"If enabled, licenses are bound to the major version at purchase time by " -"default." -msgstr "" - -#: src/Admin/SettingsController.php:97 -msgid "Expiration Warning Schedule" -msgstr "" - -#. translators: %s: URL to WooCommerce email settings -#: src/Admin/SettingsController.php:101 -#, php-format -msgid "" -"Configure when expiration warning emails are sent. To customize the email " -"template, enable/disable, or change the subject, go to %s." -msgstr "" - -#: src/Admin/SettingsController.php:103 -msgid "WooCommerce > Settings > Emails > License Expiration Warning" -msgstr "" - -#: src/Admin/SettingsController.php:108 -msgid "First Warning (Days Before)" -msgstr "" - -#: src/Admin/SettingsController.php:110 -msgid "Days before expiration to send the first warning email." -msgstr "" - -#: src/Admin/SettingsController.php:119 -msgid "Second Warning (Days Before)" -msgstr "" - -#: src/Admin/SettingsController.php:121 -msgid "" -"Days before expiration to send the second warning email. Set to 0 to disable." -msgstr "" - #: src/Admin/VersionAdminController.php:58 msgid "Product Versions" msgstr "" @@ -856,12 +839,12 @@ msgid "" msgstr "" #: src/Admin/VersionAdminController.php:102 -msgid "Or External URL" +msgid "Checksum File" msgstr "" #: src/Admin/VersionAdminController.php:105 msgid "" -"Alternative: Enter an external download URL instead of uploading a file." +"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." msgstr "" #: src/Admin/VersionAdminController.php:109 @@ -886,12 +869,12 @@ msgid "No versions found. Add your first version above." msgstr "" #: src/Admin/VersionAdminController.php:156 -#: src/Admin/VersionAdminController.php:372 +#: src/Admin/VersionAdminController.php:378 msgid "Uploaded file" msgstr "" #: src/Admin/VersionAdminController.php:159 -#: src/Admin/VersionAdminController.php:375 +#: src/Admin/VersionAdminController.php:381 msgid "No download file" msgstr "" @@ -919,52 +902,61 @@ msgstr "" msgid "Use this file" msgstr "" -#: src/Admin/VersionAdminController.php:250 +#: src/Admin/VersionAdminController.php:221 +msgid "" +"Invalid checksum file format. File must contain a 64-character SHA256 hash." +msgstr "" + +#: src/Admin/VersionAdminController.php:222 +msgid "Failed to read checksum file." +msgstr "" + +#: src/Admin/VersionAdminController.php:252 msgid "Product ID and version are required." msgstr "" -#: src/Admin/VersionAdminController.php:255 +#: src/Admin/VersionAdminController.php:257 msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." msgstr "" -#: src/Admin/VersionAdminController.php:260 +#: src/Admin/VersionAdminController.php:262 msgid "This version already exists." msgstr "" -#: src/Admin/VersionAdminController.php:266 +#: src/Admin/VersionAdminController.php:268 msgid "Product not found." msgstr "" -#: src/Admin/VersionAdminController.php:270 +#: src/Admin/VersionAdminController.php:272 msgid "This product is not a licensed product." msgstr "" -#: src/Admin/VersionAdminController.php:283 +#: src/Admin/VersionAdminController.php:289 msgid "Failed to create version." msgstr "" -#: src/Admin/VersionAdminController.php:291 +#: src/Admin/VersionAdminController.php:297 msgid "Version added successfully." msgstr "" -#: src/Admin/VersionAdminController.php:311 -#: src/Admin/VersionAdminController.php:338 +#: src/Admin/VersionAdminController.php:317 +#: src/Admin/VersionAdminController.php:344 msgid "Version ID is required." msgstr "" -#: src/Admin/VersionAdminController.php:317 +#: src/Admin/VersionAdminController.php:323 msgid "Failed to delete version." msgstr "" -#: src/Admin/VersionAdminController.php:320 +#: src/Admin/VersionAdminController.php:326 msgid "Version deleted successfully." msgstr "" -#: src/Admin/VersionAdminController.php:344 +#: src/Admin/VersionAdminController.php:350 msgid "Failed to update version." msgstr "" -#: src/Admin/VersionAdminController.php:348 +#: src/Admin/VersionAdminController.php:354 msgid "Version updated successfully." msgstr "" @@ -1039,152 +1031,149 @@ msgstr "" msgid "Domain for license activation" msgstr "" -#: src/Email/LicenseEmailController.php:173 -#: src/Email/LicenseEmailController.php:177 -#: src/Email/LicenseEmailController.php:281 -#: src/Email/LicenseExpirationEmail.php:207 -#: src/Email/LicenseExpirationEmail.php:270 -#: src/Frontend/AccountController.php:189 -msgid "License Key:" +#: src/License/LicenseManager.php:366 +msgid "This license has been revoked." msgstr "" -#: src/Email/LicenseEmailController.php:217 -msgid "Your License Keys" +#: src/License/LicenseManager.php:376 +msgid "This license has expired." msgstr "" -#: src/Email/LicenseEmailController.php:221 -#: src/Email/LicenseEmailController.php:276 -msgid "Licensed Domain:" +#: src/License/LicenseManager.php:384 +msgid "This license is inactive." msgstr "" -#: src/Email/LicenseEmailController.php:248 -#: src/Email/LicenseEmailController.php:287 -#: src/Frontend/AccountController.php:217 -msgid "Never" -msgstr "" - -#: src/Email/LicenseEmailController.php:257 -#: src/Email/LicenseEmailController.php:291 -msgid "You can also view your licenses in your account under \"Licenses\"." -msgstr "" - -#: src/Email/LicenseEmailController.php:272 -msgid "YOUR LICENSE KEYS" -msgstr "" - -#: src/Email/LicenseEmailController.php:284 -#: src/Email/LicenseExpirationEmail.php:219 -#: src/Email/LicenseExpirationEmail.php:272 -#: src/Frontend/AccountController.php:212 -msgid "Expires:" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:55 -msgid "License Expiration Warning" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:56 -msgid "" -"License expiration warning emails are sent to customers when their licenses " -"are about to expire." -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:74 -msgid "" -"[{site_title}] Your license for {product_name} expires in {days_remaining} " -"days" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:82 -msgid "License Expiration Notice" +#: src/License/LicenseManager.php:394 +msgid "This license is not valid for this domain." msgstr "" +#: src/License/LicenseManager.php:760 src/Frontend/AccountController.php:139 #: src/Email/LicenseExpirationEmail.php:107 -#: src/Frontend/AccountController.php:139 src/License/LicenseManager.php:760 msgid "Unknown Product" msgstr "" -#: src/Email/LicenseExpirationEmail.php:176 -#: src/Email/LicenseExpirationEmail.php:246 +#: src/Product/LicensedProductType.php:55 +msgid "Licensed Product" +msgstr "" + +#: src/Product/LicensedProductType.php:76 +msgid "License Settings" +msgstr "" + +#: src/Product/LicensedProductType.php:103 #, php-format -msgid "Hello %s," +msgid "%d days" msgstr "" -#: src/Email/LicenseExpirationEmail.php:181 -#: src/Email/LicenseExpirationEmail.php:251 +#. translators: %s: URL to settings page +#: src/Product/LicensedProductType.php:113 #, php-format -msgid "Your license for %s will expire tomorrow (%s)." +msgid "Leave fields empty to use default settings from %s." msgstr "" -#: src/Email/LicenseExpirationEmail.php:189 -#: src/Email/LicenseExpirationEmail.php:257 +#: src/Product/LicensedProductType.php:115 +msgid "WooCommerce > Settings > Licensed Products" +msgstr "" + +#: src/Product/LicensedProductType.php:122 +msgid "Max Activations" +msgstr "" + +#. translators: %d: default max activations value +#: src/Product/LicensedProductType.php:125 #, php-format -msgid "Your license for %1$s will expire in %2$d days (%3$s)." +msgid "Maximum number of domain activations per license. Default: %d" msgstr "" -#: src/Email/LicenseExpirationEmail.php:197 -#: src/Email/LicenseExpirationEmail.php:266 -msgid "License Details" +#: src/Product/LicensedProductType.php:140 +msgid "License Validity (Days)" msgstr "" -#: src/Email/LicenseExpirationEmail.php:203 -#: src/Email/LicenseExpirationEmail.php:269 -msgid "Product:" +#. translators: %s: default validity value +#: src/Product/LicensedProductType.php:143 +#, php-format +msgid "Number of days the license is valid. Leave empty for default (%s)." msgstr "" -#: src/Email/LicenseExpirationEmail.php:215 -#: src/Email/LicenseExpirationEmail.php:271 -#: src/Frontend/AccountController.php:200 -msgid "Domain:" +#: src/Product/LicensedProductType.php:158 +msgid "Bind to Major Version" msgstr "" -#: src/Email/LicenseExpirationEmail.php:235 -#: src/Email/LicenseExpirationEmail.php:281 -msgid "View My Licenses" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:291 +#. translators: %s: default bind to version value (Yes/No) +#: src/Product/LicensedProductType.php:161 +#, php-format msgid "" -"To continue using this product, please renew your license before the " -"expiration date." +"If enabled, licenses are bound to the major version at purchase time. " +"Default: %s" msgstr "" -#. translators: %s: list of placeholders -#: src/Email/LicenseExpirationEmail.php:301 +#: src/Product/LicensedProductType.php:162 +msgid "Yes" +msgstr "" + +#: src/Product/LicensedProductType.php:162 +msgid "No" +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 "Available placeholders: %s" +msgid "File checksum does not match. Expected: %1$s, Got: %2$s" msgstr "" -#: src/Email/LicenseExpirationEmail.php:307 -msgid "Enable/Disable" +#: src/Frontend/DownloadController.php:65 +#: src/Frontend/DownloadController.php:89 +msgid "Invalid download link." msgstr "" -#: src/Email/LicenseExpirationEmail.php:309 -msgid "Enable this email notification" +#: src/Frontend/DownloadController.php:66 +#: src/Frontend/DownloadController.php:76 +#: src/Frontend/DownloadController.php:90 +#: src/Frontend/DownloadController.php:106 +#: src/Frontend/DownloadController.php:116 +#: src/Frontend/DownloadController.php:125 +#: src/Frontend/DownloadController.php:135 +#: src/Frontend/DownloadController.php:144 +#: src/Frontend/DownloadController.php:153 +#: src/Frontend/DownloadController.php:171 +#: src/Frontend/DownloadController.php:187 +msgid "Download Error" msgstr "" -#: src/Email/LicenseExpirationEmail.php:313 -msgid "Subject" +#: src/Frontend/DownloadController.php:75 +msgid "Invalid download link format." msgstr "" -#: src/Email/LicenseExpirationEmail.php:321 -msgid "Email heading" +#: src/Frontend/DownloadController.php:115 +msgid "You do not have permission to download this file." msgstr "" -#: src/Email/LicenseExpirationEmail.php:329 -msgid "Additional content" +#: src/Frontend/DownloadController.php:124 +msgid "Your license is not active. Please contact support." msgstr "" -#: src/Email/LicenseExpirationEmail.php:330 -msgid "Text to appear below the main email content." +#: src/Frontend/DownloadController.php:134 +msgid "Version not found." msgstr "" -#: src/Email/LicenseExpirationEmail.php:338 -msgid "Email type" +#: src/Frontend/DownloadController.php:143 +msgid "Version does not match your licensed product." msgstr "" -#: src/Email/LicenseExpirationEmail.php:340 -msgid "Choose which format of email to send." +#: src/Frontend/DownloadController.php:152 +msgid "This version is no longer available for download." +msgstr "" + +#: src/Frontend/DownloadController.php:170 +msgid "No download file available for this version." +msgstr "" + +#: src/Frontend/DownloadController.php:186 +msgid "Download file not found." msgstr "" #: src/Frontend/AccountController.php:104 @@ -1195,6 +1184,21 @@ msgstr "" msgid "You have no licenses yet." msgstr "" +#: src/Frontend/AccountController.php:189 +#: src/Email/LicenseEmailController.php:173 +#: src/Email/LicenseEmailController.php:177 +#: src/Email/LicenseEmailController.php:281 +#: src/Email/LicenseExpirationEmail.php:207 +#: src/Email/LicenseExpirationEmail.php:270 +msgid "License Key:" +msgstr "" + +#: src/Frontend/AccountController.php:200 +#: src/Email/LicenseExpirationEmail.php:215 +#: src/Email/LicenseExpirationEmail.php:271 +msgid "Domain:" +msgstr "" + #: src/Frontend/AccountController.php:206 msgid "Transfer to new domain" msgstr "" @@ -1203,6 +1207,19 @@ msgstr "" msgid "Transfer" msgstr "" +#: src/Frontend/AccountController.php:212 +#: src/Email/LicenseEmailController.php:284 +#: src/Email/LicenseExpirationEmail.php:219 +#: src/Email/LicenseExpirationEmail.php:272 +msgid "Expires:" +msgstr "" + +#: src/Frontend/AccountController.php:217 +#: src/Email/LicenseEmailController.php:248 +#: src/Email/LicenseEmailController.php:287 +msgid "Never" +msgstr "" + #: src/Frontend/AccountController.php:225 msgid "Available Downloads" msgstr "" @@ -1279,154 +1296,127 @@ msgstr "" msgid "Failed to transfer license. Please try again." msgstr "" -#: src/Frontend/DownloadController.php:65 -#: src/Frontend/DownloadController.php:89 -msgid "Invalid download link." +#: src/Email/LicenseEmailController.php:217 +msgid "Your License Keys" msgstr "" -#: src/Frontend/DownloadController.php:66 -#: src/Frontend/DownloadController.php:76 -#: src/Frontend/DownloadController.php:90 -#: src/Frontend/DownloadController.php:106 -#: src/Frontend/DownloadController.php:116 -#: src/Frontend/DownloadController.php:125 -#: src/Frontend/DownloadController.php:135 -#: src/Frontend/DownloadController.php:144 -#: src/Frontend/DownloadController.php:153 -#: src/Frontend/DownloadController.php:171 -#: src/Frontend/DownloadController.php:187 -msgid "Download Error" +#: src/Email/LicenseEmailController.php:221 +#: src/Email/LicenseEmailController.php:276 +msgid "Licensed Domain:" msgstr "" -#: src/Frontend/DownloadController.php:75 -msgid "Invalid download link format." +#: src/Email/LicenseEmailController.php:257 +#: src/Email/LicenseEmailController.php:291 +msgid "You can also view your licenses in your account under \"Licenses\"." msgstr "" -#: src/Frontend/DownloadController.php:115 -msgid "You do not have permission to download this file." +#: src/Email/LicenseEmailController.php:272 +msgid "YOUR LICENSE KEYS" msgstr "" -#: src/Frontend/DownloadController.php:124 -msgid "Your license is not active. Please contact support." +#: src/Email/LicenseExpirationEmail.php:55 +msgid "License Expiration Warning" msgstr "" -#: src/Frontend/DownloadController.php:134 -msgid "Version not found." -msgstr "" - -#: src/Frontend/DownloadController.php:143 -msgid "Version does not match your licensed product." -msgstr "" - -#: src/Frontend/DownloadController.php:152 -msgid "This version is no longer available for download." -msgstr "" - -#: src/Frontend/DownloadController.php:170 -msgid "No download file available for this version." -msgstr "" - -#: src/Frontend/DownloadController.php:186 -msgid "Download file not found." -msgstr "" - -#: src/License/LicenseManager.php:366 -msgid "This license has been revoked." -msgstr "" - -#: src/License/LicenseManager.php:376 -msgid "This license has expired." -msgstr "" - -#: src/License/LicenseManager.php:384 -msgid "This license is inactive." -msgstr "" - -#: src/License/LicenseManager.php:394 -msgid "This license is not valid for this domain." -msgstr "" - -#: src/Product/LicensedProductType.php:55 -msgid "Licensed Product" -msgstr "" - -#: src/Product/LicensedProductType.php:76 -msgid "License Settings" -msgstr "" - -#: src/Product/LicensedProductType.php:103 -#, php-format -msgid "%d days" -msgstr "" - -#. translators: %s: URL to settings page -#: src/Product/LicensedProductType.php:113 -#, php-format -msgid "Leave fields empty to use default settings from %s." -msgstr "" - -#: src/Product/LicensedProductType.php:115 -msgid "WooCommerce > Settings > Licensed Products" -msgstr "" - -#: src/Product/LicensedProductType.php:122 -msgid "Max Activations" -msgstr "" - -#. translators: %d: default max activations value -#: src/Product/LicensedProductType.php:125 -#, php-format -msgid "Maximum number of domain activations per license. Default: %d" -msgstr "" - -#: src/Product/LicensedProductType.php:140 -msgid "License Validity (Days)" -msgstr "" - -#. translators: %s: default validity value -#: src/Product/LicensedProductType.php:143 -#, php-format -msgid "Number of days the license is valid. Leave empty for default (%s)." -msgstr "" - -#: src/Product/LicensedProductType.php:158 -msgid "Bind to Major Version" -msgstr "" - -#. translators: %s: default bind to version value (Yes/No) -#: src/Product/LicensedProductType.php:161 -#, php-format +#: src/Email/LicenseExpirationEmail.php:56 msgid "" -"If enabled, licenses are bound to the major version at purchase time. " -"Default: %s" +"License expiration warning emails are sent to customers when their licenses " +"are about to expire." msgstr "" -#: src/Product/LicensedProductType.php:162 -msgid "Yes" +#: src/Email/LicenseExpirationEmail.php:74 +msgid "" +"[{site_title}] Your license for {product_name} expires in {days_remaining} " +"days" msgstr "" -#: src/Product/LicensedProductType.php:162 -msgid "No" +#: src/Email/LicenseExpirationEmail.php:82 +msgid "License Expiration Notice" msgstr "" -#: src/Admin/VersionAdminController.php:101 -msgid "SHA256 Hash" -msgstr "" - -#: src/Admin/VersionAdminController.php:103 -msgid "Enter SHA256 checksum..." -msgstr "" - -#: src/Admin/VersionAdminController.php:104 -msgid "SHA256 checksum of the uploaded file (optional but recommended for integrity verification)." -msgstr "" - -#: src/Product/VersionManager.php:67 -msgid "Attachment file not found." -msgstr "" - -#. translators: 1: provided hash, 2: calculated hash -#: src/Product/VersionManager.php:73 +#: src/Email/LicenseExpirationEmail.php:176 +#: src/Email/LicenseExpirationEmail.php:246 #, php-format -msgid "File checksum does not match. Expected: %1$s, Got: %2$s" +msgid "Hello %s," +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:181 +#: src/Email/LicenseExpirationEmail.php:251 +#, php-format +msgid "Your license for %s will expire tomorrow (%s)." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:189 +#: src/Email/LicenseExpirationEmail.php:257 +#, php-format +msgid "Your license for %1$s will expire in %2$d days (%3$s)." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:197 +#: src/Email/LicenseExpirationEmail.php:266 +msgid "License Details" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:203 +#: src/Email/LicenseExpirationEmail.php:269 +msgid "Product:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:235 +#: src/Email/LicenseExpirationEmail.php:281 +msgid "View My Licenses" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:291 +msgid "" +"To continue using this product, please renew your license before the " +"expiration date." +msgstr "" + +#. translators: %s: list of placeholders +#: src/Email/LicenseExpirationEmail.php:301 +#, php-format +msgid "Available placeholders: %s" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:307 +msgid "Enable/Disable" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:309 +msgid "Enable this email notification" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:313 +msgid "Subject" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:321 +msgid "Email heading" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:329 +msgid "Additional content" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:330 +msgid "Text to appear below the main email content." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:338 +msgid "Email type" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:340 +msgid "Choose which format of email to send." +msgstr "" + +#. translators: %s: WooCommerce plugin name +#: wc-licensed-product.php:61 +#, php-format +msgid "%s requires WooCommerce to be installed and active." +msgstr "" + +#: wc-licensed-product.php:119 +msgid "WC Licensed Product requires WooCommerce to be installed and active." msgstr "" diff --git a/src/Admin/VersionAdminController.php b/src/Admin/VersionAdminController.php index c65b659..fd908cb 100644 --- a/src/Admin/VersionAdminController.php +++ b/src/Admin/VersionAdminController.php @@ -99,10 +99,10 @@ final class VersionAdminController - + - -

+ +

@@ -218,6 +218,8 @@ final class VersionAdminController 'error' => __('An error occurred. Please try again.', 'wc-licensed-product'), 'selectFile' => __('Select Download File', 'wc-licensed-product'), 'useThisFile' => __('Use this file', 'wc-licensed-product'), + 'invalidChecksumFile' => __('Invalid checksum file format. File must contain a 64-character SHA256 hash.', 'wc-licensed-product'), + 'checksumReadError' => __('Failed to read checksum file.', 'wc-licensed-product'), ], ]); diff --git a/wc-licensed-product.php b/wc-licensed-product.php index 99db79b..bb47bb4 100644 --- a/wc-licensed-product.php +++ b/wc-licensed-product.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce Licensed Product * Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-licensed-product * Description: WooCommerce plugin to sell software products using license keys with domain-based validation. - * Version: 0.2.0 + * Version: 0.2.1 * Author: Marco Graetsch * Author URI: https://src.bundespruefstelle.ch/magdev * License: GPL-2.0-or-later @@ -28,7 +28,7 @@ if (!defined('ABSPATH')) { } // Plugin constants -define('WC_LICENSED_PRODUCT_VERSION', '0.2.0'); +define('WC_LICENSED_PRODUCT_VERSION', '0.2.1'); define('WC_LICENSED_PRODUCT_PLUGIN_FILE', __FILE__); define('WC_LICENSED_PRODUCT_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('WC_LICENSED_PRODUCT_PLUGIN_URL', plugin_dir_url(__FILE__));