5656 */
5757
5858public final class Localization {
59-
6059 public static final String DOT_SEPARATOR = " • " ;
6160 private static PrettyTime prettyTime ;
6261
@@ -76,16 +75,8 @@ public static String concatenateStrings(final String delimiter, final List<Strin
7675
7776 public static org .schabi .newpipe .extractor .localization .Localization getPreferredLocalization (
7877 final Context context ) {
79- final String contentLanguage = PreferenceManager
80- .getDefaultSharedPreferences (context )
81- .getString (context .getString (R .string .content_language_key ),
82- context .getString (R .string .default_localization_key ));
83- if (contentLanguage .equals (context .getString (R .string .default_localization_key ))) {
84- return org .schabi .newpipe .extractor .localization .Localization
85- .fromLocale (Locale .getDefault ());
86- }
8778 return org .schabi .newpipe .extractor .localization .Localization
88- .fromLocalizationCode ( contentLanguage );
79+ .fromLocale ( getPreferredLocale ( context ) );
8980 }
9081
9182 public static ContentCountry getPreferredContentCountry (final Context context ) {
@@ -99,22 +90,11 @@ public static ContentCountry getPreferredContentCountry(final Context context) {
9990 }
10091
10192 public static Locale getPreferredLocale (final Context context ) {
102- final SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences (context );
103-
104- final String languageCode = sp .getString (context .getString (R .string .content_language_key ),
105- context .getString (R .string .default_localization_key ));
106-
107- try {
108- if (languageCode .length () == 2 ) {
109- return new Locale (languageCode );
110- } else if (languageCode .contains ("_" )) {
111- final String country = languageCode .substring (languageCode .indexOf ("_" ));
112- return new Locale (languageCode .substring (0 , 2 ), country );
113- }
114- } catch (final Exception ignored ) {
115- }
93+ return getLocaleFromPrefs (context , R .string .content_language_key );
94+ }
11695
117- return Locale .getDefault ();
96+ public static Locale getAppLocale (final Context context ) {
97+ return getLocaleFromPrefs (context , R .string .app_language_key );
11898 }
11999
120100 public static String localizeNumber (final Context context , final long number ) {
@@ -183,13 +163,13 @@ public static String shortCount(final Context context, final long count) {
183163
184164 final double value = (double ) count ;
185165 if (count >= 1000000000 ) {
186- return localizeNumber (context , round (value / 1000000000 , 1 ))
166+ return localizeNumber (context , round (value / 1000000000 ))
187167 + context .getString (R .string .short_billion );
188168 } else if (count >= 1000000 ) {
189- return localizeNumber (context , round (value / 1000000 , 1 ))
169+ return localizeNumber (context , round (value / 1000000 ))
190170 + context .getString (R .string .short_million );
191171 } else if (count >= 1000 ) {
192- return localizeNumber (context , round (value / 1000 , 1 ))
172+ return localizeNumber (context , round (value / 1000 ))
193173 + context .getString (R .string .short_thousand );
194174 } else {
195175 return localizeNumber (context , value );
@@ -226,21 +206,6 @@ public static String deletedDownloadCount(final Context context, final int delet
226206 deletedCount , shortCount (context , deletedCount ));
227207 }
228208
229- private static String getQuantity (final Context context , @ PluralsRes final int pluralId ,
230- @ StringRes final int zeroCaseStringId , final long count ,
231- final String formattedCount ) {
232- if (count == 0 ) {
233- return context .getString (zeroCaseStringId );
234- }
235-
236- // As we use the already formatted count
237- // is not the responsibility of this method handle long numbers
238- // (it probably will fall in the "other" category,
239- // or some language have some specific rule... then we have to change it)
240- final int safeCount = (int ) MathUtils .clamp (count , Integer .MIN_VALUE , Integer .MAX_VALUE );
241- return context .getResources ().getQuantityString (pluralId , safeCount , formattedCount );
242- }
243-
244209 public static String getDurationString (final long duration ) {
245210 final String output ;
246211
@@ -314,37 +279,42 @@ public static String relativeTime(final OffsetDateTime offsetDateTime) {
314279 return prettyTime .formatUnrounded (offsetDateTime );
315280 }
316281
317- private static void changeAppLanguage (final Locale loc , final Resources res ) {
282+ public static void assureCorrectAppLanguage (final Context c ) {
283+ final Resources res = c .getResources ();
318284 final DisplayMetrics dm = res .getDisplayMetrics ();
319285 final Configuration conf = res .getConfiguration ();
320- conf .setLocale (loc );
286+ conf .setLocale (getAppLocale ( c ) );
321287 res .updateConfiguration (conf , dm );
322288 }
323289
324- public static Locale getAppLocale (final Context context ) {
325- final SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences (context );
326- String lang = prefs .getString (context .getString (R .string .app_language_key ), "en" );
327- final Locale loc ;
328- if (lang .equals (context .getString (R .string .default_localization_key ))) {
329- loc = Locale .getDefault ();
330- } else if (lang .matches (".*-.*" )) {
331- //to differentiate different versions of the language
332- //for example, pt (portuguese in Portugal) and pt-br (portuguese in Brazil)
333- final String [] localisation = lang .split ("-" );
334- lang = localisation [0 ];
335- final String country = localisation [1 ];
336- loc = new Locale (lang , country );
290+ private static Locale getLocaleFromPrefs (final Context context , @ StringRes final int prefKey ) {
291+ final SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences (context );
292+ final String defaultKey = context .getString (R .string .default_localization_key );
293+ final String languageCode = sp .getString (context .getString (prefKey ), defaultKey );
294+
295+ if (languageCode .equals (defaultKey )) {
296+ return Locale .getDefault ();
337297 } else {
338- loc = new Locale ( lang );
298+ return Locale . forLanguageTag ( languageCode );
339299 }
340- return loc ;
341300 }
342301
343- public static void assureCorrectAppLanguage (final Context c ) {
344- changeAppLanguage ( getAppLocale ( c ), c . getResources () );
302+ private static double round (final double value ) {
303+ return new BigDecimal ( value ). setScale ( 1 , RoundingMode . HALF_UP ). doubleValue ( );
345304 }
346305
347- private static double round (final double value , final int places ) {
348- return new BigDecimal (value ).setScale (places , RoundingMode .HALF_UP ).doubleValue ();
306+ private static String getQuantity (final Context context , @ PluralsRes final int pluralId ,
307+ @ StringRes final int zeroCaseStringId , final long count ,
308+ final String formattedCount ) {
309+ if (count == 0 ) {
310+ return context .getString (zeroCaseStringId );
311+ }
312+
313+ // As we use the already formatted count
314+ // is not the responsibility of this method handle long numbers
315+ // (it probably will fall in the "other" category,
316+ // or some language have some specific rule... then we have to change it)
317+ final int safeCount = (int ) MathUtils .clamp (count , Integer .MIN_VALUE , Integer .MAX_VALUE );
318+ return context .getResources ().getQuantityString (pluralId , safeCount , formattedCount );
349319 }
350320}
0 commit comments