// 同步加载 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());