49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using System.Globalization;
|
|
|
|
namespace MareSynchronos.Localization;
|
|
|
|
public static class LocalizationExtensions
|
|
{
|
|
public static string Loc(this string fallbackEnglish, params object[] formatArgs)
|
|
{
|
|
var service = LocalizationService.Instance;
|
|
if (service == null) return FormatFallback(fallbackEnglish, formatArgs);
|
|
return service.GetString(fallbackEnglish, formatArgs);
|
|
}
|
|
|
|
public static string LocKey(this string key, string fallbackEnglish, params object[] formatArgs)
|
|
{
|
|
var service = LocalizationService.Instance;
|
|
if (service == null) return FormatFallback(fallbackEnglish, formatArgs);
|
|
return service.GetString(key, fallbackEnglish, formatArgs);
|
|
}
|
|
|
|
public static string LocLabel(this string labelWithId, params object[] formatArgs)
|
|
{
|
|
if (string.IsNullOrEmpty(labelWithId)) return labelWithId;
|
|
|
|
var separatorIndex = labelWithId.IndexOf("##", StringComparison.Ordinal);
|
|
if (separatorIndex < 0)
|
|
{
|
|
return labelWithId.Loc(formatArgs);
|
|
}
|
|
|
|
var label = labelWithId[..separatorIndex];
|
|
var id = labelWithId[separatorIndex..];
|
|
return string.Concat(label.Loc(formatArgs), id);
|
|
}
|
|
|
|
private static string FormatFallback(string fallback, params object[] args)
|
|
{
|
|
if (args == null || args.Length == 0) return fallback;
|
|
try
|
|
{
|
|
return string.Format(CultureInfo.CurrentCulture, fallback, args);
|
|
}
|
|
catch
|
|
{
|
|
return fallback;
|
|
}
|
|
}
|
|
}
|