먼저 위의 DeepL 공식 사이트에서 회원가입을 한 후 api 플랜을 선택해주면 됩니다.
저는 무료 플랜을 사용하였습니다.
그 후 신용카드를 추가하고 플랜에 가입을 됐다면 프로필에서 계정을 클린 한 후 api 인증키를 찾아줍니다.
위의 API 인증키를 복사해주시면 됩니다!
https://www.deepl.com/ko/docs-api/translate-text/translate-text
공식 api 문서를 참고하며 코드를 작성하겠습니다.
request에서 필수로 요구되는 파라미터는 text
와 target_lang
인데요.
각 파라미터의 설명에 대해 살펴보면
text
array : 이 매개변수는 텍스트를 번역하기 위한 것으로, 최대 50개의 텍스트를 포함할 수 있고, UTF-8로 인코딩된 일반 텍스트만 지원합니다. 요청된 텍스트는 요청된 순서대로 번역되어 반환됩니다.target_lang
string : 목표 언어로 번역할 언어를 지정합니다.
이제 필수로 요구되는 값들을 dto로 만들어 보도록 하겠습니다!
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class TranslationRequest {
private List<String> text;
private String target_lang;
}
response에서는 두가지 property가 존재하네요.
detected_source_language (탐지된 원본 언어)
: 원본 텍스트에서 감지된 언어. source_lang
매개변수가 지정된 경우에만 해당 값이 반영text (번역된 텍스트)
: 번역된 텍스트위의 property를 토대로 dto를 만들어보겠습니다!
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class TranslationResponse {
private List<Translation> translations;
}
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Translation {
private String detected_source_language;
private String text;
}
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Collections;
@RestController
@RequestMapping("/api")
class TranslationController {
private final String deeplApiUrl = "https://api-free.deepl.com/v2/translate";
private final String authKey = "[API인증키]"
@PostMapping("/translate")
public ResponseEntity<TranslationResponse> translate(@RequestBody TranslationRequest request) {
String targetLang = request.getTarget_lang();
String apiUrl = deeplApiUrl + "?target_lang=" + targetLang;
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization", "DeepL-Auth-Key " + authKey);
TranslationResponse response = restTemplate.postForObject(apiUrl, createHttpEntity(request, headers), TranslationResponse.class);
return ResponseEntity.ok(response);
}
private HttpEntity<TranslationRequest> createHttpEntity(TranslationRequest request, HttpHeaders headers) {
return new HttpEntity<>(request, headers);
}
}
authKey
변수에 아까 복사해둔 api key를 넣으면 됩니다!
이제 postman을 이용하여 테스트를 해보도록 하겠습니다.
POST : http://localhost:8080/api/translate
request
"text": [ "What's your name?" ], "target_lang": "KO" }
response
"translations": [ { "detected_source_language": "EN", "text": "이름이 어떻게 되시나요?" } ] }