sqzass.git

sqzass

~ A static site generator written in Rust
git clone https://github.com/debuman/sqzass.git
commit b9cb002cd6dced47feaac190891e74df1aa55d64
parent ae201dbe3c856c305a32850cf6584eb90ec7d9fa
Author: sqzer <110329244+sqzer-x@users.noreply.github.com>
Date: Fri, 31 Jul 2026 22:25:29 +0900

한국어에서 직역 자국을 지운다

"AI가 쓴 것 같다"는 지적을 계량해 보니 전면적인 문제가 아니라 반복되는 패턴
넷이었다. 목소리는 그대로 두고 자국만 지운다.

`당신` 24회. 영어판의 you/your 119회가 그대로 넘어온 자리다. 한국어 기술 문서는
2인칭을 생략하고, 이 문서의 다른 문장 대부분이 이미 그렇게 쓰여 있었다. 한
문장에 두 번 나오는 자리도 있었다 — "당신의 저장소에, 당신이 쓰고".

줄표 삽입구 뒤 조사 6곳. `빌드 락 — 를 지웠습니다`, `없음 — 는 플래그 하나
거리입니다`. 영어 em-dash 구문을 위치까지 그대로 옮겨서 닫는 줄표 뒤에 조사가
홀로 남았다. 한국어 문장이 아니다. 괄호로 바꾸거나 조사를 삽입구 앞으로 뺐다.

직역된 은유 10곳. caveat을 "단서"로 옮기면 실마리로 읽히고, gap과 absence의
대비는 한국어에서 두 말이 동의어라 성립하지 않고, 경쟁 조건의 window는 "창"이
아니라 "틈"이다. 그림이 안 넘어오면 뜻을 쓴다.

한국어에 없는 조어 셋. "생성 코퍼스", "바이트 동일", "마크업 세분도" — 영어
명사구를 한자어로 압축한 것들이라 절로 풀었다.

덤으로 피동 직역("신뢰된 것입니다"), `~를 통해`, 코드 스팬 뒤에 띄어 쓴 조사
셋, `theme_light`과/와 조사 오류를 함께 고쳤다.

기준을 CLAUDE.md에 남긴다. 규칙이 없으면 다음 페이지에서 같은 자국이 다시
생긴다. 판정 기준은 "번역이 맞느냐"가 아니라 "한국어 개발자가 이 문장을 처음부터
이렇게 썼겠느냐"다.

Diffstat:
Mdocs/content/benchmark/_index.ko.md | 26+++++++++++++-------------
Mdocs/content/content/front-matter.ko.md | 2+-
Mdocs/content/content/languages.ko.md | 9+++++----
Mdocs/content/content/links.ko.md | 4++--
Mdocs/content/content/markdown.ko.md | 12++++++------
Mdocs/content/deploy/_index.ko.md | 4++--
Mdocs/content/deploy/github-pages.ko.md | 2+-
Mdocs/content/deploy/netlify.ko.md | 4++--
Mdocs/content/features/dev-server.ko.md | 2+-
Mdocs/content/features/feeds.ko.md | 8++++----
Mdocs/content/features/highlighting.ko.md | 14+++++++-------
Mdocs/content/features/search.ko.md | 6+++---
Mdocs/content/start/_index.ko.md | 4++--
Mdocs/content/start/cli.ko.md | 2+-
Mdocs/content/start/first-site.ko.md | 2+-
Mdocs/content/start/installation.ko.md | 6+++---
Mdocs/content/templates/assets.ko.md | 10+++++-----
Mdocs/content/templates/functions.ko.md | 2+-
Mdocs/content/templates/social.ko.md | 6+++---
19 files changed, 63 insertion(+), 62 deletion(-)

diff --git a/docs/content/benchmark/_index.ko.md b/docs/content/benchmark/_index.ko.md
@@ -61,26 +61,26 @@ toc = true
 
 코드 반복도가 순위를 가르는데, 대부분의 벤치마크는 자기 코퍼스의 반복도를
 말하지 않기 때문입니다. sqzass는 서로 다른 블록만 빌드에서 한 번씩
-하이라이트하므로, 같은 블록을 반복하는 생성 코퍼스와 전부 다른 블록인
-코퍼스는 서로 다른 측정입니다 — 187 ms와 1,298 ms의 간격이 바로 그
+하이라이트하므로, 코퍼스 생성기가 같은 블록을 반복해 넣은 코퍼스와 블록이
+전부 다른 코퍼스는 서로 다른 측정입니다 — 187 ms와 1,298 ms의 간격이 바로 그
 변수입니다. 반복도를 밝히지 않은 단일 "heavy" 수치는 결과를 만든 변수를
 숨긴 것입니다.
 
 ## 방법
 
