2026-10-28 · Projects

Five languages, one site: how astro-blog does multilingual

Multilingual here is not a plugin that translates titles — it is an organizing principle that runs from the content folders through the UI copy to the admin panel.

Five languages, one site: how astro-blog does multilingual

astro-blog supports Simplified Chinese, Traditional Chinese, English, Japanese and Korean. This is not an afterthought “translate button in the corner” — it is designed into the content structure from day one: a post can have five language versions, every settings field can be multilingual, and when a reader switches language, the whole site’s copy, lists and filters switch with it.

Language as part of the content structure

Five versions of every post

Posts live in per-language folders: src/content/posts/zh-Hans/, en/, ja/ and so on. The five versions of one post share the same slug and carry the same translationKey in their frontmatter, which is how the site knows “these five files are one article”. The article you are reading is organized exactly this way.

What if a language is missing

Not every post needs all five versions. When a language is missing, the post simply does not appear in that language’s list — the site never pads a list with a version the reader cannot read. One post fewer is better than one post in the wrong language.

Multilingual interface copy

Settings are language maps

It is not just the site title. Navigation labels, page titles, button text — interface elements are stored in the settings files as language maps: one field, five pieces of copy. Rendering picks the current language, falling back to Simplified Chinese and then English, so a page never shows a blank where copy should be.

Filters understand language too

The homepage category and tag filters carry multilingual labels and match values: Chinese readers see Chinese category names filtering Chinese posts, English readers see English ones, with identical logic underneath.

The reader’s experience

Language switching is a capsule control; one tap changes the page copy, the post cards and the date formats. Post cards are rendered in all languages at build time, so switching is a purely client-side pick — no new request, effective the instant you tap.

The real cost of multilingual is in writing and maintenance: one five-language article is five files. Next, a look at the content shapes — beyond long posts, this blog also has short notes, an archive, and a customizable homepage filter bar.

2026-10-28 · プロジェクト紹介

5つの言語、1つのサイト:astro-blog の多言語設計

多言語とは、タイトルを翻訳するプラグインを付けることではありません。コンテンツのフォルダ構成から UI の文言、管理画面まで貫く組織の原則です。

5つの言語、1つのサイト:astro-blog の多言語設計

astro-blog は簡体字中国語、繁体字中国語、英語、日本語、韓国語の 5 言語に対応しています。これは「ページの隅に翻訳ボタンを置く」ような後付けではなく、初日からコンテンツ構造に組み込まれた設計です。1 本の記事が 5 つの言語版を持ち、設定ファイルの各フィールドが多言語であり得て、読者が言語を切り替えれば、サイト全体の文言・一覧・絞り込みが一緒に切り替わります。

言語はコンテンツ構造の一部

記事ごとに 5 バージョン

記事は言語別フォルダに収められます:src/content/posts/zh-Hans/、en/、ja/ など。同じ記事の 5 バージョンは同じ slug を使い、frontmatter に同じ translationKey を書くことで、サイトは「この 5 ファイルは 1 本の記事だ」と認識します。今読んでいるこの記事も、まさにその方式で組織されています。

ある言語が欠けていたら

すべての記事に 5 言語が揃っている必要はありません。言語が欠けていれば、その言語の一覧にその記事は登場しません。読めない言語の記事で水増しするくらいなら、1 本少ない方がましだという考え方です。

UI 文言の多言語

設定は言語マップ

対象はサイトタイトルだけではありません。ナビゲーションのラベル、ページタイトル、ボタンの文言——UI の要素は設定ファイルの中で「言語マップ」として保存されます:1 フィールドに 5 言語分の文言。レンダリング時は現在の言語を選び、なければ簡体字中国語、次に英語へフォールバックするので、文言が空白になることはありません。

絞り込みも言語を理解する

トップページのカテゴリ・タグ絞り込みは、表示名もマッチする値も多言語です。中国語の読者には中国語のカテゴリ名で中国語の記事を絞り込み、英語の読者には英語で、仕組みは同一です。

読者の体験

