Tìm hiểu cách triển khai quốc tế hóa (i18n) liền mạch trong các ứng dụng Next.js của bạn để tiếp cận khán giả toàn cầu. Bao gồm định tuyến, dịch nội dung và các phương pháp hay nhất.
Quốc tế hóa Next.js: Xây dựng ứng dụng đa ngôn ngữ cho khán giả toàn cầu
Trong thế giới kết nối ngày nay, việc xây dựng các ứng dụng phục vụ cho khán giả toàn cầu không còn là một điều xa xỉ – đó là một sự cần thiết. Next.js, một framework React mạnh mẽ, cung cấp các tính năng mạnh mẽ để triển khai quốc tế hóa (i18n), cho phép bạn tạo ra các ứng dụng đa ngôn ngữ mang lại trải nghiệm được địa phương hóa cho người dùng trên toàn thế giới. Hướng dẫn toàn diện này sẽ dẫn dắt bạn qua các khái niệm, kỹ thuật và các phương pháp hay nhất để xây dựng các ứng dụng Next.js được quốc tế hóa.
Hiểu về Quốc tế hóa và Địa phương hóa
Trước khi đi sâu vào các chi tiết cụ thể của i18n trong Next.js, hãy làm rõ các thuật ngữ chính:
- Quốc tế hóa (i18n): Quá trình thiết kế và phát triển một ứng dụng để nó có thể dễ dàng được điều chỉnh cho các ngôn ngữ và khu vực khác nhau mà không cần thay đổi về mặt kỹ thuật. Điều này bao gồm việc trừu tượng hóa văn bản, định dạng và các yếu tố cụ thể khác của địa phương.
- Địa phương hóa (l10n): Quá trình điều chỉnh một ứng dụng cho một ngôn ngữ và khu vực cụ thể. Điều này bao gồm việc dịch văn bản, điều chỉnh định dạng ngày giờ, ký hiệu tiền tệ, và nhiều hơn nữa.
Về cơ bản, i18n chuẩn bị ứng dụng của bạn cho việc địa phương hóa. Bằng cách tách các yếu tố phụ thuộc vào ngôn ngữ ra khỏi mã nguồn lõi, bạn làm cho việc địa phương hóa ứng dụng cho các thị trường khác nhau trở nên dễ dàng hơn.
Tại sao nên triển khai Quốc tế hóa trong Next.js?
Việc triển khai i18n trong ứng dụng Next.js của bạn mang lại nhiều lợi ích:
- Mở rộng phạm vi tiếp cận: Tiếp cận một lượng lớn khán giả hơn bằng cách cung cấp nội dung bằng ngôn ngữ họ ưa thích.
- Cải thiện trải nghiệm người dùng: Cung cấp một trải nghiệm cá nhân hóa và hấp dẫn hơn cho người dùng ở các khu vực khác nhau.
- Nâng cao SEO: Cải thiện tối ưu hóa công cụ tìm kiếm (SEO) bằng cách cung cấp nội dung được địa phương hóa nhắm đến các khu vực địa lý cụ thể.
- Tăng tỷ lệ chuyển đổi: Tăng tỷ lệ chuyển đổi bằng cách trình bày thông tin bằng ngôn ngữ mẹ đẻ của người dùng, tạo dựng niềm tin và sự thấu hiểu.
- Sự hiện diện thương hiệu toàn cầu: Thiết lập một sự hiện diện thương hiệu toàn cầu mạnh mẽ hơn bằng cách thể hiện cam kết về tính toàn diện và phục vụ các đối tượng đa dạng.
Các tính năng và cấu hình i18n của Next.js
Next.js cung cấp hỗ trợ tích hợp cho i18n thông qua các tính năng định tuyến và quản lý nội dung của nó. Dưới đây là phân tích các tính năng quan trọng:
1. Cấu hình i18n trong next.config.js
Cấu hình cốt lõi cho i18n nằm trong tệp next.config.js
. Đây là một ví dụ:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // Một mảng các miền địa phương được hỗ trợ (mã ngôn ngữ)
defaultLocale: 'en', // Miền địa phương mặc định để sử dụng
localeDetection: true, // Bật/tắt tự động phát hiện miền địa phương dựa trên cài đặt trình duyệt (tùy chọn)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
Giải thích:
locales
: Một mảng chứa các mã ngôn ngữ (ví dụ:'en'
cho tiếng Anh,'es'
cho tiếng Tây Ban Nha,'fr'
cho tiếng Pháp) của các ngôn ngữ được ứng dụng của bạn hỗ trợ. Hãy chắc chắn tuân theo mã ngôn ngữ ISO 639-1 để đảm bảo tính nhất quán.defaultLocale
: Ngôn ngữ mặc định mà ứng dụng của bạn sẽ sử dụng. Đây là ngôn ngữ được hiển thị nếu không có ngôn ngữ nào khác được chỉ định trong URL hoặc được phát hiện từ cài đặt trình duyệt của người dùng. Hãy chọn một ngôn ngữ đại diện cho đối tượng mục tiêu chính của bạn.localeDetection
: Một giá trị boolean kiểm soát việc Next.js có tự động phát hiện ngôn ngữ ưa thích của người dùng dựa trên cài đặt trình duyệt của họ hay không. Nếu đặt thànhtrue
, Next.js sẽ cố gắng chuyển hướng người dùng đến phiên bản ngôn ngữ phù hợp của trang web của bạn.domains
(tùy chọn): Một mảng cho phép bạn liên kết các miền địa phương với các tên miền cụ thể. Điều này hữu ích nếu bạn có các tên miền riêng biệt cho các ngôn ngữ khác nhau (ví dụ:example.com
cho tiếng Anh,example.es
cho tiếng Tây Ban Nha).
2. Định tuyến với tiền tố Locale
Next.js tự động thêm tiền tố vào các tuyến đường bằng miền địa phương. Ví dụ, nếu bạn có một trang tại /about
và miền địa phương là 'es' (tiếng Tây Ban Nha), URL sẽ trở thành /es/about
. Điều này cho phép có các phiên bản ngôn ngữ khác nhau của các trang và cho phép các công cụ tìm kiếm lập chỉ mục nội dung cho mỗi miền địa phương. Framework sẽ tự xử lý việc chuyển hướng và định tuyến cho bạn.
3. Sử dụng Hook useRouter
Hook useRouter
từ next/router
cung cấp quyền truy cập vào miền địa phương hiện tại và các thông tin định tuyến khác.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Miền địa phương hiện tại: {locale}
Các miền địa phương có sẵn: {locales.join(', ')}
Miền địa phương mặc định: {defaultLocale}
);
}
export default MyComponent;
Đối tượng router
cung cấp các thuộc tính chính sau:
locale
: Miền địa phương hiện được chọn (ví dụ: 'en', 'es', 'fr').locales
: Một mảng gồm tất cả các miền địa phương được hỗ trợ được định nghĩa trongnext.config.js
.defaultLocale
: Miền địa phương mặc định được đặt trongnext.config.js
.asPath
: Đường dẫn được hiển thị trong trình duyệt, bao gồm cả tiền tố miền địa phương (ví dụ:/es/about
).pathname
: Đường dẫn không có tiền tố miền địa phương (ví dụ:/about
).
Chiến lược dịch nội dung
Sau khi bạn đã cấu hình ứng dụng Next.js của mình cho i18n, bạn sẽ cần triển khai các chiến lược để dịch nội dung của mình. Dưới đây là một số cách tiếp cận phổ biến:
1. Sử dụng một Hệ thống quản lý dịch thuật chuyên dụng (TMS)
Đối với các dự án quy mô lớn với nhiều ngôn ngữ, một TMS rất được khuyến khích. Các tùy chọn phổ biến bao gồm:
- Phrase: Một TMS dựa trên đám mây với các tích hợp cho nhiều nền tảng khác nhau, bao gồm cả Next.js. Cung cấp các tính năng hợp tác và quy trình làm việc tự động.
- Localize: Một TMS dựa trên đám mây khác hỗ trợ một loạt các định dạng tệp và cung cấp các tính năng quản lý dịch thuật.
- Crowdin: Một TMS mạnh mẽ rất phổ biến trong cộng đồng mã nguồn mở, và tích hợp tốt với Next.js, cho phép các nhóm dịch nội dung một cách hiệu quả.
Lợi ích:
- Quản lý dịch thuật tập trung.
- Các tính năng hợp tác cho người dịch.
- Tự động hóa quy trình dịch thuật.
- Tích hợp với quy trình phát triển của bạn.
2. Tạo các tệp dịch JSON
Đối với các dự án nhỏ hơn, việc sử dụng các tệp JSON để lưu trữ các bản dịch là một phương pháp đơn giản và hiệu quả.
Ví dụ về cấu trúc thư mục:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
Ví dụ en.json
:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Ví dụ es.json
:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
Ví dụ MyComponent.js
:
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
function MyComponent() {
const { locale } = useRouter();
const t = locale === 'es' ? es : en;
return (
{t.greeting}
{t.welcomeMessage}
);
}
export default MyComponent;
Cách tiếp cận này cung cấp sự linh hoạt và đơn giản cho các dự án nhỏ hơn. Nó thường dễ dàng cập nhật và bảo trì.
3. Sử dụng thư viện dịch thuật
Một số thư viện JavaScript giúp đơn giản hóa việc dịch nội dung trong các thành phần React của bạn.
next-i18next
: Một thư viện phổ biến được thiết kế đặc biệt cho Next.js. Nó tích hợp tốt với framework và cung cấp các tính năng như kết xuất phía máy chủ (SSR) và dịch phía máy khách.react-i18next
: Một thư viện i18n đa năng cho React. Bạn có thể sử dụng nó trong các ứng dụng Next.js của mình, mặc dù nó có thể yêu cầu nhiều cấu hình hơn so vớinext-i18next
.
Ví dụ với next-i18next
(Cài đặt: npm install next-i18next i18next react-i18next
):
Tạo một tệp cấu hình i18n (ví dụ: i18n.js
trong thư mục gốc của bạn):
// i18n.js
import { createServerSideHelpers } from 'next-i18next'
import { i18n } from './next-i18next.config'
export function initI18next(req, res, namespaces = ['common']) {
const helpers = createServerSideHelpers(
req,
res,
i18n,
namespaces
)
return helpers
}
export { appWithTranslation } from 'next-i18next'
export { i18n }
Tạo cấu hình Next.js của bạn cho next-i18next.
// next-i18next.config.js
const { i18n } = require('./next-i18next.config');
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
defaultLocale: 'en',
locales: ['en', 'es', 'fr'],
},
// cấu hình khác
}
module.exports = nextConfig
Thêm cấu hình và import bản dịch vào tệp _app.js
của bạn:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
Tạo một thư mục và điền vào đó các miền địa phương cho các bản dịch của bạn.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
Ví dụ en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
Sử dụng bản dịch trong một thành phần:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
Ví dụ này sử dụng hook useTranslation
để lấy các bản dịch dựa trên miền địa phương hiện tại.
Xử lý các tuyến đường động và Tạo trang web tĩnh (SSG)
Quốc tế hóa trở nên phức tạp hơn khi xử lý các tuyến đường động (ví dụ: các bài đăng blog, trang sản phẩm) và tạo trang web tĩnh (SSG).
1. Tuyến đường động (ví dụ: /blog/[slug])
Đối với các tuyến đường động, bạn sẽ cần tạo các đường dẫn chính xác cho mỗi miền địa phương vào thời điểm xây dựng bằng cách sử dụng getStaticPaths
. Hàm này trả về một mảng các đường dẫn mà Next.js nên kết xuất trước.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // Lấy dữ liệu bài đăng blog
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // hoặc 'blocking' nếu bạn muốn hiển thị trạng thái tải
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Giải thích:
getStaticPaths
: Hàm này lặp qua các bài đăng blog của bạn và tạo một đường dẫn cho mỗi bài đăng và mỗi miền địa phương. Đối tượngparams
chứa các tham số tuyến đường (ví dụ: slug của bài đăng blog).locale
: Tham số này cung cấp miền địa phương hiện tại, cho phép bạn lấy nội dung đã dịch cho miền địa phương cụ thể.fallback
: Xác định cách Next.js xử lý các đường dẫn không được định nghĩa tronggetStaticPaths
.fallback: false
tạo ra các trang 404 cho các đường dẫn không xác định.fallback: 'blocking'
kết xuất trước các trang theo yêu cầu.
2. Tạo trang web tĩnh (SSG) với getStaticProps
Trong getStaticProps
, bạn có thể lấy nội dung đã dịch dựa trên tham số locale
.
export async function getStaticProps({ params, locale }) {
// Lấy nội dung dựa trên miền địa phương và tham số
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
Hàm getPostBySlug
nên lấy nội dung đã dịch cho slug và miền địa phương đã cho, có thể được lấy từ các tệp dịch, cơ sở dữ liệu hoặc một CMS của bạn.
3. Kết xuất phía máy chủ (SSR) với getServerSideProps
Đối với nội dung cần được lấy vào thời điểm yêu cầu, hãy sử dụng getServerSideProps
. Điều này hữu ích nếu nội dung thay đổi thường xuyên hoặc được cá nhân hóa cho mỗi người dùng.
export async function getServerSideProps({ params, locale, req, res }) {
// Lấy dữ liệu dựa trên miền địa phương và tham số (ví dụ: từ cơ sở dữ liệu)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
Các phương pháp hay nhất cho Quốc tế hóa Next.js
Việc tuân theo các phương pháp hay nhất này sẽ giúp bạn xây dựng các ứng dụng đa ngôn ngữ mạnh mẽ, dễ bảo trì và thân thiện với người dùng:
- Lập kế hoạch sớm: Hãy xem xét việc quốc tế hóa ngay từ đầu dự án của bạn. Việc triển khai nó ngay từ đầu sẽ dễ dàng hơn nhiều so với việc trang bị lại sau này.
- Tách biệt nội dung khỏi mã nguồn: Lưu trữ tất cả văn bản có thể dịch trong các tệp riêng biệt (ví dụ: tệp JSON hoặc một TMS) và tránh mã hóa cứng văn bản trực tiếp trong các thành phần của bạn.
- Sử dụng một Hệ thống quản lý dịch thuật (TMS): Đối với các dự án lớn hơn, một TMS có thể hợp lý hóa quy trình dịch thuật và cải thiện sự hợp tác.
- Kiểm thử kỹ lưỡng: Kiểm thử ứng dụng của bạn bằng tất cả các ngôn ngữ được hỗ trợ để đảm bảo các bản dịch chính xác, định dạng đúng và hiển thị đúng trên các trình duyệt và thiết bị khác nhau. Kiểm thử trên các thiết bị thực, không chỉ là trình giả lập.
- Xem xét các ngôn ngữ từ phải sang trái (RTL): Nếu bạn hỗ trợ các ngôn ngữ như tiếng Ả Rập hoặc tiếng Do Thái, hãy đảm bảo thiết kế và bố cục của bạn phù hợp với hướng văn bản từ phải sang trái. Next.js không tự động xử lý điều này, vì vậy cần có CSS hoặc các giải pháp khác.
- Xử lý định dạng ngày và giờ: Sử dụng các thư viện hoặc các hàm tích hợp để định dạng ngày và giờ theo miền địa phương của người dùng. Moment.js và date-fns là hai thư viện phổ biến hữu ích.
- Quản lý định dạng số và tiền tệ: Định dạng đúng các con số và ký hiệu tiền tệ dựa trên miền địa phương của người dùng.
- Tối ưu hóa SEO: Sử dụng các thẻ meta dành riêng cho ngôn ngữ (
hreflang
) để giúp các công cụ tìm kiếm lập chỉ mục nội dung của bạn một cách chính xác. Bao gồm các mã ngôn ngữ trong URL của bạn. - Ưu tiên trải nghiệm người dùng: Cung cấp một cách rõ ràng và trực quan để người dùng chuyển đổi giữa các ngôn ngữ. Cân nhắc cung cấp tính năng phát hiện ngôn ngữ tự động dựa trên cài đặt trình duyệt.
- Luôn cập nhật: Giữ cho phiên bản Next.js và các thư viện i18n của bạn luôn được cập nhật để hưởng lợi từ các tính năng mới nhất và các bản vá bảo mật.
- Xem xét khả năng tiếp cận (a11y): Đảm bảo rằng nội dung đã dịch của bạn có thể truy cập được bởi người dùng khuyết tật. Cung cấp văn bản thay thế cho hình ảnh và sử dụng các thuộc tính ARIA phù hợp. Sử dụng trình đọc màn hình để kiểm thử.
Những lưu ý về SEO cho các trang web được quốc tế hóa
Việc tối ưu hóa trang web được quốc tế hóa của bạn cho các công cụ tìm kiếm là điều cần thiết để thúc đẩy lưu lượng truy cập tự nhiên từ khắp nơi trên thế giới. Dưới đây là một số phương pháp SEO tốt nhất:
- Thẻ
hreflang
: Triển khai các thẻhreflang
trong phần<head>
của HTML của bạn để cho các công cụ tìm kiếm biết về các biến thể ngôn ngữ và khu vực của nội dung của bạn. Điều này rất quan trọng đối với SEO. Ví dụ:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
và<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- URL dành riêng cho ngôn ngữ: Sử dụng mã ngôn ngữ trong URL của bạn (ví dụ:
/en/about
,/es/acerca-de
). Điều này chỉ rõ ngôn ngữ của nội dung cho cả người dùng và công cụ tìm kiếm. - Nội dung được địa phương hóa: Dịch nội dung của bạn một cách chính xác và tự nhiên. Các bản dịch máy nên được một người bản xứ xem lại.
- Mô tả Meta và tiêu đề được địa phương hóa: Viết các mô tả meta và tiêu đề độc đáo và hấp dẫn cho mỗi ngôn ngữ để cải thiện tỷ lệ nhấp chuột trong kết quả tìm kiếm.
- Sơ đồ trang XML: Tạo và gửi các sơ đồ trang XML bao gồm tất cả các biến thể ngôn ngữ của các trang của bạn.
- Liên kết nội bộ: Sử dụng các liên kết nội bộ phù hợp giữa các phiên bản ngôn ngữ của nội dung của bạn.
- Nghiên cứu từ khóa theo quốc gia: Tiến hành nghiên cứu từ khóa bằng mỗi ngôn ngữ để xác định các thuật ngữ mà người dùng đang tìm kiếm ở mỗi khu vực.
Ví dụ: Xây dựng một Blog đa ngôn ngữ đơn giản
Hãy tạo một ví dụ đơn giản về một blog đa ngôn ngữ sử dụng Next.js. Điều này sẽ cung cấp một minh họa cụ thể hơn về cách áp dụng các khái niệm đã thảo luận ở trên.
1. Thiết lập dự án
Tạo một dự án Next.js mới:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
2. Cấu hình i18n (next.config.js
)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
3. Tạo các tệp dịch
Tạo một thư mục locales
trong thư mục gốc và thêm các tệp JSON sau:
locales/en.json
:
{
"title": "Welcome to My Blog",
"postTitle": "My First Post",
"postContent": "This is the content of my first blog post."
}
locales/es.json
:
{
"title": "Bienvenido a mi Blog",
"postTitle": "Mi Primer Post",
"postContent": "Este es el contenido de mi primer publicación de blog."
}
locales/fr.json
:
{
"title": "Bienvenue sur Mon Blog",
"postTitle": "Mon Premier Article",
"postContent": "Ceci est le contenu de mon premier article de blog."
}
4. Tạo thành phần bài đăng Blog (ví dụ: components/BlogPost.js
)
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function BlogPost() {
const router = useRouter();
const { locale } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
{translations.postTitle}
{translations.postContent}
);
}
export default BlogPost;
5. Tạo trang Index (pages/index.js
)
import { useRouter } from 'next/router';
import BlogPost from '../components/BlogPost';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function HomePage() {
const router = useRouter();
const { locale, locales } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
);
}
export default HomePage;
Ví dụ đơn giản này giới thiệu các nguyên tắc cơ bản của việc quốc tế hóa Next.js. Bạn có thể mở rộng trên khuôn khổ cơ bản này để bao gồm các tính năng phức tạp hơn, chẳng hạn như các tuyến đường động và tích hợp với các hệ thống quản lý dịch thuật. Cân nhắc cải thiện các liên kết ở trên bằng thành phần Link
và thêm thuộc tính locale
phù hợp.
6. Chạy ứng dụng
Chạy ứng dụng với:
npm run dev
Bây giờ bạn có thể truy cập blog của mình tại http://localhost:3000
(tiếng Anh), http://localhost:3000/es
(tiếng Tây Ban Nha), và http://localhost:3000/fr
(tiếng Pháp). Bạn sẽ thấy tiêu đề và nội dung bài đăng blog được dịch dựa trên miền địa phương đã chọn.
Kết luận
Next.js cung cấp một bộ tính năng toàn diện để triển khai quốc tế hóa trong các ứng dụng web của bạn. Bằng cách tuân theo các nguyên tắc và kỹ thuật được nêu trong hướng dẫn này, bạn có thể tạo ra các ứng dụng đa ngôn ngữ mang lại trải nghiệm được địa phương hóa cho người dùng trên toàn cầu. Hãy nhớ lập kế hoạch chiến lược i18n của bạn sớm, chọn phương pháp dịch phù hợp với nhu cầu của bạn và ưu tiên trải nghiệm người dùng. Với việc lập kế hoạch và thực hiện cẩn thận, bạn có thể xây dựng các ứng dụng gây được tiếng vang với khán giả toàn cầu và mở ra những cơ hội tăng trưởng mới. Việc học hỏi liên tục, cập nhật các bản phát hành mới nhất và các phương pháp hay nhất sẽ đảm bảo rằng bạn đang sử dụng các công cụ và công nghệ của mình một cách hiệu quả.
Khi công nghệ tiến bộ, hãy mong đợi sẽ thấy nhiều tính năng i18n tiên tiến hơn xuất hiện. Khả năng tiếp cận người dùng qua các nền văn hóa và nhóm ngôn ngữ khác nhau sẽ vẫn là ưu tiên hàng đầu của các nhà phát triển ứng dụng trên toàn thế giới. Do đó, việc nắm vững các nguyên tắc cơ bản của i18n là một kỹ năng quý giá sẽ nâng cao giá trị của bạn trong bối cảnh phát triển toàn cầu ngày nay.