如何在 Next.js 中设置 i18n 翻译的 URL 路由?

2024-04-06

我在用Next.js i18n 路由 https://nextjs.org/docs/advanced-features/i18n-routing设置多语言网站。这非常有效。如果我创建一个文件/pages/about.js这将根据我的区域设置创建 URL,例如:

  • CN ->/about
  • 德->/de/about
  • 英语->/es/about

那就好了。

如果我想要每种语言的翻译 URL 路由怎么办?我被困在如何设置这个问题上......

  • CN ->/about
  • 德->/de/uber-uns
  • 英语->/es/nosotros

?


您可以利用以下方式实现翻译后的 URL 路由rewrites https://nextjs.org/docs/api-reference/next.config.js/rewrites#rewrites-with-i18n-support在你的next.config.js file.

module.exports = {
    i18n: {
        locales: ['en', 'de', 'es'],
        defaultLocale: 'en'
    },
    async rewrites() {
        return [
            {
                source: '/de/uber-uns',
                destination: '/de/about',
                locale: false // Use `locale: false` so that the prefix matches the desired locale correctly
            },
            {
                source: '/es/nosotros',
                destination: '/es/about',
                locale: false
            }
        ]
    }
}

此外,如果您希望在客户端导航期间保持一致的路由行为,您可以围绕next/link组件以确保显示翻译后的 URL。

import { useRouter } from 'next/router'
import Link from 'next/link'

const pathTranslations = {
    de: {
        '/about': '/uber-uns'
    },
    es: {
        '/about': '/sobrenos'
    }
}

const TranslatedLink = ({ href, children }) => {
    const { locale } = useRouter()
    // Get translated route for non-default locales
    const translatedPath = pathTranslations[locale]?.[href] 
    // Set `as` prop to change displayed URL in browser
    const as = translatedPath ? `/${locale}${translatedPath}` : undefined

    return (
        <Link href={href} as={as}> 
            {children}
        </Link>
    )
}

export default TranslatedLink

然后使用TranslatedLink代替next/link在你的代码中。

<TranslatedLink href='/about'>
    <a>Go to About page</a>
</TranslatedLink>

请注意,您可以重复使用pathTranslations动态生成对象rewrites数组中的next.config.js并且翻译后的 URL 具有单一的真实来源。

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

