Skip to content

Commit 6d812b8

Browse files
Use Locale.forLanguageTag().
1 parent 4573407 commit 6d812b8

1 file changed

Lines changed: 17 additions & 43 deletions

File tree

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

Lines changed: 17 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,8 @@ public static String concatenateStrings(final String delimiter, final List<Strin
7676

7777
public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization(
7878
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-
}
8779
return org.schabi.newpipe.extractor.localization.Localization
88-
.fromLocalizationCode(contentLanguage);
80+
.fromLocale(getPreferredLocale(context));
8981
}
9082

9183
public static ContentCountry getPreferredContentCountry(final Context context) {
@@ -98,23 +90,24 @@ public static ContentCountry getPreferredContentCountry(final Context context) {
9890
return new ContentCountry(contentCountry);
9991
}
10092

101-
public static Locale getPreferredLocale(final Context context) {
93+
private static Locale getLocaleFromPrefs(final Context context, @StringRes final int prefKey) {
10294
final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
95+
final String defaultKey = context.getString(R.string.default_localization_key);
96+
final String languageCode = sp.getString(context.getString(prefKey), defaultKey);
10397

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) {
98+
if (languageCode.equals(defaultKey)) {
99+
return Locale.getDefault();
100+
} else {
101+
return Locale.forLanguageTag(languageCode);
115102
}
103+
}
104+
105+
public static Locale getPreferredLocale(final Context context) {
106+
return getLocaleFromPrefs(context, R.string.content_language_key);
107+
}
116108

117-
return Locale.getDefault();
109+
public static Locale getAppLocale(final Context context) {
110+
return getLocaleFromPrefs(context, R.string.app_language_key);
118111
}
119112

120113
public static String localizeNumber(final Context context, final long number) {
@@ -314,34 +307,15 @@ public static String relativeTime(final OffsetDateTime offsetDateTime) {
314307
return prettyTime.formatUnrounded(offsetDateTime);
315308
}
316309

317-
private static void changeAppLanguage(final Locale loc, final Resources res) {
310+
private static void changeAppLanguage(final Resources res, final Locale loc) {
318311
final DisplayMetrics dm = res.getDisplayMetrics();
319312
final Configuration conf = res.getConfiguration();
320313
conf.setLocale(loc);
321314
res.updateConfiguration(conf, dm);
322315
}
323316

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);
337-
} else {
338-
loc = new Locale(lang);
339-
}
340-
return loc;
341-
}
342-
343317
public static void assureCorrectAppLanguage(final Context c) {
344-
changeAppLanguage(getAppLocale(c), c.getResources());
318+
changeAppLanguage(c.getResources(), getAppLocale(c));
345319
}
346320

347321
private static double round(final double value, final int places) {

0 commit comments

Comments
 (0)