diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java b/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java index c5f6edcf7..80ac26663 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/localization/Localization.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.extractor.localization; import org.schabi.newpipe.extractor.exceptions.ParsingException; +import org.schabi.newpipe.extractor.utils.LocaleCompat; import java.io.Serializable; import java.util.ArrayList; @@ -38,7 +39,7 @@ public class Localization implements Serializable { * @param localizationCode a localization code, formatted like {@link #getLocalizationCode()} */ public static Localization fromLocalizationCode(final String localizationCode) { - return fromLocale(Locale.forLanguageTag(localizationCode)); + return fromLocale(LocaleCompat.forLanguageTag(localizationCode)); } public Localization(@Nonnull final String languageCode, @Nullable final String countryCode) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/SubtitlesStream.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/SubtitlesStream.java index f9ef1f5fd..5c581aa48 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/SubtitlesStream.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/SubtitlesStream.java @@ -4,6 +4,7 @@ import static org.schabi.newpipe.extractor.utils.Utils.EMPTY_STRING; import org.schabi.newpipe.extractor.MediaFormat; import org.schabi.newpipe.extractor.services.youtube.ItagItem; +import org.schabi.newpipe.extractor.utils.LocaleCompat; import java.util.Locale; @@ -232,7 +233,7 @@ public final class SubtitlesStream extends Stream { final boolean autoGenerated, @Nullable final String manifestUrl) { super(id, content, isUrl, mediaFormat, deliveryMethod, manifestUrl); - this.locale = Locale.forLanguageTag(languageCode); + this.locale = LocaleCompat.forLanguageTag(languageCode); this.code = languageCode; this.format = mediaFormat; this.autoGenerated = autoGenerated; diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/LocaleCompat.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/LocaleCompat.java new file mode 100644 index 000000000..fd5af4d6e --- /dev/null +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/LocaleCompat.java @@ -0,0 +1,36 @@ +package org.schabi.newpipe.extractor.utils; + +import java.util.Locale; + +public class LocaleCompat { + private LocaleCompat() { + } + + // Source: LocaleListCompat's private forLanguageTagCompat() method. + // Use Locale.forLanguageTag() on API level >= 21 instead. + public static Locale forLanguageTag(final String str) { + if (str.contains("-")) { + String[] args = str.split("-", -1); + if (args.length > 2) { + return new Locale(args[0], args[1], args[2]); + } else if (args.length > 1) { + return new Locale(args[0], args[1]); + } else if (args.length == 1) { + return new Locale(args[0]); + } + } else if (str.contains("_")) { + String[] args = str.split("_", -1); + if (args.length > 2) { + return new Locale(args[0], args[1], args[2]); + } else if (args.length > 1) { + return new Locale(args[0], args[1]); + } else if (args.length == 1) { + return new Locale(args[0]); + } + } else { + return new Locale(str); + } + + throw new IllegalArgumentException("Can not parse language tag: [" + str + "]"); + } +}