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