Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah CakePHP mengendalikan pelbagai bahasa?

Bagaimanakah CakePHP mengendalikan pelbagai bahasa?

WBOY
WBOYasal
2023-06-06 08:03:241110semak imbas

CakePHP ialah rangka kerja pembangunan PHP yang popular yang membantu pembangun membina aplikasi web berkualiti tinggi dengan cepat. Dengan perkembangan globalisasi, semakin banyak aplikasi perlu menyokong berbilang bahasa, dan CakePHP juga menyediakan sokongan yang sepadan. Artikel ini akan memperkenalkan cara CakePHP mengendalikan berbilang bahasa.

1. Sokongan berbilang bahasa

Sokongan berbilang bahasa ialah ciri penting CakePHP. Bermula dengan versi 2.0, CakePHP menyokong format fail gettext, iaitu fail teks ringkas yang mengandungi semua rentetan yang perlu diterjemahkan. Dalam CakePHP, kita boleh menggunakan perpustakaan kelas I18n bersepadu untuk memproses fail gettext.

2. Pengantarabangsaan dan penyetempatan (i18n dan l10n)

Dalam pemprosesan berbilang bahasa, adalah perlu untuk memahami dua konsep pengantarabangsaan dan penyetempatan.

i18n secara amnya merujuk kepada pengantarabangsaan, yang bermaksud menyediakan aplikasi untuk menyokong lebih daripada satu tempat atau bahasa, menjadikannya lebih mudah untuk menyesuaikan aplikasi kepada pengguna dan pasaran sasaran. Dalam CakePHP, kita boleh menggunakan perpustakaan kelas I18n untuk melaksanakan pengantarabangsaan.

l10n biasanya merujuk kepada penyetempatan, yang bermaksud menyesuaikan aplikasi kepada bahasa atau tempat tertentu. Di samping itu, aplikasi juga perlu menggunakan tarikh, masa, format mata wang yang sepadan, dsb. CakePHP boleh menyokong penyetempatan dengan baik, membantu pembangun berkembang ke lebih banyak bahasa dan wilayah.

3. Bagaimana untuk menjana fail terjemahan?

Untuk menggunakan sokongan berbilang bahasa, anda perlu menjana fail terjemahan dalam format fail gettext dahulu, dan kemudian meletakkan fail terjemahan ini ke dalam direktori yang sepadan. Dalam CakePHP, anda boleh menggunakan perintah ekstrak kek i18n untuk menjana fail templat lalai, iaitu fail .pot.

$ ekstrak bin/cake i18n

Selepas melaksanakan arahan di atas, CakePHP akan menyemak semua fail CakePHP dan fail aplikasi, mengekstrak rentetan di dalamnya dan memutuskan aksara yang perlu diterjemahkan. Kemudian jana fail .pot, yang akan digunakan sebagai fail templat untuk terjemahan dan disimpan dalam direktori localepot.

4. Bagaimana hendak mengimport fail terjemahan?

Tukar fail .pot yang dijana kepada fail PO khusus bahasa untuk memulakan terjemahan. Selepas melengkapkan terjemahan, simpan fail PO ke direktori bahasa tertentu (seperti localezh_CNLC_MESSAGESdefault.po Pada masa yang sama, kami juga perlu menyusun semua fail PO yang diterjemahkan ke dalam fail MO dan meletakkannya dalam subdirektori LC_MESSAGES bahasa yang sepadan). direktori.

Dalam CakePHP, anda boleh menggunakan perpustakaan kelas I18n untuk memuatkan fail terjemahan, seperti yang ditunjukkan di bawah:

//引入语言文件$file = ROOT . DS . 'locale' . DS . $language . DS . 'LC_MESSAGES' . DS . $domain . '.po';
$locale = new Locale();$locale->loadMo($file);