如何在 Next.js 中设置 i18n 翻译的 URL 路由? 的相关文章

  • 无法在react-native android中设置ShadowColor

    环境 环境 操作系统 macOS High Sierra 10 13 1 节点 8 9 1 纱线 0 17 10 npm 5 6 0 守望者 4 7 0 Xcode Xcode 9 2 内部版本 9C40b Android Studio 2
  • 如何调用另一个组件中的方法并传递查询参数

    这是我的问题 我有一个下拉菜单 其中包含选项列表 选择一个选项后 将打开一个新选项卡 其中包含该特定选项的 Tableau 仪表板 由于我需要向后端发送查询字符串 Option ID 我该如何解决查询参数问题 这是我的下拉组件 import
  • 是否可以覆盖material-ui组件的默认道具?

    可以说我想要每一个Button组件来自material ui有默认的 propsvariant contained color secondary 这可能吗 这方面的文档在这里 https material ui com customiza
  • 设置时区 React-Datepicker

    我正在使用反应日期选择器 https www npmjs com package react datepicker让用户选择一个日期 但是 现在它使用本地时间 PDT 但我想对其进行硬编码以使用特定时区 PST 我尝试使用utcOffset
  • 如何为 NextAuth.js 创建自定义 UI(使用 AWS Cognito)?

    是否可以为 AWS Cognito 提供自定义 UINextAuth js https next auth js org 当我使用 NextAuth js 调用 API 时 我看到这个 主观上丑陋的 屏幕 只有一个按钮可以将您重定向到真正的
  • 样式组件如何影响性能?

    使用样式组件是否比样式表更会降低 Web 应用程序的速度 如果我关心性能并且没有任何依赖于 props 的样式 我是否应该放弃样式组件并使用样式表 当您有很多小组件时 同时使用样式化组件渲染 性能开销可能会很有意义 绝对值得测试以删除小元素
  • react-hook-form:检查未保存的更改

    我有一个由以下人员控制的预填写表格react hook form https react hook form com const control handleSubmit formState setValue reset useForm
  • “ReactNode”不是有效的 JSX 元素

    我有以下代码 代码沙箱 https codesandbox io s react typescript forked 50beyp file src App tsx import ComponentType ReactNode from r
  • React:如何从react-router-dom通过链接传递道具?

    我正在努力通过title从道具到我的Dishes组件使用但找不到解决方案 有什么建议么 import Link from react router dom const Category title gt return title expor
  • 处理 Redux 和 React 中错误的最佳实践

    我的 redux 操作中有一个异步函数 它在我的减速器中返回一个像这样的对象 user fetching false fetched false error null 所以基本上当我开始调用异步函数时我将 redux 状态更新为fetchi
  • 添加 CSS 来响应创建的元素,例如 data-reactroot

    在我的根div下 react 自动 创建另一个div 有没有办法向该 div 添加一个类 我需要添加 height 100 来防止背景内容在显示覆盖层时在移动设备中滚动 这就是我检查网站上的元素时显示的方式 单击按钮时 我需要将 heigh
  • Laravel 5 - URL 查询字符串的 NGINX 服务器配置问题

    Laravel 没有从 URL 查询字符串接收任何 GET 变量 GET 和 Input all 为空 Example example app ex login php country US country US 从未出现在我的 GET 变
  • 澳大利亚的 Facebook Open Graph 区域设置

    我正在尝试为澳大利亚网站添加 og locale 标签 但 Facebook 的 linter 告诉我有一个错误 根据文档 并假设正确的内容应该是什么 我已将其添加到我的页面标题中 Facebook 的 linter http develo
  • 获取 JSON 中的 HTML 以在 React 组件中呈现为 HTML

    试图找出如何让链接实际呈现为链接 现在 在我从 Json 文件中读取这行文本后 React 将超链接渲染为文字文本 而不将其渲染为链接 一些数据 json about John has a blog you can read a href
  • Menu.Item 中的 Antd 自动换行

    可以在 Menu Item 组件中应用自动换行吗 示例不起作用
  • 提及列表和表情符号顶部位置 (Draft.js)

    您能帮我如何将其位置从下到上更改吗 我想在文本顶部而不是底部显示提及列表 关于表情符号列表的同样问题 示例链接 https www draft js plugins com plugin emoji 你可以通过以下方式实现它position
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component

