Cách triển khai quốc tế hóa trong một ứng dụng Next.js đang sử dụng Pages Router
Giúp ứng dụng React của bạn tiếp cận được nhiều người dùng hơn và mở rộng sang các thị trường mới thông qua quốc tế hóa (i18n).
Khi thế giới ngày càng toàn cầu hóa, các nhà phát triển web càng cần xây dựng các ứng dụng có thể phục vụ người dùng từ nhiều quốc gia và nền văn hóa khác nhau. Một trong những cách then chốt để đạt được điều này là thông qua quốc tế hóa (i18n), cho phép bạn điều chỉnh ứng dụng của mình sang các ngôn ngữ, loại tiền tệ và định dạng ngày tháng khác nhau.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thêm quốc tế hóa vào ứng dụng React Next.js của bạn, bao gồm cả kết xuất phía máy chủ. TL;DR: Xem ví dụ đầy đủ ở đây.
Hướng dẫn này dành cho các ứng dụng Next.js đang sử dụng Pages Router.
Nếu bạn đang sử dụng App Router, vui lòng xem hướng dẫn này thay thế.
Bước 1: Cài đặt một thư viện i18n
Để triển khai quốc tế hóa (i18n) trong ứng dụng Next.js của bạn, trước tiên chúng ta sẽ chọn một thư viện i18n. Có một vài thư viện phổ biến, bao gồm next-intl. Tuy nhiên, trong ví dụ này, chúng tôi sẽ sử dụng TacoTranslate.
TacoTranslate tự động dịch các chuỗi của bạn sang bất kỳ ngôn ngữ nào bằng AI tiên tiến, và giải phóng bạn khỏi việc quản lý các tệp JSON một cách tẻ nhạt.
Hãy cài đặt nó bằng npm trong terminal của bạn:
npm install tacotranslate
Bước 2: Tạo tài khoản TacoTranslate miễn phí
Bây giờ bạn đã cài đặt module, đã đến lúc tạo tài khoản TacoTranslate, một dự án dịch thuật và các khóa API liên quan. Tạo tài khoản tại đây. Nó miễn phí và không yêu cầu bạn phải cung cấp thẻ tín dụng.
Trong giao diện người dùng của TacoTranslate, tạo một dự án và điều hướng đến tab API keys của nó. Tạo một khóa read
và một khóa read/write
. Chúng tôi sẽ lưu chúng dưới dạng biến môi trường. Khóa read
là cái mà chúng tôi gọi là public
và khóa read/write
là secret
. Ví dụ, bạn có thể thêm chúng vào tệp .env
ở thư mục gốc của dự án.
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010
Hãy luôn đảm bảo không bao giờ để lộ khóa API bí mật read/write
trong các môi trường production phía client.
Chúng tôi cũng sẽ thêm hai biến môi trường nữa: TACOTRANSLATE_DEFAULT_LOCALE
và TACOTRANSLATE_ORIGIN
.
TACOTRANSLATE_DEFAULT_LOCALE
: Mã locale dự phòng mặc định. Trong ví dụ này, chúng tôi sẽ đặt nó làen
cho tiếng Anh.TACOTRANSLATE_ORIGIN
: “Thư mục” nơi các chuỗi của bạn sẽ được lưu, chẳng hạn như URL của trang web của bạn. Tìm hiểu thêm về origins ở đây.
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com
Bước 3: Thiết lập TacoTranslate
Để tích hợp TacoTranslate vào ứng dụng của bạn, bạn sẽ cần tạo một client sử dụng các khóa API đã tạo trước đó. Ví dụ, tạo một tệp có tên /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;
Chúng tôi sẽ tự động định nghĩa TACOTRANSLATE_API_KEY
trong chốc lát.
Tạo client trong một tệp riêng sẽ giúp dễ tái sử dụng hơn sau này. Bây giờ, sử dụng một /pages/_app.tsx
tùy chỉnh, chúng ta sẽ thêm provider 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>
);
}
Nếu bạn đã có các pageProps
và _app.tsx
tùy chỉnh, vui lòng mở rộng định nghĩa bằng các thuộc tính và mã đã nêu ở trên.
Bước 4: Triển khai kết xuất phía máy chủ
TacoTranslate cho phép kết xuất phía máy chủ cho các bản dịch của bạn. Điều này cải thiện đáng kể trải nghiệm người dùng bằng cách hiển thị nội dung đã được dịch ngay lập tức, thay vì để người dùng thấy một thoáng nội dung chưa được dịch trước. Ngoài ra, chúng ta có thể bỏ qua các yêu cầu mạng trên phía máy khách, vì chúng ta đã có sẵn tất cả các bản dịch cần thiết.
Chúng ta sẽ bắt đầu bằng cách tạo hoặc chỉnh sửa /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'),
});
};
Chỉnh sửa kiểm tra isProduction
cho phù hợp với cấu hình của bạn. Nếu true
, TacoTranslate sẽ hiển thị khóa API công khai. Nếu chúng ta đang ở môi trường cục bộ, thử nghiệm hoặc staging (isProduction
is false
), chúng tôi sẽ sử dụng khóa API bí mật read/write
để đảm bảo các chuỗi mới được gửi để dịch.
Cho đến nay, chúng ta chỉ mới thiết lập ứng dụng Next.js với một danh sách các ngôn ngữ được hỗ trợ. Bước tiếp theo là truy xuất bản dịch cho tất cả các trang của bạn. Để làm điều đó, bạn sẽ sử dụng một trong hai getTacoTranslateStaticProps
hoặc getTacoTranslateServerSideProps
tùy theo yêu cầu của bạn.
Các hàm này nhận ba đối số: một đối tượng Next.js Static Props Context, cấu hình cho TacoTranslate, và các thuộc tính Next.js tùy chọn. Lưu ý rằng revalidate
trên getTacoTranslateStaticProps
được đặt thành 60 theo mặc định, để các bản dịch của bạn luôn được cập nhật.
Để sử dụng một trong hai hàm trong một trang, giả sử bạn có một tệp trang như /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!"/>;
}
Bây giờ bạn nên có thể sử dụng thành phần Translate
để dịch các chuỗi trong tất cả các thành phần React của bạn.
import {Translate} from 'tacotranslate/react';
function Component() {
return <Translate string="Hello, world!"/>
}
Bước 5: Triển khai và kiểm tra!
Xong rồi! Ứng dụng React của bạn bây giờ sẽ tự động được dịch khi bạn thêm bất kỳ chuỗi nào vào một Translate
thành phần. Lưu ý rằng chỉ các môi trường có quyền read/write
trên khóa API mới có thể tạo các chuỗi mới để được dịch. Chúng tôi khuyến nghị có một môi trường staging đóng và bảo mật nơi bạn có thể thử nghiệm ứng dụng production với một khóa API như vậy, thêm các chuỗi mới trước khi đưa lên sản xuất. Điều này sẽ ngăn bất kỳ ai bất kỳ ai ăn cắp khóa API bí mật của bạn, và có khả năng làm phình to dự án dịch của bạn bằng cách thêm các chuỗi mới, không liên quan.
Nhớ xem ví dụ đầy đủ trên trang GitHub của chúng tôi. Ở đó, bạn cũng sẽ tìm thấy một ví dụ về cách làm điều này bằng App Router! Nếu bạn gặp bất kỳ vấn đề nào, xin đừng ngần ngại liên hệ, và chúng tôi sẽ rất vui được hỗ trợ.
TacoTranslate cho phép bạn tự động bản địa hóa các ứng dụng React của mình nhanh chóng giữa hơn 75 ngôn ngữ. Bắt đầu ngay hôm nay!