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달러 결제되는거보고 바로 떼버렸던 기억이 나네요.
좋은 글 잘 봤습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
101194 시리즈 웹툰 "겜바바" 소개 [31] 겨울삼각형2154 24/03/28 2154 1
101193 <악은 존재하지 않는다> - 마침표와 물음표 사이.(노스포) [3] aDayInTheLife2548 24/03/28 2548 1
101192 고질라 x 콩 후기(노스포) [21] OcularImplants3710 24/03/28 3710 2
101191 미디어물의 PC주의에 대해 어떻게 생각하세요? [79] 프뤼륑뤼륑7287 24/03/27 7287 3
101190 버스 매니아도 고개를 저을 대륙횡단 버스노선 [53] Dresden10064 24/03/27 10064 2
101188 미국 볼티모어 다리 붕괴 [17] Leeka9950 24/03/26 9950 0
101187 Farewell Queen of the Sky! 아시아나항공 보잉 747-400(HL7428) OZ712 탑승 썰 [4] 쓸때없이힘만듬3559 24/03/26 3559 5
101186 [스포없음] 넷플릭스 신작 삼체(Three Body Problem)를 보았습니다. [48] 록타이트7921 24/03/26 7921 10
101185 시흥의 열두 딸들 - 아낌없이 주는 시흥의 역사 (5) [3] 계층방정3082 24/03/26 3082 7
101184 [웹소설] '탐관오리가 상태창을 숨김' 추천 [56] 사람되고싶다6639 24/03/26 6639 19
101183 진짜 역대급으로 박 터지는 다음 분기(4월~) 애니들 [58] 대장햄토리6273 24/03/25 6273 2
101182 '브로콜리 너마저'와 기억의 미화. [9] aDayInTheLife3893 24/03/25 3893 5
101181 탕수육 부먹파, 찍먹파의 성격을 통계 분석해 보았습니다. [51] 인생을살아주세요4905 24/03/25 4905 68
101179 한국,중국 마트 물가 비교 [49] 불쌍한오빠6372 24/03/25 6372 7
101177 맥주의 배신? [28] 지그제프8249 24/03/24 8249 2
101175 [스포있음] 천만 돌파 기념 천만관객에 안들어가는 파묘 관객의 후기 [17] Dončić5885 24/03/24 5885 7
101174 [팝송] 아리아나 그란데 새 앨범 "eternal sunshine" [2] 김치찌개2695 24/03/24 2695 4
101173 한 아이의 아빠가 되었습니다. [143] 천우희7096 24/03/23 7096 108
101172 모스크바 콘서트장에서 대규모 총격테러 발생 [36] 복타르9921 24/03/23 9921 0
101170 대한민국은 도덕사회이다. [58] 사람되고싶다8901 24/03/22 8901 30
101168 올해 서울광장서 6월 1일 시민 책읽기 행사 예정 [46] 라이언 덕후7117 24/03/21 7117 1
101167 러닝시 두가지만 조심해도 덜 아프게 뛸수 있다.JPG [43] insane10126 24/03/21 10126 18
101166 이번에 바뀐 성범죄 대법원 판례 논란 [94] 실제상황입니다10746 24/03/21 10746 9
목록 이전 다음
댓글

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