TacoTranslate
/
เอกสารประกอบราคา
 
บทช่วยสอน
04 พ.ค.

วิธีการใช้งานการทำให้หลายภาษาหรือสากลในแอปพลิเคชัน 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 ที่อยู่ในโฟลเดอร์รากของโปรเจกต์ของคุณได้

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

โปรดแน่ใจว่าอย่าเปิดเผยคีย์ API ที่เป็นความลับ read/write ไปยังสภาพแวดล้อมฝั่งลูกค้าในโปรดักชันเด็ดขาด

เราจะเพิ่มตัวแปรแวดล้อมอีกสองตัว: TACOTRANSLATE_DEFAULT_LOCALE และ TACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: รหัสภาษาเริ่มต้นสำรอง ในตัวอย่างนี้ เราจะตั้งค่าเป็น en สำหรับภาษาอังกฤษ
  • TACOTRANSLATE_ORIGIN: "โฟลเดอร์" ที่จะเก็บสตริงของคุณ เช่น URL ของเว็บไซต์ของคุณ อ่านเพิ่มเติมเกี่ยวกับต้นทางที่นี่
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

ขั้นตอนที่ 3: การตั้งค่า TacoTranslate

ในการเชื่อมต่อ TacoTranslate กับแอปพลิเคชันของคุณ คุณจะต้องสร้าง client โดยใช้ API keys ที่ได้จากก่อนหน้านี้ ตัวอย่างเช่น สร้างไฟล์ชื่อ /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 โดยอัตโนมัติในไม่ช้านี้

การสร้าง client ในไฟล์แยกต่างหากจะทำให้ง่ายต่อการใช้งานอีกครั้งในภายหลัง ตอนนี้ โดยใช้ /pages/_app.tsx แบบกำหนดเอง เราจะเพิ่ม provider 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: การใช้งาน server side rendering

TacoTranslate อนุญาตให้ทำ server side rendering ของการแปลของคุณได้ ซึ่งช่วยปรับปรุงประสบการณ์ผู้ใช้ได้อย่างมากโดยการแสดงเนื้อหาที่แปลแล้วทันที แทนที่จะเป็นการแสดงเนื้อหาที่ยังไม่ได้แปลก่อน นอกจากนี้ เรายังสามารถข้ามการร้องขอเครือข่ายบนฝั่งไคลเอนต์ได้ เพราะเรามีการแปลครบถ้วนแล้วที่เราต้องการอยู่แล้ว

เราจะเริ่มด้วยการสร้างหรือแก้ไข /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) เราจะใช้กุญแจ API ลับ read/write เพื่อให้แน่ใจว่าสตริงใหม่จะถูกส่งไปยังการแปล

จนถึงตอนนี้ เราได้ตั้งค่าแอปพลิเคชัน Next.js โดยมีรายการภาษาที่รองรับไว้เท่านั้น สิ่งต่อไปที่เราจะทำคือดึงการแปลสำหรับทุกหน้าของคุณ เพื่อทำเช่นนั้น คุณจะใช้ getTacoTranslateStaticProps หรือ getTacoTranslateServerSideProps ขึ้นอยู่กับความต้องการของคุณ

ฟังก์ชันเหล่านี้รับอาร์กิวเมนต์สามตัว: หนึ่ง Next.js Static Props Context อ็อบเจกต์, การตั้งค่าสำหรับ TacoTranslate, และคุณสมบัติ Next.js ที่เป็นทางเลือก โปรดทราบว่า revalidate บน getTacoTranslateStaticProps ถูกตั้งค่าเป็น 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: ดีพลอยและทดสอบ!

เราเสร็จเรียบร้อยแล้ว! แอป React ของคุณจะถูกแปลโดยอัตโนมัติเมื่อคุณเพิ่มข้อความใด ๆ ลงในคอมโพเนนต์ Translate. โปรดทราบว่าเฉพาะสภาพแวดล้อมที่มีสิทธิ์ read/write บน API key เท่านั้นที่จะสามารถสร้างข้อความใหม่สำหรับแปลได้ เราขอแนะนำให้มีสภาพแวดล้อม staging ที่ปิดและปลอดภัยซึ่งคุณสามารถทดสอบแอปพลิเคชัน production ของคุณด้วย API key แบบนั้น โดยการเพิ่มข้อความใหม่ก่อนเปิดให้ใช้งานจริง สิ่งนี้จะป้องกันไม่ให้ใครขโมย API key ลับของคุณ และป้องกันไม่ให้โปรเจกต์การแปลของคุณฟุ้งเฟ้อโดยการเพิ่มข้อความใหม่ที่ไม่เกี่ยวข้อง

อย่าลืม ดูตัวอย่างครบถ้วน ที่โปรไฟล์ GitHub ของเรา ที่นั่นคุณจะเจอตัวอย่างวิธีการทำด้วย App Router ด้วย! หากคุณพบปัญหาใด ๆ โปรด ติดต่อเรา เรายินดีช่วยเหลืออย่างยิ่ง

TacoTranslate ช่วยให้คุณแปลแอป React ของคุณโดยอัตโนมัติได้อย่างรวดเร็วในกว่า 75 ภาษา เริ่มต้นวันนี้!

ผลิตภัณฑ์จาก Nattskiftetผลิตในนอร์เวย์