修复: 中文 i18n 目录名从 zh-Hans 改为 zh-CN,首页 SSR 翻译现已生效 (#42)

Docusaurus 3.10 会把 locale id 'zh-Hans' 规范化为 BCP 47 的 'zh-CN' 来
读取 i18n/ 目录。之前手工创建的 i18n/zh-Hans/ 目录 Docusaurus 识别不到,
导致中文版 SSR 输出仍是英文字符串,只有 URL 路由 /zh-Hans/ 生效。

同时修复 index.tsx 中 <Translate id={labelId}> 动态 id 问题:
write-translations 工具要求静态字符串,已拆分为三个独立的 Translate 元素。
This commit is contained in:
Wu Qing
2026-04-17 13:52:16 +08:00
committed by GitHub
parent c629b5f286
commit 1a0e6d463a
21 changed files with 18 additions and 18 deletions

View File

@@ -44,11 +44,26 @@ function HomepageHeader() {
</Link>
</div>
<div className={styles.metrics}>
<MetricItem labelId="home.metric.backends" valueClass={styles.metricValue}>70+</MetricItem>
<div className={styles.metric}>
<div className={styles.metricValue}>70+</div>
<div className={styles.metricLabel}>
<Translate id="home.metric.backends">Storage backends</Translate>
</div>
</div>
<div className={styles.metricDivider} />
<MetricItem labelId="home.metric.backupTypes" valueClass={styles.metricValue}>5</MetricItem>
<div className={styles.metric}>
<div className={styles.metricValue}>5</div>
<div className={styles.metricLabel}>
<Translate id="home.metric.backupTypes">Backup types</Translate>
</div>
</div>
<div className={styles.metricDivider} />
<MetricItem labelId="home.metric.license" valueClass={styles.metricValue}>Apache 2.0</MetricItem>
<div className={styles.metric}>
<div className={styles.metricValue}>Apache 2.0</div>
<div className={styles.metricLabel}>
<Translate id="home.metric.license">License</Translate>
</div>
</div>
</div>
</div>
<div className={styles.heroCode}>
@@ -81,21 +96,6 @@ function HomepageHeader() {
);
}
function MetricItem({children, labelId, valueClass}: {children: ReactNode; labelId: string; valueClass: string}) {
return (
<div className={styles.metric}>
<div className={valueClass}>{children}</div>
<div className={styles.metricLabel}>
<Translate id={labelId}>
{labelId === 'home.metric.backends' ? 'Storage backends'
: labelId === 'home.metric.backupTypes' ? 'Backup types'
: 'License'}
</Translate>
</div>
</div>
);
}
export default function Home(): ReactNode {
const {siteConfig} = useDocusaurusContext();
return (