@@ -64,14 +64,18 @@ private static HashMap<String, Language> getAllLanguages() {
6464 }
6565
6666 public static void resetLanguages () {
67- String currentLocale = getCurrentLocale ();
68- mLanguagesCache .values ().stream ().forEach ((language ) -> {
69- language .setPreferred (language .getId ().equals (currentLocale ));
67+ mLanguagesCache .values ().forEach ((language ) -> {
68+ if (language == getDeviceLanguage ()) {
69+ language .setPreferred (true );
70+
71+ } else {
72+ language .setPreferred (false );
73+ }
7074 });
7175 }
7276
73- public static Language getCurrentLocaleLanguage () {
74- return mLanguagesCache .get (getCurrentLocale ());
77+ public static Language getDeviceLanguage () {
78+ return mLanguagesCache .get (Resources . getSystem (). getConfiguration (). getLocales (). get ( 0 ). toLanguageTag ());
7579 }
7680
7781 public static List <String > getLocalesFromLanguages (@ NonNull final List <Language > languages ) {
@@ -99,7 +103,7 @@ public static List<Language> getPreferredLanguages(@NonNull Context aContext) {
99103 }
100104
101105 } else {
102- Language currentLanguage = getCurrentLocaleLanguage ();
106+ Language currentLanguage = getDeviceLanguage ();
103107 currentLanguage .setPreferred (true );
104108 preferredLanguages .add (currentLanguage );
105109 }
@@ -262,4 +266,37 @@ public static String getDefaultSupportedLocale() {
262266 return locale ;
263267 }
264268
269+ public static String getClosestSupportedLocale (@ NonNull Context context , @ NonNull String languageTag ) {
270+ Locale locale = Locale .forLanguageTag (languageTag );
271+ Optional <LocalizedLanguage > language = LocaleUtils .localizedSupportedLanguages .stream ().filter (item ->
272+ item .locale .equals (locale )
273+ ).findFirst ();
274+
275+ if (!language .isPresent ()) {
276+ language = LocaleUtils .localizedSupportedLanguages .stream ().filter (item ->
277+ item .locale .getLanguage ().equals (locale .getLanguage ()) &&
278+ item .locale .getScript ().equals (locale .getScript ()) &&
279+ item .locale .getCountry ().equals (locale .getCountry ())
280+ ).findFirst ();
281+ }
282+ if (!language .isPresent ()) {
283+ language = LocaleUtils .localizedSupportedLanguages .stream ().filter (item ->
284+ item .locale .getLanguage ().equals (locale .getLanguage ()) &&
285+ item .locale .getCountry ().equals (locale .getCountry ())
286+ ).findFirst ();
287+ }
288+ if (!language .isPresent ()) {
289+ language = LocaleUtils .localizedSupportedLanguages .stream ().filter (item ->
290+ item .locale .getLanguage ().equals (locale .getLanguage ())
291+ ).findFirst ();
292+ }
293+
294+ if (language .isPresent ()) {
295+ return language .get ().locale .toLanguageTag ();
296+
297+ } else {
298+ return getDisplayLocale (context );
299+ }
300+ }
301+
265302}
0 commit comments