111,368+ 个全球品牌依靠Weglot 翻译其网站
// how it works
四个步骤。您的组件保持不变。
源语言和目标语言来自您的Weglot 项目,而非您的代码。该插件会在构建时读取您 JSX 中的文本,并获取其翻译内容。
-
安装该软件包并添加您的 API 密钥
创建一个“Weglot 2.0”项目,然后从项目设置中复制其 API 密钥。该密钥以
pk_. 保留.env不在版本控制范围内。终端 · .env$ npm install @weglot/translate-react # .env WEGLOT_API_KEY=pk_your_weglot_api_key
-
添加插件
将您的 Next.js 配置包裹在
withWeglot. 点sourceRoot到存放您的页面和组件的文件夹中。添加
weglotPlugin到你的 Vite 配置中。使用 Webpack 时,请从@weglot/translate-react/webpack而是。next.config.tsimport type { NextConfig } from "next"; import { withWeglot } from "@weglot/translate-react/next"; const nextConfig: NextConfig = {}; export default async function (): Promise<NextConfig> { return await withWeglot(nextConfig, { sourceRoot: "./app" }); }
vite.config.tsimport { defineConfig } from "vite"; import { weglotPlugin } from "@weglot/translate-react/vite"; export default defineConfig({ plugins: [weglotPlugin({ sourceRoot: "src" })], });
-
添加提供商
将根布局用以下代码包裹起来:
WeglotProvider从 Next.js 的入口点开始,这样切换语言时,服务器组件就会自动刷新。使用以下方式封装您的应用程序:
WeglotProvider,尽早。app/layout.tsximport { WeglotProvider } from "@weglot/translate-react/react/next"; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <body> <WeglotProvider>{children}</WeglotProvider> </body> </html> ); }
src/main.tsximport { WeglotProvider } from "@weglot/translate-react/react"; root.render( <WeglotProvider> <App /> </WeglotProvider>, );
-
使用项目中的每种语言进行构建和发布
每次构建都会从Weglot 获取缺失的翻译,并写入
public/translations/<locale>.json. 忽略该文件夹。使用以下代码添加一个语言切换器:LocaleSwitcher或useWeglotContext..gitignorepublic/translations/
// compare
为什么不使用经典的 i18n 库呢?
i18n 库要求你将每个字符串替换为一个键,并为每种语言维护一个文件。Weglot 则会读取你已经编写的字符串。以下是这些选项的对比。
| 标准 | Weglot@weglot/translate-react |
next-intl / i18next | Paraglide JS | CMS 本地化 |
|---|---|---|---|---|
| 将字符串封装在 t() 或消息函数中 | 否在构建时检测到了 JSX 中的文本。 | 是的t("key") 对于每个字符串。 |
是的m.key() 消息功能。 |
仅内容代码中的字符串仍然需要一个库。 |
| 各语言的翻译文件 | 无需维护在构建时生成,已被添加到 Git 忽略列表中。 | 是通常每个语言环境对应一个 JSON 文件。 | 是每个语言环境对应一个消息文件。 | 否存储在CMS中。 |
| 多语言路由与搜索引擎优化(按语言生成的URL、hreflang) | 尚未语言信息存储在Cookie中。所有语言使用相同的URL,源语言已建立索引。 | next-intl:是内置了区域设置路由功能。i18next:通过您的框架配置实现。 | 是内置本地化 URL:包含语言前缀、已翻译的路径或域名。请自行添加 hreflang 标签。 | 前端无头内容管理系统(CMS)按语言环境存储内容。URL 和 hreflang 来自您的前端。 |
| 为您生成的翻译 | 是Weglot 在构建过程中通过大型语言模型(LLM)进行翻译。 | 否请自带翻译内容或使用翻译管理系统(TMS)。 | 借助工具inlang CLI 机器翻译,或您的编码代理。 | 付费插件付费套餐中的 AI 翻译功能:Contentful AI Actions、Sanity AI Assist、Strapi AI Translations。 |
| 无需开发人员即可编辑翻译 | 是在Weglot 仪表盘中进行审阅和编辑。 | 否编辑 JSON 文件,或添加一个单独的 TMS。 | 使用 Finkinlang 的网页编辑器,需拥有 GitHub 账户。 | 是在CMS编辑器中。 |
| 由一位编程代理在一条提示中完成设置 | 是一次安装,两次配置修改。下方提供可复制的提示。 | 耗时较长的任务该代理将每个字符串重写为键和文件。 | 耗时较长的任务init 如果不提示选择代理就运行,那么每个字符串都会变成一个 m.key() 消息。 |
不适用已在内容管理系统(CMS)中配置。 |
// built for coding agents
专为人工智能编程代理而设计
如果您使用 Claude Code、Cursor 或 Codex 进行构建,您的代理可以自动添加Weglot 。由于无需重写任何字符串,因此该更改幅度较小且易于审查。
01 · 设置
代理会进行安装和配置
一 npm install,一个插件,一个提供商,一行代码 .gitignore. 该代理仅需您提供 API 密钥。
$ npm install @weglot/translate-react
// for your team
无需触碰代码即可进行编辑和审阅
每项翻译都会显示在您的Weglot 项目中。产品团队、市场团队和译员可以在该项目中直接审阅和编辑译文,无需提交拉取请求。
- 请检查 Weglot 为您的应用生成的翻译内容。
- 在Weglot 仪表盘中编辑任何翻译。
- 排除 代码中的任何内容,包括
translate="no"或data-weglot-skip.
// fit
何时应使用Weglot ,何时不应使用
该软件包目前处于预览阶段。以下是它当前的适用场景。
如果需要,请访问 @weglot/translate-react
- 您的应用在 Next.js(App Router)或 Vite 上运行 React 19。
- 你不想把字符串用 t() 包裹起来,也不想为每种语言维护一个文件。
- 您的编码代理编写了大部分代码,而您希望翻译能跟上它的进度。
- 不具备编程能力的人也需要审核和修改翻译内容。
- 您的 UI 文本存储在代码中,而 CMS 内容则可在服务器端进行翻译。
如果……,请使用其他方法
- 您需要为每种语言设置一个 URL,并确保翻译后的页面能被搜索引擎收录。请使用 next-intl 或 Paraglide JS。
- 您希望将翻译内容以文件形式存放在代码库中,并通过拉取请求进行审核。请将 inlang 与 Paraglide JS 或 i18next 配合使用。
- 您的应用基于 React 18、Next.js Pages Router 或 Next.js 14 及更早版本。
- 您的网站是使用内容管理系统(CMS)或网站构建工具搭建的,而非 React。请使用Weglot 提供的 CMS 集成功能。
常见问题
它是否支持SEO:每种语言一个URL以及hreflang?
今天不行。访客的语言信息存储在 Cookie 中,且所有语言版本都通过相同的 URL 提供,因此搜索引擎只会收录源语言版本。
您可以使用以下方式翻译页面标题和描述: tDynamicAll 在 generateMetadata. 如果您现在需要按语言生成的索引 URL,请使用支持区域设置路由的库,例如 next-intl 或 Paraglide JS。
如何翻译来自内容管理系统(CMS)、API 或用户的动态内容?
该插件仅翻译代码中包含的文本。对于代码无法访问的内容,请调用 tDynamic, tDynamicAll 或 tDynamicHtml 来自 @weglot/translate-react/dynamic 在 Next.js 服务器组件中。
如果 API 响应时间超过 500 毫秒,或者首次请求某段文本,则返回源文本。后续请求时即可获得翻译结果。如果您自行缓存数据,请根据访问者的语言设置缓存规则。
Next.js 还是 Vite:有什么变化?
Next.js 使用 withWeglot 来自 @weglot/translate-react/next 以及 WeglotProvider 来自 @weglot/translate-react/react/next. Vite 使用 weglotPlugin 来自 @weglot/translate-react/vite 以及 WeglotProvider 来自 @weglot/translate-react/react. Webpack 使用 weglotPlugin 来自 @weglot/translate-react/webpack.
动态内容功能仅在 Next.js 服务器组件中运行。
它支持 React 服务器组件吗?
是的,使用 Next.js 应用路由器。导入 WeglotProvider 来自 @weglot/translate-react/react/next 这样,更改语言后,服务器组件就会自动刷新。 tDynamic, tDynamicAll 以及 tDynamicHtml 在服务器端运行,位于服务器组件中。
编译时会发生什么?
该插件会在 JSX 中查找位于 sourceRoot 并向Weglot API 请求其缺失的翻译。Weglot 会通过大型语言模型(LLM)生成这些翻译,而构建过程最多会等待 translationTimeout (默认值为 300 秒)。随后它会写入 public/translations/<locale>.json.
如果翻译失败,构建将失败,并将其接收的内容保存在本地缓存中:请重新构建以继续。使用 buildMode: "cache-only",该构建版本不会进行任何网络调用。
翻译文件存储在哪里?
在您的Weglot 项目中,您可以在那里审阅和编辑这些内容。每次构建还会将收到的翻译保存在 <sourceRoot>/weglot/cache/<locale>.json. 将该文件夹提交以进行构建(无需调用 API),或者将其忽略。 public/translations/ 被生成并放入 .gitignore.
哪些内容会被翻译,我该如何排除某些内容?
JSX 中的文本、JSX 表达式中的字符串字面量、从常量中读取的字符串,以及诸如 title, alt, placeholder 以及 aria-label. JSX 之外的代码、URL、类名和字符串保持不变。添加 translate="no" 或 data-weglot-skip 要保留元素的原始语言。使用以下方式声明自定义文本属性: translatableAttributes.
无需重写代码,即可让您的 React 应用支持多语言
安装该软件包,添加您的 API 密钥,然后进行构建。
$ npm install @weglot/translate-react
更喜欢自己动手?请阅读文档或查看 npm 上的该包