app-template/packages/i18n/AGENTS.md

1.5 KiB
Raw Permalink Blame History

AGENTS.md — @app/i18n

职责

文案与 locale 纯函数库:静态 messages、t()、Accept-Language 解析、cookie 名。
不依赖 Astro/React/DB;islands 与 .astro 共用同一套查表,不要引入 i18next。

结构

src/
  locales.ts           # Locale、LOCALES、DEFAULT_LOCALE、PREFIX_LOCALE
  cookie.ts            # COOKIE_LANG = "app-lang"
  accept-language.ts   # parsePreferredLocale / shouldRedirectRootToEn
  preferred.ts         # resolvePreferredLocale(cookie > Accept-Language > zh-CN)
  messages/zh-CN.ts    # key 权威源
  messages/en.ts       # 必须与 zh-CN 同构
  t.ts                 # t(locale, key, params?)
  index.ts

key 按域分组(<domain>.<name>):nav / home / dashboard / auth / library / browse / watch / mounts / danmaku / error / meta / locale。

约定

  • 中文 /zh-CN、英文 /en 前缀;裸 / 仅由 middleware 检测后 302,不挂页面。
  • 页面路由:@app/web 用 单套 src/pages/[locale]/… 动态前缀,不要复制 zh-CN/、en/ 目录。
  • 新增文案:先改 zh-CN.ts,再补 en.ts(类型强制 key 对齐)。
  • 插值仅支持 {name};无 ICU/复数(需要时再扩展)。
  • React island:传 locale prop 或组件内 t(locale, key),不靠 Provider。
  • 路径检测与 302 在 @app/web 的 middleware.ts,本包只提供解析函数。

命令

yarn workspace @app/i18n typecheck
yarn workspace @app/i18n build