Compare commits
7 Commits
a5515a65f6
...
v1.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
651e0d7ab0 | ||
|
|
e2b6684dcb | ||
|
|
6149b52b42 | ||
|
|
e7674475cf | ||
|
|
3d917d386f | ||
|
|
e1d9fcbf28 | ||
|
|
365871c077 |
@@ -97,7 +97,7 @@ The public instance at [xmrpay.link](https://xmrpay.link) exists as a demo and f
|
|||||||
- **Payment verification** — sender provides TX Hash + TX Key, cryptographic verification in browser
|
- **Payment verification** — sender provides TX Hash + TX Key, cryptographic verification in browser
|
||||||
- **Fiat conversion** — EUR/USD/CHF/GBP/JPY/RUB/BRL via CoinGecko, auto-detected from locale
|
- **Fiat conversion** — EUR/USD/CHF/GBP/JPY/RUB/BRL via CoinGecko, auto-detected from locale
|
||||||
- **Short URLs** — optional, with explicit trust trade-off warning
|
- **Short URLs** — optional, with explicit trust trade-off warning
|
||||||
- **i18n** — English, German, French, Italian, Spanish, Portuguese, Russian
|
- **i18n** — English, German, French, Italian, Spanish, Portuguese, Russian, Turkish
|
||||||
- **Offline-capable** — Service Worker for offline use
|
- **Offline-capable** — Service Worker for offline use
|
||||||
- **Privacy** — zero cookies, no analytics, no external scripts, self-hosted fonts
|
- **Privacy** — zero cookies, no analytics, no external scripts, self-hosted fonts
|
||||||
|
|
||||||
|
|||||||
4
app.js
4
app.js
@@ -215,7 +215,7 @@
|
|||||||
paymentStatus.innerHTML = '';
|
paymentStatus.innerHTML = '';
|
||||||
paymentStatus.className = 'payment-status';
|
paymentStatus.className = 'payment-status';
|
||||||
paymentSummary.innerHTML = '';
|
paymentSummary.innerHTML = '';
|
||||||
document.title = 'xmrpay.link \u2014 Monero Invoice Generator';
|
document.title = 'xmrpay \u2014 Monero Invoice Generator';
|
||||||
history.replaceState(null, '', location.pathname);
|
history.replaceState(null, '', location.pathname);
|
||||||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||||
addrInput.focus();
|
addrInput.focus();
|
||||||
@@ -517,7 +517,7 @@
|
|||||||
if (xmrAmount) parts.push(xmrAmount.toFixed(4) + ' XMR');
|
if (xmrAmount) parts.push(xmrAmount.toFixed(4) + ' XMR');
|
||||||
if (desc) parts.push(desc);
|
if (desc) parts.push(desc);
|
||||||
if (parts.length) {
|
if (parts.length) {
|
||||||
document.title = parts.join(' — ') + ' | xmrpay.link';
|
document.title = parts.join(' — ') + ' | xmrpay';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
app.min.js
vendored
2
app.min.js
vendored
File diff suppressed because one or more lines are too long
56
i18n.js
56
i18n.js
@@ -8,7 +8,8 @@ var I18n = (function () {
|
|||||||
it: { name: 'Italiano' },
|
it: { name: 'Italiano' },
|
||||||
es: { name: 'Español' },
|
es: { name: 'Español' },
|
||||||
pt: { name: 'Português' },
|
pt: { name: 'Português' },
|
||||||
ru: { name: 'Русский' }
|
ru: { name: 'Русский' },
|
||||||
|
tr: { name: 'Türkçe' }
|
||||||
};
|
};
|
||||||
|
|
||||||
var VERSION = '1.1.1';
|
var VERSION = '1.1.1';
|
||||||
@@ -386,6 +387,59 @@ var I18n = (function () {
|
|||||||
status_pending: 'Ожидание',
|
status_pending: 'Ожидание',
|
||||||
proof_confirmed_pending: 'Выход найден: {amount} XMR — {n}/10 подтверждений. Авт. обновление…',
|
proof_confirmed_pending: 'Выход найден: {amount} XMR — {n}/10 подтверждений. Авт. обновление…',
|
||||||
toast_integrity_warning: 'Предупреждение: обнаружено несоответствие подписи'
|
toast_integrity_warning: 'Предупреждение: обнаружено несоответствие подписи'
|
||||||
|
},
|
||||||
|
tr: {
|
||||||
|
subtitle: 'Saniyeler içerisinde Monero ödeme talebi',
|
||||||
|
label_addr: 'XMR Adresi',
|
||||||
|
placeholder_addr: '8...',
|
||||||
|
label_amount: 'Tutar',
|
||||||
|
label_desc: 'Açıklama (isteğe bağlı)',
|
||||||
|
placeholder_desc: 'örn. 42 numaralı Fatura, freelance iş için...',
|
||||||
|
label_timer: 'Ödeme için son tarih (isteğe bağlı)',
|
||||||
|
days: 'gün',
|
||||||
|
placeholder_timer_custom: 'Gün',
|
||||||
|
btn_generate: 'Ödeme talebi oluştur',
|
||||||
|
btn_open_wallet: 'Cüzdanda aç',
|
||||||
|
btn_copy_uri: 'URI kopyala',
|
||||||
|
btn_copy_addr: 'Adresi kopyala',
|
||||||
|
btn_download_pdf: 'Fatura (PDF)',
|
||||||
|
pdf_title: 'Ödeme Talebi',
|
||||||
|
pdf_address: 'XMR Adresi',
|
||||||
|
pdf_amount: 'Tutar',
|
||||||
|
pdf_desc: 'Açıklama',
|
||||||
|
pdf_deadline: 'Ödeme için son tarih',
|
||||||
|
pdf_deadline_days: '{d} gün',
|
||||||
|
pdf_date: 'Tarih',
|
||||||
|
pdf_scan_qr: 'Ödeme için QR kodu tara',
|
||||||
|
pdf_footer: 'xmrpay ile oluşturulmuştur',
|
||||||
|
qr_hint: 'QR kodu kaydetmek için tıkla',
|
||||||
|
self_host_banner: 'Bu bir herkese açık demodur. Gerçek ödemeler için <a href="https://github.com/schmidt1024/xmrpay#self-host-in-60-seconds">kendi sunucunuzu kurun</a> — sadece 60 saniye sürer.',
|
||||||
|
footer: footer,
|
||||||
|
aria_currency: 'Para Birimi',
|
||||||
|
label_share_link: 'Paylaşılabilir bağlantı',
|
||||||
|
shortlink_toggle_label: 'Kısaltılmış bağlantı kullan (sunucuya güven gerektirir)',
|
||||||
|
shortlink_toggle_hint: 'Olası dezavantaj: kısaltılmış bağlantılar kullanışlıdır, fakat ilgili sunucu güvende değil ise ilk erişimde fatura verileri değiştirilebilir.',
|
||||||
|
btn_new_request: 'Yeni ödeme talebi',
|
||||||
|
toast_copied: 'Kopyalandı!',
|
||||||
|
countdown_expired: 'Ödeme için son tarih süresi doldu',
|
||||||
|
countdown_remaining_days: 'Son Tarih: {d} gün, {h} saat',
|
||||||
|
countdown_remaining_hours: 'Son Tarih: {h}:{m} saat',
|
||||||
|
rates_offline: 'Kurlar mevcut değil — Yalnızca XMR tutarı',
|
||||||
|
btn_prove_payment: 'Ödemeyi doğrula',
|
||||||
|
label_tx_hash: 'İşlem kimliği (TX Hash)',
|
||||||
|
placeholder_tx_hash: '64 hex karakteri...',
|
||||||
|
label_tx_key: 'İşlem Anahtarı (TX Key)',
|
||||||
|
placeholder_tx_key: '64 hex karakteri...',
|
||||||
|
btn_verify_proof: 'Ödemeyi onayla',
|
||||||
|
proof_verifying: 'Onaylanıyor...',
|
||||||
|
proof_verified: 'Ödeme onaylandı: {amount} XMR',
|
||||||
|
proof_no_match: 'Çıktılar eşleşmiyor — TX anahtarı ya da adresi eşleşmiyor',
|
||||||
|
proof_tx_not_found: 'İşlem bulunamadı',
|
||||||
|
proof_error: 'Onaylama hatası',
|
||||||
|
status_paid: 'Ödeme yapıldı',
|
||||||
|
status_pending: 'Beklemede',
|
||||||
|
proof_confirmed_pending: 'Bulunan çıktı: {amount} XMR — {n}/10 tamamlanan. Otomatik yenileniyor…',
|
||||||
|
toast_integrity_warning: 'Uyarı: eşleşmeyen imza tespit edildi'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
2
i18n.min.js
vendored
2
i18n.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -137,7 +137,7 @@
|
|||||||
<div class="toast" id="toast"></div>
|
<div class="toast" id="toast"></div>
|
||||||
|
|
||||||
<script src="lib/qrcode.min.js?v=20260326-3" integrity="sha384-3zSEDfvllQohrq0PHL1fOXJuC/jSOO34H46t6UQfobFOmxE5BpjjaIJY5F2/bMnU" crossorigin="anonymous" defer></script>
|
<script src="lib/qrcode.min.js?v=20260326-3" integrity="sha384-3zSEDfvllQohrq0PHL1fOXJuC/jSOO34H46t6UQfobFOmxE5BpjjaIJY5F2/bMnU" crossorigin="anonymous" defer></script>
|
||||||
<script src="i18n.min.js?v=20260326-3" integrity="sha384-FfBaeFwBMGnIIOFgRYMxAcFLdp1MMUAc4V8YIg+jLInG8yWQdpMA05eicLc+QFaC" crossorigin="anonymous" defer></script>
|
<script src="i18n.min.js?v=20260326-3" integrity="sha384-GS62r/FP1LcB9Ec+ow+45oUWdQsjZKKwtPT6D/YXBfgGjUCjtpuxeLE3GMtbItgx" crossorigin="anonymous" defer></script>
|
||||||
<script src="app.min.js?v=20260326-3" integrity="sha384-JORIDcn40te850GEco3PPlCjpMXhAbHLSVu8t5BSX4g7XaQyUsGK3IaXLC+1AUYk" crossorigin="anonymous" defer></script>
|
<script src="app.min.js?v=20260326-3" integrity="sha384-Y8cPBLtvKkMhHUuD+ElA1hWJHo86yO5MRs8HTUvhuK9h+lwo9WT9eBvRM7mRgtCr" crossorigin="anonymous" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
23
privacy.html
23
privacy.html
@@ -192,6 +192,25 @@
|
|||||||
<li>Dostupnost ne garantiruetsya; funktsii mogut izmenyatsya v lyuboe vremya.</li>
|
<li>Dostupnost ne garantiruetsya; funktsii mogut izmenyatsya v lyuboe vremya.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section class="legal-lang" data-lang="tr">
|
||||||
|
<h2>Türkçe</h2>
|
||||||
|
<h3>Mahremiyet Politikası</h3>
|
||||||
|
<p>xmrpay.link veri toplama işlemini asgari seviyeye indirecek şekilde tasarlanmıştır. Hesap oluşturmaya gerek yoktur.</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Hız sınırlaması:</strong> kötüye kullanım karşıtı koruma mekanizması, IP'lerden gelen istekleri kısa süreli dosyalarda tutar. İlgili IP adresleri ham hali ile değil, hash'lenmiş olarak barındırılır.</li>
|
||||||
|
<li><strong>Kısaltılmış bağlantılar:</strong> fatura hash verileri, oluşturulan kısa URL'ler için saklanır.</li>
|
||||||
|
<li><strong>Ödeme onayı:</strong> eğer kullanıldılar ise; tx hash değeri, tutar, onaylamalar ve zaman mührü saklanır. Onay veritabanında hiçbir Monero adresi saklanmaz.</li>
|
||||||
|
<li><strong>Hiçbir şey takip edilmez:</strong> istatistik ve reklam olmadığı gibi herhangi bir profilleme eylemi barındırmaz.</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Kullanım Koşulları</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Tüm servis "olduğu gibi" herhangi bir garanti olmadan sunulmaktadır.</li>
|
||||||
|
<li>Tâbi olduğunuz yasalara uyum hususunda tüm sorumluluk size aittir.</li>
|
||||||
|
<li>Servisin herhangi bir nedenle istismarı, yasadışı alanda kullanımı ve/veya servise yönelik saldırılar yasaklı eylem statüsündedir.</li>
|
||||||
|
<li>İlgili kullanılabilirlik garanti edilmemiştir, tüm özellikler herhangi bir zaman aralığında değişebilir.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
<p style="margin-top:1rem;color:var(--text-muted);font-size:0.82rem;">Last updated: 2026-03-26</p>
|
<p style="margin-top:1rem;color:var(--text-muted);font-size:0.82rem;">Last updated: 2026-03-26</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -212,10 +231,10 @@
|
|||||||
<div class="lang-dropdown" id="langDropdown"></div>
|
<div class="lang-dropdown" id="langDropdown"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="i18n.min.js?v=20260326-3" integrity="sha384-FfBaeFwBMGnIIOFgRYMxAcFLdp1MMUAc4V8YIg+jLInG8yWQdpMA05eicLc+QFaC" crossorigin="anonymous" defer></script>
|
<script src="i18n.min.js?v=20260326-3" integrity="sha384-GS62r/FP1LcB9Ec+ow+45oUWdQsjZKKwtPT6D/YXBfgGjUCjtpuxeLE3GMtbItgx" crossorigin="anonymous" defer></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
var supported = ['en', 'de', 'fr', 'it', 'es', 'pt', 'ru'];
|
var supported = ['en', 'de', 'fr', 'it', 'es', 'pt', 'ru', 'tr'];
|
||||||
var sections = document.querySelectorAll('.legal-lang');
|
var sections = document.querySelectorAll('.legal-lang');
|
||||||
|
|
||||||
function applyLang(lang) {
|
function applyLang(lang) {
|
||||||
|
|||||||
Reference in New Issue
Block a user