🎱

001 부록) 일반 코드로 번역 프로그램 만들기

0. 스토리

notion imagenotion image
(주) 캣네가게의 주주 총회가 열렸습니다. 안건은 해외 진출입니다.
"해외에서 제품에 대한 수요가 급증하고 있다고 한다냥! 해외 지사를 설립해 보다 빠른 해외 시장 대응을 하는 것이 좋을 것 같다냥!"
또 다른 대리인 이사가 손을 들고 발언을 신청했습니다. 대리인 No.1은 그 이사에게 발언을 하라는 손짓을 했어요.
"세계 각지에 항구 도시를 설립하고, 각 나라에 특산품인 생선을 어업하게 하여 보다 촘촘한 유통망을 설립하는 것을 권한다냥. 우리에 자본력이라면 충분히 100개 이상의 항구 도시를 만들 수 있다냥."
그 이후에도 발언 요청이 있었지만, 대리인 No.1은 생각에 잠겨있었습니다.
"가장 장애가 되는 것은 무엇일까냥?"
모두가 한 목소리로 대답했습니다.
"언어다냥!"

1. 기획

우선 구글API를 사용할 것이라 구글에 있는 번역 프로그램을 분석해보기로 합니다.
웹에서 Google 번역기 검색했을 경우웹에서 Google 번역기 검색했을 경우
웹에서 Google 번역기 검색했을 경우
웹에서 Google 번역기를 열었을 경우웹에서 Google 번역기를 열었을 경우
웹에서 Google 번역기를 열었을 경우
언어를 선택하여 번역할 수 있는 프로그램을 만듭니다. 위 도안을 참고하여 아래와 같이 제작해보려 합니다.
notion imagenotion image

2. 디자인

여기서는 기능을 더 추가하지 않고 줄여보도록 하겠습니다. "꼭 필요한 기능인가?"라는 관점에서 프로그램을 한 번 되돌아 보시는 것도 좋다고 생각합니다. 너무 많은 기능이 사용자에게 복잡하다는 인상을 줄 수 있습니다.
최소한의 기능만 남기고 핵심만 살리기 위해 번역하고자 하는 언어는 보통 한국어 일 것이므로, 아래처럼 언어를 고정시켜 번역하는 프로그램을 만들도록 하겠습니다. 만약 기능을 추가한다면 파일 업로드 해서 파일로 출력해주는 프로그램이라면 좋을 것 같네요.
notion imagenotion image

3. 코드

from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt from googletrans import Translator import sys class 번역프로그램(QWidget): def __init__(self): super().__init__() self.translator = Translator() self.UI초기화() def UI초기화(self): self.label1 = QLabel('한국어', self) self.lable2 = QLabel('영어', self) self.edit1 = QTextEdit(self) self.edit2 = QTextEdit(self) self.transBtn = QPushButton('번역하기', self) self.changeBtn = QPushButton('언어 바꾸기', self) vbox1 = QVBoxLayout() vbox2 = QVBoxLayout() vbox1.addWidget(self.label1,alignment=Qt.AlignCenter) vbox1.addWidget(self.edit1) vbox2.addWidget(self.lable2,alignment=Qt.AlignCenter) vbox2.addWidget(self.edit2) hbox = QHBoxLayout() hbox.addLayout(vbox1) hbox.addLayout(vbox2) layout = QVBoxLayout() layout.addLayout(hbox) layout.addWidget(self.transBtn) layout.addWidget(self.changeBtn) self.setLayout(layout) self.transBtn.clicked.connect(self.translate) self.changeBtn.clicked.connect(self.changeLanguage) self.setWindowTitle('(주)캣네생선 번역기') self.setGeometry(200, 200, 400, 400) self.show() def translate(self): if self.label1.text() == '한국어': text_kor = self.edit1.toPlainText() text_en = self.translator.translate(text_kor,src='ko',dest='en').text self.edit2.setText(text_en) elif self.label1.text() == '영어': text_kor = self.edit1.toPlainText() text_en = self.translator.translate(text_kor,src='en',dest='ko').text self.edit2.setText(text_en) def changeLanguage(self): if self.label1.text() == '한국어': t1, t2 = self.edit1.toPlainText(), self.edit2.toPlainText() self.lable2.setText('한국어') self.label1.setText('영어') self.edit1.setText(t2) self.edit2.setText(t1) else: t1, t2 = self.edit1.toPlainText(), self.edit2.toPlainText() self.lable2.setText('영어') self.label1.setText('한국어') self.edit1.setText(t2) self.edit2.setText(t1) 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 번역프로그램() 프로그램무한반복.exec_()

4. 상세 내용

  • google API를 사용하기 위해 pip 명령어를 사용해 모듈을 설치하고, import 하세요.
    • # 설치 : pip3 install googletrans 또는 pip install googletrans from googletrans import Translator self.translator = Translator()
 
 
  • 간단한 사용법은 아래 코드로 정리해두겠습니다.
    • >>> from googletrans import Translator >>> translator = Translator() >>> translator.translate('안녕하세요.') # <Translated src=ko dest=en text=Good evening. pronunciation=Good evening.> >>> translator.translate('안녕하세요.', dest='ja') # <Translated src=ko dest=ja text=こんにちは。 pronunciation=Kon'nichiwa.> >>> translator.translate('veritas lux mea', src='la') # <Translated src=la dest=en text=The truth is my light pronunciation=The truth is my light>
 
  • 각 버튼이 클릭되면 번역을 실행하거나 언어를 서로 변경해주는 함수와 연결하고 있습니다.
    • self.transBtn.clicked.connect(self.translate) self.changeBtn.clicked.connect(self.changeLanguage)
 
  • 사용자가 입력하는 입력창의 라벨이 한국어라면, 입력창을 플레인 텍스트를 가져오게 됩니다. 번역한 것을 가지고 translator.translate(번역할 글자, src=번역할 언어, dest=번역된 언어).text 매서드를 사용하면 번역된 text를 얻을 수 있습니다. 뒤에 꼭 .text를 붙여야 번역된 글자를 받을 수 있으니 주의해주세요.
    • def translate(self): if self.label1.text() == '한국어': text_kor = self.edit1.toPlainText() text_en = self.translator.translate(text_kor, src='ko', dest='en').text self.edit2.setText(text_en) elif self.label1.text() == '영어': text_kor = self.edit1.toPlainText() text_en = self.translator.translate(text_kor, src='en', dest='ko').text self.edit2.setText(text_en)
 
  • 번역된 언어를 입력창 2에 업데이트 합니다.
    • def changeLanguage(self): if self.label1.text() == '한국어': t1, t2 = self.edit1.toPlainText(), self.edit2.toPlainText() self.lable2.setText('한국어') self.label1.setText('영어') self.edit1.setText(t2) self.edit2.setText(t1) else: t1, t2 = self.edit1.toPlainText(), self.edit2.toPlainText() self.lable2.setText('영어') self.label1.setText('한국어') self.edit1.setText(t2) self.edit2.setText(t1)
 
  • 번역될 언어, 글자 번역될 언어, 글자를 서로 바꿔주는 함수를 구현하면 번역기 프로그램이 완성됩니다.

5. 실행 결과

 
notion imagenotion image
 
notion imagenotion image
notion imagenotion image