본문 바로가기

인터넷/통신

Google Translate API를 이용한 간단 번역기 만들기

이번 강좌에서는 구글번역(Google Translate) API를 이용하여 간단한 번역기를 만드는 것에 대해 알아보도록 하겠습니다.
Google Translate API를 사용하기 위해서는 우선 외부 라이브러리를 추가해주어야 합니다. 이곳을 방문하여 해당 라이브러리 파일을 받도록 합니다.

라이브러리 파일을 받은 후, 새 프로젝트를 생성합니다.

[어플리케이션 정보]

액티비티
  • SimpleTranslate (SimpleTranslate.java)

레이아웃
  • main.xml (SimpleTranslate)

권한 (uses-permission)
  • android.permission.INTERNET

외부 라이브러리 (uses-library)
  • 메니페스트 파일에는 선언하지 않음

API Level
  • 7 : Android 2.1

어플리케이션 소스 :
프로젝트를 생성한 후, 프로젝트 속성을 클릭하여 사용할 라이브러리에 Google Translate 라이브러리를 추가하여야 합니다. 프로젝트를 선택 후 오른쪽 버튼 - Properties 버튼을 눌러 프로젝트 속성 창을 엽니다.

주의 : 위의 소스 파일을 다운로드하여 실습을 진행하시는 분들은 라이브러리 파일의 위치를 변경해주셔야 합니다.


Java Build Path 항목을 선택한 후, Libraries 탭을 선택하고 Add External JARs... 버튼을 클릭합니다.


다운로드한 라이브러리 파일을 선택합니다.


위와 같이 라이브러리가 추가된 것을 확인할 수 있습니다. 이것으로 구글번역 API를 쓰기 위한 준비가 모두 끝났습니다.
그럼 본격적으로 어플리케이션을 구성해보도록 하겠습니다. 우리가 만들어볼 어플리케이션의 모습은 아래와 같습니다.



[main.xml]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<TextView  
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="Text to translate :"/>
	    
	<EditText android:layout_height="wrap_content" 
		android:id="@+id/input_text" 
		android:layout_width="fill_parent" 
		android:hint="Enter text to translate"/>
	<Button android:layout_width="wrap_content" 
		android:layout_height="wrap_content" 
		android:layout_gravity="right" 
		android:text="Translate to Korean" 
		android:id="@+id/translateButton"/>
	
	<TextView android:layout_width="fill_parent" 
		android:layout_height="fill_parent" 
		android:id="@+id/translated_text"/>
</LinearLayout>

[SimpleTranslate.java]
package com.androidhuman.SimpleTranslate;

import com.google.api.translate.Language;
import com.google.api.translate.Translate;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SimpleTranslate extends Activity {
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final EditText inputText = (EditText)findViewById(R.id.input_text);
        final TextView translatedTextView = (TextView)findViewById(R.id.translated_text);
                
        Translate.setHttpReferrer("http://androidhuman.tistory.com");
        Button translateButton = (Button)findViewById(R.id.translateButton);       
        translateButton.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				String from = inputText.getText().toString();
				String after = new String();
				
				try{
					after = Translate.execute(from, Language.AUTO_DETECT, Language.KOREAN);
				
				}catch(Exception e){
					e.printStackTrace();
				}
				translatedTextView.setText(after);
			}
        	
        });
        }
}

기본적인 동작 방식은 EditText에 번역할 텍스트를 입력 받고, 번역 버튼을 누르면 번역된 텍스트가 아래의 TextView에 표시되는 방식입니다. 번역 수행은, 입력받은 문장의 언어가 어떤 것이든간에 구글 번역에서 번역 가능한 언어라면 모두 한국어로 번역을 수행합니다. 

기본적으로 EditText에서 텍스트를 받아오는 과정과 버튼의 리스너를 등록하는 방법에 대해서는 잘 알고 계시리라 믿고, 실제로 구글 번역 API를 사용하는 부분에 대해서만 알아보도록 하겠습니다.

Translate.setHttpReferrer("http://androidhuman.tistory.com");

onCreate() 메소드의 중간 쯤에 위와 같은 코드가 있습니다. 번역 API를 사용하기 전에 꼭 적어주어야 하는 메소드입니다. 아마 API Key와 비슷한 역할을 하는 것으로 추정됩니다 -_- (이 코드를 빼먹으면 번역이 수행되지 않습니다)

다음, 실제로 번역을 수행하는 부분을 보도록 하죠.

	String from = inputText.getText().toString();
	String after = new String();
	
	try{
		after = Translate.execute(from, Language.AUTO_DETECT, Language.KOREAN);
	
	}catch(Exception e){
		e.printStackTrace();
	}
	translatedTextView.setText(after);

위의 코드는 버튼 이벤트를 처리하는 onClick() 메소드의 내부에 구현되어 있는 코드입니다. EditText 위젯에 입력된 문장을 받아오고, 그 문장을 바탕으로 하여 번역을 수행하고 있습니다.

문장을 번역하려면 execute() 메소드를 사용하면 됩니다.

API
public String execute(String text, Language from, Language to)

from 언어로 작성된 text 문자열을 to 언어로 번역합니다. 번역된 텍스트를 반환합니다.
번역할 문장의 언어가 정해져 있지 않을 경우 자동 감지 (Language.AUTO_DETECT)를 사용할 수 있습니다.

위의 코드에서는 입력된 문장에 대해 한국어로 번역을 수행합니다. 입력된 언어에 대해 언어를 지정하지 않고 자동 자동으로 감지하도록 구현하였습니다.

입력받은 문장을 구글 서버로 보낸 후 그 결과를 다시 받아와 표시하게 되므로 인터넷 접속이 필요합니다. 따라서 메니페스트에 인터넷 사용 권한 (android.permission.INTERNET) 을 필히 추가해주어야 합니다.

마지막으로, 구글 번역을 통해 받아온 결과를 TextView에 표시해주도록 해주었습니다.
그럼, 어플리케이션을 실행시켜 확인해볼까요? 아래에서는 automat(독일어)에 대한 번역 결과를 확인해 보았습니다.