plugin)) { return tmgmt_translator_plugin_controller($this->plugin); } return FALSE; } /** * Returns the supported target languages for this translator. * * @return array * An array of supported target languages in ISO format. */ public function getSupportedTargetLanguages($source_language) { if ($controller = $this->getController()) { if (isset($this->pluginInfo['cache languages']) && empty($this->pluginInfo['cache languages'])) { // This plugin doesn't support language caching. return $controller->getSupportedTargetLanguages($this, $source_language); } else { // Retrieve the supported languages from the cache. if (empty($this->languageCache) && $cache = cache_get('languages:' . $this->name, 'cache_tmgmt')) { $this->languageCache = $cache->data; } // Even if we successfully queried the cache it might not have an entry // for our source language yet. if (!isset($this->languageCache[$source_language])) { $this->languageCache[$source_language] = $controller->getSupportedTargetLanguages($this, $source_language); $this->languageCacheOutdated = TRUE; } } return $this->languageCache[$source_language]; } } /** * Gets the supported language pairs for this translator. * * @return array * List of language pairs where a pair is an associative array of * source_language and target_language. * Example: * array( * array('source_language' => 'en-US', 'target_language' => 'de-DE'), * array('source_language' => 'en-US', 'target_language' => 'de-CH'), * ) */ public function getSupportedLanguagePairs() { if ($controller = $this->getController()) { if (isset($this->pluginInfo['cache languages']) && empty($this->pluginInfo['cache languages'])) { // This plugin doesn't support language caching. return $controller->getSupportedLanguagePairs($this); } else { // Retrieve the supported languages from the cache. if (empty($this->languagePairsCache) && $cache = cache_get('language_pairs:' . $this->name, 'cache_tmgmt')) { $this->languagePairsCache = $cache->data; } // Even if we successfully queried the cache data might not be yet // available. if (empty($this->languagePairsCache)) { $this->languagePairsCache = $controller->getSupportedLanguagePairs($this); $this->languageCacheOutdated = TRUE; } } return $this->languagePairsCache; } } /** * Clears the language cache for this translator. */ public function clearLanguageCache() { cache_clear_all('languages:' . $this->name, 'cache_tmgmt'); cache_clear_all('language_pairs:' . $this->name, 'cache_tmgmt'); } /** * Check whether this translator can handle a particular translation job. * * @param $job * The TMGMTJob entity that should be translated. * * @return boolean * TRUE if the job can be processed and translated, FALSE otherwise. */ public function canTranslate(TMGMTJob $job) { if ($controller = $this->getController()) { return $controller->canTranslate($this, $job); } return FALSE; } /** * Checks whether a translator is available. * * @return boolean * TRUE if the translator plugin is available, FALSE otherwise. */ public function isAvailable() { if ($controller = $this->getController()) { return $controller->isAvailable($this); } return FALSE; } /** * Returns if the plugin has any settings for this job. */ public function hasCheckoutSettings(TMGMTJob $job) { if ($controller = $this->getController()) { return $controller->hasCheckoutSettings($job); } return FALSE; } /** * @todo Remove this once http://drupal.org/node/1420364 is done. */ public function getNotAvailableReason() { if ($controller = $this->getController()) { return $controller->getNotAvailableReason($this); } return FALSE; } /** * @todo Remove this once http://drupal.org/node/1420364 is done. */ public function getNotCanTranslateReason(TMGMTJob $job) { if ($controller = $this->getController()) { return $controller->getNotCanTranslateReason($job); } return FALSE; } /** * Retrieves a setting value from the translator settings. Pulls the default * values (if defined) from the plugin controller. * * @param $name * The name of the setting. * * @return * The setting value or $default if the setting value is not set. Returns * NULL if the setting does not exist at all. */ public function getSetting($name) { if (isset($this->settings[$name])) { return $this->settings[$name]; } elseif ($controller = $this->getController()) { $defaults = $controller->defaultSettings(); if (isset($defaults[$name])) { return $defaults[$name]; } } } /** * Maps local language to remote language. * * @param $language * Local language code. * * @return string * Remote language code. * * @ingroup tmgmt_remote_languages_mapping */ public function mapToRemoteLanguage($language) { return $this->getController()->mapToRemoteLanguage($this, $language); } /** * Maps remote language to local language. * * @param $language * Remote language code. * * @return string * Local language code. * * @ingroup tmgmt_remote_languages_mapping */ public function mapToLocalLanguage($language) { return $this->getController()->mapToLocalLanguage($this, $language); } /** * Updates the language cache if it has changed. */ public function __destruct() { if ($controller = $this->getController()) { $info = $controller->pluginInfo(); if (!isset($info['language cache']) || !empty($info['language cache']) && !empty($this->languageCacheOutdated)) { cache_set('languages:' . $this->name, $this->languageCache, 'cache_tmgmt'); cache_set('language_pairs:' . $this->name, $this->languagePairsCache, 'cache_tmgmt'); } } } }