I. Giới thiệu.
Chào các bạn, Google Translate là một trong những công cụ phổ biến nhất hiện nay, và hầu như ai trong chúng ta cũng đã dùng đến nó. Trong bài viết này, chúng ta sẽ cùng sử dụng Google Translate API để xây dựng một ứng dụng dịch ngôn ngữ cho riêng mình, đặc biệt API này được cung cấp miễn phí và không giới hạn lượt request, hãy cùng bắt đầu !
II. Configuration
- Đầu tiên, tạo một project mới trong android studio bằng cách chọn File > New project
- Tiếp theo, đi đến file Android Manifest và thêm dòng sau để khai báo quyền truy cập Internet.
<uses-permission android:name="android.permission.INTERNET"/>
- Sau đó chuyển đến file Gradle và thêm dòng sau
useLibrary 'org.apache.http.legacy'
III. Implement
Bây giờ, để đơn giản chúng ta sẽ tạo class translate_api extends AsyncTask để có thể tạo kết nối Network gọi đến google translate API. Nếu bạn muốn tìm hiểu thêm về AsyncTask thì có thể xem ở đây
Source code:
public class translate_api extends AsyncTask<String, String, String> {
private OnTranslationCompleteListener listener;
@Override
protected String doInBackground(String... strings) {
String[] strArr = (String[]) strings;
String str = "";
try {
String encode = URLEncoder.encode(strArr[0], "utf-8");
StringBuilder sb = new StringBuilder();
sb.append("https://translate.googleapis.com/translate_a/single?client=gtx&sl=");
sb.append(strArr[1]);
sb.append("&tl=");
sb.append(strArr[2]);
sb.append("&dt=t&q=");
sb.append(encode);
HttpResponse execute = new DefaultHttpClient().execute(new HttpGet(sb.toString()));
StatusLine statusLine = execute.getStatusLine();
if (statusLine.getStatusCode() == 200) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
execute.getEntity().writeTo(byteArrayOutputStream);
String byteArrayOutputStream2 = byteArrayOutputStream.toString();
byteArrayOutputStream.close();
JSONArray jSONArray = new JSONArray(byteArrayOutputStream2).getJSONArray(0);
String str2 = str;
for (int i = 0; i < jSONArray.length(); i++) {
JSONArray jSONArray2 = jSONArray.getJSONArray(i);
StringBuilder sb2 = new StringBuilder();
sb2.append(str2);
sb2.append(jSONArray2.get(0).toString());
str2 = sb2.toString();
}
return str2;
}
execute.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
} catch (Exception e) {
Log.e("translate_api",e.getMessage());
listener.onError(e);
return str;
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
listener.onStartTranslation();
}
@Override
protected void onPostExecute(String text) {
listener.onCompleted(text);
}
public interface OnTranslationCompleteListener{
void onStartTranslation();
void onCompleted(String text);
void onError(Exception e);
}
public void setOnTranslationCompleteListener(OnTranslationCompleteListener listener){
this.listener=listener;
}
}
Bước tiếp theo, chúng ta sẽ tạo giao diện đơn giản để dịch văn bản cho ứng dụng. Trong layout này, ta có ba EditText, một TextView, và một Button. EditText đầu tiên dành cho text input, EditText thứ hai là để lấy mã ngôn ngữ cho văn bản sẽ được dịch, EditText thứ ba dành cho mã ngôn ngữ mà bạn muốn dịch thành.
Source code:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/text"
android:hint="Enter text here.."
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/from_lang"
android:hint="Enter from language code"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/to_lang"
android:hint="Enter to language code"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:text="Translated Text:"
android:textSize="25sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/translated_text"
android:padding="10dp"
android:textSize="25sp"
android:layout_width="match_parent"
android:minHeight="100dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnTranslate"
android:text="Translate"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
</ScrollView>
Cuối cùng là sử dụng class translate_api trong class MainActivity
public class MainActivity extends AppCompatActivity {
EditText text,fromLangCode,toLangCode;
TextView translatedText;
Button btnTranslate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUi();
btnTranslate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
translate_api translate=new translate_api();
translate.setOnTranslationCompleteListener(new translate_api.OnTranslationCompleteListener() {
@Override
public void onStartTranslation() {
// here you can perform initial work before translated the text like displaying progress bar
}
@Override
public void onCompleted(String text) {
// "text" variable will give you the translated text
translatedText.setText(text);
}
@Override
public void onError(Exception e) {
}
});
translate.execute(text.getText().toString(),fromLangCode.getText().toString(),toLangCode.getText().toString());
}
});
}
private void initUi() {
text=findViewById(R.id.text);
fromLangCode=findViewById(R.id.from_lang);
toLangCode=findViewById(R.id.to_lang);
translatedText=findViewById(R.id.translated_text);
btnTranslate=findViewById(R.id.btnTranslate);
}
}
IV. Language ISO Code list
Thay vì phải nhập chính xác từng loại ngôn ngữ, có thể nhập sai hoặc bất tiện với một số loại có tên dài, thì chúng ta có danh sách code iso cho từng ngôn ngữ, điều này giúp chúng ta dễ dàng hơn trong việc dịch, danh sách khá dài nhưng đầy đủ.
Abkhazian
ab
Afar
aa
Afrikaans
af
Akan
ak
Albanian
sq
Amharic
am
Arabic
ar
Aragonese
an
Armenian
hy
Assamese
as
Avaric
av
Avestan
ae
Aymara
ay
Azerbaijani
az
Bambara
bm
Bashkir
ba
Basque
eu
Belarusian
be
Bengali (Bangla)
bn
Bihari
bh
Bislama
bi
Bosnian
bs
Breton
br
Bulgarian
bg
Burmese
my
Catalan
ca
Chamorro
ch
Chechen
ce
Chichewa, Chewa, Nyanja
ny
Chinese
zh
Chinese (Simplified)
zh-Hans
Chinese (Traditional)
zh-Hant
Chuvash
cv
Cornish
kw
Corsican
co
Cree
cr
Croatian
hr
Czech
cs
Danish
da
Divehi, Dhivehi, Maldivian
dv
Dutch
nl
Dzongkha
dz
English
en
Esperanto
eo
Estonian
et
Ewe
ee
Faroese
fo
Fijian
fj
Finnish
fi
French
fr
Fula, Fulah, Pulaar, Pular
ff
Galician
gl
Gaelic (Scottish)
gd
Gaelic (Manx)
gv
Georgian
ka
German
de
Greek
el
Greenlandic
kl
Guarani
gn
Gujarati
gu
Haitian Creole
ht
Hausa
ha
Hebrew
he
Herero
hz
Hindi
hi
Hiri Motu
ho
Hungarian
hu
Icelandic
is
Ido
io
Igbo
ig
Indonesian
id, in
Interlingua
ia
Interlingue
ie
Inuktitut
iu
Inupiak
ik
Irish
ga
Italian
it
Japanese
ja
Javanese
jv
Kalaallisut, Greenlandic
kl
Kannada
kn
Kanuri
kr
Kashmiri
ks
Kazakh
kk
Khmer
km
Kikuyu
ki
Kinyarwanda (Rwanda)
rw
Kirundi
rn
Kyrgyz
ky
Komi
kv
Kongo
kg
Korean
ko
Kurdish
ku
Kwanyama
kj
Lao
lo
Latin
la
Latvian (Lettish)
lv
Limburgish ( Limburger)
li
Lingala
ln
Lithuanian
lt
Luga-Katanga
lu
Luganda, Ganda
lg
Luxembourgish
lb
Manx
gv
Macedonian
mk
Malagasy
mg
Malay
ms
Malayalam
ml
Maltese
mt
Maori
mi
Marathi
mr
Marshallese
mh
Moldavian
mo
Mongolian
mn
Nauru
na
Navajo
nv
Ndonga
ng
Northern Ndebele
nd
Nepali
ne
Norwegian
no
Norwegian bokmål
nb
Norwegian nynorsk
nn
Nuosu
ii
Occitan
oc
Ojibwe
oj
Old Church Slavonic, Old Bulgarian
cu
Oriya
or
Oromo (Afaan Oromo)
om
Ossetian
os
Pāli
pi
Pashto, Pushto
ps
Persian (Farsi)
fa
Polish
pl
Portuguese
pt
Punjabi (Eastern)
pa
Quechua
qu
Romansh
rm
Romanian
ro
Russian
ru
Sami
se
Samoan
sm
Sango
sg
Sanskrit
sa
Serbian
sr
Serbo-Croatian
sh
Sesotho
st
Setswana
tn
Shona
sn
Sichuan Yi
ii
Sindhi
sd
Sinhalese
si
Siswati
ss
Slovak
sk
Slovenian
sl
Somali
so
Southern Ndebele
nr
Spanish
es
Sundanese
su
Swahili (Kiswahili)
sw
Swati
ss
Swedish
sv
Tagalog
tl
Tahitian
ty
Tajik
tg
Tamil
ta
Tatar
tt
Telugu
te
Thai
th
Tibetan
bo
Tigrinya
ti
Tonga
to
Tsonga
ts
Turkish
tr
Turkmen
tk
Twi
tw
Uyghur
ug
Ukrainian
uk
Urdu
ur
Uzbek
uz
Venda
ve
Vietnamese
vi
Volapük
vo
Wallon
wa
Welsh
cy
Wolof
wo
Western Frisian
fy
Xhosa
xh
Yiddish
yi, ji
Yoruba
yo
Zhuang, Chuang
za
Zulu
zu
V. Conclusion
Như vậy là chúng ta đã thực hiện xong các bước sử dụng Google Translation API để xây dựng app dịch ngôn ngữ cho riêng mình, các bạn cũng có thể custom lại giao diện phù hợp theo ý muốn. Hy vọng các bạn có thể sử dụng nó cho riêng mình hoặc xây dựng như một phần chức năng cho app của các bạn (như là đọc sách, tìm kiếm, dịch văn bản...)
Cảm ơn các bạn đã đọc, xin chào và hẹn gặp lại.
Source code đầy đủ: Link github
Bài viết có tham khảo nguồn