80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
var I18N_SHARED = {
|
|
'zh-CN': {
|
|
pageTitleBase: 'Secrets',
|
|
navMcp: 'MCP',
|
|
navEntries: '条目',
|
|
navTrash: '回收站',
|
|
navAudit: '审计',
|
|
signOut: '退出',
|
|
mobileLabelTime: '时间',
|
|
mobileLabelAction: '动作',
|
|
mobileLabelTarget: '目标',
|
|
mobileLabelDetail: '详情'
|
|
},
|
|
'zh-TW': {
|
|
pageTitleBase: 'Secrets',
|
|
navMcp: 'MCP',
|
|
navEntries: '條目',
|
|
navTrash: '回收站',
|
|
navAudit: '審計',
|
|
signOut: '登出',
|
|
mobileLabelTime: '時間',
|
|
mobileLabelAction: '動作',
|
|
mobileLabelTarget: '目標',
|
|
mobileLabelDetail: '詳情'
|
|
},
|
|
en: {
|
|
pageTitleBase: 'Secrets',
|
|
navMcp: 'MCP',
|
|
navEntries: 'Entries',
|
|
navTrash: 'Trash',
|
|
navAudit: 'Audit',
|
|
signOut: 'Sign out',
|
|
mobileLabelTime: 'Time',
|
|
mobileLabelAction: 'Action',
|
|
mobileLabelTarget: 'Target',
|
|
mobileLabelDetail: 'Detail'
|
|
}
|
|
};
|
|
|
|
var currentLang = localStorage.getItem('lang') || 'zh-CN';
|
|
var I18N_PAGE = {};
|
|
|
|
function t(key) {
|
|
var dict = I18N_PAGE[currentLang] || I18N_PAGE['en'] || {};
|
|
var val = dict[key] || (I18N_SHARED[currentLang] && I18N_SHARED[currentLang][key]) || (I18N_SHARED.en && I18N_SHARED.en[key]) || key;
|
|
return val;
|
|
}
|
|
|
|
function tf(key, vars) {
|
|
var tpl = t(key);
|
|
return Object.keys(vars || {}).reduce(function (acc, k) {
|
|
return acc.replace(new RegExp('\\{' + k + '\\}', 'g'), String(vars[k]));
|
|
}, tpl);
|
|
}
|
|
|
|
function applyLang() {
|
|
document.documentElement.lang = currentLang;
|
|
var title = t('pageTitle');
|
|
if (title) document.title = title;
|
|
document.querySelectorAll('[data-i18n]').forEach(function (el) {
|
|
var key = el.getAttribute('data-i18n');
|
|
el.textContent = t(key);
|
|
});
|
|
document.querySelectorAll('[data-i18n-ph]').forEach(function (el) {
|
|
var key = el.getAttribute('data-i18n-ph');
|
|
el.placeholder = t(key);
|
|
});
|
|
document.querySelectorAll('.lang-btn').forEach(function (btn) {
|
|
var map = { 'zh-CN': '简', 'zh-TW': '繁', en: 'EN' };
|
|
btn.classList.toggle('active', btn.textContent === map[currentLang]);
|
|
});
|
|
if (typeof applyPageLang === 'function') applyPageLang();
|
|
}
|
|
|
|
window.setLang = function (lang) {
|
|
currentLang = lang;
|
|
localStorage.setItem('lang', lang);
|
|
applyLang();
|
|
};
|