Internasionalisasi (I18N) merujuk pada proses mendesain aplikasi software agar bisa diadaptasi ke berbagai bahasa dan wilayah tanpa perubahan proses pembuatannya. Untuk aplikasi Web, ini merupakan bagian penting karena potensi pengguna mungkin datang dari seluruh dunia.
Yii menyediakan dukungan I18N dalam beberapa aspek.
Dalam subseksi berikut, kita akan mengelaborasi setiap aspek di atas.
Lokal adalah satu set parameter yang mendefinisikan bahasa pengguna, negara
dan setiap preferensi varian khusus yang diinginkan pengguna melihatnya dalam
antar muka mereka. Ini biasanya diidentifikasi dengan ID yang terdiri dari ID bahasa
dan ID wilayah. Sebagai contoh, ID en_US
singkatan dari lokal bahasa Inggris dan
Amerika. Untuk konsistensi, semua ID lokal dalam Yii adalah dikanonikal
guna membentuk LanguageID
atau LanguageID_RegionID
dalam huruf kecil (misalnya en
, en_us
).
Data lokal disajikan sebagai turunan CLocale. Ia menyediakan informasi dependen-lokal, termasuk simbol kurs, simbol angka, format kurs, format angka, format tanggal dan jam, dan nama terkait=tanggal. Karena informasi bahasa sudah disatukan dalam ID lokal, ia tidak disediakan oleh CLocale. Untuk alasan yang sama, kita sering saling bertukar batasan lokal dan bahasa.
Diperoleh ID lokal, Anda bisa mendapatkan turunan CLocale terkait dengan
CLocale::getInstance($localeID)
atau CApplication::getLocale($localeID)
.
Info: Yii datang dengan data lokal untuk hampir semua bahasa dan wilayah. Data diperoleh dari Repositori Data Lokal Umum (CLDR). Untuk setiap lokal, hanya subset data CLDR yang disediakan karena data aslinya berisi banyak dan informasinya jarang dipakai.
Untuk aplikasi Yii, kita membedakan target bahasa dari sumber bahasa. Target bahasa adalah bahasa (lokal) pengguna yang aplikasinya ditargetkan baginya, sementara sumber bahasa merujuk ke bahasa (lokal) penulisan file sumber aplikasi. Internasionalisasi terjadi hanya ketika dua bahasa berbeda.
Anda dapat mengkonfigurasi target bahasa dalam konfigurasi aplikasi, atau mengubahnya secara dinamis sebelum internasionalisasi terjadi.
Tip: Adakalanya kita mungkin ingin menyetel target bahasa seperti bahasa yang diinginkan oleh pengguna (ditetapkan dalam preferensi browser pengguna). Untuk melakukannya, kita dapat mengambil ID bahasa yang diinginkan pengguna menggunakan CHttpRequest::preferredLanguage.
Fitur I18N yang paling dibutuhkan barangkali adalah terjemahan, termasuk terjemahan pesan dan terjemahan tampilan. Terjemahan pesan menerjemahkan pesan teks ke bahasa yang diinginkan, sementara terjemahan tampilan menerjemahkan seluruh file ke bahasa yang dinginkan.
Permintaan terjemahan terdiri dari obyek yang diterjemahkan, sumber bahasa di mana obyek itu berada, dan target bahasa ke mana obyek harus diterjemahkan. Dalam Yii, sumber bahasa distandarkan ke sumber bahasa aplikasi sementara target bahasa distandarkan ke bahasa aplikasi. Jika sumber dan target bahasa sama, terjemahan tidak terjadi.
Terjemahan pesan dikerjakan dengan memanggil Yii::t(). Metode menerjemahkan pesan yang didapat dari sumber bahasa ke target bahasa.
Saat menerjemahkan pesan, kategorinya harus ditetapkan karena
pesan mungkin diterjemahkan secara berbeda di bawah kategori
(konteks) berbeda. Kategori yii
terpakai untuk pesan yang digunakan oleh kode inti Yii
framework.
Pesan bisa berisi penampung parameter yang akan diganti dengan nilai parameter
sebenarnya saat memanggil Yii::t(). Sebagai
contoh, permintaan terjemahan pesan berikut akan mengganti penampung
{alias}
dalam pesan asli dengan nilai alias sebenarnya.
Yii::t('yii', 'Path alias "{alias}" is redefined.',
array('{alias}'=>$alias))
Catatan: Pesan yang diterjemahkan harus berupa konstan string. Tidak boleh berisi variabel yang akan mengubah konten pesan (misalnya
"Invalid {$message} content."
). Gunakan penampung parameter jika pesan harus bervariasi berdasarkan pada beberapa parameter.
Pesan yang diterjemahkan disimpan dalam sebuah repositori yang disebut sumber pesan. Sumber pesan disajikan sebagai turunan CMessageSource atau anak kelasnya. Ketika Yii::t() dipanggil, ia akan mencari pesan dalam sumber pesan dan mengembalikan versi terjemahan jika ditemukan.
Yii datang dengan jenis sumber pesan berikut. Anda juga boleh memperluas CMessageSource untuk mengubah jenis sumber pesan Anda sendiri.
CPhpMessageSource: terjemahan pesan disimpan sebagai pasangan kunci-nilai dalam array PHP. Pesan asli adalah kunci dan terjemahan pesan adalah nilai. Setiap array mewakili terjemahan untuk kategori pesan tertentu dan disimpan dalam file naskah PHP terpisah yang namanya adalah nama kategori. File terjemahan PHP untuk bahasa yang sama disimpan di bawah direktori yang sama dinamai sebagai ID lokal. Dan semua direktori ini ditempatkan di bawah direktori yang ditetapkan dalam basePath.
CGettextMessageSource: terjemahan pesan disimpan sebagai file GNU Gettext.
CDbMessageSource: terjemahan pesan disimpan dalam tabel database. Untuk lebih jelasnya, lihat dokumentasi API untuk CDbMessageSource.
Sumber pesan diambil sebagai komponen
aplikasi. Pra-deklarasi
komponen aplikasi Yii bernama messages untuk menyimpan
pesan yang dipakai dalam aplikasi pengguna. Distandarkan, jenis sumber pesan ini
adalah CPhpMessageSource dan path basis untuk penyimpanan file terjemahan PHP
adalah protected/messages
.
Ringkasnya, untuk menggunakan terjemahan pesan, diperlukan langkah-langkah berikut:
Panggil Yii::t() di tempat yang sesuai;
Buat file terjemahan PHP sebagai
protected/messages/LocaleID/CategoryName.php
. Setiap file mengembalikan sebuah
array terjemahan pesan. Catatan, ini anggapan bahwa Anda menggunakan
CPhpMessageSource standar untuk menyimpan pesan yang diterjemahkan.
Konfigurasi CApplication::sourceLanguage dan CApplication::language.
Tip: Piranti
yiic
dalam Yii bisa dipakai untuk mengatur terjemahan pesan ketika CPhpMessageSource dipakai sebagai sumber pesan. Perintahmessage
dapat secara otomatis mengurai pesan yang akan diterjemahkan dari file sumber yang dipilih dan menggabungnya dengan terjemahan yang sudah ada bila diperlukan.
Sejak versi 1.0.2, Yii menambahkan dukungan untuk choice format. Pilihan format merujuk ke pemilihan terjemahan berdasarkan nilai angka yang diberikan. Sebagai contoh, dalam bahasa Inggris, kata 'book' mungkin berupa bentuk tunggal atau bentuk plural tergantung pada jumlah buku, sementara dalam bahasa lain, kata mungkin tidak memiliki bentuk berbeda (misalnya Cina) atau memiliki aturan bentuk lebih kompleks (misalnya Rusia). Pilihan format memecahkan masalah ini dengan cara sederhana namun efektif.
Untuk menggunakan pilihan format, pesan yang diterjemahkan harus terdiri dari pasangan
urutan ekspresi-pesan dipisahkan dengan |
, seperti terlihat di bawah ini:
'expr1#message1|expr2#message2|expr3#message3'
di mana exprN
merujuk ke ekspresi valid PHP yang mengevaluasi ke nilai boolean
menunjukan apakah pesan terkait harus dikembalikan atau tidak. Hanya pesan
terkait ke ekspresi pertama yang hasil evaluasinya true akan dikembalikan.
Ekspresi bisa berisi variabel spesial bernama n
(catatan, ini bukan $n
)
yang akan mengambil jumlah nilai yang dioper sebagai parameter pesan pertama. Sebagai contoh,
menganggap pesan yang diterjemahkan adalah:
'n==1#one book|n>1#many books'
dan kita mengoper nilai angka 2 dalam array parameter pesan saat
memanggil Yii::t(), kita akan memperoleh many books
sebagai pesan
yang diterjemahkan.
Notasi jalan pintas, jika ekspresi adalah angka, ia akan diperlakukan sebagai
n==Number
. Oleh karena itu pesan yang diterjemahkan juga bisa ditulis seperti:
'1#one book|n>1#many books'
Terjemahan file dilakukan dengan memanggil
CApplication::findLocalizedFile(). Path file yang akan
diterjemahkan, metode akan mencari file dengan nama yang sama di bawah
subdirektori LocaleID
. Jika ditemukan, path file yang akan dikembalikan;
jika tidak, path file asli yang akan dikembalikan.
Terjemahan file dipakai terutama saat membuat tampilan. Ketika memanggil salah satu
metode render dalam kontroler atau widget, file tampilan akan diterjemahkan
secara otomatis. Sebagai contoh, jika target
bahasa adalah zh_cn
sementara sumber
bahasa adalah en_us
, pembuatan tampilan bernama
edit
akan mencari file tampilan
protected/views/ControllerID/zh_cn/edit.php
. Jika file ditemukan, versi
terjemahan ini yang dipakai untuk pembuatan; jika tidak, file
protected/views/ControllerID/edit.php
yang akan dibuat.
Terjemahan file juga dapat dipakai untuk keperluan lain, misalnya menampilkan gambar terjemahan atau pengambilan file data dependen-lokal.
Tanggal dan jam sering berbeda bentuk di negara atau wilayah berbeda. Tugas pembentukan tanggal dan jam menghasilkan string tanggal dan jam yang sesuai dengan lokal yang ditetapkan. Yii menyediakan CDateFormatter untuk keperluan ini.
Setiap turunan CDateFormatter dikaitkan dengan target lokal. Untuk mendapatkan pembentuk yang dikaitkan dengan target lokal pada seluruh aplikasi, kita cukup mengakses properti dateFormatter pada aplikasi.
Kelas CDateFormatter menyediakan dua metode untuk membentuk UNIX timestamp.
format: metode ini membentuk UNIX
timestamp ke dalam string berdasarkan pola yang dikustomisasi (misalnya
$dateFormatter->format('yyyy-MM-dd',$timestamp)
).
formatDateTime: metode ini membentuk
UNIX timestamp ke dalam string berdasarkan pola pradefinisi dalam data target
lokal (misalnya format tanggal short
, format waktu
long
).
Seperti tanggal dan jam, angka juga bisa dibentuk secara berbeda di negara atau wilayah yang berbeda. Pembentukan angka termasuk pembentukan desimal, pembentukan kurs dan pembentukan prosentase. Yii menyediakan CNumberFormatter untuk tugas-tugas ini.
Untuk mendapatkan pembentuk angka terkait dengan target lokal pada seluruh aplikasi, kita dapat mengakses properti numberFormatter pada aplikasi.
Metode berikut disediakan oleh CNumberFormatter untuk membentuk nilai integer atau double.
format: metode ini membentuk angka
ke dalam string berdasarkan pada pola kustomisasi (misalnya
$numberFormatter->format('#,##0.00',$number)
).
formatDecimal: metode ini membentuk angka menggunakan pola desimal pradefinisi dalam data lokal target.
formatCurrency: metode ini membentuk angka dan kode kurs menggunakan pola kurs pradefinisi dalam data lokal target.
formatPercentage: metode ini membentuk angka menggunakan pola prosentase pradefinisi dalam data lokal target.
Signup or Login in order to comment.