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달러 결제되는거보고 바로 떼버렸던 기억이 나네요.
좋은 글 잘 봤습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
79875 [일반] 셧다운을 볼모로한 트럼프의 도박은 실패한것같습니다. [26] 키토10482 19/01/26 10482 1
79874 [일반] 혼란 속에서 베네수엘라의 대통령이 두 명이 되어버렸습니다. [51] Misaki Mei13258 19/01/26 13258 1
79873 [일반] 결혼이 스트레스인 이유 [113] 매일푸쉬업15614 19/01/26 15614 14
79872 [일반] 고졸취업자 하락, 정부의 해결책은 9급 고졸채용?! [165] 사진첩14609 19/01/26 14609 4
79871 [일반] 한국은 정말 아시아 축구의 최강국인가? [38] 시간11018 19/01/26 11018 7
79870 [일반] 어쩌면 독일전 승리와 아시안게임 금메달을 그리워 하게 될 날이 올지도 모르겠습니다. [77] bifrost12059 19/01/26 12059 0
79869 [일반] [라이온킹 인터내셔널] 완벽하지 않아서 더욱 완벽해지는 뮤지컬.. [27] Restar10330 19/01/25 10330 6
79868 [일반] 선관위원 임명에 대응해 릴레이 단식을 선언한 자유한국당 [110] 츠라빈스카야11706 19/01/25 11706 7
79866 [일반] 20대 백수의 생애 첫 입사 면접 후기 [13] M247505 19/01/25 7505 6
79865 [일반] 성희롱은 정말 피해자의 말만으로 인정되는가? -> 어렵습니다. [111] 삭제됨14264 19/01/25 14264 9
79864 [일반] 음모와 배신이 난무하고 가짜뉴스가 진짜뉴스로 둔갑하는 세상 [102] 라이츄백만볼트14752 19/01/25 14752 9
79863 [일반] 한국에서 최고의 범죄도시는 어디일까요? 범죄밀도로 보는 가장 위험한 도시(내용 추가) [120] 삭제됨16342 19/01/25 16342 17
79862 [일반] PGR21 개발운영진을 추가 모집합니다. [37] 당근병아리8038 19/01/17 8038 4
79861 [일반] 전국 고속도로 휴게소에서 25일부터 '무료 와이파이' [36] 홍승식10120 19/01/25 10120 2
79860 [일반] 손석희 사장 너무 재미있게 돌아가는군요 [323] 교육공무원31636 19/01/25 31636 20
79859 [일반] "손석희 앵커, 과거의 자신과 싸우고 계시네요"…박진성 시인, 폭행 논란 손석희에게 보내는 시 공개 [80] 새강이15568 19/01/25 15568 85
79858 [일반] 피해자의 목소리가 증거이면 안되는 건가요? (아침에 읽고 입장 정리하였습니다.) [270] 삭제됨24394 19/01/25 24394 24
79857 [일반] 운동을 하면 자신감이 생긴다는데... [33] 해바라기씨12313 19/01/25 12313 17
79856 [일반] 박창진, ‘땅콩 회항’ 후 5년의 고통을 말하다 [13] 어강됴리9635 19/01/25 9635 23
79855 [일반] [영화후기] 극한직업을 보고 왔습니다. (스포 X) [28] 율리우스카이사르8650 19/01/25 8650 2
79853 [일반] 원치않는 신체접촉내지 신체평가는 동성간에도 성희롱에 준하는 처벌이 필요하다 [26] 삭제됨7112 19/01/24 7112 6
79852 [일반] 나도 모르게 물이 엎질러지는 시대 [11] 잰지흔7165 19/01/24 7165 0
79851 [일반] 연애 포기자들이 생길 수 밖에 없는 이유 [23] 라울리스타20338 19/01/24 20338 47
목록 이전 다음
댓글

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