วิธีการทำให้แอป Next.js ที่ใช้ Pages Router รองรับหลายภาษา
ทำให้แอป React ของคุณเข้าถึงได้มากขึ้นและขยายสู่ตลาดใหม่ด้วยการรองรับหลายภาษา (i18n)
เมื่อโลกมีความเป็นสากลมากขึ้น นักพัฒนาเว็บจึงยิ่งต้องสร้างแอปพลิเคชันที่สามารถรองรับผู้ใช้จากประเทศและวัฒนธรรมที่แตกต่างกัน หนึ่งในวิธีสำคัญในการบรรลุเป้าหมายนี้คือการทำให้รองรับหลายภาษา (internationalization หรือ i18n) ซึ่งช่วยให้คุณปรับแอปของคุณให้เข้ากับภาษา สกุลเงิน และรูปแบบวันที่ที่แตกต่างกัน.
ในบทช่วยสอนนี้ เราจะสำรวจวิธีเพิ่มการทำ internationalization ให้กับแอป 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
แบบกำหนดเองอยู่แล้ว โปรดขยายการกำหนดด้วยคุณสมบัติและโค้ดจากด้านบน
Step 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 ภาษาได้อย่างรวดเร็วโดยอัตโนมัติ เริ่มต้นวันนี้!