Localize user-facing UI, agent output, and backend messages to Simplified Chinese
ci / go (push) Waiting to run
ci / go-db (agent) (push) Waiting to run
ci / go-db (config) (push) Waiting to run
ci / go-db (db) (push) Waiting to run
ci / go-db (evidence) (push) Waiting to run
ci / go-db (llmrec) (push) Waiting to run
ci / go-db (server) (push) Waiting to run
detections / detections (push) Waiting to run
docs / links (push) Waiting to run
web / web (push) Waiting to run
ci / go (push) Waiting to run
ci / go-db (agent) (push) Waiting to run
ci / go-db (config) (push) Waiting to run
ci / go-db (db) (push) Waiting to run
ci / go-db (evidence) (push) Waiting to run
ci / go-db (llmrec) (push) Waiting to run
ci / go-db (server) (push) Waiting to run
detections / detections (push) Waiting to run
docs / links (push) Waiting to run
web / web (push) Waiting to run
This commit is contained in:
@@ -27,17 +27,17 @@ func hanFreeItems(n int) []Item {
|
||||
// 공유하는 feishu·html·telegram·webhook 이 함께 쓰는 markdownTitle 이 한국어인지
|
||||
// 검사한다. 하나라도 중국어로 되돌아가면 이 다섯 채널의 제목이 전부 혼재된다.
|
||||
func TestMarkdownTitleLocalized(t *testing.T) {
|
||||
// 다건(汇总): "취약점 요약 · 총 N건"
|
||||
// 다건(汇总): "漏洞汇总 · 共 N 条"
|
||||
got := markdownTitle(Message{Batch: true, Items: hanFreeItems(3)})
|
||||
assertKorean(t, "markdownTitle(batch)", got)
|
||||
if !strings.Contains(got, "취약점 요약") || !strings.Contains(got, "총 3건") {
|
||||
t.Errorf("다건 제목이 '취약점 요약 · 총 3건' 형태여야 합니다, 받은 값 %q", got)
|
||||
assertChinese(t, "markdownTitle(batch)", got)
|
||||
if !strings.Contains(got, "漏洞汇总") || !strings.Contains(got, "共 3 条") {
|
||||
t.Errorf("다건 제목이 '漏洞汇总 · 共 3 条' 형태여야 합니다, 받은 값 %q", got)
|
||||
}
|
||||
// 항목 없음: "취약점 알림"
|
||||
// 항목 없음: "漏洞通知"
|
||||
empty := markdownTitle(Message{})
|
||||
assertKorean(t, "markdownTitle(empty)", empty)
|
||||
if empty != "취약점 알림" {
|
||||
t.Errorf("빈 메시지 제목은 '취약점 알림' 이어야 합니다, 받은 값 %q", empty)
|
||||
assertChinese(t, "markdownTitle(empty)", empty)
|
||||
if empty != "漏洞通知" {
|
||||
t.Errorf("빈 메시지 제목은 '漏洞通知' 이어야 합니다, 받은 값 %q", empty)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,28 +49,28 @@ func TestMarkdownBatchIntroLocalized(t *testing.T) {
|
||||
|
||||
// 시간창 있음: "최근 N분간 신규 취약점 N건"
|
||||
win := markdownBatchIntro(Message{Batch: true, WindowMinutes: 30}, items, 3)
|
||||
if hasHan(win) {
|
||||
t.Errorf("시간창 머리말에 중국어 한자가 남았습니다: %q", win)
|
||||
if hasHangul(win) {
|
||||
t.Errorf("시간창 머리말에 한글이 남았습니다: %q", win)
|
||||
}
|
||||
if !strings.Contains(win, "최근 30분간") || !strings.Contains(win, "신규 취약점 3건") {
|
||||
t.Errorf("시간창 머리말이 '최근 30분간 신규 취약점 3건' 형태여야 합니다, 받은 값 %q", win)
|
||||
if !strings.Contains(win, "最近 30 分钟") || !strings.Contains(win, "新增漏洞 3 条") {
|
||||
t.Errorf("시간창 머리말이 '最近 30 分钟新增漏洞 3 条' 형태여야 합니다, 받은 값 %q", win)
|
||||
}
|
||||
|
||||
// 시간창 없음: "신규 취약점 N건"(분간 표기 없음)
|
||||
// 시간창 없음: "新增漏洞 N条"(분간 표기 없음)
|
||||
noWin := markdownBatchIntro(Message{Batch: true}, items, 3)
|
||||
if hasHan(noWin) {
|
||||
t.Errorf("머리말에 중국어 한자가 남았습니다: %q", noWin)
|
||||
if hasHangul(noWin) {
|
||||
t.Errorf("머리말에 한글이 남았습니다: %q", noWin)
|
||||
}
|
||||
if !strings.Contains(noWin, "신규 취약점 3건") || strings.Contains(noWin, "분간") {
|
||||
t.Errorf("시간창 없는 머리말은 '신규 취약점 3건'(분간 표기 없음)이어야 합니다, 받은 값 %q", noWin)
|
||||
if !strings.Contains(noWin, "新增漏洞 3 条") || strings.Contains(noWin, "分钟") {
|
||||
t.Errorf("시간창 없는 머리말은 '新增漏洞 3 条'(分钟 표기 없음)이어야 합니다, 받은 값 %q", noWin)
|
||||
}
|
||||
|
||||
// 일부만 담겼을 때: "(이 메시지에는 앞 N건만 … 나머지 N건은 다음 메시지에서 …)"
|
||||
// 일부만 담겼을 때: "(本条仅显示前 N 条, 其余 N 条将在下一条消息中继续发送)"
|
||||
trunc := markdownBatchIntro(Message{Batch: true, WindowMinutes: 30}, items, 5)
|
||||
if hasHan(trunc) {
|
||||
t.Errorf("초과 안내에 중국어 한자가 남았습니다: %q", trunc)
|
||||
if hasHangul(trunc) {
|
||||
t.Errorf("초과 안내에 한글이 남았습니다: %q", trunc)
|
||||
}
|
||||
for _, want := range []string{"앞 3건만", "나머지 2건", "다음 메시지에서"} {
|
||||
for _, want := range []string{"前 3 条", "其余 2 条", "下一条消息"} {
|
||||
if !strings.Contains(trunc, want) {
|
||||
t.Errorf("초과 안내에 %q 가 있어야 합니다, 받은 값 %q", want, trunc)
|
||||
}
|
||||
@@ -94,13 +94,13 @@ func TestWriteItemLabelsLocalized(t *testing.T) {
|
||||
writeItem(&b, it, "", true)
|
||||
got := b.String()
|
||||
|
||||
assertKorean(t, "writeItem(single)", got)
|
||||
assertChinese(t, "writeItem(single)", got)
|
||||
for _, want := range []string{
|
||||
"**상태 변경**: 처리 대기 → 수정됨",
|
||||
"**유형**: SQLi",
|
||||
"**자산**: a.example.com",
|
||||
"**개요**: SQL injection via q param",
|
||||
"[상세 보기](https://platform.example/finding/1)",
|
||||
"**状态变更**:待处理 → 已修复",
|
||||
"**类型**:SQLi",
|
||||
"**资产**:a.example.com",
|
||||
"**概要**:SQL injection via q param",
|
||||
"[查看详情](https://platform.example/finding/1)",
|
||||
} {
|
||||
if !strings.Contains(got, want) {
|
||||
t.Errorf("단건 렌더에 %q 가 있어야 합니다:\n%s", want, got)
|
||||
@@ -116,7 +116,7 @@ func TestMarkdownBodyFooterLocalized(t *testing.T) {
|
||||
if kept != 2 {
|
||||
t.Fatalf("한도 없음(0)이면 2건 모두 담겨야 합니다, 받은 값 %d", kept)
|
||||
}
|
||||
if !strings.Contains(body, "[플랫폼에서 전체 보기](https://platform.example)") {
|
||||
t.Errorf("본문 끝에 '플랫폼에서 전체 보기' 링크가 있어야 합니다:\n%s", body)
|
||||
if !strings.Contains(body, "[在平台查看全部](https://platform.example)") {
|
||||
t.Errorf("본문 끝에 '在平台查看全部' 링크가 있어야 합니다:\n%s", body)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user