mirror of
https://github.com/rustdesk/doc.rustdesk.com.git
synced 2026-04-24 00:46:50 +00:00
merge two dialogs to one, add sepa warning
This commit is contained in:
@@ -11,6 +11,7 @@ const defaultCurrencyCopy = {
|
||||
tip: 'The currency you choose will also be used on your invoice.',
|
||||
emailTip: 'After successful payment, you will receive your invoice and license by email. Please enter the correct email address on the next payment page.',
|
||||
businessTip: 'If you need a business invoice with your business name and tax number, please check the "I\'m purchasing as a business" checkbox on the next payment page.',
|
||||
sepaTip: 'EUR payments support SEPA bank debit. Please note: if you choose SEPA, your bank may take up to 5 business days to confirm the payment, and your license will be emailed only after that. If you want to receive your license sooner, we recommend choosing another real-time payment method.',
|
||||
confirm: 'Continue to checkout',
|
||||
cancel: 'Cancel',
|
||||
} as const;
|
||||
@@ -20,13 +21,14 @@ const {
|
||||
subtitle = '',
|
||||
tagline = '',
|
||||
prices = [],
|
||||
currencyCopy = defaultCurrencyCopy,
|
||||
currencyCopy: rawCurrencyCopy,
|
||||
|
||||
id,
|
||||
isDark = false,
|
||||
classes = {},
|
||||
bg = await Astro.slots.render('bg'),
|
||||
} = Astro.props;
|
||||
const currencyCopy = { ...defaultCurrencyCopy, ...(rawCurrencyCopy || {}) };
|
||||
const defaultCurrency = 'USD';
|
||||
---
|
||||
|
||||
@@ -153,6 +155,19 @@ const defaultCurrency = 'USD';
|
||||
</div>
|
||||
</WidgetWrapper>
|
||||
|
||||
<style is:global>
|
||||
.pricing-purchase-dialog-icon.swal2-icon {
|
||||
width: 2.75rem;
|
||||
height: 2.75rem;
|
||||
margin: 1rem auto 0.4rem;
|
||||
border-width: 0.18rem;
|
||||
}
|
||||
|
||||
.pricing-purchase-dialog-icon.swal2-icon .swal2-icon-content {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script is:inline define:vars={{ defaultCurrency, currencyCopy }}>
|
||||
(() => {
|
||||
const ns = (window.__pricing = window.__pricing || {});
|
||||
@@ -168,6 +183,7 @@ const defaultCurrency = 'USD';
|
||||
const CHECKOUT_PATH = '/api/lic/stripe/checkout';
|
||||
const CURRENCIES_URL = '/currencies.json';
|
||||
const CURRENCY_RE = /^[A-Z]{3}$/;
|
||||
const TRIAL_PAID_EQUIVALENT = { trial: 'Individual', Trial: 'Individual', BasicTrial: 'Basic' };
|
||||
|
||||
const normalize = (v) => {
|
||||
const s = String(v || '').trim().toUpperCase();
|
||||
@@ -176,6 +192,11 @@ const defaultCurrency = 'USD';
|
||||
|
||||
const getPageCurrency = () => normalize(new URLSearchParams(location.search).get('currency'));
|
||||
|
||||
const getPageCheckoutType = () => {
|
||||
const value = String(new URLSearchParams(location.search).get('type') || '').trim();
|
||||
return Object.prototype.hasOwnProperty.call(TRIAL_PAID_EQUIVALENT, value) ? value : '';
|
||||
};
|
||||
|
||||
const getLoadedCurrencies = () => (Array.isArray(ns.currencies) ? ns.currencies : []);
|
||||
|
||||
const currencyByRegion = {
|
||||
@@ -227,6 +248,36 @@ const defaultCurrency = 'USD';
|
||||
return normalize(ns.defaultCurrency) || 'USD';
|
||||
};
|
||||
|
||||
const maybeAutoOpenTrialCheckout = () => {
|
||||
const pageType = getPageCheckoutType();
|
||||
if (!pageType) return;
|
||||
|
||||
const pageKey = location.pathname + location.search;
|
||||
if (ns.autoOpenedTrialKey === pageKey || ns.pendingAutoOpenedTrialKey === pageKey) return;
|
||||
ns.pendingAutoOpenedTrialKey = pageKey;
|
||||
const url = 'https://rustdesk.com' + CHECKOUT_PATH + '?type=' + encodeURIComponent(pageType);
|
||||
|
||||
const tryOpen = (attempt = 0) => {
|
||||
if (location.pathname + location.search !== pageKey) {
|
||||
if (ns.pendingAutoOpenedTrialKey === pageKey) ns.pendingAutoOpenedTrialKey = undefined;
|
||||
return;
|
||||
}
|
||||
if (typeof window.gotoBuy === 'function') {
|
||||
ns.pendingAutoOpenedTrialKey = undefined;
|
||||
ns.autoOpenedTrialKey = pageKey;
|
||||
return window.gotoBuy(url);
|
||||
}
|
||||
if (attempt < 120) return setTimeout(() => tryOpen(attempt + 1), 250);
|
||||
if (ns.pendingAutoOpenedTrialKey === pageKey) ns.pendingAutoOpenedTrialKey = undefined;
|
||||
console.warn('pricing: gotoBuy not available, skipping auto-open');
|
||||
};
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', () => tryOpen(), { once: true });
|
||||
} else {
|
||||
tryOpen();
|
||||
}
|
||||
};
|
||||
|
||||
window.getSelectedCurrency = () => normalize(ns.selectedCurrency) || getFallbackCurrency();
|
||||
|
||||
ns.loadCurrencies = () => {
|
||||
@@ -251,6 +302,10 @@ const defaultCurrency = 'USD';
|
||||
new URLSearchParams(location.search).forEach((v, k) => {
|
||||
if (k !== 'currency' && !url.searchParams.has(k)) url.searchParams.append(k, v);
|
||||
});
|
||||
const pageType = getPageCheckoutType();
|
||||
if (pageType && url.searchParams.get('type') === TRIAL_PAID_EQUIVALENT[pageType]) {
|
||||
url.searchParams.set('type', pageType);
|
||||
}
|
||||
if (currency === 'USD') url.searchParams.delete('currency');
|
||||
else url.searchParams.set('currency', currency.toLowerCase());
|
||||
return url.toString();
|
||||
@@ -269,10 +324,20 @@ const defaultCurrency = 'USD';
|
||||
const copy = ns.currencyCopy || currencyCopy;
|
||||
const fallback = currencies.find((c) => c === getFallbackCurrency(pending.preferredCurrency)) || currencies[0];
|
||||
const selectId = 'pricing-currency-swal-select';
|
||||
const sepaTipId = 'pricing-currency-swal-sepa-tip';
|
||||
const options = currencies
|
||||
.map((c) => `<option value="${c}"${c === fallback ? ' selected' : ''}>${c}</option>`)
|
||||
.join('');
|
||||
const infoIcon = '<svg style="margin-top:0.1rem;width:0.85rem;height:0.85rem;flex-shrink:0;color:#94a3b8;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z" clip-rule="evenodd" /></svg>';
|
||||
const infoIcon = '<svg style="margin-top:0.1rem;width:0.85rem;height:0.85rem;flex-shrink:0;color:#94a3b8;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z" clip-rule="evenodd" /></svg>';
|
||||
const sepaIcon = '<svg style="margin-top:0.1rem;width:0.9rem;height:0.9rem;flex-shrink:0;color:#2563eb;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z" clip-rule="evenodd" /></svg>';
|
||||
const updateSepaTipVisibility = () => {
|
||||
const select = document.getElementById(selectId);
|
||||
const sepaTip = document.getElementById(sepaTipId);
|
||||
if (!(select instanceof HTMLSelectElement) || !(sepaTip instanceof HTMLElement)) return;
|
||||
const isEur = select.value === 'EUR';
|
||||
sepaTip.style.display = isEur ? 'flex' : 'none';
|
||||
sepaTip.setAttribute('aria-hidden', isEur ? 'false' : 'true');
|
||||
};
|
||||
|
||||
const result = await Swal.fire({
|
||||
title: copy.title,
|
||||
@@ -284,17 +349,27 @@ const defaultCurrency = 'USD';
|
||||
" onfocus=\"this.style.borderColor='#6366f1';this.style.boxShadow='0 0 0 3px rgba(99,102,241,0.12)'\"" +
|
||||
" onblur=\"this.style.borderColor='rgba(148,163,184,0.4)';this.style.boxShadow='0 1px 3px rgba(15,23,42,0.06)'\"" +
|
||||
'>' + options + '</select>' +
|
||||
'<svg style="pointer-events:none;position:absolute;right:0.75rem;top:50%;transform:translateY(-50%);width:1rem;height:1rem;color:#94a3b8;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /></svg>' +
|
||||
'<svg style="pointer-events:none;position:absolute;right:0.75rem;top:50%;transform:translateY(-50%);width:1rem;height:1rem;color:#94a3b8;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" /></svg>' +
|
||||
'</div>' +
|
||||
'<p style="margin:0.75rem 0 0;display:flex;align-items:flex-start;gap:0.35rem;font-size:0.78rem;line-height:1.55;color:#64748b;">' + infoIcon + '<span>' + copy.emailTip + '</span></p>' +
|
||||
'<p style="margin:0.45rem 0 0;display:flex;align-items:flex-start;gap:0.35rem;font-size:0.78rem;line-height:1.55;color:#64748b;">' + infoIcon + '<span>' + copy.tip + '</span></p>' +
|
||||
'<p style="margin:0.45rem 0 0;display:flex;align-items:flex-start;gap:0.35rem;font-size:0.78rem;line-height:1.55;color:#64748b;">' + infoIcon + '<span>' + copy.businessTip + '</span></p>' +
|
||||
(copy.sepaTip
|
||||
? '<p id="' + sepaTipId + '" aria-hidden="true" style="margin:0.75rem 0 0;display:none;align-items:flex-start;gap:0.45rem;font-size:0.78rem;line-height:1.55;color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe;border-radius:0.75rem;padding:0.7rem 0.8rem;">' + sepaIcon + '<span>' + copy.sepaTip + '</span></p>'
|
||||
: '') +
|
||||
'</div>',
|
||||
showCancelButton: true,
|
||||
reverseButtons: true,
|
||||
confirmButtonText: copy.confirm,
|
||||
cancelButtonText: copy.cancel,
|
||||
focusConfirm: true,
|
||||
didOpen: () => {
|
||||
const select = document.getElementById(selectId);
|
||||
if (select instanceof HTMLSelectElement) {
|
||||
select.addEventListener('change', updateSepaTipVisibility);
|
||||
}
|
||||
updateSepaTipVisibility();
|
||||
},
|
||||
preConfirm: () => {
|
||||
const select = document.getElementById(selectId);
|
||||
if (!(select instanceof HTMLSelectElement)) return fallback;
|
||||
@@ -340,11 +415,13 @@ const defaultCurrency = 'USD';
|
||||
|
||||
ns.selectedCurrency = getPageCurrency() || undefined;
|
||||
ns.loadCurrencies();
|
||||
maybeAutoOpenTrialCheckout();
|
||||
|
||||
document.addEventListener('astro:after-swap', () => {
|
||||
ns.defaultCurrency = defaultCurrency;
|
||||
ns.currencyCopy = currencyCopy;
|
||||
ns.loadCurrencies?.();
|
||||
maybeAutoOpenTrialCheckout();
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
@@ -61,16 +61,16 @@ const metadata = {
|
||||
title="قم بتمكين وصولك عن بُعد باستخدام الخوادم المستضافة ذاتيًا"
|
||||
items={[
|
||||
{
|
||||
title: 'سيادة البيانات',
|
||||
description: 'الامتثال التنظيمي أصبح سهلاً: رست ديسك المستضاف ذاتيًا يضمن سيادة البيانات.',
|
||||
title: 'تحكم كامل في البيانات',
|
||||
description: 'الامتثال التنظيمي أصبح سهلاً: رست ديسك المستضاف ذاتيًا يبقي بياناتك تحت سيطرتك الكاملة.',
|
||||
},
|
||||
{
|
||||
title: 'أمان معزز',
|
||||
description: 'قم بتعزيز أمانك: النشر في الموقع يبقي بياناتك تحت سيطرتك.',
|
||||
title: 'مفتوح المصدر بمستوى عالمي',
|
||||
description: 'مع أكثر من 113 ألف نجمة على جيت هب، يُصنَّف رست ديسك ضمن أفضل 100 مشروع برمجي مفتوح المصدر في العالم، مدعومًا بمجتمع عالمي نشط.',
|
||||
},
|
||||
{
|
||||
title: 'الأداء والموثوقية',
|
||||
description: 'وقت تشغيل مضمون: النشر في الموقع يضمن الأداء الأمثل والحد الأدنى من وقت التوقف.',
|
||||
description: 'شغّله على بنيتك التحتية الخاصة — بدون اعتماد على توفر خدمات SaaS من طرف ثالث، وبدون مشاركة الموارد مع جيران مزعجين.',
|
||||
},
|
||||
{
|
||||
title: 'المرونة والتخصيص',
|
||||
@@ -190,7 +190,7 @@ const metadata = {
|
||||
{ title: 'تنزيلات العميل', amount: '+30 مليون' },
|
||||
{ title: 'تنزيلات دوكر', amount: '+10 مليون' },
|
||||
{ title: 'الأجهزة النشطة', amount: '10M+' },
|
||||
{ title: 'النجوم', amount: '+106 ألف' },
|
||||
{ title: 'النجوم', amount: '+113 ألف' },
|
||||
{ title: 'التفرعات', amount: '+15 ألف' },
|
||||
{ title: 'أعضاء المجتمع', amount: '+50 ألف' },
|
||||
{ title: 'اللغات', amount: '+50' },
|
||||
|
||||
@@ -76,6 +76,7 @@ const currencyCopy = {
|
||||
tip: 'العملة التي تختارها ستُستخدم أيضًا في فاتورتك.',
|
||||
emailTip: 'بعد إتمام الدفع بنجاح، ستتلقى الفاتورة والترخيص عبر البريد الإلكتروني. يرجى إدخال عنوان البريد الإلكتروني الصحيح في صفحة الدفع التالية.',
|
||||
businessTip: 'إذا كنت بحاجة إلى فاتورة عمل تتضمن اسم الشركة ورقمها الضريبي، فيرجى تحديد مربع الاختيار "أقوم بالشراء بصفتي شركة" في صفحة الدفع التالية.',
|
||||
sepaTip: 'مدفوعات اليورو تدعم خصم SEPA البنكي. يرجى ملاحظة أنه إذا اخترت SEPA، فقد يستغرق البنك ما يصل إلى 5 أيام عمل لتأكيد الدفع، ولن نرسل الترخيص إلى بريدك الإلكتروني إلا بعد ذلك. إذا كنت ترغب في استلام الترخيص بشكل أسرع، فننصح باختيار وسيلة دفع فورية أخرى.',
|
||||
confirm: 'متابعة إلى الدفع',
|
||||
cancel: 'إلغاء',
|
||||
};
|
||||
@@ -89,36 +90,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'يرجى التأكيد',
|
||||
html: `<p style="text-align:right">هل تريد المتابعة إلى صفحة الشراء؟ <br><br>يرجى ملاحظة أن ما تشتريه <b style="font-size: 2em">ليس</b> اشتراكًا في <span style="text-decoration:line-through">خدمة البرمجيات كخدمة (SaaS)</span>. <br><br>بدلاً من ذلك، إنه ترخيص لحل <b style="font-size: 2em">استضافة ذاتية</b>، والذي يتطلب منك نشره على خادمك الخاص (خادم سحابي، مثل AWS EC2 أو Azure VM أو Vultr VPS إلخ، أو خادمك المحلي). <br><br>يرجى <b style="font-size: 2em">عدم</b> الشراء إذا كنت لا تعرف ما هي الاستضافة الذاتية`,
|
||||
html: `<div style="text-align:right">
|
||||
<p>ما تشتريه <b style="font-size: 1.5em">ليس</b> اشتراكًا في <span style="text-decoration:line-through">SaaS</span> — إنه ترخيص لحل <b style="font-size: 1.5em">استضافة ذاتية</b> يتطلب منك نشره على خادمك الخاص (مثل AWS EC2 أو Azure VM أو Vultr VPS أو خادمك المحلي).</p>
|
||||
<p style="margin-top:0.75rem">نحن <span class="font-bold text-red-500">لا نقدم استردادًا للأموال</span>. نوصي بشدة باختبار <span class="underline font-bold">خطتنا المجانية للاستضافة الذاتية</span> قبل شراء خطة Pro.</p>
|
||||
<p style="margin-top:0.75rem"><b>يرجى عدم الشراء إذا كنت لا تعرف ما هي الاستضافة الذاتية.</b></p>
|
||||
<p style="margin-top:0.75rem">هل تريد المتابعة إلى صفحة الشراء؟</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'نعم',
|
||||
confirmButtonText: 'نعم، متابعة',
|
||||
cancelButtonText: 'لا',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'يرجى التأكيد',
|
||||
html: `يرجى ملاحظة أننا <span class="text-3xl font-bold">لا</span> نقدم <span class="text-3xl font-bold">استردادًا للأموال</span>. نوصي بشدة <span class="underline font-bold">باختبار خطتنا المجانية للاستضافة الذاتية</span> قبل التفكير في شراء خطتنا الاحترافية. هل ما زلت مهتمًا بالمتابعة؟`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'نعم',
|
||||
cancelButtonText: 'لا',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -65,18 +65,19 @@ const metadata = {
|
||||
title="Stärken Sie Ihren Fernzugriff mit selbst gehosteten Servern"
|
||||
items={[
|
||||
{
|
||||
title: 'Datensouveränität',
|
||||
title: 'Volle Datenkontrolle',
|
||||
description:
|
||||
'Einfache Einhaltung von Vorschriften: Selbst gehostetes RustDesk gewährleistet Datensouveränität.',
|
||||
'Einfache Einhaltung von Vorschriften: Selbst gehostetes RustDesk gibt Ihnen die volle Kontrolle über Ihre Daten.',
|
||||
},
|
||||
{
|
||||
title: 'Verbesserte Sicherheit',
|
||||
description: 'Stärken Sie Ihre Sicherheit: On-Premise-Bereitstellung hält Ihre Daten unter Ihrer Kontrolle.',
|
||||
title: 'Weltklasse-Open-Source',
|
||||
description:
|
||||
'Mit über 113.000 GitHub-Stars zählt RustDesk zu den Top-100-Open-Source-Softwareprojekten weltweit, getragen von einer lebendigen globalen Community.',
|
||||
},
|
||||
{
|
||||
title: 'Leistung und Zuverlässigkeit',
|
||||
description:
|
||||
'Garantierte Verfügbarkeit: On-Premise-Bereitstellung gewährleistet optimale Leistung und minimale Ausfallzeiten.',
|
||||
'Auf Ihrer eigenen Infrastruktur betreiben — keine Abhängigkeit von der Verfügbarkeit von Drittanbieter-SaaS, keine lauten Nachbarn in geteilten Umgebungen.',
|
||||
},
|
||||
{
|
||||
title: 'Flexibilität und Anpassung',
|
||||
@@ -199,7 +200,7 @@ const metadata = {
|
||||
{ title: 'Client-Downloads', amount: '30M+' },
|
||||
{ title: 'Docker-Downloads', amount: '10M+' },
|
||||
{ title: 'Aktive Geräte', amount: '10M+' },
|
||||
{ title: 'Sterne', amount: '106K+' },
|
||||
{ title: 'Sterne', amount: '113K+' },
|
||||
{ title: 'Forks', amount: '15K+' },
|
||||
{ title: 'Community-Mitglieder', amount: '50K+' },
|
||||
{ title: 'Sprachen', amount: '50+' },
|
||||
|
||||
@@ -78,6 +78,7 @@ const currencyCopy = {
|
||||
tip: 'Die von Ihnen gewählte Währung wird auch auf Ihrer Rechnung verwendet.',
|
||||
emailTip: 'Bitte geben Sie auf der folgenden Zahlungsseite die richtige E-Mail-Adresse an, da Sie Ihre Rechnung und Lizenz nach erfolgreicher Zahlung per E-Mail erhalten.',
|
||||
businessTip: 'Wenn Sie eine Geschäftsrechnung mit Firmenname und Steuernummer benötigen, aktivieren Sie bitte auf der folgenden Zahlungsseite das Kontrollkästchen "Ich kaufe als Unternehmen".',
|
||||
sepaTip: 'EUR-Zahlungen unterstützen SEPA-Lastschrift. Bitte beachten Sie: Wenn Sie SEPA wählen, kann Ihre Bank bis zu 5 Werktage benötigen, um die Zahlung zu bestätigen, und Ihre Lizenz wird erst danach per E-Mail versendet. Wenn Sie Ihre Lizenz schneller erhalten möchten, empfehlen wir eine andere Echtzeit-Zahlungsmethode.',
|
||||
confirm: 'Zur Kasse',
|
||||
cancel: 'Abbrechen',
|
||||
};
|
||||
@@ -91,36 +92,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'Bitte bestätigen',
|
||||
html: '<p style="text-align:left">Möchten Sie zur Kaufseite weitergeleitet werden? <br><br>Bitte beachten Sie, dass Sie <b style="font-size: 2em">KEIN</b> <span style="text-decoration:line-through">SaaS (Software as a Service) Abonnement</span> erwerben. <br><br>Stattdessen handelt es sich um eine Lizenz für eine <b style="font-size: 2em">Self-Hosting</b> Lösung, die Sie auf Ihrem eigenen Server bereitstellen müssen (Cloud-Server, z.B. AWS EC2, Azure VM, Vultr VPS etc. oder Ihr eigener On-Premise-Server). <br><br>Bitte <b style="font-size: 2em">kaufen Sie nicht</b>, wenn Sie nicht wissen, was Self-Hosting bedeutet.',
|
||||
html: `<div style="text-align:left">
|
||||
<p>Sie erwerben <b style="font-size: 1.5em">KEIN</b> <span style="text-decoration:line-through">SaaS</span>-Abonnement — es handelt sich um eine Lizenz für eine <b style="font-size: 1.5em">Self-Hosting</b>-Lösung, die Sie auf Ihrem eigenen Server bereitstellen müssen (z. B. AWS EC2, Azure VM, Vultr VPS oder Ihr On-Premise-Server).</p>
|
||||
<p style="margin-top:0.75rem">Wir bieten <span class="font-bold text-red-500">keine Rückerstattungen</span> an. Wir empfehlen dringend, zuerst unseren <span class="underline font-bold">kostenlosen Self-Hosting-Plan zu testen</span>, bevor Sie den Pro-Plan kaufen.</p>
|
||||
<p style="margin-top:0.75rem"><b>Bitte kaufen Sie nicht, wenn Sie nicht wissen, was Self-Hosting bedeutet.</b></p>
|
||||
<p style="margin-top:0.75rem">Möchten Sie zur Kaufseite weitergeleitet werden?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Ja',
|
||||
confirmButtonText: 'Ja, fortfahren',
|
||||
cancelButtonText: 'Nein',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Bitte bestätigen',
|
||||
html: 'Bitte beachten Sie, dass wir <span class="text-3xl font-bold">keine</span> <span class="text-3xl font-bold">Rückerstattungen</span> anbieten. Wir empfehlen dringend, <span class="underline font-bold">unseren kostenlosen Self-Hosting-Plan zu testen</span>, bevor Sie den Kauf unseres Pro-Plans in Erwägung ziehen. Möchten Sie trotzdem fortfahren?',
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Ja',
|
||||
cancelButtonText: 'Nein',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -61,16 +61,16 @@ const metadata = {
|
||||
title="Potencie su acceso remoto con servidores autohospedaje"
|
||||
items={[
|
||||
{
|
||||
title: 'Soberanía de datos',
|
||||
description: 'Cumplimiento normativo facilitado: RustDesk autoalojado garantiza la soberanía de los datos.',
|
||||
title: 'Control total de datos',
|
||||
description: 'Cumplimiento normativo facilitado: RustDesk autoalojado mantiene tus datos bajo tu control total.',
|
||||
},
|
||||
{
|
||||
title: 'Seguridad mejorada',
|
||||
description: 'Fortalezca su seguridad: la implementación en sus instalaciones mantiene sus datos bajo su control.',
|
||||
title: 'Código abierto de clase mundial',
|
||||
description: 'Con más de 113 000 estrellas en GitHub, RustDesk se encuentra entre los 100 mejores proyectos de software de código abierto del mundo, respaldado por una comunidad global vibrante.',
|
||||
},
|
||||
{
|
||||
title: 'Rendimiento y fiabilidad',
|
||||
description: 'Tiempo de actividad garantizado: la implementación en sus instalaciones asegura un rendimiento óptimo y un tiempo de inactividad mínimo.',
|
||||
description: 'Ejecute en su propia infraestructura: sin dependencia de la disponibilidad de SaaS de terceros, sin vecinos ruidosos en entornos compartidos.',
|
||||
},
|
||||
{
|
||||
title: 'Flexibilidad y personalización',
|
||||
@@ -190,7 +190,7 @@ const metadata = {
|
||||
{ title: 'Descargas de clientes', amount: '30M+' },
|
||||
{ title: 'Descargas de Docker', amount: '10M+' },
|
||||
{ title: 'Dispositivos activos', amount: '10M+' },
|
||||
{ title: 'Estrellas', amount: '106K+' },
|
||||
{ title: 'Estrellas', amount: '113K+' },
|
||||
{ title: 'Bifurcaciones', amount: '15K+' },
|
||||
{ title: 'Miembros de la comunidad', amount: '50K+' },
|
||||
{ title: 'Idiomas', amount: '50+' },
|
||||
|
||||
@@ -78,6 +78,7 @@ const currencyCopy = {
|
||||
tip: 'La moneda que elijas también se usará en tu factura.',
|
||||
emailTip: 'Tras completar el pago con éxito, recibirás la factura y la licencia por correo electrónico. Introduce la dirección de correo correcta en la siguiente página de pago.',
|
||||
businessTip: 'Si necesitas una factura de empresa con el nombre de la empresa y el número fiscal, marca la casilla "Estoy comprando como empresa" en la siguiente página de pago.',
|
||||
sepaTip: 'Los pagos en EUR admiten débito bancario SEPA. Ten en cuenta que, si eliges SEPA, tu banco puede tardar hasta 5 días laborables en confirmar el pago, y la licencia se enviará por correo electrónico solo después de eso. Si quieres recibir tu licencia antes, te recomendamos elegir otro método de pago en tiempo real.',
|
||||
confirm: 'Continuar al pago',
|
||||
cancel: 'Cancelar',
|
||||
};
|
||||
@@ -91,36 +92,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'Por favor, confirme',
|
||||
html: '<p style="text-align:left">¿Desea proceder a la página de compra? <br><br>Tenga en cuenta que lo que está comprando <b style="font-size: 2em">NO</b> es una suscripción <span style="text-decoration:line-through">SaaS (Software como Servicio)</span>. <br><br>En su lugar, es una licencia para una solución de <b style="font-size: 2em">alojamiento propio</b>, que requiere que la implemente en su propio servidor (servidor en la nube, por ejemplo, AWS EC2, Azure VM, Vultr VPS, etc., o su servidor local). <br><br>Por favor, <b style="font-size: 2em">no</b> compre si no sabe qué es el alojamiento propio',
|
||||
html: `<div style="text-align:left">
|
||||
<p>Lo que está comprando <b style="font-size: 1.5em">NO</b> es una suscripción <span style="text-decoration:line-through">SaaS</span>: es una licencia para una solución de <b style="font-size: 1.5em">alojamiento propio</b> que requiere que la implemente en su propio servidor (por ejemplo, AWS EC2, Azure VM, Vultr VPS o su servidor local).</p>
|
||||
<p style="margin-top:0.75rem"><span class="font-bold text-red-500">No ofrecemos reembolsos</span>. Recomendamos encarecidamente probar primero nuestro <span class="underline font-bold">plan gratuito de alojamiento propio</span> antes de comprar el plan Pro.</p>
|
||||
<p style="margin-top:0.75rem"><b>Por favor, no compre si no sabe qué es el alojamiento propio.</b></p>
|
||||
<p style="margin-top:0.75rem">¿Desea proceder a la página de compra?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Sí',
|
||||
confirmButtonText: 'Sí, continuar',
|
||||
cancelButtonText: 'No',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Por favor, confirme',
|
||||
html: 'Tenga en cuenta que <span class="text-3xl font-bold">no</span> ofrecemos <span class="text-3xl font-bold">reembolsos</span>. Recomendamos encarecidamente <span class="underline font-bold">probar nuestro plan gratuito de alojamiento propio</span> antes de considerar la compra de nuestro plan Pro. ¿Aún está interesado en continuar?',
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Sí',
|
||||
cancelButtonText: 'No',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -61,16 +61,16 @@ const metadata = {
|
||||
title="Renforcez votre accès à distance avec des serveurs auto-hébergés"
|
||||
items={[
|
||||
{
|
||||
title: 'Souveraineté des données',
|
||||
description: 'Conformité réglementaire facilitée : RustDesk auto-hébergé assure la souveraineté des données.',
|
||||
title: 'Contrôle total des données',
|
||||
description: 'Conformité réglementaire facilitée : RustDesk auto-hébergé vous laisse le contrôle total de vos données.',
|
||||
},
|
||||
{
|
||||
title: 'Sécurité renforcée',
|
||||
description: 'Renforcez votre sécurité : le déploiement sur site garde vos données sous votre contrôle.',
|
||||
title: 'Open source de classe mondiale',
|
||||
description: 'Avec plus de 113 000 étoiles sur GitHub, RustDesk figure parmi les 100 meilleurs projets logiciels open source au monde, porté par une communauté mondiale dynamique.',
|
||||
},
|
||||
{
|
||||
title: 'Performance et fiabilité',
|
||||
description: 'Temps de fonctionnement garanti : le déploiement sur site assure des performances optimales et un temps d\'arrêt minimal.',
|
||||
description: 'Exécutez sur votre propre infrastructure — aucune dépendance à la disponibilité d\'un SaaS tiers, pas de voisins bruyants dans des environnements partagés.',
|
||||
},
|
||||
{
|
||||
title: 'Flexibilité et personnalisation',
|
||||
@@ -190,7 +190,7 @@ const metadata = {
|
||||
{ title: 'Téléchargements clients', amount: '30M+' },
|
||||
{ title: 'Téléchargements Docker', amount: '10M+' },
|
||||
{ title: 'Appareils actifs', amount: '10M+' },
|
||||
{ title: 'Étoiles', amount: '106K+' },
|
||||
{ title: 'Étoiles', amount: '113K+' },
|
||||
{ title: 'Forks', amount: '15K+' },
|
||||
{ title: 'Membres de la communauté', amount: '50K+' },
|
||||
{ title: 'Langues', amount: '50+' },
|
||||
|
||||
@@ -78,6 +78,7 @@ const currencyCopy = {
|
||||
tip: 'La devise choisie sera également utilisée sur votre facture.',
|
||||
emailTip: 'Une fois le paiement effectué, vous recevrez votre facture et votre licence par e-mail. Veuillez saisir la bonne adresse e-mail sur la page de paiement suivante.',
|
||||
businessTip: 'Si vous avez besoin d\'une facture professionnelle avec le nom de l\'entreprise et le numéro fiscal, cochez la case "J\'achète au nom d\'une entreprise" sur la page de paiement suivante.',
|
||||
sepaTip: 'Les paiements en EUR prennent en charge le prélèvement bancaire SEPA. Veuillez noter que, si vous choisissez SEPA, votre banque peut prendre jusqu\'à 5 jours ouvrés pour confirmer le paiement, et la licence ne vous sera envoyée par e-mail qu\'ensuite. Si vous souhaitez recevoir votre licence plus rapidement, nous vous recommandons de choisir un autre moyen de paiement en temps réel.',
|
||||
confirm: 'Continuer vers le paiement',
|
||||
cancel: 'Annuler',
|
||||
};
|
||||
@@ -91,36 +92,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'Veuillez confirmer',
|
||||
html: '<p style="text-align:left">Voulez-vous procéder à la page d\'achat ? <br><br>Veuillez noter que ce que vous achetez <b style="font-size: 2em">N\'EST PAS</b> un abonnement <span style="text-decoration:line-through">SaaS (Logiciel en tant que Service)</span>. <br><br>Il s\'agit plutôt d\'une licence pour une solution <b style="font-size: 2em">auto-hébergée</b>, qui nécessite que vous la déployiez sur votre propre serveur (serveur cloud, par exemple AWS EC2, Azure VM, Vultr VPS, etc., ou votre serveur sur site). <br><br>Veuillez <b style="font-size: 2em">ne pas</b> acheter si vous ne savez pas ce qu\'est l\'auto-hébergement',
|
||||
html: `<div style="text-align:left">
|
||||
<p>Ce que vous achetez <b style="font-size: 1.5em">N'EST PAS</b> un abonnement <span style="text-decoration:line-through">SaaS</span> — il s'agit d'une licence pour une solution <b style="font-size: 1.5em">auto-hébergée</b> qui nécessite que vous la déployiez sur votre propre serveur (par exemple AWS EC2, Azure VM, Vultr VPS ou votre serveur sur site).</p>
|
||||
<p style="margin-top:0.75rem">Nous <span class="font-bold text-red-500">n'offrons pas de remboursements</span>. Nous vous recommandons fortement de tester d'abord notre <span class="underline font-bold">plan auto-hébergé gratuit</span> avant d'acheter le plan Pro.</p>
|
||||
<p style="margin-top:0.75rem"><b>Veuillez ne pas acheter si vous ne savez pas ce qu'est l'auto-hébergement.</b></p>
|
||||
<p style="margin-top:0.75rem">Voulez-vous procéder à la page d'achat ?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Oui',
|
||||
confirmButtonText: 'Oui, continuer',
|
||||
cancelButtonText: 'Non',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Veuillez confirmer',
|
||||
html: 'Veuillez noter que nous <span class="text-3xl font-bold">n\'offrons pas</span> de <span class="text-3xl font-bold">remboursements</span>. Nous vous recommandons fortement de <span class="underline font-bold">tester notre plan auto-hébergé gratuit</span> avant d\'envisager l\'achat de notre plan Pro. Êtes-vous toujours intéressé pour continuer ?',
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Oui',
|
||||
cancelButtonText: 'Non',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -62,16 +62,16 @@ const metadata = {
|
||||
title="Empower your remote access with self-hosted servers"
|
||||
items={[
|
||||
{
|
||||
title: 'Data sovereignty',
|
||||
description: 'Regulatory compliance made easy: self-hosted RustDesk ensures data sovereignty.',
|
||||
title: 'Full data control',
|
||||
description: 'Regulatory compliance made easy: self-hosted RustDesk keeps your data fully under your control.',
|
||||
},
|
||||
{
|
||||
title: 'Enhanced security',
|
||||
description: 'Fortify your security: on-premise deployment keeps your data under your control.',
|
||||
title: 'World-class open source',
|
||||
description: 'With 113K+ GitHub stars, RustDesk ranks among the world\'s top 100 open-source software projects, backed by a thriving global community.',
|
||||
},
|
||||
{
|
||||
title: 'Performance and reliability',
|
||||
description: 'Guaranteed uptime: on-premise deployment ensures optimal performance and minimal downtime.',
|
||||
description: 'Run on your own infrastructure — no dependency on third-party SaaS availability, no shared noisy neighbors.',
|
||||
},
|
||||
{
|
||||
title: 'Flexibility and customization',
|
||||
@@ -192,7 +192,7 @@ const metadata = {
|
||||
{ title: 'Client downloads', amount: '30M+' },
|
||||
{ title: 'Docker downloads', amount: '10M+' },
|
||||
{ title: 'Alive devices', amount: '10M+' },
|
||||
{ title: 'Stars', amount: '106K+' },
|
||||
{ title: 'Stars', amount: '113K+' },
|
||||
{ title: 'Forks', amount: '15K+' },
|
||||
{ title: 'Community members', amount: '50K+' },
|
||||
{ title: 'Languages', amount: '50+' },
|
||||
|
||||
@@ -61,16 +61,16 @@ const metadata = {
|
||||
title="Potenzia il tuo accesso remoto con server self-hosted"
|
||||
items={[
|
||||
{
|
||||
title: 'Sovranità dei dati',
|
||||
description: 'Conformità normativa semplificata: RustDesk self-hosted garantisce la sovranità dei dati.',
|
||||
title: 'Controllo totale dei dati',
|
||||
description: 'Conformità normativa semplificata: RustDesk self-hosted mantiene i tuoi dati sotto il tuo pieno controllo.',
|
||||
},
|
||||
{
|
||||
title: 'Sicurezza migliorata',
|
||||
description: 'Rafforza la tua sicurezza: il deployment on-premise mantiene i tuoi dati sotto il tuo controllo.',
|
||||
title: 'Open source di livello mondiale',
|
||||
description: 'Con oltre 113.000 stelle su GitHub, RustDesk è tra i primi 100 progetti software open source al mondo, supportato da una vivace comunità globale.',
|
||||
},
|
||||
{
|
||||
title: 'Prestazioni e affidabilità',
|
||||
description: 'Uptime garantito: il deployment on-premise assicura prestazioni ottimali e tempi di inattività minimi.',
|
||||
description: 'Esegui sulla tua infrastruttura — nessuna dipendenza dalla disponibilità di SaaS di terze parti, nessun vicino rumoroso in ambienti condivisi.',
|
||||
},
|
||||
{
|
||||
title: 'Flessibilità e personalizzazione',
|
||||
@@ -190,7 +190,7 @@ const metadata = {
|
||||
{ title: 'Download client', amount: '30M+' },
|
||||
{ title: 'Download Docker', amount: '10M+' },
|
||||
{ title: 'Dispositivi attivi', amount: '10M+' },
|
||||
{ title: 'Stelle', amount: '106K+' },
|
||||
{ title: 'Stelle', amount: '113K+' },
|
||||
{ title: 'Fork', amount: '15K+' },
|
||||
{ title: 'Membri della comunità', amount: '50K+' },
|
||||
{ title: 'Lingue', amount: '50+' },
|
||||
|
||||
@@ -78,6 +78,7 @@ const currencyCopy = {
|
||||
tip: 'La valuta scelta verrà utilizzata anche nella fattura.',
|
||||
emailTip: "Dopo il pagamento andato a buon fine, riceverai fattura e licenza via e-mail. Inserisci l'indirizzo e-mail corretto nella pagina di pagamento successiva.",
|
||||
businessTip: 'Se hai bisogno di una fattura aziendale con ragione sociale e partita IVA, seleziona la casella "Sto acquistando come azienda" nella pagina di pagamento successiva.',
|
||||
sepaTip: "I pagamenti in EUR supportano l'addebito bancario SEPA. Tieni presente che, se scegli SEPA, la tua banca potrebbe impiegare fino a 5 giorni lavorativi per confermare il pagamento e la licenza ti sarà inviata via e-mail solo dopo. Se vuoi ricevere la licenza prima, ti consigliamo di scegliere un altro metodo di pagamento in tempo reale.",
|
||||
confirm: 'Continua al pagamento',
|
||||
cancel: 'Annulla',
|
||||
};
|
||||
@@ -91,36 +92,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'Conferma per favore',
|
||||
html: `<p style="text-align:left">Vuoi procedere alla pagina di acquisto? <br><br>Si prega di notare che ciò che stai acquistando <b style="font-size: 2em">NON</b> è un abbonamento <span style="text-decoration:line-through">SaaS (Software as a Service)</span>. <br><br>Invece, è una licenza per una soluzione <b style="font-size: 2em">self-hosting</b>, che richiede di essere distribuita sul tuo server (server cloud, ad esempio AWS EC2, Azure VM, Vultr VPS ecc., o il tuo server on-premise). <br><br>Per favore <b style="font-size: 2em">non</b> acquistare se non sai cosa sia il self-hosting`,
|
||||
html: `<div style="text-align:left">
|
||||
<p>Ciò che stai acquistando <b style="font-size: 1.5em">NON</b> è un abbonamento <span style="text-decoration:line-through">SaaS</span> — è una licenza per una soluzione <b style="font-size: 1.5em">self-hosting</b> che richiede il deployment sul tuo server (ad esempio AWS EC2, Azure VM, Vultr VPS o il tuo server on-premise).</p>
|
||||
<p style="margin-top:0.75rem"><span class="font-bold text-red-500">Non offriamo rimborsi</span>. Ti consigliamo vivamente di testare prima il nostro <span class="underline font-bold">piano gratuito self-hosting</span> prima di acquistare il piano Pro.</p>
|
||||
<p style="margin-top:0.75rem"><b>Per favore, non acquistare se non sai cosa sia il self-hosting.</b></p>
|
||||
<p style="margin-top:0.75rem">Vuoi procedere alla pagina di acquisto?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Sì',
|
||||
confirmButtonText: 'Sì, procedi',
|
||||
cancelButtonText: 'No',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Conferma per favore',
|
||||
html: `Si prega di notare che <span class="text-3xl font-bold">non</span> offriamo <span class="text-3xl font-bold">rimborsi</span>. Ti consigliamo vivamente di <span class="underline font-bold">testare il nostro piano gratuito di self-hosting</span> prima di considerare l'acquisto del nostro piano Pro. Sei ancora interessato a procedere?`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Sì',
|
||||
cancelButtonText: 'No',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -60,16 +60,16 @@ const metadata = {
|
||||
title="セルフホストサーバーでリモートアクセスを強化"
|
||||
items={[
|
||||
{
|
||||
title: 'データ主権',
|
||||
description: '規制遵守が容易に:セルフホストの RustDesk がデータ主権を確保します。',
|
||||
title: 'データの完全な管理',
|
||||
description: '規制遵守が容易に:セルフホストの RustDesk なら、データを完全にご自身で管理できます。',
|
||||
},
|
||||
{
|
||||
title: '強化されたセキュリティ',
|
||||
description: 'セキュリティを強化:オンプレミス展開によりデータを自身の管理下に置きます。',
|
||||
title: '世界クラスのオープンソース',
|
||||
description: 'GitHubで113K+スター。RustDeskは世界のトップ100オープンソースソフトウェアプロジェクトにランクインし、活気あるグローバルコミュニティに支えられています。',
|
||||
},
|
||||
{
|
||||
title: 'パフォーマンスと信頼性',
|
||||
description: '稼働時間保証:オンプレミス展開により最適なパフォーマンスと最小限のダウンタイムを確保します。',
|
||||
description: '自身のインフラ上で稼働 — サードパーティSaaSの可用性に依存せず、共有環境の「うるさい隣人」もいません。',
|
||||
},
|
||||
{
|
||||
title: '柔軟性とカスタマイズ',
|
||||
@@ -189,7 +189,7 @@ const metadata = {
|
||||
{ title: 'クライアントダウンロード数', amount: '3000万+' },
|
||||
{ title: 'Dockerダウンロード数', amount: '1000万+' },
|
||||
{ title: 'アクティブデバイス', amount: '10M+' },
|
||||
{ title: 'スター数', amount: '10.6万+' },
|
||||
{ title: 'スター数', amount: '11.3万+' },
|
||||
{ title: 'フォーク数', amount: '1.5万+' },
|
||||
{ title: 'コミュニティメンバー', amount: '5万+' },
|
||||
{ title: '言語', amount: '50+' },
|
||||
|
||||
@@ -77,6 +77,7 @@ const currencyCopy = {
|
||||
tip: '選択した通貨は、請求書でも使用されます。',
|
||||
emailTip: 'お支払い完了後、請求書とライセンスがメールで届きます。次の決済ページでは正しいメールアドレスを入力してください。',
|
||||
businessTip: '会社名と税番号入りの請求書が必要な場合は、次の決済ページで "事業者として購入する" のチェックボックスをオンにしてください。',
|
||||
sepaTip: 'EUR 決済では SEPA の銀行引き落としに対応しています。SEPA を選択した場合、銀行での着金確認に最大 5 営業日かかることがあり、ライセンスは確認後にのみメールで送信されます。より早くライセンスを受け取りたい場合は、他の即時決済手段をおすすめします。',
|
||||
confirm: '購入手続きへ進む',
|
||||
cancel: 'キャンセル',
|
||||
};
|
||||
@@ -90,36 +91,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: '確認してください',
|
||||
html: `<p style="text-align:left">購入ページに進みますか? <br><br>購入するものは<b style="font-size: 2em">決して</b> <span style="text-decoration:line-through">SaaS(サービスとしてのソフトウェア)</span>サブスクリプションではないことにご注意ください。 <br><br>代わりに、これは<b style="font-size: 2em">セルフホスティング</b>ソリューションのライセンスであり、自身のサーバー(クラウドサーバー、例えばAWS EC2、Azure VM、Vultr VPSなど、または自社のオンプレミスサーバー)にデプロイする必要があります。 <br><br>セルフホスティングが何かわからない場合は、<b style="font-size: 2em">購入しないでください</b>`,
|
||||
html: `<div style="text-align:left">
|
||||
<p>購入するものは<b style="font-size: 1.5em">SaaS</b><span style="text-decoration:line-through">(サービスとしてのソフトウェア)</span>サブスクリプションでは<b style="font-size: 1.5em">ありません</b>。<b style="font-size: 1.5em">セルフホスティング</b>ソリューションのライセンスであり、自身のサーバー(AWS EC2、Azure VM、Vultr VPS、または自社のオンプレミスサーバーなど)にデプロイする必要があります。</p>
|
||||
<p style="margin-top:0.75rem">当社は<span class="font-bold text-red-500">返金を行っておりません</span>。Proプランを購入する前に、まず<span class="underline font-bold">無料のセルフホスティングプランをテスト</span>することを強くお勧めします。</p>
|
||||
<p style="margin-top:0.75rem"><b>セルフホスティングが何かわからない場合は、購入しないでください。</b></p>
|
||||
<p style="margin-top:0.75rem">購入ページに進みますか?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'はい',
|
||||
confirmButtonText: 'はい、続行',
|
||||
cancelButtonText: 'いいえ',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: '確認してください',
|
||||
html: `当社は<span class="text-3xl font-bold">返金を行っていません</span>のでご注意ください。Proプランの購入を検討される前に、<span class="underline font-bold">無料のセルフホスティングプランをテスト</span>することを強くお勧めします。それでも進めますか?`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'はい',
|
||||
cancelButtonText: 'いいえ',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -60,16 +60,16 @@ const metadata = {
|
||||
title="자체 호스팅 서버로 원격 액세스를 강화하세요"
|
||||
items={[
|
||||
{
|
||||
title: '데이터 주권',
|
||||
description: '규제 준수가 쉬워집니다: 자체 호스팅 RustDesk는 데이터 주권을 보장합니다.',
|
||||
title: '데이터 완전 제어',
|
||||
description: '규제 준수가 쉬워집니다: 자체 호스팅 RustDesk는 데이터를 완전히 여러분의 통제 아래 둡니다.',
|
||||
},
|
||||
{
|
||||
title: '강화된 보안',
|
||||
description: '보안을 강화하세요: 온프레미스 배포는 데이터를 제어할 수 있도록 합니다.',
|
||||
title: '세계적 수준의 오픈소스',
|
||||
description: 'GitHub 113K+ 스타, RustDesk는 전 세계 상위 100대 오픈소스 소프트웨어 프로젝트 중 하나로, 활기찬 글로벌 커뮤니티가 뒷받침합니다.',
|
||||
},
|
||||
{
|
||||
title: '성능 및 신뢰성',
|
||||
description: '보장된 가동 시간: 온프레미스 배포는 최적의 성능과 최소한의 다운타임을 보장합니다.',
|
||||
description: '자체 인프라에서 실행하세요 — 제3자 SaaS 가용성에 의존하지 않고, 공유 환경의 시끄러운 이웃도 없습니다.',
|
||||
},
|
||||
{
|
||||
title: '유연성 및 사용자 정의',
|
||||
@@ -189,7 +189,7 @@ const metadata = {
|
||||
{ title: '클라이언트 다운로드', amount: '30M+' },
|
||||
{ title: 'Docker 다운로드', amount: '10M+' },
|
||||
{ title: '활성 장치', amount: '10M+' },
|
||||
{ title: '스타', amount: '106K+' },
|
||||
{ title: '스타', amount: '113K+' },
|
||||
{ title: '포크', amount: '15K+' },
|
||||
{ title: '커뮤니티 회원', amount: '50K+' },
|
||||
{ title: '언어', amount: '50+' },
|
||||
|
||||
@@ -75,6 +75,7 @@ const currencyCopy = {
|
||||
tip: '선택한 통화는 인보이스에도 사용됩니다.',
|
||||
emailTip: '결제가 완료되면 인보이스와 라이선스가 이메일로 발송됩니다. 다음 결제 페이지에서 올바른 이메일 주소를 입력해 주세요.',
|
||||
businessTip: '회사명과 세금 번호가 포함된 사업자용 인보이스가 필요하면 다음 결제 페이지에서 "사업자로 구매합니다" 체크박스를 선택해 주세요.',
|
||||
sepaTip: 'EUR 결제는 SEPA 은행 자동이체를 지원합니다. SEPA를 선택하면 은행에서 결제를 확인하는 데 최대 5영업일이 걸릴 수 있으며, 라이선스는 그 이후에만 이메일로 발송됩니다. 라이선스를 더 빨리 받고 싶다면 다른 실시간 결제 수단을 권장합니다.',
|
||||
confirm: '결제로 계속',
|
||||
cancel: '취소',
|
||||
};
|
||||
@@ -88,36 +89,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: '확인해 주세요',
|
||||
html: `<p style="text-align:left">구매 페이지로 진행하시겠습니까? <br><br>구매하시는 것은 <b style="font-size: 2em">SaaS(서비스형 소프트웨어)</b> 구독이 아닌 <b style="font-size: 2em">자체 호스팅</b> 솔루션의 라이센스입니다. 이 솔루션은 귀하의 서버(클라우드 서버, 예: AWS EC2, Azure VM, Vultr VPS 등)에서 배포해야 합니다. <br><br>자체 호스팅이 무엇인지 모른다면 <b style="font-size: 2em">구매하지 마세요</b>`,
|
||||
html: `<div style="text-align:left">
|
||||
<p>구매하시는 것은 <b style="font-size: 1.5em">SaaS</b><span style="text-decoration:line-through">(서비스형 소프트웨어)</span> 구독이 <b style="font-size: 1.5em">아니라</b> <b style="font-size: 1.5em">자체 호스팅</b> 솔루션의 라이센스이며, 귀하의 서버(예: AWS EC2, Azure VM, Vultr VPS 또는 온프레미스 서버)에 직접 배포해야 합니다.</p>
|
||||
<p style="margin-top:0.75rem"><span class="font-bold text-red-500">환불을 제공하지 않습니다</span>. Pro 플랜을 구매하기 전에 먼저 <span class="underline font-bold">무료 자체 호스팅 플랜을 테스트</span>하시는 것을 강력히 권장합니다.</p>
|
||||
<p style="margin-top:0.75rem"><b>자체 호스팅이 무엇인지 모른다면 구매하지 마세요.</b></p>
|
||||
<p style="margin-top:0.75rem">구매 페이지로 진행하시겠습니까?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '예',
|
||||
confirmButtonText: '예, 진행',
|
||||
cancelButtonText: '아니오',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: '확인해 주세요',
|
||||
html: `환불을 <span class="text-3xl font-bold">제공하지 않습니다</span>. 구매하기 전에 <span class="underline font-bold">무료 자체 호스팅 계획을 테스트</span>하는 것을 강력히 권장합니다. 계속 진행하시겠습니까?`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '예',
|
||||
cancelButtonText: '아니오',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ export const GET: APIRoute = ({ site }) => {
|
||||
'',
|
||||
'## Key capabilities',
|
||||
'- Secure remote desktop access and remote support',
|
||||
'- Self-hosted server deployment for data sovereignty and compliance',
|
||||
'- Self-hosted server deployment for full data control and compliance',
|
||||
'- Cross-platform support for Windows, macOS, Linux, Android, and iOS',
|
||||
'- Web console, permissions, audit logs, SSO, LDAP, and centralized policy controls in Server Pro',
|
||||
'',
|
||||
|
||||
@@ -78,6 +78,7 @@ const currencyCopy = {
|
||||
tip: 'The currency you choose will also be used on your invoice.',
|
||||
emailTip: 'After successful payment, you will receive your invoice and license by email. Please enter the correct email address on the next payment page.',
|
||||
businessTip: 'If you need a business invoice with your business name and tax number, please check the "I\'m purchasing as a business" checkbox on the next payment page.',
|
||||
sepaTip: 'EUR payments support SEPA bank debit. Please note: if you choose SEPA, your bank may take up to 5 business days to confirm the payment, and your license will be emailed only after that. If you want to receive your license sooner, we recommend choosing another real-time payment method.',
|
||||
confirm: 'Continue to checkout',
|
||||
cancel: 'Cancel',
|
||||
};
|
||||
@@ -90,37 +91,33 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'Please Confirm',
|
||||
html: `<p style="text-align:left">Do you want to proceed to the purchase page? <br><br>Please note that what you are purchasing is <b style="font-size: 2em">NOT</b> a <span style="text-decoration:line-through">SaaS(Software as a Service)</span> subscription. <br><br>Instead, it is a license for a <b style="font-size: 2em">self-hosting</b> solution, which requires you to deploy it on your own server (cloud server, e.g. AWS EC2, Azure VM, Vultr VPS etc, or your on-premise server). <br><br>Please <b style="font-size: 2em">don't</b> buy if you don't know what is self-hosting`,
|
||||
html: `<div style="text-align:left">
|
||||
<p>What you are purchasing is <b style="font-size: 1.5em">NOT</b> a <span style="text-decoration:line-through">SaaS</span> subscription — it is a license for a <b style="font-size: 1.5em">self-hosting</b> solution that requires you to deploy it on your own server (e.g. AWS EC2, Azure VM, Vultr VPS, or your on-premise server).</p>
|
||||
<p style="margin-top:0.75rem">We <span class="font-bold text-red-500">do not offer refunds</span>. We strongly recommend testing our <span class="underline font-bold">free self-hosting plan</span> before purchasing the Pro plan.</p>
|
||||
<p style="margin-top:0.75rem"><b>Please don't buy if you don't know what self-hosting is.</b></p>
|
||||
<p style="margin-top:0.75rem">Do you want to proceed to the purchase page?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Yes',
|
||||
confirmButtonText: 'Yes, proceed',
|
||||
cancelButtonText: 'No',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Please Confirm',
|
||||
html: `Please note that we <span class="text-3xl font-bold">don't</span> offer <span class="text-3xl font-bold">refunds</span>. We strongly recommend <span class="underline font-bold">testing our free self-hosting plan</span> before considering the purchase of our Pro plan. Are you still interested in proceeding?`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Yes',
|
||||
cancelButtonText: 'No',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
// Fallback if URL API fails for any reason
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
// Fallback if URL API fails for any reason
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -61,16 +61,16 @@ const metadata = {
|
||||
title="Potencialize seu acesso remoto com servidores auto-hospedados"
|
||||
items={[
|
||||
{
|
||||
title: 'Soberania de dados',
|
||||
description: 'Conformidade regulatória facilitada: o RustDesk auto-hospedado garante a soberania dos dados.',
|
||||
title: 'Controle total dos dados',
|
||||
description: 'Conformidade regulatória facilitada: o RustDesk auto-hospedado mantém seus dados sob seu total controle.',
|
||||
},
|
||||
{
|
||||
title: 'Segurança aprimorada',
|
||||
description: 'Fortifique sua segurança: a implantação local mantém seus dados sob seu controle.',
|
||||
title: 'Código aberto de classe mundial',
|
||||
description: 'Com mais de 113 mil estrelas no GitHub, o RustDesk está entre os 100 principais projetos de software de código aberto do mundo, apoiado por uma comunidade global vibrante.',
|
||||
},
|
||||
{
|
||||
title: 'Desempenho e confiabilidade',
|
||||
description: 'Tempo de atividade garantido: a implantação local garante desempenho ideal e tempo de inatividade mínimo.',
|
||||
description: 'Execute em sua própria infraestrutura — sem dependência da disponibilidade de SaaS de terceiros, sem vizinhos barulhentos em ambientes compartilhados.',
|
||||
},
|
||||
{
|
||||
title: 'Flexibilidade e personalização',
|
||||
@@ -190,7 +190,7 @@ const metadata = {
|
||||
{ title: 'Downloads do cliente', amount: '30M+' },
|
||||
{ title: 'Downloads do Docker', amount: '10M+' },
|
||||
{ title: 'Dispositivos ativos', amount: '10M+' },
|
||||
{ title: 'Estrelas', amount: '106K+' },
|
||||
{ title: 'Estrelas', amount: '113K+' },
|
||||
{ title: 'Forks', amount: '15K+' },
|
||||
{ title: 'Membros da comunidade', amount: '50K+' },
|
||||
{ title: 'Idiomas', amount: '50+' },
|
||||
|
||||
@@ -78,6 +78,7 @@ const currencyCopy = {
|
||||
tip: 'A moeda escolhida também será usada na sua fatura.',
|
||||
emailTip: 'Após a confirmação do pagamento, você receberá a fatura e a licença por e-mail. Informe o endereço de e-mail correto na próxima página de pagamento.',
|
||||
businessTip: 'Se você precisa de uma fatura empresarial com o nome da empresa e o número fiscal, marque a caixa "Estou comprando como empresa" na próxima página de pagamento.',
|
||||
sepaTip: 'Pagamentos em EUR aceitam débito bancário SEPA. Observe que, se você escolher SEPA, o seu banco pode levar até 5 dias úteis para confirmar o pagamento, e a licença só será enviada por e-mail depois disso. Se quiser receber a licença mais rápido, recomendamos escolher outro método de pagamento em tempo real.',
|
||||
confirm: 'Continuar para o checkout',
|
||||
cancel: 'Cancelar',
|
||||
};
|
||||
@@ -91,36 +92,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: 'Por favor, confirme',
|
||||
html: `<p style="text-align:left">Deseja prosseguir para a página de compra? <br><br>Por favor, note que o que você está comprando <b style="font-size: 2em">NÃO</b> é uma assinatura de <span style="text-decoration:line-through">SaaS (Software como Serviço)</span>. <br><br>Em vez disso, é uma licença para uma solução de <b style="font-size: 2em">auto-hospedagem</b>, que requer que você a implante em seu próprio servidor (servidor na nuvem, por exemplo, AWS EC2, Azure VM, Vultr VPS etc., ou seu servidor local). <br><br>Por favor, <b style="font-size: 2em">não</b> compre se você não sabe o que é auto-hospedagem`,
|
||||
html: `<div style="text-align:left">
|
||||
<p>O que você está comprando <b style="font-size: 1.5em">NÃO</b> é uma assinatura <span style="text-decoration:line-through">SaaS</span> — é uma licença para uma solução de <b style="font-size: 1.5em">auto-hospedagem</b> que requer que você a implante em seu próprio servidor (por exemplo, AWS EC2, Azure VM, Vultr VPS ou seu servidor local).</p>
|
||||
<p style="margin-top:0.75rem"><span class="font-bold text-red-500">Não oferecemos reembolsos</span>. Recomendamos fortemente testar primeiro nosso <span class="underline font-bold">plano gratuito de auto-hospedagem</span> antes de comprar o plano Pro.</p>
|
||||
<p style="margin-top:0.75rem"><b>Por favor, não compre se você não sabe o que é auto-hospedagem.</b></p>
|
||||
<p style="margin-top:0.75rem">Deseja prosseguir para a página de compra?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Sim',
|
||||
confirmButtonText: 'Sim, prosseguir',
|
||||
cancelButtonText: 'Não',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: 'Por favor, confirme',
|
||||
html: `Por favor, note que <span class="text-3xl font-bold">não</span> oferecemos <span class="text-3xl font-bold">reembolsos</span>. Recomendamos fortemente <span class="underline font-bold">testar nosso plano gratuito de auto-hospedagem</span> antes de considerar a compra do nosso plano Pro. Você ainda está interessado em prosseguir?`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: 'Sim',
|
||||
cancelButtonText: 'Não',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -61,16 +61,16 @@ const metadata = {
|
||||
title="通过自托管增强您的远程访问"
|
||||
items={[
|
||||
{
|
||||
title: '数据主权',
|
||||
description: '轻松实现合规性:自托管 RustDesk 确保数据主权。',
|
||||
title: '数据完全自主',
|
||||
description: '轻松实现合规性:自托管 RustDesk 让您的数据完全自主。',
|
||||
},
|
||||
{
|
||||
title: '增强的安全性',
|
||||
description: '加强您的安全性:本地部署使您的数据保持在您的控制之下。',
|
||||
title: '世界级开源项目',
|
||||
description: 'GitHub 113K+ stars,RustDesk 位列全球前 100 名开源软件项目,由充满活力的全球社区共同支撑。',
|
||||
},
|
||||
{
|
||||
title: '性能和可靠性',
|
||||
description: '保证正常运行时间:本地部署确保最佳性能和最小的停机时间。',
|
||||
description: '运行在您自己的基础设施上——不依赖第三方 SaaS 的可用性,也没有共享环境中的"吵闹邻居"。',
|
||||
},
|
||||
{
|
||||
title: '灵活性和定制化',
|
||||
@@ -190,7 +190,7 @@ const metadata = {
|
||||
{ title: '客户端下载量', amount: '3000万+' },
|
||||
{ title: 'Docker 下载量', amount: '1000万+' },
|
||||
{ title: '在线设备', amount: '10M+' },
|
||||
{ title: 'Stars', amount: '10.6万+' },
|
||||
{ title: 'Stars', amount: '11.3万+' },
|
||||
{ title: 'Forks', amount: '1.5万+' },
|
||||
{ title: '社区成员', amount: '5万+' },
|
||||
{ title: '语言', amount: '50+' },
|
||||
|
||||
@@ -75,6 +75,7 @@ const currencyCopy = {
|
||||
tip: '你选择的货币也会用于发票。',
|
||||
emailTip: '付款成功后,你将通过邮箱收到发票和许可证。请在接下来的付款页面填写正确的邮箱地址。',
|
||||
businessTip: '如果你需要包含公司名称和税号的企业发票,请在接下来的付款页面勾选 "我正在以企业身份购买" 复选框。',
|
||||
sepaTip: '欧元支付支持 SEPA 银行扣款。请注意:若选择 SEPA,银行最多可能需要 5 个工作日确认收款;款项确认后,我们才会通过邮件发送许可证。若希望更快收到许可证,建议选择其他实时支付方式。',
|
||||
confirm: '继续购买',
|
||||
cancel: '取消',
|
||||
};
|
||||
@@ -88,36 +89,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: '请确认',
|
||||
html: '<p style="text-align:left">您是否要继续前往购买页面?<br><br>请注意,您购买的<b style="font-size: 2em">不是</b> <span style="text-decoration:line-through">SaaS(软件即服务)</span> 订阅。<br><br>相反,这是一个 <b style="font-size: 2em">自托管</b> 解决方案的许可证,您需要将其部署在您自己的服务器上(云服务器,例如 AWS EC2、Azure VM、Vultr VPS 等,或您的本地服务器)。<br><br>如果您不知道什么是自托管,请<b style="font-size: 2em">不要</b>购买。',
|
||||
html: `<div style="text-align:left">
|
||||
<p>您购买的<b style="font-size: 1.5em">不是</b> <span style="text-decoration:line-through">SaaS</span>(软件即服务)订阅——而是<b style="font-size: 1.5em">自托管</b>解决方案的许可证,需要您将其部署在自己的服务器上(例如 AWS EC2、Azure VM、Vultr VPS 或您的本地服务器)。</p>
|
||||
<p style="margin-top:0.75rem">我们<span class="font-bold text-red-500">不提供退款</span>。强烈建议您在购买 Pro 版之前,先<span class="underline font-bold">测试我们的免费自托管计划</span>。</p>
|
||||
<p style="margin-top:0.75rem"><b>如果您不知道什么是自托管,请不要购买。</b></p>
|
||||
<p style="margin-top:0.75rem">是否继续前往购买页面?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '是',
|
||||
confirmButtonText: '是,继续',
|
||||
cancelButtonText: '否',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: '请确认',
|
||||
html: '请注意,我们 <span class="text-3xl font-bold">不</span> 提供 <span class="text-3xl font-bold">退款</span>。我们强烈建议在考虑购买我们的专业版计划之前,<span class="underline font-bold">测试我们的免费自托管计划</span>。您是否仍然有兴趣继续?',
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '是',
|
||||
cancelButtonText: '否',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -60,16 +60,16 @@ const metadata = {
|
||||
title="透過自託管伺服器強化您的遠端存取"
|
||||
items={[
|
||||
{
|
||||
title: '資料主權',
|
||||
description: '輕鬆符合法規要求:自託管 RustDesk 確保資料主權。',
|
||||
title: '資料完全自主',
|
||||
description: '輕鬆符合法規要求:自託管 RustDesk 讓您的資料完全自主。',
|
||||
},
|
||||
{
|
||||
title: '增強安全性',
|
||||
description: '強化您的安全性:本地部署讓您的資料保持在您的控制之下。',
|
||||
title: '世界級開源專案',
|
||||
description: 'GitHub 113K+ stars,RustDesk 位列全球前 100 名開源軟體專案,由充滿活力的全球社群共同支撐。',
|
||||
},
|
||||
{
|
||||
title: '效能和可靠性',
|
||||
description: '保證運行時間:本地部署確保最佳效能和最少停機時間。',
|
||||
description: '運行在您自己的基礎設施上——不依賴第三方 SaaS 的可用性,也沒有共享環境中的「吵鬧鄰居」。',
|
||||
},
|
||||
{
|
||||
title: '靈活性和客製化',
|
||||
@@ -189,7 +189,7 @@ const metadata = {
|
||||
{ title: '客戶端下載量', amount: '3000萬+' },
|
||||
{ title: 'Docker 下載量', amount: '1000萬+' },
|
||||
{ title: '活躍裝置', amount: '10M+' },
|
||||
{ title: '星標數', amount: '10.6萬+' },
|
||||
{ title: '星標數', amount: '11.3萬+' },
|
||||
{ title: '分叉數', amount: '1.5萬+' },
|
||||
{ title: '社群成員', amount: '5萬+' },
|
||||
{ title: '支援語言', amount: '50+' },
|
||||
|
||||
@@ -73,6 +73,7 @@ const currencyCopy = {
|
||||
tip: '你選擇的貨幣也會用於發票。',
|
||||
emailTip: '付款成功後,你將透過電子郵件收到發票和授權。請在接下來的付款頁面填寫正確的電子郵件地址。',
|
||||
businessTip: '如果你需要包含公司名稱和稅號的企業發票,請在接下來的付款頁面勾選 "我正以企業身分購買" 核取方塊。',
|
||||
sepaTip: '歐元支付支援 SEPA 銀行扣款。請注意:若選擇 SEPA,銀行最多可能需要 5 個工作天確認收款;款項確認後,我們才會透過電子郵件發送授權。若希望更快收到授權,建議選擇其他即時支付方式。',
|
||||
confirm: '繼續購買',
|
||||
cancel: '取消',
|
||||
};
|
||||
@@ -86,36 +87,32 @@ const currencyCopy = {
|
||||
window['gotoBuy'] = function (redirectUrl) {
|
||||
Swal.fire({
|
||||
title: '請確認',
|
||||
html: `<p style="text-align:left">您確定要前往購買頁面嗎?<br><br>請注意,您購買的<b style="font-size: 2em">不是</b><span style="text-decoration:line-through">SaaS(軟體即服務)</span>訂閱。<br><br>相反,這是一個<b style="font-size: 2em">自託管</b>解決方案的授權,需要您在自己的伺服器上部署(雲端伺服器,如AWS EC2、Azure VM、Vultr VPS等,或您的本地伺服器)。<br><br>如果您不了解什麼是自託管,請<b style="font-size: 2em">不要</b>購買。`,
|
||||
html: `<div style="text-align:left">
|
||||
<p>您購買的<b style="font-size: 1.5em">不是</b><span style="text-decoration:line-through">SaaS</span>(軟體即服務)訂閱——而是<b style="font-size: 1.5em">自託管</b>解決方案的授權,需要您在自己的伺服器上部署(例如 AWS EC2、Azure VM、Vultr VPS 或您的本地伺服器)。</p>
|
||||
<p style="margin-top:0.75rem">我們<span class="font-bold text-red-500">不提供退款</span>。強烈建議您在購買 Pro 計劃之前,先<span class="underline font-bold">試用我們的免費自託管計劃</span>。</p>
|
||||
<p style="margin-top:0.75rem"><b>如果您不了解什麼是自託管,請不要購買。</b></p>
|
||||
<p style="margin-top:0.75rem">是否繼續前往購買頁面?</p>
|
||||
</div>`,
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '是',
|
||||
confirmButtonText: '是,繼續',
|
||||
cancelButtonText: '否',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: '請確認',
|
||||
html: `請注意,我們<span class="text-3xl font-bold">不提供</span><span class="text-3xl font-bold">退款</span>。我們強烈建議您在考慮購買我們的Pro計劃之前,<span class="underline font-bold">先試用我們的免費自託管計劃</span>。您仍然想要繼續嗎?`,
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '是',
|
||||
cancelButtonText: '否',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
try {
|
||||
const url = new URL(redirectUrl);
|
||||
const pageParams = new URLSearchParams(window.location.search);
|
||||
pageParams.forEach((value, key) => {
|
||||
if (!url.searchParams.has(key)) url.searchParams.append(key, value);
|
||||
});
|
||||
window.open(url.toString(), '_blank');
|
||||
} catch (e) {
|
||||
const qs = window.location.search
|
||||
? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1)
|
||||
: '';
|
||||
window.open(redirectUrl + qs, '_blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
1
v3/src/types.d.ts
vendored
1
v3/src/types.d.ts
vendored
@@ -239,6 +239,7 @@ export interface PricingCurrencyCopy {
|
||||
tip: string;
|
||||
emailTip: string;
|
||||
businessTip: string;
|
||||
sepaTip?: string;
|
||||
confirm: string;
|
||||
cancel: string;
|
||||
}
|
||||
|
||||
@@ -834,29 +834,36 @@ window.addEventListener("load", function() {
|
||||
gtag('config', 'UA-178912857-1');
|
||||
</script>
|
||||
<script src="sweetalert2@11.7.27.js"></script>
|
||||
<style>
|
||||
.pricing-purchase-dialog-icon.swal2-icon {
|
||||
width: 2.75rem;
|
||||
height: 2.75rem;
|
||||
margin: 1rem auto 0.4rem;
|
||||
border-width: 0.18rem;
|
||||
}
|
||||
|
||||
.pricing-purchase-dialog-icon.swal2-icon .swal2-icon-content {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
function gotoBuy(redirectUrl) {
|
||||
Swal.fire({
|
||||
title: '请确认',
|
||||
text: '你是否要继续前往购买页面?请注意,你所购买的不是SaaS(软件即服务)订阅,而是一项自助托管解决方案的许可证。你需要将其部署在自己的服务器上。',
|
||||
html: '<div style="text-align:left">' +
|
||||
'<p>您购买的<b style="font-size:1.5em">不是</b> <span style="text-decoration:line-through">SaaS</span>(软件即服务)订阅,而是<b style="font-size:1.5em">自托管</b>解决方案的许可证,需要您将其部署在自己的服务器上。</p>' +
|
||||
'<p style="margin-top:0.75rem">我们<span style="font-weight:700;color:#ef4444">不提供退款</span>。强烈建议您在购买专业版计划之前,先<span style="text-decoration:underline;font-weight:700">测试我们的免费自托管计划</span>。</p>' +
|
||||
'<p style="margin-top:0.75rem"><b>如果您不知道什么是自托管,请不要购买。</b></p>' +
|
||||
'<p style="margin-top:0.75rem">是否继续前往购买页面?</p>' +
|
||||
'</div>',
|
||||
icon: 'question',
|
||||
customClass: { icon: 'pricing-purchase-dialog-icon' },
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '是',
|
||||
confirmButtonText: '是,继续',
|
||||
cancelButtonText: '否',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
Swal.fire({
|
||||
title: '请确认',
|
||||
text: '请注意,我们不提供退款。 我们强烈建议您在考虑购买专业版计划之前先测试我们的免费版本。 您还有兴趣继续吗?',
|
||||
icon: 'question',
|
||||
showCancelButton: true, reverseButtons: true,
|
||||
confirmButtonText: '是',
|
||||
cancelButtonText: '否',
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
window.open(redirectUrl, '_blank');
|
||||
}
|
||||
});
|
||||
window.open(redirectUrl, '_blank');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user