Files
orzar-admin/assets/js/i18n.js
T
2025-06-06 09:07:50 +08:00

117 lines
3.2 KiB
JavaScript
Executable File

function loadJSONSync(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false); // false 表示同步请求
try {
xhr.send(null);
if (xhr.status === 200) {
return JSON.parse(xhr.responseText);
} else {
console.error('请求失败,状态码:', xhr.status);
return null;
}
} catch (e) {
console.error('请求过程中出错:', e);
return null;
}
}
class I18n {
constructor() {
this.currentLang = localStorage.getItem('language') || 'zh';
this.translations = {};
this.loadLanguage(this.currentLang);
this.updateLanguageSelect();
}
async loadLanguage(lang) {
try {
var data = loadJSONSync(`./assets/js/lang/${lang}.json`);
// console.log(data);
this.translations = data;
this.updatePageContent();
this.updateLanguageSelect();
// 如果菜单已初始化,重新渲染菜单
if (window.menu) {
window.menu.render();
}
} catch (error) {
console.error('Error loading language file:', error);
}
}
setLanguage(lang) {
this.currentLang = lang;
localStorage.setItem('language', lang);
this.loadLanguage(lang);
}
setLanguagehome(lang) {
this.currentLang = lang;
localStorage.setItem('language', lang);
window.location.reload();
}
translate(key) {
const keys = key.split('.');
let value = this.translations;
for (const k of keys) {
if (value && value[k] !== undefined) {
value = value[k];
} else {
return key;
}
}
return value;
}
updatePageContent() {
var data = this.translations;
// 常规文本内容
$('[data-i18n]').each(function() {
const keys = $(this).data('i18n').split('.');
let value = data;
keys.forEach(key => {
value = value[key];
});
$(this).text(value || '');
});
// placeholder翻译
$('[data-i18n-placeholder]').each(function() {
const keys = $(this).data('i18n-placeholder').split('.');
let value = data;
keys.forEach(key => {
value = value[key];
});
$(this).attr('placeholder', value || '');
});
// option文本翻译
$('option[data-i18n]').each(function() {
const keys = $(this).data('i18n').split('.');
let value = data;
keys.forEach(key => {
value = value[key];
});
$(this).text(value || '');
});
}
updateLanguageSelect() {
// 更新语言选择下拉框的选中状态
const select = document.querySelector('.language-switch select');
if (select) {
select.value = this.currentLang;
}
}
}
// 创建全局实例
window.i18n = new I18n();