PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2018/03/18 17:11:57
Name 시드마이어
Link #1 https://brunch.co.kr/@skykamja24/130
Subject [일반] Node.js로 다중 언어 번역기 만들기 (수정됨)
저는 현재 6개국어가 지원되는 앱을 만들고 있습니다.
아직까지 하나씩 번역해서 추가해도 크게 무리가 되지 않았는데,
이번에 9개국어로 늘리게 되니 노가다로는 답이 없었습니다.
그래서 다중 언어 번역기를 만들어보았습니다.

Ha193uyvr_O-9kH5-3LiCGh6Zf8.jpg
먼저 node.js(이하 노드)가 필요합니다. 저는 노드가 이미 설치된 c9 IDE를 이용해서 작업했습니다. c9에서 Create a new workspace를 눌러주고, 템플렛은 Node.js가 아니라 Blank를 사용합니다. Node.js를 선택하시면, 채팅 웹사이트를 만들어주기 때문에 일이 많아집니다. Blank를 선택해도 기본적인 노드와 npm은 다 설치되어있기 때문에 가장 빠르게 만들 수 있습니다.

생성하시면 아래와 같이 빈 화면이 나오게 됩니다.
ucjmKJdEp7SuKBc5SKblXG3e_fU.jpg
npm을 통해서 모듈을 설치해봅니다. 제가 사용한 모듈은 google-translate-api 입니다. 그럼 설치해봅시다.



모듈 설치하기
[$ npm install --save google-translate-api ]

위의 코드를 입력해 설치해줍니다. 그러면 알아서 필요한 다른 모듈들도 설치가 완료됩니다.
설치가 끝났으면 이제 번역을 위한 코드를 써봅니다. translator.js라는 파일을 만들어보겠습니다.
z2xaws8e-x4hIqaYTSPXiIxtIJk.jpg
위의 코드를 입력하고 파일을 저장합니다.



코드 설명
맨 윗 줄은 모듈을 참조하는 명령입니다. translate에 첫번째 인자에는 '안녕하세요!'를 넣었습니다. 예측하셨겠지만 번역할 '문장'을 넣어줍니다. 두번째 인자에는 {from: 'ko', to: 'en'} 이 들어갔습니다. 한국어(ko)에서 영어(en)로 바꾸겠다는 의미입니다. 'ko'나 'en'을 locale이라고 부릅니다. locale을 검색해보시면 여러 국가 코드를 찾으실 수 있습니다. 이후 번역이 끝난 문장는 .then() 안의 명령을 받아 작동합니다. 'RUN' 버튼을 눌러 코드를 실행시켜보겠습니다.
Z86qk8i2TvbkNJg2bvTbArQZq5Q.jpg
"안녕하세요!"를 제 번역기는 "Good morning!"으로 번역했습니다. 구글 번역기와 동일한지 확인해봅시다.
bhCwupk4jyx_ecyx5uB2Em96ejc.jpg
동일하게 작동함을 확인할 수 있습니다.




여러 언어로 동시 번역하기

이제 다중 언어 번역기로 발전시켜봅니다. 번역할 대상 언어를 배열로 만듭니다.

[let langAry = ['en', 'ko', 'ja', 'es']; ]

예에서 번역할 언어는 영어, 한국어, 일본어, 스페인어 입니다. 4개만 넣었지만 locale만 추가로 넣어주시면 동시에 수 십개의 언어도 번역할 수 있습니다.

다중 번역을 위한 함수를 만듭니다.

[let multipleTranslator = (sentence) => { };]

multipleTranslator함수 안에 아래의 코드를 넣어줍니다.
VrvD2u6X9Sd9WF8s36V-tk2Goeg.jpg
저는 번역한 언어를 순서대로 넣어서 보고 싶기 때문에 wordObj라는 객체를 만들었습니다. for문을 통해서 각각의 언어에 해당하는 번역을 순차적으로 진행시킵니다.

gc6R_naXTFDhXL4OzNdiYVha_iM.jpg
이와는 별개로 널체크를 위한 함수를 하나 만들었습니다. 이렇게 널체크하는 이유는 여러 언어의 번역이 비동기로 진행되기 때문입니다. hasNull함수를 통해 "다 완성되면 가지고 오라"는 명령을 내립니다.

