diff options
| author | Joshua M. Boniface <joshua@boniface.me> | 2025-08-03 17:29:40 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-03 17:29:40 -0400 |
| commit | 1262ac31dce4a0d59a427312baeade9a846b5b91 (patch) | |
| tree | fb3b3c19620a8002c4620cff5964f495fa3e21c3 /MediaBrowser.Model/Entities/MediaStream.cs | |
| parent | 0f5bb5cf767e8c5a767be32e26016cae17ae341c (diff) | |
| parent | 2007815fa6b592984a64a6d3d978d41ae8f7347b (diff) | |
Merge pull request #14410 from dyphire/language
Further refinement of BCP 47 language labeling support
Diffstat (limited to 'MediaBrowser.Model/Entities/MediaStream.cs')
| -rw-r--r-- | MediaBrowser.Model/Entities/MediaStream.cs | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index 5c8f37fcd..b1626e2c9 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -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 |
