https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113023

Revision: 113023
Author:   nikerabbit
Date:     2012-03-05 12:10:32 +0000 (Mon, 05 Mar 2012)
Log Message:
-----------
Support for remote TTMServers

Modified Paths:
--------------
    trunk/extensions/Translate/README
    trunk/extensions/Translate/Translate.php
    trunk/extensions/Translate/utils/TranslationHelpers.php

Modified: trunk/extensions/Translate/README
===================================================================
--- trunk/extensions/Translate/README   2012-03-05 12:05:13 UTC (rev 113022)
+++ trunk/extensions/Translate/README   2012-03-05 12:10:32 UTC (rev 113023)
@@ -31,6 +31,7 @@
 
 == Change log ==
 * 2012-03-05
+- Support for using remote TTMServers via API interface added.
 - Support for tmserver was removed. Translate comes with TTMServer enabled by 
default.
   To bootstrap it with current translations, run php 
scripts/ttmserver-export.php.
 * 2012-02-19

Modified: trunk/extensions/Translate/Translate.php
===================================================================
--- trunk/extensions/Translate/Translate.php    2012-03-05 12:05:13 UTC (rev 
113022)
+++ trunk/extensions/Translate/Translate.php    2012-03-05 12:10:32 UTC (rev 
113023)
@@ -356,6 +356,17 @@
        'type' => 'apertium',
        'codemap' => array( 'no' => 'nb' ),
 );
+/* Example configuration for remote TTMServer
+$wgTranslateTranslationServices['example'] = array(
+       'url' => 'http://example.com/w/api.php',
+       'viewurl' => '//example.com/wiki/',
+       'displayname' => 'example.com',
+       'cutoff' => 0.75,
+       'timeout-sync' => 4,
+       'timeout-async' => 4,
+       'type' => 'remote-ttmserver',
+);
+*/
 
 /**
  * List of tasks in Special:Translate. If you are only using page translation

Modified: trunk/extensions/Translate/utils/TranslationHelpers.php
===================================================================
--- trunk/extensions/Translate/utils/TranslationHelpers.php     2012-03-05 
12:05:13 UTC (rev 113022)
+++ trunk/extensions/Translate/utils/TranslationHelpers.php     2012-03-05 
12:10:32 UTC (rev 113023)
@@ -260,29 +260,91 @@
                $definition = $this->getDefinition();
                $suggestions = TTMServer::primary()->query( $source, $code, 
$definition );
                if ( count( $suggestions ) === 0 ) {
+                       throw new TranslationHelperExpection( 'No suggestions' 
);
+               }
+
+               return $this->formatTTMServerSuggestions( $suggestions, $code, 
$config );
+       }
+
+       /**
+        * Returns suggestions from a translation memory.
+        * @param $serviceName
+        * @param $config
+        * @return string Html snippet which contains the suggestions.
+        */
+       protected function getRemoteTTMServerBox( $serviceName, $config ) {
+               $this->mustHaveDefinition();
+               $this->mustBeTranslation();
+
+               self::checkTranslationServiceFailure( $serviceName );
+
+               $source = $this->group->getSourceLanguage();
+               $code = $this->handle->getCode();
+               $definition = $this->getDefinition();
+               $params = array(
+                       'format' => 'json',
+                       'action' => 'ttmserver',
+                       'sourcelanguage' => $source,
+                       'targetlanguage' => $code,
+                       'text' => $definition,
+               );
+
+               $json = Http::get( wfAppendQuery( $config['url'], $params ) );
+               $response = FormatJson::decode( $json, true );
+
+               if ( $json === false ) {
+                       // Most likely a timeout or other general error
+                       self::reportTranslationServiceFailure( $serviceName );
+               } elseif ( !is_array( $response ) ) {
+                       error_log(  __METHOD__ . ': Unable to parse reply: ' . 
strval( $json ) );
                        return null;
                }
 
-               foreach ( $suggestions as $s ) {
+               $suggestions = $response['ttmserver'];
+               if ( count( $suggestions ) === 0 ) {
+                       throw new TranslationHelperExpection( 'No suggestions' 
);
+               }
+
+               return $this->formatTTMServerSuggestions( $suggestions, $code, 
$config );
+       }
+
+       /// Since 2012-03-05
+       protected function formatTTMServerSuggestions( $data, $code, $config ) {
+               foreach ( $data as $s ) {
                        $accuracy = wfMsgHtml( 'translate-edit-tmmatch' , 
sprintf( '%.2f', $s['quality'] * 100 ) );
                        $legend = array( $accuracy => array() );
 
-                       $sourceTitle = Title::newFromText( $s['context'] );
-                       $handle = new MessageHandle( $sourceTitle );
-                       $targetTitle = Title::makeTitle( 
$sourceTitle->getNamespace(), $handle->getKey() . "/$code" );
-                       if ( $targetTitle ) {
-                               $legend[$accuracy][] = self::ajaxEditLink( 
$targetTitle, '•' );
+                       if ( $config['type'] === 'remote-ttmserver' ) {
+                               $params = array(
+                                       'href' => $url = $config['viewurl'] . 
$s['context'],
+                                       'target' => '_blank',
+                                       'title' => $config['displayname'],
+                               );
+                               $legend[$accuracy][] = Html::element( 'a', 
$params, '‣' );
+                       } else {
+                               $sourceTitle = Title::newFromText( 
$s['context'] );
+                               $handle = new MessageHandle( $sourceTitle );
+                               $targetTitle = Title::makeTitle( 
$sourceTitle->getNamespace(), $handle->getKey() . "/$code" );
+                               if ( $targetTitle ) {
+                                       $legend[$accuracy][] = 
self::ajaxEditLink( $targetTitle, '•' );
+                               }
                        }
 
                        // Show the source text in a tooltip
-                       $text = $this->suggestionField( $s['target'] );
+                       if ( isset( $s['target'] ) ) {
+                               $suggestion = $s['target'];
+                       } else {
+                               $suggestion = $s['*'];
+                               
+                       }
+                       $text = $this->suggestionField( $suggestion );
                        $params = array( 'class' => 
'mw-sp-translate-edit-tmsug', 'title' => $s['source'] );
 
                        // Group identical suggestions together
-                       if ( isset( $sugFields[$s['target']] ) ) {
-                               $sugFields[$s['target']][2] = 
array_merge_recursive( $sugFields[$s['target']][2], $legend );
+                       if ( isset( $sugFields[$suggestion] ) ) {
+                               $sugFields[$suggestion][2] = 
array_merge_recursive( $sugFields[$suggestion][2], $legend );
                        } else {
-                               $sugFields[$s['target']] = array( $text, 
$params, $legend );
+                               $sugFields[$suggestion] = array( $text, 
$params, $legend );
                        }
                }
 


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to