다시 multipleTranslator함수에 아래의 코드를 넣어줍니다.
_L-ilX66vr4C7ro225WAh2M0mZ0.jpg"1초마다 번역이 끝났는지 확인해서 완료되면 찍어서 보내"라는 의미를 담고 있습니다.
준비는 끝났으니 코드 맨 아래에 번역할 문장을 넣어 명령을 내립니다.

[multipleTranslator('반갑습니다!');]

결과를 보면 아래와 같이 정상적으로 작동합니다.
L7KXJUDKwkqyXFi3GSCudaqOe0w.jpg텍스트 파일로 만들기
동시에 여러 언어로 번역되는 번역기를 만드는건 성공했습니다. 그런데 저는 문장을 파일에 담아두고 싶습니다. 결과로 나타나는 문장을 파일에 추가만 하면 됩니다.

저는 구현을 위해 log-to-file모듈을 사용했습니다.

[$ npm install --save log-to-file]

이 모듈을 사용하면 간편하게 console.log로 찍히는 텍스트를 파일에 넣어줄 수 있습니다. 먼저 파일 맨 위에 아래의 코드를 추가합니다.

[const log = require('log-to-file');]
코드 중간 부분을 아래와 같이 수정합니다.

2euAgbr0Y2xaofJI2NDEsr42okU.jpg
주의해서 보실 부분은 console.log를 log로 바꾼 점과 쉼표 이후에 파일 이름이 들어갔습니다. '파일 이름'은 생성하거나 텍스트를 추가할 이미 있는 파일명을 넣어주시면 됩니다.

ITa7JT6AJc03kIeYfN7WN2WO8RA.jpg
코드를 실행해보면 이번엔 console.log에 찍히지 않고, 파일이 생성됩니다. 파일을 열어봅니다.

dhwZZjOn4xFFOiql-XJwonYjodQ.jpg
파일에 정상적으로 추가되는걸 확인할 수 있습니다.



통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
도롱롱롱롱롱이
18/03/18 17:48
수정 아이콘
구글 번역 상용 api를 사용하시는 건가요?
시드마이어
18/03/18 18:19
수정 아이콘
저는 npm에서 찾아서 쓴거라서 확인은 안해봤습니다. google-translate-api를 npm에서 검색해보니 자세한 내용은 나와있지 않은것 같구요. 제가 잠깐 검색해본 바로는 구글에서 바로 API를 가져왔다면 인증키가 필요했을텐데 위의 내용에선 인증키가 딱히 필요없습니다. 그런 의미에서 구글에서 제공하는 API를 쓴것 같진 않습니다.
일각여삼추
18/03/18 18:32
수정 아이콘
아마 웹 크롤링을 이용하는 비공식 api일 겁니다
이유진
18/03/18 18:42
수정 아이콘
궁금할땐 github에서 까보면 됩니다.

일반적으로 사용하는 구글 웹 번역기의 내부 api를 그대로 조립해서 사용하는군요.
https://translate.google.co.kr/translate_a/single?client=t&sl=en&tl=ko&hl=ko&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=2&ssel=0&tsel=0&kc=1&tk=789661.687700&q=goods
이 링크를 입력해보시면 goods라는 단어를 번역한 결과값이 파일로 받아집니다
도롱롱롱롱롱이
18/03/18 21:46
수정 아이콘
아 그렇군요 확인 감사합니다. 상용 api 쓰기에는 부담이 되지 않을까 했는데 다른 방식이었군요
18/03/18 18:52
수정 아이콘
일단 번역기로는 아직 퀄리티가 답이 없다는게 문제일것 같네요..

