From 83836d69afdff419485f3fbd14a0e4c4ffb74c2a Mon Sep 17 00:00:00 2001 From: magdev Date: Sun, 25 Jan 2026 18:31:36 +0100 Subject: [PATCH] Implement multi-domain licensing for v0.5.0 - Add multi-domain checkout support for WooCommerce Blocks - Fix domain field rendering using ExperimentalOrderMeta slot - Add DOM injection fallback for checkout field rendering - Update translations with new multi-domain strings (de_CH) - Update email templates for grouped license display - Refactor account page to group licenses by product/order Co-Authored-By: Claude Opus 4.5 --- assets/css/frontend.css | 319 +++- assets/js/checkout-blocks.js | 324 +++- assets/js/frontend.js | 17 + languages/wc-licensed-product-de_CH.mo | Bin 32500 -> 34153 bytes languages/wc-licensed-product-de_CH.po | 1839 +++++++++++--------- languages/wc-licensed-product.pot | 1737 +++++++++--------- src/Admin/OrderLicenseController.php | 244 ++- src/Admin/SettingsController.php | 15 + src/Checkout/CheckoutBlocksIntegration.php | 80 +- src/Checkout/CheckoutController.php | 416 ++++- src/Checkout/StoreApiExtension.php | 194 ++- src/Email/LicenseEmailController.php | 161 +- src/Frontend/AccountController.php | 303 +++- src/License/LicenseManager.php | 50 +- src/Plugin.php | 68 +- templates/frontend/licenses.html.twig | 183 +- 16 files changed, 3816 insertions(+), 2134 deletions(-) diff --git a/assets/css/frontend.css b/assets/css/frontend.css index 20b0638..d7eeb07 100644 --- a/assets/css/frontend.css +++ b/assets/css/frontend.css @@ -37,13 +37,196 @@ color: #383d41; } -/* License Cards */ +/* License Packages */ .woocommerce-licenses { display: flex; flex-direction: column; gap: 1.5em; } +.license-package { + border: 1px solid #e5e5e5; + border-radius: 8px; + overflow: hidden; + background: #fff; +} + +.package-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1em 1.5em; + background: #f8f9fa; + border-bottom: 1px solid #e5e5e5; +} + +.package-title { + display: flex; + flex-direction: column; + gap: 0.25em; +} + +.package-title h3 { + margin: 0; + font-size: 1.1em; +} + +.package-title h3 a { + color: inherit; + text-decoration: none; +} + +.package-title h3 a:hover { + text-decoration: underline; +} + +.package-order { + font-size: 0.85em; + color: #666; +} + +.package-order a { + color: #2271b1; + text-decoration: none; +} + +.package-order a:hover { + text-decoration: underline; +} + +.package-license-count { + font-size: 0.9em; + color: #666; + background: #e9ecef; + padding: 0.3em 0.8em; + border-radius: 12px; +} + +/* Package Licenses - Two Row Layout */ +.package-licenses { + padding: 0; +} + +.license-entry { + padding: 1em 1.5em; + border-bottom: 1px solid #e5e5e5; +} + +.license-entry:last-child { + border-bottom: none; +} + +.license-entry:hover { + background-color: #fafafa; +} + +.license-row-primary { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1em; + margin-bottom: 0.5em; +} + +.license-key-group { + display: flex; + align-items: center; + gap: 0.75em; + flex-shrink: 1; + min-width: 0; +} + +.license-entry code.license-key { + font-family: 'SF Mono', Monaco, Consolas, monospace; + background-color: #f5f5f5; + padding: 0.4em 0.75em; + border-radius: 4px; + font-size: 0.95em; + letter-spacing: 0.03em; + flex-shrink: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; +} + +.license-key-group .license-status { + flex-shrink: 0; +} + +.license-actions { + display: flex; + align-items: center; + gap: 0.5em; + flex-shrink: 0; +} + +.license-row-secondary { + display: flex; + align-items: center; + gap: 1.5em; + font-size: 0.9em; + color: #666; + flex-wrap: wrap; +} + +.license-meta-item { + display: inline-flex; + align-items: center; + gap: 0.35em; +} + +.license-meta-item .dashicons { + font-size: 14px; + width: 14px; + height: 14px; + color: #999; +} + +.license-domain { + color: #333; +} + +.license-expiry .lifetime { + color: #28a745; + font-weight: 500; +} + +/* Legacy table styles (kept for backwards compatibility) */ +.licenses-table { + width: 100%; + border-collapse: collapse; + font-size: 0.95em; +} + +.licenses-table th, +.licenses-table td { + padding: 0.75em 1em; + text-align: left; + border-bottom: 1px solid #e5e5e5; +} + +.licenses-table th { + font-weight: 600; + background-color: #fafafa; + font-size: 0.9em; + color: #555; +} + +.licenses-table code.license-key { + font-family: 'SF Mono', Monaco, Consolas, monospace; + background-color: #f5f5f5; + padding: 0.3em 0.6em; + border-radius: 4px; + font-size: 0.9em; + letter-spacing: 0.03em; +} + +.licenses-table .lifetime { + color: #28a745; + font-weight: 500; +} + +/* Legacy single card styles (kept for backwards compatibility) */ .license-card { border: 1px solid #e5e5e5; border-radius: 8px; @@ -184,12 +367,14 @@ } /* Download Section */ +.package-downloads, .license-downloads { padding: 1em 1.5em; background: #f8f9fa; border-top: 1px solid #e5e5e5; } +.package-downloads h4, .license-downloads h4 { margin: 0 0 0.75em 0; font-size: 0.95em; @@ -282,6 +467,71 @@ color: #666; } +/* Latest version badge */ +.download-version-badge { + display: inline-block; + padding: 0.15em 0.5em; + margin-left: 0.5em; + font-size: 0.75em; + font-weight: 600; + text-transform: uppercase; + background: #d4edda; + color: #155724; + border-radius: 3px; + vertical-align: middle; +} + +/* Older versions collapsible */ +.older-versions-section { + margin-top: 0.75em; + padding-top: 0.75em; + border-top: 1px dashed #ddd; +} + +.older-versions-toggle { + display: inline-flex; + align-items: center; + gap: 0.35em; + padding: 0.4em 0.75em; + background: transparent; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 0.85em; + color: #666; + cursor: pointer; + transition: all 0.2s ease; +} + +.older-versions-toggle:hover { + background: #f5f5f5; + border-color: #ccc; + color: #333; +} + +.older-versions-toggle .dashicons { + font-size: 16px; + width: 16px; + height: 16px; + transition: transform 0.2s ease; +} + +.older-versions-toggle[aria-expanded="true"] .dashicons { + transform: rotate(180deg); +} + +.older-versions-list { + margin-top: 0.75em; + padding-left: 0; +} + +.older-versions-list .download-item { + opacity: 0.85; +} + +.older-versions-list .download-item:hover { + opacity: 1; +} + /* Domain Field */ #licensed-product-domain-field { margin-top: 2em; @@ -333,6 +583,52 @@ /* Responsive */ @media screen and (max-width: 768px) { + /* Package header responsive */ + .package-header { + flex-direction: column; + align-items: flex-start; + gap: 0.75em; + } + + .package-license-count { + align-self: flex-start; + } + + /* License entry responsive */ + .license-entry { + padding: 1em; + } + + .license-row-primary { + flex-direction: column; + align-items: flex-start; + gap: 0.75em; + } + + .license-key-group { + flex-direction: column; + align-items: flex-start; + gap: 0.5em; + width: 100%; + } + + .license-entry code.license-key { + font-size: 0.85em; + word-break: break-all; + white-space: normal; + } + + .license-actions { + align-self: flex-start; + } + + .license-row-secondary { + flex-direction: column; + align-items: flex-start; + gap: 0.5em; + } + + /* Legacy card layout responsive */ .license-header { flex-direction: column; align-items: flex-start; @@ -354,33 +650,44 @@ flex-wrap: wrap; } + /* Legacy table responsive */ .woocommerce-licenses-table, .woocommerce-licenses-table thead, .woocommerce-licenses-table tbody, .woocommerce-licenses-table th, .woocommerce-licenses-table td, - .woocommerce-licenses-table tr { + .woocommerce-licenses-table tr, + .licenses-table, + .licenses-table thead, + .licenses-table tbody, + .licenses-table th, + .licenses-table td, + .licenses-table tr { display: block; } - .woocommerce-licenses-table thead tr { + .woocommerce-licenses-table thead tr, + .licenses-table thead tr { position: absolute; top: -9999px; left: -9999px; } - .woocommerce-licenses-table tr { + .woocommerce-licenses-table tr, + .licenses-table tr { border: 1px solid #e5e5e5; margin-bottom: 1em; } - .woocommerce-licenses-table td { + .woocommerce-licenses-table td, + .licenses-table td { border: none; position: relative; padding-left: 50%; } - .woocommerce-licenses-table td:before { + .woocommerce-licenses-table td:before, + .licenses-table td:before { content: attr(data-title); position: absolute; left: 0.75em; diff --git a/assets/js/checkout-blocks.js b/assets/js/checkout-blocks.js index 83053f0..1cdd17b 100644 --- a/assets/js/checkout-blocks.js +++ b/assets/js/checkout-blocks.js @@ -1,7 +1,8 @@ /** * WooCommerce Checkout Blocks Integration * - * Adds a domain field to the checkout block for licensed products. + * Adds domain fields to the checkout block for licensed products. + * Supports single domain mode (legacy) and multi-domain mode (per quantity). * * @package WcLicensedProduct */ @@ -9,92 +10,333 @@ (function () { 'use strict'; - const { registerCheckoutBlock } = wc.blocksCheckout; - const { createElement, useState, useEffect } = wp.element; + // Check dependencies + if (typeof wc === 'undefined' || + typeof wc.blocksCheckout === 'undefined' || + typeof wc.wcSettings === 'undefined') { + return; + } + + const { getSetting } = wc.wcSettings; + const { createElement, useState } = wp.element; const { TextControl } = wp.components; const { __ } = wp.i18n; - const { extensionCartUpdate } = wc.blocksCheckout; - const { getSetting } = wc.wcSettings; - // Get settings passed from PHP + // Get available exports from blocksCheckout + const { ExperimentalOrderMeta } = wc.blocksCheckout; + + // Get settings from PHP const settings = getSetting('wc-licensed-product_data', {}); + // Check if we have licensed products + if (!settings.hasLicensedProducts) { + return; + } + /** * Validate domain format */ function isValidDomain(domain) { - if (!domain || domain.length > 255) { - return false; - } + if (!domain || domain.length > 255) return false; const pattern = /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; return pattern.test(domain); } /** - * Normalize domain (remove protocol and www) + * Normalize domain */ function normalizeDomain(domain) { - let normalized = domain.toLowerCase().trim(); - normalized = normalized.replace(/^https?:\/\//, ''); - normalized = normalized.replace(/^www\./, ''); - normalized = normalized.replace(/\/.*$/, ''); - return normalized; + return domain.toLowerCase().trim() + .replace(/^https?:\/\//, '') + .replace(/^www\./, '') + .replace(/\/.*$/, ''); } /** - * License Domain Block Component + * Single Domain Component */ - const LicenseDomainBlock = ({ checkoutExtensionData, extensions }) => { + const SingleDomainField = () => { const [domain, setDomain] = useState(''); const [error, setError] = useState(''); - const { setExtensionData } = checkoutExtensionData; - - // Only show if cart has licensed products - if (!settings.hasLicensedProducts) { - return null; - } const handleChange = (value) => { const normalized = normalizeDomain(value); setDomain(normalized); - // Validate if (normalized && !isValidDomain(normalized)) { setError(settings.validationError || __('Please enter a valid domain.', 'wc-licensed-product')); } else { setError(''); } - // Update extension data for server-side processing - setExtensionData('wc-licensed-product', 'licensed_product_domain', normalized); + // Store in hidden input for form submission + const hiddenInput = document.getElementById('wclp-domain-hidden'); + if (hiddenInput) { + hiddenInput.value = normalized; + } }; return createElement( 'div', - { className: 'wc-block-components-licensed-product-domain' }, - createElement( - 'h3', - { className: 'wc-block-components-title' }, + { + className: 'wc-block-components-licensed-product-domain', + style: { + padding: '16px', + backgroundColor: '#f0f0f0', + borderRadius: '4px', + marginBottom: '16px', + } + }, + createElement('h4', { style: { marginTop: 0, marginBottom: '8px' } }, settings.sectionTitle || __('License Domain', 'wc-licensed-product') ), + createElement('p', { style: { marginBottom: '12px', color: '#666', fontSize: '0.9em' } }, + settings.fieldDescription || __('Enter the domain where you will use the license.', 'wc-licensed-product') + ), createElement(TextControl, { - label: settings.fieldLabel || __('Domain for License Activation', 'wc-licensed-product'), + label: settings.singleDomainLabel || __('Domain', 'wc-licensed-product'), value: domain, onChange: handleChange, placeholder: settings.fieldPlaceholder || 'example.com', - help: error || settings.fieldDescription || __('Enter the domain where you will use this license.', 'wc-licensed-product'), + help: error || '', className: error ? 'has-error' : '', - required: true, + }), + createElement('input', { + type: 'hidden', + id: 'wclp-domain-hidden', + name: 'wclp_license_domain', + value: domain, }) ); }; - // Register the checkout block - registerCheckoutBlock({ - metadata: { - name: 'wc-licensed-product/domain-field', - parent: ['woocommerce/checkout-contact-information-block'], - }, - component: LicenseDomainBlock, - }); + /** + * Multi-Domain Component + */ + const MultiDomainFields = () => { + const products = settings.licensedProducts || []; + const [domains, setDomains] = useState(() => { + const init = {}; + products.forEach(p => { + init[p.product_id] = Array(p.quantity).fill(''); + }); + return init; + }); + const [errors, setErrors] = useState({}); + + if (!products.length) { + return null; + } + + const handleChange = (productId, index, value) => { + const normalized = normalizeDomain(value); + const newDomains = { ...domains }; + if (!newDomains[productId]) newDomains[productId] = []; + newDomains[productId] = [...newDomains[productId]]; + newDomains[productId][index] = normalized; + setDomains(newDomains); + + // Validate + const key = `${productId}_${index}`; + const newErrors = { ...errors }; + if (normalized && !isValidDomain(normalized)) { + newErrors[key] = settings.validationError || __('Please enter a valid domain.', 'wc-licensed-product'); + } else { + delete newErrors[key]; + } + + // Check for duplicates within same product + const productDomains = newDomains[productId].filter(d => d); + const uniqueDomains = new Set(productDomains.map(d => normalizeDomain(d))); + if (productDomains.length !== uniqueDomains.size) { + const seen = new Set(); + newDomains[productId].forEach((d, idx) => { + const normalizedD = normalizeDomain(d); + const dupKey = `${productId}_${idx}`; + if (normalizedD && seen.has(normalizedD)) { + newErrors[dupKey] = settings.duplicateError || __('Each license requires a unique domain.', 'wc-licensed-product'); + } else if (normalizedD) { + seen.add(normalizedD); + } + }); + } + + setErrors(newErrors); + + // Update hidden field + const data = Object.entries(newDomains).map(([pid, doms]) => ({ + product_id: parseInt(pid, 10), + domains: doms.filter(d => d), + })).filter(item => item.domains.length > 0); + + const hiddenInput = document.getElementById('wclp-domains-hidden'); + if (hiddenInput) { + hiddenInput.value = JSON.stringify(data); + } + }; + + return createElement( + 'div', + { + className: 'wc-block-components-licensed-product-domains', + style: { + padding: '16px', + backgroundColor: '#f0f0f0', + borderRadius: '4px', + marginBottom: '16px', + } + }, + createElement('h4', { style: { marginTop: 0, marginBottom: '8px' } }, + settings.sectionTitle || __('License Domains', 'wc-licensed-product') + ), + createElement('p', { style: { marginBottom: '12px', color: '#666', fontSize: '0.9em' } }, + settings.fieldDescription || __('Enter a unique domain for each license.', 'wc-licensed-product') + ), + products.map(product => createElement( + 'div', + { + key: product.product_id, + style: { + marginBottom: '16px', + padding: '12px', + backgroundColor: '#fff', + borderRadius: '4px', + } + }, + createElement('strong', { style: { display: 'block', marginBottom: '8px' } }, + product.name + (product.quantity > 1 ? ` (×${product.quantity})` : '') + ), + Array.from({ length: product.quantity }, (_, i) => { + const key = `${product.product_id}_${i}`; + return createElement( + 'div', + { key: i, style: { marginBottom: '8px' } }, + createElement(TextControl, { + label: (settings.licenseLabel || __('License %d:', 'wc-licensed-product')).replace('%d', i + 1), + value: domains[product.product_id]?.[i] || '', + onChange: (val) => handleChange(product.product_id, i, val), + placeholder: settings.fieldPlaceholder || 'example.com', + help: errors[key] || '', + }) + ); + }) + )), + createElement('input', { + type: 'hidden', + id: 'wclp-domains-hidden', + name: 'wclp_license_domains', + value: '', + }) + ); + }; + + /** + * Main License Domains Block + */ + const LicenseDomainsBlock = () => { + if (settings.isMultiDomainEnabled) { + return createElement(MultiDomainFields); + } + return createElement(SingleDomainField); + }; + + // Register using ExperimentalOrderMeta slot + if (ExperimentalOrderMeta) { + const { registerPlugin } = wp.plugins || {}; + + if (registerPlugin) { + registerPlugin('wc-licensed-product-domain-fields', { + render: () => createElement( + ExperimentalOrderMeta, + {}, + createElement(LicenseDomainsBlock) + ), + scope: 'woocommerce-checkout', + }); + } + } + + // Fallback: inject into DOM directly if React approach fails + setTimeout(function() { + const existingComponent = document.querySelector('.wc-block-components-licensed-product-domain, .wc-block-components-licensed-product-domains'); + if (existingComponent) { + return; + } + + const checkoutForm = document.querySelector('.wc-block-checkout, .wc-block-checkout__form, form.checkout'); + if (!checkoutForm) { + return; + } + + const contactInfo = document.querySelector('.wc-block-checkout__contact-fields, .wp-block-woocommerce-checkout-contact-information-block'); + const paymentMethods = document.querySelector('.wc-block-checkout__payment-method, .wp-block-woocommerce-checkout-payment-block'); + + let insertionPoint = contactInfo || paymentMethods; + if (!insertionPoint) { + insertionPoint = checkoutForm.querySelector('.wc-block-components-form'); + } + + if (!insertionPoint) { + return; + } + + const container = document.createElement('div'); + container.id = 'wclp-domain-fields-container'; + container.className = 'wc-block-components-licensed-product-wrapper'; + container.style.cssText = 'margin: 20px 0; padding: 16px; background: #f0f0f0; border-radius: 4px;'; + + if (settings.isMultiDomainEnabled && settings.licensedProducts) { + container.innerHTML = ` +

${settings.sectionTitle || 'License Domains'}

+

+ ${settings.fieldDescription || 'Enter a unique domain for each license.'} +

+ ${settings.licensedProducts.map(product => ` +
+ + ${product.name}${product.quantity > 1 ? ` (×${product.quantity})` : ''} + + ${Array.from({ length: product.quantity }, (_, i) => ` +
+ + +
+ `).join('')} +
+ `).join('')} + `; + } else { + container.innerHTML = ` +

${settings.sectionTitle || 'License Domain'}

+

+ ${settings.fieldDescription || 'Enter the domain where you will use the license.'} +

