mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-22 01:54:42 +01:00
Translate the ISO-639-2/B codes to ISO-639-2/T. (#13068)
Some checks are pending
CodeQL / Analyze (csharp) (push) Waiting to run
OpenAPI / OpenAPI - HEAD (push) Waiting to run
OpenAPI / OpenAPI - BASE (push) Waiting to run
OpenAPI / OpenAPI - Difference (push) Blocked by required conditions
OpenAPI / OpenAPI - Publish Unstable Spec (push) Blocked by required conditions
OpenAPI / OpenAPI - Publish Stable Spec (push) Blocked by required conditions
Tests / run-tests (macos-latest) (push) Waiting to run
Tests / run-tests (ubuntu-latest) (push) Waiting to run
Tests / run-tests (windows-latest) (push) Waiting to run
Project Automation / Project board (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
Some checks are pending
CodeQL / Analyze (csharp) (push) Waiting to run
OpenAPI / OpenAPI - HEAD (push) Waiting to run
OpenAPI / OpenAPI - BASE (push) Waiting to run
OpenAPI / OpenAPI - Difference (push) Blocked by required conditions
OpenAPI / OpenAPI - Publish Unstable Spec (push) Blocked by required conditions
OpenAPI / OpenAPI - Publish Stable Spec (push) Blocked by required conditions
Tests / run-tests (macos-latest) (push) Waiting to run
Tests / run-tests (ubuntu-latest) (push) Waiting to run
Tests / run-tests (windows-latest) (push) Waiting to run
Project Automation / Project board (push) Waiting to run
Merge Conflict Labeler / Labeling (push) Waiting to run
* Translate the ISO-639-2/B codes to ISO-639-2/T. This enables 19 additional languages to be displayed correctly. * Convert the 2-dimensional array to a dictionary * Added the French language to the list of ISO-639-2/B codes * Don't change the property, use a local variable instead. * When creating the MediaStream in the MediaStreamRepository ensure that the ISO 639-2/T (f.e. deu) code is used for the language as that is the one the .NET culture info knows. The other code is most likely the ISO 639-2/B code (f.e. ger) which is unknown to the .NET culture info and will result in just displaying the code instead of the display name. * Move the substitution of ISO 639-2/B to /T to the localization manager. Some language (like Chinese) have multiple entries in the iso6392.txt file (f.e. zho|chi|zh|..., zho|chi|zh-tw|...) but the conversation between /T and /B is the same so use .TryAdd. * Change the method definition from GetISO6392TFromB to TryGetISO6392TFromB and return true if a case was found. * Add unit tests for TryGetISO6392TFromB.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Frozen;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
@@ -38,6 +40,8 @@ namespace Emby.Server.Implementations.Localization
|
||||
|
||||
private List<CultureDto> _cultures = [];
|
||||
|
||||
private FrozenDictionary<string, string> _iso6392BtoT = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LocalizationManager" /> class.
|
||||
/// </summary>
|
||||
@@ -100,6 +104,7 @@ namespace Emby.Server.Implementations.Localization
|
||||
private async Task LoadCultures()
|
||||
{
|
||||
List<CultureDto> list = [];
|
||||
Dictionary<string, string> iso6392BtoTdict = new Dictionary<string, string>();
|
||||
|
||||
using var stream = _assembly.GetManifestResourceStream(CulturesPath);
|
||||
if (stream is null)
|
||||
@@ -142,12 +147,17 @@ namespace Emby.Server.Implementations.Localization
|
||||
else
|
||||
{
|
||||
threeLetterNames = [parts[0], parts[1]];
|
||||
|
||||
// In cases where there are two TLN the first one is ISO 639-2/T and the second one is ISO 639-2/B
|
||||
// We need ISO 639-2/T for the .NET cultures so we cultivate a dictionary for the translation B->T
|
||||
iso6392BtoTdict.TryAdd(parts[1], parts[0]);
|
||||
}
|
||||
|
||||
list.Add(new CultureDto(name, name, twoCharName, threeLetterNames));
|
||||
}
|
||||
|
||||
_cultures = list;
|
||||
_iso6392BtoT = iso6392BtoTdict.ToFrozenDictionary(StringComparer.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -505,5 +515,26 @@ namespace Emby.Server.Implementations.Localization
|
||||
yield return new LocalizationOption("漢語 (繁體字)", "zh-TW");
|
||||
yield return new LocalizationOption("廣東話 (香港)", "zh-HK");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool TryGetISO6392TFromB(string isoB, [NotNullWhen(true)] out string? isoT)
|
||||
{
|
||||
// Unlikely case the dictionary is not (yet) initialized properly
|
||||
if (_iso6392BtoT == null)
|
||||
{
|
||||
isoT = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
var result = _iso6392BtoT.TryGetValue(isoB, out isoT) && !string.IsNullOrEmpty(isoT);
|
||||
|
||||
// Ensure the ISO code being null if the result is false
|
||||
if (!result)
|
||||
{
|
||||
isoT = null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user