Saya telah bergumul dengan pertanyaan ini selama beberapa bulan sekarang, tetapi saya belum pernah berada dalam situasi yang saya perlukan untuk mengeksplorasi semua opsi yang mungkin sebelumnya. Saat ini, saya merasa sudah waktunya untuk mengetahui kemungkinan dan membuat preferensi pribadi saya untuk digunakan dalam proyek mendatang saya.
Biarkan saya membuat sketsa situasi yang saya cari
Saya akan memutakhirkan / mengembangkan kembali sistem manajemen konten yang sudah lama saya gunakan. Namun, saya merasa multi bahasa merupakan perbaikan besar untuk sistem ini. Sebelumnya saya tidak menggunakan kerangka kerja apa pun tetapi saya akan menggunakan Laraval4 untuk proyek yang akan datang. Laravel tampaknya merupakan pilihan terbaik dari cara yang lebih bersih untuk kode PHP. Sidenote: Laraval4 should be no factor in your answer
. Saya mencari cara umum terjemahan yang platform / kerangka kerja independen.
Apa yang harus diterjemahkan
Karena sistem yang saya cari harus semudah mungkin digunakan untuk pengguna, metode untuk mengelola terjemahan harus berada dalam CMS. Seharusnya tidak perlu memulai koneksi FTP untuk memodifikasi file terjemahan atau templat yang diuraikan html / php.
Selain itu, saya mencari cara termudah untuk menerjemahkan beberapa tabel basis data mungkin tanpa perlu membuat tabel tambahan.
Apa yang saya hasilkan dengan diri saya sendiri
Karena saya sudah mencari, membaca, dan mencoba berbagai hal sendiri. Ada beberapa opsi yang saya miliki. Tetapi saya masih merasa belum mencapai metode praktik terbaik untuk apa yang sebenarnya saya cari. Saat ini, inilah yang saya buat, tetapi metode ini juga memiliki efek sampingnya.
- PHP Parsed Templates : sistem template harus diuraikan oleh PHP. Dengan cara ini saya dapat memasukkan parameter yang diterjemahkan ke dalam HTML tanpa harus membuka template dan memodifikasinya. Selain itu, templat PHP yang diurai memberi saya kemampuan untuk memiliki 1 templat untuk situs web lengkap alih-alih memiliki subfolder untuk setiap bahasa (yang pernah saya miliki sebelumnya). Metode untuk mencapai target ini bisa berupa Smarty, TemplatePower, Laravel's Blade atau parser templat lainnya. Seperti yang saya katakan ini harus independen terhadap solusi tertulis.
- Database Driven : mungkin saya tidak perlu menyebutkan ini lagi. Tetapi solusinya harus didorong oleh basis data. CMS ditujukan untuk berorientasi objek dan MVC, jadi saya perlu memikirkan struktur data logis untuk string. Seperti template saya akan terstruktur: template / Controller / view.php mungkin struktur ini akan membuat paling masuk akal:
Controller.View.parameter
. Tabel database akan memiliki bidang ini panjang denganvalue
bidang. Di dalam templat kita bisa menggunakan semacam metode sortirecho __('Controller.View.welcome', array('name', 'Joshua'))
dan parameternya berisiWelcome, :name
. Demikian hasilnyaWelcome, Joshua
. Ini sepertinya cara yang baik untuk melakukan ini, karena parameter seperti: nama mudah dimengerti oleh editor. - Beban Basis Data Rendah : Tentu saja sistem di atas akan menyebabkan banyak beban basis data jika string ini sedang dimuat saat bepergian. Oleh karena itu saya memerlukan sistem caching yang merender ulang file bahasa segera setelah diedit / disimpan di lingkungan administrasi. Karena file dihasilkan, tata letak sistem file yang baik juga diperlukan. Saya kira kita bisa pergi dengan
languages/en_EN/Controller/View.php
atau .ini, apa pun yang paling cocok untuk Anda. Mungkin .ini bahkan diurai lebih cepat pada akhirnya. Cetakan ini harus berisi data dalamformat parameter=value;
. Saya kira ini adalah cara terbaik untuk melakukan ini, karena setiap Tampilan yang diberikan dapat menyertakan file bahasa sendiri jika ada. Parameter bahasa kemudian harus dimuat ke tampilan tertentu dan tidak dalam lingkup global untuk mencegah parameter saling menimpa. - Terjemahan Tabel Database : ini sebenarnya adalah hal yang paling saya khawatirkan. Saya sedang mencari cara untuk membuat terjemahan Berita / Halaman / etc. secepat mungkin. Memiliki dua tabel untuk setiap modul (misalnya
News
danNews_translations
) adalah suatu pilihan tetapi rasanya banyak pekerjaan untuk mendapatkan sistem yang baik. Salah satu hal yang saya buat berdasarkan padadata versioning
sistem yang saya tulis: ada satu nama tabel databaseTranslations
, tabel ini memiliki kombinasi uniklanguage
,tablename
danprimarykey
. Misalnya: en_En / Berita / 1 (Mengacu pada versi Bahasa Inggris dari item Berita dengan ID = 1). Tetapi ada 2 kerugian besar untuk metode ini: pertama-tama tabel ini cenderung menjadi cukup panjang dengan banyak data dalam database dan yang kedua adalah pekerjaan yang berat untuk menggunakan pengaturan ini untuk mencari tabel. Misalnya mencari seong SEO dari item akan menjadi pencarian teks lengkap, yang cukup bodoh. Tetapi di sisi lain: ini adalah cara cepat untuk membuat konten yang dapat diterjemahkan di setiap tabel dengan sangat cepat, tapi saya tidak percaya pro ini melebihi con. - Pekerjaan Front-end : Front-end juga membutuhkan pemikiran. Tentu saja kami akan menyimpan bahasa yang tersedia dalam database dan (de) aktifkan yang kami butuhkan. Dengan cara ini skrip dapat menghasilkan dropdown untuk memilih bahasa dan back-end dapat memutuskan secara otomatis terjemahan apa yang dapat dibuat menggunakan CMS. Bahasa yang dipilih (misalnya en_EN) kemudian akan digunakan ketika mendapatkan file bahasa untuk tampilan atau untuk mendapatkan terjemahan yang tepat untuk item konten di situs web.
Jadi, itulah mereka. Ide saya sejauh ini. Mereka bahkan tidak menyertakan opsi pelokalan untuk tanggal dll, tetapi karena server saya mendukung PHP5.3.2 + pilihan terbaik adalah dengan menggunakan ekstensi intl seperti yang dijelaskan di sini: http://devzone.zend.com/1500/internationalization-in -php-53 / - tapi ini akan berguna di stadium pengembangan selanjutnya. Untuk saat ini masalah utamanya adalah bagaimana mendapatkan praktik terbaik penerjemahan konten di situs web.
Selain semua yang saya jelaskan di sini, saya masih memiliki hal lain yang belum saya putuskan, sepertinya pertanyaan sederhana, tetapi sebenarnya itu membuat saya sakit kepala:
Terjemahan URL? Haruskah kita melakukan ini atau tidak? dan dengan cara apa?
Jadi .. jika saya memiliki url ini: http://www.domain.com/about-us
dan bahasa Inggris adalah bahasa default saya. Haruskah URL ini diterjemahkan http://www.domain.com/over-ons
ketika saya memilih bahasa Belanda sebagai bahasa saya? Atau haruskah kita menempuh jalan yang mudah dan cukup mengubah konten halaman yang terlihat di /about
. Hal terakhir sepertinya bukan pilihan yang valid karena itu akan menghasilkan beberapa versi dari URL yang sama, pengindeksan konten ini akan gagal dengan cara yang benar.
Pilihan lain adalah menggunakan http://www.domain.com/nl/about-us
. Ini menghasilkan setidaknya URL unik untuk setiap konten. Juga ini akan lebih mudah untuk pergi ke bahasa lain, misalnya http://www.domain.com/en/about-us
dan URL yang disediakan lebih mudah dipahami untuk Google dan pengunjung Manusia. Dengan menggunakan opsi ini, apa yang kita lakukan dengan bahasa default? Haruskah bahasa default menghapus bahasa yang dipilih secara default? Jadi mengalihkan http://www.domain.com/en/about-us
ke http://www.domain.com/about-us
... Di mata saya ini adalah solusi terbaik, karena ketika CMS diatur hanya untuk satu bahasa tidak perlu memiliki identifikasi bahasa ini di URL.
Dan opsi ketiga adalah kombinasi dari kedua opsi: menggunakan "bahasa-identifikasi-kurang" -URL ( http://www.domain.com/about-us
) untuk bahasa utama. Dan gunakan URL dengan slug SEO yang diterjemahkan untuk bahasa lain: http://www.domain.com/nl/over-ons
&http://www.domain.com/de/uber-uns
Saya harap pertanyaan saya membuat kepala Anda retak, mereka retak saya pasti! Memang sudah membantu saya untuk menyelesaikan masalah sebagai pertanyaan di sini. Memberi saya kemungkinan untuk meninjau metode yang saya gunakan sebelumnya dan ide yang saya miliki untuk CMS mendatang.
Saya ingin mengucapkan terima kasih sudah meluangkan waktu untuk membaca teks ini!
// Edit #1
:
Saya lupa menyebutkan: fungsi __ () adalah alias untuk menerjemahkan string yang diberikan. Dalam metode ini jelas harus ada semacam metode mundur di mana teks default dimuat ketika belum ada terjemahan yang tersedia. Jika terjemahannya hilang maka harus dimasukkan atau file terjemahan harus dibuat ulang.