<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="BrowserPlatformNotSupportedOnOlderFrameworks" xml:space="preserve">
    <value>Browser platform is only supported on .NET 7.0 or greater.</value>
    <comment>{Locked=".NET 7.0"}</comment>
  </data>
  <data name="ArtifactPostProcessingDispatcherCommandLineDescription" xml:space="preserve">
    <value>Internal command line for artifact post-processing.</value>
  </data>
  <data name="ArtifactPostProcessorCapabilityContainsSeparator" xml:space="preserve">
    <value>Artifact post-processor '{0}' declares capability '{1}', which cannot contain the semicolon separator.</value>
    <comment>{0} is the processor UID. {1} is an artifact kind or file extension.</comment>
  </data>
  <data name="ArtifactPostProcessorCapabilityInvalid" xml:space="preserve">
    <value>Artifact post-processor '{0}' declares invalid capability '{1}'. Kinds cannot be blank, and fallback extensions must be lowercase and start with a dot.</value>
    <comment>{0} is the processor UID. {1} is an artifact kind or file extension.</comment>
  </data>
  <data name="ArtifactPostProcessingDispatcherDescription" xml:space="preserve">
    <value>Dispatches artifact post-processing jobs selected by dotnet test.</value>
    <comment>Do not localize command name {Locked="dotnet test"}.</comment>
  </data>
  <data name="ArtifactPostProcessingDispatcherDisplayName" xml:space="preserve">
    <value>Artifact post-processing dispatcher</value>
  </data>
  <data name="ArtifactPostProcessingDispatcherManifestOptionDescription" xml:space="preserve">
    <value>Path to the artifact post-processing manifest.</value>
  </data>
  <data name="ArtifactPostProcessingDispatcherManifestNotFound" xml:space="preserve">
    <value>The artifact post-processing manifest does not exist.</value>
  </data>
  <data name="ArtifactPostProcessingDispatcherInvalidProcessorOutput" xml:space="preserve">
    <value>The processed artifact must be an existing file under the output directory and cannot overwrite an input artifact.</value>
  </data>
  <data name="ArtifactPostProcessingDispatcherProcessorConflict" xml:space="preserve">
    <value>Multiple artifact post-processors match '{0}'. The first registered processor, '{1}', will be used.</value>
    <comment>{0} is an artifact kind or file extension. {1} is an extension UID.</comment>
  </data>
  <data name="ArtifactPostProcessingDispatcherProcessorFailed" xml:space="preserve">
    <value>Artifact post-processor '{0}' failed: {1}</value>
    <comment>{0} is the processor UID. {1} is the exception message.</comment>
  </data>
  <data name="ArtifactPostProcessingDispatcherRequiresPipe" xml:space="preserve">
    <value>The artifact post-processing dispatcher requires a dotnet test pipe.</value>
    <comment>Do not localize command name {Locked="dotnet test"}.</comment>
  </data>
  <data name="ArtifactPostProcessingManifestInputMissingPath" xml:space="preserve">
    <value>Artifact post-processing manifest input {0} does not have a path.</value>
    <comment>{0} is the zero-based input index.</comment>
  </data>
  <data name="ArtifactPostProcessingManifestInputsMustBeArray" xml:space="preserve">
    <value>The artifact post-processing manifest inputs property must be an array.</value>
    <comment>Do not localize property name {Locked="inputs"}.</comment>
  </data>
  <data name="ArtifactPostProcessingManifestInvalid" xml:space="preserve">
    <value>The artifact post-processing manifest must have schemaVersion 1 and an outputDirectory.</value>
    <comment>Do not localize property names {Locked="schemaVersion"}{Locked="outputDirectory"}.</comment>
  </data>
  <data name="ArtifactPostProcessingManifestReadError" xml:space="preserve">
    <value>Cannot read the artifact post-processing manifest: {0}</value>
    <comment>{0} is the exception message.</comment>
  </data>
  <data name="CannotCreateTestExecutionFilterErrorMessage" xml:space="preserve">
    <value>Failed to create a test execution filter</value>
  </data>
  <data name="CompositeTestExecutionFilterCannotContainNull" xml:space="preserve">
    <value>A composite test execution filter cannot contain a null child filter.</value>
  </data>
  <data name="CompositeTestExecutionFilterRequiresTwoFilters" xml:space="preserve">
    <value>A composite test execution filter requires at least two child filters.</value>
  </data>
  <data name="TestExecutionFilterProviderNotSupportedForServer" xml:space="preserve">
    <value>Test execution filter provider '{0}' returned filter type '{1}' for a JSON-RPC server request. Provider constraints are not applied to server requests; return null when TestExecutionFilterContext.Origin is Server.</value>
    <comment>{0} is the provider UID. {1} is the filter type. {Locked="JSON-RPC"}{Locked="null"}{Locked="TestExecutionFilterContext.Origin"}{Locked="Server"}</comment>
  </data>
  <data name="UnsupportedProviderTestExecutionFilter" xml:space="preserve">
    <value>Test execution filter provider '{0}' returned unsupported filter type '{1}'. Providers can return only NopFilter, TestNodeUidListFilter, TreeNodeFilter, or an And CompositeTestExecutionFilter.</value>
    <comment>{0} is the provider UID. {1} is the unsupported filter type. {Locked="NopFilter"}{Locked="TestNodeUidListFilter"}{Locked="TreeNodeFilter"}{Locked="And"}{Locked="CompositeTestExecutionFilter"}</comment>
  </data>
  <data name="UnsupportedRequestTestExecutionFilter" xml:space="preserve">
    <value>The request contains unsupported test execution filter type '{0}'.</value>
    <comment>{0} is the unsupported filter type.</comment>
  </data>
  <data name="UnsupportedTestExecutionFilterOperator" xml:space="preserve">
    <value>Only the And test execution filter operator is supported.</value>
    <comment>{Locked="And"}</comment>
  </data>
  <data name="UnsupportedTestExecutionFilterOperatorValue" xml:space="preserve">
    <value>Test execution filter operator '{0}' is not supported. Only And is supported.</value>
    <comment>{0} is the unsupported operator value. {Locked="And"}</comment>
  </data>
  <data name="CompositeServiceFactoryInstanceAlreadyRegistered" xml:space="preserve">
    <value>The same instance of 'CompositeExtensionFactory' is already registered</value>
    <comment>{Locked="CompositeExtensionFactory"}</comment>
  </data>
  <data name="CompositeExtensionFactoryInstantiationFailedErrorMessage" xml:space="preserve">
    <value>Failed to create an instance of composite extension '{0}'. See the inner exception for details.</value>
    <comment>{0} is the extension type name.</comment>
  </data>
  <data name="CompositeExtensionFactoryReturnedNullInstanceErrorMessage" xml:space="preserve">
    <value>The factory for composite extension '{0}' returned a null instance.</value>
    <comment>{0} is the extension type name.</comment>
  </data>
  <data name="ConfigurationManagerCannotFindDefaultJsonConfigurationErrorMessage" xml:space="preserve">
    <value>Could not find the default json configuration</value>
  </data>
  <data name="ConsoleTestExecutionFilterFactoryDescription" xml:space="preserve">
    <value>Creates the right test execution filter for console mode</value>
  </data>
  <data name="ConsoleTestExecutionFilterFactoryDisplayName" xml:space="preserve">
    <value>Console test execution filter factory</value>
  </data>
  <data name="ExtensionDoesNotImplementGivenInterfaceErrorMessage" xml:space="preserve">
    <value>Extension of type '{0}' is not implementing the required '{1}' interface</value>
    <comment>{0} is the extension type name. {1} is the required interface type name.</comment>
  </data>
  <data name="ExtensionWithSameUidAlreadyRegisteredErrorMessage" xml:space="preserve">
    <value>Extensions with the same UID '{0}' have already been registered. Registered extensions are of types: {1}</value>
    <comment>{0} is the duplicate extension UID. {1} is the list of registered extension type names.</comment>
  </data>
  <data name="JsonConfigurationFileParserDuplicateKeyErrorMessage" xml:space="preserve">
    <value>A duplicate key '{0}' was found</value>
    <comment>{0} is the duplicate JSON key.</comment>
  </data>
  <data name="JsonConfigurationFileParserTopLevelElementIsNotAnObjectErrorMessage" xml:space="preserve">
    <value>Top-level JSON element must be an object. Instead, '{0}' was found</value>
    <comment>{0} is the JSON value kind that was found.</comment>
  </data>
  <data name="JsonConfigurationFileParserUnsupportedTokenErrorMessage" xml:space="preserve">
    <value>Unsupported JSON token '{0}' was found</value>
    <comment>{0} is the unsupported JSON token type.</comment>
  </data>
  <data name="JsonConfigurationSectionMustBeAnObjectErrorMessage" xml:space="preserve">
    <value>The '{0}' section in the testconfig.json file ('{1}') must be a JSON object.</value>
    <comment>{0} is the section name (e.g. environmentVariables). {1} is the path to the testconfig.json file. {Locked="testconfig.json"}{Locked="environmentVariables"}</comment>
  </data>
  <data name="JsonConfigurationSectionEntryMustBeScalarErrorMessage" xml:space="preserve">
    <value>The entry '{0}' under section '{1}' in the testconfig.json file ('{2}') must be a scalar string value. Nested objects and arrays are not supported.</value>
    <comment>{0} is the full dotted/colon-separated key. {1} is the section name. {2} is the path to the testconfig.json file. {Locked="testconfig.json"}</comment>
  </data>
  <data name="JsonCommandLineOptionsEntryMustBeScalarOrArrayErrorMessage" xml:space="preserve">
    <value>The entry '{0}' under section '{1}' in the testconfig.json file ('{2}') must be either a scalar value (string, number, boolean) or an array of scalar values. Nested objects are not supported.</value>
    <comment>{0} is the entry name relative to the section (e.g. an option name like 'timeout' or an indexed key like 'timeout:0'). {1} is the section name (commandLineOptions). {2} is the path to the testconfig.json file. {Locked="testconfig.json"}{Locked="commandLineOptions"}{Locked="timeout"}{Locked="timeout:0"}</comment>
  </data>
  <data name="JsonCommandLineOptionsValidationErrorPrefix" xml:space="preserve">
    <value>In testconfig.json under 'commandLineOptions': {0}</value>
    <comment>{0} is the underlying validation error message (unknown option, arity mismatch, invalid arguments...). {Locked="testconfig.json"}{Locked="commandLineOptions"}</comment>
  </data>
  <data name="JsonCommandLineOptionIsBootstrapOnlyErrorMessage" xml:space="preserve">
    <value>The option '--{0}' is read during platform bootstrap (before the testconfig.json file is loaded) and must therefore be passed on the command line rather than declared under 'commandLineOptions' in testconfig.json.</value>
    <comment>{0} is the bare bootstrap-only option name without the leading "--" (e.g. config-file, diagnostic, diagnostic-verbosity); the "--" prefix is already in the format string. {Locked="--"}{Locked="commandLineOptions"}{Locked="testconfig.json"}</comment>
  </data>
  <data name="TestConfigurationEnvironmentVariableProviderDisplayName" xml:space="preserve">
    <value>testconfig.json environment variables provider</value>
    <comment>{Locked="testconfig.json"}</comment>
  </data>
  <data name="TestConfigurationEnvironmentVariableProviderDescription" xml:space="preserve">
    <value>Applies environment variables declared in the 'environmentVariables' section of the testconfig.json file to the test host child process.</value>
    <comment>{Locked="environmentVariables"}{Locked="testconfig.json"}</comment>
  </data>
  <data name="TestConfigurationEnvironmentVariableNameCannotBeEmptyErrorMessage" xml:space="preserve">
    <value>Environment variable names declared in the 'environmentVariables' section of the testconfig.json file must not be empty.</value>
    <comment>{Locked="environmentVariables"}{Locked="testconfig.json"}</comment>
  </data>
  <data name="TestConfigurationEnvironmentVariableInvalidNameErrorMessage" xml:space="preserve">
    <value>Environment variable name '{0}' declared in the 'environmentVariables' section of the testconfig.json file is invalid. Names must not contain '=' or null characters.</value>
    <comment>{0} is the invalid environment variable name. {Locked="environmentVariables"}{Locked="testconfig.json"}{Locked="="}</comment>
  </data>
  <data name="ServerTestExecutionFilterFactoryDescription" xml:space="preserve">
    <value>Creates the right test execution filter for server mode</value>
  </data>
  <data name="ServerTestExecutionFilterFactoryDisplayName" xml:space="preserve">
    <value>Server test execution filter factory</value>
  </data>
  <data name="ServiceProviderCannotFindServiceErrorMessage" xml:space="preserve">
    <value>Cannot find service of type '{0}'</value>
    <comment>{0} is the requested service type name.</comment>
  </data>
  <data name="ServiceProviderServiceAlreadyRegistered" xml:space="preserve">
    <value>Instance of type '{0}' is already registered</value>
    <comment>{0} is the already registered service type name.</comment>
  </data>
  <data name="ServiceProviderShouldNotRegisterTestFramework" xml:space="preserve">
    <value>Instances of type 'ITestFramework' should not be registered through the service provider but through 'ITestApplicationBuilder.RegisterTestFramework'</value>
    <comment>{Locked="ITestFramework"}{Locked="ITestApplicationBuilder.RegisterTestFramework"}</comment>
  </data>
  <data name="TestAdapterInvokerFactoryAlreadySetErrorMessage" xml:space="preserve">
    <value>An 'ITestFrameworkInvoker' factory is already set</value>
    <comment>{Locked="ITestFrameworkInvoker"}</comment>
  </data>
  <data name="TestApplicationBuilderApplicationAlreadyRegistered" xml:space="preserve">
    <value>The application has already been built</value>
  </data>
  <data name="TestApplicationBuilderFrameworkAdapterFactoryAlreadyRegisteredErrorMessage" xml:space="preserve">
    <value>The test framework adapter factory has already been registered</value>
  </data>
  <data name="TestApplicationBuilderTestFrameworkCapabilitiesAlreadyRegistered" xml:space="preserve">
    <value>The test framework capabilities factory has already been registered</value>
  </data>
  <data name="TestApplicationBuilderTestFrameworkNotRegistered" xml:space="preserve">
    <value>The test framework adapter has not been registered. Use 'ITestApplicationBuilder.RegisterTestFramework' to register it</value>
    <comment>{Locked="ITestApplicationBuilder.RegisterTestFramework"}</comment>
  </data>
  <data name="TestApplicationResultDescription" xml:space="preserve">
    <value>Determine the result of the test application execution</value>
  </data>
  <data name="TestApplicationResultDisplayName" xml:space="preserve">
    <value>Test application result</value>
  </data>
  <data name="TestApplicationVSTestModeTooManyBuilders" xml:space="preserve">
    <value>VSTest mode only supports a single TestApplicationBuilder per process</value>
    <comment>{Locked="VSTest"}{Locked="TestApplicationBuilder"}</comment>
  </data>
  <data name="TestHostAdapterInvokerFailedTestSessionErrorMessage" xml:space="preserve">
    <value>Test adapter test session failure</value>
  </data>
  <data name="TreeNodeFilterCannotContainSlashCharacterErrorMessage" xml:space="preserve">
    <value>A filter '{0}' should not contain a '/' character</value>
    <comment>{0} is the filter expression string. {Locked="/"}</comment>
  </data>
  <data name="TreeNodeFilterEscapeCharacterShouldNotBeLastErrorMessage" xml:space="preserve">
    <value>An escape character should not terminate the filter string '{0}'</value>
    <comment>{0} is the filter expression string.</comment>
  </data>
  <data name="TreeNodeFilterOnlyLastLevelCanContainMutiLevelWildcardErrorMessage" xml:space="preserve">
    <value>Only the final filter path can contain '**' wildcard</value>
    <comment>{Locked="**"}</comment>
  </data>
  <data name="TreeNodeFilterOperatorNotAllowedErrorMessage" xml:space="preserve">
    <value>Unexpected operator '&amp;' or '|' within filter expression '{0}'</value>
    <comment>{0} is the filter expression string. {Locked="&amp;"}{Locked="|"}</comment>
  </data>
  <data name="TreeNodeFilterPathShouldStartWithSlashErrorMessage" xml:space="preserve">
    <value>Invalid node path, expected root as first character '{0}'</value>
    <comment>{0} is the first character found in the invalid node path.</comment>
  </data>
  <data name="TreeNodeFilterUnbalancedFilterErrorMessage" xml:space="preserve">
    <value>Filter expression '{0}' contains an unbalanced number of '{1}' '{2}' operators</value>
    <comment>{0} is the filter expression string. {1} and {2} are () or [] operator pairs. {Locked="()"}{Locked="[]"}</comment>
  </data>
  <data name="TreeNodeFilterUnexpectedSlashOperatorErrorMessage" xml:space="preserve">
    <value>Filter contains an unexpected '/' operator inside a parenthesized expression</value>
    <comment>{Locked="/"}</comment>
  </data>
  <data name="TreeNodeFilterUnexpectedSlashOperatorInPathSegmentErrorMessage" xml:space="preserve">
    <value>Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.</value>
    <comment>{0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'. {Locked="/"}{Locked="/A/B/C/(X|Y)"}{Locked="/A/(B/C)"}</comment>
  </data>
  <data name="TEstExecutionFilterFactoryFactoryAlreadySetErrorMessage" xml:space="preserve">
    <value>An 'ITestExecutionFilterFactory' factory is already set</value>
    <comment>{Locked="ITestExecutionFilterFactory"}</comment>
  </data>
  <data name="CannotRemoveEnvironmentVariableAtThisStageErrorMessage" xml:space="preserve">
    <value>Cannot remove environment variables at this stage</value>
  </data>
  <data name="CannotRemoveEnvironmentVariableItIsLockedErrorMessage" xml:space="preserve">
    <value>Extension '{0}' tried to remove environment variable '{1}' but it was locked by extension '{2}'</value>
    <comment>{0} is the extension display name. {1} is the environment variable name. {2} is the display name of the extension that locked the environment variable.</comment>
  </data>
  <data name="CannotSetEnvironmentVariableAtThisStageErrorMessage" xml:space="preserve">
    <value>Cannot set environment variables at this stage</value>
  </data>
  <data name="CannotSetEnvironmentVariableItIsLockedErrorMessage" xml:space="preserve">
    <value>Extension '{0}' tried to set environment variable '{1}' but it was locked by extension '{2}'</value>
    <comment>{0} is the extension display name. {1} is the environment variable name. {2} is the display name of the extension that locked the environment variable.</comment>
  </data>
  <data name="ProcessHasNotYetExitedErrorMessage" xml:space="preserve">
    <value>Process should have exited before we can determine this value</value>
  </data>
  <data name="CannotStartProcessErrorMessage" xml:space="preserve">
    <value>Cannot start process '{0}'</value>
    <comment>{0} is the process file name.</comment>
  </data>
  <data name="EnvironmentVariableProviderFailedWithError" xml:space="preserve">
    <value>Provider '{0}' (UID: {1}) failed with error: {2}</value>
    <comment>{0} is the provider display name. {1} is the provider UID. {2} is the error message.</comment>
  </data>
  <data name="GlobalValidationOfTestHostEnvironmentVariablesFailedErrorMessage" xml:space="preserve">
    <value>The following 'ITestHostEnvironmentVariableProvider' providers rejected the final environment variables setup:</value>
    <comment>{Locked="ITestHostEnvironmentVariableProvider"}</comment>
  </data>
  <data name="TestFrameworkProxyApiShouldNotBeCalled" xml:space="preserve">
    <value>Method '{0}' should not have been called on this proxy object</value>
    <comment>{0} is the method name.</comment>
  </data>
  <data name="TestProcessDidNotExitGracefullyErrorMessage" xml:space="preserve">
    <value>Test application process didn't exit gracefully, exit code is '{0}'</value>
    <comment>{0} is the process exit code.</comment>
  </data>
  <data name="CannotCreateUniqueLogFileErrorMessage" xml:space="preserve">
    <value>Failed to create the diagnostic log file '{0}' after {1} attempts. Last error: {2}</value>
    <comment>{0} is the full path of the last log file that was tried. {1} is the number of attempts that were made. {2} is the error message of the last failed attempt.</comment>
  </data>
  <data name="FailedToWriteLogToChannelErrorMessage" xml:space="preserve">
    <value>Failed to write the log to the channel. Missed log content:
{0}</value>
    <comment>{0} is the log content that could not be written.</comment>
  </data>
  <data name="ServerLogMessageDescription" xml:space="preserve">
    <value>This data represents a server log message</value>
  </data>
  <data name="ServerLogMessageDisplayName" xml:space="preserve">
    <value>Server log message</value>
  </data>
  <data name="TimeoutAcquiringSemaphoreErrorMessage" xml:space="preserve">
    <value>Failed to acquire semaphore before timeout of '{0}' seconds</value>
    <comment>{0} is the timeout in seconds.</comment>
  </data>
  <data name="TimeoutFlushingLogsErrorMessage" xml:space="preserve">
    <value>Failed to flush logs to log file '{0}' before the timeout of '{1}' seconds. The log file may be incomplete.</value>
    <comment>{0} is the log file path. {1} is the timeout in seconds.</comment>
  </data>
  <data name="UnexpectedExceptionInFileLoggerErrorMessage" xml:space="preserve">
    <value>An unexpected exception occurred in the 'FileLogger' write loop for log file '{0}'. The log file may be incomplete.
{1}</value>
    <comment>{0} is the log file path. {1} is the exception ToString output. {Locked="FileLogger"}</comment>
  </data>
  <data name="RetryFailedAfterTriesErrorMessage" xml:space="preserve">
    <value>Retry failed after {0} times</value>
    <comment>{0} is the retry count.</comment>
  </data>
  <data name="CommandLineInvalidArgumentsForOption" xml:space="preserve">
    <value>Option '--{0}' has invalid arguments: {1}</value>
    <comment>{0} is the option name without the leading dashes. {1} is the invalid argument value or validation error.</comment>
  </data>
  <data name="CommandLineInvalidConfiguration" xml:space="preserve">
    <value>Invalid configuration for provider '{0}' (UID: {1}). Error: {2}</value>
    <comment>{0} is the provider display name. {1} is the provider UID. {2} is the configuration error message.</comment>
  </data>
  <data name="CommandLineOptionExpectsAtLeastArguments" xml:space="preserve">
    <value>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</value>
    <comment>{0} is the option name without the leading dashes. {1} is the provider display name. {2} is the provider UID. {3} is the minimum number of expected arguments.</comment>
  </data>
  <data name="CommandLineOptionExpectsAtMostArguments" xml:space="preserve">
    <value>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</value>
    <comment>{0} is the option name without the leading dashes. {1} is the provider display name. {2} is the provider UID. {3} is the maximum number of expected arguments.</comment>
  </data>
  <data name="CommandLineOptionExpectsNoArguments" xml:space="preserve">
    <value>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</value>
    <comment>{0} is the option name without the leading dashes. {1} is the provider display name. {2} is the provider UID.</comment>
  </data>
  <data name="CommandLineOptionIsUsingReservedPrefix" xml:space="preserve">
    <value>Option `--{0}` from provider '{1}' (UID: {2}) is using the reserved prefix '--internal'</value>
    <comment>{0} is the option name without the leading dashes. {1} is the provider display name. {2} is the provider UID. {Locked="--internal"}</comment>
  </data>
  <data name="CommandLineUnknownOption" xml:space="preserve">
    <value>Unknown option '--{0}'</value>
    <comment>{0} is the unknown option name without the leading dashes.</comment>
  </data>
  <data name="InvalidCommandLineArguments" xml:space="preserve">
    <value>Invalid command line arguments:</value>
  </data>
  <data name="CommandLineValidationCommandLine" xml:space="preserve">
    <value>Command line: {0}</value>
    <comment>{0} is the command line used to run the application.</comment>
  </data>
  <data name="CommandLineInvalidArityErrorMessage" xml:space="preserve">
    <value>Invalid arity, maximum must be greater than minimum</value>
  </data>
  <data name="CommandLineInvalidOptionName" xml:space="preserve">
    <value>Invalid option name '{0}', it must contain only letter and '-' (e.g. my-option)</value>
    <comment>{0} is the invalid option name. {Locked="-"}{Locked="my-option"}</comment>
  </data>
  <data name="CommandLineOptionIsDeclaredByMultipleProviders" xml:space="preserve">
    <value>Option '--{0}' is declared by multiple providers: '{1}'</value>
    <comment>{0} is the option name without the leading dashes. {1} is the list of provider display names.</comment>
  </data>
  <data name="CommandLineOptionIsDeclaredByMultipleProvidersWorkaround" xml:space="preserve">
    <value>You can fix the previous option clash by overriding the option name using the configuration file</value>
  </data>
  <data name="CommandLineOptionIsReserved" xml:space="preserve">
    <value>Option '--{0}' is reserved and cannot be used by providers: '{1}'</value>
    <comment>{0} is the option name without the leading dashes. {1} is the list of provider display names.</comment>
  </data>
  <data name="CommandLineParserUnexpectedArgument" xml:space="preserve">
    <value>Unexpected argument {0}</value>
    <comment>{0} is the unexpected command-line argument.</comment>
  </data>
  <data name="CommandLineParserUnexpectedSingleQuoteInArgument" xml:space="preserve">
    <value>Unexpected single quote in argument: {0}</value>
    <comment>{0} is the command-line argument containing the unexpected single quote.</comment>
  </data>
  <data name="CommandLineParserUnexpectedSingleQuoteInArgumentForOption" xml:space="preserve">
    <value>Unexpected single quote in argument: {0} for option '--{1}'</value>
    <comment>{0} is the command-line argument containing the unexpected single quote. {1} is the option name without the leading dashes.</comment>
  </data>
  <data name="HelpApplicationUsage" xml:space="preserve">
    <value>Usage {0} [option providers] [extension option providers]</value>
    <comment>{0} is the application name used in the usage line.</comment>
  </data>
  <data name="HelpExecuteTestApplication" xml:space="preserve">
    <value>Execute a .NET Test Application.</value>
    <comment>{Locked=".NET"}</comment>
  </data>
  <data name="HelpExtensionOptions" xml:space="preserve">
    <value>Extension options:</value>
  </data>
  <data name="HelpNoExtensionRegistered" xml:space="preserve">
    <value>    No extension registered.</value>
  </data>
  <data name="HelpOptions" xml:space="preserve">
    <value>Options:</value>
  </data>
  <data name="HelpTestApplicationRunner" xml:space="preserve">
    <value>&lt;test application runner&gt;</value>
    <comment>{Locked="&lt;test application runner&gt;"}</comment>
  </data>
  <data name="NotAvailable" xml:space="preserve">
    <value>Not available</value>
  </data>
  <data name="NotFound" xml:space="preserve">
    <value>Not found</value>
  </data>
  <data name="PlatformCommandLineClientHostOptionDescription" xml:space="preserve">
    <value>Specify the hostname of the client.</value>
  </data>
  <data name="PlatformCommandLineClientPortOptionDescription" xml:space="preserve">
    <value>Specify the port of the client.</value>
  </data>
  <data name="PlatformCommandLineDiagnosticFileLoggerSynchronousWriteOptionDescription" xml:space="preserve">
    <value>Force the built-in file logger to write the log synchronously.
Useful for scenario where you don't want to lose any log (i.e. in case of crash).
Note that this is slowing down the test execution.</value>
  </data>
  <data name="PlatformCommandLineDiagnosticOptionDescription" xml:space="preserve">
    <value>Enable the diagnostic logging. The default log level is 'Trace'.
The file will be written in the output directory with the name log_[yyMMddHHmmssfff].diag</value>
    <comment>{Locked="Trace"}{Locked="log_[yyMMddHHmmssfff].diag"}</comment>
  </data>
  <data name="PlatformCommandLineDiagnosticOptionExpectsSingleArgumentErrorMessage" xml:space="preserve">
    <value>'--diagnostic-verbosity' expects a single level argument ('Trace', 'Debug', 'Information', 'Warning', 'Error', or 'Critical')</value>
    <comment>{Locked="--diagnostic-verbosity"}{Locked="Trace"}{Locked="Debug"}{Locked="Information"}{Locked="Warning"}{Locked="Error"}{Locked="Critical"}</comment>
  </data>
  <data name="PlatformCommandLineDiagnosticOptionIsMissing" xml:space="preserve">
    <value>'--{0}' requires '--diagnostic' to be provided</value>
    <comment>{0} is the option name without the leading dashes. {Locked="--diagnostic"}</comment>
  </data>
  <data name="PlatformCommandLineDiagnosticOutputDirectoryOptionDescription" xml:space="preserve">
    <value>Output directory of the diagnostic logging.
If not specified the file will be generated inside the default 'TestResults' directory.</value>
    <comment>{Locked="TestResults"}</comment>
  </data>
  <data name="PlatformCommandLineDiagnosticOutputFilePrefixOptionDescription" xml:space="preserve">
    <value>Prefix for the log file name that will replace '[log]_.'</value>
    <comment>{Locked="[log]_."}</comment>
  </data>
  <data name="PlatformCommandLineDiagnosticVerbosityOptionDescription" xml:space="preserve">
    <value>Define the level of the verbosity for the --diagnostic.
The available values are 'Trace', 'Debug', 'Information', 'Warning', 'Error', and 'Critical'.</value>
    <comment>{Locked="--diagnostic"}{Locked="Trace"}{Locked="Debug"}{Locked="Information"}{Locked="Warning"}{Locked="Error"}{Locked="Critical"}</comment>
  </data>
  <data name="PlatformCommandLineDiscoverTestsOptionDescription" xml:space="preserve">
    <value>List available tests.
Optionally accepts 'text' (the default human-readable output) or 'json' to print the discovered tests as a JSON document on standard output.</value>
    <comment>{Locked="text"}{Locked="json"}</comment>
  </data>
  <data name="PlatformCommandLineDiscoverTestsInvalidArgument" xml:space="preserve">
    <value>'--list-tests' received unexpected value '{0}'. Supported values are: {1}.</value>
    <comment>{0} is the unexpected option value. {1} is the comma-separated list of supported values. {Locked="--list-tests"}{Locked="text"}{Locked="json"}</comment>
  </data>
  <data name="PlatformCommandLineHelpOptionDescription" xml:space="preserve">
    <value>Show the command line help.</value>
  </data>
  <data name="PlatformCommandLineInfoOptionDescription" xml:space="preserve">
    <value>Display .NET test application information.</value>
    <comment>{Locked=".NET"}</comment>
  </data>
  <data name="PlatformCommandLineMinimumExpectedTestsIncompatibleDiscoverTests" xml:space="preserve">
    <value>'--list-tests' and '--minimum-expected-tests' are incompatible options</value>
    <comment>{Locked="--list-tests"}{Locked="--minimum-expected-tests"}</comment>
  </data>
  <data name="PlatformCommandLineMinimumExpectedTestsOptionSingleArgument" xml:space="preserve">
    <value>'--minimum-expected-tests' expects a single non-zero positive integer value
(e.g. '--minimum-expected-tests 10')</value>
    <comment>{Locked="--minimum-expected-tests"}{Locked="--minimum-expected-tests 10"}</comment>
  </data>
  <data name="PlatformCommandLineNoBannerOptionDescription" xml:space="preserve">
    <value>Do not display the startup banner, the copyright message or the telemetry banner.</value>
  </data>
  <data name="PlatformCommandLinePortOptionDescription" xml:space="preserve">
    <value>Specify the port of the server.</value>
  </data>
  <data name="PlatformCommandLinePortOptionSingleArgument" xml:space="preserve">
    <value>'--{0}' expects a single valid port as argument</value>
    <comment>{0} is the option name without the leading dashes.</comment>
  </data>
  <data name="PlatformCommandLineProviderDescription" xml:space="preserve">
    <value>Microsoft Testing Platform command line provider</value>
  </data>
  <data name="PlatformCommandLineProviderDisplayName" xml:space="preserve">
    <value>Platform command line provider</value>
  </data>
  <data name="PlatformCommandLineResultDirectoryOptionDescription" xml:space="preserve">
    <value>The directory where the test results are going to be placed.
If the specified directory doesn't exist, it's created.
The default is TestResults in the directory that contains the test application.</value>
    <comment>{Locked="TestResults"}</comment>
  </data>
  <data name="PlatformCommandLineServerOptionDescription" xml:space="preserve">
    <value>Enable the server mode.</value>
  </data>
  <data name="PlatformCommandLineServerInvalidArgument" xml:space="preserve">
    <value>'--server' received unexpected value '{0}'. Supported values are: {1}.</value>
    <comment>{0} is the unexpected protocol value. {1} is the comma-separated list of supported protocol values. {Locked="--server"}{Locked="jsonrpc"}{Locked="dotnettestcli"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestCliRequiresPipe" xml:space="preserve">
    <value>'--server {0}' requires '--{1}' to be specified.</value>
    <comment>{0} is the server protocol value. {1} is the required option name without the leading dashes. {Locked="--server"}{Locked="dotnettestcli"}{Locked="dotnet-test-pipe"}</comment>
  </data>
  <data name="PlatformCommandLineSkipBuildersNumberCheckOptionDescription" xml:space="preserve">
    <value>For testing purposes</value>
  </data>
  <data name="PlatformCommandLineTestHostControllerPIDOptionDescription" xml:space="preserve">
    <value>Eventual parent test host controller PID.</value>
  </data>
  <data name="PlatformCommandLineDotnetTestPipe" xml:space="preserve">
    <value>dotnet test pipe.</value>
    <comment>{Locked="dotnet test"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestTransportOptionDescription" xml:space="preserve">
    <value>Selects the pre-launch transport for the dotnet test protocol.</value>
    <comment>{Locked="dotnet test"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestHttpEndpointOptionDescription" xml:space="preserve">
    <value>Specifies the authenticated HTTP endpoint for the dotnet test protocol.</value>
    <comment>{Locked="HTTP"}{Locked="dotnet test"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestHttpTokenOptionDescription" xml:space="preserve">
    <value>Specifies the per-run HTTP bearer token for the dotnet test protocol.</value>
    <comment>{Locked="HTTP"}{Locked="dotnet test"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestTransportInvalid" xml:space="preserve">
    <value>'--dotnet-test-transport' received unexpected value '{0}'. Supported values are: {1}.</value>
    <comment>{0} is the unexpected transport value. {1} is the comma-separated list of supported transport values. {Locked="--dotnet-test-transport"}{Locked="pipe"}{Locked="http"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestHttpEndpointInvalid" xml:space="preserve">
    <value>'--dotnet-test-http-endpoint' requires an absolute HTTPS URL, or an HTTP loopback URL, without user information, query, or fragment.</value>
    <comment>{Locked="--dotnet-test-http-endpoint"}{Locked="HTTP"}{Locked="HTTPS"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestHttpTokenInvalid" xml:space="preserve">
    <value>'--dotnet-test-http-token' requires a non-empty valid bearer token without whitespace or control characters.</value>
    <comment>{Locked="--dotnet-test-http-token"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestTransportConflict" xml:space="preserve">
    <value>The dotnet test named-pipe and HTTP transports cannot be selected together.</value>
    <comment>{Locked="dotnet test"}{Locked="HTTP"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestHttpOptionsRequireTransport" xml:space="preserve">
    <value>The dotnet test HTTP endpoint and token options require '--dotnet-test-transport http'.</value>
    <comment>{Locked="dotnet test"}{Locked="HTTP"}{Locked="--dotnet-test-transport http"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestCliRequiresTransport" xml:space="preserve">
    <value>'--server dotnettestcli' requires either '--dotnet-test-pipe' or '--dotnet-test-transport http'.</value>
    <comment>{Locked="--server dotnettestcli"}{Locked="--dotnet-test-pipe"}{Locked="--dotnet-test-transport http"}</comment>
  </data>
  <data name="PlatformCommandLineDotnetTestHttpRequiresEndpointAndToken" xml:space="preserve">
    <value>'--dotnet-test-transport http' requires both '--dotnet-test-http-endpoint' and '--dotnet-test-http-token'.</value>
    <comment>{Locked="--dotnet-test-transport http"}{Locked="--dotnet-test-http-endpoint"}{Locked="--dotnet-test-http-token"}</comment>
  </data>
  <data name="PlatformCommandLinePipeTransportNotSupportedOnBrowser" xml:space="preserve">
    <value>The dotnet test named-pipe transport is not supported on browser-wasm. Use '--dotnet-test-transport http'.</value>
    <comment>{Locked="dotnet test"}{Locked="browser-wasm"}{Locked="--dotnet-test-transport http"}</comment>
  </data>
  <data name="PlatformCommandLinePipeTransportNotSupportedOnWasi" xml:space="preserve">
    <value>The dotnet test named-pipe transport is not supported on wasi-wasm. Use '--dotnet-test-transport http'.</value>
    <comment>{Locked="dotnet test"}{Locked="wasi-wasm"}{Locked="--dotnet-test-transport http"}</comment>
  </data>
  <data name="TreeNodeFilterDescription" xml:space="preserve">
    <value>Use a tree filter to filter down the tests to execute</value>
  </data>
  <data name="ConnectingToClientHost" xml:space="preserve">
    <value>Connecting to client host '{0}' port '{1}'</value>
    <comment>{0} is the client host name. {1} is the client port.</comment>
  </data>
  <data name="JsonRpcTcpServerDescription" xml:space="preserve">
    <value>JsonRpc server implementation based on the test platform protocol specification.</value>
    <comment>{Locked="JsonRpc"}</comment>
  </data>
  <data name="JsonRpcTcpServerToSingleClientDescription" xml:space="preserve">
    <value>JsonRpc server to client handshake, implementation based on the test platform protocol specification.</value>
    <comment>{Locked="JsonRpc"}</comment>
  </data>
  <data name="TelemetryNotice" xml:space="preserve">
    <value>Telemetry
---------
Microsoft Testing Platform collects usage data in order to help us improve your experience. The data is collected by Microsoft and are not shared with anyone.
You can opt-out of telemetry by setting the TESTINGPLATFORM_TELEMETRY_OPTOUT or DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.

Read more about Microsoft Testing Platform telemetry: https://aka.ms/testingplatform/telemetry</value>
    <comment>{Locked="TESTINGPLATFORM_TELEMETRY_OPTOUT"}{Locked="DOTNET_CLI_TELEMETRY_OPTOUT"}{Locked="1"}{Locked="true"}{Locked="https://aka.ms/testingplatform/telemetry"}</comment>
  </data>
  <data name="TelemetryProviderAlreadySetErrorMessage" xml:space="preserve">
    <value>Telemetry provider is already set</value>
  </data>
  <data name="UnexpectedCallTelemetryIsDisabledErrorMessage" xml:space="preserve">
    <value>Unexpected telemetry call, the telemetry is disabled.</value>
  </data>
  <data name="CouldNotFindDirectoryErrorMessage" xml:space="preserve">
    <value>Could not find directory '{0}'</value>
    <comment>{0} is the directory path.</comment>
  </data>
  <data name="InternalLoopAsyncDidNotExitSuccessfullyErrorMessage" xml:space="preserve">
    <value>Method '{0}' did not exit successfully</value>
    <comment>{0} is the method name.</comment>
  </data>
  <data name="NamedPipePathTooLongErrorMessage" xml:space="preserve">
    <value>The named pipe path '{0}' is {1} bytes long, which exceeds the maximum of {2} bytes allowed for a Unix domain socket. Use a shorter directory by setting the '{3}' environment variable, or by setting 'TMPDIR' when '{3}' is not set.</value>
    <comment>{0} is the full pipe path, {1} is its length in bytes, {2} is the maximum allowed length in bytes, {3} is the environment variable name. Do not translate 'TMPDIR' or the environment variable name.</comment>
  </data>
  <data name="NamedPipeDirectoryNotWritableErrorMessage" xml:space="preserve">
    <value>The named pipe directory '{0}' does not exist or is not writable: {1}. Set the '{2}' environment variable to an existing writable directory, or unset it to fall back to the default temporary directory.</value>
    <comment>{0} is the directory path, {1} is the underlying error message, {2} is the environment variable name. Do not translate the environment variable name.</comment>
  </data>
  <data name="TestHostControllerConnectionInvalidAuthorizedSecurityIdentityErrorMessage" xml:space="preserve">
    <value>The test host launcher '{0}' (UID: {1}) asked to authorize the security identity '{2}' on the test host controller connection, but only the identity of a single sandboxed application (on Windows, a security identifier of the form 'S-1-15-2-...') can be authorized. Users, groups and the catch-all '{3}' security identifier are never granted access.</value>
    <comment>{0} is the launcher display name, {1} is the launcher unique identifier, {2} is the rejected security identity, {3} is the well-known 'ALL APPLICATION PACKAGES' security identifier. {Locked="'S-1-15-2-...'"}</comment>
  </data>
  <data name="PlatformCommandLineIgnoreExitCodeOptionDescription" xml:space="preserve">
    <value>Do not report a non-successful exit value for the specified exit codes.
For example, '--ignore-exit-code 8;9' ignores exit codes 8 and 9 and returns 0 in those cases.
For more information about exit codes, see https://learn.microsoft.com/dotnet/core/testing/microsoft-testing-platform-troubleshooting#exit-codes.</value>
    <comment>{Locked="'--ignore-exit-code 8;9'"} {Locked="https://learn.microsoft.com/dotnet/core/testing/microsoft-testing-platform-troubleshooting#exit-codes"}</comment>
  </data>
  <data name="PlatformCommandLineExitOnProcessExitOptionDescription" xml:space="preserve">
    <value>Exit the test process if dependent process exits. PID must be provided.</value>
  </data>
  <data name="PlatformCommandLineExitOnProcessExitSingleArgument" xml:space="preserve">
    <value>'--{0}' expects a single int PID argument</value>
    <comment>{0} is the option name without the leading dashes.</comment>
  </data>
  <data name="PlatformCommandLineExitOnProcessExitInvalidDependentProcess" xml:space="preserve">
    <value>Invalid PID '{0}'
{1}</value>
    <comment>{0} is the invalid process ID. {1} is the exception message.</comment>
  </data>
  <data name="PlatformCommandLineExitOnProcessExitNotSupportedInBrowser" xml:space="preserve">
    <value>The '--exit-on-process-exit' option is not supported in browser environments.</value>
    <comment>{Locked="--exit-on-process-exit"}</comment>
  </data>
  <data name="Aborted" xml:space="preserve">
    <value>Aborted</value>
  </data>
  <data name="CancellingTestSession" xml:space="preserve">
    <value>Canceling the test session...</value>
  </data>
  <data name="PressCtrlCAgainToForceExit" xml:space="preserve">
    <value>Press Ctrl+C again to force exit.</value>
    <comment>{Locked="Ctrl+C"}</comment>
  </data>
  <data name="ShutdownProgressStillWaitingPrefix" xml:space="preserve">
    <value>Still waiting for: </value>
    <comment>Prefix for the message that lists extensions that have not yet completed their shutdown work. Each entry is formatted as "{DisplayName} ({Phase}, {Seconds}s)" and entries are separated by "; ". {Locked="{DisplayName} ({Phase}, {Seconds}s)"}{Locked="; "}</comment>
  </data>
  <data name="DiagnosticFileLevelWithAsyncFlush" xml:space="preserve">
    <value>Diagnostic file (level '{0}' with async flush): {1}</value>
    <comment>{0} is the diagnostic log level, such as verbose. {1} is the path to the diagnostic log file.</comment>
  </data>
  <data name="DiagnosticFileLevelWithFlush" xml:space="preserve">
    <value>Diagnostic file (level '{0}' with sync flush): {1}</value>
    <comment>{0} is the diagnostic log level, such as verbose. {1} is the path to the diagnostic log file.</comment>
  </data>
  <data name="Failed" xml:space="preserve">
    <value>Failed</value>
  </data>
  <data name="FailedLowercase" xml:space="preserve">
    <value>failed</value>
  </data>
  <data name="Passed" xml:space="preserve">
    <value>Passed</value>
  </data>
  <data name="Skipped" xml:space="preserve">
    <value>Skipped</value>
  </data>
  <data name="SkippedLowercase" xml:space="preserve">
    <value>skipped</value>
  </data>
  <data name="StackTrace" xml:space="preserve">
    <value>Stack Trace</value>
  </data>
  <data name="Total" xml:space="preserve">
    <value>Total</value>
  </data>
  <data name="TotalLowercase" xml:space="preserve">
    <value>total</value>
  </data>
  <data name="ZeroTestsRan" xml:space="preserve">
    <value>Zero tests ran</value>
  </data>
  <data name="FailedWithErrors" xml:space="preserve">
    <value>failed with {0} error(s)</value>
    <comment>{0} is the number of errors.</comment>
  </data>
  <data name="FailedWithErrorsAndWarnings" xml:space="preserve">
    <value>failed with {0} error(s) and {1} warning(s)</value>
    <comment>{0} is the number of errors. {1} is the number of warnings.</comment>
  </data>
  <data name="FailedWithWarnings" xml:space="preserve">
    <value>failed with {0} warning(s)</value>
    <comment>{0} is the number of warnings.</comment>
  </data>
  <data name="RunningTestsFrom" xml:space="preserve">
    <value>Running tests from</value>
  </data>
  <data name="FromFile" xml:space="preserve">
    <value>from</value>
    <comment>from followed by a file name to point to the file from which test is originating</comment>
  </data>
  <data name="TerminalNoProgressDeprecatedWarning" xml:space="preserve">
    <value>warning: --no-progress is deprecated; use --progress off instead.</value>
    <comment>{Locked="--no-progress"}{Locked="--progress off"}</comment>
  </data>
  <data name="PlatformCommandLineTimeoutArgumentErrorMessage" xml:space="preserve">
    <value>'timeout' option should have one argument as a time value with an explicit unit suffix and a positive numeric value within the supported range (up to ~49.7 days). Accepted suffixes are 'ms'/'mil(s)'/'millisecond(s)', 's'/'sec(s)'/'second(s)', 'm'/'min(s)'/'minute(s)', 'h'/'hour(s)', and 'd'/'day(s)', e.g. '500ms', '5400s', '90m', '1.5h', '1d'.</value>
    <comment>{Locked="'timeout'"}{Locked="'ms'"}{Locked="'mil(s)'"}{Locked="'millisecond(s)'"}{Locked="'s'"}{Locked="'sec(s)'"}{Locked="'second(s)'"}{Locked="'m'"}{Locked="'min(s)'"}{Locked="'minute(s)'"}{Locked="'h'"}{Locked="'hour(s)'"}{Locked="'d'"}{Locked="'day(s)'"}{Locked="'500ms'"}{Locked="'5400s'"}{Locked="'90m'"}{Locked="'1.5h'"}{Locked="'1d'"}</comment>
  </data>
  <data name="PlatformCommandLineTimeoutOptionDescription" xml:space="preserve">
    <value>A global test execution timeout.
Takes one argument as a time value with an explicit unit suffix. Accepted suffixes are 'ms'/'mil(s)'/'millisecond(s)', 's'/'sec(s)'/'second(s)', 'm'/'min(s)'/'minute(s)', 'h'/'hour(s)', and 'd'/'day(s)', e.g. '500ms', '5400s', '90m', '1.5h', '1d'.</value>
    <comment>{Locked="'ms'"}{Locked="'mil(s)'"}{Locked="'millisecond(s)'"}{Locked="'s'"}{Locked="'sec(s)'"}{Locked="'second(s)'"}{Locked="'m'"}{Locked="'min(s)'"}{Locked="'minute(s)'"}{Locked="'h'"}{Locked="'hour(s)'"}{Locked="'d'"}{Locked="'day(s)'"}{Locked="'500ms'"}{Locked="'5400s'"}{Locked="'90m'"}{Locked="'1.5h'"}{Locked="'1d'"}</comment>
  </data>
  <data name="LoggerFactoryNotReady" xml:space="preserve">
    <value>The ILoggerFactory has not been built yet.</value>
    <comment>{Locked="ILoggerFactory"}</comment>
  </data>
  <data name="MessageBusNotReady" xml:space="preserve">
    <value>The message bus has not been built yet or is no more usable at this stage.</value>
  </data>
  <data name="CommandLineOptionsNotReady" xml:space="preserve">
    <value>The ICommandLineOptions has not been built yet.</value>
    <comment>{Locked="ICommandLineOptions"}</comment>
  </data>
  <data name="MissingClientPortFoJsonRpc" xml:space="preserve">
    <value>Expected --client-port when jsonRpc protocol is used.</value>
    <comment>{Locked="--client-port"}{Locked="jsonRpc"}</comment>
  </data>
  <data name="DiscoveringTestsFrom" xml:space="preserve">
    <value>Discovering tests from</value>
  </data>
  <data name="TestDiscoverySummary" xml:space="preserve">
    <value>Test discovery summary: found {0} test(s) in {1} assemblies.</value>
    <comment>{0} is the number of discovered tests. {1} is the count of assemblies.</comment>
  </data>
  <data name="DiscoveredTestsInAssembly" xml:space="preserve">
    <value>Discovered {0} test(s) in assembly</value>
    <comment>{0} is the number of discovered tests. The sentence is followed by the assembly path.</comment>
  </data>
  <data name="ExitCode" xml:space="preserve">
    <value>Exit code</value>
  </data>
  <data name="CommandLineParserResponseFileNotFound" xml:space="preserve">
    <value>The response file '{0}' was not found</value>
    <comment>{0} is the response file path.</comment>
  </data>
  <data name="CommandLineParserFailedToReadResponseFile" xml:space="preserve">
    <value>Failed to read response file '{0}'. {1}.</value>
    <comment>{0} is the response file path. {1} is the full exception detail (ToString), not just the exception message.</comment>
  </data>
  <data name="CommandLineParserUnclosedQuoteInResponseFile" xml:space="preserve">
    <value>Unclosed quote in response file at line {0}</value>
    <comment>{0} is the line number in the response file.</comment>
  </data>
  <data name="CommandLineParserUnclosedQuoteInCommandLine" xml:space="preserve">
    <value>Unclosed quote in command line</value>
  </data>
  <data name="PlatformCommandLineMinimumExpectedTestsOptionDescription" xml:space="preserve">
    <value>Specifies the minimum number of tests that are expected to run.</value>
  </data>
  <data name="PlatformCommandLineZeroTestsPolicyOptionDescription" xml:space="preserve">
    <value>Specifies how a run that executed no tests is treated.
Valid values are 'allow-skipped' (the default) which counts skipped tests as run, so only a run where no test was found at all fails with exit code 8, and 'strict' which treats skipped tests as not run, so a run where every test was skipped (or no test was found) fails with exit code 8.</value>
    <comment>{Locked="strict"}{Locked="allow-skipped"}</comment>
  </data>
  <data name="PlatformCommandLineZeroTestsPolicyInvalidArgument" xml:space="preserve">
    <value>Invalid value '{0}' for '--zero-tests-policy'. Valid values are {1}.</value>
    <comment>{Locked="--zero-tests-policy"}</comment>
  </data>
  <data name="PlatformCommandLineConfigFileOptionDescription" xml:space="preserve">
    <value>Specifies a testconfig.json file.</value>
    <comment>{Locked="testconfig.json"}</comment>
  </data>
  <data name="ConfigurationFileNotFound" xml:space="preserve">
    <value>The configuration file '{0}' specified with '--config-file' could not be found.</value>
    <comment>{0} is the configuration file path. {Locked="--config-file"}</comment>
  </data>
  <data name="ActiveTestsRunning_MoreTestsCount" xml:space="preserve">
    <value>and {0} more</value>
    <comment>{0} is the number of additional active tests.</comment>
  </data>
  <data name="ActiveTestsRunning_FullTestsCount" xml:space="preserve">
    <value>{0} tests running</value>
    <comment>{0} is the number of currently running tests.</comment>
  </data>
  <data name="StartingTestSession" xml:space="preserve">
    <value>Starting test session.</value>
  </data>
  <data name="StartingTestSessionWithLogFilePath" xml:space="preserve">
    <value>Starting test session. The log file path is '{0}'.</value>
    <comment>{0} is the log file path.</comment>
  </data>
  <data name="FinishedTestSession" xml:space="preserve">
    <value>Finished test session.</value>
  </data>
  <data name="ServerTestHostDisplayName" xml:space="preserve">
    <value>Server mode test host</value>
  </data>
  <data name="ServerTestHostDescription" xml:space="preserve">
    <value>The 'ITestHost' implementation used when running server mode.</value>
    <comment>{Locked="ITestHost"}</comment>
  </data>
  <data name="UnobservedTaskExceptionWarningMessage" xml:space="preserve">
    <value>[ServerTestHost.OnTaskSchedulerUnobservedTaskException] Unhandled exception: {0}</value>
    <comment>{0} is the exception that was unhandled/unobserved. {Locked="ServerTestHost.OnTaskSchedulerUnobservedTaskException"}</comment>
  </data>
  <data name="ExceptionDuringCancellationWarningMessage" xml:space="preserve">
    <value>Exception during the cancellation of request id '{0}'</value>
    <comment>{0} is the request id.</comment>
  </data>
  <data name="DeprecatedEnvironmentVariableWarning" xml:space="preserve">
    <value>Warning: The environment variable '{0}' is deprecated and will be removed in a future major version. Use '{1}' instead.</value>
    <comment>{0} is the deprecated environment variable name. {1} is the replacement environment variable name.</comment>
  </data>
  <data name="PlatformCommandLineMaxFailedTestsOptionDescription" xml:space="preserve">
    <value>Specifies a maximum number of test failures that, when exceeded, will abort the test run.</value>
  </data>
  <data name="MaxFailedTestsMustBePositive" xml:space="preserve">
    <value>The option '--maximum-failed-tests' must be a positive integer. The value '{0}' is not valid.</value>
    <comment>{0} is the invalid option value. {Locked="--maximum-failed-tests"}</comment>
  </data>
  <data name="AbortForMaxFailedTestsDescription" xml:space="preserve">
    <value>Extension used to support '--maximum-failed-tests'. When a given failures threshold is reached, the test run will be aborted.</value>
    <comment>{Locked="--maximum-failed-tests"}</comment>
  </data>
  <data name="ReachedMaxFailedTestsMessage" xml:space="preserve">
    <value>Test session is aborting due to reaching failures ('{0}') specified by the '--maximum-failed-tests' option.</value>
    <comment>{0} is the number of max failed tests. {Locked="--maximum-failed-tests"}</comment>
  </data>
  <data name="AbortForMaxFailedTestsCapabilityNotAvailable" xml:space="preserve">
    <value>The current test framework does not implement 'IGracefulStopTestExecutionCapability' which is required for '--maximum-failed-tests' feature.</value>
    <comment>{Locked="IGracefulStopTestExecutionCapability"}{Locked="--maximum-failed-tests"}</comment>
  </data>
  <data name="PlatformCommandLineFilterUidOptionDescription" xml:space="preserve">
    <value>Provides a list of test node UIDs to filter by.</value>
  </data>
  <data name="OnlyOneFilterSupported" xml:space="preserve">
    <value>Passing both '--treenode-filter' and '--filter-uid' is unsupported.</value>
    <comment>{Locked="--treenode-filter"}{Locked="--filter-uid"}</comment>
  </data>
  <data name="OnlyOneTestHostLauncherSupported" xml:space="preserve">
    <value>Only one test host launcher can be registered.</value>
  </data>
  <data name="PlatformCommandLineDebugAttachOptionDescription" xml:space="preserve">
    <value>Allows to pause execution in order to attach to the process for debug purposes.</value>
  </data>
  <data name="SucceededLowercase" xml:space="preserve">
    <value>succeeded</value>
  </data>
  <data name="ChatClientProviderAlreadyRegistered" xml:space="preserve">
    <value>A chat client provider has already been registered.</value>
  </data>
  <data name="TestHostControllerProcessRestartNotSupportedOnWebAssembly" xml:space="preserve">
    <value>Test host controller extensions that require process restart are not supported on browser/WebAssembly platforms.</value>
    <comment>{Locked="WebAssembly"}</comment>
  </data>
  <data name="SyncFlushNotSupportedInBrowserErrorMessage" xml:space="preserve">
    <value>Synchronous flush is not supported in browser environments.</value>
  </data>
  <data name="WaitDebuggerAttachNotSupportedInBrowserErrorMessage" xml:space="preserve">
    <value>Waiting for debugger to attach (TESTINGPLATFORM_WAIT_ATTACH_DEBUGGER=1) is not supported in browser environments.</value>
    <comment>{Locked="TESTINGPLATFORM_WAIT_ATTACH_DEBUGGER=1"}</comment>
  </data>
  <data name="WaitDebuggerAttachNotSupportedInWasiErrorMessage" xml:space="preserve">
    <value>Waiting for debugger to attach (TESTINGPLATFORM_WAIT_ATTACH_DEBUGGER=1) is not supported on wasi.</value>
    <comment>{Locked="TESTINGPLATFORM_WAIT_ATTACH_DEBUGGER=1"}{Locked="wasi"}</comment>
  </data>
  <data name="PlatformCommandLineEnableDynamicExtensionsOptionDescription" xml:space="preserve">
<value>Enable loading test platform extensions declared by '*.testingplatformextensions.json' manifests found next to the test application. Disabled by default.</value>
    <comment>{Locked="'*.testingplatformextensions.json'"}</comment>
  </data>
  <data name="DynamicExtensionsLoadedHeader" xml:space="preserve">
    <value>Dynamically loaded test platform extensions ({0}):</value>
    <comment>{0} is the number of extensions that were loaded.</comment>
  </data>
  <data name="DynamicExtensionsLoadedEntry" xml:space="preserve">
    <value>  {0} -&gt; {1} ({2}), declared in {3}</value>
    <comment>{0} is the extension display name. {1} is the resolved assembly path. {2} is the full type name of the hook. {3} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionManifestInvalidJsonErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is not valid JSON. {1}</value>
    <comment>{0} is the manifest file path. {1} is the underlying JSON parser error message.</comment>
  </data>
  <data name="DynamicExtensionManifestTrailingContentErrorMessage" xml:space="preserve">
    <value>Unexpected content after the top-level JSON object.</value>
    <comment>Used as the parser-error detail when a manifest contains text after its closing brace.</comment>
  </data>
  <data name="DynamicExtensionManifestRootNotObjectErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the top-level JSON element must be an object but '{1}' was found.</value>
    <comment>{0} is the manifest file path. {1} is the JSON value kind that was found.</comment>
  </data>
  <data name="DynamicExtensionManifestMissingExtensionsPropertyErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the required '{1}' property is missing.</value>
    <comment>{0} is the manifest file path. {1} is the name of the missing JSON property.</comment>
  </data>
  <data name="DynamicExtensionManifestDuplicatePropertyErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the '{1}' property is declared more than once, so one of the declarations would be discarded.</value>
    <comment>{0} is the manifest file path. {1} is the name of the duplicated JSON property.</comment>
  </data>
  <data name="DynamicExtensionManifestEntryDuplicatePropertyErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the extension at index {1} declares the '{2}' property more than once, so one of the declarations would be discarded.</value>
    <comment>{0} is the manifest file path. {1} is the zero-based index of the extension. {2} is the name of the duplicated JSON property.</comment>
  </data>
  <data name="DynamicExtensionManifestExtensionsPropertyNotArrayErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the '{1}' property must be a JSON array.</value>
    <comment>{0} is the manifest file path. {1} is the name of the JSON property that has the wrong type.</comment>
  </data>
  <data name="DynamicExtensionManifestEntryNotObjectErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the element at index {1} of '{2}' must be a JSON object.</value>
    <comment>{0} is the manifest file path. {1} is the zero-based index of the element. {2} is the name of the JSON array property.</comment>
  </data>
  <data name="DynamicExtensionManifestEntryMissingPropertyErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the extension at index {1} is missing the required '{2}' property, or its value is empty.</value>
    <comment>{0} is the manifest file path. {1} is the zero-based index of the extension. {2} is the name of the missing JSON property.</comment>
  </data>
  <data name="DynamicExtensionManifestEntryPropertyNotStringErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the '{2}' property of the extension at index {1} must be a JSON string.</value>
    <comment>{0} is the manifest file path. {1} is the zero-based index of the extension. {2} is the name of the JSON property.</comment>
  </data>
  <data name="DynamicExtensionManifestEntryPropertyNotBooleanErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the '{2}' property of the extension at index {1} must be a JSON boolean.</value>
    <comment>{0} is the manifest file path. {1} is the zero-based index of the extension. {2} is the name of the JSON property.</comment>
  </data>
  <data name="DynamicExtensionManifestEntryInvalidAssemblyPathErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' is invalid: the assembly path '{2}' of the extension at index {1} is not a valid path.</value>
    <comment>{0} is the manifest file path. {1} is the zero-based index of the extension. {2} is the invalid assembly path.</comment>
  </data>
  <data name="DynamicExtensionManifestReadFailedErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' could not be read.</value>
    <comment>{0} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionAssemblyNotFoundErrorMessage" xml:space="preserve">
    <value>The assembly '{0}' of the extension '{1}' declared in the extension manifest '{2}' was not found.</value>
    <comment>{0} is the resolved assembly path. {1} is the extension display name. {2} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionAssemblyLoadFailedErrorMessage" xml:space="preserve">
    <value>The assembly '{0}' of the extension '{1}' declared in the extension manifest '{2}' could not be loaded.</value>
    <comment>{0} is the resolved assembly path. {1} is the extension display name. {2} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionTypeNotFoundErrorMessage" xml:space="preserve">
    <value>The type '{0}' was not found in the assembly '{1}' declared in the extension manifest '{2}'.</value>
    <comment>{0} is the full type name. {1} is the resolved assembly path. {2} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionHookNotFoundErrorMessage" xml:space="preserve">
    <value>The type '{0}' in the assembly '{1}' declared in the extension manifest '{2}' does not expose a 'public static void' method named '{3}' taking an 'ITestApplicationBuilder' and a 'string[]'.</value>
    <comment>{0} is the full type name. {1} is the resolved assembly path. {2} is the manifest file path. {3} is the expected method name. {Locked="'public static void'"}{Locked="'ITestApplicationBuilder'"}{Locked="'string[]'"}</comment>
  </data>
  <data name="DynamicExtensionHookMustReturnVoidErrorMessage" xml:space="preserve">
    <value>The '{0}.{1}' extension hook from the assembly '{2}' declared in the extension manifest '{3}' returns '{4}' but must return 'void'. The platform invokes the hook synchronously, so a return value is never observed; a returned task in particular would never be awaited, and its registrations and failures would be lost.</value>
    <comment>{0} is the full type name. {1} is the hook method name. {2} is the resolved assembly path. {3} is the manifest file path. {4} is the actual return type name. {Locked="'void'"}</comment>
  </data>
  <data name="DynamicExtensionDuplicateIdConflictErrorMessage" xml:space="preserve">
    <value>The extension id '{0}' is declared twice with different content: '{1}' in the extension manifest '{2}' and '{3}' in the extension manifest '{4}'. Ids must identify the same extension, otherwise one declaration would silently replace the other.</value>
    <comment>{0} is the extension id. {1} and {3} are 'assembly path' plus 'type full name' descriptions of the conflicting declarations. {2} and {4} are manifest file paths.</comment>
  </data>
  <data name="DynamicExtensionManifestDirectoryNotReadableErrorMessage" xml:space="preserve">
    <value>The directory '{0}' could not be searched for extension manifests, so the platform cannot tell whether any extension had to be loaded. Remove '{1}' from the command line to skip extension manifest discovery.</value>
    <comment>{0} is the directory path. {1} is the command line option that enables the feature.</comment>
  </data>
  <data name="DynamicExtensionCannotRegisterTestFrameworkErrorMessage" xml:space="preserve">
    <value>The extension '{0}' declared in the extension manifest '{1}' tried to register a test framework. Dynamically loaded extensions must not replace the test framework, because that would silently change which tests run and what results they report.</value>
    <comment>{0} is the extension display name. {1} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionHookFailedErrorMessage" xml:space="preserve">
    <value>The '{0}.{1}' extension hook from the assembly '{2}' declared in the extension manifest '{3}' failed.</value>
    <comment>{0} is the full type name. {1} is the hook method name. {2} is the resolved assembly path. {3} is the manifest file path.</comment>
  </data>
  <data name="DynamicExtensionHookMustNotBeAsyncVoidErrorMessage" xml:space="preserve">
    <value>The '{0}.{1}' extension hook from the assembly '{2}' declared in the extension manifest '{3}' is declared 'async void'. The platform invokes the hook synchronously, so it would return at its first await: anything it registers after that point would race the test application's own setup, and any failure would be lost. Make the hook synchronous.</value>
    <comment>{0} is the full type name. {1} is the hook method name. {2} is the resolved assembly path. {3} is the manifest file path. {Locked="'async void'"}</comment>
  </data>
  <data name="DynamicExtensionsNotSupportedOnCurrentRuntimeErrorMessage" xml:space="preserve">
    <value>The extension manifest '{0}' declares extensions to load, but the current runtime does not support loading assemblies dynamically (for example when published with native AOT). Set the '{1}' property of each extension to 'false', remove the manifest, or remove '{2}' from the command line.</value>
    <comment>{0} is the manifest file path. {1} is the name of the JSON property that disables an extension. {2} is the command line option that enables the feature. {Locked="'false'"}</comment>
  </data>
</root>
