|
18 | 18 | const STORAGE_KEY = 'fula-docs-language'; |
19 | 19 | const DEFAULT_LANGUAGE = 'en'; |
20 | 20 |
|
21 | | - // Inject required CSS for language selector |
22 | | - function injectStyles() { |
23 | | - if (document.getElementById('i18n-styles')) return; |
24 | | - const style = document.createElement('style'); |
25 | | - style.id = 'i18n-styles'; |
26 | | - style.textContent = ` |
27 | | - .language-selector { |
28 | | - position: relative; |
29 | | - display: inline-block; |
30 | | - margin-right: 12px; |
31 | | - } |
32 | | - .language-selector-btn { |
33 | | - display: flex; |
34 | | - align-items: center; |
35 | | - gap: 6px; |
36 | | - padding: 8px 12px; |
37 | | - background: var(--bg-code, #1e2430); |
38 | | - border: 1px solid var(--border-color, #30363d); |
39 | | - border-radius: 8px; |
40 | | - color: var(--text-primary, #c9d1d9); |
41 | | - cursor: pointer; |
42 | | - font-size: 0.9rem; |
43 | | - font-family: inherit; |
44 | | - transition: all 0.2s ease; |
45 | | - } |
46 | | - .language-selector-btn:hover { |
47 | | - background: var(--bg-sidebar, #161b22); |
48 | | - border-color: var(--accent-blue, #58a6ff); |
49 | | - } |
50 | | - .language-icon { font-size: 1.1rem; } |
51 | | - .language-arrow { |
52 | | - font-size: 0.65rem; |
53 | | - opacity: 0.6; |
54 | | - transition: transform 0.2s ease; |
55 | | - margin-left: 2px; |
56 | | - } |
57 | | - .language-selector.open .language-arrow { |
58 | | - transform: rotate(180deg); |
59 | | - } |
60 | | - .language-dropdown { |
61 | | - position: absolute; |
62 | | - top: calc(100% + 6px); |
63 | | - left: 0; |
64 | | - background: var(--bg-sidebar, #161b22); |
65 | | - border: 1px solid var(--border-color, #30363d); |
66 | | - border-radius: 10px; |
67 | | - box-shadow: 0 12px 32px rgba(0,0,0,0.4); |
68 | | - min-width: 200px; |
69 | | - max-height: 400px; |
70 | | - overflow-y: auto; |
71 | | - opacity: 0; |
72 | | - visibility: hidden; |
73 | | - transform: translateY(-8px) scale(0.96); |
74 | | - transition: all 0.2s ease; |
75 | | - z-index: 9999; |
76 | | - } |
77 | | - .language-selector.open .language-dropdown { |
78 | | - opacity: 1; |
79 | | - visibility: visible; |
80 | | - transform: translateY(0) scale(1); |
81 | | - } |
82 | | - .language-option { |
83 | | - display: flex; |
84 | | - align-items: center; |
85 | | - gap: 10px; |
86 | | - width: 100%; |
87 | | - padding: 12px 16px; |
88 | | - background: transparent; |
89 | | - border: none; |
90 | | - color: var(--text-primary, #c9d1d9); |
91 | | - cursor: pointer; |
92 | | - text-align: left; |
93 | | - font-size: 0.9rem; |
94 | | - font-family: inherit; |
95 | | - transition: background 0.15s ease; |
96 | | - } |
97 | | - .language-option:first-child { border-radius: 9px 9px 0 0; } |
98 | | - .language-option:last-child { border-radius: 0 0 9px 9px; } |
99 | | - .language-option:hover { |
100 | | - background: var(--bg-code, #1e2430); |
101 | | - } |
102 | | - .language-option.active { |
103 | | - background: rgba(88, 166, 255, 0.15); |
104 | | - color: var(--accent-blue, #58a6ff); |
105 | | - } |
106 | | - .language-option .lang-flag { font-size: 1.2rem; } |
107 | | - .language-option .lang-info { |
108 | | - display: flex; |
109 | | - flex-direction: column; |
110 | | - gap: 2px; |
111 | | - } |
112 | | - .language-option .lang-native { |
113 | | - font-weight: 500; |
114 | | - font-size: 0.9rem; |
115 | | - } |
116 | | - .language-option .lang-english { |
117 | | - font-size: 0.75rem; |
118 | | - color: var(--text-secondary, #8b949e); |
119 | | - } |
120 | | - .language-option.active .lang-english { |
121 | | - color: var(--accent-blue, #58a6ff); |
122 | | - opacity: 0.7; |
123 | | - } |
124 | | - .language-option .lang-check { |
125 | | - margin-left: auto; |
126 | | - opacity: 0; |
127 | | - color: var(--accent-blue, #58a6ff); |
128 | | - } |
129 | | - .language-option.active .lang-check { opacity: 1; } |
130 | | - |
131 | | - /* RTL Support */ |
132 | | - html[dir="rtl"] body { direction: rtl; } |
133 | | - html[dir="rtl"] .sidebar { |
134 | | - left: auto; |
135 | | - right: 0; |
136 | | - border-right: none; |
137 | | - border-left: 1px solid var(--border-color, #30363d); |
138 | | - } |
139 | | - html[dir="rtl"] .content { margin-left: 0; margin-right: 280px; } |
140 | | - html[dir="rtl"] .nav-section li a { |
141 | | - border-left: none; |
142 | | - border-right: 3px solid transparent; |
143 | | - padding-left: 20px; |
144 | | - padding-right: 17px; |
145 | | - } |
146 | | - html[dir="rtl"] .nav-section li a.active { border-right-color: var(--accent-blue, #58a6ff); } |
147 | | - html[dir="rtl"] .language-dropdown { left: auto; right: 0; } |
148 | | - html[dir="rtl"] .language-option { text-align: right; flex-direction: row-reverse; } |
149 | | - html[dir="rtl"] .language-option .lang-check { margin-left: 0; margin-right: auto; } |
150 | | - |
151 | | - @media (max-width: 768px) { |
152 | | - html[dir="rtl"] .content { margin-right: 0; } |
153 | | - html[dir="rtl"] .sidebar { transform: translateX(100%); } |
154 | | - html[dir="rtl"] .sidebar.open { transform: translateX(0); } |
155 | | - .language-selector-btn .language-selector-current { display: none; } |
156 | | - .language-selector-btn .language-arrow { display: none; } |
157 | | - } |
158 | | - `; |
159 | | - document.head.appendChild(style); |
160 | | - } |
| 21 | + // CSS is now loaded via css/i18n.css - no injection needed |
161 | 22 |
|
162 | 23 | class I18n { |
163 | 24 | constructor() { |
|
328 | 189 | } |
329 | 190 |
|
330 | 191 | function initI18n() { |
331 | | - injectStyles(); |
332 | | - |
333 | 192 | // Add selector to sidebar header |
334 | 193 | const sidebarHeader = document.querySelector('.sidebar-header'); |
335 | 194 | if (sidebarHeader && !sidebarHeader.querySelector('.language-selector')) { |
|
0 commit comments