Dalam kod di atas, nilai $language dan $domain ialah terjemahan fail yang ingin digunakan oleh program ini. Panggil kaedah $locale->loadMo() untuk memuatkan fail MO untuk bahasa dan domain tertentu Selepas pemuatan selesai, kita boleh mula menggunakan fail terjemahan.

5. Bagaimana hendak menggunakan fail terjemahan?

Dalam CakePHP, kita boleh menggunakan fungsi __() untuk mendapatkan rentetan yang diterjemahkan. Apabila menggunakan fungsi __(), jika rentetan tidak diterjemahkan dalam fail bahasa semasa, rentetan asal akan dikembalikan.

Sebagai contoh, kita boleh menukar rentetan dalam fail paparan supaya kelihatan seperti ini:

<?php echo __('Welcome to my website!'); ?>

Jika kita mahu menambah terjemahan baharu yang menterjemahkannya kepada "Selamat datang ke tapak web saya!":

  • Janakan fail .po baharu dan terjemahkannya
  • Kompilasikan fail .po yang telah diterjemahkan ke dalam fail .mo
  • Letakkan fail .mo ke dalam program dalam direktori bahasa di mana ia berada, seperti locale/zh_CN/LC_MESSAGES/default.mo

Kemudian, apabila aplikasi menggunakan rentetan, CakePHP akan memuatkan fail terjemahan yang sesuai secara automatik dan mengembalikan rentetan terjemahan .

6. Bagaimana untuk mengubah suai bahasa secara dinamik?

Jika kita perlu menukar bahasa secara dinamik atau lapisan paparan perlu menyokong tetapan penukaran berbilang bahasa, kita perlu menukar tempat secara dinamik. Pembangun boleh menggunakan perpustakaan kelas I18n dan komponen Sesi untuk mencapai ini.

Sebagai contoh, kita boleh menulis kod berikut dalam UsersController:

public function changelang($lang = null) {
    if ($lang) {
        $this->request->getSession()->write('Config.language', $lang);
    }
    return $this->redirect($this->referer());
}

Dalam kod di atas, semak dahulu sama ada $lang kosong Jika tidak, Config.language akan ditetapkan kepada $ lang (diperolehi daripada permintaan pelanggan), jika tidak, bahasa lalai digunakan.

Apabila pengguna log masuk, kita boleh menetapkan tempat semasa berdasarkan tempat yang ditetapkan sebelum ini Kod adalah seperti berikut:

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            //Set language based on user preference
            $this->request->getSession()->write('Config.language', $this->request->data['Users']['language_preference']);
            $this->redirect($this->Auth->redirectUrl());
        } else {
            $this->Flash->error(__('Invalid username or password, try again'));
        }
    }
}

Dalam kod di atas, apabila pengguna berjaya log masuk, $this->request->data'Users' mendapatkan bahasa yang dipilih oleh pengguna dan menyimpannya ke Config.language dalam kod berikut. Dengan cara ini, setiap kali pengguna log masuk, aplikasi akan mengutamakan penggunaan tempat yang disimpan sebelum ini untuk terjemahan.

7. Ringkasan

Dalam artikel ini, kami memperkenalkan kaedah CakePHP untuk mengendalikan berbilang bahasa. Mula-mula, anda perlu menjana fail terjemahan dalam format gettext, dan kemudian letakkan fail ini dalam direktori tertentu. Melalui perpustakaan kelas I18n dan fungsi __(), program boleh memilih fail terjemahan yang sesuai secara automatik dan mengembalikan rentetan terjemahan. Akhir sekali, kami turut membincangkan cara menggunakan komponen Sesi untuk menukar tempat secara dinamik. Di samping itu, kita juga perlu ambil perhatian bahawa pemprosesan berbilang bahasa memerlukan banyak kerja terjemahan Kita harus memberi perhatian kepada membezakan konsep i18n dan l10n, dan menulisnya secara fleksibel untuk memudahkan kerja penyelenggaraan kemudian.

Atas ialah kandungan terperinci Bagaimanakah CakePHP mengendalikan pelbagai bahasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn