mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	Merge pull request #8870 from Isira-Seneviratne/Locale_forLanguageTag
Use Locale.forLanguageTag().
This commit is contained in:
		| @@ -56,7 +56,6 @@ import java.util.stream.Collectors; | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| public final class Localization { | public final class Localization { | ||||||
|  |  | ||||||
|     public static final String DOT_SEPARATOR = " • "; |     public static final String DOT_SEPARATOR = " • "; | ||||||
|     private static PrettyTime prettyTime; |     private static PrettyTime prettyTime; | ||||||
|  |  | ||||||
| @@ -76,16 +75,8 @@ public final class Localization { | |||||||
|  |  | ||||||
|     public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization( |     public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization( | ||||||
|             final Context context) { |             final Context context) { | ||||||
|         final String contentLanguage = PreferenceManager |  | ||||||
|                 .getDefaultSharedPreferences(context) |  | ||||||
|                 .getString(context.getString(R.string.content_language_key), |  | ||||||
|                         context.getString(R.string.default_localization_key)); |  | ||||||
|         if (contentLanguage.equals(context.getString(R.string.default_localization_key))) { |  | ||||||
|         return org.schabi.newpipe.extractor.localization.Localization |         return org.schabi.newpipe.extractor.localization.Localization | ||||||
|                     .fromLocale(Locale.getDefault()); |                 .fromLocale(getPreferredLocale(context)); | ||||||
|         } |  | ||||||
|         return org.schabi.newpipe.extractor.localization.Localization |  | ||||||
|                 .fromLocalizationCode(contentLanguage); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static ContentCountry getPreferredContentCountry(final Context context) { |     public static ContentCountry getPreferredContentCountry(final Context context) { | ||||||
| @@ -99,22 +90,11 @@ public final class Localization { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static Locale getPreferredLocale(final Context context) { |     public static Locale getPreferredLocale(final Context context) { | ||||||
|         final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); |         return getLocaleFromPrefs(context, R.string.content_language_key); | ||||||
|  |  | ||||||
|         final String languageCode = sp.getString(context.getString(R.string.content_language_key), |  | ||||||
|                 context.getString(R.string.default_localization_key)); |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             if (languageCode.length() == 2) { |  | ||||||
|                 return new Locale(languageCode); |  | ||||||
|             } else if (languageCode.contains("_")) { |  | ||||||
|                 final String country = languageCode.substring(languageCode.indexOf("_")); |  | ||||||
|                 return new Locale(languageCode.substring(0, 2), country); |  | ||||||
|             } |  | ||||||
|         } catch (final Exception ignored) { |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|         return Locale.getDefault(); |     public static Locale getAppLocale(final Context context) { | ||||||
|  |         return getLocaleFromPrefs(context, R.string.app_language_key); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static String localizeNumber(final Context context, final long number) { |     public static String localizeNumber(final Context context, final long number) { | ||||||
| @@ -183,13 +163,13 @@ public final class Localization { | |||||||
|  |  | ||||||
|         final double value = (double) count; |         final double value = (double) count; | ||||||
|         if (count >= 1000000000) { |         if (count >= 1000000000) { | ||||||
|             return localizeNumber(context, round(value / 1000000000, 1)) |             return localizeNumber(context, round(value / 1000000000)) | ||||||
|                     + context.getString(R.string.short_billion); |                     + context.getString(R.string.short_billion); | ||||||
|         } else if (count >= 1000000) { |         } else if (count >= 1000000) { | ||||||
|             return localizeNumber(context, round(value / 1000000, 1)) |             return localizeNumber(context, round(value / 1000000)) | ||||||
|                     + context.getString(R.string.short_million); |                     + context.getString(R.string.short_million); | ||||||
|         } else if (count >= 1000) { |         } else if (count >= 1000) { | ||||||
|             return localizeNumber(context, round(value / 1000, 1)) |             return localizeNumber(context, round(value / 1000)) | ||||||
|                     + context.getString(R.string.short_thousand); |                     + context.getString(R.string.short_thousand); | ||||||
|         } else { |         } else { | ||||||
|             return localizeNumber(context, value); |             return localizeNumber(context, value); | ||||||
| @@ -226,21 +206,6 @@ public final class Localization { | |||||||
|                 deletedCount, shortCount(context, deletedCount)); |                 deletedCount, shortCount(context, deletedCount)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static String getQuantity(final Context context, @PluralsRes final int pluralId, |  | ||||||
|                                       @StringRes final int zeroCaseStringId, final long count, |  | ||||||
|                                       final String formattedCount) { |  | ||||||
|         if (count == 0) { |  | ||||||
|             return context.getString(zeroCaseStringId); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         // As we use the already formatted count |  | ||||||
|         // is not the responsibility of this method handle long numbers |  | ||||||
|         // (it probably will fall in the "other" category, |  | ||||||
|         // or some language have some specific rule... then we have to change it) |  | ||||||
|         final int safeCount = (int) MathUtils.clamp(count, Integer.MIN_VALUE, Integer.MAX_VALUE); |  | ||||||
|         return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static String getDurationString(final long duration) { |     public static String getDurationString(final long duration) { | ||||||
|         final String output; |         final String output; | ||||||
|  |  | ||||||
| @@ -314,37 +279,42 @@ public final class Localization { | |||||||
|         return prettyTime.formatUnrounded(offsetDateTime); |         return prettyTime.formatUnrounded(offsetDateTime); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static void changeAppLanguage(final Locale loc, final Resources res) { |     public static void assureCorrectAppLanguage(final Context c) { | ||||||
|  |         final Resources res = c.getResources(); | ||||||
|         final DisplayMetrics dm = res.getDisplayMetrics(); |         final DisplayMetrics dm = res.getDisplayMetrics(); | ||||||
|         final Configuration conf = res.getConfiguration(); |         final Configuration conf = res.getConfiguration(); | ||||||
|         conf.setLocale(loc); |         conf.setLocale(getAppLocale(c)); | ||||||
|         res.updateConfiguration(conf, dm); |         res.updateConfiguration(conf, dm); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static Locale getAppLocale(final Context context) { |     private static Locale getLocaleFromPrefs(final Context context, @StringRes final int prefKey) { | ||||||
|         final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); |         final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); | ||||||
|         String lang = prefs.getString(context.getString(R.string.app_language_key), "en"); |         final String defaultKey = context.getString(R.string.default_localization_key); | ||||||
|         final Locale loc; |         final String languageCode = sp.getString(context.getString(prefKey), defaultKey); | ||||||
|         if (lang.equals(context.getString(R.string.default_localization_key))) { |  | ||||||
|             loc = Locale.getDefault(); |         if (languageCode.equals(defaultKey)) { | ||||||
|         } else if (lang.matches(".*-.*")) { |             return Locale.getDefault(); | ||||||
|             //to differentiate different versions of the language |  | ||||||
|             //for example, pt (portuguese in Portugal) and pt-br (portuguese in Brazil) |  | ||||||
|             final String[] localisation = lang.split("-"); |  | ||||||
|             lang = localisation[0]; |  | ||||||
|             final String country = localisation[1]; |  | ||||||
|             loc = new Locale(lang, country); |  | ||||||
|         } else { |         } else { | ||||||
|             loc = new Locale(lang); |             return Locale.forLanguageTag(languageCode); | ||||||
|         } |         } | ||||||
|         return loc; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static void assureCorrectAppLanguage(final Context c) { |     private static double round(final double value) { | ||||||
|         changeAppLanguage(getAppLocale(c), c.getResources()); |         return new BigDecimal(value).setScale(1, RoundingMode.HALF_UP).doubleValue(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static double round(final double value, final int places) { |     private static String getQuantity(final Context context, @PluralsRes final int pluralId, | ||||||
|         return new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue(); |                                       @StringRes final int zeroCaseStringId, final long count, | ||||||
|  |                                       final String formattedCount) { | ||||||
|  |         if (count == 0) { | ||||||
|  |             return context.getString(zeroCaseStringId); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // As we use the already formatted count | ||||||
|  |         // is not the responsibility of this method handle long numbers | ||||||
|  |         // (it probably will fall in the "other" category, | ||||||
|  |         // or some language have some specific rule... then we have to change it) | ||||||
|  |         final int safeCount = (int) MathUtils.clamp(count, Integer.MIN_VALUE, Integer.MAX_VALUE); | ||||||
|  |         return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Isira Seneviratne
					Isira Seneviratne