使用 gatsby-plugin-react-i18next 时 Gatsby 找不到客户端路由

2024-01-02

我正在 Gatsby 中使用客户端路由gatsby-plugin-react-i18next。当我尝试在不使用默认语言的情况下访问其中一个客户端路由时,例如url 前缀为/sv,然后我发现该路线不存在。如果我添加前缀/sv到路由器基本路径,Default组件/路径正在工作,但不是Profile组件/路径。

使用默认语言时不带/sv前缀,一切都按预期工作。

src/pages/account.tsx

<Router basepath={'/account'}>
  <AccountRoute path="/profile" component={Profile} />
  <Default path="/" />
</Router>

gatsby-node.js

exports.onCreatePage = async ({ page, actions }) => {
  const { createPage } = actions
  if (page.path.match(/^\/account/)) {
    page.matchPath = "/account/*"

    createPage(page)
  }
}

我也尝试过添加前缀/sv to the matchPath in gatsby-node.js但随后我被重定向到双前缀/sv/sv不存在的路线。如果我告诉gatsby-plugin-react-i18next为了不为帐户页面生成语言页面,我得到了相同的结果。

gatsby-config.js

{
  resolve: `gatsby-plugin-react-i18next`,
  options: {
    ...
  },
  pages: [
    {
      matchPath: '/:lang?/account/(.*)',
      getLanguageFromPath: true
    },
  ]
}

我们想要解决:

  1. 让 lang 前缀发挥作用
  2. 让默认页面(无语言前缀)正常工作

为此,我目前使用了这个解决方案:

gatsby-node.js:

function langPrefix(page) {
  return page.context.language === page.context.i18n.defaultLanguage &&
    !page.context.i18n.generateDefaultLanguagePage
    ? ''
    : `/${page.context.language}`
}



exports.onCreatePage = ({ page, actions }) => {
  const { createPage } = actions
  // Removing the ^ skips an optional /:lang prefix
  if (page.path.match(/\/app/)) {
    // adding lang if it's not the default page.
    page.matchPath = `${langPrefix(page)}/app/*`
    createPage(page)
  }
}

此外,我复制了路由来处理带有和不带有 lang 前缀的情况:

<...>
  {/* Version for default language (no /:lang/ in path) */}
  <Router basepath={`/app`}>
    <ViewerWrapper path="/:myProp" />
  </Router>
  {/* Version for explicit language (/:lang/ in path) */}
  <Router basepath={`/:lang/app`}>
    <ViewerWrapper path="/:myProp" />
  </Router>
</...>

现在继续简化:)

道具马里奥·斯克莱克 https://newbedev.com/how-to-create-dynamic-route-in-gatsby and ozburo https://github.com/microapps/gatsby-plugin-react-i18next/issues/69#issuecomment-843613097对于他们的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gatsby-plugin-react-i18next 时 Gatsby 找不到客户端路由 的相关文章