-- **콜드.** 매 회 출력 디렉터리와 도구별 캐시 — `.jekyll-cache`, Astro의
-  `cacheDir`와 `dist`, Hugo의 `resources`와 빌드 락 — 를 지웠습니다. 벽시계
+- **콜드.** 매 회 출력 디렉터리와 도구별 캐시(`.jekyll-cache`, Astro의
+  `cacheDir`와 `dist`, Hugo의 `resources`와 빌드 락)를 지웠습니다. 벽시계
   시간과 peak RSS는 GNU time으로 쟀습니다.
-- **코퍼스.** 1,000페이지 + 섹션 인덱스. 마크다운 *본문*은 도구 간 바이트
-  동일이고 front matter 문법만 다릅니다. 문단은 76자 문장 하나를 네 번
+- **코퍼스.** 1,000페이지 + 섹션 인덱스. 마크다운 *본문*은 도구 간에 바이트
+  단위로 같고 front matter 문법만 다릅니다. 문단은 76자 문장 하나를 네 번
   반복한 고정 텍스트입니다.
-- **하이라이팅은 다섯 도구 모두 빌드 타임에**, 각자 싣는 그대로 켰습니다:
+- **구문 강조는 다섯 도구 모두 빌드 시점에**, 각자 싣는 그대로 켰습니다:
   syntect+Oniguruma(sqzass), Chroma(Hugo), Giallo(Zola), Rouge(Jekyll),
-  Shiki(Astro). 마크업 세분도는 다릅니다 — 같은 heavy 페이지의 span 수:
+  Shiki(Astro). 마크업 세밀도는 도구마다 다릅니다. 같은 heavy 페이지의 span 수는
   sqzass 3,205 · Jekyll 1,800 · Zola·Astro 1,700 · Hugo 600. sqzass는 다섯 중
-  가장 세밀한 마크업을 내면서 위의 수치를 냅니다.
-- **템플릿.** 다섯 도구 모두 테마 없는 동일한 최소 레이아웃 — 렌더된 본문을
-  감싸는 HTML 셸 — 을 씁니다.
+  가장 세밀한 마크업을 뽑아내면서도 위의 시간을 기록합니다.
+- **템플릿.** 다섯 도구 모두 테마 없는 동일한 최소 레이아웃을 씁니다. 렌더된
+  본문을 감싸는 HTML 셸 하나입니다.
 - **Astro의 시간에는 Node 기동(~1초)이 포함**됩니다. Astro는 마크다운→HTML
-  이상의 일을 하는 컴포넌트 프레임워크이기도 합니다. 그게 정직한 단서이고,
-  이 페이지의 대상은 순수 마크다운 워크로드입니다.
+  이상의 일을 하는 컴포넌트 프레임워크이기도 합니다. 그 점은 숨기지 않고 밝혀
+  둡니다. 다만 코퍼스는 순수 마크다운이고, 이 페이지가 재는 것도 그 워크로드입니다.
diff --git a/docs/content/content/front-matter.ko.md b/docs/content/content/front-matter.ko.md
@@ -66,7 +66,7 @@ badge = "beta"
 없는 키를 읽으면 빈 문자열이 아니라 에러입니다. 얼마나 엄격한지와 그 이유는
 [템플릿 데이터](@/templates/data.md)에 적어 두었습니다.
 
-## 에러는 당신의 파일을 가리킵니다
+## 에러는 소스 파일을 가리킵니다
 
 값이 잘못되면 소스 파일의 줄 번호로 보고합니다. front matter가 끝난 지점부터가
 아니라 **파일 맨 위부터** 센 줄 번호입니다. 후자는 엉뚱한 줄을 가리키니까요.
diff --git a/docs/content/content/languages.ko.md b/docs/content/content/languages.ko.md
@@ -58,8 +58,9 @@ content/start/
 
 이름만이 아니라 **경로**가 중요합니다. `a/notes.md`와 `b/notes.md`는 서로의 번역이
 아니라 다른 두 페이지입니다. 그리고 **선언한 언어인 접미사만** 떼므로,
