You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13 App目录下AppRouterInstance无locale属性的替代方案咨询

在Next.js 13 App目录中获取locale的替代方案

在Next.js 13的App目录下,next/navigation提供的useRouter确实没有locale属性,且原next/router不再适用,以下是不同场景下获取locale的替代方法:

服务器组件(Server Components)

方法1:从路由参数获取(推荐)

如果你的路由结构采用[locale]动态路由(比如app/[locale]/page.js),可直接从组件的params参数中解构locale:

// app/[locale]/page.js
export default function Page({ params }) {
  const { locale } = params;
  return <div>当前语言:{locale}</div>;
}

方法2:从请求头获取

通过next/headers提供的headers()方法,读取next-language请求头获取当前locale:

import { headers } from 'next/headers';

export default function Page() {
  const headersList = headers();
  const locale = headersList.get('next-language');
  return <div>当前语言:{locale}</div>;
}

客户端组件(Client Components)

Next.js 13.4及以上版本提供了专门的useLocale钩子,用于客户端组件获取locale,使用前需先在next.config.js中配置国际化路由:

1. 配置国际化路由

在next.config.js中添加i18n配置:

/** @type {import('next').NextConfig} */
const nextConfig = {
  i18n: {
    locales: ['en', 'zh-CN', 'es'],
    defaultLocale: 'en',
  },
};

module.exports = nextConfig;

2. 使用useLocale钩子

在客户端组件中导入并使用useLocale:

'use client';

import { useLocale } from 'next/navigation';

export default function ClientComponent() {
  const locale = useLocale();
  return <div>当前语言:{locale}</div>;
}

内容的提问来源于stack exchange,提问作者Muhsin Ummer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:03:11