
DeepL: テキスト翻訳
この工程は、DeepL API(v2)を用いて機械翻訳します。フォーマルな文章や砕けた文章に翻訳することも可能です。
Basic Configs
- 工程名
- メモ
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
- 利用中のアカウントが DeepL API Pro または DeepL API for Business の場合、月間使用料に基づいて料金が請求されます
- 認証キーは、アカウントの詳細情報の下に表示されます
- 指定可能な言語コードについては、API ドキュメントを参照してください
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);
};