Mr.Me
Mr.Me

Reputation: 9276

How to set the language in speech recognition on android?

I've been working on speech Recognition API in android and found out that the speech results vary allot when the language settings are changed , is there a way to set it programmatically ? or is there an intent to lunch the speech language settings screen ? or what else ? note: I tried to use this intent extra:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");

but it was ineffective

Upvotes: 23

Views: 50854

Answers (8)

dileep krishnan
dileep krishnan

Reputation: 344

this code is to set the language in speech recognization

  String languagePref = "te-IN";//this is for telugu

     //kannada --->  "kn-IN"
     //tamil--->  "ta-IN".....

            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                    RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref);

Upvotes: 2

Oleg SH
Oleg SH

Reputation: 473

I tried to use

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());

but it did not work for me (did not take the system language). Helped here like this:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());

Upvotes: 3

user5278060
user5278060

Reputation: 11

I used this code:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");

Hope you can run your app now.

Upvotes: 0

Arnav M.
Arnav M.

Reputation: 2609

there is no solution but a hackaround...

intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});

check here the complete story.

Upvotes: 12

gregm
gregm

Reputation: 12159

As pargat says, this will do it:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");

Also, your app can query for the list of supported languages by sending a RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS ordered broadcast like so:

    Intent detailsIntent =  new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
    sendOrderedBroadcast(
            detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null);

where LanguageDetailsChecker is something like this:

public class LanguageDetailsChecker extends BroadcastReceiver
{
    private List<String> supportedLanguages;

    private String languagePreference;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle results = getResultExtras(true);
        if (results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE))
        {
            languagePreference =
                    results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE);
        }
        if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES))
        {
            supportedLanguages =
                    results.getStringArrayList(
                            RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
        }
    }
}

For the complete code check out this github project: https://github.com/gast-lib

Upvotes: 50

kwishnu
kwishnu

Reputation: 1851

I finally got my app to restrict voice recognition results to a specified language input (handing it, e.g., "ja" for Japanese or "fr" for French) by adding all 3 of the following extras:

String languagePref = "de";//or, whatever iso code...
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, languagePref); 
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, languagePref);

Hope this helps someone.

Upvotes: 6

orina1123
orina1123

Reputation: 131

This will work:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US");

You have to use "en_US" instead of "en-US". The former is the right format of Java locale tag.

It is suggested that you use

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString());

to avoid remembering such detail.

Upvotes: 13

Pargat
Pargat

Reputation: 769

Have you tried this:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");

Upvotes: 8

Related Questions