Get keyboard language or detect user input language in Android

后端 未结 5 1213
Happy的楠姐
Happy的楠姐 2020-12-15 09:41

Problem Description

I\'m trying to detect current selected language of the keyboard. For that purpose I use following code:

Code

/* Return t         


        
相关标签:
5条回答
  • 2020-12-15 09:50

    No. There's a phone locale, but the keyboard may ignore it by design (many keyboards allow you to switch languages just within the keyboard for bilingual users). There's no API for the keyboard to report it has done so to the OS.

    0 讨论(0)
  • 2020-12-15 09:50

    If you want to get the selected language of your device. This might help u

    Locale.getDefault().getDisplayLanguage();

    You might also do:

    Locale.getDefault().toString() which gives a string that fully identifies the locale, e.g. "en_US".

    0 讨论(0)
  • 2020-12-15 09:53

    1st Method

    To get the selected language of your device. This might help u

    Locale.getDefault().getLanguage()        ---> en     
    Locale.getDefault().getISO3Language()    ---> eng
    Locale.getDefault().getCountry()         ---> US
    Locale.getDefault().getISO3Country()     ---> USA
    Locale.getDefault().toString()           ---> en_US
    Locale.getDefault().getDisplayLanguage() ---> English
    Locale.getDefault().getDisplayCountry()  ---> United States
    Locale.getDefault().getDisplayName()     ---> English (United States)
    

    2nd Method

    You can extract the language from the current locale. You can extract the locale via the standard Java API, or by using the Android Context. For instance, the two lines below are equivalent:

    String locale = context.getResources().getConfiguration().locale.getDisplayName();
    String locale = java.util.Locale.getDefault().getDisplayName();
    
    0 讨论(0)
  • 2020-12-15 10:05

    You can get keyboard language by first detecting the locale of device keyboard and then getting the Locale object from it. For example,

        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        InputMethodSubtype ims = imm.getCurrentInputMethodSubtype();
        String localeString = ims.getLocale();
        Locale locale = new Locale(localeString);
        String currentLanguage = locale.getDisplayLanguage();
    

    Here, currentLanguage will give your keyboard language. Hope this helps.

    0 讨论(0)
  • 2020-12-15 10:06

    Here's what I did to get the available input languages:

    private void printInputLanguages() {
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
       List<InputMethodInfo> ims = imm.getEnabledInputMethodList();
    
       for (InputMethodInfo method : ims) {
           List<InputMethodSubtype> submethods = imm.getEnabledInputMethodSubtypeList(method, true);
           for (InputMethodSubtype submethod : submethods) {
              if (submethod.getMode().equals("keyboard")) {
                 String currentLocale = submethod.getLocale();
                 Log.i(TAG, "Available input method locale: " + currentLocale);
              }
           }
       }
    }
    
    0 讨论(0)
提交回复
热议问题