GCP(google cloud platform) 생성 및 설정은 생략한다.

https://cloud.google.com/gcp/getting-started/?hl=ko 여기를 참고할것!


모든 코드 및 내용은

https://cloud.google.com/translate/docs/quickstart-client-libraries-v3 여기를 참고했음.


번역 함수 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    static String translateText(String text, String sourceLanguageCode, String targetLanguageCode) {
 
        try (TranslationServiceClient translationServiceClient = TranslationServiceClient.create()) {
 
 
 
        LocationName locationName = LocationName.newBuilder().setProject("").setLocation("").build();
 
 
 
        TranslateTextRequest translateTextRequest = TranslateTextRequest.newBuilder()
 
            .setParent(locationName.toString())
 
            .setMimeType("text/plain")
 
            .setSourceLanguageCode(sourceLanguageCode)
 
            .setTargetLanguageCode(targetLanguageCode)
 
            .addContents(text)
 
            .build();
 
 
 
        TranslateTextResponse response = translationServiceClient.translateText(translateTextRequest);
 
        return response.getTranslationsList().get(0).getTranslatedText();
 
 
 
        } catch (Exception e) {
 
              throw new RuntimeException("Couldn't create client.", e);
 
        }
 
    }
 
 
cs


GOOGLE API 문서에서와 조금 다른 부분이 존재한다.

7번째 줄 setProject에는 project id를 넣고, setLocation에는 global이라고 고정값을 넣었다.

retrun 값도 호출 함수에 맞게 String으로 변경하였다.

특이하게도 번역함수에 sourceLanguageCode를 넣어야한다.

번역할 String의 언어를 명시해주어야 한다. (하지 않아도 되지만 짧은 텍스트인 경우 오류가 간헐적으로 발생)


때문에 언어 코드를 detect하는 함수를 아래와 같이 작성한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    static String detectLanguageOfText(String text) {
        try (TranslationServiceClient translationServiceClient = TranslationServiceClient.create()) {
 
        LocationName locationName = LocationName.newBuilder().setProject("").setLocation("").build();
        DetectLanguageRequest detectLanguageRequest = DetectLanguageRequest.newBuilder()
            .setParent(locationName.toString())
            .setMimeType("text/plain")
            .setContent(text)
            .build();
 
        DetectLanguageResponse response = translationServiceClient.detectLanguage(detectLanguageRequest);
        return response.getLanguages(0).getLanguageCode();
 
        } catch (Exception e) {    
            throw new RuntimeException("Couldn't create client.", e);
        }
    }
cs


4번째 줄에도 똑같이 project id와 "global"을 작성한다.

이 함수의 반환값은 코드값(String)으로 변경되었다.


이제 함수를 호출하는 방법이다.


1
2
3
4
5
6
7
8
9
10
11
12
        String text = "HELLO";
        String from = detectLanguageOfText(text);
        String to = request.getParameter("lang");
        
        System.out.println("TRANSLATE STRING : " + text);
        System.out.println("TRANSLATE LANGUAGE FROM : " + from);
        System.out.println("TRANSLATE LANGUAGE TO : " + request.getParameter("lang"));
        
        if(from.equals(to))
            System.out.println("TRANSLATE RESULT : " + text);
        else
            System.out.println("TRANSLATE RESULT : " + translateText(text, from, to));
cs



희한하게도 FROM LANGUAGE와 TO LANGUAGE가 같은 경우 에러를 반환한다.

이를 방지하기위해 9번째 코드를 추가하였다.



에러 해결

API 호출시 500에러 (CREDENTIALS 어쩌고...)가 발생하여

API 문서의 SET 명령어를 통해 환경변수를 등록했지만 그대로 오류 발생


내 PC -> 우클릭 시스템 -> 고급 시스템 설정 -> 고급 -> 환경변수 -> 사용자 변수에 새로 생성

변수이름 : GOOGLE_APPLICATION_CREDENTIALS

변수 값 : 생성한 비밀 키 json 경로


수동으로 환경 변수를 설정해주었다면 PC 재시작 필요




to Top