国际化¶
本站支持三种语言,提供完整的内容与界面翻译。
支持的语言¶
代码 |
标签 |
角色 |
|---|---|---|
|
English |
默认语言 |
|
简体中文 |
简体中文 |
|
日本語 |
日语 |
配置位于 src/lib/i18n.ts:
export const locales = ["en", "zh-CN", "ja"] as const;
export type Locale = (typeof locales)[number];
export const defaultLocale: Locale = "en";
语言路由¶
所有路由均以语言段作为前缀(例如 /en/blog、/zh-CN/blog)。src/middleware.ts 中的中间件负责执行此规则:
直通 --- 对
/_next、/api、/fonts以及静态文件(路径中包含.)的请求不做处理有效语言 --- 如果路径的第一段是
en、zh-CN或ja,请求将直接通过,不做修改检测 --- 解析
Accept-Language请求头;选择第一个匹配的语言,若无匹配则回退到en重定向 --- 将用户重定向到
/{detectedLocale}{path}
中间件匹配器排除了 _next、api、fonts、favicon.ico、robots.txt 和 sitemap.xml。
翻译系统¶
t() 函数提供带占位符支持的界面翻译:
t(key: string, locale: Locale, params?: Record<string, string | number>): string
行为:
返回给定语言对应的翻译字符串
如果请求的语言中缺少该键,则回退到
en如果完全不存在翻译,则返回原始键名
支持
{placeholder}插值:t("pageOf", "zh-CN", { page: 1, total: 5 })→"第 1 页,共 5 页"
翻译键¶
共定义了约 80 个键,按功能区域组织:
Navbar: brand, blog, gallery, solutions, pricing,
developer, login, adminLogin
博客: readMore、featuredArticles、allArticles、noArticles、noArticlesTitle、noArticlesDesc、publishedOn、by、filterByCategory、filterByTag``(含 ``{tag})、allCategories、searchPlaceholder、categories、tags、share、copyLink、linkCopied、seeMore、home、lastUpdated``(含 ``{date})
图库: mediaGallery、noGalleries、viewGallery、photos
分页: previous、next、pageOf``(含 ``{page} 和 {total})
页脚: 分区标题(products、platform、services、company)、链接标签、法律链接(termsOfService、disclaimer、privacyPolicy、manageCookies)、copyright``(含 ``{year})、icp
Cookie 同意: 横幅文本和按钮、设置对话框标题和开关说明(必要、性能、广告)
主题: lightMode、darkMode
错误: backToHome、httpErrorCode、errorSuggest、tryAgain,以及 HTTP 状态码 400、401、403、404、405、408、429、500、502、503、504 和默认错误的标题与描述
SEO: siteTitle、siteDescription
CMS 内容本地化¶
Strapi 文章和分类在服务端进行本地化。种子脚本首先创建英文内容,然后通过 Strapi 的 /actions/localize 端点添加 zh-CN 和 ja 的本地化版本。
fetchPublicArticles 和 fetchCategories 函数会将 locale 查询参数传递给 Strapi,Strapi 据此返回相应的翻译内容。
添加新语言¶
在
src/lib/i18n.ts的locales数组中 添加语言代码在
localeLabels中 添加标签(例如"ko": "한국어")在翻译对象中为所有键 添加翻译
在 Strapi 中为已有文章和分类 添加 CMS 本地化内容
测试 中间件能否从
Accept-Language检测到新语言
LocaleSwitcher 组件会自动渲染 localeLabels 中的所有条目,因此无需修改组件代码。