-`notes.ab.md`라는 파일은 `ab`가 `[languages]`에 없는 한 `notes.ab`를 키로 갖습니다. 파일명이 달라야 할 때 — 슬러그를 현지화하는 경우 등 — 는 양쪽
-파일에 같은 `translation_key`를 주면 됩니다.
+`notes.ab.md`라는 파일은 `ab`가 `[languages]`에 없는 한 `notes.ab`를 키로 갖습니다.
+파일명이 달라야 할 때는 — 슬러그를 현지화하는 경우 등 — 양쪽 파일에 같은
+`translation_key`를 주면 됩니다.
 
 ```toml
 # content/start/installation.md
@@ -79,8 +80,8 @@ translation_key = "install"
 
 ## UI 문자열
 
-페이지의 글은 `content/`에 있습니다. **템플릿이** 넣는 말 — "본문으로 건너뛰기",
-"이 페이지", "이전" — 은 `i18n/<코드>.toml`에 둡니다.
+페이지의 글은 `content/`에 있습니다. **템플릿이** 넣는 말은 `i18n/<코드>.toml`에
+둡니다 — "본문으로 건너뛰기", "이 페이지", "이전" 같은 것들입니다.
 
 ```toml
 # i18n/en.toml
diff --git a/docs/content/content/links.ko.md b/docs/content/content/links.ko.md
@@ -41,7 +41,7 @@ docs/content/start/first-site.md: 어디도 가리키지 않는 링크가 있습
 
 ## 트리에서 일어납니다
 
-재작성은 comrak의 URL 재작성기를 통해 HTML이 만들어지기 **전에**, AST 단계에서
+재작성은 comrak의 URL 재작성기로, HTML이 만들어지기 **전에** AST 단계에서
 일어납니다. 흔한 지름길인 "완성된 HTML에 정규식 돌리기"는 속성을 홑따옴표로 쓰거나
 따옴표를 빼면 조용히 처리에서 빠집니다. 빌드가 아니라 프로덕션에서 발견되는 종류의
 버그입니다.
@@ -54,7 +54,7 @@ docs/content/start/first-site.md: 어디도 가리키지 않는 링크가 있습
 ## 생성된 파일도 링크 대상입니다
 
 `/sitemap.xml`, `/robots.txt`, `/llms.txt`, `/404.html`, `/feed-<언어>.xml`,
-`/search-<언어>.json` 은 검사기 입장에서 페이지와 같습니다. 빌드가 만들어 내므로
+`/search-<언어>.json`은 검사기 입장에서 페이지와 같습니다. 빌드가 만들어 내므로
 그것을 가리키는 링크는 해석됩니다.
 
 예외는 콘텐츠 해시가 붙는 것들입니다. 빌드 뒤에 `/css/main.css`는 존재하지
diff --git a/docs/content/content/markdown.ko.md b/docs/content/content/markdown.ko.md
@@ -5,7 +5,7 @@ weight = 40
 toc = true
 +++
 
