Đa ngôn ngữ (Localization)
VieLang Mobile hỗ trợ đa ngôn ngữ thông qua Flutter's ARB (Application Resource Bundle). Thêm ngôn ngữ mới không cần sửa code Dart.
Ngôn ngữ có sẵn
| Ngôn ngữ | Code | File |
|---|---|---|
| Tiếng Anh | en | intl_en.arb |
| Tiếng Việt | vi | intl_vi.arb |
| Tiếng Ả Rập | ar | intl_ar.arb |
| Tiếng Trung (Phồn thể) | zh_TW | intl_zh_TW.arb |
| Tiếng Trung (Giản thể) | zh | intl_zh.arb |
Cấu trúc file ARB
File ARB nằm tại: lib/l10n/intl_XX.arb
{
"@@locale": "vi",
"appTitle": "VieLang IoT",
"login": "Đăng nhập",
"logout": "Đăng xuất",
"username": "Tên đăng nhập",
"password": "Mật khẩu",
"dashboard": "Dashboard",
"devices": "Thiết bị",
"alarms": "Cảnh báo",
"settings": "Cài đặt",
"profile": "Hồ sơ",
"notifications": "Thông báo",
"noData": "Không có dữ liệu",
"error": "Lỗi",
"cancel": "Hủy",
"save": "Lưu",
"delete": "Xóa",
"confirm": "Xác nhận",
"search": "Tìm kiếm",
"loading": "Đang tải...",
"refresh": "Làm mới"
}Thêm ngôn ngữ mới
Ví dụ: Thêm tiếng Nhật
Bước 1: Tạo file lib/l10n/intl_ja.arb
cp lib/l10n/intl_en.arb lib/l10n/intl_ja.arbBước 2: Cập nhật @@locale và dịch các giá trị
{
"@@locale": "ja",
"appTitle": "VieLang IoT",
"login": "ログイン",
"logout": "ログアウト",
"username": "ユーザー名",
"password": "パスワード",
"dashboard": "ダッシュボード",
"devices": "デバイス",
"alarms": "アラーム",
"settings": "設定",
"noData": "データなし",
"loading": "読み込み中..."
}Lưu ý: Chỉ dịch giá trị (value), không được đổi key.
Bước 3: Đăng ký locale trong pubspec.yaml
flutter:
generate: true
flutter_intl:
enabled: true
arb_dir: lib/l10n
output_dir: lib/generatedBước 4: Generate localization files
# Phiên bản 1.7.0+
dart run intl_utils:generate
# Hoặc cài extension VS Code: Flutter Intl
# → Tự động generate khi save file .arbBước 5: Thêm locale vào app (nếu cần)
Kiểm tra lib/main.dart — đảm bảo locale mới được hỗ trợ:
MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: const [
Locale('en'),
Locale('vi'),
Locale('ja'), // ← Thêm ở đây
],
)Cài đặt ngôn ngữ trong app
App tự động dùng ngôn ngữ của điện thoại. Nếu ngôn ngữ không được hỗ trợ, fallback về Tiếng Anh.
Người dùng cũng có thể chọn thủ công trong Settings → Language.
Test
# Thay ngôn ngữ thiết bị Android emulator
adb shell settings put system system_locales "ja-JP"
adb shell am broadcast -a android.intent.action.LOCALE_CHANGED
# Rebuild app
flutter run --dart-define-from-file configs.jsonHỗ trợ RTL (Right-to-Left)
Ngôn ngữ RTL (Ả Rập, Hebrew) được Flutter hỗ trợ tự động:
// Kiểm tra RTL trong widget (nếu cần custom)
if (Directionality.of(context) == TextDirection.rtl) {
// RTL layout
}App VieLang Mobile đã được thiết kế để hỗ trợ RTL — chỉ cần thêm file ARB là đủ.
Đóng góp bản dịch
Gửi Pull Request với file .arb mới:
github.com/vielang/vielang-mobile/pulls
Cần:
- File
lib/l10n/intl_XX.arbđầy đủ - Test trên thiết bị thật hoặc emulator
- Screenshot màn hình đăng nhập và dashboard