summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php')
-rw-r--r--www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php87
1 files changed, 87 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php b/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php
new file mode 100644
index 00000000..fa14a13b
--- /dev/null
+++ b/www/wiki/extensions/Translate/translationaids/MachineTranslationAid.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Translation aid provider.
+ *
+ * @file
+ * @author Niklas Laxström
+ * @copyright Copyright © 2012-2013, Niklas Laxström
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * Translation aid which gives suggestion from machine translation services.
+ *
+ * @ingroup TranslationAids
+ * @since 2013-01-01 | 2015.02 extends QueryAggregatorAwareTranslationAid
+ */
+class MachineTranslationAid extends QueryAggregatorAwareTranslationAid {
+ public function populateQueries() {
+ $definition = $this->dataProvider->getDefinition();
+ $translations = $this->dataProvider->getGoodTranslations();
+ $from = $this->group->getSourceLanguage();
+ $to = $this->handle->getCode();
+
+ if ( trim( $definition ) === '' ) {
+ return;
+ }
+
+ foreach ( $this->getWebServices( 'mt' ) as $service ) {
+ if ( $service->checkTranslationServiceFailure() ) {
+ continue;
+ }
+
+ try {
+ if ( $service->isSupportedLanguagePair( $from, $to ) ) {
+ $this->storeQuery( $service, $from, $to, $definition );
+ continue;
+ }
+
+ // Search for translations which we can use as a source for MT
+ // @todo: Support setting priority of languages like Yandex used to have
+ foreach ( $translations as $from => $text ) {
+ if ( !$service->isSupportedLanguagePair( $from, $to ) ) {
+ continue;
+ }
+
+ $this->storeQuery( $service, $from, $to, $text );
+ break;
+ }
+ } catch ( TranslationWebServiceConfigurationException $e ) {
+ throw new TranslationHelperException( $service->getName() . ': ' . $e->getMessage() );
+ }
+ }
+ }
+
+ public function getData() {
+ $suggestions = [ '**' => 'suggestion' ];
+
+ foreach ( $this->getQueryData() as $queryData ) {
+ $suggestions[] = $this->formatSuggestion( $queryData );
+ }
+
+ return array_filter( $suggestions );
+ }
+
+ /**
+ * @param array $queryData
+ * @return array|null
+ */
+ protected function formatSuggestion( array $queryData ) {
+ $service = $queryData['service'];
+ $response = $queryData['response'];
+ $sourceLanguage = $queryData['language'];
+ $sourceText = $queryData['text'];
+
+ $result = $service->getResultData( $response );
+ if ( $result === null ) {
+ return null;
+ }
+
+ return [
+ 'target' => $result,
+ 'service' => $service->getName(),
+ 'source_language' => $sourceLanguage,
+ 'source' => $sourceText,
+ ];
+ }
+}