괜히 언어팩 노가다를 하는게 아닌.. ㅠㅠ
시드마이어
18/03/18 21:02
수정 아이콘
무슨 의미로 댓글을 다신건지 모르겠네요. 만든게 형편없다는 뜻인가요? ㅠㅠ
18/03/18 21:34
수정 아이콘
아닙니다. ㅠㅠ 활용하기 어렵다는 이야기얐습미다. 수고하셨습니다
-안군-
18/03/18 20:11
수정 아이콘
구글번역기의 성능이 엄청 좋아진건 맞는데, 그래도 문맥에 맞지 않는 경우가 많고, 특히 한국어 특유의 주어가 생략된(?) 문장의 경우엔 엉뚱한 결과를 내는 경우가 많더군요... ㅠㅠ
그래도 구글은 계속해서 좋은 도구들을 제공해줘서 그저 고마울 뿐... 구글신 차냥해!!
arq.Gstar
18/03/18 21:05
수정 아이콘
구글번역기도 샘플이 어마어마한 언어들에 한해서 체감이 되는것 같더라구요
(한<->영, 한<->일 같은거)
다만 다른 언어에 대해서도 시간문제이니, 시간이 해결해줄....
18/03/18 21:31
수정 아이콘
니코니코동화 영상 코멘트를 실시간으로 번역해주는 걸 만들고 싶은데 어떻게 해야할까요?
시드마이어
18/03/19 20:59
수정 아이콘
코멘트 텍스트를 받아올수만 있으면 빠르게 될 것 같습니다.
영상을 제공하는 서비스에서 해당 데이터를 API로 제공하면 서비스를 쉽게 만들 수 있을겁니다.
18/03/18 22:43
수정 아이콘
예전에 구글 토큰가지고 채팅봇에 번역기능 붙여봤는데 하루 쓰니까 0.01달러 결제되는거보고 바로 떼버렸던 기억이 나네요.
좋은 글 잘 봤습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
76351 [일반] 평범한 유부남의 기계식 키보드 사용기&타건영상_큐센 아레스 Q100 [49] 천둥8981 18/03/27 8981 1
76350 [일반] 게임사들의 흔한 4과문 [49] 파이어군12499 18/03/27 12499 2
76349 [일반] 정봉주 성추행 의혹 사건에 대해 [380] GogoGo17784 18/03/27 17784 15
76348 [일반] 페미니즘과 메갈리즘 [101] 아케이드12800 18/03/27 12800 6
76347 [일반] 여성계, "'국회의원 남녀동수' 개헌안에 넣어야" [136] LunaseA23347 18/03/27 23347 2
76346 [일반] 10년만에...(신차 구입기) [22] estrolls8215 18/03/27 8215 9
76345 [일반] 민주노총 공식 성명에서 '페미=메갈' 인증? [117] 사악군16030 18/03/27 16030 10
76344 [일반] 앞으로 진정한 '호황'이란 있을까? [75] 키무도도13668 18/03/27 13668 8
76343 [일반] 왜 미국은 픽업트럭에 목을 메는가? [28] 아이군11461 18/03/27 11461 5
76342 [일반] 내가 얘기하긴 좀 그런 이야기 [40] Secundo10845 18/03/27 10845 135
76340 [일반] DC팬들의 절규(?)를 이해 할 것 같아요. [52] 잠잘까15265 18/03/27 15265 8
76338 [일반] 장성민, 안철수 인재영입 4호로 바른미래 입당 [69] 자전거도둑14407 18/03/27 14407 0
76337 [일반] 정봉주 의원이 성추행했다고 주장하는 a양이 기자회견을 했군요 [359] kicaesar26360 18/03/27 26360 14
76336 [일반] 솔플에서 트리플,더플로 바뀐 제주도 여행기 (3) [9] 현직백수7397 18/03/27 7397 5
76335 [일반] 태조 왕건 알바 체험기 [22] Secundo12751 18/03/27 12751 56
76334 [일반] 흔하디 흔한 제주도 솔플 여행기 (2)(스압) [5] 현직백수7032 18/03/27 7032 5
76333 [일반] 장애인으로사 참 슲픕니다 [24] 강가딘8806 18/03/27 8806 13
76332 [일반] 김정은 위원장이 베이징을 방문했습니다(수정) [31] 光海10702 18/03/27 10702 0
76331 [일반] [뉴스 모음] 이명박씨가 하면 자원외교, 문재인 대통령이 하면 자기모순 외 [31] The xian18268 18/03/27 18268 56
76330 [일반] 헤어졌습니다... [42] 산타의은밀한유혹11226 18/03/27 11226 6
76328 [일반] 어릴 적 이야기 [8] O2C4R.H.Sierra5690 18/03/26 5690 14
76327 [일반] 노인들의 천국이 되어가는 일본의 교도소.jpg [74] 군디츠마라18877 18/03/26 18877 20
76326 [일반] 통일된 나라에서 판도라의 상자를 여시겠습니까? [30] 치열하게11101 18/03/26 11101 0
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로