Further refinement of BCP 47 language labeling support

This commit is contained in:
dyphire
2025-07-30 22:15:37 +08:00
parent f9c4c9b345
commit 2007815fa6
8 changed files with 84 additions and 27 deletions

View File

@@ -273,11 +273,28 @@ namespace MediaBrowser.Model.Entities
// Do not display the language code in display titles if unset or set to a special code. Show it in all other cases (possibly expanded).
if (!string.IsNullOrEmpty(Language) && !_specialCodes.Contains(Language, StringComparison.OrdinalIgnoreCase))
{
// Get full language string i.e. eng -> English.
string fullLanguage = CultureInfo
.GetCultures(CultureTypes.NeutralCultures)
.FirstOrDefault(r => r.ThreeLetterISOLanguageName.Equals(Language, StringComparison.OrdinalIgnoreCase))
?.DisplayName;
// Get full language string i.e. eng -> English, zh-Hans -> Chinese (Simplified).
var cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures);
CultureInfo match = null;
if (Language.Contains('-', StringComparison.OrdinalIgnoreCase))
{
match = cultures.FirstOrDefault(r =>
r.Name.Equals(Language, StringComparison.OrdinalIgnoreCase));
if (match is null)
{
string baseLang = Language.AsSpan().LeftPart('-').ToString();
match = cultures.FirstOrDefault(r =>
r.TwoLetterISOLanguageName.Equals(baseLang, StringComparison.OrdinalIgnoreCase));
}
}
else
{
match = cultures.FirstOrDefault(r =>
r.ThreeLetterISOLanguageName.Equals(Language, StringComparison.OrdinalIgnoreCase));
}
string fullLanguage = match?.DisplayName;
attributes.Add(StringHelper.FirstToUpper(fullLanguage ?? Language));
}
@@ -376,11 +393,28 @@ namespace MediaBrowser.Model.Entities
if (!string.IsNullOrEmpty(Language))
{
// Get full language string i.e. eng -> English.
string fullLanguage = CultureInfo
.GetCultures(CultureTypes.NeutralCultures)
.FirstOrDefault(r => r.ThreeLetterISOLanguageName.Equals(Language, StringComparison.OrdinalIgnoreCase))
?.DisplayName;
// Get full language string i.e. eng -> English, zh-Hans -> Chinese (Simplified).
var cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures);
CultureInfo match = null;
if (Language.Contains('-', StringComparison.OrdinalIgnoreCase))
{
match = cultures.FirstOrDefault(r =>
r.Name.Equals(Language, StringComparison.OrdinalIgnoreCase));
if (match is null)
{
string baseLang = Language.AsSpan().LeftPart('-').ToString();
match = cultures.FirstOrDefault(r =>
r.TwoLetterISOLanguageName.Equals(baseLang, StringComparison.OrdinalIgnoreCase));
}
}
else
{
match = cultures.FirstOrDefault(r =>
r.ThreeLetterISOLanguageName.Equals(Language, StringComparison.OrdinalIgnoreCase));
}
string fullLanguage = match?.DisplayName;
attributes.Add(StringHelper.FirstToUpper(fullLanguage ?? Language));
}
else