Skip to main content
Version: Current

国际化

官网用 URL 语言前缀 决定语言,而不是浏览器语言或 localStorage。

路由约定​

  • 支持:zh(默认)、en
  • 首页:/zh、/en
  • 内部链接使用 <LocalizedLink to="Activity">(src/lib/LocalizedLink.jsx),会自动加上当前 locale
  • 切换语言:Navbar「中 | EN」,或 useLocale().switchLocale('en')

mailto: 与 http(s): 链接不会被加上 locale 前缀。

命名空间​

在 src/i18n/index.js 注册,中英各一份 JSON:

命名空间文件用途
commoncommon.json页脚、document.title、无障碍文案
navnav.json导航与下拉项
homehome.json首页
activityactivity.json活动
aboutabout.json关于与部门
resourcesresources.json资源
honorhonor.json荣誉墙界面文案
partnershippartnership.json合作页界面文案

荣誉墙/合作伙伴的条目数据仍在页面旁 JSON,不一定走 i18n 命名空间。

在组件中使用​

import { useTranslation } from 'react-i18next';

const { t } = useTranslation('activity');
return <h1>{t('title')}</h1>;

嵌套 key 用点号,例如 t('activityItems.xinChunJiaNianHua')。

添加或修改翻译​

  1. 在 src/locales/zh/<namespace>.json 与 src/locales/en/<namespace>.json 写入同一 key。
  2. 组件里 useTranslation('该命名空间')。
  3. 新增命名空间时:创建中英 JSON → 在 src/i18n/index.js import → 写入 resources.zh / resources.en。

漏注册命名空间时,t('...') 会原样显示 key。

不翻译政策​

以下保持原文:

  • BUCSSA、CSSA、BU
  • 人名、邮箱
  • 外部 URL、PDF 文件名

活动详情、部门详情页正文保持中文,但路由必须在 /en/ 下可访问(切换语言不能 404)。列表页、导航、页脚应提供英文。

LanguageSwitcher​

src/components/LanguageSwitcher.jsx 调用 switchLocale,只改路径中的 locale 段并保留 search/hash。不要在切换时手动 i18n.changeLanguage——MainLayout 已根据 URL 同步。