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);
}
}