DeepL: テキスト翻訳

DeepL: Translate Text

この工程は、DeepL API(v2)を用いて機械翻訳します。フォーマルな文章や砕けた文章に翻訳することも可能です。

Basic Configs
工程名
メモ
Auto Step icon
Configs for this Auto Step
conf_Auth
C1: 認証キーを設定した認証設定 *
conf_SourceLangCode
C2: 翻訳元の言語コード(指定しない場合、自動検出されます)
conf_SourceText
C3: 翻訳元ソーステキスト *#{EL}
conf_SourceFormat
C4: 翻訳元ソースのフォーマット *
conf_TargetLangCode
C5: 翻訳先の言語コード *
conf_Formality
C6: フォーマル化オプション
conf_TranslatedDef
C7: 翻訳後のテキストを保存するデータ項目 *

Notes

Capture

See Also

Script (click to open)
  • 次のスクリプトが記述されている XML ファイルをダウンロードできます
    • deepl-text-translate.xml (C) Questetra, Inc. (MIT License)
    • Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます


const API_URL_FREE = 'https://api-free.deepl.com/v2/translate';
const API_URL_PRO = 'https://api.deepl.com/v2/translate';

const main = () => {
    //// == Config Retrieving / 工程コンフィグの参照 ==
    const authSetting = configs.getObject('conf_Auth'); /// REQUIRED
    const sourceLangCode = configs.get('conf_SourceLangCode'); // NotRequired
    const sourceText = configs.get('conf_SourceText'); /// REQUIRED
    if (sourceText === '') {
        throw 'Source Text is empty.';
    }
    const sourceFormat = configs.get('conf_SourceFormat'); /// REQUIRED
    const targetLangCode = configs.get('conf_TargetLangCode'); /// REQUIRED
    const formality = configs.get('conf_Formality'); // NotRequired
    const translatedDef = configs.getObject('conf_TranslatedDef'); /// REQUIRED

    //// == Calculating / 演算 ==
    const translatedText = translate(authSetting, sourceLangCode, sourceText, sourceFormat, targetLangCode, formality);

    //// == Data Updating / ワークフローデータへの代入 ==
    engine.setData(translatedDef, translatedText);
};

/**
 * 翻訳する
 * @param {AuthSettingWrapper} authSetting
 * @param {String} sourceLangCode
 * @param {String} sourceText
 * @param {String} sourceFormat
 * @param {String} targetLangCode
 * @param {String} formality
 * @returns {String} translatedText
 */
const translate = (authSetting, sourceLangCode, sourceText, sourceFormat, targetLangCode, formality) => {
    /// (DeepL > Translating text)
    /// https://www.deepl.com/ja/docs-api/translate-text/
    const authKey = authSetting.getToken();
    const url = decideUrl(authKey);
    const body = buildBody(sourceLangCode, sourceText, sourceFormat, targetLangCode, formality);
    const response = httpClient.begin() // HttpRequestWrapper
        .queryParam('auth_key', authKey)
        .body(body, 'application/json')
        .post(url); // HttpResponseWrapper
    const status = response.getStatusCode();
    const responseStr = response.getResponseAsString();
    if (status !== 200) {
        engine.log(responseStr);
        throw `Failed to translate. status: ${status}`;
    }
    const responseObj = JSON.parse(responseStr);
    const detectedSourceLangCode = responseObj.translations[0].detected_source_language;
    engine.log(`Detected source language code: ${detectedSourceLangCode}`);
    const translatedText = responseObj.translations[0].text;
    return translatedText;
};

/**
 * API の URL を決定する
 * @param {String} authKey
 * @returns {String} url
 */
const decideUrl = (authKey) => {
    if (authKey.endsWith(':fx')) { // Free
        return API_URL_FREE;
    }
    // Pro
    return API_URL_PRO;
};

/**
 * API のリクエストボディを作成する
 * @param {String} sourceLangCode
 * @param {String} sourceText
 * @param {String} sourceFormat
 * @param {String} targetLangCode
 * @param {String} formality
 * @returns {String} body
 */
const buildBody = (sourceLangCode, sourceText, sourceFormat, targetLangCode, formality) => {
    const bodyObj = {
        text: [sourceText],
        target_lang: targetLangCode
    };
    if (sourceLangCode !== '') {
        Object.assign(bodyObj, { source_lang: sourceLangCode });
    }
    if (sourceFormat !== 'text') { // xml or html
        Object.assign(bodyObj, { tag_handling: sourceFormat });
    }
    if (formality !== '') {
        Object.assign(bodyObj, { formality });
    }
    return JSON.stringify(bodyObj);
};

    
%d