implementation = $implementation; return $self; } public function __construct() { global $prefs; switch ($prefs['lang_machine_translate_implementation']) { case 'bing': if (! empty($prefs['lang_bing_api_client_id'])) { $this->implementation = 'bing'; } break; case 'google': if (! empty($prefs['lang_google_api_key'])) { $this->implementation = 'google'; } break; } } public function getAvailableLanguages($realTranslations) { global $langmapping, $prefs; $usedLangs = []; foreach ($realTranslations as $trad) { $usedLangs[] = $trad['lang']; } if ($prefs['restrict_language'] === 'y' && ! empty($prefs['available_languages'])) { $candidates = []; //restrict langs available for machine translation to those //available on the site foreach ($prefs['available_languages'] as $availLang) { $candidates[$availLang] = $langmapping[$availLang]; } } else { $candidates = $langmapping; } //restrict langs available for machine translation to those //not already used for human translation foreach ($usedLangs as $usedLang) { unset($candidates[$usedLang]); } //restrict langs available for machine translation to those //available from Google Translate $proposed = []; $supportedLanguages = $this->getHtmlImplementation('', '') ->getSupportedLanguages(); foreach ($candidates as $langCandidate => $name) { if (isset($supportedLanguages[$langCandidate])) { $proposed[] = [ 'lang' => $langCandidate, 'langName' => is_array($name) ? reset($name) : $name, ]; } } return $proposed; } public function getHtmlImplementation($source, $target) { global $prefs; $handler = null; switch ($this->implementation) { case 'bing': $clientId = $prefs['lang_bing_api_client_id']; $clientSecret = $prefs['lang_bing_api_client_secret']; $handler = new Multilingual_MachineTranslation_BingTranslateWrapper($clientId, $clientSecret, $source, $target); break; case 'google': $key = $prefs['lang_google_api_key']; $handler = new Multilingual_MachineTranslation_GoogleTranslateWrapper($key, $source, $target, true); break; case 'null': default: return new Multilingual_MachineTranslation_Null(); } return new Multilingual_MachineTranslation_Cache($handler, $source . $target); } public function getDetectImplementation($target) { return $this->getHtmlImplementation(self::DETECT_LANGUAGE, $target); } }