i18n
thl-ui có sẵn bộ i18n nhỏ gọn, không phụ thuộc thư viện, kèm bản dịch English (en), Tiếng Việt (vi), 日本語 (ja), 简体中文 (zh) cho mọi chuỗi có sẵn (phân trang, bảng, date picker, validation, upload, layout, menu, trang mẫu…).
Thử: đổi ngôn ngữ
Dịch
vue
const { t, n, d, setLocale } = useI18n();
t('pagination.total', { count: 3 }); // trong template: $t('common.save')tsx
const t = useT();
t('pagination.total', { count: 3 }); t.n(1234.5); t.d(new Date());html
<span>{{ 'pagination.total' | thlT: { count: 3 } }}</span>Tham số & số nhiều
ts
pagination: {
showing: 'Hiển thị {from} đến {to} trong {total} mục',
total: { other: '{count} mục' },
}Số nhiều dùng các nhóm của Intl.PluralRules (zero tuỳ chọn, dùng khi count === 0); count được định dạng theo ngôn ngữ (1.200 mục).
Thêm / ghi đè bản dịch
ts
createThl({
locale: 'vi',
messages: {
vi: { common: { save: 'Lưu lại' }, app: { welcome: 'Xin chào, {name}!' } },
en: { app: { welcome: 'Welcome, {name}!' } },
},
});
thl.i18n.mergeMessages('vi', { app: { bye: 'Tạm biệt' } }); // lúc chạyThêm ngôn ngữ mới (tải lười)
ts
createThl({
locales: ['en', 'ja', 'vi', 'zh', 'ko'],
loadLocale: (l) => import(`./locales/${l}.ts`),
});Sao chép @thl-ui/locales/src/en.ts làm mẫu; khai báo kiểu ThlMessages để TypeScript báo thiếu khoá. Ngôn ngữ RTL (ar, he, fa, ur) tự đặt dir="rtl".
Định dạng số & ngày
n() và d() bọc Intl.NumberFormat / Intl.DateTimeFormat theo locale (vi → vi-VN, ja → ja-JP, zh → zh-CN). Date picker, lịch, bảng và biểu đồ dùng cùng bộ định dạng.