@@ -146,7 +146,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
146
146
appUiLanguageListPreference .setSummary (Locale .getDefault ().getDisplayLanguage ());
147
147
} else {
148
148
// If any language is selected by user previously, use it
149
- Locale defLocale = new Locale (languageCode );
149
+ Locale defLocale = createLocale (languageCode );
150
150
appUiLanguageListPreference .setSummary ((defLocale ).getDisplayLanguage (defLocale ));
151
151
}
152
152
appUiLanguageListPreference .setOnPreferenceClickListener (new OnPreferenceClickListener () {
@@ -167,7 +167,7 @@ public boolean onPreferenceClick(Preference preference) {
167
167
descriptionLanguageListPreference .setSummary (Locale .getDefault ().getDisplayLanguage ());
168
168
} else {
169
169
// If any language is selected by user previously, use it
170
- Locale defLocale = new Locale (languageCode );
170
+ Locale defLocale = createLocale (languageCode );
171
171
descriptionLanguageListPreference .setSummary (defLocale .getDisplayLanguage (defLocale ));
172
172
}
173
173
descriptionLanguageListPreference .setOnPreferenceClickListener (new OnPreferenceClickListener () {
@@ -361,7 +361,7 @@ public void onItemClick(AdapterView<?> adapterView, View view, int i,
361
361
}
362
362
recentLanguagesDao .addRecentLanguage (new Language (languageName , languageCode ));
363
363
saveLanguageValue (languageCode , keyListPreference );
364
- Locale defLocale = new Locale (languageCode );
364
+ Locale defLocale = createLocale (languageCode );
365
365
if (keyListPreference .equals ("appUiDefaultLanguagePref" )) {
366
366
appUiLanguageListPreference .setSummary (defLocale .getDisplayLanguage (defLocale ));
367
367
setLocale (requireActivity (), languageCode );
@@ -426,7 +426,7 @@ private void onRecentLanguageClicked(String keyListPreference, Dialog dialog, Ad
426
426
recentLanguagesDao .addRecentLanguage (
427
427
new Language (recentLanguageName , recentLanguageCode ));
428
428
saveLanguageValue (recentLanguageCode , keyListPreference );
429
- final Locale defLocale = new Locale (recentLanguageCode );
429
+ final Locale defLocale = createLocale (recentLanguageCode );
430
430
if (keyListPreference .equals ("appUiDefaultLanguagePref" )) {
431
431
appUiLanguageListPreference .setSummary (defLocale .getDisplayLanguage (defLocale ));
432
432
setLocale (requireActivity (), recentLanguageCode );
@@ -455,7 +455,7 @@ public void setLocale(final Activity activity, String userSelectedValue) {
455
455
if (userSelectedValue .equals ("" )) {
456
456
userSelectedValue = Locale .getDefault ().getLanguage ();
457
457
}
458
- final Locale locale = new Locale (userSelectedValue );
458
+ final Locale locale = createLocale (userSelectedValue );
459
459
Locale .setDefault (locale );
460
460
final Configuration configuration = new Configuration ();
461
461
configuration .locale = locale ;
@@ -467,6 +467,25 @@ public void setLocale(final Activity activity, String userSelectedValue) {
467
467
editor .apply ();
468
468
}
469
469
470
+ /**
471
+ * Create Locale based on different types of language codes
472
+ * @param languageCode
473
+ * @return Locale and throws error for invalid language codes
474
+ */
475
+ public static Locale createLocale (String languageCode ) {
476
+ String [] parts = languageCode .split ("-" );
477
+ switch (parts .length ) {
478
+ case 1 :
479
+ return new Locale (parts [0 ]);
480
+ case 2 :
481
+ return new Locale (parts [0 ], parts [1 ]);
482
+ case 3 :
483
+ return new Locale (parts [0 ], parts [1 ], parts [2 ]);
484
+ default :
485
+ throw new IllegalArgumentException ("Invalid language code: " + languageCode );
486
+ }
487
+ }
488
+
470
489
/**
471
490
* Save userselected language in List Preference
472
491
* @param userSelectedValue
0 commit comments