From a4ff630d1f7881e781f055576d40f3be89c82720 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Wed, 12 Aug 2026 08:39:00 +0200 Subject: Fix English metadata blocking localized providers ranked below it --- .../Manager/MetadataLanguageUtils.cs | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 MediaBrowser.Providers/Manager/MetadataLanguageUtils.cs (limited to 'MediaBrowser.Providers/Manager/MetadataLanguageUtils.cs') diff --git a/MediaBrowser.Providers/Manager/MetadataLanguageUtils.cs b/MediaBrowser.Providers/Manager/MetadataLanguageUtils.cs new file mode 100644 index 0000000000..92a16feaee --- /dev/null +++ b/MediaBrowser.Providers/Manager/MetadataLanguageUtils.cs @@ -0,0 +1,44 @@ +using System; + +namespace MediaBrowser.Providers.Manager; + +/// +/// Helpers for comparing the language of fetched metadata with the language that was requested. +/// +internal static class MetadataLanguageUtils +{ + /// + /// Gets the language subtag of a language tag, e.g. "es" for "es-ES". + /// + /// The language tag. + /// The language subtag, lowercased, or null if none was given. + public static string? GetLanguageSubtag(string? language) + { + if (string.IsNullOrEmpty(language)) + { + return null; + } + + var separator = language.IndexOf('-', StringComparison.Ordinal); + + return (separator == -1 ? language : language[..separator]).ToLowerInvariant(); + } + + /// + /// Determines whether a provider result can be considered to be in the requested language. + /// + /// The language the provider reported for its result, if any. + /// The language that was requested, if any. + /// true if the result is in the requested language or either language is unknown. + public static bool MatchesPreferredLanguage(string? resultLanguage, string? preferredLanguage) + { + // A provider that doesn't report a language cannot be judged, assume it honored the request + if (string.IsNullOrEmpty(resultLanguage) || string.IsNullOrEmpty(preferredLanguage)) + { + return true; + } + + // Compare on the language subtag only so that e.g. "es" matches "es-ES" + return string.Equals(GetLanguageSubtag(resultLanguage), GetLanguageSubtag(preferredLanguage), StringComparison.Ordinal); + } +} -- cgit v1.2.3