Đa ngôn ngữ (Localization)

Thêm ngôn ngữ mới và tùy chỉnh bản dịch trong VieLang Mobile.

Đ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ữCodeFile
Tiếng Anhenintl_en.arb
Tiếng Việtviintl_vi.arb
Tiếng Ả Rậparintl_ar.arb
Tiếng Trung (Phồn thể)zh_TWintl_zh_TW.arb
Tiếng Trung (Giản thể)zhintl_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.arb

Bướ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/generated

Bướ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 .arb

Bướ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 SettingsLanguage.


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.json

Hỗ 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