mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-07-25 19:59:03 +02:00
44 lines
1.1 KiB
C#
44 lines
1.1 KiB
C#
using System;
|
|
using System.Globalization;
|
|
|
|
namespace TweetLib.Utils.Globalization {
|
|
public sealed class Language : IComparable<Language> {
|
|
public string Code { get; }
|
|
|
|
private string Name => cultureInfo?.NativeName ?? Code;
|
|
|
|
private readonly CultureInfo? cultureInfo;
|
|
|
|
public Language(string code, string? alt = null) {
|
|
this.Code = code;
|
|
|
|
try {
|
|
this.cultureInfo = CultureInfo.GetCultureInfo(alt ?? code);
|
|
} catch (CultureNotFoundException) {
|
|
// ignore
|
|
}
|
|
}
|
|
|
|
public override bool Equals(object obj) {
|
|
return obj is Language other && Code.Equals(other.Code, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
public override int GetHashCode() {
|
|
return Code.GetHashCode();
|
|
}
|
|
|
|
public override string ToString() {
|
|
if (cultureInfo == null) {
|
|
return Code;
|
|
}
|
|
|
|
string capitalizedName = cultureInfo.TextInfo.ToTitleCase(cultureInfo.NativeName);
|
|
return cultureInfo.DisplayName == cultureInfo.NativeName ? capitalizedName : $"{capitalizedName}, {cultureInfo.DisplayName}";
|
|
}
|
|
|
|
public int CompareTo(Language other) {
|
|
return string.Compare(Name, other.Name, false, CultureInfo.InvariantCulture);
|
|
}
|
|
}
|
|
}
|