feat(website/i18n): 6 语(加 日/韩/俄/西)+ 默认英文

- strings.ts: [zh,en] 二元组 → Record<Lang,string> 六语对象(157 条,ja/ko/ru/es
  据英文翻译,无红线词,scan-redline 过);createT 回退英文;PRICES 补 4 语(复用
  USD 价)
- 路由:默认英文移到 /(原 zh);中文挪 /zh/;新增 /ja//ko//ru//es/;删冗余 /en/
- Site.astro:html lang / canonical / hreflang(6+x-default)/ og:locale 全部改
  为按语言查表(HTML_LANG/OG_LOCALE/langPath)
- Header.jsx:langseg 2 项 → 原生 select 6 语下拉(横排会挤);+ .langsel 样式
- astro build 通过,6 页生成;/ 英文、/zh/ 中文、/ja/ 日语标题均已本地化

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
This commit is contained in:
wangjia
2026-07-07 13:29:35 +08:00
parent 3aeb2a8680
commit f0d574bc44
10 changed files with 258 additions and 183 deletions
+17 -4
View File
@@ -44,6 +44,13 @@ export default function Header({ lang = 'zh', t = {} }) {
['#docs', t.docs],
];
// 6 语言:默认 en=/,其余 /<lang>/。段控横排会挤,用原生下拉。
const langs = [
['en', 'English'], ['zh', '中文'], ['ja', '日本語'],
['ko', '한국어'], ['ru', 'Русский'], ['es', 'Español'],
];
const langHref = (l) => (l === 'en' ? '/' : `/${l}/`);
return (
<header class={`hdr${scrolled ? ' scrolled' : ''}`}>
<div class="wrap row">
@@ -57,10 +64,16 @@ export default function Header({ lang = 'zh', t = {} }) {
))}
</nav>
<div class="right">
<div class="langseg">
<a data-lang="zh" class={lang === 'zh' ? 'on' : undefined} href="/">中文</a>
<a data-lang="en" class={lang === 'en' ? 'on' : undefined} href="/en/">EN</a>
</div>
<select
class="langsel"
value={lang}
onChange={(e) => { window.location.href = langHref(e.target.value); }}
aria-label="Language"
>
{langs.map(([code, label]) => (
<option key={code} value={code}>{label}</option>
))}
</select>
<a class="linklogin" href={SITE.usercenter}>{t.login}</a>
<a class="btn btn-primary" href="#download">
<Download />