随机推荐

  • 在 Java 中获取输入最有效的方式是什么?

    我正在解决这个问题question http www codechef com problems INTEST 这是我的代码 import java io IOException import java util Scanner publi
  • NodeJS 字符串格式像 Python 一样吗?

    在 python 中 我可以执行以下操作 name bob print Hey s name 有没有类似的东西 或者Python的 format 在 JavaScript NodeJS 中 您可以使用实用程序格式 https nodejs
  • 仅当系统唤醒时触发计时器 (macOS)

    我正在开发一个进行网络调用的 mac 应用程序 我正在使用一个Timer每 15 分钟进行一次网络调用以刷新一些数据 我只希望在用户使用系统时触发计时器并进行调用 否则它只是进行不必要的调用 即系统未睡眠时 我该怎么做 我读到关于 mach
  • Android 自定义启动器 startActivity() 阻止 BOOT_COMPLETED 意图

    我目前正在开发一个自定义 ROM 基于 CyanogenMod 11 0 旨在实现自定义 Kiosk 模式 为此 我在一个应用程序中包含三个组件 具有系统权限 服务 用于处理对状态 导航栏的修改并禁用电源键 接收方 仅在BOOT COMPL
  • Firemonkey相机组件太慢

    我有一个问题TCameraComponent在安卓上 我第一次运行该应用程序时 相机正常 但如果我停止TCameraComponent再次启动 相机变得太慢 对正在发生的事情有什么想法吗 CameraComponent1 Active fa
  • c中指针的数据类型是什么?

    指针是整数还是无符号数据类型 不 它们是指针 其大小取决于系统 并且唯一兼容的类型是void
  • Material UI 中的交互式目录

    我希望我能够从我的应用程序中的 Material ui 网站重新创建这个小菜单 现在我有一个带有列表和链接的组件 import Link List ListItem from material ui core const burgerRec
  • Google Cast iOS SDK v3.3 存档上传问题

    我使用最新版本的Xcode 8 2 1 b8C1002 和最新版本GoogleCast framework 3 3 0 显然我跟随了这些步骤 https developers google com cast docs ios sender
  • 我的所有组件什么时候加载?

    我有一个组件 它有几个孩子 他们也可能有一些孩子 我无法预测是否所有孩子都会被加载 因为这取决于您查看的内容 我想要实现的是加载内容时显示的加载指示器 但我不想为每个组件显示加载指示器 因为我最终会有 10 15 个加载指示器 我的想法是
  • Backbone:同一模型的多个视图模型

    新手骨干问题 背景 建立一个有骨干的购物清单 我有一个名为名称 描述和标签 数组 属性的模型类 我想基于此模型或此模型的集合创建两个视图 第一个视图将显示所有项目 如下所示 ul li h3 Item 1 Name h3 p Item 1
  • PHP 在 URL 中使用 cURL 和 GET 请求

    我使用 cURL 而不是 file get contents 它在 URL 上运行良好 直到我使用 GET 请求变量代替下面 URL 上的城市 在以下方面使用 cURL 有效 url http www weather forecast co
  • 如何复制 ag-grid 中存在的值

    我正在使用 ag grid 绑定列表中的值 是否可以复制所选单元格中的值 数据 我尝试使用 ctrl c 复制该值 但它不起作用还有其他方法吗 请帮我 有一个标志允许您选择文本 然后按 CTRL C 即可 enableCellTextSel
  • 无法从 python 中的本地模块导入类

    我在本地目录中有一个模块 parser py class Parser object class Parser2 object 我想将它们导入 mainScript py 中 但是我得到了 错误模块解析器中没有名称 解析器 from par
  • 将图像拖放到 Chrome 中的 contenteditable 中到光标处

    在 Firefox 中 如果我将图像从桌面拖到可内容编辑的字段中 它将作为 base64 嵌入到突出显示的光标位置 JSFiddle http jsfiddle net zupa YrwsS http jsfiddle net zupa Y
  • 使用 PowerShell 创建 Outlook 电子邮件草稿

    我正在创建一个 PowerShell 脚本来自动化工作流程 此过程需要填写电子邮件并发送给其他人 电子邮件将始终大致遵循相同类型的模板 但每次可能都不会相同 因此我想在 Outlook 中创建电子邮件草稿并打开电子邮件窗口 以便可以在发送之
  • Java 浮点值格式化为两位小数

    以下是我添加两个值的代码 float ptoTotalAmount 0 Map
  • 当服务器抛出异常时如何避免用户收到 500 错误

    我的服务器日志中出现以下错误 2012 03 06 09 20 43 HTTP JVM CLFAD0211E 引发异常 有关更详细的信息 请查阅位于 D Lotus Domino data domino workspace logs 的 e
  • 监听添加的表行

    假设我有一张桌子 table tr tr table function btn click function table append
  • 使用 ASP.NET 将 HTML 表导出到 Excel

    I have an html table Not Gridview and that has no proper Header and rows Instead it has customized structure and data I
  • 如何在 Next.js 中设置 i18n 翻译的 URL 路由?

    我在用Next js i18n 路由 https nextjs org docs advanced features i18n routing设置多语言网站 这非常有效 如果我创建一个文件 pages about js这将根据我的区域设置创