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; } } }