How to get the device locale after changing the application locale

后端 未结 4 1055
滥情空心
滥情空心 2021-01-02 08:36

I am changing the application locale based on user choice. Independent of device locale.

using

public void setDefaultLocale(Context context, String          


        
相关标签:
4条回答
  • 2021-01-02 09:00

    If you need to support below Android 7.0 - Nougat (API level 24) you can use something like this:

    @SuppressWarnings("deprecation")
    @SuppressLint("NewApi")
    // ToDo: Adjust this method once the target API is 24 or higher!
    private Locale getLocale()
    {
      if(Build.VERSION.SDK_INT >= 24)
      {
        return Resources.getSystem().getConfiguration().getLocales().get(0);
      }
    
      else
      {
        return Resources.getSystem().getConfiguration().locale;
      }
    }
    

    Note the annotation regarding deprecation and NewApi. Adjust this method once you target API 24 or higher. Inspired by this answer.

    0 讨论(0)
  • 2021-01-02 09:08

    I asked something similar and found this answer, sorry if it is late:

    To find the system locale use:

    defaultLocale = Resources.getSystem().getConfiguration().locale;
    

    It gets the system locale, no matter which default locale is set for the app/activity.

    0 讨论(0)
  • 2021-01-02 09:19

    I am absolutely unsure how portable this is to different devices:

    try {
        Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"});
        String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
        exec.destroy();
        Log.e("", "Device locale: "+locale);
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    And if you want the country part: persist.sys.country

    0 讨论(0)
  • 2021-01-02 09:23

    for those whom are using Daniel Fekete 's solution which is :

    Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"});
    String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
    exec.destroy();
    

    Be aware of that locale might be EMPTY on latest Android Api(+21)! instead of using persist.sys.language use persist.sys.locale

    exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"});
    locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
    exec.destroy();
    
    0 讨论(0)
提交回复
热议问题