+
+ + +
+ `; + } + + if (contactInfo) { + contactInfo.parentNode.insertBefore(container, contactInfo.nextSibling); + } else if (paymentMethods) { + paymentMethods.parentNode.insertBefore(container, paymentMethods); + } else { + insertionPoint.appendChild(container); + } + }, 2000); + })(); diff --git a/assets/js/frontend.js b/assets/js/frontend.js index 7380dc7..8fce961 100644 --- a/assets/js/frontend.js +++ b/assets/js/frontend.js @@ -25,6 +25,9 @@ $(document).on('click', '.wclp-modal-close, .wclp-modal-cancel, .wclp-modal-overlay', this.closeTransferModal.bind(this)); $(document).on('submit', '#wclp-transfer-form', this.submitTransfer.bind(this)); + // Older versions toggle + $(document).on('click', '.older-versions-toggle', this.toggleOlderVersions); + // Close modal on escape key $(document).on('keyup', function(e) { if (e.key === 'Escape') { @@ -33,6 +36,20 @@ }); }, + /** + * Toggle older versions visibility + */ + toggleOlderVersions: function(e) { + e.preventDefault(); + + var $btn = $(this); + var $list = $btn.siblings('.older-versions-list'); + var isExpanded = $btn.attr('aria-expanded') === 'true'; + + $btn.attr('aria-expanded', !isExpanded); + $list.slideToggle(200); + }, + /** * Copy license key to clipboard */ diff --git a/languages/wc-licensed-product-de_CH.mo b/languages/wc-licensed-product-de_CH.mo index 77f71d33ecd783ee2299f7e23473b48e1a1333bf..eed4981d3fcb70b732dbf9bcd758936e583174fd 100644 GIT binary patch delta 9561 zcmajk30PIt-pBE!fH*QJf{4RbKv7dcM8O&70ZmguO-+;o9D&1haJHjmlXkN@S$Q=Z zty`~VNuv!nuU1+%Xw$8md9B_`OW*2Vn=F05zq1$Rd!KsV{rKmz*4k^Yy~Yha{ri_j zC)PI(eAGI8li^z3$e0co-qM&~NPm@}Qe*zv*_cQ?j&XPbcy+EDPDz5@CJ;=P1pjrV{3dA z>ATr)J&fweN4OT7B^%@5228;n7{U9^VG_M5c+VQa-AUv#aUKS+6&}U*_$4;SCaK1> z!B|vzD#qXlY>U%S9V$T$z>j)vHEJN&Vk_QnHj?0f_PaKGuI2p?@pdLLH3&>~V6x@tD9bcf@jU2%2s^Rt|v`Km)_sne6x!s8RpzOeSJdAqq3)G9wBHtvF z$VSmj4MzuOp?3LlWE+?*sQRy>_RI-XN5Zq2e{~=^+nvh(sI?x8Yw%(mi*MTUgdBIO z9cwyj_m9A#Sb|!j?WoPS6Lrk$u`xc6ZE!E@z3=2O|Jo#<*@8BM+>WH6MmhjlHZuV= z1FJC|Z$a&q7g0-f2z9(ZK)s;jV7DU~sNJ7~sy7PT;xuHnOi6%*da@NY@|~y`KY^S; za}f1``2qESGsIo0nW!bY68qs@s40C5wPfE~6POmw%n*Js>t+RNlkUbm4D2PLDU0F= z=)rhYhXz~oP#v0w>R=UWB+ISW*z!%N8QF$94cl%0aa8-yq6V@b)!tXwLFfNG2~BZ_ z;cf#{F`Rq>>Qu}{t!1gb??X*#oy`YOFT5Jnv0Je--iJC(`;ix!!>A=Zjd2(;LI&88 zB=n-bsEUKJ9nL~ET#Xv}TGU9^qegHuCgFC}$oJwnJb-E^CfBXs+nR+M*icmaBe6B_ zH;p5$M__IL)hmtsb{ zOE4VO!4lNh)vP0-sd@ru;yz>}o5V40Lo-nK1J>(NGqV}BnI1&V&{L?rvllzz5$uZJ zpr$@f8Dr+f~L3|^-X^U^@7(>9rzG6vXj=csB_+u-ZELn z!6E2DP5nKnc3#6UJcg{M`2;oNsT18LDG1oa)u{9RIBG3Vq8bRFC8c32cgIFdWZe1O~z;yCZ9cs?gq=j8`;bW1^;Z*A(~5 z^`!MR>_zz}s24}`R^^AI@@2@rGh47X9>X$hHPy{8#{!-I2S_Ay<2-i3g^%IYm^#Cqp&h8b@*JvT|3H1qKSg~9e!?~w&k@pY?}<^Ei_LH@ibB=TL)|aHR4hgf{Q3Y1jbtmf#z$;^pY=V|i@!uY*qDWrX{ZiP z!M<3BnyKx!{4LBO{}bxN(|>{cXEQz^$k~^)%{3^Ac)Pzlsa+ePoi%phbKwb^dQBv5bOqs3}=mfGYrRX zQ3LoM_1-8S^RJO7``m&8)Q6)S+u=IYjNE}5(fc?Gf5c`uw9@U+I2=!Y4(bK>q6V@D zqi`SUlpH|^Kf{R_8Q?dKcJC#q5muloF2iiR9y9Po)Cj*v?dqIr_n7)|82N3OhDTA) zHK}pGaKn+$yz%2CJcO;VU9Gz}0^LYx%GP2JybhzW9%FDHYDV5hjp!?T|BSsK;dkrD zqh_QVs(w0ZK;x~`aRB-G7>k>bJ;d*S5(6oC33a^Ap&E*)bC)0*wT5Zf68l?oQT3-_ z9L}^Z#%|;Ts1Dzc`i|^E&Cns#={SRlI{&dt+>!P|ZKffpwJ*iCxE3{Kx1nZgyDi^| zspR*eI&uQXquzL?#3+q0JX+3%Q$*C30XGtFzSAn zHA1t({T_7046*}JBlY3{yb62cv*_SS45+~tE8VHhMSYv6-~`-(IryEu zpT5eSiJ_=9oP@1$9%_lIY`_86)I2QeRy;t=e=*8NYoYE(z>!^XG=wKtx_LD=L9cS&*s zHn9wKV;8EYCs7SFyV6~=&ZwoDj6Ly6EXId%1h!r0e#r9i67uU&BRz^*nxw1Tsqc=O zsSKMBN z^qWM_-`WV6Zz#C%isI&2;yDUO*oxVEWL<{oM z?Q@Tl*VTu-j-;+cViJ)>*?ZWX=s^@UqE&qob^Q;KNrgOOH0isD>BQB<+r;a{DDIud zZ;3Qw3i-*zO{8xix)Qnu5NVWmCv>&K7qJun`4Ml z(sdY(x<-?3xcb{f7=B0aOEL82Ou$q^R|NGt*k{^VTT$MF^jYjctRY5e{wpY)LoBcr zV{sEVbq%p);iUHx{~&xswk>x^ze=pM`IeYW{wbmn=`%POONm*euO}WRo+sWXuF&|G za#Po7;wNGnF_+LalzS5~gXnGRIXI8VQw6SWq#we*p`800P{|pTmlM~L9%t|UH~xu; zraXrTJs{SjGv3C*On+G29m#u7)jbg%p`sw|2ff= z^xdfIN}?0_6~q#q|NAJIM&`onM>2~jE5>2=#&GiQ+VoEJk^igB-;BM8D4Var4Mba; zkD+c7p{pber3$X8lsb&+K_5! zB|AIVCN(34+70ce_Dd=15!{uX795(>F?c>Z;&<=6_hRdZ=G-1JxvN^}>Ue9Nx>`@s zZ;S2sR~ zB72kP$$NQso!`qXcXsPnOo@pMJ~%U_xx2a5hoDmy7v<9?o2qSD<~JjQ<7$#SumBfs zsNN&l2A=ZrI$sI<@|Br0dWAaV4yWPGfAr#DQvUFi|I?cLoYzxBdro1Q-@Amg#}}NP zpVu=qGmACchSq;~FbpqvEI&2axU6mCP%<(2=lq`aFXiVokDTJEQ+I>0g?|Zmv~PD8 zj!LjcLmO9X(2xzDDy**0TNoK$UsAjwEPmg*a=#WT-`%wyUufF~zwySk3+>k5=Ari2 z7FsPn(7IvIs%h;mw(Q2Tq~O8D378U$DQo%rRdlPNN@V?wWluDj=Ps6GH}O($4Lg|a oQ>;Y_O^!CNj@42R3+%UhqhYe#P4Guc;j14}^FYhsN0-O{FD)l<`D9EDyeCHl&`%mx7-@Je4+&lN4?Vd^L z*)9H;Zuq&IBLkZZM~$B`U2$uuG3UvzcT%k}yW@=s#yuE?`>+rG2{Z5;Ou`=Bj7h;# zEW!p`K7aTzlSS7Ed#-}k1+a?+lgE80!bFc#rwe^!Q zg7R|gh>fU*+>2`XV|37V$@oy#$eoxYS>+<5!itm$zS(o{?&j(R0QICs2={^UU(MO z;>*Z7Gybd~-KaZ`#SGM9T#LGHH)f(2`HJ}*b^owrXT*A8Eaf~5#!1PHzj`o>3Vop- z)qscW1-mhi@^3K&&!T$Jf~+UsO4EZAQk?oUYd)%>W31CqQ?>}zfHl|!o7^^e1{qy* z6g8Az+xqZSV|bQH!Za+$LTp6!>NcYqunh;Hdk=|L z`Ds)O{dtPM7=`L-Uu=a1*cuCQJeJ@D+=0dT70$){zRpxUgnC_fp&I%;Y6Sm+y8rvg z_uS?i5^XF)(v8ucGYQqBCANGg(l+x5YSFxbTAZg)4Q|197?@$qV2nbI*hJKW*P-^6 zdr@=#I_i5TupQ4gpOJ)9amiONv}8_-IOz)iN?gj!R( zt%p%>*L$drU9t6@`Y~cW-}EIZ!|kY5-i(oW19jsFn$PH(?wEt)P_Ng|Q1Aa^sF8aW z^}S})gDxVkxM`Q|j6@E)D3_rY?{aiAdgdMyec>fkk3T{+K9%>hU0?vt~SY!cCZg529B6aSX$gsJG`7ssTOn7=O)WA71i~H~{Ii8HalCCR9(G zP!D<-nH94S`OkdDhlVn4fHNgSQ0Hf%MsPc7ik`NfM2)}|qzxw5JHGL=EM8 zs2j8`aJJ?SsMX&YHDx_e=TlJoLZ&U}qaIj@YFIgH_0L6(bR%}fZOBx)%~K>%RJ>$; z2lb%y*cC5hXN+RpbmKHs&j+D;QiSS28OCA-s$uJJ6mCM@=Q!&6v(}3ksQ3SS5n-iZybm@8`kv!5HeNB72>wMGgI< z*wsyPltefD0yRXPhZ!>&dm__r)*?R#<~h{)Q`Uc=M&uf50}EwoYh+?jYbFuZuxw1g ziKw?@HEJZbp<6d-BGH!lBv#;`aSUb-=VDxon#&f{hGIrI;M z$JV2rw`LZmQ@$I=;bGJiMlhUO)WsNrQ!xUaz1OEui|)ETKVYKW0Z}7Xj#^XG@D|*LZShO& zruY9UiC&ACNzQwkhw9l(R8Mb3_9n9pm*6o}L;ABx1mRHB4mS$*zAvzDL>J}9P;2W5 zw!>qn5&8h#Q6%R`^u-@hBM?8uS@p@-fpR{oejFy@4Acm0#5wpNX5&@Vb?K}uy^aHM z2)eNs9zs3u3+#l~rZWEeLgX~(MlD<37o)y+$8^SD$u26?!Z$D-FJT(?nBmly;{eKQP#cIB87%WHYD9`> zI@i~uzW*4i{sboDH7vrOvz)0|im{aI-6X6Vb2sWW{1i3h!Lyw?jYTb%Jk*9U617;z z;#{1D{AXU^qY|T;j|Nx!|cwUCE#=pIVKGtC_Af(J1M-^T9vwJk@^ zb>81J>_~kTYKYgPuD=J>@V&?jV-90JMpigIEkljmV$`DDi@b(z<0Vm#Ubdb<&Hcxy z7Jh~5LD)QJQ6`|?-)vhRY0Fbl*Hzj2b*Q=Cj_TM>)cp=yn=w}J|8)|k(R7~APbAi1 zH+&U!!_%mqUdJqKx4`MyaP$o!_N9IYy6`ya!CzuL1~M-xn20Kup?1V&=zIU0NVI77 zqYFRB?ijStX-E=kXh)+OG|RdYwGV8@M{ql`ZcWA_=PlWSYIu`%H>OfPh{NzSx`RoQ ztDK+5Ow`_;gMl~<)srIBgJ+{gpw^amVl?H0*cnfv=KKO`1e2Jn27_}9+Pni4#p--!oOl3 z-oR|kUF!V$Em_L^7gKSB3N6BR%bc|khZ>m%)D0U^uhUbg#diSJ^JAzEd}_~Mu;;Ja za#)Si^ElM?y|E1rv5s|<H zN1~>z#9D#9D6d8}cn4}faPK715FJ77NEcAAOUMeRrwN!!IScjRTTt(R1BT&UsF8Ze z)<1zgDIY*J{nciuI@){vT>c-^SVa368;`tDN6} zEvWM^qekE@Y>yvdBwoZ&3|#G$BQSw-BI@lZLN#Oqw&wZfVUiBG8wcQvxCOt%YP{oC zV}6O}Q4eTra8|JgJ5qiP_5EfH#}?F-_^ojkTWi!t6@}fgA8Mo~p*1)Du1EEB2d1GHbMO?VVDvivM8`rLihD2%&tW;nuXpx~m8hwC2K6=_ zT+jGxs9v!ZZ=e?AyQmRpM$PqU^ur`RUdEdTFU!9Urro!#PR44kdl92h-@k_#KEG-Au@)1`SBC3e@h=H7&iJfsU5lzHW z*6|QAoN@vN-~;#}ar4+|lM6R1u-CukN`3vm!&c^V6CJ;I@cmV!G}hM7$0L-#wdcoD z{+Z3^k(ZHI5d5KJmfHF&*1@=%c-EGGhpG1YrkpP?A%+lNaAGcT3%NFzt%Qy-lt00H zi8qMZlzU=NtjF((9^@l&G4T#Dm-2Shan`~2IfBnT&fR>zd7JccqL|Qz@^@l97o5ig zybC>qjxgc{U&cQ?;BlLaTWp@rcM{3jHq8A*I`J@Z^XN{}mTPXVKVSV}K6emhI>FJG z2qnH!fun_(!?~jvLQJsN^(Nm)OrhKczavV>6YcqM97o-cL<6ygm`Pm$x5>G+Hm1Kym|Do$q?*oA5drOw3WX?93Ya3S;Q`48KGl=gYO?UyO4MBqyLk* zNd$!y)M{KrtRr&l&EF#b_hYXu^yd6uY`)*xow}3cXNc3p{}QRxW!ZaC^!<*ME8&RI z6YnJX$XER7<6Y7>ZLuF;?nIOl;ne+{2qSNeTkJK37(`tTmJmaUG-53=gZeb$C2}33 z$#wjKD0WjwwiQ>YXh%L=XF2{#%poQb@zm#G7BQ8$LBvqk4s|RfpN@YdJ|=WDJD5xO zwatsTPR9rwMrg#%Z}q`3h>BK35xEQfeYOAj5lQ_iTNPmKK;7Loe+n-X4-%Vg-2l$_ zBH}4ONu0Cw!Om8}pIlUga6vUr#%w~zNL)%(5#xyer)~wYm|Vy0#G}5<`QvmE^^ugH zBVH$-Cj9+8&D~PG-CXDWy;~F4wTdjMo?ls0SLqryzrK2PMSb=18qbZSBF~e_V>}&G zGCcEB(mX$=xcsZ@ysp&i!Jfpd&7S>P!#vU1bG#d~_XGrwSiY>Hx@Mp^A@90>hZXvM zof%iVpt9EGobim$_e8H*zN*%>)IO==rzhP}5a(G@&_2}lpLKz*nu=xK#)A7>dFu*y zwecjDW(8#R&Gbw!Eeh^8DYO5;%pC8|(hNWEg|gBB@5%D;V9y_?5BJo~nBZxdQQ(<4 zv)Gd~tD9e)w`f*r8_$CacX>(|6?k?ps`e&UeH##BTQ<(|FuB`FAwY-Bb zt}NdlJ*KL*(p6G@TV>5{X~UK\n" "Language-Team: German (Switzerland) \n" "Language: de_CH\n" @@ -15,10 +15,443 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: src/Admin/SettingsController.php:54 +msgid "Licensed Products" +msgstr "Lizensierte Produkte" + +#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:128 +msgid "Plugin License" +msgstr "Plugin-Lizenz" + +#: src/Admin/SettingsController.php:65 +msgid "Default Settings" +msgstr "Standardeinstellungen" + +#: src/Admin/SettingsController.php:66 +msgid "Notifications" +msgstr "Benachrichtigungen" + +#: src/Admin/SettingsController.php:130 +msgid "" +"Configure the license for this plugin. A valid license is required for " +"frontend features to work." +msgstr "" +"Konfigurieren Sie die Lizenz für dieses Plugin. Eine gültige Lizenz ist " +"erforderlich, damit die Frontend-Funktionen funktionieren." + +#: src/Admin/SettingsController.php:134 +msgid "License Server URL" +msgstr "Lizenzserver-URL" + +#: src/Admin/SettingsController.php:136 +msgid "The URL of the license server (e.g., https://shop.example.com)." +msgstr "Die URL des Lizenzservers (z.B. https://shop.example.com)." + +#: src/Admin/SettingsController.php:142 src/Admin/AdminController.php:1291 +#: src/Admin/AdminController.php:1442 src/Admin/AdminController.php:1491 +#: src/Admin/OrderLicenseController.php:203 +#: src/Email/LicenseEmailController.php:287 +msgid "License Key" +msgstr "Lizenzschlüssel" + +#: src/Admin/SettingsController.php:144 +msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." +msgstr "Ihr Lizenzschlüssel im Format XXXX-XXXX-XXXX-XXXX." + +#: src/Admin/SettingsController.php:150 +msgid "Server Secret (Optional)" +msgstr "Server-Secret (Optional)" + +#: src/Admin/SettingsController.php:152 +msgid "" +"If the license server uses signed responses, enter the shared secret here " +"for enhanced security." +msgstr "" +"Falls der Lizenzserver signierte Antworten verwendet, geben Sie hier das " +"gemeinsame Secret für erhöhte Sicherheit ein." + +#: src/Admin/SettingsController.php:170 +msgid "Default License Settings" +msgstr "Standard Lizenz-Einstellungen" + +#: src/Admin/SettingsController.php:172 +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:176 +msgid "Default Max Activations" +msgstr "Standard Max. Aktivierungen" + +#: src/Admin/SettingsController.php:178 +msgid "Default maximum number of domain activations per license." +msgstr "Standard maximale Anzahl der Domain-Aktivierungen pro Lizenz." + +#: src/Admin/SettingsController.php:187 +msgid "Default License Validity (Days)" +msgstr "Standard Lizenz-Gültigkeit (Tage)" + +#: src/Admin/SettingsController.php:189 +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:192 src/Admin/AdminController.php:151 +#: src/Admin/AdminController.php:266 src/Admin/AdminController.php:1373 +#: src/Admin/AdminController.php:1613 +#: src/Admin/DashboardWidgetController.php:136 +#: src/Admin/OrderLicenseController.php:260 +#: src/Product/LicensedProductType.php:110 +#: src/Product/LicensedProductType.php:158 +#: src/Frontend/AccountController.php:283 +msgid "Lifetime" +msgstr "Lebenslang" + +#: src/Admin/SettingsController.php:199 +msgid "Default Bind to Major Version" +msgstr "Standard An Hauptversion binden" + +#: src/Admin/SettingsController.php:201 +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:206 +msgid "Enable Multi-Domain Licensing" +msgstr "Multi-Domain-Lizenzierung aktivieren" + +#: src/Admin/SettingsController.php:208 +msgid "" +"Allow customers to purchase multiple licenses for different domains at once. " +"Each unit in cart quantity requires a unique domain." +msgstr "" +"Ermöglicht Kunden, mehrere Lizenzen für verschiedene Domains auf einmal zu " +"kaufen. Jede Einheit in der Warenkorbmenge erfordert eine eindeutige Domain." + +#: src/Admin/SettingsController.php:226 +msgid "Expiration Warning Schedule" +msgstr "Ablaufwarnung Zeitplan" + +#: src/Admin/SettingsController.php:230 +#, 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:232 +msgid "WooCommerce > Settings > Emails > License Expiration Warning" +msgstr "WooCommerce > Einstellungen > E-Mails > Lizenzablauf-Warnung" + +#: src/Admin/SettingsController.php:237 +msgid "First Warning (Days Before)" +msgstr "Erste Warnung (Tage vorher)" + +#: src/Admin/SettingsController.php:239 +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:248 +msgid "Second Warning (Days Before)" +msgstr "Zweite Warnung (Tage vorher)" + +#: src/Admin/SettingsController.php:250 +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/SettingsController.php:290 +msgid "Running on localhost - license validation bypassed." +msgstr "Läuft auf localhost - Lizenzvalidierung übersprungen." + +#: src/Admin/SettingsController.php:298 +msgid "License is valid and active." +msgstr "Lizenz ist gültig und aktiv." + +#: src/Admin/SettingsController.php:304 +msgid "License is not valid. Frontend features are disabled." +msgstr "Lizenz ist ungültig. Frontend-Funktionen sind deaktiviert." + +#: src/Admin/SettingsController.php:315 src/Admin/SettingsController.php:351 +msgid "Verify License" +msgstr "Lizenz überprüfen" + +#: src/Admin/SettingsController.php:329 +msgid "Verifying..." +msgstr "Überprüfe..." + +#: src/Admin/SettingsController.php:348 +msgid "Request failed." +msgstr "Anfrage fehlgeschlagen." + +#: src/Admin/SettingsController.php:469 src/Admin/AdminController.php:455 +#: src/Admin/AdminController.php:475 src/Admin/AdminController.php:493 +#: src/Admin/AdminController.php:511 src/Admin/AdminController.php:531 +#: src/Admin/AdminController.php:549 src/Admin/AdminController.php:577 +#: src/Admin/AdminController.php:621 src/Admin/AdminController.php:811 +#: src/Frontend/AccountController.php:439 +msgid "Security check failed." +msgstr "Sicherheitsüberprüfung fehlgeschlagen." + +#: src/Admin/SettingsController.php:473 +msgid "Insufficient permissions." +msgstr "Unzureichende Berechtigungen." + +#: src/Admin/SettingsController.php:482 +msgid "License verified successfully!" +msgstr "Lizenz erfolgreich überprüft!" + +#: src/Admin/SettingsController.php:484 +msgid "License validation failed." +msgstr "Lizenzvalidierung fehlgeschlagen." + +#: src/Admin/VersionAdminController.php:58 +msgid "Product Versions" +msgstr "Produktversionen" + +#: src/Admin/VersionAdminController.php:78 +msgid "Add New Version" +msgstr "Neue Version hinzufügen" + +#: src/Admin/VersionAdminController.php:81 +#: src/Admin/VersionAdminController.php:136 src/Admin/AdminController.php:1609 +msgid "Version" +msgstr "Version" + +#: src/Admin/VersionAdminController.php:84 +msgid "Use semantic versioning (e.g., 1.0.0)" +msgstr "Verwenden Sie semantische Versionierung (z.B. 1.0.0)" + +#: src/Admin/VersionAdminController.php:88 +#: src/Admin/VersionAdminController.php:137 +msgid "Download File" +msgstr "Download-Datei" + +#: src/Admin/VersionAdminController.php:93 +msgid "Select File" +msgstr "Datei auswählen" + +#: src/Admin/VersionAdminController.php:96 +#: src/Admin/VersionAdminController.php:110 +msgid "Remove" +msgstr "Entfernen" + +#: src/Admin/VersionAdminController.php:98 +msgid "" +"Upload or select a file from the media library. Version will be auto-" +"detected from filename (e.g., plugin-v1.2.3.zip)." +msgstr "" +"Laden Sie eine Datei hoch oder wählen Sie eine aus der Mediathek. Die " +"Version wird automatisch aus dem Dateinamen erkannt (z.B. plugin-v1.2.3.zip)." + +#: src/Admin/VersionAdminController.php:102 +msgid "Checksum File" +msgstr "Prüfsummendatei" + +#: src/Admin/VersionAdminController.php:107 +msgid "Select Checksum File" +msgstr "Prüfsummendatei auswählen" + +#: src/Admin/VersionAdminController.php:112 +msgid "" +"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." +msgstr "" +"Laden Sie eine SHA256-Prüfsummendatei (.sha256 oder .txt) hoch, um die " +"Dateiintegrität zu überprüfen." + +#: src/Admin/VersionAdminController.php:116 +#: src/Admin/VersionAdminController.php:139 +msgid "Release Notes" +msgstr "Versionshinweise" + +#: src/Admin/VersionAdminController.php:124 +msgid "Add Version" +msgstr "Version hinzufügen" + +#: src/Admin/VersionAdminController.php:132 +msgid "Existing Versions" +msgstr "Vorhandene Versionen" + +#: src/Admin/VersionAdminController.php:138 +msgid "SHA256" +msgstr "SHA256" + +#: src/Admin/VersionAdminController.php:140 src/Admin/AdminController.php:1295 +#: src/Admin/AdminController.php:1446 src/Admin/OrderLicenseController.php:206 +msgid "Status" +msgstr "Status" + +#: src/Admin/VersionAdminController.php:141 +msgid "Released" +msgstr "Veröffentlicht" + +#: src/Admin/VersionAdminController.php:142 src/Admin/AdminController.php:1298 +#: src/Admin/AdminController.php:1449 src/Admin/OrderLicenseController.php:208 +msgid "Actions" +msgstr "Aktionen" + +#: src/Admin/VersionAdminController.php:148 +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:165 +#: src/Admin/VersionAdminController.php:396 +msgid "Uploaded file" +msgstr "Hochgeladene Datei" + +#: src/Admin/VersionAdminController.php:169 +#: src/Admin/VersionAdminController.php:400 +msgid "No download file" +msgstr "Keine Download-Datei" + +#: src/Admin/VersionAdminController.php:182 +#: src/Admin/VersionAdminController.php:413 src/Admin/AdminController.php:156 +#: src/Admin/AdminController.php:907 src/Admin/AdminController.php:1232 +#: src/Admin/AdminController.php:1355 +#: src/Admin/DashboardWidgetController.php:117 +msgid "Active" +msgstr "Aktiv" + +#: src/Admin/VersionAdminController.php:182 +#: src/Admin/VersionAdminController.php:413 src/Admin/AdminController.php:157 +#: src/Admin/AdminController.php:914 src/Admin/AdminController.php:1233 +#: src/Admin/AdminController.php:1356 +msgid "Inactive" +msgstr "Inaktiv" + +#: src/Admin/VersionAdminController.php:188 +#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1274 +#: src/Admin/AdminController.php:1459 +msgid "Deactivate" +msgstr "Deaktivieren" + +#: src/Admin/VersionAdminController.php:188 +#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1273 +#: src/Admin/AdminController.php:1458 +msgid "Activate" +msgstr "Aktivieren" + +#: src/Admin/VersionAdminController.php:191 +#: src/Admin/VersionAdminController.php:422 src/Admin/AdminController.php:1279 +#: src/Admin/AdminController.php:1428 src/Admin/AdminController.php:1464 +msgid "Delete" +msgstr "Löschen" + +#: src/Admin/VersionAdminController.php:232 +msgid "Are you sure you want to delete this version?" +msgstr "Sind Sie sicher, dass Sie diese Version löschen möchten?" + +#: src/Admin/VersionAdminController.php:233 +msgid "Please enter a version number." +msgstr "Bitte geben Sie eine Versionsnummer ein." + +#: src/Admin/VersionAdminController.php:234 +msgid "Please enter a valid version number (e.g., 1.0.0)." +msgstr "Bitte geben Sie eine gültige Versionsnummer ein (z.B. 1.0.0)." + +#: src/Admin/VersionAdminController.php:235 +msgid "An error occurred. Please try again." +msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut." + +#: src/Admin/VersionAdminController.php:236 +msgid "Select Download File" +msgstr "Download-Datei auswählen" + +#: src/Admin/VersionAdminController.php:237 +msgid "Use this file" +msgstr "Diese Datei verwenden" + +#: src/Admin/VersionAdminController.php:238 +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:239 +msgid "Failed to read checksum file." +msgstr "Prüfsummendatei konnte nicht gelesen werden." + +#: src/Admin/VersionAdminController.php:259 +#: src/Admin/VersionAdminController.php:328 +#: src/Admin/VersionAdminController.php:354 src/Admin/AdminController.php:173 +#: src/Admin/AdminController.php:213 src/Admin/AdminController.php:249 +#: src/Admin/AdminController.php:301 src/Admin/AdminController.php:339 +#: src/Admin/AdminController.php:369 src/Admin/OrderLicenseController.php:387 +#: src/Admin/OrderLicenseController.php:426 +#: src/Admin/OrderLicenseController.php:490 +msgid "Permission denied." +msgstr "Zugriff verweigert." + +#: src/Admin/VersionAdminController.php:269 +msgid "Product ID and version are required." +msgstr "Produkt-ID und Version sind erforderlich." + +#: src/Admin/VersionAdminController.php:274 +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:279 +msgid "This version already exists." +msgstr "Diese Version existiert bereits." + +#: src/Admin/VersionAdminController.php:285 +msgid "Product not found." +msgstr "Produkt nicht gefunden." + +#: src/Admin/VersionAdminController.php:289 +msgid "This product is not a licensed product." +msgstr "Dieses Produkt ist kein lizensiertes Produkt." + +#: src/Admin/VersionAdminController.php:306 +msgid "Failed to create version." +msgstr "Version konnte nicht erstellt werden." + +#: src/Admin/VersionAdminController.php:314 +msgid "Version added successfully." +msgstr "Version erfolgreich hinzugefügt." + +#: src/Admin/VersionAdminController.php:334 +#: src/Admin/VersionAdminController.php:361 +msgid "Version ID is required." +msgstr "Versions-ID ist erforderlich." + +#: src/Admin/VersionAdminController.php:340 +msgid "Failed to delete version." +msgstr "Version konnte nicht gelöscht werden." + +#: src/Admin/VersionAdminController.php:343 +msgid "Version deleted successfully." +msgstr "Version erfolgreich gelöscht." + +#: src/Admin/VersionAdminController.php:367 +msgid "Failed to update version." +msgstr "Version konnte nicht aktualisiert werden." + +#: src/Admin/VersionAdminController.php:371 +msgid "Version updated successfully." +msgstr "Version erfolgreich aktualisiert." + #: src/Admin/AdminController.php:76 src/Admin/AdminController.php:77 #: src/Admin/AdminController.php:90 src/Admin/AdminController.php:1200 -#: src/Admin/OrderLicenseController.php:128 -#: src/Admin/OrderLicenseController.php:249 +#: src/Admin/OrderLicenseController.php:149 +#: src/Admin/OrderLicenseController.php:281 #: src/Frontend/AccountController.php:90 msgid "Licenses" msgstr "Lizenzen" @@ -39,7 +472,7 @@ msgstr "Suche..." msgid "Search failed" msgstr "Suche fehlgeschlagen" -#: src/Admin/AdminController.php:144 src/Admin/OrderLicenseController.php:338 +#: src/Admin/AdminController.php:144 src/Admin/OrderLicenseController.php:370 msgid "Saving..." msgstr "Speichere..." @@ -65,50 +498,26 @@ msgstr "Bearbeiten" #: src/Admin/AdminController.php:149 src/Admin/AdminController.php:1341 #: src/Admin/AdminController.php:1361 src/Admin/AdminController.php:1382 -#: src/Admin/AdminController.php:1537 src/Admin/OrderLicenseController.php:212 -#: src/Frontend/AccountController.php:271 +#: src/Admin/AdminController.php:1537 src/Admin/OrderLicenseController.php:244 +#: src/Frontend/AccountController.php:384 msgid "Cancel" msgstr "Abbrechen" #: src/Admin/AdminController.php:150 src/Admin/AdminController.php:1340 #: src/Admin/AdminController.php:1360 src/Admin/AdminController.php:1381 -#: src/Admin/OrderLicenseController.php:119 -#: src/Admin/OrderLicenseController.php:209 +#: src/Admin/OrderLicenseController.php:139 +#: src/Admin/OrderLicenseController.php:241 msgid "Save" msgstr "Speichern" -#: src/Admin/AdminController.php:151 src/Admin/AdminController.php:266 -#: src/Admin/AdminController.php:1373 src/Admin/AdminController.php:1613 -#: src/Admin/DashboardWidgetController.php:136 -#: src/Admin/OrderLicenseController.php:228 -#: src/Admin/SettingsController.php:192 src/Product/LicensedProductType.php:110 -#: src/Product/LicensedProductType.php:158 -msgid "Lifetime" -msgstr "Lebenslang" - -#: src/Admin/AdminController.php:152 src/Frontend/AccountController.php:309 +#: src/Admin/AdminController.php:152 src/Frontend/AccountController.php:422 msgid "Copied!" msgstr "Kopiert!" -#: src/Admin/AdminController.php:153 src/Frontend/AccountController.php:310 +#: src/Admin/AdminController.php:153 src/Frontend/AccountController.php:423 msgid "Copy failed" msgstr "Kopieren fehlgeschlagen" -#: src/Admin/AdminController.php:156 src/Admin/AdminController.php:907 -#: src/Admin/AdminController.php:1232 src/Admin/AdminController.php:1355 -#: src/Admin/DashboardWidgetController.php:117 -#: src/Admin/VersionAdminController.php:182 -#: src/Admin/VersionAdminController.php:413 -msgid "Active" -msgstr "Aktiv" - -#: src/Admin/AdminController.php:157 src/Admin/AdminController.php:914 -#: src/Admin/AdminController.php:1233 src/Admin/AdminController.php:1356 -#: src/Admin/VersionAdminController.php:182 -#: src/Admin/VersionAdminController.php:413 -msgid "Inactive" -msgstr "Inaktiv" - #: src/Admin/AdminController.php:158 src/Admin/AdminController.php:921 #: src/Admin/AdminController.php:1234 src/Admin/AdminController.php:1357 #: src/Admin/DashboardWidgetController.php:125 @@ -121,20 +530,8 @@ msgstr "Abgelaufen" msgid "Revoked" msgstr "Widerrufen" -#: src/Admin/AdminController.php:173 src/Admin/AdminController.php:213 -#: src/Admin/AdminController.php:249 src/Admin/AdminController.php:301 -#: src/Admin/AdminController.php:339 src/Admin/AdminController.php:369 -#: src/Admin/OrderLicenseController.php:355 -#: src/Admin/OrderLicenseController.php:394 -#: src/Admin/OrderLicenseController.php:458 -#: src/Admin/VersionAdminController.php:259 -#: src/Admin/VersionAdminController.php:328 -#: src/Admin/VersionAdminController.php:354 -msgid "Permission denied." -msgstr "Zugriff verweigert." - #: src/Admin/AdminController.php:195 src/Admin/AdminController.php:1019 -#: src/Admin/OrderLicenseController.php:195 +#: src/Admin/OrderLicenseController.php:227 msgid "Unknown" msgstr "Unbekannt" @@ -144,7 +541,7 @@ msgstr "Gast" #: src/Admin/AdminController.php:220 src/Admin/AdminController.php:256 #: src/Admin/AdminController.php:308 src/Admin/AdminController.php:345 -#: src/Admin/OrderLicenseController.php:401 +#: src/Admin/OrderLicenseController.php:433 msgid "Invalid license ID." msgstr "Ungültige Lizenz-ID." @@ -176,7 +573,7 @@ msgstr "Ablaufdatum erfolgreich aktualisiert." msgid "Invalid date format." msgstr "Ungültiges Datumsformat." -#: src/Admin/AdminController.php:312 src/Admin/OrderLicenseController.php:405 +#: src/Admin/AdminController.php:312 src/Admin/OrderLicenseController.php:437 msgid "Domain cannot be empty." msgstr "Domain darf nicht leer sein." @@ -200,15 +597,6 @@ msgstr "Lizenz konnte nicht widerrufen werden." msgid "License key and domain are required." msgstr "Lizenzschlüssel und Domain sind erforderlich." -#: src/Admin/AdminController.php:455 src/Admin/AdminController.php:475 -#: src/Admin/AdminController.php:493 src/Admin/AdminController.php:511 -#: src/Admin/AdminController.php:531 src/Admin/AdminController.php:549 -#: src/Admin/AdminController.php:577 src/Admin/AdminController.php:621 -#: src/Admin/AdminController.php:811 src/Admin/SettingsController.php:454 -#: src/Frontend/AccountController.php:326 -msgid "Security check failed." -msgstr "Sicherheitsüberprüfung fehlgeschlagen." - #: src/Admin/AdminController.php:581 msgid "You do not have permission to export licenses." msgstr "Sie haben keine Berechtigung, Lizenzen zu exportieren." @@ -411,9 +799,11 @@ msgstr "Einträge" msgid "Showing" msgstr "Anzeige" -#: src/Admin/AdminController.php:1259 +#: src/Admin/AdminController.php:1259 src/Email/LicenseEmailController.php:338 msgid "license" -msgstr "Lizenz" +msgid_plural "licenses" +msgstr[0] "Lizenz" +msgstr[1] "Lizenzen" #: src/Admin/AdminController.php:1259 msgid "licenses" @@ -431,18 +821,6 @@ msgstr "Dashboard anzeigen" msgid "Bulk Actions" msgstr "Massenaktionen" -#: src/Admin/AdminController.php:1273 src/Admin/AdminController.php:1458 -#: src/Admin/VersionAdminController.php:188 -#: src/Admin/VersionAdminController.php:419 -msgid "Activate" -msgstr "Aktivieren" - -#: src/Admin/AdminController.php:1274 src/Admin/AdminController.php:1459 -#: src/Admin/VersionAdminController.php:188 -#: src/Admin/VersionAdminController.php:419 -msgid "Deactivate" -msgstr "Deaktivieren" - #: src/Admin/AdminController.php:1275 src/Admin/AdminController.php:1419 #: src/Admin/AdminController.php:1460 msgid "Revoke" @@ -460,26 +838,12 @@ msgstr "90 Tage verlängern" msgid "Extend 1 year" msgstr "1 Jahr verlängern" -#: src/Admin/AdminController.php:1279 src/Admin/AdminController.php:1428 -#: src/Admin/AdminController.php:1464 src/Admin/VersionAdminController.php:191 -#: src/Admin/VersionAdminController.php:422 -msgid "Delete" -msgstr "Löschen" - #: src/Admin/AdminController.php:1281 src/Admin/AdminController.php:1466 msgid "Apply" msgstr "Anwenden" -#: src/Admin/AdminController.php:1291 src/Admin/AdminController.php:1442 -#: src/Admin/AdminController.php:1491 src/Admin/OrderLicenseController.php:171 -#: src/Admin/SettingsController.php:142 -#: src/Email/LicenseEmailController.php:269 -msgid "License Key" -msgstr "Lizenzschlüssel" - #: src/Admin/AdminController.php:1292 src/Admin/AdminController.php:1443 -#: src/Admin/AdminController.php:1608 src/Admin/OrderLicenseController.php:172 -#: src/Email/LicenseEmailController.php:268 +#: src/Admin/AdminController.php:1608 src/Admin/OrderLicenseController.php:204 msgid "Product" msgstr "Produkt" @@ -490,38 +854,29 @@ msgid "Customer" msgstr "Kunde" #: src/Admin/AdminController.php:1294 src/Admin/AdminController.php:1445 -#: src/Admin/AdminController.php:1495 src/Admin/OrderLicenseController.php:173 +#: src/Admin/AdminController.php:1495 src/Admin/OrderLicenseController.php:205 +#: src/Checkout/CheckoutController.php:122 +#: src/Checkout/CheckoutBlocksIntegration.php:129 +#: src/Email/LicenseEmailController.php:288 msgid "Domain" msgstr "Domain" -#: src/Admin/AdminController.php:1295 src/Admin/AdminController.php:1446 -#: src/Admin/OrderLicenseController.php:174 -#: src/Admin/VersionAdminController.php:140 -msgid "Status" -msgstr "Status" - #: src/Admin/AdminController.php:1296 src/Admin/AdminController.php:1447 msgid "Created" msgstr "Erstellt" #: src/Admin/AdminController.php:1297 src/Admin/AdminController.php:1448 #: src/Admin/AdminController.php:1611 src/Admin/AdminController.php:1613 -#: src/Admin/OrderLicenseController.php:175 -#: src/Email/LicenseEmailController.php:270 +#: src/Admin/OrderLicenseController.php:207 +#: src/Email/LicenseEmailController.php:289 msgid "Expires" msgstr "Läuft ab" -#: src/Admin/AdminController.php:1298 src/Admin/AdminController.php:1449 -#: src/Admin/OrderLicenseController.php:176 -#: src/Admin/VersionAdminController.php:142 -msgid "Actions" -msgstr "Aktionen" - #: src/Admin/AdminController.php:1304 msgid "No licenses found." msgstr "Keine Lizenzen gefunden." -#: src/Admin/AdminController.php:1314 src/Frontend/AccountController.php:194 +#: src/Admin/AdminController.php:1314 src/Frontend/AccountController.php:260 msgid "Copy to clipboard" msgstr "In Zwischenablage kopieren" @@ -541,11 +896,11 @@ msgstr "Lizenz gegen API testen" msgid "Test" msgstr "Testen" -#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:207 +#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:267 msgid "Transfer to new domain" msgstr "Auf neue Domain übertragen" -#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:209 +#: src/Admin/AdminController.php:1400 msgid "Transfer" msgstr "Übertragen" @@ -569,27 +924,27 @@ msgstr "Lizenzvalidierungstest" msgid "Testing license..." msgstr "Lizenz wird geprüft..." -#: src/Admin/AdminController.php:1508 src/Frontend/AccountController.php:249 +#: src/Admin/AdminController.php:1508 src/Frontend/AccountController.php:362 msgid "Close" msgstr "Schliessen" -#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:250 +#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:363 msgid "Transfer License to New Domain" msgstr "Lizenz auf neue Domain übertragen" -#: src/Admin/AdminController.php:1524 src/Frontend/AccountController.php:255 +#: src/Admin/AdminController.php:1524 src/Frontend/AccountController.php:368 msgid "Current Domain" msgstr "Aktuelle Domain" -#: src/Admin/AdminController.php:1528 src/Frontend/AccountController.php:260 +#: src/Admin/AdminController.php:1528 src/Frontend/AccountController.php:373 msgid "New Domain" msgstr "Neue Domain" -#: src/Admin/AdminController.php:1531 src/Frontend/AccountController.php:264 +#: src/Admin/AdminController.php:1531 src/Frontend/AccountController.php:377 msgid "Enter the new domain without http:// or www." msgstr "Geben Sie die neue Domain ohne http:// oder www ein." -#: src/Admin/AdminController.php:1536 src/Frontend/AccountController.php:269 +#: src/Admin/AdminController.php:1536 src/Frontend/AccountController.php:382 msgid "Transfer License" msgstr "Lizenz übertragen" @@ -597,11 +952,6 @@ msgstr "Lizenz übertragen" msgid "License is VALID" msgstr "Lizenz ist GÜLTIG" -#: src/Admin/AdminController.php:1609 src/Admin/VersionAdminController.php:81 -#: src/Admin/VersionAdminController.php:136 -msgid "Version" -msgstr "Version" - #: src/Admin/AdminController.php:1617 msgid "License is INVALID" msgstr "Lizenz ist UNGÜLTIG" @@ -764,8 +1114,8 @@ msgid "Product Licenses" msgstr "Produktlizenzen" #: src/Admin/OrderLicenseController.php:78 -#: src/Admin/OrderLicenseController.php:367 -#: src/Admin/OrderLicenseController.php:469 +#: src/Admin/OrderLicenseController.php:399 +#: src/Admin/OrderLicenseController.php:501 msgid "Order not found." msgstr "Bestellung nicht gefunden." @@ -773,11 +1123,26 @@ msgstr "Bestellung nicht gefunden." msgid "This order does not contain licensed products." msgstr "Diese Bestellung enthält keine lizensierten Produkte." -#: src/Admin/OrderLicenseController.php:107 -msgid "Order Domain" -msgstr "Bestellungs-Domain" - #: src/Admin/OrderLicenseController.php:109 +msgid "Order Domains" +msgstr "Bestellungs-Domains" + +#: src/Admin/OrderLicenseController.php:113 +msgid "Domains specified during checkout (multi-domain order)." +msgstr "Bei der Bestellung angegebene Domains (Multi-Domain-Bestellung)." + +#: src/Admin/OrderLicenseController.php:119 +#: src/Checkout/CheckoutController.php:436 +#: src/Checkout/CheckoutController.php:486 +#: src/Checkout/CheckoutController.php:496 src/License/LicenseManager.php:806 +#: src/Product/VersionManager.php:349 src/Product/VersionManager.php:361 +#: src/Frontend/AccountController.php:146 +#: src/Email/LicenseExpirationEmail.php:107 +#: src/Email/LicenseExpiredEmail.php:99 +msgid "Unknown Product" +msgstr "Unbekanntes Produkt" + +#: src/Admin/OrderLicenseController.php:129 msgid "" "The domain specified during checkout. Changing this will not automatically " "update existing license domains." @@ -785,17 +1150,19 @@ msgstr "" "Die bei der Bestellung angegebene Domain. Eine Änderung aktualisiert nicht " "automatisch bestehende Lizenz-Domains." -#: src/Admin/OrderLicenseController.php:117 -#: src/Checkout/CheckoutBlocksIntegration.php:102 -#: src/Checkout/CheckoutController.php:89 +#: src/Admin/OrderLicenseController.php:137 +#: src/Checkout/CheckoutController.php:130 +#: src/Checkout/CheckoutController.php:186 +#: src/Checkout/CheckoutBlocksIntegration.php:83 +#: src/Checkout/CheckoutBlocksIntegration.php:119 msgid "example.com" msgstr "beispiel.ch" -#: src/Admin/OrderLicenseController.php:144 +#: src/Admin/OrderLicenseController.php:176 msgid "No licenses have been generated for this order yet." msgstr "Für diese Bestellung wurden noch keine Lizenzen generiert." -#: src/Admin/OrderLicenseController.php:147 +#: src/Admin/OrderLicenseController.php:179 msgid "" "Licenses should be generated automatically when an order is paid. If " "missing, check that a domain was specified during checkout." @@ -804,456 +1171,122 @@ msgstr "" "wird. Falls fehlend, prüfen Sie, ob bei der Bestellung eine Domain angegeben " "wurde." -#: src/Admin/OrderLicenseController.php:150 +#: src/Admin/OrderLicenseController.php:182 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:156 +#: src/Admin/OrderLicenseController.php:188 msgid "Generate Licenses" msgstr "Lizenzen generieren" -#: src/Admin/OrderLicenseController.php:164 +#: src/Admin/OrderLicenseController.php:196 msgid "Please set the order domain above before generating licenses." msgstr "" "Bitte legen Sie zuerst die Bestellungs-Domain oben fest, bevor Sie Lizenzen " "generieren." -#: src/Admin/OrderLicenseController.php:205 +#: src/Admin/OrderLicenseController.php:237 msgid "Edit domain" msgstr "Domain bearbeiten" -#: src/Admin/OrderLicenseController.php:235 +#: src/Admin/OrderLicenseController.php:267 msgid "View in Licenses" msgstr "In Lizenzen anzeigen" -#: src/Admin/OrderLicenseController.php:248 +#: src/Admin/OrderLicenseController.php:280 #, 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:261 +#: src/Admin/OrderLicenseController.php:293 #, php-format msgid "%d licensed product is missing a license." msgid_plural "%d licensed products are missing licenses." msgstr[0] "%d lizenziertes Produkt hat keine Lizenz." msgstr[1] "%d lizenzierte Produkte haben keine Lizenzen." -#: src/Admin/OrderLicenseController.php:270 +#: src/Admin/OrderLicenseController.php:302 msgid "Generate Missing Licenses" msgstr "Fehlende Lizenzen generieren" -#: src/Admin/OrderLicenseController.php:339 +#: src/Admin/OrderLicenseController.php:371 msgid "Saved!" msgstr "Gespeichert!" -#: src/Admin/OrderLicenseController.php:340 +#: src/Admin/OrderLicenseController.php:372 msgid "Error. Please try again." msgstr "Fehler. Bitte versuchen Sie es erneut." -#: src/Admin/OrderLicenseController.php:341 -#: src/Frontend/AccountController.php:314 -#: src/Frontend/AccountController.php:346 +#: src/Admin/OrderLicenseController.php:373 +#: src/Checkout/CheckoutBlocksIntegration.php:126 +#: src/Frontend/AccountController.php:427 +#: src/Frontend/AccountController.php:459 msgid "Please enter a valid domain." msgstr "Bitte geben Sie eine gültige Domain ein." -#: src/Admin/OrderLicenseController.php:342 +#: src/Admin/OrderLicenseController.php:374 msgid "Generating..." msgstr "Generiere..." -#: src/Admin/OrderLicenseController.php:362 -#: src/Admin/OrderLicenseController.php:464 +#: src/Admin/OrderLicenseController.php:394 +#: src/Admin/OrderLicenseController.php:496 msgid "Invalid order ID." msgstr "Ungültige Bestellungs-ID." -#: src/Admin/OrderLicenseController.php:373 -#: src/Admin/OrderLicenseController.php:411 +#: src/Admin/OrderLicenseController.php:405 +#: src/Admin/OrderLicenseController.php:443 msgid "Invalid domain format." msgstr "Ungültiges Domain-Format." -#: src/Admin/OrderLicenseController.php:381 +#: src/Admin/OrderLicenseController.php:413 msgid "Order domain updated." msgstr "Bestellungs-Domain aktualisiert." -#: src/Admin/OrderLicenseController.php:417 -#: src/Frontend/AccountController.php:352 +#: src/Admin/OrderLicenseController.php:449 +#: src/Frontend/AccountController.php:465 #: src/Frontend/DownloadController.php:117 msgid "License not found." msgstr "Lizenz nicht gefunden." -#: src/Admin/OrderLicenseController.php:425 +#: src/Admin/OrderLicenseController.php:457 msgid "License domain updated." msgstr "Lizenz-Domain aktualisiert." -#: src/Admin/OrderLicenseController.php:429 +#: src/Admin/OrderLicenseController.php:461 msgid "Failed to update license domain." msgstr "Lizenz-Domain konnte nicht aktualisiert werden." -#: src/Admin/OrderLicenseController.php:474 +#: src/Admin/OrderLicenseController.php:506 msgid "Order must be paid before licenses can be generated." msgstr "" "Die Bestellung muss bezahlt sein, bevor Lizenzen generiert werden können." -#: src/Admin/OrderLicenseController.php:480 +#: src/Admin/OrderLicenseController.php:520 msgid "Please set the order domain before generating licenses." msgstr "" "Bitte legen Sie die Bestellungs-Domain fest, bevor Sie Lizenzen generieren." -#: src/Admin/OrderLicenseController.php:521 +#: src/Admin/OrderLicenseController.php:529 #, php-format msgid "%d license generated successfully." msgid_plural "%d licenses generated successfully." msgstr[0] "%d Lizenz erfolgreich generiert." msgstr[1] "%d Lizenzen erfolgreich generiert." -#: src/Admin/OrderLicenseController.php:534 +#: src/Admin/OrderLicenseController.php:542 msgid "All licenses already exist for this order." msgstr "Alle Lizenzen für diese Bestellung existieren bereits." -#: src/Admin/SettingsController.php:54 -msgid "Licensed Products" -msgstr "Lizensierte Produkte" - -#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:128 -msgid "Plugin License" -msgstr "Plugin-Lizenz" - -#: src/Admin/SettingsController.php:65 -msgid "Default Settings" -msgstr "Standardeinstellungen" - -#: src/Admin/SettingsController.php:66 -msgid "Notifications" -msgstr "Benachrichtigungen" - -#: src/Admin/SettingsController.php:130 -msgid "" -"Configure the license for this plugin. A valid license is required for " -"frontend features to work." -msgstr "" -"Konfigurieren Sie die Lizenz für dieses Plugin. Eine gültige Lizenz ist " -"erforderlich, damit die Frontend-Funktionen funktionieren." - -#: src/Admin/SettingsController.php:134 -msgid "License Server URL" -msgstr "Lizenzserver-URL" - -#: src/Admin/SettingsController.php:136 -msgid "The URL of the license server (e.g., https://shop.example.com)." -msgstr "Die URL des Lizenzservers (z.B. https://shop.example.com)." - -#: src/Admin/SettingsController.php:144 -msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." -msgstr "Ihr Lizenzschlüssel im Format XXXX-XXXX-XXXX-XXXX." - -#: src/Admin/SettingsController.php:150 -msgid "Server Secret (Optional)" -msgstr "Server-Secret (Optional)" - -#: src/Admin/SettingsController.php:152 -msgid "" -"If the license server uses signed responses, enter the shared secret here " -"for enhanced security." -msgstr "" -"Falls der Lizenzserver signierte Antworten verwendet, geben Sie hier das " -"gemeinsame Secret für erhöhte Sicherheit ein." - -#: src/Admin/SettingsController.php:170 -msgid "Default License Settings" -msgstr "Standard Lizenz-Einstellungen" - -#: src/Admin/SettingsController.php:172 -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:176 -msgid "Default Max Activations" -msgstr "Standard Max. Aktivierungen" - -#: src/Admin/SettingsController.php:178 -msgid "Default maximum number of domain activations per license." -msgstr "Standard maximale Anzahl der Domain-Aktivierungen pro Lizenz." - -#: src/Admin/SettingsController.php:187 -msgid "Default License Validity (Days)" -msgstr "Standard Lizenz-Gültigkeit (Tage)" - -#: src/Admin/SettingsController.php:189 -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:199 -msgid "Default Bind to Major Version" -msgstr "Standard An Hauptversion binden" - -#: src/Admin/SettingsController.php:201 -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:219 -msgid "Expiration Warning Schedule" -msgstr "Ablaufwarnung Zeitplan" - -#: src/Admin/SettingsController.php:223 -#, 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:225 -msgid "WooCommerce > Settings > Emails > License Expiration Warning" -msgstr "WooCommerce > Einstellungen > E-Mails > Lizenzablauf-Warnung" - -#: src/Admin/SettingsController.php:230 -msgid "First Warning (Days Before)" -msgstr "Erste Warnung (Tage vorher)" - -#: src/Admin/SettingsController.php:232 -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:241 -msgid "Second Warning (Days Before)" -msgstr "Zweite Warnung (Tage vorher)" - -#: src/Admin/SettingsController.php:243 -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/SettingsController.php:283 -msgid "Running on localhost - license validation bypassed." -msgstr "Läuft auf localhost - Lizenzvalidierung übersprungen." - -#: src/Admin/SettingsController.php:291 -msgid "License is valid and active." -msgstr "Lizenz ist gültig und aktiv." - -#: src/Admin/SettingsController.php:297 -msgid "License is not valid. Frontend features are disabled." -msgstr "Lizenz ist ungültig. Frontend-Funktionen sind deaktiviert." - -#: src/Admin/SettingsController.php:308 src/Admin/SettingsController.php:344 -msgid "Verify License" -msgstr "Lizenz überprüfen" - -#: src/Admin/SettingsController.php:322 -msgid "Verifying..." -msgstr "Überprüfe..." - -#: src/Admin/SettingsController.php:341 -msgid "Request failed." -msgstr "Anfrage fehlgeschlagen." - -#: src/Admin/SettingsController.php:458 -msgid "Insufficient permissions." -msgstr "Unzureichende Berechtigungen." - -#: src/Admin/SettingsController.php:467 -msgid "License verified successfully!" -msgstr "Lizenz erfolgreich überprüft!" - -#: src/Admin/SettingsController.php:469 -msgid "License validation failed." -msgstr "Lizenzvalidierung fehlgeschlagen." - -#: src/Admin/VersionAdminController.php:58 -msgid "Product Versions" -msgstr "Produktversionen" - -#: src/Admin/VersionAdminController.php:78 -msgid "Add New Version" -msgstr "Neue Version hinzufügen" - -#: src/Admin/VersionAdminController.php:84 -msgid "Use semantic versioning (e.g., 1.0.0)" -msgstr "Verwenden Sie semantische Versionierung (z.B. 1.0.0)" - -#: src/Admin/VersionAdminController.php:88 -#: src/Admin/VersionAdminController.php:137 -msgid "Download File" -msgstr "Download-Datei" - -#: src/Admin/VersionAdminController.php:93 -msgid "Select File" -msgstr "Datei auswählen" - -#: src/Admin/VersionAdminController.php:96 -#: src/Admin/VersionAdminController.php:110 -msgid "Remove" -msgstr "Entfernen" - -#: src/Admin/VersionAdminController.php:98 -msgid "" -"Upload or select a file from the media library. Version will be auto-" -"detected from filename (e.g., plugin-v1.2.3.zip)." -msgstr "" -"Laden Sie eine Datei hoch oder wählen Sie eine aus der Mediathek. Die " -"Version wird automatisch aus dem Dateinamen erkannt (z.B. plugin-v1.2.3.zip)." - -#: src/Admin/VersionAdminController.php:102 -msgid "Checksum File" -msgstr "Prüfsummendatei" - -#: src/Admin/VersionAdminController.php:107 -msgid "Select Checksum File" -msgstr "Prüfsummendatei auswählen" - -#: src/Admin/VersionAdminController.php:112 -msgid "" -"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." -msgstr "" -"Laden Sie eine SHA256-Prüfsummendatei (.sha256 oder .txt) hoch, um die " -"Dateiintegrität zu überprüfen." - -#: src/Admin/VersionAdminController.php:116 -#: src/Admin/VersionAdminController.php:139 -msgid "Release Notes" -msgstr "Versionshinweise" - -#: src/Admin/VersionAdminController.php:124 -msgid "Add Version" -msgstr "Version hinzufügen" - -#: src/Admin/VersionAdminController.php:132 -msgid "Existing Versions" -msgstr "Vorhandene Versionen" - -#: src/Admin/VersionAdminController.php:138 -msgid "SHA256" -msgstr "SHA256" - -#: src/Admin/VersionAdminController.php:141 -msgid "Released" -msgstr "Veröffentlicht" - -#: src/Admin/VersionAdminController.php:148 -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:165 -#: src/Admin/VersionAdminController.php:396 -msgid "Uploaded file" -msgstr "Hochgeladene Datei" - -#: src/Admin/VersionAdminController.php:169 -#: src/Admin/VersionAdminController.php:400 -msgid "No download file" -msgstr "Keine Download-Datei" - -#: src/Admin/VersionAdminController.php:232 -msgid "Are you sure you want to delete this version?" -msgstr "Sind Sie sicher, dass Sie diese Version löschen möchten?" - -#: src/Admin/VersionAdminController.php:233 -msgid "Please enter a version number." -msgstr "Bitte geben Sie eine Versionsnummer ein." - -#: src/Admin/VersionAdminController.php:234 -msgid "Please enter a valid version number (e.g., 1.0.0)." -msgstr "Bitte geben Sie eine gültige Versionsnummer ein (z.B. 1.0.0)." - -#: src/Admin/VersionAdminController.php:235 -msgid "An error occurred. Please try again." -msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut." - -#: src/Admin/VersionAdminController.php:236 -msgid "Select Download File" -msgstr "Download-Datei auswählen" - -#: src/Admin/VersionAdminController.php:237 -msgid "Use this file" -msgstr "Diese Datei verwenden" - -#: src/Admin/VersionAdminController.php:238 -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:239 -msgid "Failed to read checksum file." -msgstr "Prüfsummendatei konnte nicht gelesen werden." - -#: src/Admin/VersionAdminController.php:269 -msgid "Product ID and version are required." -msgstr "Produkt-ID und Version sind erforderlich." - -#: src/Admin/VersionAdminController.php:274 -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:279 -msgid "This version already exists." -msgstr "Diese Version existiert bereits." - -#: src/Admin/VersionAdminController.php:285 -msgid "Product not found." -msgstr "Produkt nicht gefunden." - -#: src/Admin/VersionAdminController.php:289 -msgid "This product is not a licensed product." -msgstr "Dieses Produkt ist kein lizensiertes Produkt." - -#: src/Admin/VersionAdminController.php:306 -msgid "Failed to create version." -msgstr "Version konnte nicht erstellt werden." - -#: src/Admin/VersionAdminController.php:314 -msgid "Version added successfully." -msgstr "Version erfolgreich hinzugefügt." - -#: src/Admin/VersionAdminController.php:334 -#: src/Admin/VersionAdminController.php:361 -msgid "Version ID is required." -msgstr "Versions-ID ist erforderlich." - -#: src/Admin/VersionAdminController.php:340 -msgid "Failed to delete version." -msgstr "Version konnte nicht gelöscht werden." - -#: src/Admin/VersionAdminController.php:343 -msgid "Version deleted successfully." -msgstr "Version erfolgreich gelöscht." - -#: src/Admin/VersionAdminController.php:367 -msgid "Failed to update version." -msgstr "Version konnte nicht aktualisiert werden." - -#: src/Admin/VersionAdminController.php:371 -msgid "Version updated successfully." -msgstr "Version erfolgreich aktualisiert." - #: src/Api/RestApiController.php:84 msgid "Too many requests. Please try again later." msgstr "Zu viele Anfragen. Bitte versuchen Sie es später erneut." #: src/Api/RestApiController.php:345 src/Api/RestApiController.php:378 -#: src/License/LicenseManager.php:357 +#: src/License/LicenseManager.php:403 msgid "License key not found." msgstr "Lizenzschlüssel nicht gefunden." @@ -1277,392 +1310,110 @@ msgstr "Lizenz konnte nicht aktiviert werden." msgid "License activated successfully." msgstr "Lizenz erfolgreich aktiviert." -#: src/Checkout/CheckoutBlocksIntegration.php:101 -#: src/Checkout/CheckoutController.php:81 -msgid "Domain for License Activation" -msgstr "Domain für Lizenz-Aktivierung" - -#: src/Checkout/CheckoutBlocksIntegration.php:103 -#: src/Checkout/CheckoutController.php:93 -msgid "" -"Enter the domain where you will use this license (without http:// or www)." -msgstr "" -"Geben Sie die Domain ein, auf der Sie diese Lizenz verwenden möchten (ohne " -"http:// oder www)." - -#: src/Checkout/CheckoutBlocksIntegration.php:104 -#: src/Checkout/CheckoutController.php:78 +#: src/Checkout/CheckoutController.php:119 +#: src/Checkout/CheckoutBlocksIntegration.php:78 +#: src/Checkout/CheckoutBlocksIntegration.php:125 msgid "License Domain" msgstr "Lizenz-Domain" -#: src/Checkout/CheckoutBlocksIntegration.php:105 -msgid "Please enter a valid domain for your license activation." -msgstr "Bitte geben Sie eine gültige Domain für Ihre Lizenz-Aktivierung ein." - -#: src/Checkout/CheckoutController.php:82 +#: src/Checkout/CheckoutController.php:123 +#: src/Checkout/CheckoutController.php:179 msgid "required" msgstr "erforderlich" -#: src/Checkout/CheckoutController.php:115 -msgid "Please enter a domain for your license activation." -msgstr "Bitte geben Sie eine Domain für Ihre Lizenz-Aktivierung ein." +#: src/Checkout/CheckoutController.php:134 +#: src/Checkout/CheckoutBlocksIntegration.php:122 +msgid "" +"Enter the domain where you will use the license (without http:// or www)." +msgstr "" +"Geben Sie die Domain ein, auf der Sie die Lizenz verwenden möchten (ohne " +"http:// oder www)." -#: src/Checkout/CheckoutController.php:125 -msgid "Please enter a valid domain name." -msgstr "Bitte geben Sie einen gültigen Domain-Namen ein." +#: src/Checkout/CheckoutController.php:148 +#: src/Checkout/CheckoutBlocksIntegration.php:124 +msgid "License Domains" +msgstr "Lizenz-Domains" -#: src/Checkout/CheckoutController.php:164 -#: src/Checkout/CheckoutController.php:181 -#: src/Checkout/CheckoutController.php:185 +#: src/Checkout/CheckoutController.php:150 +#: src/Checkout/CheckoutBlocksIntegration.php:121 +msgid "Enter a unique domain for each license (without http:// or www)." +msgstr "" +"Geben Sie für jede Lizenz eine eindeutige Domain ein (ohne http:// oder www)." + +#: src/Checkout/CheckoutController.php:175 +#: src/Checkout/CheckoutBlocksIntegration.php:128 +#, php-format +msgid "License %d:" +msgstr "Lizenz %d:" + +#: src/Checkout/CheckoutController.php:258 +msgid "Please enter a domain for your license." +msgstr "Bitte geben Sie eine Domain für Ihre Lizenz ein." + +#: src/Checkout/CheckoutController.php:264 +msgid "Please enter a valid domain for your license." +msgstr "Bitte geben Sie eine gültige Domain für Ihre Lizenz ein." + +#: src/Checkout/CheckoutController.php:287 +#, php-format +msgid "Please enter a domain for %1$s (License %2$d)." +msgstr "Bitte geben Sie eine Domain für %1$s (Lizenz %2$d) ein." + +#: src/Checkout/CheckoutController.php:302 +#, php-format +msgid "Please enter a valid domain for %1$s (License %2$d)." +msgstr "Bitte geben Sie eine gültige Domain für %1$s (Lizenz %2$d) ein." + +#: src/Checkout/CheckoutController.php:316 +#, php-format +msgid "" +"The domain \"%1$s\" is used multiple times for %2$s. Each license requires a " +"unique domain." +msgstr "" +"Die Domain \"%1$s\" wird mehrfach für %2$s verwendet. Jede Lizenz erfordert " +"eine eindeutige Domain." + +#: src/Checkout/CheckoutController.php:419 +#: src/Checkout/CheckoutController.php:466 +#: src/Checkout/CheckoutController.php:470 msgid "License Domain:" msgstr "Lizenz-Domain:" -#: src/Checkout/StoreApiExtension.php:85 +#: src/Checkout/CheckoutController.php:432 +#: src/Checkout/CheckoutController.php:483 +#: src/Checkout/CheckoutController.php:492 +msgid "License Domains:" +msgstr "Lizenz-Domains:" + +#: src/Checkout/CheckoutBlocksIntegration.php:85 +msgid "Enter a valid domain (without http:// or www)" +msgstr "Geben Sie eine gültige Domain ein (ohne http:// oder www)" + +#: src/Checkout/CheckoutBlocksIntegration.php:127 +msgid "Each license requires a unique domain." +msgstr "Jede Lizenz erfordert eine eindeutige Domain." + +#: src/Checkout/StoreApiExtension.php:93 +msgid "Domains for license activation by product" +msgstr "Domains für Lizenz-Aktivierung nach Produkt" + +#: src/Checkout/StoreApiExtension.php:117 msgid "Domain for license activation" msgstr "Domain für Lizenz-Aktivierung" -#: src/Email/LicenseEmailController.php:212 -#: src/Email/LicenseEmailController.php:216 -#: src/Email/LicenseEmailController.php:320 -#: src/Email/LicenseExpirationEmail.php:207 -#: src/Email/LicenseExpirationEmail.php:270 -#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 -#: src/Frontend/AccountController.php:190 -msgid "License Key:" -msgstr "Lizenzschlüssel:" - -#: src/Email/LicenseEmailController.php:256 -msgid "Your License Keys" -msgstr "Ihre Lizenzschlüssel" - -#: src/Email/LicenseEmailController.php:260 -#: src/Email/LicenseEmailController.php:315 -msgid "Licensed Domain:" -msgstr "Lizensierte Domain:" - -#: src/Email/LicenseEmailController.php:287 -#: src/Email/LicenseEmailController.php:326 -#: src/Frontend/AccountController.php:218 -msgid "Never" -msgstr "Nie" - -#: src/Email/LicenseEmailController.php:296 -#: src/Email/LicenseEmailController.php:330 -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:311 -msgid "YOUR LICENSE KEYS" -msgstr "IHRE LIZENZSCHLÜSSEL" - -#: src/Email/LicenseEmailController.php:323 -#: src/Email/LicenseExpirationEmail.php:219 -#: src/Email/LicenseExpirationEmail.php:272 -#: src/Frontend/AccountController.php:213 -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/Email/LicenseExpirationEmail.php:107 -#: src/Email/LicenseExpiredEmail.php:99 src/Frontend/AccountController.php:140 -#: src/License/LicenseManager.php:760 src/Product/VersionManager.php:349 -#: src/Product/VersionManager.php:361 -msgid "Unknown Product" -msgstr "Unbekanntes Produkt" - -#: src/Email/LicenseExpirationEmail.php:176 -#: src/Email/LicenseExpirationEmail.php:246 -#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 -#, php-format -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 -#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 -msgid "Product:" -msgstr "Produkt:" - -#: src/Email/LicenseExpirationEmail.php:215 -#: src/Email/LicenseExpirationEmail.php:271 -#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 -#: src/Frontend/AccountController.php:201 -msgid "Domain:" -msgstr "Domain:" - -#: src/Email/LicenseExpirationEmail.php:235 -#: src/Email/LicenseExpirationEmail.php:281 -#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 -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." - -#: src/Email/LicenseExpirationEmail.php:301 -#: src/Email/LicenseExpiredEmail.php:288 -#, php-format -msgid "Available placeholders: %s" -msgstr "Verfügbare Platzhalter: %s" - -#: src/Email/LicenseExpirationEmail.php:307 -#: src/Email/LicenseExpiredEmail.php:294 -msgid "Enable/Disable" -msgstr "Aktivieren/Deaktivieren" - -#: src/Email/LicenseExpirationEmail.php:309 -#: src/Email/LicenseExpiredEmail.php:296 -msgid "Enable this email notification" -msgstr "Diese E-Mail-Benachrichtigung aktivieren" - -#: src/Email/LicenseExpirationEmail.php:313 -#: src/Email/LicenseExpiredEmail.php:300 -msgid "Subject" -msgstr "Betreff" - -#: src/Email/LicenseExpirationEmail.php:321 -#: src/Email/LicenseExpiredEmail.php:308 -msgid "Email heading" -msgstr "E-Mail-Überschrift" - -#: src/Email/LicenseExpirationEmail.php:329 -#: src/Email/LicenseExpiredEmail.php:316 -msgid "Additional content" -msgstr "Zusätzlicher Inhalt" - -#: src/Email/LicenseExpirationEmail.php:330 -#: src/Email/LicenseExpiredEmail.php:317 -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 -#: src/Email/LicenseExpiredEmail.php:325 -msgid "Email type" -msgstr "E-Mail-Typ" - -#: src/Email/LicenseExpirationEmail.php:340 -#: src/Email/LicenseExpiredEmail.php:327 -msgid "Choose which format of email to send." -msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." - -#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 -msgid "License Expired" -msgstr "Lizenz abgelaufen" - -#: src/Email/LicenseExpiredEmail.php:51 -msgid "" -"License expired emails are sent to customers when their licenses have " -"expired." -msgstr "" -"Lizenzablauf-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " -"abgelaufen sind." - -#: src/Email/LicenseExpiredEmail.php:68 -msgid "[{site_title}] Your license for {product_name} has expired" -msgstr "[{site_title}] Ihre Lizenz für {product_name} ist abgelaufen" - -#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 -#, php-format -msgid "Your license for %1$s has expired on %2$s." -msgstr "Ihre Lizenz für %1$s ist am %2$s abgelaufen." - -#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 -msgid "" -"Your license is no longer valid and the product will stop working until you " -"renew." -msgstr "" -"Ihre Lizenz ist nicht mehr gültig und das Produkt wird nicht mehr " -"funktionieren, bis Sie verlängern." - -#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 -msgid "Expired License Details" -msgstr "Details der abgelaufenen Lizenz" - -#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 -msgid "Expired on:" -msgstr "Abgelaufen am:" - -#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 -msgid "Status:" -msgstr "Status:" - -#: src/Email/LicenseExpiredEmail.php:278 -msgid "To continue using this product, please renew your license." -msgstr "" -"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz." - -#: src/Frontend/AccountController.php:104 -msgid "Please log in to view your licenses." -msgstr "Bitte melden Sie sich an, um Ihre Lizenzen zu sehen." - -#: src/Frontend/AccountController.php:165 -msgid "You have no licenses yet." -msgstr "Sie haben noch keine Lizenzen." - -#: src/Frontend/AccountController.php:226 -msgid "Available Downloads" -msgstr "Verfügbare Downloads" - -#: src/Frontend/AccountController.php:232 -#, php-format -msgid "Version %s" -msgstr "Version %s" - -#: src/Frontend/AccountController.php:311 -#: src/Frontend/AccountController.php:378 -msgid "License transferred successfully!" -msgstr "Lizenz erfolgreich übertragen!" - -#: src/Frontend/AccountController.php:312 -msgid "Transfer failed. Please try again." -msgstr "Übertragung fehlgeschlagen. Bitte versuchen Sie es erneut." - -#: src/Frontend/AccountController.php:313 -msgid "" -"Are you sure you want to transfer this license to a new domain? This action " -"cannot be undone." -msgstr "" -"Sind Sie sicher, dass Sie diese Lizenz auf eine neue Domain übertragen " -"möchten? Diese Aktion kann nicht rückgängig gemacht werden." - -#: src/Frontend/AccountController.php:332 -msgid "Please log in to transfer a license." -msgstr "Bitte melden Sie sich an, um eine Lizenz zu übertragen." - -#: src/Frontend/AccountController.php:338 -msgid "Invalid license." -msgstr "Ungültige Lizenz." - -#: src/Frontend/AccountController.php:356 -msgid "You do not have permission to transfer this license." -msgstr "Sie haben keine Berechtigung, diese Lizenz zu übertragen." - -#: src/Frontend/AccountController.php:361 -msgid "Revoked licenses cannot be transferred." -msgstr "Widerrufene Lizenzen können nicht übertragen werden." - -#: src/Frontend/AccountController.php:365 -msgid "Expired licenses cannot be transferred." -msgstr "Abgelaufene Lizenzen können nicht übertragen werden." - -#: src/Frontend/AccountController.php:370 -msgid "The new domain is the same as the current domain." -msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain." - -#: src/Frontend/AccountController.php:382 -msgid "Failed to transfer license. Please try again." -msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut." - -#: src/Frontend/DownloadController.php:77 -#: src/Frontend/DownloadController.php:101 -msgid "Invalid download link." -msgstr "Ungültiger Download-Link." - -#: src/Frontend/DownloadController.php:78 -#: src/Frontend/DownloadController.php:88 -#: src/Frontend/DownloadController.php:102 -#: src/Frontend/DownloadController.php:118 -#: src/Frontend/DownloadController.php:128 -#: src/Frontend/DownloadController.php:137 -#: src/Frontend/DownloadController.php:147 -#: src/Frontend/DownloadController.php:156 -#: src/Frontend/DownloadController.php:165 -#: src/Frontend/DownloadController.php:187 -#: src/Frontend/DownloadController.php:203 -msgid "Download Error" -msgstr "Download-Fehler" - -#: src/Frontend/DownloadController.php:87 -msgid "Invalid download link format." -msgstr "Ungültiges Download-Link-Format." - -#: src/Frontend/DownloadController.php:127 -msgid "You do not have permission to download this file." -msgstr "Sie haben keine Berechtigung, diese Datei herunterzuladen." - -#: src/Frontend/DownloadController.php:136 -msgid "Your license is not active. Please contact support." -msgstr "Ihre Lizenz ist nicht aktiv. Bitte kontaktieren Sie den Support." - -#: src/Frontend/DownloadController.php:146 -msgid "Version not found." -msgstr "Version nicht gefunden." - -#: src/Frontend/DownloadController.php:155 -msgid "Version does not match your licensed product." -msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein." - -#: src/Frontend/DownloadController.php:164 -msgid "This version is no longer available for download." -msgstr "Diese Version ist nicht mehr zum Download verfügbar." - -#: src/Frontend/DownloadController.php:186 -msgid "No download file available for this version." -msgstr "Keine Download-Datei für diese Version verfügbar." - -#: src/Frontend/DownloadController.php:202 -msgid "Download file not found." -msgstr "Download-Datei nicht gefunden." - -#: src/License/LicenseManager.php:366 +#: src/License/LicenseManager.php:412 msgid "This license has been revoked." msgstr "Diese Lizenz wurde widerrufen." -#: src/License/LicenseManager.php:376 +#: src/License/LicenseManager.php:422 msgid "This license has expired." msgstr "Diese Lizenz ist abgelaufen." -#: src/License/LicenseManager.php:384 +#: src/License/LicenseManager.php:430 msgid "This license is inactive." msgstr "Diese Lizenz ist inaktiv." -#: src/License/LicenseManager.php:394 +#: src/License/LicenseManager.php:440 msgid "This license is not valid for this domain." msgstr "Diese Lizenz ist für diese Domain nicht gültig." @@ -1674,21 +1425,6 @@ msgstr "Lizenzeinstellungen nicht konfiguriert." msgid "Could not connect to license server." msgstr "Verbindung zum Lizenzserver konnte nicht hergestellt werden." -#: src/Plugin.php:260 -msgid "WC Licensed Product" -msgstr "WC Licensed Product" - -#: src/Plugin.php:261 -msgid "" -"Plugin license is not configured or invalid. Frontend features are disabled." -msgstr "" -"Plugin-Lizenz ist nicht konfiguriert oder ungültig. Frontend-Funktionen sind " -"deaktiviert." - -#: src/Plugin.php:262 -msgid "Configure License" -msgstr "Lizenz konfigurieren" - #: src/Product/LicensedProductType.php:61 msgid "Licensed Product" msgstr "Lizensiertes Produkt" @@ -1763,6 +1499,360 @@ msgstr "Anhangs-Datei nicht gefunden." 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/Frontend/AccountController.php:104 +msgid "Please log in to view your licenses." +msgstr "Bitte melden Sie sich an, um Ihre Lizenzen zu sehen." + +#: src/Frontend/AccountController.php:220 +msgid "You have no licenses yet." +msgstr "Sie haben noch keine Lizenzen." + +#: src/Frontend/AccountController.php:242 +#, php-format +msgid "Order #%s" +msgstr "Bestellung #%s" + +#: src/Frontend/AccountController.php:293 +msgid "Available Downloads" +msgstr "Verfügbare Downloads" + +#: src/Frontend/AccountController.php:302 +#: src/Frontend/AccountController.php:335 +#, php-format +msgid "Version %s" +msgstr "Version %s" + +#: src/Frontend/AccountController.php:304 +msgid "Latest" +msgstr "Neueste" + +#: src/Frontend/AccountController.php:324 +#, php-format +msgid "Older versions (%d)" +msgstr "Ältere Versionen (%d)" + +#: src/Frontend/AccountController.php:424 +#: src/Frontend/AccountController.php:491 +msgid "License transferred successfully!" +msgstr "Lizenz erfolgreich übertragen!" + +#: src/Frontend/AccountController.php:425 +msgid "Transfer failed. Please try again." +msgstr "Übertragung fehlgeschlagen. Bitte versuchen Sie es erneut." + +#: src/Frontend/AccountController.php:426 +msgid "" +"Are you sure you want to transfer this license to a new domain? This action " +"cannot be undone." +msgstr "" +"Sind Sie sicher, dass Sie diese Lizenz auf eine neue Domain übertragen " +"möchten? Diese Aktion kann nicht rückgängig gemacht werden." + +#: src/Frontend/AccountController.php:445 +msgid "Please log in to transfer a license." +msgstr "Bitte melden Sie sich an, um eine Lizenz zu übertragen." + +#: src/Frontend/AccountController.php:451 +msgid "Invalid license." +msgstr "Ungültige Lizenz." + +#: src/Frontend/AccountController.php:469 +msgid "You do not have permission to transfer this license." +msgstr "Sie haben keine Berechtigung, diese Lizenz zu übertragen." + +#: src/Frontend/AccountController.php:474 +msgid "Revoked licenses cannot be transferred." +msgstr "Widerrufene Lizenzen können nicht übertragen werden." + +#: src/Frontend/AccountController.php:478 +msgid "Expired licenses cannot be transferred." +msgstr "Abgelaufene Lizenzen können nicht übertragen werden." + +#: src/Frontend/AccountController.php:483 +msgid "The new domain is the same as the current domain." +msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain." + +#: src/Frontend/AccountController.php:495 +msgid "Failed to transfer license. Please try again." +msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut." + +#: src/Frontend/DownloadController.php:77 +#: src/Frontend/DownloadController.php:101 +msgid "Invalid download link." +msgstr "Ungültiger Download-Link." + +#: src/Frontend/DownloadController.php:78 +#: src/Frontend/DownloadController.php:88 +#: src/Frontend/DownloadController.php:102 +#: src/Frontend/DownloadController.php:118 +#: src/Frontend/DownloadController.php:128 +#: src/Frontend/DownloadController.php:137 +#: src/Frontend/DownloadController.php:147 +#: src/Frontend/DownloadController.php:156 +#: src/Frontend/DownloadController.php:165 +#: src/Frontend/DownloadController.php:187 +#: src/Frontend/DownloadController.php:203 +msgid "Download Error" +msgstr "Download-Fehler" + +#: src/Frontend/DownloadController.php:87 +msgid "Invalid download link format." +msgstr "Ungültiges Download-Link-Format." + +#: src/Frontend/DownloadController.php:127 +msgid "You do not have permission to download this file." +msgstr "Sie haben keine Berechtigung, diese Datei herunterzuladen." + +#: src/Frontend/DownloadController.php:136 +msgid "Your license is not active. Please contact support." +msgstr "Ihre Lizenz ist nicht aktiv. Bitte kontaktieren Sie den Support." + +#: src/Frontend/DownloadController.php:146 +msgid "Version not found." +msgstr "Version nicht gefunden." + +#: src/Frontend/DownloadController.php:155 +msgid "Version does not match your licensed product." +msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein." + +#: src/Frontend/DownloadController.php:164 +msgid "This version is no longer available for download." +msgstr "Diese Version ist nicht mehr zum Download verfügbar." + +#: src/Frontend/DownloadController.php:186 +msgid "No download file available for this version." +msgstr "Keine Download-Datei für diese Version verfügbar." + +#: src/Frontend/DownloadController.php:202 +msgid "Download file not found." +msgstr "Download-Datei nicht gefunden." + +#: 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/Email/LicenseExpirationEmail.php:176 +#: src/Email/LicenseExpirationEmail.php:246 +#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 +#, php-format +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 +#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 +msgid "Product:" +msgstr "Produkt:" + +#: src/Email/LicenseExpirationEmail.php:207 +#: src/Email/LicenseExpirationEmail.php:270 +#: src/Email/LicenseEmailController.php:343 +#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 +msgid "License Key:" +msgstr "Lizenzschlüssel:" + +#: src/Email/LicenseExpirationEmail.php:215 +#: src/Email/LicenseExpirationEmail.php:271 +#: src/Email/LicenseEmailController.php:345 +#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 +msgid "Domain:" +msgstr "Domain:" + +#: src/Email/LicenseExpirationEmail.php:219 +#: src/Email/LicenseExpirationEmail.php:272 +#: src/Email/LicenseEmailController.php:347 +msgid "Expires:" +msgstr "Läuft ab:" + +#: src/Email/LicenseExpirationEmail.php:235 +#: src/Email/LicenseExpirationEmail.php:281 +#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 +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." + +#: src/Email/LicenseExpirationEmail.php:301 +#: src/Email/LicenseExpiredEmail.php:288 +#, php-format +msgid "Available placeholders: %s" +msgstr "Verfügbare Platzhalter: %s" + +#: src/Email/LicenseExpirationEmail.php:307 +#: src/Email/LicenseExpiredEmail.php:294 +msgid "Enable/Disable" +msgstr "Aktivieren/Deaktivieren" + +#: src/Email/LicenseExpirationEmail.php:309 +#: src/Email/LicenseExpiredEmail.php:296 +msgid "Enable this email notification" +msgstr "Diese E-Mail-Benachrichtigung aktivieren" + +#: src/Email/LicenseExpirationEmail.php:313 +#: src/Email/LicenseExpiredEmail.php:300 +msgid "Subject" +msgstr "Betreff" + +#: src/Email/LicenseExpirationEmail.php:321 +#: src/Email/LicenseExpiredEmail.php:308 +msgid "Email heading" +msgstr "E-Mail-Überschrift" + +#: src/Email/LicenseExpirationEmail.php:329 +#: src/Email/LicenseExpiredEmail.php:316 +msgid "Additional content" +msgstr "Zusätzlicher Inhalt" + +#: src/Email/LicenseExpirationEmail.php:330 +#: src/Email/LicenseExpiredEmail.php:317 +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 +#: src/Email/LicenseExpiredEmail.php:325 +msgid "Email type" +msgstr "E-Mail-Typ" + +#: src/Email/LicenseExpirationEmail.php:340 +#: src/Email/LicenseExpiredEmail.php:327 +msgid "Choose which format of email to send." +msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." + +#: src/Email/LicenseEmailController.php:212 +#: src/Email/LicenseEmailController.php:220 +msgid "License Keys:" +msgstr "Lizenzschlüssel:" + +#: src/Email/LicenseEmailController.php:268 +msgid "Your License Keys" +msgstr "Ihre Lizenzschlüssel" + +#: src/Email/LicenseEmailController.php:277 +#, php-format +msgid "%d license" +msgid_plural "%d licenses" +msgstr[0] "%d Lizenz" +msgstr[1] "%d Lizenzen" + +#: src/Email/LicenseEmailController.php:308 +#: src/Email/LicenseEmailController.php:352 +msgid "Never" +msgstr "Nie" + +#: src/Email/LicenseEmailController.php:319 +#: src/Email/LicenseEmailController.php:357 +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:332 +msgid "YOUR LICENSE KEYS" +msgstr "IHRE LIZENZSCHLÜSSEL" + +#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 +msgid "License Expired" +msgstr "Lizenz abgelaufen" + +#: src/Email/LicenseExpiredEmail.php:51 +msgid "" +"License expired emails are sent to customers when their licenses have " +"expired." +msgstr "" +"Lizenzablauf-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " +"abgelaufen sind." + +#: src/Email/LicenseExpiredEmail.php:68 +msgid "[{site_title}] Your license for {product_name} has expired" +msgstr "[{site_title}] Ihre Lizenz für {product_name} ist abgelaufen" + +#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 +#, php-format +msgid "Your license for %1$s has expired on %2$s." +msgstr "Ihre Lizenz für %1$s ist am %2$s abgelaufen." + +#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 +msgid "" +"Your license is no longer valid and the product will stop working until you " +"renew." +msgstr "" +"Ihre Lizenz ist nicht mehr gültig und das Produkt wird nicht mehr " +"funktionieren, bis Sie verlängern." + +#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 +msgid "Expired License Details" +msgstr "Details der abgelaufenen Lizenz" + +#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 +msgid "Expired on:" +msgstr "Abgelaufen am:" + +#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 +msgid "Status:" +msgstr "Status:" + +#: src/Email/LicenseExpiredEmail.php:278 +msgid "To continue using this product, please renew your license." +msgstr "" +"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz." + +#: src/Plugin.php:318 +msgid "WC Licensed Product" +msgstr "WC Licensed Product" + +#: src/Plugin.php:319 +msgid "" +"Plugin license is not configured or invalid. Frontend features are disabled." +msgstr "" +"Plugin-Lizenz ist nicht konfiguriert oder ungültig. Frontend-Funktionen sind " +"deaktiviert." + +#: src/Plugin.php:320 +msgid "Configure License" +msgstr "Lizenz konfigurieren" + #: wc-licensed-product.php:61 #, php-format msgid "%s requires WooCommerce to be installed and active." @@ -1773,3 +1863,12 @@ msgid "WC Licensed Product requires WooCommerce to be installed and active." msgstr "" "WC Licensed Product benötigt WooCommerce als installierte und aktivierte " "Erweiterung." + +#~ msgid "Domain for License Activation" +#~ msgstr "Domain für Lizenz-Aktivierung" + +#~ msgid "Please enter a valid domain name." +#~ msgstr "Bitte geben Sie einen gültigen Domain-Namen ein." + +#~ msgid "Licensed Domain:" +#~ msgstr "Lizensierte Domain:" diff --git a/languages/wc-licensed-product.pot b/languages/wc-licensed-product.pot index cfedc49..86b653e 100644 --- a/languages/wc-licensed-product.pot +++ b/languages/wc-licensed-product.pot @@ -1,14 +1,14 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# Copyright (C) YEAR Marco Graetsch # This file is distributed under the same license as the WC Licensed Product package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: WC Licensed Product 0.4.0\n" +"Project-Id-Version: WC Licensed Product 0.5.0\n" "Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" -"POT-Creation-Date: 2026-01-24 16:39+0100\n" +"POT-Creation-Date: 2026-01-25 18:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,10 +18,418 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" +#: src/Admin/SettingsController.php:54 +msgid "Licensed Products" +msgstr "" + +#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:128 +msgid "Plugin License" +msgstr "" + +#: src/Admin/SettingsController.php:65 +msgid "Default Settings" +msgstr "" + +#: src/Admin/SettingsController.php:66 +msgid "Notifications" +msgstr "" + +#: src/Admin/SettingsController.php:130 +msgid "" +"Configure the license for this plugin. A valid license is required for " +"frontend features to work." +msgstr "" + +#: src/Admin/SettingsController.php:134 +msgid "License Server URL" +msgstr "" + +#: src/Admin/SettingsController.php:136 +msgid "The URL of the license server (e.g., https://shop.example.com)." +msgstr "" + +#: src/Admin/SettingsController.php:142 src/Admin/AdminController.php:1291 +#: src/Admin/AdminController.php:1442 src/Admin/AdminController.php:1491 +#: src/Admin/OrderLicenseController.php:203 +#: src/Email/LicenseEmailController.php:287 +msgid "License Key" +msgstr "" + +#: src/Admin/SettingsController.php:144 +msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." +msgstr "" + +#: src/Admin/SettingsController.php:150 +msgid "Server Secret (Optional)" +msgstr "" + +#: src/Admin/SettingsController.php:152 +msgid "" +"If the license server uses signed responses, enter the shared secret here " +"for enhanced security." +msgstr "" + +#: src/Admin/SettingsController.php:170 +msgid "Default License Settings" +msgstr "" + +#: src/Admin/SettingsController.php:172 +msgid "" +"These settings serve as defaults for new licensed products. Individual " +"product settings override these defaults." +msgstr "" + +#: src/Admin/SettingsController.php:176 +msgid "Default Max Activations" +msgstr "" + +#: src/Admin/SettingsController.php:178 +msgid "Default maximum number of domain activations per license." +msgstr "" + +#: src/Admin/SettingsController.php:187 +msgid "Default License Validity (Days)" +msgstr "" + +#: src/Admin/SettingsController.php:189 +msgid "" +"Default number of days a license is valid. Leave empty or set to 0 for " +"lifetime licenses." +msgstr "" + +#: src/Admin/SettingsController.php:192 src/Admin/AdminController.php:151 +#: src/Admin/AdminController.php:266 src/Admin/AdminController.php:1373 +#: src/Admin/AdminController.php:1613 +#: src/Admin/DashboardWidgetController.php:136 +#: src/Admin/OrderLicenseController.php:260 +#: src/Product/LicensedProductType.php:110 +#: src/Product/LicensedProductType.php:158 +#: src/Frontend/AccountController.php:283 +msgid "Lifetime" +msgstr "" + +#: src/Admin/SettingsController.php:199 +msgid "Default Bind to Major Version" +msgstr "" + +#: src/Admin/SettingsController.php:201 +msgid "" +"If enabled, licenses are bound to the major version at purchase time by " +"default." +msgstr "" + +#: src/Admin/SettingsController.php:206 +msgid "Enable Multi-Domain Licensing" +msgstr "" + +#: src/Admin/SettingsController.php:208 +msgid "" +"Allow customers to purchase multiple licenses for different domains at once. " +"Each unit in cart quantity requires a unique domain." +msgstr "" + +#: src/Admin/SettingsController.php:226 +msgid "Expiration Warning Schedule" +msgstr "" + +#: src/Admin/SettingsController.php:230 +#, 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:232 +msgid "WooCommerce > Settings > Emails > License Expiration Warning" +msgstr "" + +#: src/Admin/SettingsController.php:237 +msgid "First Warning (Days Before)" +msgstr "" + +#: src/Admin/SettingsController.php:239 +msgid "Days before expiration to send the first warning email." +msgstr "" + +#: src/Admin/SettingsController.php:248 +msgid "Second Warning (Days Before)" +msgstr "" + +#: src/Admin/SettingsController.php:250 +msgid "" +"Days before expiration to send the second warning email. Set to 0 to disable." +msgstr "" + +#: src/Admin/SettingsController.php:290 +msgid "Running on localhost - license validation bypassed." +msgstr "" + +#: src/Admin/SettingsController.php:298 +msgid "License is valid and active." +msgstr "" + +#: src/Admin/SettingsController.php:304 +msgid "License is not valid. Frontend features are disabled." +msgstr "" + +#: src/Admin/SettingsController.php:315 src/Admin/SettingsController.php:351 +msgid "Verify License" +msgstr "" + +#: src/Admin/SettingsController.php:329 +msgid "Verifying..." +msgstr "" + +#: src/Admin/SettingsController.php:348 +msgid "Request failed." +msgstr "" + +#: src/Admin/SettingsController.php:469 src/Admin/AdminController.php:455 +#: src/Admin/AdminController.php:475 src/Admin/AdminController.php:493 +#: src/Admin/AdminController.php:511 src/Admin/AdminController.php:531 +#: src/Admin/AdminController.php:549 src/Admin/AdminController.php:577 +#: src/Admin/AdminController.php:621 src/Admin/AdminController.php:811 +#: src/Frontend/AccountController.php:439 +msgid "Security check failed." +msgstr "" + +#: src/Admin/SettingsController.php:473 +msgid "Insufficient permissions." +msgstr "" + +#: src/Admin/SettingsController.php:482 +msgid "License verified successfully!" +msgstr "" + +#: src/Admin/SettingsController.php:484 +msgid "License validation failed." +msgstr "" + +#: src/Admin/VersionAdminController.php:58 +msgid "Product Versions" +msgstr "" + +#: src/Admin/VersionAdminController.php:78 +msgid "Add New Version" +msgstr "" + +#: src/Admin/VersionAdminController.php:81 +#: src/Admin/VersionAdminController.php:136 src/Admin/AdminController.php:1609 +msgid "Version" +msgstr "" + +#: src/Admin/VersionAdminController.php:84 +msgid "Use semantic versioning (e.g., 1.0.0)" +msgstr "" + +#: src/Admin/VersionAdminController.php:88 +#: src/Admin/VersionAdminController.php:137 +msgid "Download File" +msgstr "" + +#: src/Admin/VersionAdminController.php:93 +msgid "Select File" +msgstr "" + +#: src/Admin/VersionAdminController.php:96 +#: src/Admin/VersionAdminController.php:110 +msgid "Remove" +msgstr "" + +#: src/Admin/VersionAdminController.php:98 +msgid "" +"Upload or select a file from the media library. Version will be auto-" +"detected from filename (e.g., plugin-v1.2.3.zip)." +msgstr "" + +#: src/Admin/VersionAdminController.php:102 +msgid "Checksum File" +msgstr "" + +#: src/Admin/VersionAdminController.php:107 +msgid "Select Checksum File" +msgstr "" + +#: src/Admin/VersionAdminController.php:112 +msgid "" +"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." +msgstr "" + +#: src/Admin/VersionAdminController.php:116 +#: src/Admin/VersionAdminController.php:139 +msgid "Release Notes" +msgstr "" + +#: src/Admin/VersionAdminController.php:124 +msgid "Add Version" +msgstr "" + +#: src/Admin/VersionAdminController.php:132 +msgid "Existing Versions" +msgstr "" + +#: src/Admin/VersionAdminController.php:138 +msgid "SHA256" +msgstr "" + +#: src/Admin/VersionAdminController.php:140 src/Admin/AdminController.php:1295 +#: src/Admin/AdminController.php:1446 src/Admin/OrderLicenseController.php:206 +msgid "Status" +msgstr "" + +#: src/Admin/VersionAdminController.php:141 +msgid "Released" +msgstr "" + +#: src/Admin/VersionAdminController.php:142 src/Admin/AdminController.php:1298 +#: src/Admin/AdminController.php:1449 src/Admin/OrderLicenseController.php:208 +msgid "Actions" +msgstr "" + +#: src/Admin/VersionAdminController.php:148 +msgid "No versions found. Add your first version above." +msgstr "" + +#: src/Admin/VersionAdminController.php:165 +#: src/Admin/VersionAdminController.php:396 +msgid "Uploaded file" +msgstr "" + +#: src/Admin/VersionAdminController.php:169 +#: src/Admin/VersionAdminController.php:400 +msgid "No download file" +msgstr "" + +#: src/Admin/VersionAdminController.php:182 +#: src/Admin/VersionAdminController.php:413 src/Admin/AdminController.php:156 +#: src/Admin/AdminController.php:907 src/Admin/AdminController.php:1232 +#: src/Admin/AdminController.php:1355 +#: src/Admin/DashboardWidgetController.php:117 +msgid "Active" +msgstr "" + +#: src/Admin/VersionAdminController.php:182 +#: src/Admin/VersionAdminController.php:413 src/Admin/AdminController.php:157 +#: src/Admin/AdminController.php:914 src/Admin/AdminController.php:1233 +#: src/Admin/AdminController.php:1356 +msgid "Inactive" +msgstr "" + +#: src/Admin/VersionAdminController.php:188 +#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1274 +#: src/Admin/AdminController.php:1459 +msgid "Deactivate" +msgstr "" + +#: src/Admin/VersionAdminController.php:188 +#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1273 +#: src/Admin/AdminController.php:1458 +msgid "Activate" +msgstr "" + +#: src/Admin/VersionAdminController.php:191 +#: src/Admin/VersionAdminController.php:422 src/Admin/AdminController.php:1279 +#: src/Admin/AdminController.php:1428 src/Admin/AdminController.php:1464 +msgid "Delete" +msgstr "" + +#: src/Admin/VersionAdminController.php:232 +msgid "Are you sure you want to delete this version?" +msgstr "" + +#: src/Admin/VersionAdminController.php:233 +msgid "Please enter a version number." +msgstr "" + +#: src/Admin/VersionAdminController.php:234 +msgid "Please enter a valid version number (e.g., 1.0.0)." +msgstr "" + +#: src/Admin/VersionAdminController.php:235 +msgid "An error occurred. Please try again." +msgstr "" + +#: src/Admin/VersionAdminController.php:236 +msgid "Select Download File" +msgstr "" + +#: src/Admin/VersionAdminController.php:237 +msgid "Use this file" +msgstr "" + +#: src/Admin/VersionAdminController.php:238 +msgid "" +"Invalid checksum file format. File must contain a 64-character SHA256 hash." +msgstr "" + +#: src/Admin/VersionAdminController.php:239 +msgid "Failed to read checksum file." +msgstr "" + +#: src/Admin/VersionAdminController.php:259 +#: src/Admin/VersionAdminController.php:328 +#: src/Admin/VersionAdminController.php:354 src/Admin/AdminController.php:173 +#: src/Admin/AdminController.php:213 src/Admin/AdminController.php:249 +#: src/Admin/AdminController.php:301 src/Admin/AdminController.php:339 +#: src/Admin/AdminController.php:369 src/Admin/OrderLicenseController.php:387 +#: src/Admin/OrderLicenseController.php:426 +#: src/Admin/OrderLicenseController.php:490 +msgid "Permission denied." +msgstr "" + +#: src/Admin/VersionAdminController.php:269 +msgid "Product ID and version are required." +msgstr "" + +#: src/Admin/VersionAdminController.php:274 +msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." +msgstr "" + +#: src/Admin/VersionAdminController.php:279 +msgid "This version already exists." +msgstr "" + +#: src/Admin/VersionAdminController.php:285 +msgid "Product not found." +msgstr "" + +#: src/Admin/VersionAdminController.php:289 +msgid "This product is not a licensed product." +msgstr "" + +#: src/Admin/VersionAdminController.php:306 +msgid "Failed to create version." +msgstr "" + +#: src/Admin/VersionAdminController.php:314 +msgid "Version added successfully." +msgstr "" + +#: src/Admin/VersionAdminController.php:334 +#: src/Admin/VersionAdminController.php:361 +msgid "Version ID is required." +msgstr "" + +#: src/Admin/VersionAdminController.php:340 +msgid "Failed to delete version." +msgstr "" + +#: src/Admin/VersionAdminController.php:343 +msgid "Version deleted successfully." +msgstr "" + +#: src/Admin/VersionAdminController.php:367 +msgid "Failed to update version." +msgstr "" + +#: src/Admin/VersionAdminController.php:371 +msgid "Version updated successfully." +msgstr "" + #: src/Admin/AdminController.php:76 src/Admin/AdminController.php:77 #: src/Admin/AdminController.php:90 src/Admin/AdminController.php:1200 -#: src/Admin/OrderLicenseController.php:128 -#: src/Admin/OrderLicenseController.php:249 +#: src/Admin/OrderLicenseController.php:149 +#: src/Admin/OrderLicenseController.php:281 #: src/Frontend/AccountController.php:90 msgid "Licenses" msgstr "" @@ -42,7 +450,7 @@ msgstr "" msgid "Search failed" msgstr "" -#: src/Admin/AdminController.php:144 src/Admin/OrderLicenseController.php:338 +#: src/Admin/AdminController.php:144 src/Admin/OrderLicenseController.php:370 msgid "Saving..." msgstr "" @@ -66,50 +474,26 @@ msgstr "" #: src/Admin/AdminController.php:149 src/Admin/AdminController.php:1341 #: src/Admin/AdminController.php:1361 src/Admin/AdminController.php:1382 -#: src/Admin/AdminController.php:1537 src/Admin/OrderLicenseController.php:212 -#: src/Frontend/AccountController.php:271 +#: src/Admin/AdminController.php:1537 src/Admin/OrderLicenseController.php:244 +#: src/Frontend/AccountController.php:384 msgid "Cancel" msgstr "" #: src/Admin/AdminController.php:150 src/Admin/AdminController.php:1340 #: src/Admin/AdminController.php:1360 src/Admin/AdminController.php:1381 -#: src/Admin/OrderLicenseController.php:119 -#: src/Admin/OrderLicenseController.php:209 +#: src/Admin/OrderLicenseController.php:139 +#: src/Admin/OrderLicenseController.php:241 msgid "Save" msgstr "" -#: src/Admin/AdminController.php:151 src/Admin/AdminController.php:266 -#: src/Admin/AdminController.php:1373 src/Admin/AdminController.php:1613 -#: src/Admin/DashboardWidgetController.php:136 -#: src/Admin/OrderLicenseController.php:228 -#: src/Admin/SettingsController.php:192 src/Product/LicensedProductType.php:110 -#: src/Product/LicensedProductType.php:158 -msgid "Lifetime" -msgstr "" - -#: src/Admin/AdminController.php:152 src/Frontend/AccountController.php:309 +#: src/Admin/AdminController.php:152 src/Frontend/AccountController.php:422 msgid "Copied!" msgstr "" -#: src/Admin/AdminController.php:153 src/Frontend/AccountController.php:310 +#: src/Admin/AdminController.php:153 src/Frontend/AccountController.php:423 msgid "Copy failed" msgstr "" -#: src/Admin/AdminController.php:156 src/Admin/AdminController.php:907 -#: src/Admin/AdminController.php:1232 src/Admin/AdminController.php:1355 -#: src/Admin/DashboardWidgetController.php:117 -#: src/Admin/VersionAdminController.php:182 -#: src/Admin/VersionAdminController.php:413 -msgid "Active" -msgstr "" - -#: src/Admin/AdminController.php:157 src/Admin/AdminController.php:914 -#: src/Admin/AdminController.php:1233 src/Admin/AdminController.php:1356 -#: src/Admin/VersionAdminController.php:182 -#: src/Admin/VersionAdminController.php:413 -msgid "Inactive" -msgstr "" - #: src/Admin/AdminController.php:158 src/Admin/AdminController.php:921 #: src/Admin/AdminController.php:1234 src/Admin/AdminController.php:1357 #: src/Admin/DashboardWidgetController.php:125 @@ -122,20 +506,8 @@ msgstr "" msgid "Revoked" msgstr "" -#: src/Admin/AdminController.php:173 src/Admin/AdminController.php:213 -#: src/Admin/AdminController.php:249 src/Admin/AdminController.php:301 -#: src/Admin/AdminController.php:339 src/Admin/AdminController.php:369 -#: src/Admin/OrderLicenseController.php:355 -#: src/Admin/OrderLicenseController.php:394 -#: src/Admin/OrderLicenseController.php:458 -#: src/Admin/VersionAdminController.php:259 -#: src/Admin/VersionAdminController.php:328 -#: src/Admin/VersionAdminController.php:354 -msgid "Permission denied." -msgstr "" - #: src/Admin/AdminController.php:195 src/Admin/AdminController.php:1019 -#: src/Admin/OrderLicenseController.php:195 +#: src/Admin/OrderLicenseController.php:227 msgid "Unknown" msgstr "" @@ -145,7 +517,7 @@ msgstr "" #: src/Admin/AdminController.php:220 src/Admin/AdminController.php:256 #: src/Admin/AdminController.php:308 src/Admin/AdminController.php:345 -#: src/Admin/OrderLicenseController.php:401 +#: src/Admin/OrderLicenseController.php:433 msgid "Invalid license ID." msgstr "" @@ -177,7 +549,7 @@ msgstr "" msgid "Invalid date format." msgstr "" -#: src/Admin/AdminController.php:312 src/Admin/OrderLicenseController.php:405 +#: src/Admin/AdminController.php:312 src/Admin/OrderLicenseController.php:437 msgid "Domain cannot be empty." msgstr "" @@ -201,15 +573,6 @@ msgstr "" msgid "License key and domain are required." msgstr "" -#: src/Admin/AdminController.php:455 src/Admin/AdminController.php:475 -#: src/Admin/AdminController.php:493 src/Admin/AdminController.php:511 -#: src/Admin/AdminController.php:531 src/Admin/AdminController.php:549 -#: src/Admin/AdminController.php:577 src/Admin/AdminController.php:621 -#: src/Admin/AdminController.php:811 src/Admin/SettingsController.php:454 -#: src/Frontend/AccountController.php:326 -msgid "Security check failed." -msgstr "" - #: src/Admin/AdminController.php:581 msgid "You do not have permission to export licenses." msgstr "" @@ -410,9 +773,11 @@ msgstr "" msgid "Showing" msgstr "" -#: src/Admin/AdminController.php:1259 +#: src/Admin/AdminController.php:1259 src/Email/LicenseEmailController.php:338 msgid "license" -msgstr "" +msgid_plural "licenses" +msgstr[0] "" +msgstr[1] "" #: src/Admin/AdminController.php:1259 msgid "licenses" @@ -430,18 +795,6 @@ msgstr "" msgid "Bulk Actions" msgstr "" -#: src/Admin/AdminController.php:1273 src/Admin/AdminController.php:1458 -#: src/Admin/VersionAdminController.php:188 -#: src/Admin/VersionAdminController.php:419 -msgid "Activate" -msgstr "" - -#: src/Admin/AdminController.php:1274 src/Admin/AdminController.php:1459 -#: src/Admin/VersionAdminController.php:188 -#: src/Admin/VersionAdminController.php:419 -msgid "Deactivate" -msgstr "" - #: src/Admin/AdminController.php:1275 src/Admin/AdminController.php:1419 #: src/Admin/AdminController.php:1460 msgid "Revoke" @@ -459,26 +812,12 @@ msgstr "" msgid "Extend 1 year" msgstr "" -#: src/Admin/AdminController.php:1279 src/Admin/AdminController.php:1428 -#: src/Admin/AdminController.php:1464 src/Admin/VersionAdminController.php:191 -#: src/Admin/VersionAdminController.php:422 -msgid "Delete" -msgstr "" - #: src/Admin/AdminController.php:1281 src/Admin/AdminController.php:1466 msgid "Apply" msgstr "" -#: src/Admin/AdminController.php:1291 src/Admin/AdminController.php:1442 -#: src/Admin/AdminController.php:1491 src/Admin/OrderLicenseController.php:171 -#: src/Admin/SettingsController.php:142 -#: src/Email/LicenseEmailController.php:269 -msgid "License Key" -msgstr "" - #: src/Admin/AdminController.php:1292 src/Admin/AdminController.php:1443 -#: src/Admin/AdminController.php:1608 src/Admin/OrderLicenseController.php:172 -#: src/Email/LicenseEmailController.php:268 +#: src/Admin/AdminController.php:1608 src/Admin/OrderLicenseController.php:204 msgid "Product" msgstr "" @@ -489,38 +828,29 @@ msgid "Customer" msgstr "" #: src/Admin/AdminController.php:1294 src/Admin/AdminController.php:1445 -#: src/Admin/AdminController.php:1495 src/Admin/OrderLicenseController.php:173 +#: src/Admin/AdminController.php:1495 src/Admin/OrderLicenseController.php:205 +#: src/Checkout/CheckoutController.php:122 +#: src/Checkout/CheckoutBlocksIntegration.php:129 +#: src/Email/LicenseEmailController.php:288 msgid "Domain" msgstr "" -#: src/Admin/AdminController.php:1295 src/Admin/AdminController.php:1446 -#: src/Admin/OrderLicenseController.php:174 -#: src/Admin/VersionAdminController.php:140 -msgid "Status" -msgstr "" - #: src/Admin/AdminController.php:1296 src/Admin/AdminController.php:1447 msgid "Created" msgstr "" #: src/Admin/AdminController.php:1297 src/Admin/AdminController.php:1448 #: src/Admin/AdminController.php:1611 src/Admin/AdminController.php:1613 -#: src/Admin/OrderLicenseController.php:175 -#: src/Email/LicenseEmailController.php:270 +#: src/Admin/OrderLicenseController.php:207 +#: src/Email/LicenseEmailController.php:289 msgid "Expires" msgstr "" -#: src/Admin/AdminController.php:1298 src/Admin/AdminController.php:1449 -#: src/Admin/OrderLicenseController.php:176 -#: src/Admin/VersionAdminController.php:142 -msgid "Actions" -msgstr "" - #: src/Admin/AdminController.php:1304 msgid "No licenses found." msgstr "" -#: src/Admin/AdminController.php:1314 src/Frontend/AccountController.php:194 +#: src/Admin/AdminController.php:1314 src/Frontend/AccountController.php:260 msgid "Copy to clipboard" msgstr "" @@ -540,11 +870,11 @@ msgstr "" msgid "Test" msgstr "" -#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:207 +#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:267 msgid "Transfer to new domain" msgstr "" -#: src/Admin/AdminController.php:1400 src/Frontend/AccountController.php:209 +#: src/Admin/AdminController.php:1400 msgid "Transfer" msgstr "" @@ -568,27 +898,27 @@ msgstr "" msgid "Testing license..." msgstr "" -#: src/Admin/AdminController.php:1508 src/Frontend/AccountController.php:249 +#: src/Admin/AdminController.php:1508 src/Frontend/AccountController.php:362 msgid "Close" msgstr "" -#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:250 +#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:363 msgid "Transfer License to New Domain" msgstr "" -#: src/Admin/AdminController.php:1524 src/Frontend/AccountController.php:255 +#: src/Admin/AdminController.php:1524 src/Frontend/AccountController.php:368 msgid "Current Domain" msgstr "" -#: src/Admin/AdminController.php:1528 src/Frontend/AccountController.php:260 +#: src/Admin/AdminController.php:1528 src/Frontend/AccountController.php:373 msgid "New Domain" msgstr "" -#: src/Admin/AdminController.php:1531 src/Frontend/AccountController.php:264 +#: src/Admin/AdminController.php:1531 src/Frontend/AccountController.php:377 msgid "Enter the new domain without http:// or www." msgstr "" -#: src/Admin/AdminController.php:1536 src/Frontend/AccountController.php:269 +#: src/Admin/AdminController.php:1536 src/Frontend/AccountController.php:382 msgid "Transfer License" msgstr "" @@ -596,11 +926,6 @@ msgstr "" msgid "License is VALID" msgstr "" -#: src/Admin/AdminController.php:1609 src/Admin/VersionAdminController.php:81 -#: src/Admin/VersionAdminController.php:136 -msgid "Version" -msgstr "" - #: src/Admin/AdminController.php:1617 msgid "License is INVALID" msgstr "" @@ -758,8 +1083,8 @@ msgid "Product Licenses" msgstr "" #: src/Admin/OrderLicenseController.php:78 -#: src/Admin/OrderLicenseController.php:367 -#: src/Admin/OrderLicenseController.php:469 +#: src/Admin/OrderLicenseController.php:399 +#: src/Admin/OrderLicenseController.php:501 msgid "Order not found." msgstr "" @@ -767,451 +1092,157 @@ msgstr "" msgid "This order does not contain licensed products." msgstr "" -#: src/Admin/OrderLicenseController.php:107 -msgid "Order Domain" +#: src/Admin/OrderLicenseController.php:109 +msgid "Order Domains" msgstr "" -#: src/Admin/OrderLicenseController.php:109 +#: src/Admin/OrderLicenseController.php:113 +msgid "Domains specified during checkout (multi-domain order)." +msgstr "" + +#: src/Admin/OrderLicenseController.php:119 +#: src/Checkout/CheckoutController.php:436 +#: src/Checkout/CheckoutController.php:486 +#: src/Checkout/CheckoutController.php:496 src/License/LicenseManager.php:806 +#: src/Product/VersionManager.php:349 src/Product/VersionManager.php:361 +#: src/Frontend/AccountController.php:146 +#: src/Email/LicenseExpirationEmail.php:107 +#: src/Email/LicenseExpiredEmail.php:99 +msgid "Unknown Product" +msgstr "" + +#: src/Admin/OrderLicenseController.php:129 msgid "" "The domain specified during checkout. Changing this will not automatically " "update existing license domains." msgstr "" -#: src/Admin/OrderLicenseController.php:117 -#: src/Checkout/CheckoutBlocksIntegration.php:102 -#: src/Checkout/CheckoutController.php:89 +#: src/Admin/OrderLicenseController.php:137 +#: src/Checkout/CheckoutController.php:130 +#: src/Checkout/CheckoutController.php:186 +#: src/Checkout/CheckoutBlocksIntegration.php:83 +#: src/Checkout/CheckoutBlocksIntegration.php:119 msgid "example.com" msgstr "" -#: src/Admin/OrderLicenseController.php:144 +#: src/Admin/OrderLicenseController.php:176 msgid "No licenses have been generated for this order yet." msgstr "" -#: src/Admin/OrderLicenseController.php:147 +#: src/Admin/OrderLicenseController.php:179 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:150 +#: src/Admin/OrderLicenseController.php:182 msgid "Licenses will be generated when the order is marked as paid/completed." msgstr "" -#: src/Admin/OrderLicenseController.php:156 +#: src/Admin/OrderLicenseController.php:188 msgid "Generate Licenses" msgstr "" -#: src/Admin/OrderLicenseController.php:164 +#: src/Admin/OrderLicenseController.php:196 msgid "Please set the order domain above before generating licenses." msgstr "" -#: src/Admin/OrderLicenseController.php:205 +#: src/Admin/OrderLicenseController.php:237 msgid "Edit domain" msgstr "" -#: src/Admin/OrderLicenseController.php:235 +#: src/Admin/OrderLicenseController.php:267 msgid "View in Licenses" msgstr "" -#: src/Admin/OrderLicenseController.php:248 +#: src/Admin/OrderLicenseController.php:280 #, php-format msgid "For more actions (revoke, extend, delete), go to the %s page." msgstr "" -#: src/Admin/OrderLicenseController.php:261 +#: src/Admin/OrderLicenseController.php:293 #, php-format msgid "%d licensed product is missing a license." msgid_plural "%d licensed products are missing licenses." msgstr[0] "" msgstr[1] "" -#: src/Admin/OrderLicenseController.php:270 +#: src/Admin/OrderLicenseController.php:302 msgid "Generate Missing Licenses" msgstr "" -#: src/Admin/OrderLicenseController.php:339 +#: src/Admin/OrderLicenseController.php:371 msgid "Saved!" msgstr "" -#: src/Admin/OrderLicenseController.php:340 +#: src/Admin/OrderLicenseController.php:372 msgid "Error. Please try again." msgstr "" -#: src/Admin/OrderLicenseController.php:341 -#: src/Frontend/AccountController.php:314 -#: src/Frontend/AccountController.php:346 +#: src/Admin/OrderLicenseController.php:373 +#: src/Checkout/CheckoutBlocksIntegration.php:126 +#: src/Frontend/AccountController.php:427 +#: src/Frontend/AccountController.php:459 msgid "Please enter a valid domain." msgstr "" -#: src/Admin/OrderLicenseController.php:342 +#: src/Admin/OrderLicenseController.php:374 msgid "Generating..." msgstr "" -#: src/Admin/OrderLicenseController.php:362 -#: src/Admin/OrderLicenseController.php:464 +#: src/Admin/OrderLicenseController.php:394 +#: src/Admin/OrderLicenseController.php:496 msgid "Invalid order ID." msgstr "" -#: src/Admin/OrderLicenseController.php:373 -#: src/Admin/OrderLicenseController.php:411 +#: src/Admin/OrderLicenseController.php:405 +#: src/Admin/OrderLicenseController.php:443 msgid "Invalid domain format." msgstr "" -#: src/Admin/OrderLicenseController.php:381 +#: src/Admin/OrderLicenseController.php:413 msgid "Order domain updated." msgstr "" -#: src/Admin/OrderLicenseController.php:417 -#: src/Frontend/AccountController.php:352 +#: src/Admin/OrderLicenseController.php:449 +#: src/Frontend/AccountController.php:465 #: src/Frontend/DownloadController.php:117 msgid "License not found." msgstr "" -#: src/Admin/OrderLicenseController.php:425 +#: src/Admin/OrderLicenseController.php:457 msgid "License domain updated." msgstr "" -#: src/Admin/OrderLicenseController.php:429 +#: src/Admin/OrderLicenseController.php:461 msgid "Failed to update license domain." msgstr "" -#: src/Admin/OrderLicenseController.php:474 +#: src/Admin/OrderLicenseController.php:506 msgid "Order must be paid before licenses can be generated." msgstr "" -#: src/Admin/OrderLicenseController.php:480 +#: src/Admin/OrderLicenseController.php:520 msgid "Please set the order domain before generating licenses." msgstr "" -#: src/Admin/OrderLicenseController.php:521 +#: src/Admin/OrderLicenseController.php:529 #, php-format msgid "%d license generated successfully." msgid_plural "%d licenses generated successfully." msgstr[0] "" msgstr[1] "" -#: src/Admin/OrderLicenseController.php:534 +#: src/Admin/OrderLicenseController.php:542 msgid "All licenses already exist for this order." msgstr "" -#: src/Admin/SettingsController.php:54 -msgid "Licensed Products" -msgstr "" - -#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:128 -msgid "Plugin License" -msgstr "" - -#: src/Admin/SettingsController.php:65 -msgid "Default Settings" -msgstr "" - -#: src/Admin/SettingsController.php:66 -msgid "Notifications" -msgstr "" - -#: src/Admin/SettingsController.php:130 -msgid "" -"Configure the license for this plugin. A valid license is required for " -"frontend features to work." -msgstr "" - -#: src/Admin/SettingsController.php:134 -msgid "License Server URL" -msgstr "" - -#: src/Admin/SettingsController.php:136 -msgid "The URL of the license server (e.g., https://shop.example.com)." -msgstr "" - -#: src/Admin/SettingsController.php:144 -msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." -msgstr "" - -#: src/Admin/SettingsController.php:150 -msgid "Server Secret (Optional)" -msgstr "" - -#: src/Admin/SettingsController.php:152 -msgid "" -"If the license server uses signed responses, enter the shared secret here " -"for enhanced security." -msgstr "" - -#: src/Admin/SettingsController.php:170 -msgid "Default License Settings" -msgstr "" - -#: src/Admin/SettingsController.php:172 -msgid "" -"These settings serve as defaults for new licensed products. Individual " -"product settings override these defaults." -msgstr "" - -#: src/Admin/SettingsController.php:176 -msgid "Default Max Activations" -msgstr "" - -#: src/Admin/SettingsController.php:178 -msgid "Default maximum number of domain activations per license." -msgstr "" - -#: src/Admin/SettingsController.php:187 -msgid "Default License Validity (Days)" -msgstr "" - -#: src/Admin/SettingsController.php:189 -msgid "" -"Default number of days a license is valid. Leave empty or set to 0 for " -"lifetime licenses." -msgstr "" - -#: src/Admin/SettingsController.php:199 -msgid "Default Bind to Major Version" -msgstr "" - -#: src/Admin/SettingsController.php:201 -msgid "" -"If enabled, licenses are bound to the major version at purchase time by " -"default." -msgstr "" - -#: src/Admin/SettingsController.php:219 -msgid "Expiration Warning Schedule" -msgstr "" - -#: src/Admin/SettingsController.php:223 -#, 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:225 -msgid "WooCommerce > Settings > Emails > License Expiration Warning" -msgstr "" - -#: src/Admin/SettingsController.php:230 -msgid "First Warning (Days Before)" -msgstr "" - -#: src/Admin/SettingsController.php:232 -msgid "Days before expiration to send the first warning email." -msgstr "" - -#: src/Admin/SettingsController.php:241 -msgid "Second Warning (Days Before)" -msgstr "" - -#: src/Admin/SettingsController.php:243 -msgid "" -"Days before expiration to send the second warning email. Set to 0 to disable." -msgstr "" - -#: src/Admin/SettingsController.php:283 -msgid "Running on localhost - license validation bypassed." -msgstr "" - -#: src/Admin/SettingsController.php:291 -msgid "License is valid and active." -msgstr "" - -#: src/Admin/SettingsController.php:297 -msgid "License is not valid. Frontend features are disabled." -msgstr "" - -#: src/Admin/SettingsController.php:308 src/Admin/SettingsController.php:344 -msgid "Verify License" -msgstr "" - -#: src/Admin/SettingsController.php:322 -msgid "Verifying..." -msgstr "" - -#: src/Admin/SettingsController.php:341 -msgid "Request failed." -msgstr "" - -#: src/Admin/SettingsController.php:458 -msgid "Insufficient permissions." -msgstr "" - -#: src/Admin/SettingsController.php:467 -msgid "License verified successfully!" -msgstr "" - -#: src/Admin/SettingsController.php:469 -msgid "License validation failed." -msgstr "" - -#: src/Admin/VersionAdminController.php:58 -msgid "Product Versions" -msgstr "" - -#: src/Admin/VersionAdminController.php:78 -msgid "Add New Version" -msgstr "" - -#: src/Admin/VersionAdminController.php:84 -msgid "Use semantic versioning (e.g., 1.0.0)" -msgstr "" - -#: src/Admin/VersionAdminController.php:88 -#: src/Admin/VersionAdminController.php:137 -msgid "Download File" -msgstr "" - -#: src/Admin/VersionAdminController.php:93 -msgid "Select File" -msgstr "" - -#: src/Admin/VersionAdminController.php:96 -#: src/Admin/VersionAdminController.php:110 -msgid "Remove" -msgstr "" - -#: src/Admin/VersionAdminController.php:98 -msgid "" -"Upload or select a file from the media library. Version will be auto-" -"detected from filename (e.g., plugin-v1.2.3.zip)." -msgstr "" - -#: src/Admin/VersionAdminController.php:102 -msgid "Checksum File" -msgstr "" - -#: src/Admin/VersionAdminController.php:107 -msgid "Select Checksum File" -msgstr "" - -#: src/Admin/VersionAdminController.php:112 -msgid "" -"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." -msgstr "" - -#: src/Admin/VersionAdminController.php:116 -#: src/Admin/VersionAdminController.php:139 -msgid "Release Notes" -msgstr "" - -#: src/Admin/VersionAdminController.php:124 -msgid "Add Version" -msgstr "" - -#: src/Admin/VersionAdminController.php:132 -msgid "Existing Versions" -msgstr "" - -#: src/Admin/VersionAdminController.php:138 -msgid "SHA256" -msgstr "" - -#: src/Admin/VersionAdminController.php:141 -msgid "Released" -msgstr "" - -#: src/Admin/VersionAdminController.php:148 -msgid "No versions found. Add your first version above." -msgstr "" - -#: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:396 -msgid "Uploaded file" -msgstr "" - -#: src/Admin/VersionAdminController.php:169 -#: src/Admin/VersionAdminController.php:400 -msgid "No download file" -msgstr "" - -#: src/Admin/VersionAdminController.php:232 -msgid "Are you sure you want to delete this version?" -msgstr "" - -#: src/Admin/VersionAdminController.php:233 -msgid "Please enter a version number." -msgstr "" - -#: src/Admin/VersionAdminController.php:234 -msgid "Please enter a valid version number (e.g., 1.0.0)." -msgstr "" - -#: src/Admin/VersionAdminController.php:235 -msgid "An error occurred. Please try again." -msgstr "" - -#: src/Admin/VersionAdminController.php:236 -msgid "Select Download File" -msgstr "" - -#: src/Admin/VersionAdminController.php:237 -msgid "Use this file" -msgstr "" - -#: src/Admin/VersionAdminController.php:238 -msgid "" -"Invalid checksum file format. File must contain a 64-character SHA256 hash." -msgstr "" - -#: src/Admin/VersionAdminController.php:239 -msgid "Failed to read checksum file." -msgstr "" - -#: src/Admin/VersionAdminController.php:269 -msgid "Product ID and version are required." -msgstr "" - -#: src/Admin/VersionAdminController.php:274 -msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." -msgstr "" - -#: src/Admin/VersionAdminController.php:279 -msgid "This version already exists." -msgstr "" - -#: src/Admin/VersionAdminController.php:285 -msgid "Product not found." -msgstr "" - -#: src/Admin/VersionAdminController.php:289 -msgid "This product is not a licensed product." -msgstr "" - -#: src/Admin/VersionAdminController.php:306 -msgid "Failed to create version." -msgstr "" - -#: src/Admin/VersionAdminController.php:314 -msgid "Version added successfully." -msgstr "" - -#: src/Admin/VersionAdminController.php:334 -#: src/Admin/VersionAdminController.php:361 -msgid "Version ID is required." -msgstr "" - -#: src/Admin/VersionAdminController.php:340 -msgid "Failed to delete version." -msgstr "" - -#: src/Admin/VersionAdminController.php:343 -msgid "Version deleted successfully." -msgstr "" - -#: src/Admin/VersionAdminController.php:367 -msgid "Failed to update version." -msgstr "" - -#: src/Admin/VersionAdminController.php:371 -msgid "Version updated successfully." -msgstr "" - #: src/Api/RestApiController.php:84 msgid "Too many requests. Please try again later." msgstr "" #: src/Api/RestApiController.php:345 src/Api/RestApiController.php:378 -#: src/License/LicenseManager.php:357 +#: src/License/LicenseManager.php:403 msgid "License key not found." msgstr "" @@ -1235,376 +1266,105 @@ msgstr "" msgid "License activated successfully." msgstr "" -#: src/Checkout/CheckoutBlocksIntegration.php:101 -#: src/Checkout/CheckoutController.php:81 -msgid "Domain for License Activation" -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:103 -#: src/Checkout/CheckoutController.php:93 -msgid "" -"Enter the domain where you will use this license (without http:// or www)." -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:104 -#: src/Checkout/CheckoutController.php:78 +#: src/Checkout/CheckoutController.php:119 +#: src/Checkout/CheckoutBlocksIntegration.php:78 +#: src/Checkout/CheckoutBlocksIntegration.php:125 msgid "License Domain" msgstr "" -#: src/Checkout/CheckoutBlocksIntegration.php:105 -msgid "Please enter a valid domain for your license activation." -msgstr "" - -#: src/Checkout/CheckoutController.php:82 +#: src/Checkout/CheckoutController.php:123 +#: src/Checkout/CheckoutController.php:179 msgid "required" msgstr "" -#: src/Checkout/CheckoutController.php:115 -msgid "Please enter a domain for your license activation." +#: src/Checkout/CheckoutController.php:134 +#: src/Checkout/CheckoutBlocksIntegration.php:122 +msgid "" +"Enter the domain where you will use the license (without http:// or www)." msgstr "" -#: src/Checkout/CheckoutController.php:125 -msgid "Please enter a valid domain name." +#: src/Checkout/CheckoutController.php:148 +#: src/Checkout/CheckoutBlocksIntegration.php:124 +msgid "License Domains" msgstr "" -#: src/Checkout/CheckoutController.php:164 -#: src/Checkout/CheckoutController.php:181 -#: src/Checkout/CheckoutController.php:185 +#: src/Checkout/CheckoutController.php:150 +#: src/Checkout/CheckoutBlocksIntegration.php:121 +msgid "Enter a unique domain for each license (without http:// or www)." +msgstr "" + +#: src/Checkout/CheckoutController.php:175 +#: src/Checkout/CheckoutBlocksIntegration.php:128 +#, php-format +msgid "License %d:" +msgstr "" + +#: src/Checkout/CheckoutController.php:258 +msgid "Please enter a domain for your license." +msgstr "" + +#: src/Checkout/CheckoutController.php:264 +msgid "Please enter a valid domain for your license." +msgstr "" + +#: src/Checkout/CheckoutController.php:287 +#, php-format +msgid "Please enter a domain for %1$s (License %2$d)." +msgstr "" + +#: src/Checkout/CheckoutController.php:302 +#, php-format +msgid "Please enter a valid domain for %1$s (License %2$d)." +msgstr "" + +#: src/Checkout/CheckoutController.php:316 +#, php-format +msgid "" +"The domain \"%1$s\" is used multiple times for %2$s. Each license requires a " +"unique domain." +msgstr "" + +#: src/Checkout/CheckoutController.php:419 +#: src/Checkout/CheckoutController.php:466 +#: src/Checkout/CheckoutController.php:470 msgid "License Domain:" msgstr "" -#: src/Checkout/StoreApiExtension.php:85 +#: src/Checkout/CheckoutController.php:432 +#: src/Checkout/CheckoutController.php:483 +#: src/Checkout/CheckoutController.php:492 +msgid "License Domains:" +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:85 +msgid "Enter a valid domain (without http:// or www)" +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:127 +msgid "Each license requires a unique domain." +msgstr "" + +#: src/Checkout/StoreApiExtension.php:93 +msgid "Domains for license activation by product" +msgstr "" + +#: src/Checkout/StoreApiExtension.php:117 msgid "Domain for license activation" msgstr "" -#: src/Email/LicenseEmailController.php:212 -#: src/Email/LicenseEmailController.php:216 -#: src/Email/LicenseEmailController.php:320 -#: src/Email/LicenseExpirationEmail.php:207 -#: src/Email/LicenseExpirationEmail.php:270 -#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 -#: src/Frontend/AccountController.php:190 -msgid "License Key:" -msgstr "" - -#: src/Email/LicenseEmailController.php:256 -msgid "Your License Keys" -msgstr "" - -#: src/Email/LicenseEmailController.php:260 -#: src/Email/LicenseEmailController.php:315 -msgid "Licensed Domain:" -msgstr "" - -#: src/Email/LicenseEmailController.php:287 -#: src/Email/LicenseEmailController.php:326 -#: src/Frontend/AccountController.php:218 -msgid "Never" -msgstr "" - -#: src/Email/LicenseEmailController.php:296 -#: src/Email/LicenseEmailController.php:330 -msgid "You can also view your licenses in your account under \"Licenses\"." -msgstr "" - -#: src/Email/LicenseEmailController.php:311 -msgid "YOUR LICENSE KEYS" -msgstr "" - -#: src/Email/LicenseEmailController.php:323 -#: src/Email/LicenseExpirationEmail.php:219 -#: src/Email/LicenseExpirationEmail.php:272 -#: src/Frontend/AccountController.php:213 -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" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:107 -#: src/Email/LicenseExpiredEmail.php:99 src/Frontend/AccountController.php:140 -#: src/License/LicenseManager.php:760 src/Product/VersionManager.php:349 -#: src/Product/VersionManager.php:361 -msgid "Unknown Product" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:176 -#: src/Email/LicenseExpirationEmail.php:246 -#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 -#, php-format -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 -#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 -msgid "Product:" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:215 -#: src/Email/LicenseExpirationEmail.php:271 -#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 -#: src/Frontend/AccountController.php:201 -msgid "Domain:" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:235 -#: src/Email/LicenseExpirationEmail.php:281 -#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 -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 "" - -#: src/Email/LicenseExpirationEmail.php:301 -#: src/Email/LicenseExpiredEmail.php:288 -#, php-format -msgid "Available placeholders: %s" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:307 -#: src/Email/LicenseExpiredEmail.php:294 -msgid "Enable/Disable" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:309 -#: src/Email/LicenseExpiredEmail.php:296 -msgid "Enable this email notification" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:313 -#: src/Email/LicenseExpiredEmail.php:300 -msgid "Subject" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:321 -#: src/Email/LicenseExpiredEmail.php:308 -msgid "Email heading" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:329 -#: src/Email/LicenseExpiredEmail.php:316 -msgid "Additional content" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:330 -#: src/Email/LicenseExpiredEmail.php:317 -msgid "Text to appear below the main email content." -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:338 -#: src/Email/LicenseExpiredEmail.php:325 -msgid "Email type" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:340 -#: src/Email/LicenseExpiredEmail.php:327 -msgid "Choose which format of email to send." -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 -msgid "License Expired" -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:51 -msgid "" -"License expired emails are sent to customers when their licenses have " -"expired." -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:68 -msgid "[{site_title}] Your license for {product_name} has expired" -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 -#, php-format -msgid "Your license for %1$s has expired on %2$s." -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 -msgid "" -"Your license is no longer valid and the product will stop working until you " -"renew." -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 -msgid "Expired License Details" -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 -msgid "Expired on:" -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 -msgid "Status:" -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:278 -msgid "To continue using this product, please renew your license." -msgstr "" - -#: src/Frontend/AccountController.php:104 -msgid "Please log in to view your licenses." -msgstr "" - -#: src/Frontend/AccountController.php:165 -msgid "You have no licenses yet." -msgstr "" - -#: src/Frontend/AccountController.php:226 -msgid "Available Downloads" -msgstr "" - -#: src/Frontend/AccountController.php:232 -#, php-format -msgid "Version %s" -msgstr "" - -#: src/Frontend/AccountController.php:311 -#: src/Frontend/AccountController.php:378 -msgid "License transferred successfully!" -msgstr "" - -#: src/Frontend/AccountController.php:312 -msgid "Transfer failed. Please try again." -msgstr "" - -#: src/Frontend/AccountController.php:313 -msgid "" -"Are you sure you want to transfer this license to a new domain? This action " -"cannot be undone." -msgstr "" - -#: src/Frontend/AccountController.php:332 -msgid "Please log in to transfer a license." -msgstr "" - -#: src/Frontend/AccountController.php:338 -msgid "Invalid license." -msgstr "" - -#: src/Frontend/AccountController.php:356 -msgid "You do not have permission to transfer this license." -msgstr "" - -#: src/Frontend/AccountController.php:361 -msgid "Revoked licenses cannot be transferred." -msgstr "" - -#: src/Frontend/AccountController.php:365 -msgid "Expired licenses cannot be transferred." -msgstr "" - -#: src/Frontend/AccountController.php:370 -msgid "The new domain is the same as the current domain." -msgstr "" - -#: src/Frontend/AccountController.php:382 -msgid "Failed to transfer license. Please try again." -msgstr "" - -#: src/Frontend/DownloadController.php:77 -#: src/Frontend/DownloadController.php:101 -msgid "Invalid download link." -msgstr "" - -#: src/Frontend/DownloadController.php:78 -#: src/Frontend/DownloadController.php:88 -#: src/Frontend/DownloadController.php:102 -#: src/Frontend/DownloadController.php:118 -#: src/Frontend/DownloadController.php:128 -#: src/Frontend/DownloadController.php:137 -#: src/Frontend/DownloadController.php:147 -#: src/Frontend/DownloadController.php:156 -#: src/Frontend/DownloadController.php:165 -#: src/Frontend/DownloadController.php:187 -#: src/Frontend/DownloadController.php:203 -msgid "Download Error" -msgstr "" - -#: src/Frontend/DownloadController.php:87 -msgid "Invalid download link format." -msgstr "" - -#: src/Frontend/DownloadController.php:127 -msgid "You do not have permission to download this file." -msgstr "" - -#: src/Frontend/DownloadController.php:136 -msgid "Your license is not active. Please contact support." -msgstr "" - -#: src/Frontend/DownloadController.php:146 -msgid "Version not found." -msgstr "" - -#: src/Frontend/DownloadController.php:155 -msgid "Version does not match your licensed product." -msgstr "" - -#: src/Frontend/DownloadController.php:164 -msgid "This version is no longer available for download." -msgstr "" - -#: src/Frontend/DownloadController.php:186 -msgid "No download file available for this version." -msgstr "" - -#: src/Frontend/DownloadController.php:202 -msgid "Download file not found." -msgstr "" - -#: src/License/LicenseManager.php:366 +#: src/License/LicenseManager.php:412 msgid "This license has been revoked." msgstr "" -#: src/License/LicenseManager.php:376 +#: src/License/LicenseManager.php:422 msgid "This license has expired." msgstr "" -#: src/License/LicenseManager.php:384 +#: src/License/LicenseManager.php:430 msgid "This license is inactive." msgstr "" -#: src/License/LicenseManager.php:394 +#: src/License/LicenseManager.php:440 msgid "This license is not valid for this domain." msgstr "" @@ -1616,19 +1376,6 @@ msgstr "" msgid "Could not connect to license server." msgstr "" -#: src/Plugin.php:260 -msgid "WC Licensed Product" -msgstr "" - -#: src/Plugin.php:261 -msgid "" -"Plugin license is not configured or invalid. Frontend features are disabled." -msgstr "" - -#: src/Plugin.php:262 -msgid "Configure License" -msgstr "" - #: src/Product/LicensedProductType.php:61 msgid "Licensed Product" msgstr "" @@ -1701,6 +1448,344 @@ msgstr "" msgid "File checksum does not match. Expected: %1$s, Got: %2$s" msgstr "" +#: src/Frontend/AccountController.php:104 +msgid "Please log in to view your licenses." +msgstr "" + +#: src/Frontend/AccountController.php:220 +msgid "You have no licenses yet." +msgstr "" + +#: src/Frontend/AccountController.php:242 +#, php-format +msgid "Order #%s" +msgstr "" + +#: src/Frontend/AccountController.php:293 +msgid "Available Downloads" +msgstr "" + +#: src/Frontend/AccountController.php:302 +#: src/Frontend/AccountController.php:335 +#, php-format +msgid "Version %s" +msgstr "" + +#: src/Frontend/AccountController.php:304 +msgid "Latest" +msgstr "" + +#: src/Frontend/AccountController.php:324 +#, php-format +msgid "Older versions (%d)" +msgstr "" + +#: src/Frontend/AccountController.php:424 +#: src/Frontend/AccountController.php:491 +msgid "License transferred successfully!" +msgstr "" + +#: src/Frontend/AccountController.php:425 +msgid "Transfer failed. Please try again." +msgstr "" + +#: src/Frontend/AccountController.php:426 +msgid "" +"Are you sure you want to transfer this license to a new domain? This action " +"cannot be undone." +msgstr "" + +#: src/Frontend/AccountController.php:445 +msgid "Please log in to transfer a license." +msgstr "" + +#: src/Frontend/AccountController.php:451 +msgid "Invalid license." +msgstr "" + +#: src/Frontend/AccountController.php:469 +msgid "You do not have permission to transfer this license." +msgstr "" + +#: src/Frontend/AccountController.php:474 +msgid "Revoked licenses cannot be transferred." +msgstr "" + +#: src/Frontend/AccountController.php:478 +msgid "Expired licenses cannot be transferred." +msgstr "" + +#: src/Frontend/AccountController.php:483 +msgid "The new domain is the same as the current domain." +msgstr "" + +#: src/Frontend/AccountController.php:495 +msgid "Failed to transfer license. Please try again." +msgstr "" + +#: src/Frontend/DownloadController.php:77 +#: src/Frontend/DownloadController.php:101 +msgid "Invalid download link." +msgstr "" + +#: src/Frontend/DownloadController.php:78 +#: src/Frontend/DownloadController.php:88 +#: src/Frontend/DownloadController.php:102 +#: src/Frontend/DownloadController.php:118 +#: src/Frontend/DownloadController.php:128 +#: src/Frontend/DownloadController.php:137 +#: src/Frontend/DownloadController.php:147 +#: src/Frontend/DownloadController.php:156 +#: src/Frontend/DownloadController.php:165 +#: src/Frontend/DownloadController.php:187 +#: src/Frontend/DownloadController.php:203 +msgid "Download Error" +msgstr "" + +#: src/Frontend/DownloadController.php:87 +msgid "Invalid download link format." +msgstr "" + +#: src/Frontend/DownloadController.php:127 +msgid "You do not have permission to download this file." +msgstr "" + +#: src/Frontend/DownloadController.php:136 +msgid "Your license is not active. Please contact support." +msgstr "" + +#: src/Frontend/DownloadController.php:146 +msgid "Version not found." +msgstr "" + +#: src/Frontend/DownloadController.php:155 +msgid "Version does not match your licensed product." +msgstr "" + +#: src/Frontend/DownloadController.php:164 +msgid "This version is no longer available for download." +msgstr "" + +#: src/Frontend/DownloadController.php:186 +msgid "No download file available for this version." +msgstr "" + +#: src/Frontend/DownloadController.php:202 +msgid "Download file not found." +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" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:176 +#: src/Email/LicenseExpirationEmail.php:246 +#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 +#, php-format +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 +#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 +msgid "Product:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:207 +#: src/Email/LicenseExpirationEmail.php:270 +#: src/Email/LicenseEmailController.php:343 +#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 +msgid "License Key:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:215 +#: src/Email/LicenseExpirationEmail.php:271 +#: src/Email/LicenseEmailController.php:345 +#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 +msgid "Domain:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:219 +#: src/Email/LicenseExpirationEmail.php:272 +#: src/Email/LicenseEmailController.php:347 +msgid "Expires:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:235 +#: src/Email/LicenseExpirationEmail.php:281 +#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 +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 "" + +#: src/Email/LicenseExpirationEmail.php:301 +#: src/Email/LicenseExpiredEmail.php:288 +#, php-format +msgid "Available placeholders: %s" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:307 +#: src/Email/LicenseExpiredEmail.php:294 +msgid "Enable/Disable" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:309 +#: src/Email/LicenseExpiredEmail.php:296 +msgid "Enable this email notification" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:313 +#: src/Email/LicenseExpiredEmail.php:300 +msgid "Subject" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:321 +#: src/Email/LicenseExpiredEmail.php:308 +msgid "Email heading" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:329 +#: src/Email/LicenseExpiredEmail.php:316 +msgid "Additional content" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:330 +#: src/Email/LicenseExpiredEmail.php:317 +msgid "Text to appear below the main email content." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:338 +#: src/Email/LicenseExpiredEmail.php:325 +msgid "Email type" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:340 +#: src/Email/LicenseExpiredEmail.php:327 +msgid "Choose which format of email to send." +msgstr "" + +#: src/Email/LicenseEmailController.php:212 +#: src/Email/LicenseEmailController.php:220 +msgid "License Keys:" +msgstr "" + +#: src/Email/LicenseEmailController.php:268 +msgid "Your License Keys" +msgstr "" + +#: src/Email/LicenseEmailController.php:277 +#, php-format +msgid "%d license" +msgid_plural "%d licenses" +msgstr[0] "" +msgstr[1] "" + +#: src/Email/LicenseEmailController.php:308 +#: src/Email/LicenseEmailController.php:352 +msgid "Never" +msgstr "" + +#: src/Email/LicenseEmailController.php:319 +#: src/Email/LicenseEmailController.php:357 +msgid "You can also view your licenses in your account under \"Licenses\"." +msgstr "" + +#: src/Email/LicenseEmailController.php:332 +msgid "YOUR LICENSE KEYS" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 +msgid "License Expired" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:51 +msgid "" +"License expired emails are sent to customers when their licenses have " +"expired." +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:68 +msgid "[{site_title}] Your license for {product_name} has expired" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 +#, php-format +msgid "Your license for %1$s has expired on %2$s." +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 +msgid "" +"Your license is no longer valid and the product will stop working until you " +"renew." +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 +msgid "Expired License Details" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 +msgid "Expired on:" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 +msgid "Status:" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:278 +msgid "To continue using this product, please renew your license." +msgstr "" + +#: src/Plugin.php:318 +msgid "WC Licensed Product" +msgstr "" + +#: src/Plugin.php:319 +msgid "" +"Plugin license is not configured or invalid. Frontend features are disabled." +msgstr "" + +#: src/Plugin.php:320 +msgid "Configure License" +msgstr "" + #: wc-licensed-product.php:61 #, php-format msgid "%s requires WooCommerce to be installed and active." diff --git a/src/Admin/OrderLicenseController.php b/src/Admin/OrderLicenseController.php index f9a0d83..ddfee45 100644 --- a/src/Admin/OrderLicenseController.php +++ b/src/Admin/OrderLicenseController.php @@ -94,8 +94,10 @@ final class OrderLicenseController return; } - // Get order domain - $orderDomain = $order->get_meta('_licensed_product_domain'); + // Check for multi-domain format first, then fall back to legacy single domain + $multiDomainData = $order->get_meta('_licensed_product_domains'); + $legacyDomain = $order->get_meta('_licensed_product_domain'); + $hasMultiDomain = !empty($multiDomainData) && is_array($multiDomainData); // Get licenses for this order $licenses = $this->licenseManager->getLicensesByOrder($order->get_id()); @@ -104,23 +106,42 @@ final class OrderLicenseController ?>
-

-

- -

-
- - - - -
+

+ + +

+ +

+
+ + get_name() : __('Unknown Product', 'wc-licensed-product'); + ?> +
+ :
+ +
+ +
+ +

+ +

+
+ + + + +
+

@@ -128,15 +149,26 @@ final class OrderLicenseController

get_items() as $item) { - $product = $item->get_product(); - if ($product && $product->is_type('licensed')) { - $licensedProductCount++; + // Count expected licenses based on domain data + $expectedLicenses = 0; + if ($hasMultiDomain) { + // Multi-domain: count total domains across all products + foreach ($multiDomainData as $item) { + if (isset($item['domains']) && is_array($item['domains'])) { + $expectedLicenses += count($item['domains']); + } + } + } else { + // Legacy: one license per licensed product + foreach ($order->get_items() as $item) { + $product = $item->get_product(); + if ($product && $product->is_type('licensed')) { + $expectedLicenses++; + } } } - $missingLicenses = $licensedProductCount - count($licenses); + $missingLicenses = $expectedLicenses - count($licenses); + $hasDomainData = $hasMultiDomain || !empty($legacyDomain); ?> @@ -150,7 +182,7 @@ final class OrderLicenseController

- is_paid()): ?> + is_paid()): ?>

-

- -
- - - getDomain()); ?> - getStatus(), ['active', 'inactive'], true)): ?> - - - - - getExpiresAt(); - echo $expiresAt - ? esc_html($expiresAt->format(get_option('date_format'))) - : esc_html__('Never', 'wc-licensed-product'); - ?> - -
+
+ +
+
+
+ + + + +
+
+ + + + +
+
+
+ + + + + + + format('Y-m-d')) + : '' . esc_html__('Lifetime', 'wc-licensed-product') . ''; + ?> + +
+
+
- -
+ +

