В этой статье речь пойдет о возможностях, которые предоставляет 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
, можно будет загружать нужные файлы.
Кстати, убедитесь, что кодировка файлов с переводами совпадает с кодировкой сайта.
Удачи!