Bismillahirrahmannirrahiim, Pada kali ini aku akan membagikan pengalamanku membuat Localization dan Translations di Flutter dengan mudah pakai extensions. Sebelumnya saya telah membuat artikel lainya yang membahas tentang localization juga di Flutter, bisa lihat di https://wisnuwiry.space/post/flutter-localization/.
Pengenalan #
Pada kali yang aku bahas yaitu tentang Flutter_Intl sebagai extensions yang digunakan untuk auto generate localization. Pada extension bekerja dari format file .arb
ke bahasa dart
, supaya bisa dibaca oleh dart itu sendiri. Extension ini sangat cepat sekali untuk proses development, tanpa harus melakukan langkah yang banyak.
Instalasi Extension #
Untuk artikel kali aku akan buat/mencoba membuat localization di Flutter lebih mudah dan simple dengan menggunakan extensions. Untuk extensions yang saya maksud yaitu bernama Flutter_Intl, extension ini bisa dijalankan di VS Code maupun di Android Studio.
Untuk lihat selengkapnya tentang extensions berikut ini:
Untuk info lebih mengenai install extensions/plugin bisa lihat selengkapnya untuk VS Code untuk Android Studio.
Buat Projek Baru #
Sebelum memulai mencoba praktik, buat terlebih dahulu project baru Flutter, atau jika sudah tersedia project flutter, lewati langkap ini. Jika belum untuk membuat project baru gunakkan command berikut:
|
|
Untuk flutter_multi_bahasa tersebut adalah contoh nama projectnya, bisa juga jika Anda ingin membuat sesuai dengan keinginan.
Untuk info selengkapnya mengenai pembuatan project pada flutter bia lihat dokumentasi resminya di https://flutter.dev/.
Configurasi Intl #
Setelah buat projek langkah selanjutnya yaitu configurasi dan install dependency yang dibutuhkan. Untuk konfigurasinya seperti berikut ini:
1. Install Dependency
Dependency yang perlu di install yaitu flutter_localizations
, dari flutter sdk, sebagai contohnya seperti ini:
|
|
Jangan lupa setelah install dependency pub get
terlebih dahulu, atau bisa dengan jalankan command:
|
|
2. Configurasi Material App
Langkah selanjutnya yaitu perlu konfigurasi di Widget atau di MaterialApp kita terlebih dahulu. Untuk konfigurasi MaterialApp, secara default berada di file lib/main.dart, atau jika Anda sudah menggantinya bisa disesuaikan posisinya. Sebagai contoh berikut ini:
|
|
Tambahkan beberapa line kode, seperti yang saya contohkan. Mungkin setelah menambahkan beberapa kode tersebut terdapat error, saat ini error tersebut biarkan saja dulu.
3. Konfigurasi Localization
Untuk konfigurasinya terdapat dalam file pubspec.yaml
. Berikut beberapa contoh konfigurasinya:
|
|
Inisialisasi Flutter Intl #
Supaya Extensions Flultter Intl, ini bekerja pada project Anda, perlu menginisialisasi project terlebih dahulu. Pada langkah ini pastikan dengan benar extension Flutter_Intl sudah terinstall dengan benar. Untuk Android Studio sama Vs Code ada sedikit perbedaan, berikut penjelasanya:
VS Code #
Untuk di VS Code cukup mudah, dengan klik tombol menu bar diatas, View >> Command Pallete
atau cukup dengan ketikkan shortcut Ctrl + Shift + P
untuk Windows dan Linux, dan Jika Mac Os Commad + P
. Dan kemudian cari menu Flutter Intl: Initialize
. Maka akan dengan otomatis di inisialisasi di project Anda.
Android Studio #
Untuk di Android Sudio ini untuk initialisasi project dengan extension/plugin Flutter_Intl ini, cukup pilih menu di Atas Tools >> Flutter Intl >> Initialize for the project
. Tunggu sampai selesai. :)
Setelah selesai proses initialisasinya, secara default akan digenerate kan folder. lib/l10n
, sebagai wadah menampung data localization degnan format .arb
dan lib/generated/
sebagai hasil generate kode dan file .arb
ke dart. Semua hasil generate tersebut berasal dari config di pubspec.yaml
yang telah dibuat.
Menambahkan Dukungan Bahasa #
Untuk menambahkan beberapa bahasa yang ingin kita tambahkan pada aplikasi anda, cukup gunakan menu Flutter Intl: Add Locale
.
Untuk VS Code:
View >> Command Pallete >> Flutter Intl: Add Locale
Untuk Android Studio:
Tools >> Flutter Intl >> Add Locale
Isi sesuai dengan country / locale yang anda inginkan.
Note: Untuk konfigurasi di IOS perlu menambahkan sedikit konfigurasi lagi bisa Anda menambahkan bahasa lain. Berikut contohnya:
Untuk configurasi IOS berada pada file ios/Runner/Info.plist
, dan sesuaikan code nya di folder l10n
.
|
|
Buat Translasi #
Untuk buat translasi kita buat dari format .arb
yang berada pada folder, l10n
sesuai konfigurasi anda sebelumnya. Pada format arb ini mirip sekali dengan format json
jadi lebih familiar ketika menggunakanya. Sama seperti json
arb
juga mempunyai key
dan value
. Dimana key ini sebagai kata kunci yang akan kita gunakan nanti dan yang generatekan oleh extensions, sebagai nama variable
, key
pada semua bahasa yang di arb harus sama persis. Dan value
nya ini sebagai output value pada masing-masing bahasa yang digunakan. Berikut contoh-contoh implementasinya.
Tanpa Plural
Yang dimaksud tanpa plural ini yaitu ketika kita panggil translation tidak perlu memerlukan parameter apapun. contoh:1 2 3
{ "hello_world": "Hello World" }
Dengan Plural
Untuk penggunaan plural pada
arb
file, cuma gunakan tanda kurang kurawal{}
sebagai tanda tata letak parameter tersebut akan ditaruh. Dan parameter tersebut dynamic baik penamaan maupun valuenya, boleh terserah kita.1 2 3 4
{ "my_name": "My Name is {name}", "my_age": "My Age is {age} years old" }
Ketika kita membuat sebuah translasi akan otomatis di generate kan oleh extension secara asynchronous, jadi tidak perlu repot-repot generate sendiri.
Pemanggilan Translasi #
Untuk pemanggilan translasi itu disesuikan dengan key dari arb
file yang kita buat. Sebagai contoh jika saya buat key translasi itu: "hello_world"
maka ketika panggil bisa kayak gini:
Ada dua cara ketika panggil translasi yaitu:
Panggil menggunakan context
Contoh:
1
S.of(context).hello_world
Panggil tanpa context
1
S.current.hello_world
Dan jika anda menggunakan plural cara panggilnya seperti ini:
Ketika plural cuma satu param
1
S.current.my_name('Wisnu')
Ketika plural lebih dari satu param
1
S.current.profile('Wisnu', '17')
Untuk contoh lengkapnya bisa lihat di github saya:
Source Code
Langkah Selanjutnya #
Untuk langkah selanjutnya Anda bisa terapkan state management untuk menyimpan state, ketika ada perubahan bahasa, dan juga bisa diterapkan caching data setting bahasa menggunakan state management.
Sekian pembahasanku kali ini semoga bermanfaat :)
Jika terdapat kesalahan penulisan, typo, atau kurang sesuai dalam penulisan, bantu Saya untuk Edit on Github.
Comment: