В этом разделе выложены готовые решения
Аватара пользователя
От TurboCMS
#26
Данная доработка позволяет быстро создать мультиязычность для сайта на Turbo CMS. Перевод можно делать как вручную так и автоматически.

Установка решения на примере Turbo Shop и дефолтного шаблона.

Демо: http://lang.turbo-cms.com

Файлы для замены Turbo Shop скачать

Установка решения

1. Скачать архив ссылка

2. Залить папку sli на сервер в корень сайта.

3. Добавить в файл api/Turbo.php 10 строка
Код: Выделить всё
include_once($_SERVER['DOCUMENT_ROOT'].'/sli/protected/sli.php');
перед
Код: Выделить всё
class Turbo
4. В файле api/Notify.php после 79 строки
Код: Выделить всё
$subject = $this->design->get_var('subject');
добавляем
Код: Выделить всё
/* Langs */
$lang = SLITranslate::getCurrentLanguage();
if(!empty($lang))
{
  $email_template = SLITranslate::t($email_template, $lang);
  $subject = SLITranslate::t($subject, $lang);
}
/* Langs */

в этом же файле повторим действие после 180 строки
Код: Выделить всё
$subject = $this->design->get_var('subject');
добавляем
Код: Выделить всё
/* Langs */
$lang = SLITranslate::getCurrentLanguage();
if(!empty($lang))
{
  $email_template = SLITranslate::t($email_template, $lang);
  $subject = SLITranslate::t($subject, $lang);
}
/* Langs */	
5. В файле api/Config.php после 56 строки
Код: Выделить всё
$this->vars['root_url'] .= '/'.$subdir;
добавляем
Код: Выделить всё
$lang = SLITranslate::getCurrentLanguage();
if(!empty($lang))
{
  $this->vars['root_url'] .= '/'.$lang;
}
6. В файле view/View.php после 61 строки
Код: Выделить всё
$this->currency = reset($this->currencies);
добавляем
Код: Выделить всё
/* Langs */
$this->langs = SLIApi::getLanguagesChangeList();
$this->design->assign('langs',	$this->langs);
$lang = SLITranslate::getCurrentLanguage();
$this->design->assign('lang',	$lang);
/* Langs */
7. В файле ajax/search_products.php в 16 строку после
Код: Выделить всё
$products = $turbo->db->results();
добавляем
Код: Выделить всё
$lang = SLITranslate::getCurrentLanguage();
в этом же файле после 26 строки после
Код: Выделить всё
$suggestion->value = $product->name;
добавляем
Код: Выделить всё
if(!empty($lang))
{
  $suggestion->value = SLITranslate::t($product->name, $lang);
}
8. В файле ajax/cart.php после 17 строки
Код: Выделить всё
$result = $turbo->design->fetch('cart_informer.tpl');
добавляем
Код: Выделить всё
/* Langs */
$lang = SLITranslate::getCurrentLanguage();
if(!empty($lang))
{
  $result = SLITranslate::t($result, $lang);
}
/* Langs */

9. В файле /design/ваш_шаблон/html/index.tpl перед </head> добавить
Код: Выделить всё
<link href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css" rel="stylesheet">
10. В файле /design/ваш_шаблон/html/index.tpl после 116 строки
Код: Выделить всё
<ul class="nav navbar-nav navbar-right">
добавляем и заменяем в коде ваш-сайт.com на название вашего сайта
Код: Выделить всё
<li class="nav-item dropdown">
	{if $langs['alias'] == $lang}
		<a class="nav-link dropdown-toggle" href="{$config->root_url}" id="dropdown09" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="flag-icon flag-icon-ru"></span> ru</a>
	{/if}
	{foreach $langs as $val}
		{if $val['alias'] == $lang}
			<a class="nav-link dropdown-toggle" href="{$config->root_url}" id="dropdown09" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="flag-icon flag-icon-{if $val['alias']=='en'}us{else}{$val['alias']}{/if}"></span> {$val['alias']}</a>
		{/if}
	{/foreach}
	<div class="dropdown-menu" aria-labelledby="dropdown09">
		{foreach $langs as $val}
			{if $val['isActive'] != 0 || !isset($val['isActive'])}
				<a % href="http://ваш-сайт.com/{if $val['alias']=='ru'}{else}{$val['alias']}/{/if}" class="dropdown-item"><span class="flag-icon flag-icon-{if $val['alias']=='en'}us{else}{$val['alias']}{/if}"> </span>  {$val['title']}</a>
			{/if}
		{/foreach}
	</div>
