개요
Papago Text Translation API는 네이버 Papago에 적용된 번역 REST API입니다. 입력된 텍스트를 다른 나라 언어(영어, 중국어)의 텍스트로 번역해 출력합니다. 비로그인 오픈 API 이므로 POST로 호출할 때 HTTP Header에 애플리케이션 등록 시 발급받은 Client ID와 Client Secret 값을 같이 전송하여 사용합니다.
높임말 번역(Honorific translation) 및 치환(Term replacement) 옵션을 활용해 Papago Text Translation API의 결과를 보완할 수 있습니다.
요청
- form 형식으로 요청
curl -i -X POST \
-H "X-NCP-APIGW-API-KEY-ID:{앱 등록 시 발급받은 Client ID}" \
-H "X-NCP-APIGW-API-KEY:{앱 등록 시 발급 받은 Client Secret}" \
-H "Content-Type:application/x-www-form-urlencoded" \
-d "source={원본 언어 코드}" \
-d "target={번역 결과 언어 코드}" \
-d "text={번역할 text}" \
'https://papago.apigw.gov-ntruss.com/nmt/v1/translation'
- json 형식으로 요청
curl -i -X POST \
-H "X-NCP-APIGW-API-KEY-ID:{앱 등록 시 발급받은 Client ID}" \
-H "X-NCP-APIGW-API-KEY:{앱 등록 시 발급 받은 Client Secret}" \
-H "Content-Type:application/json" \
-d \
'{
"source": "{원본 언어 코드}",
"target": "{번역 결과 언어 코드}",
"text": "{번역할 text}"
}' \
'https://papago.apigw.gov-ntruss.com/nmt/v1/translation'
요청 헤더
헤더명 | 설명 |
---|---|
X-NCP-APIGW-API-KEY-ID | 앱 등록 시 발급받은 Client IDX-NCP-APIGW-API-KEY-ID:{Client ID} |
X-NCP-APIGW-API-KEY | 앱 등록 시 발급 받은 Client SecretX-NCP-APIGW-API-KEY:{Client Secret} |
Content-Type | 전송할 콘텐츠 형식Content-Type:application/x-www-form-urlencoded Content-Type:application/json |
요청 바디
파라미터 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
source | String | Y | 원본 언어(source language)의 언어 코드. auto로 설정 시, 자동으로 소스 언어를 감지 |
target | String | Y | 목적 언어(target language)의 언어 코드 |
text | String | Y | - 번역할 텍스트 - 1회 호출 시 최대 5,000자까지 번역 가능 |
glossaryKey | String | N | - 클라우드 콘솔에서 용어집 기능을 사용하는 경우, 해당 용어집의 glossaryKey에 대응 (ex. 6ae8eba5-3154-4646-bc16-1c96532082e6) - 용어집 데이터를 기반으로 치환 번역 적용 - 한국어⇔영어,일본어,중국어(간/번체),프랑스어 | 영어⇔일본어,중국어(간/번체),베트남어,태국어,인도네시아어,프랑스어| 일본어⇔중국어(간/번체) 가능 - replaceInfo와 동시에 사용 시, replaceInfo의 우선 순위가 높음 - 용어집 등록 용어에는 honorific 적용되지 않음 |
replaceInfo | String | N | - 치환 번역 지정(공백 포함) - 지정된 index의 번역을 특정. str 미 설정 시, 원문을 그대로 제공 - 한국어⇔영어,일본어,중국어(간/번체),프랑스어 | 영어⇔일본어,중국어(간/번체),베트남어,태국어,인도네시아어,프랑스어| 일본어⇔중국어(간/번체) 가능 |
honorific | Boolean | N | - 높임말 여부(번역 기본값은 False) 영⇒한, 일⇒한, 중(간/번체)⇒한, 한⇒일, 영⇒일, 중(간/번체)⇒일 번역 방향만 가능 |
*번역하지 않아야 할 텍스트의 경우, html span tag를 사용하여 해당 텍스트 지정 가능. Tag는 글자수에 포함되지 않음.
*지원언어는 glossaryKey 및 replaceInfo 와 동일
<span translate="no"> </span> 또는 <span class="notranslate"> </span>
언어 코드 (source, target)
언어 | 언어 코드 |
---|---|
한국어 | ko |
영어 | en |
일본어 | ja |
중국어 간체 | zh-CN |
중국어 번체 | zh-TW |
베트남어 | vi |
태국어 | th |
인도네시아어 | id |
프랑스어 | fr |
스페인어 | es |
러시아어 | ru |
독일어 | de |
이탈리아어 | it |
지원언어
지원언어 | ||
---|---|---|
|
↔ | 영어(en), 일본어(ja), 중국어 간체(zh-CN)/번체(zh-TW) 베트남어(vi),태국어(th), 인도네시아어(id), 프랑스어(fr) 스페인어(es), 러시아어(ru), 독일어(de), 이탈리아어(it) |
|
↔ | 일본어(ja), 중국어 간체(zh-CN)/번체(zh-TW), 베트남어(vi), 태국어(th), 인도네시아어(id), 프랑스어(fr) 스페인어(es), 러시아어(ru), 독일어(de) |
|
↔ | 중국어 간체(zh-CN)/번체(zh-TW), 베트남어(vi), 태국어(th), 인도네시아어(id), 프랑스어(fr) |
|
↔ | 중국어 번체(zh-TW) |
응답
응답 바디
필드명 | 타입 | 설명 |
---|---|---|
srcLangType | string | 원본 언어 코드 |
tarLangType | string | 번역 결과 언어 코드 |
translatedText | string | 번역된 문장 |
예시
요청 예시
POST /nmt/v1/translation HTTP/1.1
HOST: papago.apigw.gov-ntruss.com
User-Agent: curl/7.49.1
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-NCP-APIGW-API-KEY-ID: {애플리케이션 등록 시 발급받은 client id 값}
X-NCP-APIGW-API-KEY: {애플리케이션 등록 시 발급받은 client secret 값}
Content-Length: 51
curl -i -X POST \
-H "X-NCP-APIGW-API-KEY-ID:kf4a7jfark" \
-H "X-NCP-APIGW-API-KEY:B8oczJX6DJiorOGcN3UbuylsJFUGqGXFaTxIIemY" \
-H "Content-Type:application/x-www-form-urlencoded" \
-d "source=en" \
-d "target=ko" \
-d "text=hello world" \
'https://papago.apigw.gov-ntruss.com/nmt/v1/translation'
응답 예시
{
"message": {
"@type": "response",
"@service": "naverservice.labs.api",
"@version": "1.0.0",
"result": {
"translatedText": "tea"
}
}
}
API 예제
// 네이버 Papago Text Translation API 예제
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class APIExamTranslate {
public static void main(String[] args) {
String clientId = "YOUR_CLIENT_ID";//애플리케이션 클라이언트 아이디값";
String clientSecret = "YOUR_CLIENT_SECRET";//애플리케이션 클라이언트 시크릿값";
try {
String text = URLEncoder.encode("만나서 반갑습니다.", "UTF-8");
String apiURL = "https://papago.apigw.gov-ntruss.com/nmt/v1/translation";
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
// post request
String postParams = "source=ko&target=en&text=" + text;
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
BufferedReader br;
if(responseCode==200) { // 정상 호출
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
} else { // 오류 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
}
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
System.out.println(response.toString());
} catch (Exception e) {
System.out.println(e);
}
}
}
// 네이버 Papago Text Translation API 예제
<?php
$client_id = "YOUR_CLIENT_ID";
$client_secret = "YOUR_CLIENT_SECRET";
$encText = urlencode("반갑습니다.");
$postvars = "source=ko&target=en&text=".$encText;
$url = "https://papago.apigw.gov-ntruss.com/nmt/v1/translation";
$is_post = true;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $is_post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
$headers = array();
$headers[] = "X-NCP-APIGW-API-KEY-ID: ".$client_id;
$headers[] = "X-NCP-APIGW-API-KEY: ".$client_secret;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "status_code:".$status_code."<br />";
curl_close ($ch);
if($status_code == 200) {
echo $response;
} else {
echo "Error 내용:".$response;
}
?>
// 네이버 Papago Text Translation API 예제
var express = require('express');
var app = express();
var client_id = 'YOUR_CLIENT_ID';
var client_secret = 'YOUR_CLIENT_SECRET';
var query = '번역할 문장을 입력하세요.';
app.get('/translate', function(req, res) {
var api_url = 'https://papago.apigw.gov-ntruss.com/nmt/v1/translation';
var request = require('request');
var options = {
url: api_url,
form: { source: 'ko', target: 'en', text: query },
headers: { 'X-NCP-APIGW-API-KEY-ID': client_id, 'X-NCP-APIGW-API-KEY': client_secret },
};
request.post(options, function(error, response, body) {
if (!error && response.statusCode == 200) {
res.writeHead(200, { 'Content-Type': 'text/json;charset=utf-8' });
res.end(body);
} else {
res.status(response.statusCode).end();
console.log('error = ' + response.statusCode);
}
});
});
app.listen(3000, function() {
console.log('http://127.0.0.1:3000/translate app listening on port 3000!');
});
// 네이버 Papago Text Translation API 예제
import os
import sys
import urllib.request
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
encText = urllib.parse.quote("번역할 문장을 입력하세요")
data = "source=ko&target=en&text=" + encText
url = "https://papago.apigw.gov-ntruss.com/nmt/v1/translation"
request = urllib.request.Request(url)
request.add_header("X-NCP-APIGW-API-KEY-ID",client_id)
request.add_header("X-NCP-APIGW-API-KEY",client_secret)
response = urllib.request.urlopen(request, data=data.encode("utf-8"))
rescode = response.getcode()
if(rescode==200):
response_body = response.read()
print(response_body.decode('utf-8'))
else:
print("Error Code:" + rescode)
// 네이버 Papago Text Translation API 예제
using System;
using System.Net;
using System.Text;
using System.IO;
namespace NaverAPI_Guide
{
public class APIExamTranslate
{
static void Main(string[] args)
{
string url = "https://papago.apigw.gov-ntruss.com/nmt/v1/translation";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add("X-NCP-APIGW-API-KEY-ID", "YOUR-CLIENT-ID");
request.Headers.Add("X-NCP-APIGW-API-KEY", "YOUR-CLIENT-SECRET");
request.Method = "POST";
string query = "오늘 날씨는 어떻습니까?";
byte[] byteDataParams = Encoding.UTF8.GetBytes("source=ko&target=en&text=" + query);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteDataParams.Length;
Stream st = request.GetRequestStream();
st.Write(byteDataParams, 0, byteDataParams.Length);
st.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string text = reader.ReadToEnd();
stream.Close();
response.Close();
reader.Close();
Console.WriteLine(text);
}
}
}
치환옵션(replaceInfo) 적용 예제
인덱스 0~3는 source text copy, 5~8은 test로 지정
replaceInfo={"infos":[{"begin":0,"length":4},{"begin":5,"length":4,"str":"test"}]}
오류 코드
HttpStatusCode | ErrorCode | ErrorMessage | Description |
---|---|---|---|
400 | N2MT01 | source parameter is needed | source 파라미터 필요. |
400 | N2MT02 | Unsupported source language | 지원하지 않는 source 언어 |
400 | N2MT03 | target parameter is needed | target 파라미터 필요 |
400 | N2MT04 | Unsupported target language | 지원하지 않는 target 언어 |
400 | N2MT05 | source and target must be different | source와 target 이 동일 |
400 | N2MT06 | There is no source-to-target translator | source → target 번역기 없음 |
400 | N2MT07 | text parameter is needed | text 파라미터 필요 |
400 | N2MT08 | text parameter exceeds max length | text 파라미터가 최대 용량 초과 |
500 | N2MT99 | Internal server errors | 내부 서버 오류 |