Skip to content

Commit aad5e26

Browse files
Merge pull request #8870 from Isira-Seneviratne/Locale_forLanguageTag
Use Locale.forLanguageTag().
2 parents 627c6e2 + 5c1af6d commit aad5e26

1 file changed

Lines changed: 34 additions & 64 deletions

File tree

app/src/main/java/org/schabi/newpipe/util/Localization.java

Lines changed: 34 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
*/
5757

5858
public 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

Comments
 (0)