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