SuperAPI AI 工具集

astro-i18n

前端与建站

查看项目

更新于 10-16 05:29

技能介绍

用途

astro-i18n 是一个面向 Astro 站点的国际化(i18n)技能,主要服务于面向多个市场/语言的线索生成(lead generation)站点。它提供一套可复用的国际化实现模式,涵盖多语言路由、内容翻译、语言切换与 RTL 支持。

主要能力

  • 基于 URL 的路由:采用 /en/、/de/、/fr/ 等路径前缀,兼顾 SEO 与用户辨识度。
  • 翻译管理:通过翻译文件与 t() 函数管理文案,缺失翻译时回退到主语言并输出控制台警告。
  • SEO 优化:在每个页面输出 hreflang 标签以声明语言替代版本,并翻译 title、description、og:locale 等元数据。
  • RTL 支持:针对阿拉伯语/希伯来语,使用逻辑 CSS 属性(如 margin-inline-start)而非 left/right。
  • 语言偏好持久化:将用户语言选择存储在 localStorage/cookie 中。
  • 类型安全:使用 TypeScript 定义语言代码与翻译键。
  • 区域格式化:使用原生 Intl API 按区域格式化日期、数字与货币。

核心规则

  • URL 结构优先:使用 /en/、/de/、/fr/ 前缀。
  • 优雅回退:缺失翻译默认使用主语言并给出控制台警告。
  • 每页必须包含 hreflang 标签。
  • 面向阿拉伯语/希伯来语时使用逻辑 CSS 属性。
  • 持久化用户语言偏好。
  • 翻译键与语言代码使用 TypeScript 保证类型安全。
  • 禁止硬编码文案,所有面向用户的字符串必须来自翻译文件。
  • 翻译 SEO 元数据(title、description、og:locale)。
  • 各语言内容结构应保持对等。
  • 使用 Intl API 按区域格式化日期、数字、货币。

实现概览

技能文档按组件划分实现要点:

  • languages 配置:定义支持的 locale 及元数据,位于 src/i18n/config.ts。
  • 翻译文件:使用带嵌套键的 JSON,位于 src/i18n/translations/{lang}.json。
  • t() 函数:带回退与参数支持的翻译函数,位于 src/i18n/utils.ts。
  • [lang]/ 路由:动态 URL 段,位于 src/pages/[lang]/。
  • 语言切换器:下拉组件,置于布局中。
  • hreflang 标签:SEO 语言替代声明,置于 BaseLayout 的 <head> 中。
  • 中间件:可选的浏览器语言检测,位于 src/middleware.ts。

使用方式

最小配置示例(src/i18n/config.ts):

export const languages = {
  en: { name: 'English', code: 'en-GB', dir: 'ltr' },
  de: { name: 'Deutsch', code: 'de-DE', dir: 'ltr' },
} as const;
export const defaultLang = 'en';
export type Lang = keyof typeof languages;

翻译使用示例:

---
import { t } from '@/i18n/utils';
const lang = getLangFromUrl(Astro.url);
---
<h1>{t(lang, 'hero.title')}</h1>
<p>{t(lang, 'hero.subtitle')}</p>
<button>{t(lang, 'hero.cta')}</button>

动态路由示例(src/pages/[lang]/index.astro):

---
export function getStaticPaths() {
  return Object.keys(languages).map(lang => ({ params: { lang } }));
}
---

参考文档

技能包含以下参考文件:config.md(语言配置、翻译文件、工具函数)、routing.md(动态路由、重定向、中间件)、components.md(基础布局、语言切换器)、content-collections.md(多语言博客文章)、formatters.md(按区域格式化数字、日期、货币)、rtl-support.md(阿拉伯语/希伯来语布局支持)、seo.md(hreflang、Open Graph、站点地图)。

禁止事项

  • 在组件中硬编码文案(应使用 t() 函数)。
  • 页面缺少 hreflang 标签。
  • 未经人工审核的自动翻译。
  • 同一内容使用不同 URL 却无 hreflang 链接。
  • 忽略阿拉伯语/希伯来语的 RTL 要求。
  • 将 locale 放在查询参数(?lang=de)而非路径(/de/)中。
  • 使用 left/right CSS 而非逻辑属性。
  • 忘记翻译元描述与标题。

完成标准

  • 语言配置定义所有支持的 locale。
  • 每种语言的翻译 JSON 文件键覆盖完整。
  • t() 工具函数支持回退到默认语言。
  • 使用 [lang]/ 动态段实现基于 URL 的语言路由。
  • 所有页面包含指向语言替代版本的 hreflang 标签。
  • 导航中包含语言切换器组件。
  • 根路径 / 重定向到默认语言。
  • 可选的浏览器语言检测(通过中间件)。
  • 若面向阿拉伯语/希伯来语则实现 RTL 支持。
  • 使用 Intl API 按区域格式化日期/数字/货币。
  • 内容集合包含各语言条目。
  • 所有面向用户的文本抽取到翻译文件。
  • SEO 元标签已翻译(title、description、og:locale)。

适用场景与限制

该技能适用于使用 Astro 构建、需要面向多语言/多市场进行线索生成的站点。资料未提供具体的收费、价格、平台限制或效果数据。