SR
using FxResources.System.Memory.Data;
using System.Resources;
namespace System
{
    internal static class SR
    {
        private static readonly bool s_usingResourceKeys = GetUsingResourceKeysSwitchValue();
        private static ResourceManager s_resourceManager;
        internal static ResourceManager ResourceManager => s_resourceManager ?? (s_resourceManager = new ResourceManager(typeof(FxResources.System.Memory.Data.SR)));
        internal static string ArgumentOutOfRange_NeedNonNegNum => GetResourceString("ArgumentOutOfRange_NeedNonNegNum");
        internal static string ArgumentOutOfRange_StreamLengthMustBeNonNegativeInt32 => GetResourceString("ArgumentOutOfRange_StreamLengthMustBeNonNegativeInt32");
        internal static string Argument_InvalidOffLen => GetResourceString("Argument_InvalidOffLen");
        internal static string IO_SeekBeforeBegin => GetResourceString("IO_SeekBeforeBegin");
        internal static string ObjectDisposed_StreamClosed => GetResourceString("ObjectDisposed_StreamClosed");
        private static bool GetUsingResourceKeysSwitchValue()
        {
            if (!AppContext.TryGetSwitch("System.Resources.UseSystemResourceKeys", out bool isEnabled))
                return false;
            return isEnabled;
        }
        internal static bool UsingResourceKeys()
        {
            return s_usingResourceKeys;
        }
        private static string GetResourceString(string resourceKey)
        {
            if (!UsingResourceKeys()) {
                string result = null;
                try {
                    result = ResourceManager.GetString(resourceKey);
                    return result;
                } catch (MissingManifestResourceException) {
                    return result;
                }
            }
            return resourceKey;
        }
        private static string GetResourceString(string resourceKey, string defaultString)
        {
            string resourceString = GetResourceString(resourceKey);
            if (!(resourceKey == resourceString) && resourceString != null)
                return resourceString;
            return defaultString;
        }
        internal static string Format(string resourceFormat, object p1)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1);
            return string.Format(resourceFormat, p1);
        }
        internal static string Format(string resourceFormat, object p1, object p2)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2);
            return string.Format(resourceFormat, p1, p2);
        }
        internal static string Format(string resourceFormat, object p1, object p2, object p3)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2, p3);
            return string.Format(resourceFormat, p1, p2, p3);
        }
        internal static string Format(string resourceFormat, params object[] args)
        {
            if (args != null) {
                if (UsingResourceKeys())
                    return resourceFormat + ", " + string.Join(", ", args);
                return string.Format(resourceFormat, args);
            }
            return resourceFormat;
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, object p1)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1);
            return string.Format(provider, resourceFormat, p1);
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2);
            return string.Format(provider, resourceFormat, p1, p2);
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, object p1, object p2, object p3)
        {
            if (UsingResourceKeys())
                return string.Join(", ", resourceFormat, p1, p2, p3);
            return string.Format(provider, resourceFormat, p1, p2, p3);
        }
        internal static string Format(IFormatProvider provider, string resourceFormat, params object[] args)
        {
            if (args != null) {
                if (UsingResourceKeys())
                    return resourceFormat + ", " + string.Join(", ", args);
                return string.Format(provider, resourceFormat, args);
            }
            return resourceFormat;
        }
    }
}