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 應用程式的 UI 中,建立一個專案,然後前往其 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。在此閱讀更多關於 origins 的資訊。
.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 屬性。注意 revalidategetTacoTranslateStaticProps 上預設設為 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 應用程式現在會自動被翻譯。請注意,只有在 API 金鑰具有 read/write 權限的環境,才能建立要翻譯的新字串。我們建議設置一個封閉且安全的預發(staging)環境,在那裡使用類似的 API 金鑰測試您的生產應用程式,並在正式上線前新增字串。這樣可以防止任何人竊取您的秘密 API 金鑰,並避免有人新增無關的字串而可能使翻譯專案膨脹。

務必在我們的 GitHub 個人資料頁面 查看完整範例。在那裡,你還會找到使用 App Router 的範例!如果遇到任何問題,歡迎隨時透過 聯絡我們,我們將很樂意提供協助。

TacoTranslate 讓你可以自動將你的 React 應用程式快速地在超過 75 種語言之間本地化。 立即開始!

來自 Nattskiftet 的產品挪威製造