Codeigniter. Русификация, мультиязычность, мультидомены. UTF-8. Баги и траблы.

Codeigniter. Русификация, мультиязычность, мультидомены. UTF-8. Баги и траблы.

1. Русификация Codeigniter

Там выше я написал, что русификация выполняется в ci просто. Это не так. Она выполняется очень просто.

1.1 Config

Находим в конфигурационном файле S:\system\application\config\config.php строку
$config['language'] = "english";
и заменяем на
$config['language'] = "russian";

1.2 Файлы языковой поддержки

Файлы языковой поддержки ледат в директории S:\system\language.
Копируем директорию S:\system\language\english в S:\system\language\russian
Далее открываем требуемый языковой файл. Его имя соответствует имени класса/библиотеки. Для русификации сообщений валидации необходимо открыть S:\system\language\russian\validation_lang.php и перевести.

$lang['required'] = "The %s field is required.";
$lang['valid_email'] = "The %s field must contain a valid email address.";

$lang['required'] = 'Поле "%s" обязательно к заполнению';
$lang['valid_email'] = "Неправильный e-mail (%s) ";

Сохраняем все и наслаждаемся.

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

1.3 Проблемы с UTF-8

Наверное этот раздел вообще лишний и к CI отношения не имеет. Но слишком часто задается один и тот же вопрос - "откуда кракозябры вместо русского текста в PHP+MySQL" . Чтобы "кракозябр" не было. необходимо:

a) настроить БД на работу с UNICODE. Текстовые поля должны буть установлены в utf8_general_ci
b) перед началом работы с БД из Codeginiter должна быть выполнена команда:
$this-> db-> query('SET NAMES utf8');
c) все файлы содержащие кириллицу нужно сохранить в кодировке UTF-8. Если в редакторе есть несколько вариантов UTF-8 или опция сохранения "UTF-8 without BOM", необходимо выбрать именно этот вариант.
d) перед отправкой данных пользователю нужно отправить заголовок принудительно устанавливающий кодировку.
header("Content-Type: text/html; charset=UTF-8");
e) задаем кодировку в выходном HTML:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

2. Мультиязычные и мультидоменные сайты на CodeIgniter

Самый простой способ использования одного движка для поддержки мультидоменов заключается в переключении префикса таблиц базы данных в зависимости от домена. Для этого все домены объявляются алиасом основного домена. Например имеется основной сайт mysite.ru и его англоязычная версия eng.mysite.ru все таблицы основного сайта имеют имена типа "rus_****", все таблицы англоязычного сайта имена типа "eng_****". Для того чтобы CMS производила переключение префиксов в зависимости от имени домена в конфигурационном файле /system/application/config/database.php в конце нужно добавить следующий код:

if ( $_SERVER["HTTP_HOST"]==='eng.ИМЯ_ОСНОВНОГО_ДОМЕНА')
$db['default']['dbprefix'] = "eng_"; else
$db['default']['dbprefix'] = "rus_";

Естественно способ имеет свои недостатки. Напрмер если есть общие для обоих сайтов данные (например таблица зарегистрированны пользователей) придется либо дублировать таблицы, либо придумывать другой подход.

 

 

03 September 2008 ключевые слова:
Ссылки на статьи по теме: "
Обсуждение в блоге-форуме тем: ""