В некоторых проекта есть необходимость сделать мультиязычную поддержку сайта. Сегодня мы рассмотрим как это можно реализовать в фреймворке Kohana 3.3.
Изначально в стандартную сборку входит класс интернационализации i18n, отвечающий за мультиязычность.
Итак, для начала нужно в файле bootstrap.php установить язык по умолчанию, сделаем таким языком - русский:
I18n::lang('ru');
Дальше создадим в каталоге application/i18n/ файл ru.php, в нем будет хранится перевод статического текста для русского языка:
<?php defined('SYSPATH') or die('No direct script access.'); return array( 'How much: :one + :two = ?' => 'Сколько будет :one + :two = ?', 'Hello word' => 'Привет мир!', );
И создадим еще файл application/i18n/en.php для перевода текста на английский язык, он будет вторым языком на нашем сайте:
<?php defined('SYSPATH') or die('No direct script access.'); return array( 'Hello word' => 'Hello Word!', );
Дальше нужно в основном контреллере, от которого наследуются остальные, написать код для переключения языка. Значения будут браться сначала из GET запроса, а поcле из Cookie. Если и в Cookie будет пусто, то установится язык по умолчанию:
<?php defined('SYSPATH') or die('No direct script access.'); abstract class Controller_Base extends Controller_Template { public $template = "main"; public function before() { parent::before(); $this->template->content = ''; // если был передан параметр language - устанавливаем этот язык if (Arr::get($_GET, 'language', NULL) != NULL) { I18n::lang(strip_tags(Arr::get($_GET, 'language'))); // меняем текущий язык Cookie::set('language', strip_tags(Arr::get($_GET, 'language'))); // и записываем его в cookie } // если ничего не передали, то пробуем подгрузить язык из cookie elseif(Cookie::get('language', NULL) != NULL){ I18n::lang(Cookie::get('language')); // устанавливаем язык из cookie } // если и в cookie ничего нет, то установится язык по умолчанию, который мы записали в bootstrap.php } }
Теперь в views сделаем вывод переключателя языков и выведем немного текста, для проверки на разных языках: