diff --git a/website/README.md b/website/README.md
index 4b10a2b..1a6fcc9 100644
--- a/website/README.md
+++ b/website/README.md
@@ -1,7 +1,8 @@
# OpenTerminal 官网
OpenTerminal 的产品介绍站点,部署在 GitHub Pages。
-纯静态 HTML + CSS,**无构建步骤、无第三方依赖**,改完即可发布。
+纯静态 HTML + CSS + 原生 JS,**无构建步骤、无第三方依赖**,改完即可发布。
+支持四语言:简体中文(源码基准)、繁体中文、English、日本語。
## 线上地址
@@ -11,10 +12,12 @@ OpenTerminal 的产品介绍站点,部署在 GitHub Pages。
```
website/
-├── index.html # 单页站点:功能介绍 / 下载 / 更新日志
+├── index.html # 单页站点:功能介绍 / 下载 / 更新日志(文案挂 data-i18n 键)
├── .nojekyll # 让 GitHub Pages 原样托管(跳过 Jekyll 处理)
└── assets/
├── style.css # 全部样式(深色默认 / 浅色可切换,主题令牌在 :root 与 html[data-theme='light'])
+ ├── i18n.js # 四语言文案字典 window.OPENTERMINAL_I18N
+ ├── i18n-apply.js # 语言层:选定语言 → 写 DOM / / title / meta,并绑定语言切换控件
├── fonts/ # 自托管 woff2:Space Grotesk 400/500/600/700、JetBrains Mono 400/500/600
├── shot-terminal.jpg # 主界面截图(三路分屏并行 AI 编程 Agent,含背景图个性化)
├── shot-agents.png # 多路 AI Agent 分屏截图(无背景图版)
@@ -25,9 +28,80 @@ website/
└── icon.png # 应用图标(来自仓库 build/icon.png)
```
+## 语言层(i18n)
+
+**单文件 + 语言层**,不是复制四份 HTML:HTML 只有一份(文案是简体中文原文,同时作为缺键时的兜底),
+所有可翻译文本通过 data 属性挂键,`assets/i18n.js` 提供四语言字典,`assets/i18n-apply.js` 在运行时写入。
+
+### 三种挂键方式
+
+| 属性 | 行为 | 例子 |
+| --- | --- | --- |
+| `data-i18n="k"` | 写 `textContent`(纯文本) | `
下载
` |
+| `data-i18n-html="k"` | 写 `innerHTML`(需要内联标签时) | `…
同一个…
` |
+| `data-i18n-attr="attr:k"` | 写属性,多组用 `;` 分隔 | `
` |
+
+`` 和三个 meta 也走同一套机制(``、``),
+所以「HTML 里出现的键」和「字典里的键」可以一次性机器比对,不存在漏网的特殊分支。
+
+### 键命名
+
+扁平命名,与 HTML 结构对应:
+
+- `meta.*`、`a11y.skip`、`brand.*`
+- `nav.*`(含 `nav.themeToLight` / `nav.themeToDark`,由页尾脚本在主题切换时取用)
+- `hero.*`、`spec.*`
+- `features.*`、`cap.NN.title` / `cap.NN.li.N`(8 张能力卡)、`cap.hint`
+- 四个 feature-row:`fw.*`(Workbench / AI Agent)、`fs.*`(SFTP)、`fc.*`(Customize)、`fl.*`(Security)
+- `dl.*`(下载表格与自动更新说明)、`cl.*`(更新日志小节)、`changelog.<版本>.li.N`(每条更新一条键)
+- `footer.*`
+
+产品名 `OpenTerminal`、版本号、命令、URL、快捷键(`Ctrl+L` / `Ctrl+F`)、技术名词(SSH / SFTP / WebGL / xterm.js / ZMODEM / MIT…)一律不译。
+各节拉丁 eyebrow(`Capabilities` / `Workbench` / `SFTP` / `Customize` / `Security` / `Download` / `Changelog`)是刻意的排版元素,四语言保持一致。
+
+### 加一条文案
+
+1. 在 `index.html` 的对应元素上加 `data-i18n="新键"`,元素里保留简体中文原文(作为兜底)
+2. 在 `assets/i18n.js` 的**四个语言块里都加上同名键**——键集合必须完全一致
+3. 跑下面的「改完必跑」三条命令
+
+漏加某个语言的键不会显示空白:`i18n-apply.js` 会回落到简体中文。但键集合不一致会让「键一致性」检查失败,属于必须修的。
+
+### 语言选择与首帧防闪
+
+选定语言优先级(`index.html` 头部内联脚本与 `i18n-apply.js` 用的是同一套判定):
+
+1. URL 参数 `?lang=xx`(一次性,不写 localStorage,便于分享指定语言的链接)
+2. `localStorage['openterminal.lang']`
+3. `navigator.languages` 前缀匹配(`zh-TW`/`zh-HK`/`zh-MO` → 繁中,其余 `zh*` → 简中,`ja*` → 日文,`en*` → 英文)
+4. 默认 `zh-CN`
+
+**首帧不闪中文**:HTML 源码是简体中文,若等脚本跑完再翻译,非中文用户会先看到一帧中文。
+所以头部内联脚本在设置 `document.documentElement.lang` 的同时,非 `zh-CN` 时给 `` 挂上 `data-i18n-pending`,
+`style.css` 末尾的 `html[data-i18n-pending] body { visibility: hidden }` 把 body 先藏住;
+页尾的 `i18n-apply.js` 应用完文案后立刻摘掉该属性(`finally` 里摘,异常也不会把页面藏死)。
+另有一条 2.5s 兜底定时器(头部脚本里),保证脚本加载失败时页面最终一定可见。
+
+导航栏 `.nav-right` 里的 `