随机推荐

  • 将标准输出流式传输到网页

    这看起来应该是一件非常简单的事情 不幸的是 Web 开发从来都不是我的强项 我有很多脚本 我想从网页启动它们并查看页面上的实时标准输出文本 有些脚本需要很长时间才能运行 因此正常的单一响应不够好 我已经开始工作了 据我所知 我的选择是 st
  • .DrawImage 具有不透明度?

    g DrawImage 是的 在我的图片框中画一个图像 是否可以给它一个不透明属性 我一直在查看 DrawImage 的其他版本 但找不到这样的东西 您必须使用 ColorMatrix 来混合图像 这是我不久前编写的一个 C 控件 它向您展
  • 哪些小部件约束对于 Grails 域类有效?

    你能告诉我有效值的列表吗小部件约束 http grails org doc 2 0 x ref Constraints widget html下面 一些小部件 例如 static constraints someField widget s
  • Visual Studio 增量构建:XML 文档文件创建得太晚

    我有一个 Visual Studio 2005 的 DLL 项目 它打开了 XML 文档文件 每当我进行增量构建时 在构建后事件执行期间 输出目录中没有 XML 文档文件 如果我在构建后事件期间暂停构建 使用来自GnuWin32 CoreU
  • 使用单个 NSMutableArray 填充 UITableView 部分表

    抱歉再次询问带有完整描述的问题 我有 resultsArray 其中包含从服务器获取的标题描述等 但问题是我想分节显示此数据 假设有来自数组的三个部分 那么如何使用单个 resultArray 填充每个部分中的数据 NSString tab
  • isset() 的 PHP 简写? [复制]

    这个问题在这里已经有答案了 如果 PHP 中不存在某个变量 是否有一种快捷方式将其分配给该变量 if isset var var 我想做类似的事情 var var PHP 7 更新 谢谢震惊狂野 https stackoverflow co
  • 可以使用 Firebase RemoteConfig 来存储 API 密钥吗?

    注意 澄清一下 这不是 Firebase API 密钥 这可能更像是一个令牌 客户端应用程序拥有并由服务器端点验证的东西 我们正在努力更好地保护 API 密钥 想想用于验证端点客户端的令牌 这一切都将在我们的内部网络上 但我们仍然希望确保只
  • golang 中的函数与 switch 的表

    我正在用 go 编写一个简单的模拟器 我应该吗 还是应该回到 c 不管怎样 我正在获取指令并对其进行解码 此时我有一个像 0x81 这样的字节 我必须执行正确的函数 我应该有这样的东西吗 func sys cpu eval switch o
  • iOS 的自动布局可以重新排列 UI 小部件吗

    我有一个应用程序 它具有不同的纵向和横向用户界面 我听说过有关自动布局的精彩内容 但在我所有的阅读中 它似乎可以处理简单的情况 其中 UI 小部件可以简单地调整大小和重新定位 在我的 UI 中 UI 小部件移动 在这种情况下 我应该尝试让自
  • 哪里可以下载mysql jdbc jar? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我安装并尝试使用 jasper reports studio 当您尝试为报告创建数据源时遇到的第一堵墙
  • 将下拉值传递给静态方法后面的代码

    我试图在自动完成方法后面的代码中使用语言选择值 我尝试使用隐藏字段 但这不起作用 ajax 也不适合我 这是我的 html 下拉菜单 div class row div
  • ViewContext 未接收来自 newBackgroundContext() 的更新

    堆栈溢出中已经有类似的问题 但它对我不起作用 我的应用程序中有一个用例 我必须观察数据库更改才能执行某些操作 接收我订阅的更新NSManagedObjectContextObjectsDidChange通知 针对 ViewContext 并
  • NestedScrollView 内带有锚点的 Webview

    我有一个 NestedScrollView 里面有一个 WebView WebView 包含一个带有锚点的 HTML 文件 这些文件链接到同一文件但不同的位置 想象一下 菜单 和 内容 容器 当您单击菜单项时 内容 中的相应部分应该出现在屏
  • 在 Visual Studio 代码中运行 asm

    Visual Studio代码 mac 中是否有某种可以运行基本程序集的插件 例如以下内容 section text globl start start movl 1 eax movl 0 ebx int 0x80 事实上 目前我正在 ss
  • PhoneGap 捕获插件导致 Android 崩溃

    当我使用捕获插件时 它总是在拍照后使应用程序崩溃 当我单击 捕捉 按钮时 它会打开相机应用程序 我拍照 然后单击复选标记 然后应用程序关闭并显示 不幸的是 HelloWorld 已停止 然后 如果我查看图库应用程序 照片就在那里 我做错了什
  • Node.JS 上的 WooCommerce WebHook 签名匹配问题

    我正在尝试在我的 Node js 网站上验证来自 WooCommerce 的 webhook 交易 但是我无法让 2 个字符串匹配 可以看到php签名是用下面的代码生成的 源码可以看这里WooCommerce 来源 https github
  • 带滚动的 UITextView 动态设置调整大小为默认值

    我已经实现了一个有底部的 ViewControllerUIView含有UITextView禁用滚动 当您在其中键入内容时会调整大小 当包含的文本高度达到 90 像素时 我启用滚动 gt scrollEnabled YES 应该发生什么 Th
  • 使用 Jest 对依赖于 http 调用的代码进行单元测试的最佳方法?

    假设我有一个与 firebase 身份验证系统一起使用的登录和注销功能 一个单元将如何测试这种方法 firebase 应用程序实例被导入并在登录功能中使用 如果需要 代码片段 export function login data retur
  • 为什么 coord_map 会产生奇怪的输出?

    我正在尝试使用绘制世界地图ggplot 我的代码在我的要点文件 https gist github com pachevalier 38666a7fecab76f986b4 当我不使用时输出是正确的coord map但当我使用时很奇怪coo
  • 使用 gatsby-plugin-react-i18next 时 Gatsby 找不到客户端路由

    我正在 Gatsby 中使用客户端路由gatsby plugin react i18next 当我尝试在不使用默认语言的情况下访问其中一个客户端路由时 例如url 前缀为 sv 然后我发现该路线不存在 如果我添加前缀 sv到路由器基本路径