Skip to content

Commit f129f9e

Browse files
feat: implement language-aware issue titles for GitHub issues
1 parent 87f75b1 commit f129f9e

File tree

4 files changed

+42
-22
lines changed

4 files changed

+42
-22
lines changed

index.html

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -247,19 +247,19 @@
247247
<div id="body">
248248
<div id="sidebar">
249249
<div id="mob-toggle" onclick="document.getElementById('sidebar').classList.toggle('open')">
250-
☰ &nbsp;选择报告
250+
☰ &nbsp;Chọn báo cáo
251251
</div>
252252
<div class="side-label">REPORTS</div>
253253
<div class="search-wrap">
254-
<input id="searchInput" type="search" placeholder="搜索全文,如 Claude">
254+
<input id="searchInput" type="search" placeholder="Tìm kiếm, ví dụ Claude">
255255
<div id="searchStatus"></div>
256256
</div>
257257
<div id="nav"></div>
258258
</div>
259259

260260
<div id="cwrap">
261261
<div id="content">
262-
<div class="msg"><div class="msg-icon">📡</div><div>正在加载</div></div>
262+
<div class="msg"><div class="msg-icon">📡</div><div>Đang tải</div></div>
263263
</div>
264264
</div>
265265
</div>
@@ -284,19 +284,19 @@
284284
}
285285

286286
const LABELS = {
287-
'ai-cli': 'AI CLI 工具',
287+
'ai-cli': 'Công cụ AI CLI',
288288
'ai-cli-en': 'AI CLI Tools',
289289
'ai-cli-vi': 'Công cụ AI CLI',
290-
'ai-agents': 'AI Agents 生态',
290+
'ai-agents': 'Hệ sinh thái AI Agents',
291291
'ai-agents-en': 'AI Agents Ecosystem',
292292
'ai-agents-vi': 'Hệ sinh thái AI Agents',
293-
'ai-web': 'OpenAI & Anthropic 官网动态',
293+
'ai-web': 'Cập nhật OpenAI & Anthropic',
294294
'ai-web-en': 'OpenAI & Anthropic Updates',
295295
'ai-web-vi': 'Cập nhật OpenAI & Anthropic',
296-
'ai-trending': 'GitHub AI 趋势',
296+
'ai-trending': 'Xu hướng AI GitHub',
297297
'ai-trending-en': 'GitHub AI Trends',
298298
'ai-trending-vi': 'Xu hướng AI GitHub',
299-
'ai-hn': 'HN 社区动态',
299+
'ai-hn': 'Cộng đồng HN',
300300
'ai-hn-en': 'HN Community Digest',
301301
'ai-hn-vi': 'Cộng đồng HN',
302302
};
@@ -357,9 +357,9 @@
357357
if (!needle) {
358358
setSearchStatus('');
359359
} else if (!searchReady) {
360-
setSearchStatus('正在建立索引…');
360+
setSearchStatus('Đang tạo chỉ mục…');
361361
} else {
362-
setSearchStatus(`匹配 ${hits} `);
362+
setSearchStatus(`Khớp ${hits} ngày`);
363363
}
364364
}
365365

@@ -386,7 +386,7 @@
386386

387387
function initSearch(dates) {
388388
searchReady = false;
389-
setSearchStatus('索引准备中…');
389+
setSearchStatus('Đang chuẩn bị chỉ mục…');
390390

391391
buildSearchIndex(dates).then((index) => {
392392
searchIndex = index;
@@ -439,7 +439,7 @@
439439
const safe = renderMarkdown(raw);
440440
setContent(`<div class="md fade">${safe}</div>`);
441441
} catch (e) {
442-
setContent(`<div class="msg"><div class="msg-icon">⚠️</div><div>加载失败:${e.message}</div></div>`);
442+
setContent(`<div class="msg"><div class="msg-icon">⚠️</div><div>Tải thất bại: ${e.message}</div></div>`);
443443
}
444444
}
445445

@@ -556,7 +556,7 @@
556556
} catch (e) {
557557
document.getElementById('nav').innerHTML =
558558
'<div class="msg" style="height:80px;font-size:10px">⚠️ ' + e.message + '</div>';
559-
setContent('<div class="msg"><div class="msg-icon">📡</div><div>无法加载 manifest.json</div></div>');
559+
setContent('<div class="msg"><div class="msg-icon">📡</div><div>Không thể tải manifest.json</div></div>');
560560
}
561561
})();
562562
</script>