言語切替はカプセル型のコントロールで、タップ 1 回でページの文言、記事カード、日付の書式まで切り替わります。記事カードはビルド時に全言語分がレンダリング済みのため、切替は純粋にクライアント側の選択——再リクエストなしに、その場で反映されます。

多言語の本当のコストは執筆と保守にあります。5 言語の記事 1 本は 5 ファイルです。次回はコンテンツの形について——長文記事のほかに、このブログには短いノート、アーカイブ、カスタマイズ可能なトップページの絞り込みがあります。

2026-10-28 · 프로젝트 소개

다섯 가지 언어, 하나의 사이트: astro-blog의 다국어 설계

다국어란 제목을 번역해 주는 플러그인을 다는 일이 아닙니다. 콘텐츠 폴더 구조부터 인터페이스 문구, 관리 화면까지 관통하는 조직 원칙입니다.

다섯 가지 언어, 하나의 사이트: astro-blog의 다국어 설계

astro-blog는 중국어 간체, 중국어 번체, 영어, 일본어, 한국어 다섯 언어를 지원합니다. 페이지 구석에 번역 버튼을 붙인 식의 뒤늦은 대처가 아니라, 첫날부터 콘텐츠 구조에 심어 둔 설계입니다. 글 하나가 다섯 가지 언어 버전을 가질 수 있고, 설정 파일의 모든 필드가 다국어일 수 있으며, 독자가 언어를 바꾸면 사이트 전체의 문구와 목록과 필터가 함께 바뀝니다.

언어는 콘텐츠 구조의 일부

글마다 다섯 가지 버전

글은 언어별 폴더에 보관됩니다. src/content/posts/zh-Hans/, en/, ja/ 같은 식입니다. 한 글의 다섯 버전은 같은 slug를 쓰고 frontmatter에 같은 translationKey를 적어, 사이트가 “이 다섯 파일이 하나의 글”이라고 알 수 있게 합니다. 지금 읽고 있는 이 글이 바로 그렇게 조직되어 있습니다.

어떤 언어가 빠져 있으면

모든 글이 다섯 언어를 다 갖출 필요는 없습니다. 언어가 빠져 있으면 그 언어의 목록에 그 글은 나타나지 않습니다. 읽을 수 없는 언어의 글로 목록을 채우느니, 한 편 적은 편이 낫습니다.

인터페이스 문구의 다국어

설정은 언어 맵

사이트 제목만이 아닙니다. 내비게이션 라벨, 페이지 제목, 버튼 문구 같은 인터페이스 요소는 설정 파일 안에 “언어 맵” 형태로 저장됩니다. 필드 하나에 다섯 언어의 문구. 렌더링할 때는 현재 언어를 고르고, 없으면 중국어 간체, 그다음 영어로 대체하므로 문구가 빈칸으로 남는 일은 없습니다.

필터도 언어를 이해한다

홈페이지의 카테고리와 태그 필터는 표시 이름도 매칭 값도 다국어입니다. 중국어 독자에게는 중국어 카테고리 이름으로 중국어 글을, 영어 독자에게는 영어로, 아래의 논리는 완전히 같습니다.

독자의 경험

언어 전환은 캡슐 버튼 하나로 이뤄지며, 한 번 누르면 페이지 문구와 글 카드와 날짜 형식이 함께 바뀝니다. 글 카드는 빌드 시점에 모든 언어 버전이 렌더링되어 있어 전환은 순수하게 클라이언트 쪽 선택일 뿐, 새 요청 없이 누르는 즉시 반영됩니다.

다국어의 진짜 비용은 쓰는 일과 유지하는 일에 있습니다. 다섯 언어짜리 글 하나는 파일 다섯 개입니다. 다음 글에서는 콘텐츠의 형태를 다룹니다. 긴 글 말고도 이 블로그에는 짧은 노트와 아카이브, 맞춤 설정이 가능한 홈페이지 필터가 있습니다.

2026-10-28 · 项目介绍

五种语言,一个站点:astro-blog 的多语言设计

多语言不是装个插件翻译标题,而是从内容目录、界面文案到编辑后台的一整套组织方式。

五种语言,一个站点:astro-blog 的多语言设计

