TacoTranslate
/
文档定价
 
教程
5月04日

如何在使用 Pages Router 的 Next.js 应用程序中实现国际化

通过国际化(i18n)使您的 React 应用程序更易访问,拓展新市场。

随着世界变得日益全球化,网络开发者构建能够满足不同国家和文化用户需求的应用变得越来越重要。实现这一目标的关键方法之一是通过国际化(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 文件中。

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

务必确保绝不将秘密 read/write API 密钥泄露到客户端生产环境中。

我们还将添加另外两个环境变量:TACOTRANSLATE_DEFAULT_LOCALETACOTRANSLATE_ORIGIN

  • TACOTRANSLATE_DEFAULT_LOCALE:默认的回退语言代码。在此示例中,我们将其设置为en,表示英语。
  • TACOTRANSLATE_ORIGIN:存储字符串的“文件夹”,例如您的网站 URL。在这里了解有关 origin 的更多信息。
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

步骤 3: 设置 TacoTranslate

要将 TacoTranslate 集成到您的应用程序中,您需要使用之前的 API 密钥创建一个客户端。例如,创建一个名为 /tacotranslate-client.js 的文件。

/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 提供者。

/pages/_app.tsx
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 开始。

/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 应用中设置了支持的语言列表。接下来我们要做的是为所有页面获取翻译。为此,您将根据需求使用 getTacoTranslateStaticPropsgetTacoTranslateServerSideProps

这些函数接受三个参数:一个 Next.js Static Props Context 对象,TacoTranslate 的配置,以及可选的 Next.js 属性。请注意,getTacoTranslateStaticProps 中的 revalidate 默认为 60,以确保您的翻译内容保持最新。

要在页面中使用这两个函数中的任意一个,假设您有一个页面文件,如 /pages/hello-world.tsx

/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 应用程序将自动进行翻译。请注意,只有拥有 read/write 权限的 API 密钥环境才能创建新的待翻译字符串。我们建议有一个封闭且安全的预发布环境,在那里你可以使用这样的 API 密钥测试你的生产应用,在上线前添加新的字符串。这将防止任何人窃取你的秘密 API 密钥,并避免通过添加新的无关字符串而膨胀你的翻译项目。

请务必查看我们 GitHub 主页上的完整示例。在那里,您还可以找到使用 App Router 的示例!如果您遇到任何问题,请随时联系我们,我们将非常乐意提供帮助。

TacoTranslate 让您能够快速自动地将 React 应用程序本地化到任意语言并从任意语言本地化。今天就开始使用吧!

来自Nattskiftet的产品挪威制造