LanguageSwitcher
Pengantar
Widget LanguageSwitcher menyediakan cara mudah untuk menangani perpindahan bahasa di proyek Nylo Website Anda. Widget ini secara otomatis mendeteksi bahasa yang tersedia di direktori /lang Anda dan menampilkannya kepada pengguna.
Apa yang dilakukan LanguageSwitcher?
- Menampilkan bahasa yang tersedia dari direktori
/langAnda - Mengganti bahasa aplikasi saat pengguna memilih salah satu
- Menyimpan bahasa yang dipilih agar bertahan saat aplikasi dimulai ulang
- Secara otomatis memperbarui UI saat bahasa berubah
Catatan: Jika aplikasi Anda belum dilokalkan, pelajari cara melakukannya di dokumentasi Lokalisasi sebelum menggunakan widget ini.
Widget Dropdown
Cara paling sederhana untuk menggunakan LanguageSwitcher adalah sebagai dropdown di app bar Anda:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Settings"),
actions: [
LanguageSwitcher(), // Add to the app bar
],
),
body: Center(
child: Text("Hello World".tr()),
),
);
}
Saat pengguna mengetuk dropdown, mereka akan melihat daftar bahasa yang tersedia. Setelah memilih bahasa, aplikasi akan secara otomatis beralih dan memperbarui UI.
Modal Bottom Sheet
Anda juga dapat menampilkan bahasa dalam modal bottom sheet:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: MaterialButton(
child: Text("Change Language"),
onPressed: () {
LanguageSwitcher.showBottomModal(context);
},
),
),
);
}
Modal bottom menampilkan daftar bahasa dengan tanda centang di sebelah bahasa yang sedang dipilih.
Menyesuaikan Tinggi Modal
LanguageSwitcher.showBottomModal(
context,
height: 300, // Custom height
);
Builder Dropdown Kustom
Sesuaikan tampilan setiap opsi bahasa di dropdown:
LanguageSwitcher(
dropdownBuilder: (Map<String, dynamic> language) {
return Row(
children: [
Icon(Icons.language),
SizedBox(width: 8),
Text(language['name']), // e.g., "English"
// language['locale'] contains the locale code, e.g., "en"
],
);
},
)
Menangani Perubahan Bahasa
LanguageSwitcher(
onLanguageChange: (Map<String, dynamic> language) {
print('Language changed to: ${language['name']}');
// Perform additional actions when language changes
},
)
Parameter
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
icon |
Widget? |
- | Ikon kustom untuk tombol dropdown |
iconEnabledColor |
Color? |
- | Warna ikon dropdown |
iconSize |
double |
24 |
Ukuran ikon dropdown |
dropdownBgColor |
Color? |
- | Warna latar belakang menu dropdown |
hint |
Widget? |
- | Widget hint saat tidak ada bahasa yang dipilih |
itemHeight |
double |
kMinInteractiveDimension |
Tinggi setiap item dropdown |
elevation |
int |
8 |
Elevasi menu dropdown |
padding |
EdgeInsetsGeometry? |
- | Padding di sekitar dropdown |
borderRadius |
BorderRadius? |
- | Radius border menu dropdown |
textStyle |
TextStyle? |
- | Gaya teks untuk item dropdown |
langPath |
String |
'lang' |
Path ke file bahasa di assets |
dropdownBuilder |
Function(Map<String, dynamic>)? |
- | Builder kustom untuk item dropdown |
dropdownAlignment |
AlignmentGeometry |
AlignmentDirectional.centerStart |
Alignment item dropdown |
dropdownOnTap |
Function()? |
- | Callback saat item dropdown diketuk |
onTap |
Function()? |
- | Callback saat tombol dropdown diketuk |
onLanguageChange |
Function(Map<String, dynamic>)? |
- | Callback saat bahasa diubah |
Method Statis
Mendapatkan Bahasa Saat Ini
Ambil bahasa yang sedang dipilih:
Map<String, dynamic>? lang = await LanguageSwitcher.currentLanguage();
// Returns: {"en": "English"} or null if not set
Menyimpan Bahasa
Simpan preferensi bahasa secara manual:
await LanguageSwitcher.storeLanguage(
object: {"fr": "French"},
);
Menghapus Bahasa
Hapus preferensi bahasa yang tersimpan:
await LanguageSwitcher.clearLanguage();
Mendapatkan Data Bahasa
Dapatkan informasi bahasa dari kode locale:
Map<String, String>? langData = LanguageSwitcher.getLanguageData("en");
// Returns: {"en": "English"}
Map<String, String>? langData = LanguageSwitcher.getLanguageData("fr_CA");
// Returns: {"fr_CA": "French (Canada)"}
Mendapatkan Daftar Bahasa
Dapatkan semua bahasa yang tersedia dari direktori /lang:
List<Map<String, String>> languages = await LanguageSwitcher.getLanguageList();
// Returns: [{"en": "English"}, {"es": "Spanish"}, ...]
Menampilkan Modal Bottom
Tampilkan modal pemilihan bahasa:
await LanguageSwitcher.showBottomModal(context);
// With custom height
await LanguageSwitcher.showBottomModal(context, height: 400);
Locale yang Didukung
Widget LanguageSwitcher mendukung ratusan kode locale dengan nama yang mudah dibaca. Beberapa contoh:
| Kode Locale | Nama Bahasa |
|---|---|
en |
English |
en_US |
English (United States) |
en_GB |
English (United Kingdom) |
es |
Spanish |
fr |
French |
de |
German |
zh |
Chinese |
zh_Hans |
Chinese (Simplified) |
ja |
Japanese |
ko |
Korean |
ar |
Arabic |
hi |
Hindi |
pt |
Portuguese |
ru |
Russian |
Daftar lengkapnya mencakup varian regional untuk sebagian besar bahasa.