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。在此處閱讀更多關於 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 屬性。請注意,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 應用程式本地化到超過 75 種語言,雙向支持。立即開始!

來自Nattskiftet的產品挪威製造