From c16135800c53873746321d0c9ea2fc36550511c1 Mon Sep 17 00:00:00 2001 From: Gary Wang Date: Sat, 23 Mar 2024 10:59:59 +0800 Subject: feat(i18n): transliterate item name before sorting (#11172) --- src/Jellyfin.Extensions/Jellyfin.Extensions.csproj | 1 + src/Jellyfin.Extensions/StringExtensions.cs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) (limited to 'src') diff --git a/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj b/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj index c91f5d008e..98b567e308 100644 --- a/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj +++ b/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj @@ -29,6 +29,7 @@ + diff --git a/src/Jellyfin.Extensions/StringExtensions.cs b/src/Jellyfin.Extensions/StringExtensions.cs index 9d8afc23c7..8cfebd594d 100644 --- a/src/Jellyfin.Extensions/StringExtensions.cs +++ b/src/Jellyfin.Extensions/StringExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Text.RegularExpressions; +using ICU4N.Text; namespace Jellyfin.Extensions { @@ -8,6 +9,9 @@ namespace Jellyfin.Extensions /// public static partial class StringExtensions { + private static readonly Lazy _transliterator = new(() => Transliterator.GetInstance( + "Any-Latin; Latin-Ascii; Lower; NFD; [:Nonspacing Mark:] Remove; [:Punctuation:] Remove;")); + // Matches non-conforming unicode chars // https://mnaoumov.wordpress.com/2014/06/14/stripping-invalid-characters-from-utf-16-strings/ @@ -96,5 +100,15 @@ namespace Jellyfin.Extensions return haystack[(pos + 1)..]; } + + /// + /// Returns a transliterated string which only contain ascii characters. + /// + /// The string to act on. + /// The transliterated string. + public static string Transliterated(this string text) + { + return _transliterator.Value.Transliterate(text); + } } } -- cgit v1.2.3