TranslatorPluginBase.php in Translation Management Tool 8
File
src/TranslatorPluginBase.php
View source
<?php
namespace Drupal\tmgmt;
use Drupal\Core\Plugin\PluginBase;
use Drupal\tmgmt\Translator\AvailableResult;
use Drupal\tmgmt\Translator\TranslatableResult;
abstract class TranslatorPluginBase extends PluginBase implements TranslatorPluginInterface {
protected $escapeStart = '';
protected $escapeEnd = '';
public function checkAvailable(TranslatorInterface $translator) {
return AvailableResult::yes();
}
public function checkTranslatable(TranslatorInterface $translator, JobInterface $job) {
if ($this
->checkAvailable($translator)
->getSuccess() && array_key_exists($job
->getTargetLangcode(), $translator
->getSupportedTargetLanguages($job
->getSourceLangcode()))) {
return TranslatableResult::yes();
}
return TranslatableResult::no(t('@translator can not translate from @source to @target.', array(
'@translator' => $translator
->label(),
'@source' => $job
->getSourceLanguage()
->getName(),
'@target' => $job
->getTargetLanguage()
->getName(),
)));
}
public function abortTranslation(JobInterface $job) {
$job
->aborted();
return TRUE;
}
public function getDefaultRemoteLanguagesMappings() {
return array();
}
public function getSupportedRemoteLanguages(TranslatorInterface $translator) {
return array();
}
public function getSupportedTargetLanguages(TranslatorInterface $translator, $source_language) {
$languages = tmgmt_available_languages();
return array_combine(array_keys($languages), array_keys($languages));
}
public function getSupportedLanguagePairs(TranslatorInterface $translator) {
$language_pairs = array();
foreach ($this
->getSupportedRemoteLanguages($translator) as $source_language) {
foreach ($this
->getSupportedTargetLanguages($translator, $source_language) as $target_language) {
$language_pairs[] = array(
'source_language' => $source_language,
'target_language' => $target_language,
);
}
}
return $language_pairs;
}
public function defaultSettings() {
$defaults = array();
if (isset($this->pluginDefinition['default_settings'])) {
return array_merge($defaults, $this->pluginDefinition['default_settings']);
}
return $defaults;
}
public function hasCheckoutSettings(JobInterface $job) {
return TRUE;
}
public function acceptedDataItem(JobItemInterface $job_item, array $key) {
return TRUE;
}
public function escapeText(array $data_item) {
if (empty($data_item['#escape'])) {
return $data_item['#text'];
}
$text = $data_item['#text'];
$escape = $data_item['#escape'];
krsort($escape, SORT_NUMERIC);
foreach ($escape as $position => $info) {
$text = substr_replace($text, $this
->getEscapedString($info['string']), $position, strlen($info['string']));
}
return $text;
}
protected function getEscapedString($string) {
return $this->escapeStart . $string . $this->escapeEnd;
}
public function unescapeText($text) {
return preg_replace('/' . preg_quote($this->escapeStart, '/') . '(.+)' . preg_quote($this->escapeEnd, '/') . '/U', '$1', $text);
}
}