131 lines
3.6 KiB
JavaScript
Executable File
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());
|