+
+ + + + + ... + + +
+ + + 1): ?> +
+ + +
+
diff --git a/src/License/LicenseManager.php b/src/License/LicenseManager.php index e30125a..2012795 100644 --- a/src/License/LicenseManager.php +++ b/src/License/LicenseManager.php @@ -49,8 +49,11 @@ class LicenseManager ): ?License { global $wpdb; - // Check if license already exists for this order and product - $existing = $this->getLicenseByOrderAndProduct($orderId, $productId); + // Normalize domain first for duplicate detection + $normalizedDomain = $this->normalizeDomain($domain); + + // Check if license already exists for this order, product, and domain + $existing = $this->getLicenseByOrderProductAndDomain($orderId, $productId, $normalizedDomain); if ($existing) { return $existing; } @@ -161,6 +164,49 @@ class LicenseManager return $row ? License::fromArray($row) : null; } + /** + * Get all licenses for an order and product + * + * @return License[] + */ + public function getLicensesByOrderAndProduct(int $orderId, int $productId): array + { + global $wpdb; + + $tableName = Installer::getLicensesTable(); + $rows = $wpdb->get_results( + $wpdb->prepare( + "SELECT * FROM {$tableName} WHERE order_id = %d AND product_id = %d ORDER BY created_at ASC", + $orderId, + $productId + ), + ARRAY_A + ); + + return array_map(fn(array $row) => License::fromArray($row), $rows ?: []); + } + + /** + * Get license by order, product, and domain + */ + public function getLicenseByOrderProductAndDomain(int $orderId, int $productId, string $domain): ?License + { + global $wpdb; + + $tableName = Installer::getLicensesTable(); + $row = $wpdb->get_row( + $wpdb->prepare( + "SELECT * FROM {$tableName} WHERE order_id = %d AND product_id = %d AND domain = %s", + $orderId, + $productId, + $domain + ), + ARRAY_A + ); + + return $row ? License::fromArray($row) : null; + } + /** * Get all licenses for an order */ diff --git a/src/Plugin.php b/src/Plugin.php index 5b3bc37..c4fb703 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -208,15 +208,50 @@ final class Plugin return; } + // Try new multi-domain format first + $domainData = $order->get_meta('_licensed_product_domains'); + if (!empty($domainData) && is_array($domainData)) { + $this->generateLicensesMultiDomain($order, $domainData); + return; + } + + // Fall back to legacy single domain format + $this->generateLicensesSingleDomain($order); + } + + /** + * Generate licenses for new multi-domain format + */ + private function generateLicensesMultiDomain(\WC_Order $order, array $domainData): void + { + $orderId = $order->get_id(); + $customerId = $order->get_customer_id(); + + // Index domains by product ID for quick lookup + $domainsByProduct = []; + foreach ($domainData as $item) { + if (isset($item['product_id']) && isset($item['domains']) && is_array($item['domains'])) { + $domainsByProduct[(int) $item['product_id']] = $item['domains']; + } + } + + // Generate licenses for each licensed product foreach ($order->get_items() as $item) { $product = $item->get_product(); - if ($product && $product->is_type('licensed')) { - $domain = $order->get_meta('_licensed_product_domain'); - if ($domain) { + if (!$product || !$product->is_type('licensed')) { + continue; + } + + $productId = $product->get_id(); + $domains = $domainsByProduct[$productId] ?? []; + + // Generate a license for each domain + foreach ($domains as $domain) { + if (!empty($domain)) { $this->licenseManager->generateLicense( $orderId, - $product->get_id(), - $order->get_customer_id(), + $productId, + $customerId, $domain ); } @@ -224,6 +259,29 @@ final class Plugin } } + /** + * Generate licenses for legacy single domain format + */ + private function generateLicensesSingleDomain(\WC_Order $order): void + { + $domain = $order->get_meta('_licensed_product_domain'); + if (empty($domain)) { + return; + } + + foreach ($order->get_items() as $item) { + $product = $item->get_product(); + if ($product && $product->is_type('licensed')) { + $this->licenseManager->generateLicense( + $order->get_id(), + $product->get_id(), + $order->get_customer_id(), + $domain + ); + } + } + } + /** * Get Twig environment */ diff --git a/templates/frontend/licenses.html.twig b/templates/frontend/licenses.html.twig index d9eb43d..71d1a69 100644 --- a/templates/frontend/licenses.html.twig +++ b/templates/frontend/licenses.html.twig @@ -1,81 +1,130 @@ -{% if not has_licenses %} +{% if not has_packages %}

{{ __('You have no licenses yet.') }}

{% else %}
- {% for item in licenses %} -
-
-

- {% if item.product_url %} - {{ esc_html(item.product_name) }} - {% else %} - {{ esc_html(item.product_name) }} - {% endif %} -

- - {{ esc_html(item.license.status)|capitalize }} + {% for package in packages %} +
+
+
+

+ {% if package.product_url %} + {{ esc_html(package.product_name) }} + {% else %} + {{ esc_html(package.product_name) }} + {% endif %} +

+ + {{ __('Order') }} + {% if package.order_url %} + #{{ esc_html(package.order_number) }} + {% else %} + #{{ esc_html(package.order_number) }} + {% endif %} + +
+ + {{ package.licenses|length }} {{ package.licenses|length == 1 ? __('License') : __('Licenses') }}
-
-
- - - {{ esc_html(item.license.licenseKey) }} - - -
- -
- - {{ __('Domain:') }} - {{ esc_html(item.license.domain) }} - {% if item.license.status == 'active' or item.license.status == 'inactive' %} - - {% endif %} - - {{ __('Expires:') }} - {% if item.license.expiresAt %} - {{ item.license.expiresAt|date('Y-m-d') }} - {% else %} - {{ __('Never') }} - {% endif %} - -
+
+ {% for license in package.licenses %} +
+
+
+ {{ esc_html(license.license_key) }} + + {{ esc_html(license.status)|capitalize }} + +
+
+ + {% if license.is_transferable %} + + {% endif %} +
+
+
+ + + {{ esc_html(license.domain) }} + + + + {% if license.expires_at %} + {{ license.expires_at|date('Y-m-d') }} + {% else %} + {{ __('Lifetime') }} + {% endif %} + +
+
+ {% endfor %}
- {% if item.downloads is defined and item.downloads is not empty %} -
+ {% if package.downloads is defined and package.downloads is not empty %} +

{{ __('Available Downloads') }}

+ + {# Show older versions in collapsible if more than one version exists #} + {% if package.downloads|length > 1 %} +
+ + +
+ {% endif %}
{% endif %}