При покупке любой редакции “Управление сайтом” вы получаете возможность создать 2 сайта. Производители CMS рассчитывали на то, что для большинства корпоративных сайтов и интернет-магазинов будет жизненно необходимо наличие англоязычного зеркала. Однако это не всегда так, чаще всего второй сайт остается незанятым.
Многоязычность первого типа - это когда языковые сайты располагаются друг относительно друга на одном домене, но в разных папках (например в корневой папке русская версия сайта, а в папке /en/ – зеркало на английском языке); многосайтовость второго типа, когда языковые сайты располагаются на разных доменах или поддоменах. Чаще всего для создания зеркала на английском языке используют первый вариант многосайтовости.
Опишу по пунктам что нужно сделать, чтобы для имеющейся в наличии русской версии вашего корпоративного сайта вы могли быстро создать его английскую копию.
1. Создайте папку /en/ и дайте ей права на запись вебсервера. Можно ее просто создать через панель управления Битрикс.
2. Добавьте новый сайт для английской версии здесь - /bitrix/admin/site_admin.php?lang=ru&set_default=Y
3. Нужно полностью скопировать все файлы и папки, кроме bitrix, .htaccess, .access.php в папку /en/
4. Нужно перевести на английский текст в этих файлах.
5. Далее требуется перевести компоненты
- для компонентов, использующих инфоблоки (это компоненты, имеющие в своем названии iblock, catalog), нужно создать инфоблоки для английского зеркала и привязать их к соответствующим компонентам в англ. версии.
- для ваших компонентов требуется переделать шаблоны вывода, чтобы они использовали специальные файлы с переводами слов, а не выводили слова напрямую. Для всех компонентов, поставляемых с Битрикс это уже сделано разработчиком CMS.
Что нужно сделать, чтобы ваш компонент стал многоязычным?
1. В коде компонента component.php и в шаблонах компонента необходимо заменить вывод русских слов на функцию GetMessage.
Например, если у вас в коде component.php есть такое:
if(!CModule::IncludeModule("iblock"))
{
$this->AbortResultCache();
ShowError("Модуль iblock не установлен");
return;
}
требуется сделать так:
if(!CModule::IncludeModule("iblock"))
{
$this->AbortResultCache();
ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
return;
}
А если у вас в шаблоне есть вывод русских слов например такие:
некий текст
нужно заменить на
=GetMessage("SOME_TEXT")?>
2. Нужно создать файлы переводов.
Для файла component.php эти файлы лежат в папках папка_компонента/lang/ru/ и папка_компонента/lang/en/ .
Смотрите там файл component.php. В нем нужно добавить такую строку:
$MESS ['IBLOCK_MODULE_NOT_INSTALLED'] = "Модуль Информационных блоков не установлен";
$MESS ['IBLOCK_MODULE_NOT_INSTALLED'] = "Iblock module don't installed";
Для шаблона компонента (файл template.php) файлы переводов лежат в папке шаблона компонента в папке lang/ru/ и lang/en/
соответственно, в эти файлы нужно добавить:
$MESS ['SOME_TEXT'] = "Некий текст";
$MESS ['SOME_TEXT'] = "Some text";