-[comrak]을 통한 CommonMark이고, 확장 몇 가지가 기본으로 켜져 있습니다. 각각이
+[comrak]으로 렌더하는 CommonMark이고, 확장 몇 가지가 기본으로 켜져 있습니다. 각각이
 `sqzass.toml`의 `[markdown]` 아래 키입니다.
 
 ```toml
@@ -70,7 +70,7 @@ heading_anchors       = "right"   # none | left | right
 
 ## 제목
 
-모든 제목에 `id`가 붙습니다. anchor를 보여주든 말든 붙는데, 목차와 당신이 남에게
+모든 제목에 `id`가 붙습니다. anchor를 보여주든 말든 붙는데, 목차와 남에게
 건네는 딥링크가 둘 다 여기에 기대기 때문입니다. 같은 제목이 반복되면 `-1`, `-2`가
 붙고, anchor와 목차 항목은 반드시 일치합니다. 한 번의 순회에서 같은 카운터로
 만들어지니까요.
@@ -80,7 +80,7 @@ heading_anchors       = "right"   # none | left | right
 
 ## 원시 HTML
 
-그대로 통과시킵니다. 여기 콘텐츠는 신뢰된 것입니다 — 당신의 저장소에, 당신이 쓰고,
+그대로 통과시킵니다. 여기 콘텐츠는 믿을 수 있습니다 — 저장소 안에 있고, 직접 썼고,
 코드와 같은 커밋에서 리뷰됩니다. 이걸 새니타이즈하는 건 시늉일 뿐입니다.
 
 ## 키가 아닌 설정 둘
@@ -88,9 +88,9 @@ heading_anchors       = "right"   # none | left | right
 둘 다 고정이고, 둘 다 의도한 것입니다. 옵션을 찾다가 없어서 이슈를 쓰기 전에 여기서
 끝나라고 있는 절입니다.
 
-**원시 HTML은 항상 통과합니다.** 콘텐츠는 신뢰된 것입니다. 당신의 저장소에, 당신이
-쓰고, 코드와 같은 커밋에서 리뷰됩니다. 이걸 새니타이즈하는 건 시늉입니다. sqzass가
-언젠가 신뢰되지 않은 마크다운을 받게 되면, 그건 전역 스위치가 아니라 소스별 신뢰
+**원시 HTML은 항상 통과합니다.** 콘텐츠는 믿을 수 있습니다. 저장소 안에 있고, 직접 썼고,
+코드와 같은 커밋에서 리뷰됩니다. 이걸 새니타이즈하는 건 시늉입니다. sqzass가
+언젠가 믿을 수 없는 마크다운을 받게 되면, 그건 전역 스위치가 아니라 소스별 신뢰
 등급이 될 것입니다.
 
 **코드 펜스는 `<pre lang="rust">`가 아니라 `<code class="language-rust">`를
diff --git a/docs/content/deploy/_index.ko.md b/docs/content/deploy/_index.ko.md
@@ -46,7 +46,7 @@ rewrite도 없으므로, 그런 것에 기대는 게 생기면 여기서 가장
 만드는 데 드는 게 없습니다.
 
 `sitemap.xml`이나 `robots.txt`, `llms.txt`를 직접 `static/`에 넣으면 sqzass는 그 파일을 아예
-만들지 않습니다. 당신 것을 덮어쓰지도, 조용히 무시하지도 않습니다.
+만들지 않습니다. 직접 넣은 것을 덮어쓰지도, 조용히 무시하지도 않습니다.
 
 ## 각 안내서
 
@@ -79,7 +79,7 @@ href도, 검색 색인도. 출력 디렉터리는 평평하게 남는데, 그 
 경로를 빠뜨리는 건 여기서 유일하게 **조용한** 실수입니다. 빌드는 성공하고 페이지도
 다 있는데, 모든 링크와 스타일시트가 한 단계 위를 가리킵니다.
 
-## static/ 은 통과 경로입니다
+## static/은 통과 경로입니다
 
 `static/` 안의 것은 경로와 이름이 그대로 유지된 채 출력에 놓입니다. sqzass가 어떤
 호스트도 알지 못한 채로 호스트별 파일이 동작하는 방식입니다.
diff --git a/docs/content/deploy/github-pages.ko.md b/docs/content/deploy/github-pages.ko.md
@@ -93,7 +93,7 @@ curl -sI https://example.com/ | head -1          # HTTPS로 200
 curl -sI https://example.com/nonexistent/        # 200이 아니라 404
 ```
 
-두 번째가 중요합니다. 없는 페이지에 200을 돌려주는 호스트에서는 검색 엔진이 당신의
+두 번째가 중요합니다. 없는 페이지에 200을 돌려주는 호스트에서는 검색 엔진이 그
 404 페이지를 색인하게 됩니다.
 
 ## 감수하는 것
diff --git a/docs/content/deploy/netlify.ko.md b/docs/content/deploy/netlify.ko.md
@@ -25,11 +25,11 @@ Netlify 빌드 이미지에는 Rust 툴체인이 기본으로 없고, 넣으면
 도는 것과 같은 성질입니다.
 
 소스에서 빌드하고 싶으면 `cargo install --git
-https://github.com/sqzer-x/sqzass` 도 됩니다. 다만 느립니다.
+https://github.com/sqzer-x/sqzass`도 됩니다. 다만 느립니다.
 
 ## 배포 프리뷰에는 자기 base_url이 필요합니다
 
-프리뷰는 당신의 도메인이 아니라 `deploy-preview-42--yoursite.netlify.app`에서
+프리뷰는 본 도메인이 아니라 `deploy-preview-42--yoursite.netlify.app`에서
 돕니다. Netlify가 그 주소를 `$DEPLOY_PRIME_URL`에 넣어 주고, `--base-url`이
 바로 이 경우를 위해 설정을 덮어씁니다. 그래야 canonical과 sitemap, OpenGraph 태그가
 프로덕션이 아니라 프리뷰를 가리킵니다.
diff --git a/docs/content/features/dev-server.ko.md b/docs/content/features/dev-server.ko.md
@@ -29,7 +29,7 @@ sqzass serve -i docs
 최적화가 아닙니다. 리빌드 중에 브라우저가 파일을 요청하면 그 시점까지 쓰인 바이트가
 그대로 나가고, 그렇게 나온 반쪽짜리 페이지는 "내 코드 문제가 아니었구나"를 깨닫기까지
 한 시간을 쓰게 되는 종류의 버그입니다. 완성된 빌드를 서빙하거나 아예 서빙하지 않으면
