web-dev-qa-db-fra.com

Comment définir la langue dans la reconnaissance vocale sur Android?

J'ai travaillé sur l'API de reconnaissance vocale sous Android et découvert que les résultats de la parole varient en fonction de la modification des paramètres de langue. Y a-t-il un moyen de le définir par programme? ou y a-t-il une intention d'attaquer l'écran des paramètres de la parole ou quoi d'autre? note: j'ai essayé d'utiliser cette intention supplémentaire:

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

mais c'était inefficace

17
Mr.Me

Comme le dit Pargat, cela le fera:

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

En outre, votre application peut interroger la liste des langues prises en charge en envoyant une diffusion ordonnée par RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS comme suit:

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

où LanguageDetailsChecker ressemble à ceci:

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);
        }
    }
}

Pour le code complet, consultez ce projet github: https://github.com/gast-lib

43
gregm

il n'y a pas de solution mais un hackaround ...

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

vérifier ici l'histoire complète.

12
Arnav M.

Cela fonctionnera:

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

Vous devez utiliser "en_US" au lieu de "en-US". Le premier est le bon format de balise de paramètres régionaux Java.

Il est suggéré que vous utilisiez 

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

pour éviter de se souvenir de tels détails.

9
orina1123

Avez-vous essayé ceci:

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

Enfin, mon application a restreint les résultats de la reconnaissance vocale à une langue spécifiée (par exemple, "ja" pour le japonais ou "fr" pour le français) en ajoutant les 3 extras suivants:

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);

J'espère que ça aide quelqu'un.

6
kwishnu

J'ai essayé d'utiliser

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

mais cela n’a pas fonctionné pour moi (n’a pas pris la langue du système). ici comme ceci:

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

Ce code sert à définir la langue de reconnaissance vocale  

  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);
0
dileep krishnan