diff --git a/index.html b/index.html
index dc086ea..2400937 100644
--- a/index.html
+++ b/index.html
@@ -29,7 +29,7 @@
-
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 = `
-
- Báo Lỗi
- `;
- button.title = 'Báo lỗi hoặc gửi feedback';
+ const updateButtonText = () => {
+ button.innerHTML = `
+
+ ${LanguageManager.translate('error_report_button')}
+ `;
+ 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',
},
};