File: Special\SR.cs
Web Access
Project: src\src\System.Drawing.Common\src\System.Drawing.Common.csproj (System.Drawing.Common)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Resources;
 
namespace System;
 
internal static partial class SR
{
    private static readonly bool s_usingResourceKeys =
        AppContext.TryGetSwitch("System.Resources.UseSystemResourceKeys", out bool usingResourceKeys) && usingResourceKeys;
 
    // This method is used to decide if we need to append the exception message parameters to the message when calling SR.Format.
    // by default it returns the value of System.Resources.UseSystemResourceKeys AppContext switch or false if not specified.
    // Native code generators can replace the value this returns based on user input at the time of native code generation.
    // The Linker is also capable of replacing the value of this method when the application is being trimmed.
    internal static bool UsingResourceKeys() => s_usingResourceKeys;
 
    internal static string GetResourceString(string resourceKey)
    {
        if (UsingResourceKeys())
        {
            return resourceKey;
        }
 
        string? resourceString = null;
        try
        {
            resourceString =
#if SYSTEM_PRIVATE_CORELIB || NATIVEAOT
                InternalGetResourceString(resourceKey);
#else
                ResourceManager.GetString(resourceKey);
#endif
        }
        catch (MissingManifestResourceException) { }
 
        return resourceString!; // only null if missing resources
    }
 
    internal static string GetResourceString(string resourceKey, string defaultString)
    {
        string resourceString = GetResourceString(resourceKey);
 
        return resourceKey == resourceString || resourceString is null ? defaultString : resourceString;
    }
 
    internal static string Format(string resourceFormat, object? p1) =>
        UsingResourceKeys()
            ? string.Join(", ", resourceFormat, p1)
            : string.Format(resourceFormat, p1);
 
    internal static string Format(string resourceFormat, object? p1, object? p2) =>
        UsingResourceKeys()
            ? string.Join(", ", resourceFormat, p1, p2)
        : string.Format(resourceFormat, p1, p2);
 
    internal static string Format(string resourceFormat, object? p1, object? p2, object? p3) =>
        UsingResourceKeys()
        ? string.Join(", ", resourceFormat, p1, p2, p3)
        : string.Format(resourceFormat, p1, p2, p3);
 
    internal static string Format(string resourceFormat, params object?[]? args) =>
        args is not null
            ? UsingResourceKeys() ? $"{resourceFormat}, {string.Join(", ", args)}" : string.Format(resourceFormat, args)
            : resourceFormat;
 
    internal static string Format(IFormatProvider? provider, string resourceFormat, object? p1) =>
        UsingResourceKeys()
            ? string.Join(", ", resourceFormat, p1)
            : string.Format(provider, resourceFormat, p1);
 
    internal static string Format(IFormatProvider? provider, string resourceFormat, object? p1, object? p2) =>
        UsingResourceKeys()
            ? string.Join(", ", resourceFormat, p1, p2)
            : string.Format(provider, resourceFormat, p1, p2);
 
    internal static string Format(IFormatProvider? provider, string resourceFormat, object? p1, object? p2, object? p3) =>
        UsingResourceKeys()
            ? string.Join(", ", resourceFormat, p1, p2, p3)
            : string.Format(provider, resourceFormat, p1, p2, p3);
 
    internal static string Format(IFormatProvider? provider, string resourceFormat, params object?[]? args) =>
        args is not null
            ? UsingResourceKeys()
                ? $"{resourceFormat}, {string.Join(", ", args)}"
                : string.Format(provider, resourceFormat, args)
            : resourceFormat;
}