AVE.CMS v3.28
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.1 KiB

8 years ago
<?php
abstract class Big_Text_Translate {
/**
* @var int - максимальное число символов для отправки переводчику
*/
public static $symbolLimit = 2000;
/**
* @var string- символы, по которым текст делится на предложения
*/
public static $sentensesDelimiter = '.';
/**
* @static
* @param $text - исходный текст для разбиения на предложения
* @return array - массив предложений, еще не окончательный
*/
protected static function toSentenses ($text) {
$sentArray = explode(self::$sentensesDelimiter, $text);
return $sentArray;
}
/**
* Разделение текста на массив больших кусков
* @param string $text - большой текстовый фрагмент, требующий разделения на куски
* @return array - массив элементов, каждый из которых не превышает предельного числа символов
*/
public static function toBigPieces ($text) {
$sentArray = self::toSentenses($text);
$i = 0;
$bigPiecesArray[0] = '';
for ($k = 0; $k < count($sentArray); $k++) {
$bigPiecesArray[$i] .= $sentArray[$k].self::$sentensesDelimiter;
if (strlen($bigPiecesArray[$i]) > self::$symbolLimit){
$i++;
$bigPiecesArray[$i] = '';
}
}
return $bigPiecesArray;
}
/**
* Склеивание текста
* @param array $bigPiecesArray - массив переведенных кусков текста, в произвольном порядке,
* но ключи должна соответствовать исходному тексту
* @return string - "склеенный" текст
*/
public static function fromBigPieces (array $bigPiecesArray) {
ksort($bigPiecesArray);
return implode($bigPiecesArray);
}
}