如何在使用 Pages Router 的 Next.js 应用中实现国际化
通过国际化(i18n),让您的 React 应用更易访问并开拓新市场。
随着世界日益全球化,Web 开发者构建能够满足来自不同国家和文化的用户需求的应用变得愈发重要。实现这一目标的关键方式之一是国际化(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 应用界面中,创建一个项目,然后转到其 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。 在此了解有关 origins 的更多信息。
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 提供器。
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,请将上述属性和代码扩展到定义中。
第四步: 实现服务器端渲染
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 属性。注意, getTacoTranslateStaticProps 上的 revalidate 默认设置为 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 组件添加任何字符串时,你的 React 应用将会被自动翻译。请注意,只有在 API 密钥具有 read/write 权限的环境中,才能创建要翻译的新字符串。我们建议设置一个封闭且安全的预发布(staging)环境,在那里使用这样的 API 密钥测试你的生产应用,并在上线前添加新的字符串。这样可以防止任何人任何人窃取你的秘密 API 密钥,并避免通过添加无关的新字符串而可能导致翻译项目膨胀。
务必在我们的 GitHub 资料上 查看完整示例。在那里,你也会找到关于如何使用 App Router 来实现的示例!如果遇到任何问题,欢迎随时 与我们联系,我们会非常乐意提供帮助。
TacoTranslate 让你能够快速自动地将 React 应用程序本地化到 75 多种语言及其之间互译。 立即开始!