jenkins-bot has submitted this change and it was merged.

Change subject: Yandex machine translation backend client
......................................................................


Yandex machine translation backend client

* This backend is not configured for any language.
  That will be considered only after legal and community consultation.
* Does not work without a valid API key in configuration file.

Change-Id: I22f0802d8c435714625af789d317cb077d8ce02d
---
M config.defaults.js
A mt/Yandex.js
M mt/index.js
3 files changed, 96 insertions(+), 1 deletion(-)

Approvals:
  Santhosh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/config.defaults.js b/config.defaults.js
index 64cbc84..7800086 100644
--- a/config.defaults.js
+++ b/config.defaults.js
@@ -9,6 +9,8 @@
        'parsoid.api': 'http://parsoid-lb.eqiad.wikimedia.org',
        // Apertium web API URL
        'mt.apertium.api': 'http://apertium.wmflabs.org',
+       'mt.yandex.api': 'https://translate.yandex.net',
+       'mt.yandex.key': null,
        // Use SSL?
        secure: false,
        // SSL key filename
diff --git a/mt/Yandex.js b/mt/Yandex.js
new file mode 100644
index 0000000..0e24008
--- /dev/null
+++ b/mt/Yandex.js
@@ -0,0 +1,92 @@
+var errormap,
+       Q = require( 'q' ),
+       request = require( 'request' ),
+       conf = require( __dirname + '/../utils/Conf.js' );
+
+// http://api.yandex.com/translate/doc/dg/reference/translate.xml
+errormap = {
+       200: 'ERR_OK',
+       401: 'ERR_KEY_INVALID',
+       402: 'ERR_KEY_BLOCKED',
+       403: 'ERR_DAILY_REQ_LIMIT_EXCEEDED',
+       404: 'ERR_DAILY_CHAR_LIMIT_EXCEEDED',
+       413: 'ERR_TEXT_TOO_LONG',
+       422: 'ERR_UNPROCESSABLE_TEXT',
+       501: 'ERR_LANG_NOT_SUPPORTED'
+};
+
+/**
+ * Returns error name from error code.
+ * @return {string}
+ */
+function getErrorName( code ) {
+       if ( code in errormap ) {
+               return errormap[code];
+       }
+
+       return 'Unknown error';
+}
+
+/**
+ * Translate plain text with Yandex.
+ *
+ * @param {string} sourceLang Source language code
+ * @param {string} targetLang Target language code
+ * @param {string} sourceText Source language text
+ * @return {Q.Promise} Target language text
+ */
+function translate( sourceLang, targetLang, sourceText ) {
+       var key, postData,
+               deferred = Q.defer();
+
+       key = conf( 'mt.yandex.key' );
+       if ( key === null ) {
+               deferred.reject( new Error( 'Yandex service is misconfigured' ) 
);
+               return deferred.promise;
+       }
+
+       if ( sourceText.length > 10000 ) {
+               deferred.reject( new Error( 'Source text too long' ) );
+               return deferred.promise;
+       }
+
+       // Language mapping that might be needed is be-tarask -> be
+       postData = {
+               url: conf( 'mt.yandex.api' ) + '/api/v1.5/tr.json/translate',
+               form: {
+                       key: key,
+                       lang: sourceLang + '-' + targetLang,
+                       format: 'html',
+                       text: sourceText
+               }
+       };
+
+       request.post( postData, function ( error, response, body ) {
+               var ret;
+
+               if ( error ) {
+                       deferred.reject( new Error( error ) );
+                       return;
+               }
+
+               try {
+                       ret = JSON.parse( body );
+               } catch ( err ) {
+                       deferred.reject( err );
+                       return;
+               }
+
+               console.log( ret );
+               if ( ret.code !== 200 ) {
+                       deferred.reject( new Error( ret.code + ': ' + 
getErrorName( ret.code ) ) );
+               }
+
+               deferred.resolve( ret.text[0] );
+       } );
+
+       return deferred.promise;
+}
+
+module.exports = {
+       translate: translate
+};
diff --git a/mt/index.js b/mt/index.js
index 6e6854b..acf5730 100644
--- a/mt/index.js
+++ b/mt/index.js
@@ -1,3 +1,4 @@
 module.exports = {
-       Apertium: require( './Apertium.js' )
+       Apertium: require( './Apertium.js' ),
+       Yandex: require( './Yandex.js' )
 };

-- 
To view, visit https://gerrit.wikimedia.org/r/170015
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I22f0802d8c435714625af789d317cb077d8ce02d
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/services/cxserver
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: Santhosh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to