适用于 Next.js 应用的最佳国际化(i18n)解决方案
您是否希望将您的 Next.js 应用扩展到新的市场?TacoTranslate 让本地化您的 Next.js 项目变得非常容易,使您能够轻松面向全球受众。
为什么为 Next.js 选择 TacoTranslate?
- 无缝集成:专为 Next.js 应用设计,TacoTranslate 可无缝集成到你现有的工作流中。
- 自动字符串收集:不再需要手动管理 JSON 文件。TacoTranslate 会自动从你的代码库中收集字符串。
- AI 驱动的翻译:利用 AI 的能力,提供符合上下文并契合应用语气的精准翻译。
- 即时语言支持:只需一键即可添加对新语言的支持,使你的应用面向全球用户。
工作原理
随着世界日益全球化,网络开发者构建能够满足来自不同国家和文化的用户的应用程序变得越来越重要。实现这一目标的关键方式之一是国际化(i18n),它使您能够将应用程序适配为不同的语言、货币和日期格式。
在本教程中,我们将探讨如何在带有服务器端渲染的 React Next.js 应用中添加国际化功能。 TL;DR: 在此查看完整示例。
本指南适用于使用 Pages Router 的 Next.js 应用。
如果您使用的是 App Router,请改用此指南。
步骤 1: 安装一个 i18n 库
要在你的 Next.js 应用中实现国际化,首先我们会选择一个 i18n 库。已有几个流行的库,包括 next-intl. 但是,在本例中,我们将使用 TacoTranslate.
TacoTranslate 会使用最先进的 AI 将你的字符串自动翻译成任何语言,并帮你摆脱对 JSON 文件的繁琐管理。
让我们在终端中使用 npm 来安装它:
npm install tacotranslate
第2步: 创建一个免费的 TacoTranslate 账户
既然您已经安装了该模块,现在是时候创建您的 TacoTranslate 账户、一个翻译项目以及相关的 API 密钥。在此创建账户。它是免费的,且无需添加信用卡。
在 TacoTranslate 应用程序的 UI 中,创建一个项目,并转到其 API 密钥选项卡。创建一个 read
密钥,以及一个 read/write
密钥。我们会将它们保存为环境变量。 read
密钥就是我们所说的 public
,而 read/write
密钥则是 secret
。例如,你可以将它们添加到项目根目录的 .env
文件中。
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
请务必不要将机密的 read/write
API 密钥泄露到客户端的生产环境中。
我们还将添加另外两个环境变量: TACOTRANSLATE_DEFAULT_LOCALE
和 TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: 默认的回退区域代码。在此示例中,我们将其设置为en
(英语)。TACOTRANSLATE_ORIGIN
: 存放字符串的“文件夹”,例如您网站的 URL。 在此了解有关来源的更多信息。
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
第 3 步: 设置 TacoTranslate
要将 TacoTranslate 集成到您的应用中,您需要使用前面提供的 API 密钥创建一个客户端。例如,创建一个名为 /tacotranslate-client.js
的文件。
const {default: createTacoTranslateClient} = require('tacotranslate');
const tacoTranslate = createTacoTranslateClient({
apiKey:
process.env.TACOTRANSLATE_SECRET_API_KEY ??
process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
process.env.TACOTRANSLATE_API_KEY ??
'',
projectLocale: process.env.TACOTRANSLATE_DEFAULT_LOCALE ?? '',
});
module.exports = tacoTranslate;
我们将很快自动定义 TACOTRANSLATE_API_KEY
。
将客户端创建在单独的文件中可以让以后更容易再次使用。现在,使用自定义的 /pages/_app.tsx
,我们将添加 TacoTranslate
Provider 组件。
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';
type PageProperties = {
origin: Origin;
locale: Locale;
locales: Locale[];
localizations: Localizations;
};
export default function App({Component, pageProps}: AppProps<PageProperties>) {
const {origin, locale, locales, localizations} = pageProps;
return (
<TacoTranslate
client={tacoTranslate}
origin={origin}
locale={locale}
localizations={localizations}
>
<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
<Component {...pageProps} />
</TacoTranslate>
);
}
如果您已经有自定义的 pageProps
和 _app.tsx
,请根据上文的属性和代码扩展它们的定义。
步骤 4: 实现服务端渲染
TacoTranslate 支持对翻译内容进行服务器端渲染。这能显著改善用户体验,立即显示已翻译的内容,而不会先出现未翻译内容的闪烁。此外,我们可以跳过客户端的网络请求,因为服务器已经提供了所需的所有翻译。
我们将首先创建或修改 /next.config.js
.
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');
module.exports = async () => {
const config = {};
return withTacoTranslate(config, {
client: tacoTranslateClient,
isProduction:
process.env.TACOTRANSLATE_ENV === 'production' ||
process.env.VERCEL_ENV === 'production' ||
(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
process.env.NODE_ENV === 'production'),
});
};
修改 isProduction
检查以适应你的设置。如果 true
, TacoTranslate 会公开展示公共 API 密钥。如果我们处于本地、测试或暂存环境(isProduction
is false
),我们会使用秘密 read/write
API 密钥,以确保新的字符串被发送进行翻译。
到目前为止,我们只是为 Next.js 应用设置了一份受支持语言的列表。接下来我们要做的是为所有页面获取翻译。为此,你可以根据需求使用 getTacoTranslateStaticProps
或 getTacoTranslateServerSideProps
。
这些函数接受三个参数:一个 Next.js Static Props Context 对象、TacoTranslate 的配置,以及可选的 Next.js 属性。注意 revalidate
在 getTacoTranslateStaticProps
上默认设置为 60,以便您的翻译保持最新。
要在页面中使用任一函数,假设您有一个像 /pages/hello-world.tsx
这样的页面文件。
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';
export async function getStaticProps(context) {
return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}
export default function Page() {
return <Translate string="Hello, world!"/>;
}
现在你应该能够使用 Translate
组件在所有的 React 组件中翻译字符串。
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}
第5步: 部署并测试!
我们完成了!当你在 Translate
组件中添加任何字符串时,你的 Next.js 应用将会自动被翻译。请注意,只有在 API 密钥上具有 read/write
权限的环境才能创建要翻译的新字符串。我们建议设置一个封闭且安全的预发布(staging)环境,在那里使用这样的 API 密钥测试你的生产应用,并在上线前添加新的字符串。这将防止任何人窃取你的秘密 API 密钥,并避免通过添加新的无关字符串而可能使你的翻译项目膨胀。
Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the App Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.
TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!