feat(i18n): follow browser language by default
This commit is contained in:
1 parent
75c81ce498
commit
bf30001c42
3 files changed
+20
-4
No files matched your search
Vendored
+17
-1
@@ -26,6 +26,21 @@
|
||||
restoreDraft(entry);
|
||||
entry.addEventListener('input', () => saveDraft(entry.value));
|
||||
}
|
||||
function wireLanguageControl() {
|
||||
const settingsPanel = document.querySelector('#content-system .settings');
|
||||
if (!settingsPanel || settingsPanel.querySelector('#lifeos-browser-language')) return;
|
||||
const state = settings();
|
||||
const actual = typeof browserLanguage === 'function' ? browserLanguage() : 'en';
|
||||
const section = document.createElement('section');
|
||||
section.id = 'lifeos-browser-language';
|
||||
section.innerHTML = `<div class="eyebrow">${copy('BROWSER LANGUAGE', '浏览器语言')}</div><p class="sub">${copy(`Detected: ${actual === 'zh' ? 'Chinese' : 'English'}`, `当前识别:${actual === 'zh' ? '中文' : 'English'}`)}</p><div class="choices"><button class="chip ${state.languageMode !== 'manual' ? 'selected' : ''}" data-language="auto">${copy('AUTO', '跟随浏览器')}</button><button class="chip ${state.languageMode === 'manual' && state.language === 'en' ? 'selected' : ''}" data-language="en">ENGLISH</button><button class="chip ${state.languageMode === 'manual' && state.language === 'zh' ? 'selected' : ''}" data-language="zh">中文</button></div>`;
|
||||
section.querySelectorAll('button').forEach(button => button.addEventListener('click', () => setLanguage(button.dataset.language)));
|
||||
[...settingsPanel.children].forEach(node => {
|
||||
const label = node.querySelector?.('.eyebrow')?.textContent.trim();
|
||||
if (label === 'LANGUAGE' || label === '语言') node.remove();
|
||||
});
|
||||
settingsPanel.prepend(section);
|
||||
}
|
||||
function clearDraftAfterSave() {
|
||||
setTimeout(() => {
|
||||
const today = new Date().toISOString().slice(0, 10);
|
||||
@@ -62,8 +77,9 @@
|
||||
const style = document.createElement('style');
|
||||
style.textContent = `.lifeos-search-backdrop{position:fixed;inset:0;background:#0008;z-index:8000}.lifeos-search-panel{position:fixed;z-index:8001;top:18vh;left:50%;transform:translateX(-50%);width:min(560px,calc(100vw - 28px));background:var(--panel);border:1px solid var(--line);border-radius:15px;box-shadow:var(--shadow);padding:15px}.lifeos-search-head{display:flex;justify-content:space-between;align-items:center;font:500 11px 'DM Mono';letter-spacing:.12em;color:var(--muted);margin-bottom:13px}.lifeos-search-head button{border:0;background:transparent;color:var(--ink);font-size:20px}.lifeos-search-panel input{width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:12px;outline:none}.lifeos-search-panel input:focus{border-color:var(--accent)}.lifeos-search-results{margin-top:9px;max-height:360px;overflow:auto}.lifeos-search-results button{display:grid;gap:3px;width:100%;text-align:left;border:0;border-radius:9px;padding:11px;background:transparent;color:var(--ink)}.lifeos-search-results button:hover{background:var(--panel2)}.lifeos-search-results small,.lifeos-search-results span,.lifeos-search-hint{color:var(--muted);font-size:12px}.lifeos-search-results strong{font-size:14px}.lifeos-search-results span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lifeos-search-empty{padding:24px;color:var(--muted);text-align:center;font-size:13px}.lifeos-search-hint{margin:11px 0 0;font:10px 'DM Mono';letter-spacing:.04em}`;
|
||||
document.head.append(style);
|
||||
new MutationObserver(wireToday).observe(document.body, { childList: true, subtree: true });
|
||||
new MutationObserver(() => { wireToday(); wireLanguageControl(); }).observe(document.body, { childList: true, subtree: true });
|
||||
wireToday();
|
||||
wireLanguageControl();
|
||||
document.addEventListener('click', e => { if (e.target.closest('#content-today .primary')) clearDraftAfterSave(); });
|
||||
document.addEventListener('keydown', e => {
|
||||
const mod = e.ctrlKey || e.metaKey;
|
||||
|
||||
Reference in new issue
Block a user