Banyak aplikasi web dibangun dengan PHP tidak memikirkan internasionlisasi saat ia pertama kali ditulis. Itu mungkin dikarenakan tidak dimaksudkan untuk digunakan dalam bahasa dan kultur. Internasionalisasi adalah aspek penting karena meningkatkan adopsi Internet dalam banyak negara yang berbicara non-Ingris. Proses internasionalisasi dan lokalisasi akan menghadapi kesulitan. Di bawah adalah beberapa petunjuk umum untuk menginternasionalisasi aplikasi yang sudah ada.
Identifikasi dan pisahkan data yang beragam dengan kultur. Yang paling jelas adalah teks/string/pesan. Tipe lain dari data juga harus dipertimbangkan. Daftar berikut mengkategorikan beberapa contoh data sensitif kultur
Bila memungkinkan semua ragam teks harus diisolasi dan disimpan dalam format persisten. Teks ini termasuk, pesan kesalahan aplikasi, string ditulis tangan dalam file PHP, email, teks statis HTML, dan teks pada elemen formulir (misalnya tombol).
Untuk menghidupkan fitur lokalisasi dalam PRADO, Anda perlu menambahkan beberapa opsi konfigurasi dalam konfigurasi aplikasi Anda. Pertama Anda perlu menyertakan namespace System.I18N.* ke path Anda.
Kemudian, jika Anda ingin menerjemahkan beberapa teks dalam aplikasi Anda, perlu ditambahkan sumber data pesan terjemahan.
Di mana source dalam translation adalah path titik ke direktori di mana Anda akan menyimpan katalog pesan terjemahan. Atribut autosave jika dihidupkan, menyimpan pesan tidak diterjemahkan kembali ke dalam katalog pesasn. Dengan menghidupkan cache, pesan yang diterjemahkan disimpan dalam direktori aplikasi runtime/i18n. Nilai marker dipakai untuk mengelilingi teks yang tidak diterjemahkan.
Dengan konfigurasi lengkap, sekarang kita dapat mulai melokalisasi aplikasi Anda. Jika Anda menghidupkan autosave, setelah menjalankan aplikasi Anda dengan beberapa aktivitas lokalisasi (misalnya menterjemahkan beberapa teks), Anda akan melihat sebuah direktori dan messages.xml dibuat di dalam direktori source.
File katalog pesan terjemahan, jika menggunakan type="XLIFF", adalah format intechange XML pesan terjemahan distandarisasi. Anda bisa mengedit file XML menggunakan editor yang mampu menangani UTF-8. Format dari XML adalah sesuatu mirip seperti berikut ini.
Sekali globalisasi dihidupkan, Anda dapat mengakses setelan globalisasi, seperti Culture, Charset, dll, menggunakan
Anda juga mengubah cara kultur ditentukan dengan mengubah atribut class dalam konfigurasi modul. Sebagai contoh, untuk menyetel kultur yang tergantung pada setelan browser, Anda bisa menggunakan kelas TGlobalizationAutoDetect.
Anda juga bisa menyediakan kelas globalisasi sendiri untuk mengubah bagaimana kultur aplikasi ditetapkan. Terakhir, Anda dapat mengubah setelan globalisasi dengan basis halaman demi halaman menggunakan tag kontrol template. Sebagai contoh, mengubah Culture ke "zh".
Fungsi localize mencari string yang diterjemahkan yang sama dengan aslinya dari sumber terjemahan Anda. Pertama, Anda perlu mencari semua teks dikode langsung dalam PHP yang ditampilkan atau dikirimkan ke pengguna akhir. Contoh berikut melokalisasi teks $sender (menganggap, katakanlah, sender adalah sebuah tombol). Kode asli sebelum lokalisasi adalah sebagai berikut.
Pesan dikodekan langsung "Hello, world!" dilokalisasi menggunakan fungsi localize.
Pesan gabungan dapat berisi data variabel. Sebagai contoh, dalam pesan "There are 12 users online.", integer 12 dapat berubah tergantung pada beberapa data dalam aplikasi Anda. Ini sulit diterjemahkan karena posisi dari data variabel mungkin berbeda untuk bahasa yang berbeda. Seabgai tambahan, bahasa yang berbeda memiliki aturannya sendiri untuk bentuk jamak (jika ada) dan/atau pembilang. Contoh berikut tidak mudah untuk diterjemahkan, karena struktur kalimat sudah tetap dengan dikodekan langsung data variabel dengan pesan.
Di mana parameter kedua dalam localize mengambil array asosiatif dengan kunci sebagai penempatan yang dicari dalam teks dan menggantinya dengan nilai terkait. Fungsi localize tidak memecahkan masalah lokalisasi bahasa yang memiliki bentuk jamak, solusinya adalah menggunakan TChoiceFormat.
The following sample demonstrates the basics of localization in PRADO.
Pesan dan string bisa dilokalisasi dalam PHP atau dalam template. Untuk menerjemahkan pesan atau string dalam template, gunakan TTranslate.
TTranslate juga dapat melakukan penempatan string. Properti Parameters bisa digunakan untuk menambah pasangan nama nilai untuk penempatan. Substring dalam terjemahan dikurung dengan "{" dan "}" yang dianggap sebagai nama parameter selama pencarian penempatan. Contoh berikut akan menempatkan substring "{time}" dengan nilai atribut parameter "Parameters.time=<%= time() %>".
Kependekan dari TTranslate juga disediakan menggunakan sintaks berikut.
di mana string akan diterjemahkan ke bahasa berbeda berdasarkan preferensi bahasa pengguna akhir. Sintaks ini bisa dipakai dengan nilai atribut juga.
Memformat tanggal dan jam dilokalisasi adalah pekerjaan langsung.
Properti Pattern menerima 4 predefininisi pola tanggal dilokalisasi dan 4 predefininisi pola jam dilokalisasi.
Predefinisi bisa dipakai dalam setiap kombinasi. Jika menggunakan pola predefinisi gabungan, pola pertama harus tanggal, diikuti oleh spasi, dan terakhir pola jam. Sebagai contoh, pola tanggal lengkap dengan pola jam pendek. Aktual uruta dari tanggal-jam dan pola aktual akan ditentukan secara otomatis dari data lokal yang ditetapkan oleh properti Culture.
Anda dapat menetapkan pola kustom menggunakan sub-pola berikut.
Format tanggal/jam ditetapkan dalam arti pola waktu string. Dalam pola ini, semua huruf ASCII disimpan sebagai huruf pola, yang ditetapkan sebagai berikut:
Jumlah pola huruf menentukan format.
(Teks): 4 huruf menggunakan bentuk lengkap, kurang dari 4 menggunakan bentuk pendek atau singkatan jika ada. (misalnya "EEEE" menghasilkan "Monday", "EEE" menghasilkan "Mon")
(Angka): jumlah digit minimum. Angka lebih pendek adalah diisi-nol ke jumlah ini (misalnya jika "m" menghasilkan "6", "mm" menghasilkan "06"). Tahun ditangani secara khusus; yakni jika jumlah 'y' adalah 2, Tahun akan dipotong 2 digit. (misalnya jika "yyyy" menghasilkan "1997", "yy" menghasilkan "97".) Tidak seperti field lain, pecahan detik dipadatkan pada sisi kanan dengan nol.
(Teks dan Angka): 3 atau lebih, pakai teks, sebaliknya pakai angka. (misalnya "M" menghasilkan "1", "MM" menghasilkan "01", "MMM" menghasilkan "Jan", and "MMMM" menghasilkan "January".)
Setiap karakter dalam pola yang tidak dalam jangkauan ['a'..'z'] dan ['A'..'Z'] akan diperlakukan sebagai teks bertanda kutip. Contohnya, karakter seperti ':', '.', ' ', dan '@' akan muncul dalam hasil teks waktu meskipun tidak dikurung dalam tanda kutip tunggal.
Contoh menggunakan lokal US:
Jika properti Value tidak ditetapkan, tanggal dan jam saat ini yang dipakai.
Kerangka kerja Internasionalisasi PRADO menyediakan pembentukan kurs lokal dan pembentukan angka. Harap dicatat bahwa komponen TNumberFormat hanya menyediakan pembentukan, saat ini ia tidak melakukan konversi atau pertukaran.
Numbers can be formatted as currency, percentage, decimal or scientific numbers by specifying the Type attribute. The valid types are:
Properti Culture dan Currency dapat ditetapkan untuk membentuk angka spesifik lokal.
Jika seseorang dari US ingin melihat gambar penjualan dari sebuah toko dalam bahasa Jerman (katakanlah menggunakan kurs EURO), diformat menggunakan kurs jerman, Anda perlu untuk menggunakan atribut Culture="de_DE" guna memperoleh kurs yang benar, misalnya 100,00$. Pemisah desimal dan pengelompokan kemudian juga dari lokal de_DE. Ini dapat menimbulkan beberapa kebingungan karena orang dari US memakai "," (koma) sebagai pemisah ribuan. Oleh karena itu, atribut Currency tersedia agar output dari hasil contoh berikut menghasilkan $100.00
Properti Pattern menetapkan jumlah digit, posisi pengelompokan ribuan, jumlah titik desimal dan posisi desimal. Karakter aktual yang dipakai untuk menyajikan titik desimal dan titik ribuan adalah spesifik kultur dan akan berubah secara otomatis berdasarkan properti Culture. Karakter Pattern yang benar adalah:
Sebagai contoh, anggap Value="1234567.12345" dan dengan Culture="en_US" (yang menggunakan "," untuk titik pemisah ribuan dan "." untuk pemisah desimal).
Pesan gabungan, misalnya penempatan string, bisa dilakukan dengan TTranslateParameter.
Dalam contoh berikut, string "{greeting}" dan "{name}" masing-masing akan diganti dengan nilai "Hello" dan "World". Penempatan string harus dikurung dengan "{" dan "}". Parameter selanjutnya diterjemahkan dengan menggunakans TTranslate.
Menggunakan fungsi localize atau komponen TTranslate untuk menerjemahkan pesan tidak memberitahu penerjemah kardinalitas dari data yang diminta untuk menentukan struktur jamak yang benar yang dipakai. Ia hanya memberitahunya bahwa ada data tersedia, data dapat berupa apa saja. Selanjutnya, penerjemah tidak akan bisa menentukan dengan memperhatikan penempatan data plural yang benar, struktur bahasa atau prasa yang dipakai. Misalnya dalam bahasa Inggris, untuk menerjemahkan kalimat, "There are {number} of apples.", hasil terjemahan akan berbeda tergantung pada jumlah apel.
Komponen TChoiceFormat melakukan pilihan terjemahan pesan/string. Contoh berikut mendemonstrasikan terjemahan pesan 2 pilihan sederhana.
Dalam contoh di atas, Value "1" (satu), kemudian string yang diterjemahkan adalah "One Apple". Jika Value adalah "2", maka ia akan menampilkan "Two Apples".
Pilihan pesan/string dipisashkan oleh pipa "|" diikuti oleh set notasi dari formulir.
Setiap kombinasi tidak-kosong dari kurung kotak dan bulat dapat diterima. String yang dipilih untuk tampilan tergantung pada properti Value. Value dievaluiasi untuk setiap set-nya sampai Value ditemukan milik set tertentu.