如何在使用 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 檔案中。
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,請將定義擴充為包含上述的屬性與程式碼。
第 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 component 中新增任何字串時,您的 React 應用程式現在會自動進行翻譯。請注意,只有在 API 金鑰擁有 read/write 權限的環境,才能建立新的字串以供翻譯。我們建議建立一個封閉且安全的暫存環境,在那裡使用該類 API 金鑰測試您的生產應用程式,並在正式上線前新增字串。這樣可以防止任何人竊取您的祕密 API 金鑰,並避免有人新增無關字串,導致翻譯專案膨脹。
請務必到我們的 GitHub 範例 頁面查看完整範例。在那裡,你也會找到一個示範如何使用 App Router 的範例!若遇到任何問題,歡迎隨時 聯絡我們,我們會很樂意提供協助。
TacoTranslate 讓您能自動且快速地將 React 應用程式在超過 75 種語言之間本地化。 立即開始!