วิธีการทำให้รองรับหลายภาษาในแอป Next.js ที่ใช้ Pages Router
ทำให้แอป React ของคุณเข้าถึงได้มากขึ้นและขยายสู่ตลาดใหม่ด้วยการทำให้รองรับหลายภาษา (i18n)
เมื่อโลกมีการเป็นสากลมากขึ้น ยิ่งสำคัญสำหรับนักพัฒนาเว็บที่จะสร้างแอปพลิเคชันที่สามารถรองรับผู้ใช้จากประเทศและวัฒนธรรมที่แตกต่างกัน หนึ่งในวิธีสำคัญในการบรรลุเป้าหมายนี้คือการทำให้รองรับนานาชาติ (i18n) ซึ่งช่วยให้คุณปรับแอปของคุณให้รองรับภาษาต่างๆ สกุลเงิน และรูปแบบวันที่ที่แตกต่างกัน
ในบทแนะนำนี้ เราจะสำรวจวิธีการเพิ่มการรองรับนานาชาติให้กับแอป React Next.js ของคุณ โดยใช้การเรนเดอร์ฝั่งเซิร์ฟเวอร์ TL;DR: ดูตัวอย่างฉบับเต็มได้ที่นี่.
คำแนะนำนี้สำหรับแอป Next.js ที่กำลังใช้ Pages Router.
หากคุณกำลังใช้ App Router, โปรดดูคำแนะนำฉบับนี้แทน
ขั้นตอนที่ 1: ติดตั้งไลบรารี i18n
ในการนำการทำให้เป็นสากล (internationalization) มาใช้ในแอป Next.js ของคุณ เราจะเริ่มด้วยการเลือกไลบรารี i18n มีไลบรารียอดนิยมหลายตัว รวมถึง next-intl. อย่างไรก็ตาม ในตัวอย่างนี้ เราจะใช้ TacoTranslate.
TacoTranslate จะทำการแปลสตริงของคุณโดยอัตโนมัติเป็นทุกภาษาโดยใช้ AI ล้ำสมัย และช่วยให้คุณไม่ต้องจัดการไฟล์ JSON ที่น่าเบื่ออีกต่อไป
มาติดตั้งด้วย npm ในเทอร์มินัลของคุณ:
npm install tacotranslateขั้นตอนที่ 2: สร้างบัญชี TacoTranslate ฟรี
ตอนนี้ที่คุณได้ติดตั้งโมดูลแล้ว ก็ถึงเวลาสร้างบัญชี TacoTranslate, โครงการแปล และคีย์ API ที่เกี่ยวข้อง สร้างบัญชีที่นี่. มันฟรี และ ไม่จำเป็นต้องใส่บัตรเครดิต.
ภายในส่วนติดต่อผู้ใช้ของแอป TacoTranslate ให้สร้างโปรเจ็กต์ แล้วไปที่แท็บ API keys ของโปรเจ็กต์ สร้างคีย์ read หนึ่งตัว และคีย์ read/write หนึ่งตัว เราจะบันทึกคีย์เหล่านี้เป็นตัวแปรแวดล้อม คีย์ read คือคีย์ที่เราเรียกว่า public และคีย์ read/write คือคีย์ที่เราเรียกว่า secret ตัวอย่างเช่น คุณสามารถเพิ่มคีย์เหล่านี้ลงในไฟล์ .env ในโฟลเดอร์หลักของโปรเจ็กต์ของคุณ
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010โปรดอย่าให้คีย์ API ลับ read/write รั่วไหลไปยังสภาพแวดล้อมการผลิตฝั่งไคลเอนต์.
เราจะเพิ่มตัวแปรสภาพแวดล้อมอีกสองตัวด้วย: TACOTRANSLATE_DEFAULT_LOCALE และ TACOTRANSLATE_ORIGIN.
TACOTRANSLATE_DEFAULT_LOCALE: รหัส 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) เราจะใช้คีย์ API ลับ read/write เพื่อให้แน่ใจว่าสตริงใหม่จะถูกส่งเพื่อแปล
จนถึงตอนนี้ เราได้ตั้งค่าแอป 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: ปรับใช้และทดสอบ!
เราเสร็จเรียบร้อยแล้ว! แอป React ของคุณจะถูกแปลโดยอัตโนมัติเมื่อคุณเพิ่มสตริงใดๆ ลงในคอมโพเนนต์ Translate. โปรดทราบว่าเฉพาะสภาพแวดล้อมที่มีสิทธิ์ read/write บนคีย์ API เท่านั้นที่จะสามารถสร้างสตริงใหม่เพื่อแปลได้ เราแนะนำให้มีสภาพแวดล้อมสเตจที่ปิดและปลอดภัยเพื่อทดสอบแอปพลิเคชันในสภาพการผลิตของคุณด้วยคีย์ API แบบนั้น โดยเพิ่มสตริงใหม่ก่อนเปิดใช้งานจริง ซึ่งจะช่วยป้องกันไม่ให้ใครขโมยคีย์ API ลับของคุณ และป้องกันไม่ให้โปรเจกต์การแปลของคุณบวมจากการเพิ่มสตริงใหม่ที่ไม่เกี่ยวข้อง
อย่าลืม ดูตัวอย่างฉบับสมบูรณ์ ที่หน้า GitHub ของเรา ที่นั่นคุณจะพบตัวอย่างการทำเช่นนี้โดยใช้ App Router ด้วย! หากคุณพบปัญหาใด ๆ โปรดอย่าลังเลที่จะ ติดต่อเรา เราพร้อมที่จะช่วยเหลือคุณอย่างยินดี
TacoTranslate ช่วยให้คุณทำให้แอป React ของคุณรองรับหลายภาษาโดยอัตโนมัติอย่างรวดเร็ว ทั้งการแปลจากและเป็นไปยังมากกว่า 75 ภาษา เริ่มต้นวันนี้!