Skip to content

Commit

Permalink
feat: add support to use deepl's word-alternative API
Browse files Browse the repository at this point in the history
  • Loading branch information
Lixissimus committed Nov 6, 2017
1 parent 735f7c2 commit 40148fa
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 6 deletions.
45 changes: 42 additions & 3 deletions src/deepl-api-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const request = require('./request-helper');
const DEEPL_HOSTNAME = 'www.deepl.com';
const DEEPL_ENDPOINT = '/jsonrpc';

function getHandleJobsBody(texts, targetLanguage, sourceLanguage) {
function getHandleJobsBody(texts, targetLanguage, sourceLanguage, beginning) {
return {
jsonrpc: '2.0',
method: 'LMT_handle_jobs',
Expand All @@ -12,6 +12,7 @@ function getHandleJobsBody(texts, targetLanguage, sourceLanguage) {
return {
kind: 'default',
raw_en_sentence: text,
de_sentence_beginning: beginning,
};
}),
lang: {
Expand All @@ -25,6 +26,28 @@ function getHandleJobsBody(texts, targetLanguage, sourceLanguage) {
};
}

function getAlternativesBody(text, targetLanguage, sourceLanguage, beginning) {
return {
jsonrpc: '2.0',
method: 'LMT_handle_jobs',
params: {
jobs: [
{
de_sentence_beginning: beginning,
kind: 'alternatives_at_position',
raw_en_sentence: text,
},
],
lang: {
source_lang_computed: sourceLanguage,
target_lang: targetLanguage,
},
priority: 1,
},
id: 1,
};
}

function getSplitSentencesBody(texts, sourceLanguage) {
return {
jsonrpc: '2.0',
Expand Down Expand Up @@ -56,8 +79,13 @@ function getRequestOptions(postBody) {
}

module.exports = {
getTranslation: (texts, targetLanguage, sourceLanguage) => {
const postBody = getHandleJobsBody(texts, targetLanguage, sourceLanguage);
getTranslation: (texts, targetLanguage, sourceLanguage, beginning) => {
const postBody = getHandleJobsBody(
texts,
targetLanguage,
sourceLanguage,
beginning
);
const options = getRequestOptions(postBody);

return request(options, postBody);
Expand All @@ -66,6 +94,17 @@ module.exports = {
const postBody = getSplitSentencesBody(texts, sourceLanguage);
const options = getRequestOptions(postBody);

return request(options, postBody);
},
getAlternatives: (text, targetLanguage, sourceLanguage, beginning) => {
const postBody = getAlternativesBody(
text,
targetLanguage,
sourceLanguage,
beginning
);
const options = getRequestOptions(postBody);

return request(options, postBody);
},
};
44 changes: 41 additions & 3 deletions src/deepl-translator.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
const languages = require('./languages');
const { splitSentences, getTranslation } = require('./deepl-api-helper');
const {
splitSentences,
getTranslation,
getAlternatives,
} = require('./deepl-api-helper');
const { EOL } = require('os');

function detectLanguage(text) {
Expand Down Expand Up @@ -30,7 +34,22 @@ function validateInputs(text, targetLanguage, sourceLanguage) {
});
}

function translate(text, targetLanguage, sourceLanguage = 'auto') {
function validateBeginning(beginning) {
return new Promise((resolve, reject) => {
if (beginning == undefined) {
reject(new Error(`Beginning cannot be undefined`));
} else {
resolve(true);
}
});
}

function translate(
text,
targetLanguage,
sourceLanguage = 'auto',
beginning = ''
) {
return validateInputs(text, targetLanguage, sourceLanguage)
.then(valid => splitSentences(text.split(EOL), sourceLanguage))
.then(transformSplitSentencesResponse)
Expand All @@ -43,7 +62,8 @@ function translate(text, targetLanguage, sourceLanguage = 'auto') {
: getTranslation(
paragraph,
targetLanguage,
resolvedSourceLanguage || 'auto'
resolvedSourceLanguage || 'auto',
beginning
).then(transformTranslationResponse)
)
).then(translatedParagraphs => ({
Expand All @@ -66,6 +86,23 @@ function translate(text, targetLanguage, sourceLanguage = 'auto') {
});
}

function wordAlternatives(text, targetLanguage, sourceLanguage, beginning) {
return validateInputs(text, targetLanguage, sourceLanguage)
.then(valid => validateBeginning(beginning))
.then(valid =>
getAlternatives(text, targetLanguage, sourceLanguage, beginning)
)
.then(res => {
return {
targetLanguage: res.result.target_lang,
resolvedSourceLanguage: res.result.source_lang,
alternatives: res.result.translations[0].beams.map(alt => {
return alt.postprocessed_sentence;
}),
};
});
}

function transformTranslationResponse(response) {
try {
const {
Expand Down Expand Up @@ -109,4 +146,5 @@ function transformSplitSentencesResponse(response) {
module.exports = {
translate,
detectLanguage,
wordAlternatives,
};

0 comments on commit 40148fa

Please sign in to comment.