diff --git a/index.html b/index.html index dc086ea..2400937 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@ -

QR Code Generator v2.1.0

+

QR Code Generator v2.2.0

diff --git a/js/app.js b/js/app.js index 58e86b1..0140888 100644 --- a/js/app.js +++ b/js/app.js @@ -503,7 +503,7 @@ function setupEventListeners() { const preview = document.getElementById('logoPreview'); if (preview) { preview.classList.remove('hidden'); - preview.innerHTML = '

⏳ Đang xử lý ảnh...

'; + preview.innerHTML = `

${LanguageManager.translate('logo_processing')}

`; } try { @@ -517,7 +517,7 @@ function setupEventListeners() { if (preview) { preview.classList.remove('hidden'); - preview.innerHTML = '

✓ Ảnh đã được crop vuông:

'; + preview.innerHTML = `

${LanguageManager.translate('logo_cropped')}

`; preview.appendChild(img); } @@ -531,7 +531,7 @@ function setupEventListeners() { ActivityLogger.log('Logo processing error', { error: error.message }); if (preview) { preview.classList.remove('hidden'); - preview.innerHTML = '

❌ Lỗi xử lý ảnh

'; + preview.innerHTML = `

${LanguageManager.translate('logo_error')}

`; } } }); diff --git a/js/logger.js b/js/logger.js index 9e65ce0..42f5fe9 100644 --- a/js/logger.js +++ b/js/logger.js @@ -1,4 +1,5 @@ // Activity Logger & Error Reporting System +import { LanguageManager } from './utils.js'; const ActivityLogger = { logs: [], @@ -126,10 +127,10 @@ const ActivityLogger = {

🐛 - Báo Lỗi + ${LanguageManager.translate('error_report_title')}

-

- Dưới đây là thông tin chi tiết về hoạt động của bạn. Hãy copy và gửi cho chúng tôi! +

+ ${LanguageManager.translate('error_report_desc')}

@@ -150,13 +151,14 @@ const ActivityLogger = { - Copy Báo Cáo + ${LanguageManager.translate('error_report_copy')} @@ -188,6 +190,17 @@ const ActivityLogger = { document.body.appendChild(modal); + // Update translations for dynamic content + const titleSpan = modal.querySelector('[data-i18n-dynamic="error_report_title"]'); + const descP = modal.querySelector('[data-i18n-dynamic="error_report_desc"]'); + const copySpan = modal.querySelector('[data-i18n-dynamic="error_report_copy"]'); + const closeBtn = modal.querySelector('[data-i18n-dynamic="error_report_close"]'); + + if (titleSpan) titleSpan.textContent = LanguageManager.translate('error_report_title'); + if (descP) descP.textContent = LanguageManager.translate('error_report_desc'); + if (copySpan) copySpan.textContent = LanguageManager.translate('error_report_copy'); + if (closeBtn) closeBtn.textContent = LanguageManager.translate('error_report_close'); + // Event listeners document.getElementById('copyReportBtn').addEventListener('click', () => { const textarea = document.getElementById('errorReport'); @@ -197,7 +210,7 @@ const ActivityLogger = { // Visual feedback const btn = document.getElementById('copyReportBtn'); const originalText = btn.innerHTML; - btn.innerHTML = ' Đã Copy!'; + btn.innerHTML = ` ${LanguageManager.translate('error_report_copied')}`; setTimeout(() => { btn.innerHTML = originalText; }, 2000); @@ -221,13 +234,25 @@ function createErrorReportButton() { const button = document.createElement('button'); button.id = 'errorReportBtn'; button.className = 'fixed bottom-6 right-6 bg-gradient-to-r from-red-500 to-pink-600 hover:from-red-600 hover:to-pink-700 text-white font-bold p-4 rounded-full shadow-2xl transition-all transform hover:scale-110 z-40 flex items-center gap-2'; - button.innerHTML = ` - - - - - `; - button.title = 'Báo lỗi hoặc gửi feedback'; + const updateButtonText = () => { + button.innerHTML = ` + + + + + `; + button.title = LanguageManager.translate('error_report_button_title'); + }; + updateButtonText(); + + // Update button text when language changes + const originalUpdateUI = LanguageManager.updateUI; + LanguageManager.updateUI = function() { + originalUpdateUI.call(this); + if (document.getElementById('errorReportBtn')) { + updateButtonText(); + } + }; button.addEventListener('click', () => { ActivityLogger.log('Opened error report dialog'); diff --git a/js/qr-generator.js b/js/qr-generator.js index 01aaaa5..f70ddc1 100644 --- a/js/qr-generator.js +++ b/js/qr-generator.js @@ -1,4 +1,5 @@ // QR Code Generator & Styling +import { LanguageManager } from './utils.js'; const QRGenerator = { canvas: null, @@ -35,7 +36,7 @@ const QRGenerator = { qrContainer.innerHTML = ''; if (!data) { - alert('Vui lòng nhập đầy đủ thông tin!'); + alert(LanguageManager.translate('alert_please_fill')); return; } @@ -84,7 +85,7 @@ const QRGenerator = { document.getElementById('downloadSection').classList.remove('hidden'); } catch (error) { - alert('Dữ liệu quá dài! Vui lòng rút ngắn nội dung.'); + alert(LanguageManager.translate('alert_data_too_long')); console.error(error); } }, @@ -175,12 +176,12 @@ const QRGenerator = { }; logo.onerror = () => { console.error('Failed to load logo'); - alert('Không thể tải logo. Vui lòng thử file khác.'); + alert(LanguageManager.translate('alert_logo_load_failed')); }; logo.src = URL.createObjectURL(croppedBlob); }).catch((error) => { console.error('Failed to crop image:', error); - alert('Không thể xử lý ảnh. Vui lòng thử file khác.'); + alert(LanguageManager.translate('alert_image_process_failed')); }); } else if (centerOption === 'text' && centerText) { // SAFE SIZE: 18% of QR for text diff --git a/js/translations.js b/js/translations.js index 5ffcf30..d11b7b1 100644 --- a/js/translations.js +++ b/js/translations.js @@ -74,6 +74,26 @@ const translations = { error_instagram_invalid: 'Vui lòng nhập username Instagram hoặc link profile', error_telegram_invalid: 'Vui lòng nhập username Telegram', error_spotify_invalid: 'Vui lòng nhập link Spotify hợp lệ', + + // Alert messages + alert_please_fill: 'Vui lòng nhập đầy đủ thông tin!', + alert_data_too_long: 'Dữ liệu quá dài! Vui lòng rút ngắn nội dung.', + alert_logo_load_failed: 'Không thể tải logo. Vui lòng thử file khác.', + alert_image_process_failed: 'Không thể xử lý ảnh. Vui lòng thử file khác.', + + // Logo processing messages + logo_processing: '⏳ Đang xử lý ảnh...', + logo_cropped: '✓ Ảnh đã được crop vuông:', + logo_error: '❌ Lỗi xử lý ảnh', + + // Error report + error_report_title: 'Báo Lỗi', + error_report_desc: 'Dưới đây là thông tin chi tiết về hoạt động của bạn. Hãy copy và gửi cho chúng tôi!', + error_report_copy: 'Copy Báo Cáo', + error_report_close: 'Đóng', + error_report_copied: 'Đã Copy!', + error_report_button: 'Báo Lỗi', + error_report_button_title: 'Báo lỗi hoặc gửi feedback', }, en: { title: 'QR Code Generator', @@ -149,6 +169,26 @@ const translations = { error_instagram_invalid: 'Please enter Instagram username or profile link', error_telegram_invalid: 'Please enter Telegram username', error_spotify_invalid: 'Please enter valid Spotify link', + + // Alert messages + alert_please_fill: 'Please fill in all required information!', + alert_data_too_long: 'Data is too long! Please shorten the content.', + alert_logo_load_failed: 'Failed to load logo. Please try another file.', + alert_image_process_failed: 'Failed to process image. Please try another file.', + + // Logo processing messages + logo_processing: '⏳ Processing image...', + logo_cropped: '✓ Image cropped to square:', + logo_error: '❌ Image processing error', + + // Error report + error_report_title: 'Error Report', + error_report_desc: 'Below is detailed information about your activity. Please copy and send it to us!', + error_report_copy: 'Copy Report', + error_report_close: 'Close', + error_report_copied: 'Copied!', + error_report_button: 'Report Error', + error_report_button_title: 'Report error or send feedback', }, };