# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

SolrConnector.Arguments=Argumentos
SolrConnector.KeepAllMetadata=Mantenga todos los metadatos:
SolrConnector.UseExtractUpdateHandler=Usa el Extracto de actualización de Manejador:
SolrConnector.Arguments2=Argumentos:
SolrConnector.Commits=Los commits
SolrConnector.Documents=Documentos
SolrConnector.Schema=Esquema
SolrConnector.Server=Servidor
SolrConnector.Paths=Caminos
SolrConnector.SolrType=tipo de Solr
SolrConnector.Zookeeper=Encargado del Zoo
SolrConnector.SolrType2=tipo de Solr:
SolrConnector.SingleServer=servidor único
SolrConnector.SolrCloud=SolrCloud
SolrConnector.ZookeeperHosts=hosts encargado de parque zoológico:
SolrConnector.Host=Host
SolrConnector.Port=Puerto:
SolrConnector.ZnodePath=ruta Znode:
SolrConnector.Protocol=Protocolo:
SolrConnector.ServerName=Nombre del servidor:
SolrConnector.WebApplicationName=Nombre de la aplicación Web:
SolrConnector.CoreName=Core/nombre de Colección:
SolrConnector.CollectionName=nombre de la colección:
SolrConnector.ConnectionTimeout=El tiempo de conexión expiro (segundos):
SolrConnector.SocketTimeout=Socket timeout (segundos):
SolrConnector.ZookeeperSocketTimeout=Socket timeout (segundos):
SolrConnector.ZookeeperConnectionTimeout=El tiempo de conexión expiro (segundos):
SolrConnector.UpdateHandler=actualización de controlador:
SolrConnector.RemoveHandler=Retire manejador:
SolrConnector.StatusHandler=manejador de Estado:
SolrConnector.Realm=Reino:
SolrConnector.UserID=ID de usuario:
SolrConnector.Password=Contraseña:
SolrConnector.SSLTrustCertificateList=SSL lista de certificados de confianza:
SolrConnector.NoCertificatesPresent=No hay certificados actuales
SolrConnector.AddCert=Añadir cert
SolrConnector.Add=Añadir
SolrConnector.AddZookeeperHost=Añadir ZooKeeper host
SolrConnector.Certificate=Certificado:
SolrConnector.IDFieldName=ID nombre del campo:
SolrConnector.OriginalSizeFieldName=Tamaño original nombre de campo:
SolrConnector.ModifiedDateFieldName=Fecha de modificación nombre del campo:
SolrConnector.CreatedDateFieldName=Fecha Creado nombre del campo:
SolrConnector.IndexedDateFieldName=Fecha indexadas nombre del campo:
SolrConnector.FileNameFieldName=Nombre de archivo campo de nombre:
SolrConnector.MimeTypeFieldName=Mime nombre de campo de tipo:
SolrConnector.ContentFieldName=Contenido nombre del campo:
SolrConnector.MaximumDocumentLength=Longitud máxima del documento:
SolrConnector.IncludedMimeTypes=Tipos MIME incluidos:
SolrConnector.ExcludedMimeTypes=Tipos MIME excluidos:
SolrConnector.CommitAtEndOfEveryJob=Comprometerse al final de cada trabajo:
SolrConnector.CommitEachDocumentWithin=Comprometerse cada documento dentro (ms):
SolrConnector.Name=Nombre
SolrConnector.Value=Valor
SolrConnector.NoArgumentsSpecified=No hay argumentos especificados
SolrConnector.Parameters=Parámetros:
SolrConnector.Arguments3=Argumentos:
SolrConnector.NoArguments=No hay argumentos
SolrConnector.SolrFieldMapping=Solr Trazar un mapa de Campaña
SolrConnector.FieldMappings=Trazar un mapa de campaña:
SolrConnector.MetadataFieldName=Metadatos nombre del campo
SolrConnector.SolrFieldName=Solr nombre del campo
SolrConnector.NoFieldMappingSpecified=Ninguna asignación campo especificado
SolrConnector.NoZookeeperHostsSpecified=No hosts Zookeeper especificados
SolrConnector.AddFieldMapping=Añada el trazar un mapa de campaña
SolrConnector.ChooseACertificateFile=Escoja un archivo de certificado
SolrConnector.ZookeeperHostCannotBeNull=ZooKeeper hosts no puede ser nulo
SolrConnector.ZookeeperPortCannotBeNull=Puerto ZooKeeper no puede ser nulo
SolrConnector.ZookeeperPortMustBeAnInteger=Puerto ZooKeeper debe ser un entero
SolrConnector.ZnodePathMustStartWithACharacter=Ruta Znode debe comenzar con una  '/' carácter
SolrConnector.PleaseSupplyAValidSolrServerName=Por favor, facilite un nombre de servidor Solr válida
SolrConnector.SolrServerPortMustBeAValidInteger=Puerto del servidor Solr debe ser un entero válido
SolrConnector.WebApplicationNameCannotHaveCharacters=Nombre de la aplicación Web no puede tener '/' carácter
SolrConnector.PleaseSupplySolrCoreName=Por favor, facilite el nombre del núcleo Solr
SolrConnector.CoreNameCannotHaveCharacters=Nombre Core no puede tener '/' carácter
SolrConnector.WebApplicationMustBeSpecifiedIfCoreIsSpecified=Aplicación Web se debe especificar si se especifica núcleo
SolrConnector.ConnectionTimeoutMustBeInteger=Tiempo de espera de conexión debe ser un entero
SolrConnector.SocketTimeoutMustBeInteger=Tiempo de espera de socket debe ser un entero
SolrConnector.UpdatePathMustStartWithACharacter=Actualización de ruta debe comenzar con un  '/' carácter
SolrConnector.RemovePathMustStartWithACharacter=Retire ruta debe comenzar con un  '/' carácter
SolrConnector.StatusPathMustStartWithACharacter=Ruta Estado debe comenzar con una  '/' carácter
SolrConnector.MaximumDocumentLengthMustBAnInteger=Longitud máxima documento debe ser un número entero
SolrConnector.CommitWithinValueMustBeAnInteger=Commit-dentro de valor debe ser un número entero
SolrConnector.MaximumDocumentLengthMustBeAnInteger=Longitud máxima documento debe ser un número entero
SolrConnector.ArgumentNameCannotBeAnEmptyString=Nombre argumento no puede ser una cadena vacía
SolrConnector.MaximumDocumentLengthRequiredUnlessExtractingUpdateHandler=Longitud máxima del documento requerido a menos que use manejador actualización extracto
SolrConnector.ContentFieldNameRequiredUnlessExtractingUpdateHandler=Contenido nombre del campo requiere a menos que use manejador actualización extracto
SolrConnector.DeleteCert=eliminar cert
SolrConnector.Delete=Borrar
SolrConnector.DeleteArgument=eliminar argumento #
SolrConnector.DeleteZookeeperHost=Eliminar ZooKeeper hots #
SolrConnector.FieldMapMustHaveNonNullSource=Mapa de campo debe tener una fuente que no sea nulo
SolrConnector.DeleteFieldMapping=Eliminar asignación de campos #

