A game framework written with osu! in mind.
at master 2.4 kB view raw
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. 2// See the LICENCE file in the repository root for full licence text. 3 4using System; 5 6#nullable enable 7 8namespace osu.Framework.Localisation 9{ 10 /// <summary> 11 /// A descriptor representing text that can be localised and formatted. 12 /// </summary> 13 public readonly struct LocalisableString : IEquatable<LocalisableString> 14 { 15 /// <summary> 16 /// The underlying data. 17 /// </summary> 18 internal readonly object? Data; 19 20 /// <summary> 21 /// Creates a new <see cref="LocalisableString"/> with underlying string data. 22 /// </summary> 23 public LocalisableString(string data) 24 { 25 Data = data; 26 } 27 28 /// <summary> 29 /// Creates a new <see cref="LocalisableString"/> with underlying localisable string data. 30 /// </summary> 31 public LocalisableString(ILocalisableStringData data) 32 { 33 Data = data; 34 } 35 36 // it's somehow common to call default(LocalisableString), and we should return empty string then. 37 public override string ToString() => Data?.ToString() ?? string.Empty; 38 39 public bool Equals(LocalisableString other) => LocalisableStringEqualityComparer.Default.Equals(this, other); 40 public override bool Equals(object? obj) => obj is LocalisableString other && Equals(other); 41 public override int GetHashCode() => LocalisableStringEqualityComparer.Default.GetHashCode(this); 42 43 public static implicit operator LocalisableString(string text) => new LocalisableString(text); 44 public static implicit operator LocalisableString(TranslatableString translatable) => new LocalisableString(translatable); 45 public static implicit operator LocalisableString(RomanisableString romanisable) => new LocalisableString(romanisable); 46 public static implicit operator LocalisableString(LocalisableFormattableString formattable) => new LocalisableString(formattable); 47 public static implicit operator LocalisableString(CaseTransformableString transformable) => new LocalisableString(transformable); 48 49 public static bool operator ==(LocalisableString left, LocalisableString right) => left.Equals(right); 50 public static bool operator !=(LocalisableString left, LocalisableString right) => !left.Equals(right); 51 } 52}