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

Next.js中next-intl useTranslations自定义组件服务端报错求助

解决next-intl自定义翻译组件在服务端组件中报错的问题

你的组件使用了useTranslations这个React钩子,而服务端组件(Server Components)不允许使用任何React hooks,这就是报错的核心原因。下面是几种可行的解决方式:

方式一:将自定义翻译组件转为客户端组件

在组件顶部添加'use client'指令,明确标记这是一个客户端组件,即可正常使用useTranslations钩子:

'use client'; // 新增该行标记
import { useTranslations } from "next-intl";

const Translations = ({ children }) => {
  const { t } = useTranslations();

  return t(children);
};

export default Translations;

方式二:在服务端组件中直接使用服务端翻译API

如果需要在服务端组件内处理翻译,可使用next-intl提供的服务端专属方法getTranslations,无需依赖客户端钩子:

import { getTranslations } from 'next-intl/server';

// 这是一个服务端组件
async function ServerComponent() {
  const t = await getTranslations();
  return <div>{t('your.translation.key')}</div>;
}

export default ServerComponent;

方式三:调整组件结构,分离服务端与客户端逻辑

如果服务端组件需要复用翻译逻辑,可以将翻译key通过props传递给客户端翻译组件,避免在服务端组件中直接调用hooks:

// 服务端组件
function ServerComponent() {
  // 处理服务端逻辑,传递翻译key给客户端组件
  return <Translations>your.translation.key</Translations>;
}

// 客户端翻译组件(已标记为客户端组件)
'use client';
import { useTranslations } from "next-intl";

const Translations = ({ children }) => {
  const { t } = useTranslations();
  return t(children);
};

内容的提问来源于stack exchange,提问作者Babri Wala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:25:59