Sử dụng nhiều ngôn ngữ trong 1 trang web với Cakephp3
Các bước thực hiện:
Bước 1: Trong file app.php ta đặt giá trị cho defaultLocal như sau:
- ‘App’ => [
…
‘defaultLocale’ => env(‘APP_DEFAULT_LOCALE’, ‘vn_VN’),
],
Bước 2: Trong file AppController.php ta sẽ đặt ngôn ngữ với Session cho trang web với đoạn code sau:
- use Cake\I18n\I18n;//function change language of website
public function changeLanguage($language = null){
if($language != null && in_array($language, [‘vn_VN’, ‘ja_JP’])){
$this->request->getSession()->write(‘Config.language’, $language);
return $this->redirect($this->referer());
} else {
$this->request->getSession()->write(‘Config.language’, I18n::locale());
return $this->redirect($this->referer());
}
} - //function set language for web
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
if($this->request->getSession()->check(‘Config.language’)){
I18n::setLocale($this->request->getSession()->read(‘Config.language’));
} else {
$this->request->getSession()->write(‘Config.language’, I18n::locale());
}
}
Bước 3: Tạo link để trang web lưu lại ngôn ngữ khi submit để gọi đến function changeLanguage () đã tạo ở file AppController.php ở bước 2 :
<a href =” <?= $this->Url->build([‘controller’ => ‘App’, ‘action’ => ‘changeLanguage’, ‘vn_VN’]); ?>” > VietNamese </a>
<a href =” <?= $this->Url->build([‘controller’ => ‘App’, ‘action’ => ‘changeLanguage’, ‘ja_JP’]); ?>” > Japanses </a>
Bước 4: Tạo file trong folder để lưu bản dịch cho trang web theo đường dẫn src/Locale/ja_JP/default.po (ở đây đang ví dụ sang ngôn ngữ dịch là Japanses). Trong file default.po ta viết dòng lệnh:
msgid “Quản lý người dùng”
msgstr “担当者管理”
Trong đó: msgid là key sử dụng trong view của trang web, msgstr là ngôn ngữ dịch. Tương tự như những phần khác ta viết các mục tương tự.
Bước 5: Ở phần view của trang web ta sử dụng đoạn code sau để có thể hiển thị được ngôn ngữ khi dịch:
<?= __(‘Quản lý người dùng’) ?>.
Lúc này khi ra trang web ta click vào link ‘Japanses’ đã tạo ở bước 3 thì đoạn văn bản ‘Quản lý người dùng’ sẽ chuyển sang tiếng Nhật là ‘担当者管理’.
Như vậy là đã hoàn thành việc chuyển đổi nhiều ngôn ngữ với Cakephp3.