-그 창이 통째로 사라집니다.
+그 틈이 통째로 사라집니다.
 
 ## 새로고침
 
diff --git a/docs/content/features/feeds.ko.md b/docs/content/features/feeds.ko.md
@@ -43,7 +43,7 @@ public/
 
 ## RSS 2.0이 아니라 Atom
 
-RSS의 날짜는 RFC 2822입니다. `Tue, 26 Jul 2026 00:00:00 +0000` 이 형식은 우리가
+RSS의 날짜는 RFC 2822입니다: `Tue, 26 Jul 2026 00:00:00 +0000`. 이 형식은 우리가
 직접 계산해야 하는 **요일**과 직접 박아 넣어야 하는 **영어 월 이름**을 요구합니다.
 한국어 피드에도 그대로 들어가는데, 거기서 `Jul`은 그냥 틀린 표기입니다.
 
@@ -54,7 +54,7 @@ Atom은 RFC 3339를 쓰고, 그건 TOML 날짜가 이미 갖고 있는 모양입
 
 날짜가 있는 최근 20개, 최신순. 각 항목에 제목·퍼머링크·`updated` 시각, 그리고
 `description`이 요약으로 들어갑니다. 20은 우연이 아니라 상한입니다 — 끝없이 자라는
-피드는 언젠가 다운로드가 됩니다.
+피드는 언젠가 읽는 것이 아니라 내려받는 것이 됩니다.
 
 같은 시각에 놓인 페이지는 제목순입니다. 그래야 빌드할 때마다 같은 순서로 나옵니다.
 날짜만 적으면 자정 UTC가 되므로, 실제로는 같은 날 쓴 글끼리가 모두 여기 해당합니다.
@@ -64,10 +64,10 @@ Atom은 RFC 3339를 쓰고, 그건 TOML 날짜가 이미 갖고 있는 모양입
 
 오프셋은 **쓴 그대로 실립니다.** `2026-07-26T09:00:00+09:00`은 그대로 나갑니다.
 RFC 3339가 어떤 오프셋도 받고, 이걸 `Z`로 고쳐 적으면 서울의 아침을 서울의 저녁이라고
-발표하는 셈이기 때문입니다. 정렬은 표기가 아니라 **순간**을 비교하므로, 같은 날의
+발행하는 셈이기 때문입니다. 정렬은 표기가 아니라 **순간**을 비교하므로, 같은 날의
 `+09:00` 아침이 `Z` 오후보다 앞섭니다.
 
-TOML이 시각으로만 읽는 `date`(`10:30:00`)는 조용히 버리지 않고 에러입니다. 당신은
+TOML이 시각으로만 읽는 `date`(`10:30:00`)는 조용히 버리지 않고 에러입니다.
 날짜를 적었는데 빌드가 말없이 다르게 생각해서는 안 됩니다.
 
 ## 날짜순 정렬
diff --git a/docs/content/features/highlighting.ko.md b/docs/content/features/highlighting.ko.md
@@ -38,7 +38,7 @@ theme_dark  = "base16-ocean.dark"
 
 ## 두 테마, 하나의 스타일시트
 
-`theme_light`과 `theme_dark`이 둘 다 생성된 스타일시트에 들어갑니다. 다크 규칙은
+`theme_light`와 `theme_dark`가 둘 다 생성된 스타일시트에 들어갑니다. 다크 규칙은
 두 번 나갑니다. 토글을 쓰지 않는 독자를 위해 `prefers-color-scheme: dark` 아래
 한 번, 이 사이트처럼 전환 버튼을 제공하는 경우를 위해 `[data-theme="dark"]` 아래
 한 번입니다.
@@ -49,7 +49,7 @@ syntect 기본 세트의 테마 이름이면 무엇이든 됩니다. 없는 이
 ## 접두사
 
 클래스에는 `hl-` 접두사가 붙습니다. 접두사가 없으면 syntect는 `source`, `keyword`,
-`string` 같은 이름을 내보내는데, 프로그래밍을 다루는 사이트에서 당신의 스타일시트와
+`string` 같은 이름을 내보내는데, 프로그래밍을 다루는 사이트에서 사이트 스타일시트와
 부딪히기 딱 좋은 일반적인 단어들입니다.
 
 ## 줄 표시와 파일명