astro-blog 支持简体中文、繁体中文、英语、日语、韩语五种语言。这不是“页面右上角有个翻译按钮”式的事后补丁,而是从第一天就长在内容结构里的设计:一篇文章可以有五个语言版本,站点设置里的每个字段都可以是多语言的,读者切换语言时,整站的文案、列表和筛选都跟着换。

语言是内容结构的一部分

每篇文章五个版本

文章按语言分目录存放:src/content/posts/zh-Hans/、en/、ja/ 等等。同一篇文章的五个版本使用相同的 slug,并在 frontmatter 里写同一个 translationKey,站点据此知道“这五篇其实是一篇”。你正在读的这篇文章,就是这样组织的。

缺了某个语言怎么办

不是每篇文章都必须五种齐全。某个语言缺失时,该语言的文章列表里就不会出现它,不会拿别的语言硬凑——宁可少一篇,也不给读者一篇看不懂语言的文章。

界面文案的多语言

设置即语言映射

站点标题不是全部。导航文字、页面标题、按钮文案……这些界面元素在设置文件里以“语言映射”的形式保存:一个字段对应五种语言五份文案。渲染时按当前语言取值,取不到时按简体中文、英文的顺序降级,页面永远不会露出空白。

筛选也懂语言

首页的分类与标签筛选,按钮显示名和匹配值都是多语言的:中文读者看到中文的分类名,筛的是中文文章的分类;英文读者看到英文的,逻辑完全一致。

读者的体验

切换语言是一个胶囊按钮,点一下整页文案、文章卡片、日期格式都跟着变。文章卡片在构建时就把五个语言的版本都渲染好,切换是纯前端的挑选,没有重新请求,点下去立刻生效。

多语言带来的真正成本在写作和维护:一篇五语文章是五个文件。下一篇聊聊内容形态——除了长文章,这个博客还有随记、归档和一套可自定义的首页筛选。

2026-10-28 · 項目介紹

五種語言,一個站點:astro-blog 的多語言設計

多語言不是裝個外掛翻譯標題,而是從內容目錄、介面文案到編輯後台的一整套組織方式。

五種語言,一個站點:astro-blog 的多語言設計

astro-blog 支援簡體中文、繁體中文、英語、日語、韓語五種語言。這不是「頁面右上角有個翻譯按鈕」式的事後補丁,而是從第一天就長在內容結構裡的設計:一篇文章可以有五個語言版本,站點設定裡的每個欄位都可以是多語言的,讀者切換語言時,整站的文案、列表和篩選都跟著換。

語言是內容結構的一部分

每篇文章五個版本

文章按語言分目錄存放:src/content/posts/zh-Hans/、en/、ja/ 等等。同一篇文章的五個版本使用相同的 slug,並在 frontmatter 裡寫同一個 translationKey,站點據此知道「這五篇其實是一篇」。你正在讀的這篇文章,就是這樣組織的。

缺了某個語言怎麼辦

不是每篇文章都必須五種齊全。某個語言缺失時,該語言的文章列表裡就不會出現它,不會拿別的語言硬湊——寧可少一篇,也不給讀者一篇看不懂語言的文章。

介面文案的多語言

設定即語言映射

站點標題不是全部。導航文字、頁面標題、按鈕文案……這些介面元素在設定檔案裡以「語言映射」的形式保存:一個欄位對應五種語言五份文案。渲染時按目前語言取值,取不到時按簡體中文、英文的順序降級,頁面永遠不會露出空白。

篩選也懂語言

首頁的分類與標籤篩選,按鈕顯示名和匹配值都是多語言的:中文讀者看到中文的分類名,篩的是中文文章的分類;英文讀者看到英文的,邏輯完全一致。

讀者的體驗

切換語言是一個膠囊按鈕,點一下整頁文案、文章卡片、日期格式都跟著變。文章卡片在建構時就把五個語言的版本都渲染好,切換是純前端的挑選,沒有重新請求,點下去立刻生效。

多語言帶來的真正成本在寫作和維護:一篇五語文章是五個檔案。下一篇聊聊內容形態——除了長文章,這個部落格還有隨記、歸檔和一套可自訂的首頁篩選。