orzar/assets/js/i18n.js
2025-06-05 14:46:21 +08:00

131 lines
3.6 KiB
JavaScript
Executable File

// 同步加载 markers.json 文件
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;
}
}
// DOM元素
const elements = {
htmlElement: document.documentElement,
bodyElement: document.body
};
// 点击选择框时显示/隐藏选项
$(".select-selected").click(function() {
$(this).toggleClass("select-arrow-active");
$(this).next(".select-items").toggle();
});
// 点击页面其他位置时关闭下拉框
$(document).click(function(e) {
if (!$(e.target).closest(".custom-select").length) {
$(".select-selected").removeClass("select-arrow-active");
$(".select-items").hide();
}
});
const i18n = {
currentLang: 'en', // 默认语言
init: function() {
var that = this
this.currentLang = localStorage.getItem('lang')?localStorage.getItem('lang'): 'en';
this.loadLanguage(this.currentLang);
if (this.currentLang === 'ar') {
elements.htmlElement.lang = 'ar';
elements.htmlElement.dir = 'rtl';
elements.bodyElement.setAttribute('dir', 'rtl');
} else {
elements.htmlElement.lang = this.currentLang;
elements.htmlElement.dir = 'ltr';
elements.bodyElement.removeAttribute('dir');
}
// 点击选项时更新选择
$(".select-items div").click(function() {
// 更新显示文本
const selectedText = $(this).text();
// $(".select-selected").text(selectedText);
// 更新选中状态样式
$(".select-items div").removeClass("same-as-selected");
$(this).addClass("same-as-selected");
// 隐藏选项框
$(".select-selected").removeClass("select-arrow-active");
$(".select-items").hide();
// 显示当前选择
localStorage.setItem('langtext', selectedText);
that.toggleLanguage($(this).attr('data-id'))
localStorage.setItem('lang', $(this).attr('data-id'));
location.reload();
});
},
loadLanguage: function(lang) {
var data = loadJSONSync(`./assets/js/lang/${lang}.json`);
// console.log(data)
// $('[data-i18n]').each(function() {
// const key = $(this).data('i18n');
// $(this).text(data[key]); // 更新文本内容
// });
// 常规文本内容
$('[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 || '');
// console.log($(this).attr('placeholder'))
});
// option文本翻译
$('option[data-i18n]').each(function() {
const keys = $(this).data('i18n').split('.');
let value = data;
keys.forEach(key => {
value = value[key];
});
$(this).text(value || '');
});
},
toggleLanguage: function(selectedText) {
// console.log(selectedText)
// console.log('111')
this.currentLang = selectedText;
this.loadLanguage(this.currentLang);
if (this.currentLang === 'ar') {
elements.htmlElement.lang = 'ar';
elements.htmlElement.dir = 'rtl';
elements.bodyElement.setAttribute('dir', 'rtl');
} else {
elements.htmlElement.lang = this.currentLang;
elements.htmlElement.dir = 'ltr';
elements.bodyElement.removeAttribute('dir');
}
}
};
$(document).ready(() => i18n.init());