@@ -81,7 +81,7 @@ fn main() {
 여러 줄 주석의 가운데 줄만 표시해도 그 줄은 여전히 주석입니다.
 
 `name`은 블록에 파일명을 답니다. 마크업이 아니라 속성으로 나가므로 —
-`<code … data-name="src/main.rs">` — 보여줄지는 당신의 CSS가 정합니다.
+`<code … data-name="src/main.rs">` — 보여줄지는 CSS가 정합니다.
 
 ```css
 .prose pre code { display: block; width: max-content; min-width: 100%; }
@@ -96,8 +96,8 @@ fn main() {
 덕입니다.
 
 Zola식 `rust,hl_lines=2-4`가 아닌 이유: 쉼표는 옵션을 언어 토큰에 붙여 버려서
-문법 조회가 실패하고 `class="language-…"`가 오염됩니다. 첫 공백 뒤는 자유롭고,
-comrak 자신이 정확히 거기서 정보 문자열을 가릅니다.
+문법 조회가 실패하고 `class="language-…"`가 오염됩니다. 첫 공백 뒤에는 무엇이 와도 되고,
+comrak도 바로 거기서 정보 문자열을 가릅니다.
 
 오타는 조용한 무시가 아니라 빌드 에러입니다. `hl_line=3`도, `linenos=true`도,
 세 줄짜리 블록의 `hl_lines=9`도, 두 번 적은 키도 전부 파일명과 함께 빌드를
@@ -107,7 +107,7 @@ comrak 자신이 정확히 거기서 정보 문자열을 가릅니다.
 온 옵션입니다. 옵션은 하이라이터의 일부이므로 `enabled = false`면 적용도 검사도
 되지 않습니다.
 
-## 줄 번호와 복사 버튼은 당신 몫입니다
+## 줄 번호와 복사 버튼은 직접 만듭니다
 
 둘 다 설정 키가 아니고, `line_numbers`는 아무 일도 안 하는 채로 남기느니 **삭제**했습니다.
 아무것도 하지 않는 설정은 없는 것보다 나쁩니다. 누군가 그걸 켜 놓고 기다리게 되니까요.
@@ -144,7 +144,7 @@ document.querySelectorAll(".prose pre").forEach(function (pre) {
 });
 ```
 
-둘 다 당신의 `static/`에 있고, 둘 다 당신이 다시 꾸밀 수 있으며, 둘 다 영원히 같은
+둘 다 `static/`에 있고, 얼마든지 다시 꾸밀 수 있으며, 영원히 같은
 뜻을 유지해야 하는 설정 파일에 키를 하나도 더하지 않습니다.
 
 ## 끄기
diff --git a/docs/content/features/search.ko.md b/docs/content/features/search.ko.md
@@ -36,7 +36,7 @@ public/
 
 브라우저가 이걸 보정해 줄 수도 없습니다. `Intl.Segmenter("ko")`는 한국어 어절을
 통째로 돌려줍니다. ICU는 중국어·일본어·태국어용 사전 분절기를 싣고 한국어용은 싣지
-않기 때문입니다. 그러니 형태소로 만든 색인은 그 색인을 향해 입력된 질의와 맞을
+않기 때문입니다. 그러니 형태소로 쪼갠 색인은 통째로 들어오는 질의와 맞을
 길이 없습니다.
 
 본문을 부분 문자열로 훑으면 이런 문제가 어떤 언어에서도 생기지 않습니다. 대가는
@@ -82,7 +82,7 @@ enabled = false
 
 ## 행 스키마
 
-클라이언트는 당신이 만드는 것이니, 무엇을 읽게 되는지 적어 둡니다. 페이지 하나가
+클라이언트는 직접 만드는 것이니, 무엇을 읽게 되는지 적어 둡니다. 페이지 하나가
 한 행입니다.
 
 | 키 | | |
@@ -103,4 +103,4 @@ Esc, 백드롭, 포커스 트랩, 닫을 때 트리거로 포커스를 되돌리
 플랫폼의 동작입니다. `Ctrl`/`⌘` + `/`로 엽니다.
 
 이건 도구의 기능이 아니라 예제 코드입니다. sqzass는 색인을 쓰고, 그 위에 무엇을
-만들지는 당신의 몫입니다.
+만들지는 직접 정합니다.
diff --git a/docs/content/start/_index.ko.md b/docs/content/start/_index.ko.md
@@ -17,8 +17,8 @@ sort_by = "weight"
 ## 왜 sqzass인가
 
 **마크다운을 트리에서 변환합니다.** 링크 재작성, heading anchor, 목차가 모두
-[comrak]의 AST 연산입니다. 흔한 지름길인 "완성된 HTML에 정규식 돌리기"는 속성을
-홑따옴표로 쓰거나 따옴표를 빼면 조용히 처리에서 빠지고, 그 사실을 프로덕션에서
+[comrak]의 AST 연산입니다. 흔한 지름길인 "완성된 HTML에 정규식 돌리기"는 속성이
+홑따옴표이거나 따옴표가 없는 요소를 조용히 건너뛰고, 그 사실은 프로덕션에서
 알게 됩니다.
 
 **템플릿이 반쯤 쓰인 파일을 읽을 수 없습니다.** `templates/`를 빌드마다 한 번
diff --git a/docs/content/start/cli.ko.md b/docs/content/start/cli.ko.md
@@ -56,7 +56,7 @@ sqzass doctor -i mysite
 ```
 
 `build`는 해석하지 못하는 것을 이미 거부합니다 — 깨진 `@/` 링크, 없는 템플릿, 같은
-URL을 주장하는 두 페이지, 오타 난 설정 키. `doctor`는 **빌드가 받아들이지만 당신이
+URL을 주장하는 두 페이지, 오타 난 설정 키. `doctor`는 **빌드가 받아들이지만
 의도하지 않았을 수도 있는 것**을 봅니다.
 
 | 검사 | | |
diff --git a/docs/content/start/first-site.ko.md b/docs/content/start/first-site.ko.md
@@ -73,7 +73,7 @@ title = "mysite"
 </html>
 ```
 
-`site.highlight_css` 줄은 빌드가 당신의 구문 테마에서 만들어 주는 스타일시트입니다.
+`site.highlight_css` 줄은 빌드가 구문 테마에서 만들어 주는 스타일시트입니다.
 빼면 코드 블록에 색이 없이 나옵니다.
 
 ## 빌드하기
diff --git a/docs/content/start/installation.ko.md b/docs/content/start/installation.ko.md
@@ -45,8 +45,8 @@ cargo build --release
 | C 컴파일러 | rustc가 링커 구동에 씁니다. 기본 빌드는 구문 강조의 정규식 엔진인 Oniguruma도 이걸로 컴파일합니다. |
 | 그 외 | — |
 
-정적 릴리스가 싣는 구성 그대로 — 순수 Rust 정규식 엔진, C 소스 컴파일
-없음 — 는 플래그 하나 거리입니다:
+정적 릴리스가 싣는 구성 그대로, 즉 순수 Rust 정규식 엔진에 C 소스 컴파일이
+없는 상태도 플래그 하나면 됩니다.
 
 ```bash
 cargo build --release --no-default-features --features pure-rust
@@ -67,7 +67,7 @@ sudo install -m755 sqzass-*/sqzass /usr/local/bin/
 리눅스 빌드는 정적이라 glibc를 요구하지 않고, 빌드한 배포판보다 오래된 배포판에서도
 돕니다. 순수 Rust 정규식 엔진을 쓰는 유일한 빌드이기도 합니다 — 다른 모든 곳에서
 sqzass는 코드가 많은 사이트에서 눈에 띄게 빠른 Oniguruma로 강조하는데, Oniguruma는
-C 바인딩이고 C 바인딩은 정확히 musl 정적 빌드를 깨뜨립니다. 두 엔진의 문법 집합도
+C 바인딩이고, musl 정적 빌드를 깨뜨리는 게 바로 C 바인딩입니다. 두 엔진의 문법 집합도
 같지 않습니다. 순수 Rust 엔진이 일부 문법의 정규식을 못 돌리기 때문에 정적
 아티팩트에는 문법 일곱 개가 통째로 빠집니다 — PowerShell, JavaScript (Babel),
 Salt State, ARM Assembly 등이요. 네이티브 빌드가 온전히 칠하는 ` ```powershell `
diff --git a/docs/content/templates/assets.ko.md b/docs/content/templates/assets.ko.md
@@ -15,7 +15,7 @@ static/
 └── CNAME          →  /CNAME
 ```
 
-CSS와 JavaScript는 파일명에 콘텐츠 해시가 붙습니다. 조회는 당신이 쓴 이름으로
+CSS와 JavaScript는 파일명에 콘텐츠 해시가 붙습니다. 조회는 원래 쓴 이름으로
 합니다.
 
 ```html
@@ -26,15 +26,15 @@ CSS와 JavaScript는 파일명에 콘텐츠 해시가 붙습니다. 조회는 
 ## 쿼리 문자열이 아니라 파일명에
 
 `main.css?v=123`에는 문제가 둘 있습니다. 일부 CDN과 프록시는 캐시 키에서 쿼리를
-빼 버려서 무효화가 일어나지 않습니다. 그리고 흔히 쓰이는 형태 — 빌드마다 스탬프
-하나를 전 파일에 붙이는 방식 — 은 CSS 한 줄만 고쳐도 사이트 전체를 무효화합니다.
+빼 버려서 무효화가 일어나지 않습니다. 그리고 흔히 쓰이는 형태, 즉 빌드마다 스탬프
+하나를 전 파일에 붙이는 방식은 CSS 한 줄만 고쳐도 사이트 전체를 무효화합니다.
 
 파일별 콘텐츠 해시는 바뀐 파일만 정확히 무효화하고, 캐시 설정이 아예 없는 호스트를
 포함해 어디서나 똑같이 동작합니다.
 
 ## CSS와 JS만 해시하는 이유
 
-이미지는 보통 문자열 경로로 참조됩니다. 마크다운에서, CSS에서, 때로는 당신이 쓰지
+이미지는 보통 경로를 그대로 적어 참조합니다. 마크다운에서, CSS에서, 때로는 직접 쓰지
 않은 템플릿에서요. 이름을 바꾸면 그 참조들이 깨지는데 고칠 방법이 없습니다.
 
 그리고 어떤 파일명은 그 자체가 계약입니다. `CNAME`은 GitHub Pages에 도메인을
@@ -44,7 +44,7 @@ CSS와 JavaScript는 파일명에 콘텐츠 해시가 붙습니다. 조회는 
 ## 생성된 에셋도 같은 길을 지납니다
 
 하이라이트 스타일시트는 복사되는 게 아니라 테마에서 만들어지지만, 해시와 서빙은
-동일합니다. 템플릿에서는 `site.highlight_css`로 닿습니다.
+동일합니다. 템플릿에서는 `site.highlight_css`로 가져옵니다.
 
 ## 끄기
 
diff --git a/docs/content/templates/functions.ko.md b/docs/content/templates/functions.ko.md
@@ -61,7 +61,7 @@ Jinja2 습관으로 손이 가는 필터 셋은 **없습니다.** `tojson`, `url
 ## 그 밖엔 없습니다
 
 `url_for`도, `markdownify`도, `date`도, `now()`도, `env()`도, 커스텀 테스트도
-없습니다. 그중 일부는 빈자리가 아니라 근거가 있는 부재입니다.
+없습니다. 그중 일부는 미처 못 만든 구멍이 아니라, 이유가 있어 두지 않은 것입니다.
 
 `now()`와 `env()`는 "같은 입력이면 같은 바이트"라는 보장을 깹니다. CI가 push마다
 확인하는 그 보장입니다. 시계를 읽을 수 있는 템플릿은 재현 가능할 수 없습니다.
diff --git a/docs/content/templates/social.ko.md b/docs/content/templates/social.ko.md
@@ -1,13 +1,13 @@
 +++
 title = "소셜 카드와 구조화 데이터"
-description = "이미 있는 값으로 만드는, 당신 소유의 마크업"
+description = "이미 있는 값으로 직접 넣는 마크업"
 weight = 50
 toc = true
 +++
 
 sqzass는 `<head>`에 아무것도 주입하지 않습니다. 주입 지점이 없고 앞으로도 만들지
 않을 것입니다. 조용히 태그를 더하는 생성기는 출력물을 끝까지 읽을 수 없게 만드는
-생성기니까요. 아래는 전부 당신이 `base.html`에 직접 넣는 마크업이고, 재료는 이미
+생성기니까요. 아래는 전부 `base.html`에 직접 넣는 마크업이고, 재료는 이미
 템플릿 컨텍스트에 있는 값들입니다.
 
 ## OpenGraph와 Twitter
@@ -71,7 +71,7 @@ image = "/images/install.png"
 ```
 
 `{%- if page.section %}`를 눈여겨보세요. 최상위 페이지에는 섹션이 없고, 단이 하나
-비어 있는 브레드크럼은 없느니만 못합니다.
+단이 하나 빠진 브레드크럼은 없느니만 못합니다.
 
 > [!WARNING]
 > 이 블록은 `<script>` 안이라 HTML 이스케이프가 맞지 않습니다. 제목에 `"`가 들어가면