aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGary Wang <wzc782970009@gmail.com>2024-03-23 10:59:59 +0800
committerGitHub <noreply@github.com>2024-03-22 20:59:59 -0600
commitc16135800c53873746321d0c9ea2fc36550511c1 (patch)
tree992c75be99beb03f00ec38d0cfe80f84644ea1a6 /src
parent259630554229b4dcf00b9bccb4cf26444131fe42 (diff)
feat(i18n): transliterate item name before sorting (#11172)
Diffstat (limited to 'src')
-rw-r--r--src/Jellyfin.Extensions/Jellyfin.Extensions.csproj1
-rw-r--r--src/Jellyfin.Extensions/StringExtensions.cs14
2 files changed, 15 insertions, 0 deletions
diff --git a/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj b/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj
index c91f5d008..98b567e30 100644
--- a/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj
+++ b/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj
@@ -29,6 +29,7 @@
<ItemGroup>
<PackageReference Include="Diacritics" />
+ <PackageReference Include="ICU4N.Transliterator" />
</ItemGroup>
</Project>
diff --git a/src/Jellyfin.Extensions/StringExtensions.cs b/src/Jellyfin.Extensions/StringExtensions.cs
index 9d8afc23c..8cfebd594 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
/// </summary>
public static partial class StringExtensions
{
+ private static readonly Lazy<Transliterator> _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)..];
}
+
+ /// <summary>
+ /// Returns a transliterated string which only contain ascii characters.
+ /// </summary>
+ /// <param name="text">The string to act on.</param>
+ /// <returns>The transliterated string.</returns>
+ public static string Transliterated(this string text)
+ {
+ return _transliterator.Value.Transliterate(text);
+ }
}
}