Docusaurus v2按国家分档:如何基于语言/国家控制侧边栏显隐
解决Docusaurus v2按语言/国家自定义侧边栏的方案
方法1:为各语言版本单独配置侧边栏
Docusaurus支持为不同语言指定独立的侧边栏配置文件,步骤如下:
- 在项目根目录的
sidebars.js同级,创建对应语言的侧边栏文件,比如sidebars.cn.js(中文)、sidebars.es.js(西班牙文)。 - 每个语言专属的侧边栏文件里,只列出对应地区需要展示的文档路径。比如针对中国区版本,移除仅在欧美可用的功能文档条目。
- 修改
docusaurus.config.js中的i18n配置,为每个locale绑定对应的侧边栏配置:
module.exports = { i18n: { defaultLocale: 'en', locales: ['en', 'cn', 'es'], localeConfigs: { en: { sidebarPath: require.resolve('./sidebars.js'), }, cn: { sidebarPath: require.resolve('./sidebars.cn.js'), }, es: { sidebarPath: require.resolve('./sidebars.es.js'), }, }, }, };
- 确保各语言版本的文档目录结构对应,比如
docs/cn/存放中文文档,docs/es/存放西班牙文文档,侧边栏配置里的路径指向对应目录下的文件。
方法2:动态生成侧边栏(适合复用部分配置的场景)
如果不想维护多份重复的侧边栏配置,可以通过代码逻辑根据当前locale过滤条目:
- 在
sidebars.js中,获取当前运行的locale(可通过环境变量传递)。 - 定义基础侧边栏条目,再根据locale添加对应地区的功能:
const getSidebar = () => { // 从环境变量获取当前构建的locale,默认英文 const currentLocale = process.env.DOCUSAURUS_LOCALE || 'en'; // 基础侧边栏结构 const baseSidebar = [ { type: 'doc', id: 'intro', }, { type: 'category', label: '通用功能', items: ['feature1', 'feature2'], }, { type: 'category', label: '地区专属功能', items: [], }, ]; // 按locale填充地区专属内容 switch(currentLocale) { case 'cn': baseSidebar[2].items.push('feature-cn-1', 'feature-cn-2'); break; case 'es': baseSidebar[2].items.push('feature-es-1', 'feature-es-2'); break; default: baseSidebar[2].items.push('feature-en-1', 'feature-en-2'); } return { docs: baseSidebar, }; }; module.exports = getSidebar();
- 构建不同语言版本时,通过环境变量指定locale:
DOCUSAURUS_LOCALE=cn npm run build
方法3:自定义插件扩展侧边栏逻辑
如果前两种方法不够灵活,可以编写自定义Docusaurus插件,监听docusaurus:generateSidebar钩子,在侧边栏生成阶段根据当前locale动态过滤或添加条目。
注意事项
- 确保对应语言目录下的文档文件存在,避免出现404错误。
- 使用动态生成方式时,构建阶段必须正确传递locale参数,防止侧边栏生成异常。
内容的提问来源于stack exchange,提问作者Gustavo Delgado
相关产品推荐
相关产品推荐

