无法获得非常简单的 i18n 和动态路由来与 Next.js 一起使用

ric*_*980 5 javascript reactjs next.js nextjs-dynamic-routing

首先,我已经阅读了 Next.js 文档,通过了教程,查看了许多示例,但最终,我仍然无法使用 Next.js 实现一个非常简单的事情。

我有一个具有以下区域设置的应用程序:ende

路线如下:

/en/things/[id]
/de/things/[id]
Run Code Online (Sandbox Code Playgroud)

所以基本上,我需要用两种语言显示一些与事物 ID 无关的静态文本。这些只是所有 ID 都相同的纯文本。然后我有一些实际上需要路径中的 ID 的 AJAX。

现在麻烦开始了:

  1. 如果我没有getStaticPropsthings/[id].js我会收到此错误:
Error: MISSING_MESSAGE: No messages were configured on the provider.
Run Code Online (Sandbox Code Playgroud)
  1. 然后我添加getStaticProps这样的内容:
export async function getStaticProps({locale}) {
  return {
    props: {
      messages: await import(`../messages/${locale}.json`)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并得到这个错误:

Error: getStaticPaths is required for dynamic SSG pages and is missing for '/things/[id]'.
Run Code Online (Sandbox Code Playgroud)
  1. 然后我getStaticPaths这样添加:
export const getStaticPaths = () => ({
  paths: [],
  fallback: 'blocking'
})

Run Code Online (Sandbox Code Playgroud)

因为我有一百万个 ID,所以我无法预先生成所有页面。此外,新的 ID 在应用程序部署后出现,因此我无法在构建期间将所有可能的 ID 列为路径。

现在我得到这个错误:

Error: Error serializing `.messages` returned from `getStaticProps` in "/things/[id]".
Reason: `object` ("[object Module]") cannot be serialized as JSON. Please only return JSON serializable data types.
Run Code Online (Sandbox Code Playgroud)

我无法相信在一个声称可以让使用 React 时的生活变得更轻松的“框架”中实现如此简单的事情怎么会如此困难。我正在尝试将现有应用程序从 create-react-app 迁移到 Next.js,但是非常简单的事情却很难实现。

请告诉我如何实现以下非常简单的事情:

  1. 拥有一个静态页面,其中包含两种语言的静态文本:EN 和 DE。
  2. 让用户像这样访问该页面:/[locale]/things/[id]
  3. 拥有一些实际使用 URI 路径中的事物 ID 的 AJAX 代码。

小智 1

您不应该为本地语言创建 2 个单独的路由,而是设置next-i18next ,它将根据所选的本地语言自动异步您的链接。