Android language translator app Source code.
Dependencies
implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
implementation 'com.google.firebase:firebase-ml-natural-language-translate-model:20.0.8'
implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
implementation 'com.google.firebase:firebase-ml-natural-language-translate-model:20.0.8'
implementation 'com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7'
MainActivity.java
package com.codewithgolap.firetranslator;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions;
import com.google.firebase.ml.naturallanguage.FirebaseNaturalLanguage;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslateLanguage;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslator;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslatorOptions;
import java.util.ArrayList;
import java.util.Locale;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions;
import com.google.firebase.ml.naturallanguage.FirebaseNaturalLanguage;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslateLanguage;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslator;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslatorOptions;
import java.util.ArrayList;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private Spinner fromSpinner, toSpinner;
private TextInputEditText sourceText;
private ImageView micIV;
private MaterialButton translateBtn;
private TextView translateTV;
String[] fromLanguage = {"From", "English", "Afrikaans", "Arabic", "Belarusian", "Bulgarian", "Bengali", "Catalan", "Czech",
"Welsh", "Hindi", "Urdu"};
String[] toLanguage = {"To", "English", "Afrikaans", "Arabic", "Belarusian", "Bulgarian", "Bengali", "Catalan", "Czech",
"Welsh", "Hindi", "Urdu"};
private static final int REQUEST_PERMISSION_CODE = 1;
int languageCode, fromLanguageCode, toLanguageCode = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fromSpinner = findViewById(R.id.idFromSpinner);
toSpinner = findViewById(R.id.idToSpinner);
sourceText = findViewById(R.id.idEditSource);
micIV = findViewById(R.id.idIVMic);
translateBtn = findViewById(R.id.idBtnTranslation);
translateTV = findViewById(R.id.idTranslatedTV);
fromSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
fromLanguageCode = getLanguageCode(fromLanguage[i]);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
ArrayAdapter fromAdapter = new ArrayAdapter(this, R.layout.spinner_item, fromLanguage);
fromAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
fromSpinner.setAdapter(fromAdapter);
toSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
toLanguageCode = getLanguageCode(toLanguage[i]);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
ArrayAdapter toAdapter = new ArrayAdapter(this, R.layout.spinner_item, toLanguage);
toAdapter.setDropDownViewResource(android.layout.simple_spinner_dropdown_item);
micIV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Say something to translate");
try {
startActivityForResult(intent, REQUEST_PERMISSION_CODE);
}catch (Exception e){
e.printStackTrace();
Toast.makeText(MainActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
translateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
translateTV.setVisibility(View.VISIBLE);
translateTV.setText("");
if (sourceText.getText().toString().isEmpty()){
Toast.makeText(MainActivity.this, "Please enter text to translate", Toast.LENGTH_SHORT).show();
}else if (fromLanguageCode == 0){
Toast.makeText(MainActivity.this, "Please select Source Language", Toast.LENGTH_SHORT).show();
}else if (toLanguageCode == 0){
Toast.makeText(MainActivity.this, "Please select the language to make translation", Toast.LENGTH_SHORT).show();
}
}
});
}
private void translateText(int fromLanguageCode, int toLanguageCode, String source) {
translateTV.setText("Downloading model, please wait...");
FirebaseTranslatorOptions options = new FirebaseTranslatorOptions.Builder()
.setSourceLanguage(fromLanguageCode)
.setTargetLanguage(toLanguageCode)
.build();
FirebaseTranslator translator = FirebaseNaturalLanguage.getInstance().getTranslator(options);
FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder().build();
translator.downloadModelIfNeeded(conditions).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
translateTV.setText("Translation..");
translator.translate(source).addOnSuccessListener(new OnSuccessListener<String>() {
@Override
public void onSuccess(String s) {
translateTV.setText(s);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Failed to translate!! try again", Toast.LENGTH_SHORT).show();
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Failed to download model!! Check your internet connection.", Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_PERMISSION_CODE){
ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
}
}
// String[] fromLanguage = {"From", "English", "Afrikaans", "Arabic", "Belarusian", "Bulgarian", "Bengali", "Catalan", "Czech",
// "Welsh", "Hindi", "Urdu"};
private int getLanguageCode(String language) {
int languageCode = 0;
switch (language){
case "English":
languageCode = FirebaseTranslateLanguage.EN;
break;
case "Afrikaans":
languageCode = FirebaseTranslateLanguage.AF;
break;
case "Arabic":
languageCode = FirebaseTranslateLanguage.AR;
break;
case "Belarusian":
languageCode = FirebaseTranslateLanguage.BE;
break;
case "Bulgarian":
languageCode = FirebaseTranslateLanguage.BG;
break;
case "Bengali":
languageCode = FirebaseTranslateLanguage.BN;
break;
case "Catalan":
languageCode = FirebaseTranslateLanguage.CA;
break;
case "Czech":
languageCode = FirebaseTranslateLanguage.CS;
break;
case "Welsh":
languageCode = FirebaseTranslateLanguage.CY;
break;
case "Hindi":
languageCode = FirebaseTranslateLanguage.HI;
break;
case "Urdu":
languageCode = FirebaseTranslateLanguage.UR;
break;
default:
languageCode = 0;
}
return languageCode;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"
android:background="@color/offWhite">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/translate"
android:layout_gravity="center"
android:layout_marginEnd="4dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="FireTranslator"
android:textColor="@color/black"
android:textStyle="bold"
android:layout_marginStart="4dp"
android:textSize="23sp"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="40dp"
android:weightSum="3"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/background"
android:elevation="4dp">
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/idFromSpinner"
android:layout_margin="3dp"
android:padding="3dp"
android:layout_gravity="center"/>
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/exchange"
android:layout_gravity="center"/>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/idToSpinner"
android:layout_margin="3dp"
android:padding="3dp"
android:layout_gravity="center"/>
</LinearLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:padding="5dp"
app:hintEnabled="false"
android:layout_width="match_parent"
android:layout_height="250dp"
app:boxBackgroundMode="none"
android:elevation="8dp">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/idEditSource"
android:hint="Enter Text"
android:ems="10"
android:importantForAutofill="no"
android:inputType="textImeMultiLine|textMultiLine"
android:textColor="@color/black"
android:textSize="19sp"
android:gravity="top"
android:background="@drawable/background"
android:textColorHint="@color/colorSecondary"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:id="@+id/idBtnTranslation"
android:text="Translate"
android:textSize="19sp"
android:textAllCaps="false"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/idTranslatedTV"
android:text="Translated text here"
android:background="@drawable/background"
android:elevation="3dp"
android:layout_marginTop="10dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_gravity="center"
android:textAlignment="center"
android:padding="16sp"
android:textSize="16sp"
android:textColor="@color/colorPrimary"
android:letterSpacing="0.03"
android:visibility="gone"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Or"
android:textSize="16sp"
android:textColor="@color/colorPrimaryDark"
android:layout_gravity="center"
android:layout_marginTop="20dp"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/voice"
android:padding="4dp"
android:id="@+id/idIVMic"
android:layout_gravity="center"
android:layout_marginTop="20dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Say something."
android:textSize="16sp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:textAlignment="center"/>
</LinearLayout>
</ScrollView>
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"
android:background="@color/offWhite">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@drawable/translate"
android:layout_gravity="center"
android:layout_marginEnd="4dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="FireTranslator"
android:textColor="@color/black"
android:textStyle="bold"
android:layout_marginStart="4dp"
android:textSize="23sp"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="40dp"
android:weightSum="3"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/background"
android:elevation="4dp">
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/idFromSpinner"
android:layout_margin="3dp"
android:padding="3dp"
android:layout_gravity="center"/>
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/exchange"
android:layout_gravity="center"/>
<Spinner
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/idToSpinner"
android:layout_margin="3dp"
android:padding="3dp"
android:layout_gravity="center"/>
</LinearLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="20dp"
android:padding="5dp"
app:hintEnabled="false"
android:layout_width="match_parent"
android:layout_height="250dp"
app:boxBackgroundMode="none"
android:elevation="8dp">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/idEditSource"
android:hint="Enter Text"
android:ems="10"
android:importantForAutofill="no"
android:inputType="textImeMultiLine|textMultiLine"
android:textColor="@color/black"
android:textSize="19sp"
android:gravity="top"
android:background="@drawable/background"
android:textColorHint="@color/colorSecondary"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:id="@+id/idBtnTranslation"
android:text="Translate"
android:textSize="19sp"
android:textAllCaps="false"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/idTranslatedTV"
android:text="Translated text here"
android:background="@drawable/background"
android:elevation="3dp"
android:layout_marginTop="10dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_gravity="center"
android:textAlignment="center"
android:padding="16sp"
android:textSize="16sp"
android:textColor="@color/colorPrimary"
android:letterSpacing="0.03"
android:visibility="gone"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Or"
android:textSize="16sp"
android:textColor="@color/colorPrimaryDark"
android:layout_gravity="center"
android:layout_marginTop="20dp"/>
<ImageView
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/voice"
android:padding="4dp"
android:id="@+id/idIVMic"
android:layout_gravity="center"
android:layout_marginTop="20dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Say something."
android:textSize="16sp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:textAlignment="center"/>
</LinearLayout>
</ScrollView>
0 Comments
Please do not enter any types of spam links in the comment section.