Skip to content

Commit c4d3713

Browse files
committed
feat: add multi-language support
1 parent 6e31b93 commit c4d3713

32 files changed

+1328
-106
lines changed

DEBUG_TWIKOO.md

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
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

Comments
 (0)