PHP framework CodeIgniter. Создание многоязычных сайтов

Владимир | | CodeIgniter, PHP.

Локализация сайта
В этой статье речь пойдет о возможностях, которые предоставляет CodeIgniter для поддержки многоязычных сайтов.

Разберемся, как реализована поддержка языков.

Идея очень простая. Вы определяете, какие фразы должны быть переведены и создаете файлы с переводами.

После этого, даете возможность пользователю выбрать язык и загружаете строки из файлов выбранного языка.

Таким образом, при формировании страниц, текст должен загружаться из файлов с переводами, а не прописываться в шаблонах.

Примечание. В этой статье речь идет о локализации фрэймворка и сайта, а не контента. Т.к. контент (текстовый) обычно находится в базе данных, то для размещения переводов вам, скорее всего, придется создать дополнительные таблицы и изменять запросы в зависимости от выбранного языка.

Создание файлов переводов

Т.к. CodeIgniter это PHP фрэймворк, то и файлы с переводами представляют собой обычные PHP скрипты, в которых объявлены массивы строк. Имена этих файлов должны обязательно содержать окончание «_lang.php».

Формат строк должен быть такой:

$lang['ключ'] = "Текст, который будет показан на сайте";

с помощью «ключа» осуществляется выбор нужной строки.

Названия ключей желательно делать осмысленными, иначе можно очень легко запутаться.

Размещение файлов

CodeIgniter имеет две папки, предназначенных для размещения файлов переводов.

1) \system\language\ — общая папка;
2) \system\application\language\ — это папка с переводами конкретного сайта.

Разница, думаю, очевидна. Если у вас несколько сайтов используют одни и те же системные файлы, и файлы переводов должны быть доступны для всех сайтов, то нужно использовать первую папку. А если каждый сайт использует свои собственные файлы переводов, то размещать их лучше во второй папке.

При загрузке переводов поиск осуществляется в следующем порядке. Сначала – в папке приложения (\system\application\language\), а затем – в общей папке (\system\language\).

Все файлы переводов должны быть сгруппированы в папки, название которых, совпадает с названием языка.

Например, мы создали два файла переводов для русского и английского языка, в которых разместили текст главной страницы сайта.

Что-то вроде:

<?php
$lang['title'] = "Hello";
?>

и

<?php
$lang['title'] = "Привет";
?>

Оба файла будут иметь одно и тоже имя main_lang.php, но размещены будут в разных папках:
\language\russian\main_lang.php – русский вариант;
\language\english\main_lang.php – английский вариант.

Загрузка файлов переводов

Теперь можно загружать файлы. Для этого используется метод load() объекта lang.

$this->lang->load('main', 'english');

В первом параметре мы указываем имя файла (без окончания «_lang.php»), а во втором – названия языка (это название должно совпадать с именем папки, в которой находится файл перевода).

Кроме того, можно настроить CodeIgniter так, чтобы он автоматически загружал файлы выбранного языка. Для этого в файле \application\config\autoload.php находим переменную $autoload['language'] и добавляем нужный язык.

$autoload['language'] = array('russian');

Для получения нужной строки используется метод line

$pageData['t'] = $this->lang->line('title');

которому в первом параметре передается ключ строки.

Собираем все вместе

Допустим, посетитель выбрал язык, а вы сохранили его выбор в сессии.

После этого можно в конструкторе контроллера загрузить файлы с переводами для выбранного языка, а потом использовать их при создании страниц.

class Welcome extends Controller {
	function Welcome()
	{
		parent::Controller();
		$userLang = $this->session->userdata('userlang');
		$this->lang->load('main', $userLang);
	}
	function index()
	{
		$pageData['t'] = $this->lang->line('title');
		$this->load->view('welcome_message', $pageData);
	}
}

Как видите, в конструкторе мы загрузили выбранный язык (строки 5, 6), а в методе index (формирует главную страницу сайта) – получили текстовую строку с ключом 'title', которую теперь можно использовать для формирования страницы.

Примечание. Это максимально упрощенный пример. В реальной ситуации вы должны будете, как минимум проверить установлен ли параметр 'userlang' и если нет – выбрать язык по-умолчанию.

Локализация стандартных библиотек

В состав CodeIgniter входит ряд библиотек, которые тоже полезно локализировать. Особенных усилий тут прикладывать не придется, т.к. файлы переводов можно скачать здесь.

После того, как скачаете архив, и распакуете его в одну из папок language, можно будет загружать нужные файлы.

Кстати, убедитесь, что кодировка файлов с переводами совпадает с кодировкой сайта.

Удачи!