|
| 1 | +# Twikoo 评论区语言切换调试指南 |
| 2 | + |
| 3 | +## 🔍 如何测试评论区语言切换 |
| 4 | + |
| 5 | +### 步骤 1:打开文章页面 |
| 6 | +1. 在浏览器中打开一个包含评论区的文章页面 |
| 7 | +2. 打开浏览器开发者工具(F12) |
| 8 | +3. 切换到 Console(控制台)标签页 |
| 9 | + |
| 10 | +### 步骤 2:查看初始化日志 |
| 11 | +你应该看到类似以下的日志: |
| 12 | +``` |
| 13 | +[Twikoo] initTwikoo called, checking requirements... |
| 14 | +[Twikoo] 初始化配置: { envId: "...", lang: "zh-CN", ... } |
| 15 | +[Twikoo] 初始化完成 |
| 16 | +[Twikoo] site-lang-change 监听器已注册 |
| 17 | +``` |
| 18 | + |
| 19 | +### 步骤 3:切换语言 |
| 20 | +1. 点击导航栏的语言切换器(如 "中文" -> "EN") |
| 21 | +2. 观察控制台输出 |
| 22 | + |
| 23 | +**预期日志**: |
| 24 | +``` |
| 25 | +[Twikoo] 检测到 site-lang-change 事件, detail: { lang: "en" } |
| 26 | +[Twikoo] 切换到新语言: en |
| 27 | +[Twikoo] 开始重新初始化评论组件 |
| 28 | +[Twikoo] initTwikoo called, checking requirements... |
| 29 | +[Twikoo] 初始化配置: { envId: "...", lang: "en", ... } |
| 30 | +[Twikoo] 初始化完成 |
| 31 | +``` |
| 32 | + |
| 33 | +### 步骤 4:检查评论区 UI |
| 34 | +- 评论框应该清空并重新加载 |
| 35 | +- 所有按钮文本(发送、预览、取消等)应该切换到新语言 |
| 36 | +- 时间格式应该根据语言变化(如 "1 day ago" / "1天前") |
| 37 | + |
| 38 | +## 🐛 常见问题排查 |
| 39 | + |
| 40 | +### 问题 1:看不到 [Twikoo] 日志 |
| 41 | +**原因**:可能控制台过滤器启用了 |
| 42 | +**解决**:确保控制台没有过滤 "Twikoo" 关键词 |
| 43 | + |
| 44 | +### 问题 2:切换语言后没有反应 |
| 45 | +**检查清单**: |
| 46 | +1. 控制台是否有 "检测到 site-lang-change 事件" 日志? |
| 47 | + - ✅ 有:继续下一步 |
| 48 | + - ❌ 没有:语言切换器可能没有正确触发事件 |
| 49 | + |
| 50 | +2. 是否有 "评论元素未找到" 错误? |
| 51 | + - ✅ 有:确认你在文章页面,不是首页或归档页 |
| 52 | + - ❌ 没有:继续下一步 |
| 53 | + |
| 54 | +3. 是否有 "Twikoo库未加载" 错误? |
| 55 | + - ✅ 有:检查网络连接和 Twikoo CDN |
| 56 | + - ❌ 没有:继续下一步 |
| 57 | + |
| 58 | +4. 是否看到 "开始重新初始化评论组件" 日志? |
| 59 | + - ✅ 有:但评论区没变化,可能是 Twikoo 内部问题 |
| 60 | + - ❌ 没有:检查 setTimeout 是否被阻止 |
| 61 | + |
| 62 | +### 问题 3:语言切换后评论区消失 |
| 63 | +**原因**:Twikoo 初始化失败 |
| 64 | +**解决**: |
| 65 | +1. 检查 `envId` 配置是否正确 |
| 66 | +2. 检查网络连接到 Twikoo 服务器 |
| 67 | +3. 查看控制台是否有 Twikoo 错误 |
| 68 | + |
| 69 | +### 问题 4:在 Swup 页面切换后评论区不工作 |
| 70 | +**检查**: |
| 71 | +1. 控制台是否有 "Swup 页面切换,检查是否需要初始化" 日志? |
| 72 | +2. 控制台是否有 "在新页面中找到评论元素,重新初始化" 日志? |
| 73 | + |
| 74 | +如果没有,可能 Swup hooks 没有正确注册。 |
| 75 | + |
| 76 | +## 🧪 手动测试命令 |
| 77 | + |
| 78 | +在控制台中执行以下命令进行手动测试: |
| 79 | + |
| 80 | +### 1. 检查 Twikoo 是否已加载 |
| 81 | +```javascript |
| 82 | +console.log(typeof twikoo); // 应该输出 "object" |
| 83 | +``` |
| 84 | + |
| 85 | +### 2. 检查评论元素是否存在 |
| 86 | +```javascript |
| 87 | +console.log(document.getElementById("tcomment")); // 应该输出 <div id="tcomment"> |
| 88 | +``` |
| 89 | + |
| 90 | +### 3. 检查当前语言设置 |
| 91 | +```javascript |
| 92 | +console.log(localStorage.getItem('site-lang')); // 输出当前语言代码 |
| 93 | +``` |
| 94 | + |
| 95 | +### 4. 手动触发语言切换 |
| 96 | +```javascript |
| 97 | +// 切换到英文 |
| 98 | +localStorage.setItem('site-lang', 'en'); |
| 99 | +window.dispatchEvent(new CustomEvent('site-lang-change', { detail: { lang: 'en' } })); |
| 100 | + |
| 101 | +// 切换回中文 |
| 102 | +localStorage.setItem('site-lang', 'zh_CN'); |
| 103 | +window.dispatchEvent(new CustomEvent('site-lang-change', { detail: { lang: 'zh_CN' } })); |
| 104 | +``` |
| 105 | + |
| 106 | +### 5. 手动重新初始化评论区 |
| 107 | +```javascript |
| 108 | +if (window.__reinitTwikoo) { |
| 109 | + window.__reinitTwikoo(); |
| 110 | +} else { |
| 111 | + console.error("__reinitTwikoo 函数未定义"); |
| 112 | +} |
| 113 | +``` |
| 114 | + |
| 115 | +### 6. 检查事件监听器是否注册 |
| 116 | +```javascript |
| 117 | +console.log('监听器已注册:', window.__twikooLangListenerRegistered); // 应该输出 true |
| 118 | +console.log('处理函数:', typeof window.__twikooLangChangeHandler); // 应该输出 "function" |
| 119 | +``` |
| 120 | + |
| 121 | +## 📊 诊断流程图 |
| 122 | + |
| 123 | +``` |
| 124 | +用户点击语言切换器 |
| 125 | + ↓ |
| 126 | +LanguageSwitch.svelte 保存到 localStorage |
| 127 | + ↓ |
| 128 | +触发 site-lang-change 事件 |
| 129 | + ↓ |
| 130 | +Twikoo 监听器捕获事件 → 有日志吗? |
| 131 | + ↓ ↓ 没有 |
| 132 | + 有日志 检查监听器是否注册 |
| 133 | + ↓ |
| 134 | +延迟 150ms(等待 localStorage 更新) |
| 135 | + ↓ |
| 136 | +检查评论元素 → 存在吗? |
| 137 | + ↓ ↓ 不存在 |
| 138 | + 存在 可能不在文章页 |
| 139 | + ↓ |
| 140 | +检查 twikoo 库 → 已加载吗? |
| 141 | + ↓ ↓ 未加载 |
| 142 | + 已加载 检查网络和 CDN |
| 143 | + ↓ |
| 144 | +调用 initTwikoo() |
| 145 | + ↓ |
| 146 | +清空评论区 innerHTML |
| 147 | + ↓ |
| 148 | +使用新语言创建配置 |
| 149 | + ↓ |
| 150 | +调用 twikoo.init(config) |
| 151 | + ↓ |
| 152 | +评论区重新渲染(新语言)✅ |
| 153 | +``` |
| 154 | + |
| 155 | +## 🎯 快速验证清单 |
| 156 | + |
| 157 | +执行以下步骤快速验证: |
| 158 | + |
| 159 | +- [ ] 打开文章页面,看到评论区 |
| 160 | +- [ ] F12 打开控制台 |
| 161 | +- [ ] 看到 "[Twikoo] 初始化完成" 日志 |
| 162 | +- [ ] 切换语言(如 中文 → English) |
| 163 | +- [ ] 看到 "[Twikoo] 检测到 site-lang-change 事件" 日志 |
| 164 | +- [ ] 看到 "[Twikoo] 切换到新语言: en" 日志 |
| 165 | +- [ ] 看到 "[Twikoo] 开始重新初始化评论组件" 日志 |
| 166 | +- [ ] 评论区 UI 显示英文 |
| 167 | +- [ ] 再切换回中文 |
| 168 | +- [ ] 评论区 UI 显示中文 |
| 169 | + |
| 170 | +如果以上全部通过,说明评论区语言同步功能正常!✅ |
| 171 | + |
| 172 | +## 🔧 高级调试 |
| 173 | + |
| 174 | +### 启用详细日志 |
| 175 | +在 Twikoo.astro 的 getTwikooLang() 函数中添加更多日志: |
| 176 | + |
| 177 | +```javascript |
| 178 | +function getTwikooLang() { |
| 179 | + const siteLang = localStorage.getItem('site-lang') || 'zh-CN'; |
| 180 | + console.log('[Twikoo] Raw site-lang:', siteLang); |
| 181 | + |
| 182 | + const normalized = siteLang.toLowerCase(); |
| 183 | + console.log('[Twikoo] Normalized:', normalized); |
| 184 | + |
| 185 | + let result = 'zh-CN'; |
| 186 | + if (normalized.startsWith('en')) result = 'en'; |
| 187 | + else if (normalized === 'zh_cn' || normalized === 'zh-cn') result = 'zh-CN'; |
| 188 | + // ... 其他语言映射 |
| 189 | + |
| 190 | + console.log('[Twikoo] Final lang:', result); |
| 191 | + return result; |
| 192 | +} |
| 193 | +``` |
| 194 | + |
| 195 | +### 检查 Twikoo 版本 |
| 196 | +```javascript |
| 197 | +// 在控制台执行 |
| 198 | +console.log(twikoo.version); // 查看 Twikoo 版本 |
| 199 | +``` |
| 200 | + |
| 201 | +### 查看 Twikoo 配置 |
| 202 | +```javascript |
| 203 | +// 初始化后查看实际配置 |
| 204 | +console.log(window.__twikooConfig); // 如果你存储了配置 |
| 205 | +``` |
| 206 | + |
| 207 | +--- |
| 208 | + |
| 209 | +**提示**:如果问题持续存在,请提供控制台完整日志截图,这样可以更精确地定位问题。 |
0 commit comments