src/index.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {
3636
buildTrendingPrompt,
3737
buildHnPrompt,
3838
} from "./prompts.ts";
39-
import { callLlm, saveFile, autoGenFooter, getDigestLangs, type Lang } from "./report.ts";
39+
import { callLlm, saveFile, autoGenFooter, getDigestLangs, issueTitle, type Lang } from "./report.ts";
4040
import { loadWebState, saveWebState, fetchSiteContent, type WebFetchResult, type WebState } from "./web.ts";
4141
import { fetchTrendingData, type TrendingData } from "./trending.ts";
4242
import { fetchHnData, type HnData } from "./hn.ts";
@@ -63,6 +63,7 @@ function requireEnv(name: string): string {
6363
return value;
6464
}
6565

66+
6667
// ---------------------------------------------------------------------------
6768
// Types
6869
// ---------------------------------------------------------------------------
@@ -485,8 +486,9 @@ async function saveWebReport(
485486
console.log(` Saved ${saveFile(webContent, dateStr, `ai-web${langSfx}.md`)}`);
486487

487488
if (digestRepo && lang === getDigestLangs()[0]) {
489+
const firstRunSuffix = isFirstRun ? (lang === 'zh' ? '(首次全量)' : lang === 'vi' ? ' (lần đầu)' : ' (initial full crawl)') : '';
488490
const webUrl = await createGitHubIssue(
489-
`🌐 AI 官方内容追踪报告 ${dateStr}${isFirstRun ? "(首次全量)" : ""}`,
491+
issueTitle('web', lang, `${dateStr}${firstRunSuffix}`),
490492
webContent,
491493
"web",
492494
);
@@ -534,7 +536,7 @@ async function saveTrendingReport(
534536
console.log(` Saved ${saveFile(trendingContent, dateStr, fileName)}`);
535537

536538
if (digestRepo && lang === getDigestLangs()[0]) {
537-
const trendingUrl = await createGitHubIssue(`📈 AI 开源趋势日报 ${dateStr}`, trendingContent, "trending");
539+
const trendingUrl = await createGitHubIssue(issueTitle('trending', lang, dateStr), trendingContent, "trending");
538540
console.log(` Created trending issue: ${trendingUrl}`);
539541
}
540542
}
@@ -578,7 +580,7 @@ async function saveHnReport(
578580
console.log(` Saved ${saveFile(hnContent, dateStr, fileName)}`);
579581

580582
if (digestRepo && lang === getDigestLangs()[0]) {
581-
const hnUrl = await createGitHubIssue(`📰 Hacker News AI 社区动态日报 ${dateStr}`, hnContent, "hn");
583+
const hnUrl = await createGitHubIssue(issueTitle('hn', lang, dateStr), hnContent, "hn");
582584
console.log(` Created HN issue: ${hnUrl}`);
583585
}
584586
} catch (err) {
@@ -716,11 +718,11 @@ async function main(): Promise<void> {
716718
// 5. Create GitHub issues (primary language only)
717719
if (digestRepo) {
718720
const { cliContent, openclawContent } = reportsByLang.get(primaryLang)!;
719-
const cliUrl = await createGitHubIssue(`📊 AI CLI 工具社区动态日报 ${dateStr}`, cliContent, "digest");
721+
const cliUrl = await createGitHubIssue(issueTitle('cli', primaryLang, dateStr), cliContent, "digest");
720722
console.log(` Created CLI issue: ${cliUrl}`);
721723

722724
const openclawUrl = await createGitHubIssue(
723-
`🦞 OpenClaw 生态日报 ${dateStr}`,
725+
issueTitle('openclaw', primaryLang, dateStr),
724726
openclawContent,
725727
"openclaw",
726728
);

src/report.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,21 @@ export function getDigestLangs(): Lang[] {
181181
.filter((l) => VALID_LANGS.has(l));
182182
return langs.length > 0 ? langs : ["vi"];
183183
}
184+
185+
// ---------------------------------------------------------------------------
186+
// Issue title map — language-aware GitHub Issue titles
187+
// ---------------------------------------------------------------------------
188+
189+
const ISSUE_TITLES: Record<string, Record<Lang, string>> = {
190+
cli: { zh: '📊 AI CLI 工具社区动态日报', en: '📊 AI CLI Tools Daily Digest', vi: '📊 Bản tin hàng ngày công cụ AI CLI' },
191+
openclaw: { zh: '🦞 OpenClaw 生态日报', en: '🦞 OpenClaw Ecosystem Daily Digest', vi: '🦞 Bản tin hàng ngày hệ sinh thái OpenClaw' },
192+
web: { zh: '🌐 AI 官方内容追踪报告', en: '🌐 AI Official Content Tracking Report', vi: '🌐 Báo cáo theo dõi nội dung AI chính thức' },
193+
trending: { zh: '📈 AI 开源趋势日报', en: '📈 AI Open Source Trends Daily', vi: '📈 Bản tin xu hướng AI mã nguồn mở' },
194+
hn: { zh: '📰 Hacker News AI 社区动态日报', en: '📰 Hacker News AI Community Daily', vi: '📰 Bản tin cộng đồng AI Hacker News' },
195+
weekly: { zh: '📅 AI 工具生态周报', en: '📅 AI Ecosystem Weekly Report', vi: '📅 Bản tin tuần hệ sinh thái AI' },
196+
monthly: { zh: '📆 AI 工具生态月报', en: '📆 AI Ecosystem Monthly Report', vi: '📆 Bản tin tháng hệ sinh thái AI' },
197+
};
198+
199+
export function issueTitle(key: string, lang: Lang, suffix: string): string {
200+
return `${ISSUE_TITLES[key]?.[lang] ?? ISSUE_TITLES[key]?.zh ?? key} ${suffix}`;
201+
}

src/rollup.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import fs from "node:fs";
77
import path from "node:path";
8-
import { callLlm, saveFile, autoGenFooter, getDigestLangs, type Lang } from "./report.ts";
8+
import { callLlm, saveFile, autoGenFooter, getDigestLangs, issueTitle, type Lang } from "./report.ts";
99
import { buildWeeklyPrompt, buildMonthlyPrompt } from "./prompts.ts";
1010
import { createGitHubIssue } from "./github.ts";
1111

@@ -126,7 +126,7 @@ export async function runWeeklyRollup(): Promise<void> {
126126
console.log(` Saved ${saveFile(content, dateStr, fileName)}`);
127127

128128
if (digestRepo && lang === primaryLang) {
129-
const url = await createGitHubIssue(`📅 AI 工具生态周报 ${weekStr}`, content, "weekly");
129+
const url = await createGitHubIssue(issueTitle('weekly', lang, weekStr), content, "weekly");
130130
console.log(` Created weekly issue: ${url}`);
131131
}
132132
}
@@ -226,7 +226,7 @@ export async function runMonthlyRollup(): Promise<void> {
226226
console.log(` Saved ${saveFile(content, dateStr, fileName)}`);
227227

228228
if (digestRepo && lang === primaryLang) {
229-
const url = await createGitHubIssue(`📆 AI 工具生态月报 ${monthStr}`, content, "monthly");
229+
const url = await createGitHubIssue(issueTitle('monthly', lang, monthStr), content, "monthly");
230230
console.log(` Created monthly issue: ${url}`);
231231
}
232232
}

0 commit comments

Comments
 (0)