</li>
11. Добавить в файл .htaccess, который находится в корневой директории сайта, после RewriteEngine on строки для нужных языков
Код: Выделить всё
RewriteRule	^en/(.*)?$  $1 [L]
RewriteRule	^ua/(.*)?$  $1 [L]
12. Выставить права 0777 на папку protected/data и на все внутренние директории.

13. Открыть файл protected/config/config.php и прописать данные коннекта к БД MySQL.

14. Зайти в админку по адресу htt://адресСайта/sli/index.php

15. Ввести свой Email и пароль.

16. Войти под указанными данными.

Начало работы

1. Заходим в админку, переходим на страницу с добавлением языков.

2. Нажимаем кнопку добавить. Заполняем поля. Алиас - это краткое название для языка (обычно ua, en, ru, cn и тд.), которое будет отображатся в адресной строке при выборе языка.

3. Нажимаем кнопку сохранить.

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

5. Кэширование использует Memcache, который должен быть установлен на Вашем сервере. Если расширение отсутствует, игнорируем данную возможность ускорить работу переводчика, либо устанавливаем расширение.

6. Показывать время отработки программы. Эта настройка отобразит время, за которое система парсит и переводит страницу, на которой Вы находитесь.

7. Просканировать сайт.

8. Перевести данные.

Настройка парсера

Заполняем поля настроек парсера:

Игнорировать адреса
(каждый адрес с новой строки)
Код: Выделить всё
#/turbo/.*
#/ajax/.*
Игнорировать страницы с текстом
(каждый адрес с новой строки)
Код: Выделить всё
<title>PHP Error</title>
syntax error
Division by zero in
Игнорировать теги
(через запятую)
Код: Выделить всё
href, script
Переводить значение атрибутов
(через запятую)
Код: Выделить всё
value, placeholder, data-notice, title, alt, content,  data-content, options
остальные поля оставляем пустыми

Сканер сайта

Сканер - это модуль, с помощью которого Вы можете просканировать свой сайт на наличие данных на перевод.

Сканирование "по URL". Для того, чтобы просканировать весь сайт, в поле "адрес" ставим "/". Таким образом мы начнем сканировать весь сайт с главной страницы. Сканер пройдется по всем страницам и сохранит (исходя из настроек парсера) данные, которые необходимо перевести.

Сканирование "Sitemap". В поле "адрес" прописываем путь к файлу ваш-сайт.com/sitemap.xml, и парсер пройдется по всем ссылкам файла.

Сканировать весь сайт имеет смысл только при первом подключении системы. Все данные заносятся в базу автоматически при первом посещении страницы.

Переменные
Переменные - модуль сайта, который позволяет создавать жесткие замены контента для каждого используемого языка.
Например, у нас на сайте есть картинка с русским текстом, и мы хотим, чтобы в английской версии отображалась другая картинка с английским текстом. Для этого в данном разделе создаем переменную.
В поле "оригинал" пишем адрес картинки "/ru-pic.png". В поле "английский" пишем адрес к картинке для английской версии сайта "/en-pic.png". Теперь при смене языка на английский все вхождения "/ru-pic.png" будут заменены на "/en-pic.png".
Таким образом мы можем заменять JavaScript, изменять текст, который не попадает на перевод обычным образом, и заменять статику.