Delphi yang saya bicarakan disini adalah Delphi XE 10.3.3 Community Edition yang bulan lalu saya dapatkan secara gratis dan legal dari komunitas developer Embarcadero. Baca artikel Delphi 10.3.3 Rio Community Edition bila Anda belum mendapatkannya.
“Delphi Community Edition is a full featured IDE for building iOS, Android, Windows and macOS apps from a single Delphi codebase (limited commercial use license).”
Kali ini saya akan belajar membuat program dengan “user-interface” multi-bahasa. Dalam percobaan ini saya gunakan 3 bahasa, Indonesia, English dan France. (saya gunakan google translate, jadi harap maklum kalau translatenya agak kaku).
Baiklah kita mulai saja:
1. Jalankan Delphinya
2. Klik menu File – New – Windows VCL Application
3. Tempatkan komponen-komponen berikut:- 3 buah TLabel
- 3 Buah TButton
- 1 TcheckBox
- 1 ComboBox
- 2 TEdit
- 1 Tlang
- 1 TListBox
- 1 TMenuBar
4. Posisikan komponennya seperti contoh gambar 2
5. Klik ganda MenuBar1 kemudian tambahkan item dan child itemnya kurang lebih seperti gambar 3
6. Klik ganda komponen ListBox1 kemudian tambahkan 4 TListBoxItem seperti gambar 4.
7. Klik ganda komponen Lang1, maka akan tampil form Language Designer.
8. Pada form Language Designer klik tombol “Scan for strings“, maka form akan terisi dengan nama-nama komponen yang digunakan.
9. Tambahkan komponen yang belum terdaftar dengan cara klik tombol +, kemudian isi kolom “New original text:” dengan nama komponen dilanjutkan dengan klik tombol “Add“.
10. Bila diperlukan kita bisa menghapus list komponen dengan cara: sorot list yang mau dihapus kemudian klik tombol “–“.
Sekarang saatnya mengisi teks yang akan tampil pada masing-masing komponen sesuai bahasanya.
11. Masih pada form Language Designer, isi kolom “Two letter language code:” dengan kode bahasa, misalkan “en” untuk English, kemudian klik tombol “Add Language“.
12. Kemudian isi kolom-kolomnya sesuai dengan yang semestinya, misal:- Label1 = Name
- Label2 = Address
- Button2 = Close
- MenuItem1 = File
dst.
13. Ulangi langkah No 11 dan 12 untuk bahasa lainnya dengan mengklik tombol “Add Language”.
14. Hasil akhirnya akan seperti gambar 5 dan 6.
lanjut…
15. Edit property ComboBox1 sbb:
– Items, tambahkan: EN - English
ID - Indonesia
FR - France
– ItemIndex = 0
16. Event OnChange komponen ComboBox1 isi dengan:
var
lang: string;
begin
lang:= Copy(ComboBox1.Items[ComboBox1.ItemIndex],1,2);
LoadLangFromStrings(Lang1.LangStr[lang]);
end;
17. Event OnClick komponen Button2 isi dengan dengan: Close;
18. Event OnCreate dari Form1 isi kode berikut: ComboBox1Change(Sender);
Sampai disini percobaan kita sudah bisa dikompile dan dilihat hasilnya, apakah sudah sesuai?
Tunggu dulu, kok menunya tidak ikut berubah ya?? apakah ini bug dari komponen TLang? atau saya yang belum tahu cara pemakain seutuhnya? ntahlah !!!
OK. Kita tambahkan saja kode berikut ke event OnChange dari komponen ComboBox1 sbb:
Jadi codenya akan seperti berikut:
var
lang,s: string;
begin
lang:= Copy(ComboBox1.Items[ComboBox1.ItemIndex],1,2);
LoadLangFromStrings(Lang1.LangStr[lang]);
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('Form1')];
Caption:= Copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('Edit1')];
Edit1.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('Edit2')];
Edit2.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem1')];
MenuItem1.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem2')];
MenuItem2.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem3')];
MenuItem3.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem5')];
MenuItem5.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem8')];
MenuItem8.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem9')];
MenuItem9.Text:= copy(s, Pos('=',s)+1, Length(s));
s:= lang1.LangStr[lang][lang1.LangStr[lang].IndexOfName('MenuItem10')];
MenuItem10.Text:= copy(s, Pos('=',s)+1, Length(s));
end;
Bagaimana? Cukup mudah bukan?
Happy coding.
WG.
Demo program multi language (2.1 MiB, 239 hits)