fix(docs): resolve language persistence and duplicate selector issues
Fixed three P0 bugs preventing language selection from persisting: 1. **Removed duplicate language selector** (docs.html:499-508) - Page had both navbar flags AND dropdown selector - Caused UX confusion (two selectors, no sync) - Now uses navbar flags only (consistent with site) 2. **Fixed localStorage key mismatch** (docs-app.js:207) - i18n-simple.js used 'tractatus-lang' - docs-app.js used 'tractatus_language' (underscore) - Unified to 'tractatus-lang' for persistence 3. **Removed dead code** (docs-app.js:836-871) - initLanguageSelector() expected removed dropdown - Caused potential JS errors - Navbar language-selector.js now handles all switching **Result:** - ✅ Single language selector (navbar flags) - ✅ Language persists across page reloads - ✅ No JavaScript errors - ✅ Ready for Caixin Global launch (Oct 29) **Version:** 0.1.2 → 0.1.3 (service worker cache bust) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f0c4500632
commit
325aaa509b
3 changed files with 18 additions and 65 deletions
|
|
@ -24,9 +24,9 @@
|
|||
<link rel="preload" href="/fonts/inter-400.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/fonts/inter-700.woff2" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761398485570">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761398485570">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761398485570">
|
||||
<link rel="stylesheet" href="/css/fonts.css?v=0.1.0.1761398900318">
|
||||
<link rel="stylesheet" href="/css/tailwind.css?v=0.1.0.1761398900318">
|
||||
<link rel="stylesheet" href="/css/tractatus-theme.min.css?v=0.1.0.1761398900318">
|
||||
<style>
|
||||
html { scroll-behavior: smooth; }
|
||||
|
||||
|
|
@ -485,7 +485,7 @@
|
|||
<a href="#main-content" class="skip-link">Skip to main content</a>
|
||||
|
||||
<!-- Navigation (injected by navbar.js) -->
|
||||
<script src="/js/components/navbar.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/components/navbar.js?v=0.1.0.1761398900318" defer></script>
|
||||
|
||||
<!-- Page Header -->
|
||||
<div class="bg-white border-b border-gray-200">
|
||||
|
|
@ -496,16 +496,6 @@
|
|||
<p class="text-gray-600 mt-2">Technical specifications, guides, and reference materials</p>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<!-- Language Selector -->
|
||||
<div class="relative">
|
||||
<select id="language-selector"
|
||||
class="px-4 py-2 bg-white border border-gray-300 rounded-lg hover:border-gray-400 transition text-sm font-medium text-gray-700 cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
|
||||
aria-label="Select language">
|
||||
<option value="en">🇬🇧 English</option>
|
||||
<option value="de">🇩🇪 Deutsch</option>
|
||||
<option value="fr">🇫🇷 Français</option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- Search Button -->
|
||||
<button type="button" id="open-search-modal-btn" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition flex items-center gap-2" aria-label="Open search">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
|
|
@ -836,15 +826,15 @@
|
|||
</div>
|
||||
|
||||
<!-- Version Management & PWA -->
|
||||
<script src="/js/version-manager.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/version-manager.js?v=0.1.0.1761398900318" defer></script>
|
||||
|
||||
<script src="/js/components/document-cards.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/docs-app.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/docs-search-enhanced.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/components/document-cards.js?v=0.1.0.1761398900318" defer></script>
|
||||
<script src="/js/docs-app.js?v=0.1.0.1761398900318" defer></script>
|
||||
<script src="/js/docs-search-enhanced.js?v=0.1.0.1761398900318" defer></script>
|
||||
|
||||
<!-- Internationalization -->
|
||||
<script src="/js/i18n-simple.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.0.1761398485570" defer></script>
|
||||
<script src="/js/i18n-simple.js?v=0.1.0.1761398900318" defer></script>
|
||||
<script src="/js/components/language-selector.js?v=0.1.0.1761398900318" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ function detectLanguage() {
|
|||
}
|
||||
|
||||
// Priority 2: localStorage
|
||||
const storedLang = localStorage.getItem('tractatus_language');
|
||||
const storedLang = localStorage.getItem('tractatus-lang');
|
||||
if (storedLang) {
|
||||
return storedLang;
|
||||
}
|
||||
|
|
@ -833,43 +833,6 @@ function closeToCModal() {
|
|||
// Initialize
|
||||
loadDocuments();
|
||||
|
||||
// Initialize language selector and detect initial language
|
||||
(function initLanguageSelector() {
|
||||
const selector = document.getElementById('language-selector');
|
||||
if (!selector) return;
|
||||
|
||||
// Set initial value from current language
|
||||
const initialLang = detectLanguage();
|
||||
selector.value = initialLang;
|
||||
currentLanguage = initialLang;
|
||||
|
||||
// Update page UI with initial language
|
||||
updatePageUI(initialLang);
|
||||
|
||||
// Handle language change
|
||||
selector.addEventListener('change', async (e) => {
|
||||
const newLang = e.target.value;
|
||||
|
||||
// Save to localStorage
|
||||
localStorage.setItem('tractatus_language', newLang);
|
||||
|
||||
// Update current language
|
||||
currentLanguage = newLang;
|
||||
|
||||
// Update all page UI elements
|
||||
updatePageUI(newLang);
|
||||
|
||||
// Reload document list to show translated category labels and document titles
|
||||
const currentSlug = currentDocument ? currentDocument.slug : null;
|
||||
await loadDocuments();
|
||||
|
||||
// If a document was loaded, reload it in the new language
|
||||
if (currentSlug) {
|
||||
loadDocument(currentSlug, newLang);
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
// Add ESC key listener for closing modal
|
||||
document.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Escape') {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"version": "0.1.1",
|
||||
"buildDate": "2025-10-25T13:21:25.577Z",
|
||||
"version": "0.1.2",
|
||||
"buildDate": "2025-10-26T09:57:00.000Z",
|
||||
"changelog": [
|
||||
"Mobile: Fixed calendar page loading issues with enhanced error handling",
|
||||
"Cache: Service worker v0.1.2 - FORCE REFRESH for mobile cache fix",
|
||||
"Admin: Improved API error reporting for calendar stats and tasks",
|
||||
"Backend: DeepL translation API integrated for multilingual submissions"
|
||||
"Docs: Fixed language persistence (localStorage key unified to 'tractatus-lang')",
|
||||
"Docs: Removed duplicate language selector (now uses navbar flags only)",
|
||||
"Docs: Language selection now persists across page reloads",
|
||||
"Cache: Service worker v0.1.3 - Language selector fixes"
|
||||
],
|
||||
"forceUpdate": true,
|
||||
"minVersion": "0.1.2"
|
||||
"minVersion": "0.1.3"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue