i18n vs l10n: khác nhau thế nào?
| Thuật ngữ | Nghĩa | Ví dụ |
|---|---|---|
| i18n (Internationalization) | Code hỗ trợ NHIỀU ngôn ngữ | Tách text ra file, dùng key thay hardcode |
| l10n (Localization) | DỊCH + adapt cho 1 ngôn ngữ/vùng cụ thể | Dịch sang tiếng Nhật + format ¥1,000 |
Setup i18n cho Next.js (next-intl)
// File: messages-vi.json
{
"nav": {
"home": "Trang chủ",
"pricing": "Bảng giá",
"login": "Đăng nhập"
},
"hero": {
"title": "Hoàn thành gấp đôi việc",
"subtitle": "Không cần OT. Không cần thêm người.",
"cta": "Bắt đầu miễn phí"
},
"pricing": {
"monthly": "{price}/tháng",
"annual": "{price}/năm (tiết kiệm {discount}%)"
}
}
// File: Hero.tsx
import { useTranslations } from 'next-intl'
export function Hero() {
const t = useTranslations('hero')
return (
<section>
<h1>{t('title')}</h1>
<p>{t('subtitle')}</p>
<button>{t('cta')}</button>
</section>
)
}
// ❌ KHÔNG: <h1>Hoàn thành gấp đôi việc</h1>
// ✅ CÓ: <h1>{t('title')}</h1>
Không chỉ dịch text: date, currency, số
| Vấn đề | VN | US | Nhật | Solution |
|---|---|---|---|---|
| Ngày | 12/08/2026 | 08/12/2026 | 2026年8月12日 | Intl.DateTimeFormat |
| Tiền | 500.000₫ | $500.00 | ¥500 | Intl.NumberFormat + currency code |
| Số | 1.000,50 | 1,000.50 | 1,000.50 | Intl.NumberFormat |
| Hướng text | LTR → | LTR → | LTR → | dir=“rtl” cho Arabic/Hebrew |
// File: format.ts
// Format currency tự động theo locale
function formatCurrency(
amount: number, currency = 'VND', locale = 'vi-VN'
) {
return new Intl.NumberFormat(locale, {
style: 'currency',
currency,
}).format(amount)
}
formatCurrency(500000) // '500.000 ₫'
formatCurrency(500, 'USD', 'en-US') // '$500.00'
formatCurrency(50000, 'JPY', 'ja-JP') // '¥50,000'
💡 Dịch bằng AI, review bằng người
GPT-4 dịch UI text rất tốt. Flow: (1) Export file messages-vi.json, (2) GPT dịch sang messages-en.json, (3) Nhờ 1 native speaker review. Chi phí: gần 0. Thời gian: 2-3 giờ cho toàn bộ app.
❓ Sai lầm lớn nhất khi làm i18n?
- Setup next-intl hoặc i18next từ đầu project
- Tách text ra file messages-{locale}.json
- Format date/currency bằng Intl API
- Dịch bằng AI + review bằng native speaker