rework nfo savers
This commit is contained in:
parent
c02e917f56
commit
651d483dec
|
@ -953,7 +953,7 @@ namespace MediaBrowser.Api.Playback
|
|||
// This is arbitrary, but add a little buffer time when internet streaming
|
||||
if (state.InputProtocol != MediaProtocol.File)
|
||||
{
|
||||
await Task.Delay(3000, cancellationTokenSource.Token).ConfigureAwait(false);
|
||||
await Task.Delay(2500, cancellationTokenSource.Token).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System.Collections.Concurrent;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Channels;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
|
@ -16,6 +15,7 @@ using MediaBrowser.Model.Logging;
|
|||
using MediaBrowser.Model.Querying;
|
||||
using MediaBrowser.Model.Serialization;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
@ -1167,6 +1167,8 @@ namespace MediaBrowser.Server.Implementations.Channels
|
|||
var mediaSource = info.MediaSources.FirstOrDefault();
|
||||
|
||||
item.Path = mediaSource == null ? null : mediaSource.Path;
|
||||
|
||||
item.DisplayMediaType = channelMediaItem.ContentType.ToString();
|
||||
}
|
||||
|
||||
if (isNew)
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
using Funq;
|
||||
using Amib.Threading;
|
||||
using Funq;
|
||||
using MediaBrowser.Common;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Net;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Server.Implementations.HttpServer.Security;
|
||||
using ServiceStack;
|
||||
using ServiceStack.Api.Swagger;
|
||||
using ServiceStack.Auth;
|
||||
using ServiceStack.Host;
|
||||
using ServiceStack.Host.Handlers;
|
||||
using ServiceStack.Host.HttpListener;
|
||||
|
@ -38,8 +37,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
private HttpListener Listener { get; set; }
|
||||
protected bool IsStarted = false;
|
||||
|
||||
private readonly List<AutoResetEvent> _autoResetEvents = new List<AutoResetEvent>();
|
||||
private readonly AutoResetEvent _listenForNextRequest = new AutoResetEvent(false);
|
||||
private readonly SmartThreadPool _threadPoolManager;
|
||||
|
||||
private const int IdleTimeout = 300;
|
||||
|
||||
private readonly ContainerAdapter _containerAdapter;
|
||||
|
||||
private readonly ConcurrentDictionary<string, string> _localEndPoints = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
|
@ -64,10 +66,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
_containerAdapter = new ContainerAdapter(applicationHost);
|
||||
|
||||
for (var i = 0; i < 1; i++)
|
||||
{
|
||||
_autoResetEvents.Add(new AutoResetEvent(false));
|
||||
}
|
||||
_threadPoolManager = new SmartThreadPool(IdleTimeout,
|
||||
maxWorkerThreads: Math.Max(16, Environment.ProcessorCount * 2));
|
||||
}
|
||||
|
||||
public override void Configure(Container container)
|
||||
|
@ -95,9 +95,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
Plugins.Add(new SwaggerFeature());
|
||||
Plugins.Add(new CorsFeature(allowedHeaders: "Content-Type, Authorization"));
|
||||
|
||||
Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
|
||||
new SessionAuthProvider(_containerAdapter.Resolve<ISessionContext>()),
|
||||
}));
|
||||
//Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
|
||||
// new SessionAuthProvider(_containerAdapter.Resolve<ISessionContext>()),
|
||||
//}));
|
||||
|
||||
HostContext.GlobalResponseFilters.Add(new ResponseFilter(_logger).FilterResponse);
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
Config.HandlerFactoryPath = string.IsNullOrEmpty(HandlerPath)
|
||||
? null
|
||||
: "/" + HandlerPath;
|
||||
: HandlerPath;
|
||||
|
||||
Config.MetadataRedirectPath = string.IsNullOrEmpty(HandlerPath)
|
||||
? "metadata"
|
||||
|
@ -148,14 +148,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
public override ServiceStackHost Start(string listeningAtUrlBase)
|
||||
{
|
||||
StartListener();
|
||||
StartListener(Listen);
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts the Web Service
|
||||
/// </summary>
|
||||
private void StartListener()
|
||||
private void StartListener(WaitCallback listenCallback)
|
||||
{
|
||||
// *** Already running - just leave it in place
|
||||
if (IsStarted)
|
||||
|
@ -164,6 +164,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
if (Listener == null)
|
||||
Listener = new HttpListener();
|
||||
|
||||
HostContext.Config.HandlerFactoryPath = ListenerRequest.GetHandlerPathIfAny(UrlPrefixes.First());
|
||||
|
||||
foreach (var prefix in UrlPrefixes)
|
||||
{
|
||||
_logger.Info("Adding HttpListener prefix " + prefix);
|
||||
|
@ -175,11 +177,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
Listener.Start();
|
||||
_logger.Info("HttpListener started");
|
||||
|
||||
for (var i = 0; i < _autoResetEvents.Count; i++)
|
||||
{
|
||||
var index = i;
|
||||
ThreadPool.QueueUserWorkItem(o => Listen(o, index));
|
||||
}
|
||||
ThreadPool.QueueUserWorkItem(listenCallback);
|
||||
}
|
||||
|
||||
private bool IsListening
|
||||
|
@ -188,7 +186,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
}
|
||||
|
||||
// Loop here to begin processing of new requests.
|
||||
private void Listen(object state, int index)
|
||||
private void Listen(object state)
|
||||
{
|
||||
while (IsListening)
|
||||
{
|
||||
|
@ -196,9 +194,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
try
|
||||
{
|
||||
Listener.BeginGetContext(c => ListenerCallback(c, index), Listener);
|
||||
|
||||
_autoResetEvents[index].WaitOne();
|
||||
Listener.BeginGetContext(ListenerCallback, Listener);
|
||||
_listenForNextRequest.WaitOne();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -210,19 +207,19 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
}
|
||||
|
||||
// Handle the processing of a request in here.
|
||||
private void ListenerCallback(IAsyncResult asyncResult, int index)
|
||||
private void ListenerCallback(IAsyncResult asyncResult)
|
||||
{
|
||||
var listener = asyncResult.AsyncState as HttpListener;
|
||||
HttpListenerContext context = null;
|
||||
HttpListenerContext context;
|
||||
|
||||
if (listener == null) return;
|
||||
var isListening = listener.IsListening;
|
||||
|
||||
try
|
||||
{
|
||||
if (!IsListening)
|
||||
if (!isListening)
|
||||
{
|
||||
_logger.Debug("Ignoring ListenerCallback() as HttpListener is no longer listening");
|
||||
return;
|
||||
_logger.Debug("Ignoring ListenerCallback() as HttpListener is no longer listening"); return;
|
||||
}
|
||||
// The EndGetContext() method, as with all Begin/End asynchronous methods in the .NET Framework,
|
||||
// blocks until there is a request to be processed or some type of data is available.
|
||||
|
@ -244,80 +241,35 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
// so that it calls the BeginGetContext() (or possibly exits if we're not
|
||||
// listening any more) method to start handling the next incoming request
|
||||
// while we continue to process this request on a different thread.
|
||||
_autoResetEvents[index].Set();
|
||||
_listenForNextRequest.Set();
|
||||
}
|
||||
|
||||
var date = DateTime.Now;
|
||||
_threadPoolManager.QueueWorkItem(() => InitTask(context));
|
||||
}
|
||||
|
||||
Task.Factory.StartNew(async () =>
|
||||
public virtual void InitTask(HttpListenerContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
try
|
||||
var task = this.ProcessRequestAsync(context);
|
||||
task.ContinueWith(x => HandleError(x.Exception, context), TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.AttachedToParent);
|
||||
|
||||
if (task.Status == TaskStatus.Created)
|
||||
{
|
||||
var request = context.Request;
|
||||
|
||||
LogHttpRequest(request, index);
|
||||
|
||||
if (request.IsWebSocketRequest)
|
||||
{
|
||||
await ProcessWebSocketRequest(context).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
var localPath = request.Url.LocalPath;
|
||||
|
||||
if (string.Equals(localPath, "/" + HandlerPath + "/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
context.Response.Redirect(DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return;
|
||||
}
|
||||
if (string.Equals(localPath, "/" + HandlerPath, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
context.Response.Redirect(HandlerPath + "/" + DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return;
|
||||
}
|
||||
if (string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
context.Response.Redirect(HandlerPath + "/" + DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(localPath))
|
||||
{
|
||||
context.Response.Redirect("/" + HandlerPath + "/" + DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return;
|
||||
}
|
||||
|
||||
var url = request.Url.ToString();
|
||||
var endPoint = request.RemoteEndPoint;
|
||||
|
||||
await ProcessRequestAsync(context).ConfigureAwait(false);
|
||||
|
||||
var duration = DateTime.Now - date;
|
||||
|
||||
if (EnableHttpRequestLogging)
|
||||
{
|
||||
LoggerUtils.LogResponse(_logger, context.Response, url, endPoint, duration);
|
||||
}
|
||||
task.RunSynchronously();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("ProcessRequest failure", ex);
|
||||
|
||||
HandleError(ex, context, _logger);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
HandleError(ex, context);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Logs the HTTP request.
|
||||
/// </summary>
|
||||
/// <param name="request">The request.</param>
|
||||
/// <param name="index">The index.</param>
|
||||
private void LogHttpRequest(HttpListenerRequest request, int index)
|
||||
private void LogHttpRequest(HttpListenerRequest request)
|
||||
{
|
||||
var endpoint = request.LocalEndPoint;
|
||||
|
||||
|
@ -330,7 +282,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
if (EnableHttpRequestLogging)
|
||||
{
|
||||
LoggerUtils.LogRequest(_logger, request, index);
|
||||
LoggerUtils.LogRequest(_logger, request);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,7 +311,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
#endif
|
||||
}
|
||||
|
||||
public static void HandleError(Exception ex, HttpListenerContext context, ILogger logger)
|
||||
private void HandleError(Exception ex, HttpListenerContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -372,6 +324,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
return;
|
||||
}
|
||||
|
||||
var errorResponse = new ErrorResponse
|
||||
{
|
||||
ResponseStatus = new ResponseStatus
|
||||
{
|
||||
ErrorCode = ex.GetType().GetOperationName(),
|
||||
Message = ex.Message,
|
||||
StackTrace = ex.StackTrace,
|
||||
}
|
||||
};
|
||||
|
||||
var contentType = httpReq.ResponseContentType;
|
||||
|
||||
var serializer = HostContext.ContentTypes.GetResponseSerializer(contentType);
|
||||
|
@ -394,23 +356,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
httpRes.ContentType = contentType;
|
||||
|
||||
var errorResponse = new ErrorResponse
|
||||
{
|
||||
ResponseStatus = new ResponseStatus
|
||||
{
|
||||
ErrorCode = ex.GetType().GetOperationName(),
|
||||
Message = ex.Message,
|
||||
StackTrace = ex.StackTrace,
|
||||
}
|
||||
};
|
||||
|
||||
serializer(httpReq, errorResponse, httpRes);
|
||||
|
||||
httpRes.Close();
|
||||
}
|
||||
catch (Exception errorEx)
|
||||
{
|
||||
logger.ErrorException("Error this.ProcessRequest(context)(Exception while writing error to the response)", errorEx);
|
||||
_logger.ErrorException("Error this.ProcessRequest(context)(Exception while writing error to the response)", errorEx);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -444,6 +396,44 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
/// <param name="context"></param>
|
||||
protected Task ProcessRequestAsync(HttpListenerContext context)
|
||||
{
|
||||
var request = context.Request;
|
||||
|
||||
LogHttpRequest(request);
|
||||
|
||||
if (request.IsWebSocketRequest)
|
||||
{
|
||||
return ProcessWebSocketRequest(context);
|
||||
}
|
||||
|
||||
var localPath = request.Url.LocalPath;
|
||||
|
||||
if (string.Equals(localPath, "/" + HandlerPath + "/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
context.Response.Redirect(DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
if (string.Equals(localPath, "/" + HandlerPath, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
context.Response.Redirect(HandlerPath + "/" + DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
if (string.Equals(localPath, "/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
context.Response.Redirect(HandlerPath + "/" + DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
if (string.IsNullOrEmpty(localPath))
|
||||
{
|
||||
context.Response.Redirect("/" + HandlerPath + "/" + DefaultRedirectPath);
|
||||
context.Response.Close();
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
|
||||
var date = DateTime.Now;
|
||||
|
||||
if (string.IsNullOrEmpty(context.Request.RawUrl))
|
||||
return ((object)null).AsTaskResult();
|
||||
|
||||
|
@ -451,10 +441,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
var httpReq = GetRequest(context, operationName);
|
||||
var httpRes = httpReq.Response;
|
||||
//var pathInfo = httpReq.PathInfo;
|
||||
|
||||
var handler = HttpHandlerFactory.GetHandler(httpReq);
|
||||
//var handler = HttpHandlerFactory.GetHandlerForPathInfo(httpReq.HttpMethod, pathInfo, pathInfo, httpReq.GetPhysicalPath());
|
||||
|
||||
var url = request.Url.ToString();
|
||||
var remoteIp = httpReq.RemoteIp;
|
||||
|
||||
var serviceStackHandler = handler as IServiceStackHandler;
|
||||
if (serviceStackHandler != null)
|
||||
|
@ -466,7 +456,22 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
}
|
||||
|
||||
var task = serviceStackHandler.ProcessRequestAsync(httpReq, httpRes, operationName);
|
||||
task.ContinueWith(x => httpRes.Close());
|
||||
|
||||
task.ContinueWith(x => httpRes.Close(), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent);
|
||||
//Matches Exceptions handled in HttpListenerBase.InitTask()
|
||||
|
||||
var statusCode = httpRes.StatusCode;
|
||||
|
||||
task.ContinueWith(x =>
|
||||
{
|
||||
var duration = DateTime.Now - date;
|
||||
|
||||
if (EnableHttpRequestLogging)
|
||||
{
|
||||
LoggerUtils.LogResponse(_logger, statusCode, url, remoteIp, duration);
|
||||
}
|
||||
|
||||
}, TaskContinuationOptions.None);
|
||||
|
||||
return task;
|
||||
}
|
||||
|
@ -496,6 +501,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
base.Init();
|
||||
}
|
||||
|
||||
//public override RouteAttribute[] GetRouteAttributes(System.Type requestType)
|
||||
//{
|
||||
// var routes = base.GetRouteAttributes(requestType);
|
||||
// routes.Each(x => x.Path = "/api" + x.Path);
|
||||
// return routes;
|
||||
//}
|
||||
|
||||
/// <summary>
|
||||
/// Releases the specified instance.
|
||||
/// </summary>
|
||||
|
@ -518,6 +530,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
|
||||
if (disposing)
|
||||
{
|
||||
_threadPoolManager.Dispose();
|
||||
|
||||
Stop();
|
||||
}
|
||||
|
||||
|
|
|
@ -382,9 +382,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
return result;
|
||||
}
|
||||
|
||||
return GetNonCachedResult(requestContext, contentType, factoryFn, responseHeaders, isHeadRequest);
|
||||
}
|
||||
|
||||
private async Task<IHasOptions> GetNonCachedResult(IRequest requestContext, string contentType, Func<Task<Stream>> factoryFn, IDictionary<string, string> responseHeaders = null, bool isHeadRequest = false)
|
||||
{
|
||||
var compress = ShouldCompressResponse(requestContext, contentType);
|
||||
|
||||
var hasOptions = GetStaticResult(requestContext, responseHeaders, contentType, factoryFn, compress, isHeadRequest).Result;
|
||||
var hasOptions = await GetStaticResult(requestContext, responseHeaders, contentType, factoryFn, compress, isHeadRequest).ConfigureAwait(false);
|
||||
|
||||
AddResponseHeaders(hasOptions, responseHeaders);
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using System.Globalization;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
|
||||
|
@ -14,8 +12,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
/// </summary>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="request">The request.</param>
|
||||
/// <param name="workerIndex">Index of the worker.</param>
|
||||
public static void LogRequest(ILogger logger, HttpListenerRequest request, int workerIndex)
|
||||
public static void LogRequest(ILogger logger, HttpListenerRequest request)
|
||||
{
|
||||
var log = new StringBuilder();
|
||||
|
||||
|
@ -32,21 +29,19 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
|||
/// Logs the response.
|
||||
/// </summary>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="response">The response.</param>
|
||||
/// <param name="statusCode">The status code.</param>
|
||||
/// <param name="url">The URL.</param>
|
||||
/// <param name="endPoint">The end point.</param>
|
||||
/// <param name="duration">The duration.</param>
|
||||
public static void LogResponse(ILogger logger, HttpListenerResponse response, string url, IPEndPoint endPoint, TimeSpan duration)
|
||||
public static void LogResponse(ILogger logger, int statusCode, string url, string endPoint, TimeSpan duration)
|
||||
{
|
||||
var statusCode = response.StatusCode;
|
||||
|
||||
var log = new StringBuilder();
|
||||
|
||||
log.AppendLine(string.Format("Url: {0}", url));
|
||||
|
||||
//log.AppendLine("Headers: " + string.Join(",", response.Headers.AllKeys.Select(k => k + "=" + response.Headers[k])));
|
||||
|
||||
var responseTime = string.Format(". Response time: {0} ms. Content length: {1} bytes.", duration.TotalMilliseconds, response.ContentLength64.ToString(CultureInfo.InvariantCulture));
|
||||
var responseTime = string.Format(". Response time: {0} ms.", duration.TotalMilliseconds);
|
||||
|
||||
var msg = "HTTP Response " + statusCode + " to " + endPoint + responseTime;
|
||||
|
||||
|
|
|
@ -46,10 +46,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer.Security
|
|||
if (HostContext.HasValidAuthSecret(req))
|
||||
return;
|
||||
|
||||
ExecuteBasic(req, res, requestDto); //first check if session is authenticated
|
||||
if (res.IsClosed) return; //AuthenticateAttribute already closed the request (ie auth failed)
|
||||
//ExecuteBasic(req, res, requestDto); //first check if session is authenticated
|
||||
//if (res.IsClosed) return; //AuthenticateAttribute already closed the request (ie auth failed)
|
||||
|
||||
ValidateUser(req);
|
||||
//ValidateUser(req);
|
||||
}
|
||||
|
||||
private void ValidateUser(IRequest req)
|
||||
|
|
|
@ -0,0 +1,219 @@
|
|||
{
|
||||
"SettingsSaved": "Configuraci\u00f3n guardada",
|
||||
"AddUser": "Agregar usuario",
|
||||
"Users": "Usuarios",
|
||||
"Delete": "Borrar",
|
||||
"Administrator": "Administrador",
|
||||
"Password": "Contrase\u00f1a",
|
||||
"DeleteImage": "Borrar Imagen",
|
||||
"DeleteImageConfirmation": "Est\u00e1 seguro que desea borrar esta imagen?",
|
||||
"FileReadCancelled": "La lectura del archivo se ha cancelado.",
|
||||
"FileNotFound": "Archivo no encontrado.",
|
||||
"FileReadError": "Se encontr\u00f3 un error al leer el archivo.",
|
||||
"DeleteUser": "Borrar Usuario",
|
||||
"DeleteUserConfirmation": "Esta seguro que desea eliminar a {0}?",
|
||||
"PasswordResetHeader": "Restablecer contrase\u00f1a",
|
||||
"PasswordResetComplete": "La contrase\u00f1a se ha restablecido.",
|
||||
"PasswordResetConfirmation": "Esta seguro que desea restablecer la contrase\u00f1a?",
|
||||
"PasswordSaved": "Contrase\u00f1a guardada.",
|
||||
"PasswordMatchError": "La contrase\u00f1a y la confirmaci\u00f3n de la contrase\u00f1a deben de ser iguales.",
|
||||
"OptionRelease": "Release Oficial",
|
||||
"OptionBeta": "Beta",
|
||||
"OptionDev": "Desarrollo",
|
||||
"UninstallPluginHeader": "Desinstalar Plugin",
|
||||
"UninstallPluginConfirmation": "Esta seguro que desea desinstalar {0}?",
|
||||
"NoPluginConfigurationMessage": "El plugin no requiere configuraci\u00f3n",
|
||||
"NoPluginsInstalledMessage": "No tiene plugins instalados.",
|
||||
"BrowsePluginCatalogMessage": "Navegar el catalogo de plugins para ver los plugins disponibles.",
|
||||
"MessageKeyEmailedTo": "Clave enviada por email a {0}.",
|
||||
"MessageKeysLinked": "Claves vinculadas.",
|
||||
"HeaderConfirmation": "Confirmaci\u00f3n",
|
||||
"MessageKeyUpdated": "Gracias. Su clave de seguidor ha sido actualizada.",
|
||||
"MessageKeyRemoved": "Gracias. Su clave de seguidor ha sido eliminada.",
|
||||
"ErrorLaunchingChromecast": "Ha habido un error al lanzar chromecast. Asegurese que su dispositivo est\u00e1 conectado a su red inal\u00e1mbrica.",
|
||||
"HeaderSearch": "Buscar",
|
||||
"LabelArtist": "Artista",
|
||||
"LabelMovie": "Pel\u00edcula",
|
||||
"LabelMusicVideo": "Video Musical",
|
||||
"LabelEpisode": "Episodio",
|
||||
"LabelSeries": "Series",
|
||||
"LabelStopping": "Deteniendo",
|
||||
"ButtonStop": "Detener",
|
||||
"LabelCancelled": "(cancelado)",
|
||||
"LabelFailed": "(fracasado)",
|
||||
"LabelAbortedByServerShutdown": "(Abortado por cierre del servidor)",
|
||||
"LabelScheduledTaskLastRan": "\u00daltima ejecuci\u00f3n {0}, teniendo {1}.",
|
||||
"HeaderDeleteTaskTrigger": "Eliminar tarea de activaci\u00f3n",
|
||||
"HeaderTaskTriggers": "Tareas de activaci\u00f3n",
|
||||
"MessageDeleteTaskTrigger": "\u00bfEst\u00e1 seguro que desea eliminar esta tarea de activaci\u00f3n?",
|
||||
"MessageNoPluginsInstalled": "No tiene plugins instalados.",
|
||||
"LabelVersionInstalled": "{0} instalado",
|
||||
"LabelNumberReviews": "{0} Revisiones",
|
||||
"LabelFree": "Libre",
|
||||
"HeaderSelectAudio": "Seleccionar Audio",
|
||||
"HeaderSelectSubtitles": "Seleccionar Subt\u00edtulos",
|
||||
"LabelDefaultStream": "(Por defecto)",
|
||||
"LabelForcedStream": "(Forzado)",
|
||||
"LabelDefaultForcedStream": "(Por defecto\/Forzado)",
|
||||
"LabelUnknownLanguage": "Idioma desconocido",
|
||||
"ButtonMute": "Silencio",
|
||||
"ButtonUnmute": "Activar audio",
|
||||
"ButtonNextTrack": "Next Track",
|
||||
"ButtonPause": "Pausa",
|
||||
"ButtonPlay": "Reproducir",
|
||||
"ButtonEdit": "Editar",
|
||||
"ButtonQueue": "En cola",
|
||||
"ButtonPlayTrailer": "Reproducir trailer",
|
||||
"ButtonPlaylist": "Lista de reproducci\u00f3n",
|
||||
"ButtonPreviousTrack": "Previous Track",
|
||||
"LabelEnabled": "Activado",
|
||||
"LabelDisabled": "Desactivado",
|
||||
"ButtonMoreInformation": "M\u00e1s informaci\u00f3n",
|
||||
"LabelNoUnreadNotifications": "No hay notificaciones sin leer.",
|
||||
"ButtonViewNotifications": "Ver notificaciones",
|
||||
"ButtonMarkTheseRead": "Marcar como le\u00eddo",
|
||||
"ButtonClose": "Cerrar",
|
||||
"LabelAllPlaysSentToPlayer": "Todas las reproducciones se enviar\u00e1n al reproductor seleccionado.",
|
||||
"MessageInvalidUser": "Usuario o contrase\u00f1a no v\u00e1lido.",
|
||||
"HeaderAllRecordings": "Todas la grabaciones",
|
||||
"RecommendationBecauseYouLike": "Como le gusta {0}",
|
||||
"RecommendationBecauseYouWatched": "Ya que vi\u00f3 {0}",
|
||||
"RecommendationDirectedBy": "Dirigida por {0}",
|
||||
"RecommendationStarring": "Protagonizada por {0}",
|
||||
"HeaderConfirmRecordingCancellation": "Confirmar la cancelaci\u00f3n de la grabaci\u00f3n",
|
||||
"MessageConfirmRecordingCancellation": "\u00bfEst\u00e1 seguro que desea cancelar esta grabaci\u00f3n?",
|
||||
"MessageRecordingCancelled": "Grabaci\u00f3n cancelada.",
|
||||
"HeaderConfirmSeriesCancellation": "Confirmar cancelaci\u00f3n de serie",
|
||||
"MessageConfirmSeriesCancellation": "\u00bfEst\u00e1 seguro que desea cancelar esta serie?",
|
||||
"MessageSeriesCancelled": "Serie cancelada",
|
||||
"HeaderConfirmRecordingDeletion": "Confirmar borrado de la grabaci\u00f3n",
|
||||
"MessageConfirmRecordingDeletion": "\u00bfEst\u00e1 seguro que desea borrar esta grabaci\u00f3n?",
|
||||
"MessageRecordingDeleted": "Grabaci\u00f3n eliminada.",
|
||||
"ButonCancelRecording": "Cancelar Grabaci\u00f3n",
|
||||
"MessageRecordingSaved": "Grabaci\u00f3n guardada.",
|
||||
"OptionSunday": "Domingo",
|
||||
"OptionMonday": "Lunes",
|
||||
"OptionTuesday": "Martes",
|
||||
"OptionWednesday": "Mi\u00e9rcoles",
|
||||
"OptionThursday": "Jueves",
|
||||
"OptionFriday": "Viernes",
|
||||
"OptionSaturday": "S\u00e1bado",
|
||||
"HeaderConfirmDeletion": "Confirmar borrado",
|
||||
"MessageConfirmPathSubstitutionDeletion": "\u00bfEst\u00e1 seguro que desea borrar esta ruta de sustituci\u00f3n?",
|
||||
"LiveTvUpdateAvailable": "(Actualizaci\u00f3n disponible)",
|
||||
"LabelVersionUpToDate": "\u00a1Actualizado!",
|
||||
"ButtonResetTuner": "Reiniciar sintonizador",
|
||||
"HeaderResetTuner": "Reinicio del sintonizador",
|
||||
"MessageConfirmResetTuner": "\u00bfEst\u00e1 seguro que desea reiniciar este sintonizador? Cualquier reproducci\u00f3n o grabaci\u00f3n activa se detendr\u00e1 inmediatamente.",
|
||||
"ButtonCancelSeries": "Cancelar serie",
|
||||
"LabelAllChannels": "Todos los canales",
|
||||
"HeaderSeriesRecordings": "Grabaciones de series",
|
||||
"LabelAnytime": "A cualquier hora",
|
||||
"StatusRecording": "Grabando",
|
||||
"StatusWatching": "Viendo",
|
||||
"StatusRecordingProgram": "Grabando {0}",
|
||||
"StatusWatchingProgram": "Viendo {0}",
|
||||
"HeaderSplitMedia": "Divisi\u00f3n de medios",
|
||||
"MessageConfirmSplitMedia": "\u00bfEst\u00e1 seguro que desea dividir los medios en partes separadas?",
|
||||
"HeaderError": "Error",
|
||||
"MessagePleaseSelectOneItem": "Seleccione al menos un elemento.",
|
||||
"MessagePleaseSelectTwoItems": "Seleccione al menos dos elementos.",
|
||||
"MessageTheFollowingItemsWillBeGrouped": "Los siguientes t\u00edtulos se agrupar\u00e1n en un elemento.",
|
||||
"MessageConfirmItemGrouping": "Los clientes de Media Browser elegir\u00e1n autom\u00e1ticamente la mejor forma de reproduccion sobre la base de dispositivo y rendimiento de la red. \u00bfEst\u00e1 seguro que desea continuar?",
|
||||
"HeaderResume": "Continuar",
|
||||
"HeaderMyViews": "Mis vistas",
|
||||
"HeaderLibraryFolders": "Vista de carpeta",
|
||||
"HeaderLatestMedia": "\u00daltimos medios",
|
||||
"ButtonMore": "M\u00e1s...",
|
||||
"HeaderFavoriteMovies": "Pel\u00edculas favoritas",
|
||||
"HeaderFavoriteShows": "Programas favoritos",
|
||||
"HeaderFavoriteEpisodes": "Episodios favoritos",
|
||||
"HeaderFavoriteGames": "Juegos favoritos",
|
||||
"HeaderRatingsDownloads": "\nClasificaci\u00f3n \/ Descargas",
|
||||
"HeaderConfirmProfileDeletion": "Confirmar borrado del perfil",
|
||||
"MessageConfirmProfileDeletion": "\u00bfEst\u00e1 seguro que desea eliminar este perfil?",
|
||||
"HeaderSelectServerCachePath": "Seleccione la ruta para el cach\u00e9 del servidor",
|
||||
"HeaderSelectTranscodingPath": "Seleccione la ruta temporal del transcodificador",
|
||||
"HeaderSelectImagesByNamePath": "Seleccione la ruta para im\u00e1genes",
|
||||
"HeaderSelectMetadataPath": "Seleccione la ruta para Metadatos",
|
||||
"HeaderSelectServerCachePathHelp": "Busque o escriba la ruta de acceso que se utilizar\u00e1 para los archivos de cach\u00e9 del servidor. La carpeta debe tener permiso de escritura. La ubicaci\u00f3n de esta carpeta afectar\u00e1 directamente al rendimiento del servidor e idealmente debe ser colocado en una unidad de estado s\u00f3lido.",
|
||||
"HeaderSelectTranscodingPathHelp": "Busque o escriba la ruta de acceso que se utilizar\u00e1 para la transcodificaci\u00f3n de archivos temporales. La carpeta debe tener permiso de escritura.",
|
||||
"HeaderSelectImagesByNamePathHelp": "Busque o escriba la ruta de sus elementos por nombre de carpeta. La carpeta debe tener permisos de escritura.",
|
||||
"HeaderSelectMetadataPathHelp": "Busque o escriba la ruta donde desea almacenar los metadatos. La carpeta debe tener permiso de escritura.",
|
||||
"HeaderSelectChannelDownloadPath": "Seleccione la ruta de descargas de canal",
|
||||
"HeaderSelectChannelDownloadPathHelp": "Navege o escriba la ruta para guardar el los archivos de cach\u00e9 de canales. La carpeta debe tener permisos de escritura.",
|
||||
"OptionNewCollection": "Nuevo...",
|
||||
"ButtonAdd": "A\u00f1adir",
|
||||
"ButtonRemove": "Quitar",
|
||||
"LabelChapterDownloaders": "Downloaders de cap\u00edtulos:",
|
||||
"LabelChapterDownloadersHelp": "Habilitar y clasificar sus descargadores de cap\u00edtulos preferidos en orden de prioridad. Descargadores de menor prioridad s\u00f3lo se utilizar\u00e1n para completar la informaci\u00f3n que falta.",
|
||||
"HeaderFavoriteAlbums": "\u00c1lbumes favoritos",
|
||||
"HeaderLatestChannelMedia": "\u00dcltimos elementos de canal",
|
||||
"ButtonOrganizeFile": "Organizar archivos",
|
||||
"ButtonDeleteFile": "Borrar archivos",
|
||||
"HeaderOrganizeFile": "Organizar archivos",
|
||||
"HeaderDeleteFile": "Borrar archivos",
|
||||
"StatusSkipped": "Saltado",
|
||||
"StatusFailed": "Err\u00f3neo",
|
||||
"StatusSuccess": "\u00c9xito",
|
||||
"MessageFileWillBeDeleted": "El siguiente archivo se eliminar\u00e1:",
|
||||
"MessageSureYouWishToProceed": "\u00bfEst\u00e1 seguro que desea proceder?",
|
||||
"MessageDuplicatesWillBeDeleted": "Adem\u00e1s se eliminar\u00e1n los siguientes duplicados:",
|
||||
"MessageFollowingFileWillBeMovedFrom": "El siguiente archivo se mover\u00e1 desde:",
|
||||
"MessageDestinationTo": "hasta:",
|
||||
"HeaderSelectWatchFolder": "Seleccionar carpeta para el reloj",
|
||||
"HeaderSelectWatchFolderHelp": "Navegue o introduzca la ruta para la carpeta para el reloj. La carpeta debe tener permisos de escritura.",
|
||||
"OrganizePatternResult": "Resultado: {0}",
|
||||
"HeaderRestart": "Reiniciar",
|
||||
"HeaderShutdown": "Apagar",
|
||||
"MessageConfirmRestart": "\u00bfEst\u00e1 seguro que desea reiniciar Media Browser Server?",
|
||||
"MessageConfirmShutdown": "\u00bfEst\u00e1 seguro que desea apagar Media Browser Server?",
|
||||
"ButtonUpdateNow": "Actualizar ahora",
|
||||
"NewVersionOfSomethingAvailable": "\u00a1Hay disponible una nueva versi\u00f3n de {0}!",
|
||||
"VersionXIsAvailableForDownload": "La versi\u00f3n {0} est\u00e1 disponible para su descarga.",
|
||||
"LabelVersionNumber": "Versi\u00f3n {0}",
|
||||
"LabelPlayMethodTranscoding": "Transcodificaci\u00f3n",
|
||||
"LabelPlayMethodDirectStream": "Streaming directo",
|
||||
"LabelPlayMethodDirectPlay": "Reproducci\u00f3n directa",
|
||||
"LabelAudioCodec": "Audio: {0}",
|
||||
"LabelVideoCodec": "Video: {0}",
|
||||
"LabelRemoteAccessUrl": "Acceso remoto: {0}",
|
||||
"LabelRunningOnPort": "Ejecut\u00e1ndose en el puerto {0}.",
|
||||
"LabelRunningOnPorts": "Ejecut\u00e1ndose en los puertos {0} y {1}.",
|
||||
"HeaderLatestFromChannel": "Lo \u00faltimo de {0}",
|
||||
"ButtonDownload": "Descargar",
|
||||
"LabelUnknownLanaguage": "Idioma desconocido",
|
||||
"HeaderCurrentSubtitles": "Subt\u00edtulos actuales",
|
||||
"MessageDownloadQueued": "La descarga se ha a\u00f1adido a la cola",
|
||||
"MessageAreYouSureDeleteSubtitles": "\u00bfEst\u00e1 seguro que desea eliminar este archivo de subt\u00edtulos?",
|
||||
"ButtonRemoteControl": "Control remoto",
|
||||
"HeaderLatestTvRecordings": "\u00daltimas grabaciones",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonCancel": "Cancelar",
|
||||
"ButtonRefresh": "Refrescar",
|
||||
"LabelCurrentPath": "Ruta actual:",
|
||||
"HeaderSelectMediaPath": "Seleccionar la ruta para Medios",
|
||||
"ButtonNetwork": "Red",
|
||||
"MessageDirectoryPickerInstruction": "Rutas de red pueden ser introducidas manualmente en el caso de que el bot\u00f3n de la red no pueda localizar sus dispositivos. Por ejemplo, {0} o {1}.",
|
||||
"HeaderMenu": "Men\u00fa",
|
||||
"ButtonOpen": "Abrir",
|
||||
"ButtonOpenInNewTab": "Abrir en nueva pesta\u00f1a",
|
||||
"ButtonShuffle": "Mezclar",
|
||||
"ButtonInstantMix": "Mix instant\u00e1neo",
|
||||
"ButtonResume": "Continuar",
|
||||
"HeaderScenes": "Escenas",
|
||||
"HeaderAudioTracks": "Pistas de audio",
|
||||
"HeaderSubtitles": "Subt\u00edtulos",
|
||||
"HeaderVideoQuality": "Calidad de video",
|
||||
"MessageErrorPlayingVideo": "Ha habido un error reproduciendo el video.",
|
||||
"MessageEnsureOpenTuner": "Aseg\u00farese que hay un sintonizador disponible.",
|
||||
"ButtonHome": "Inicio",
|
||||
"ButtonDashboard": "Panel de control",
|
||||
"ButtonReports": "Informes",
|
||||
"ButtonMetadataManager": "Metadata Manager",
|
||||
"HeaderTime": "Duraci\u00f3n",
|
||||
"HeaderName": "Nombre",
|
||||
"HeaderAlbum": "Album",
|
||||
"HeaderAlbumArtist": "Artista del album",
|
||||
"HeaderArtist": "Artista"
|
||||
}
|
|
@ -197,7 +197,7 @@
|
|||
"MessageDirectoryPickerInstruction": "\u0421\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0443\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0421\u0435\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {0} \u0438\u043b\u0438 {1}.",
|
||||
"HeaderMenu": "\u041c\u0435\u043d\u044e",
|
||||
"ButtonOpen": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c",
|
||||
"ButtonOpenInNewTab": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435",
|
||||
"ButtonOpenInNewTab": "\u0412 \u043d\u043e\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435",
|
||||
"ButtonShuffle": "\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c",
|
||||
"ButtonInstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441",
|
||||
"ButtonResume": "\u0412\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",
|
||||
|
|
|
@ -375,7 +375,7 @@ namespace MediaBrowser.Server.Implementations.Localization
|
|||
new LocalizatonOption{ Name="Portuguese (Brazil)", Value="pt-BR"},
|
||||
new LocalizatonOption{ Name="Portuguese (Portugal)", Value="pt-PT"},
|
||||
new LocalizatonOption{ Name="Russian", Value="ru"},
|
||||
new LocalizatonOption{ Name="Spanish", Value="es"},
|
||||
new LocalizatonOption{ Name="Spanish", Value="es-ES"},
|
||||
new LocalizatonOption{ Name="Spanish (Mexico)", Value="es-MX"},
|
||||
new LocalizatonOption{ Name="Swedish", Value="sv"},
|
||||
new LocalizatonOption{ Name="Vietnamese", Value="vi"}
|
||||
|
|
|
@ -0,0 +1,850 @@
|
|||
{
|
||||
"LabelExit": "Salir",
|
||||
"LabelVisitCommunity": "Visitar la comunidad",
|
||||
"LabelGithubWiki": "Wiki de Github",
|
||||
"LabelSwagger": "Swagger",
|
||||
"LabelStandard": "Est\u00e1ndar",
|
||||
"LabelViewApiDocumentation": "Ver documentacion de Api",
|
||||
"LabelBrowseLibrary": "Navegar biblioteca",
|
||||
"LabelConfigureMediaBrowser": "Configurar Media Browser",
|
||||
"LabelOpenLibraryViewer": "Abrir el visor de la biblioteca",
|
||||
"LabelRestartServer": "Reiniciar el servidor",
|
||||
"LabelShowLogWindow": "Mostrar la ventana del log",
|
||||
"LabelPrevious": "Anterior",
|
||||
"LabelFinish": "Terminar",
|
||||
"LabelNext": "Siguiente",
|
||||
"LabelYoureDone": "Ha Terminado!",
|
||||
"WelcomeToMediaBrowser": "\u00a1Bienvenido a Media Browser!",
|
||||
"TitleMediaBrowser": "Media Browser",
|
||||
"ThisWizardWillGuideYou": "Este asistente lo guiar\u00e1 por el proceso de instalaci\u00f3n. Para comenzar seleccione su idioma preferido.",
|
||||
"TellUsAboutYourself": "D\u00edganos acerca de usted",
|
||||
"LabelYourFirstName": "Su nombre:",
|
||||
"MoreUsersCanBeAddedLater": "M\u00e1s usuarios pueden agregarse m\u00e1s tarde en el panel de control.",
|
||||
"UserProfilesIntro": "Media Browser incluye soporte integrado para los perfiles de usuario, lo que permite que cada usuario tenga su propia configuraci\u00f3n de la pantalla, estado de reproducci\u00f3n y control parental.",
|
||||
"LabelWindowsService": "Servicio de Windows",
|
||||
"AWindowsServiceHasBeenInstalled": "Un servicio de Windows se ha instalado",
|
||||
"WindowsServiceIntro1": "Media Browser Server se ejecuta normalmente como una aplicaci\u00f3n de escritorio con un icono de la bandeja, pero si prefiere ejecutarlo como un servicio en segundo plano, se puede iniciar desde el panel de control de servicios de Windows en su lugar.",
|
||||
"WindowsServiceIntro2": "Si se utiliza el servicio de Windows, tenga en cuenta que no se puede ejecutar al mismo tiempo que el icono de la bandeja, por lo que tendr\u00e1 que salir de la bandeja con el fin de ejecutar el servicio. Tambi\u00e9n tendr\u00e1 que ser configurado con privilegios administrativos a trav\u00e9s del panel de control del servicio. Tenga en cuenta que en este momento el servicio no es capaz de auto-actualizaci\u00f3n, por lo que las nuevas versiones requieren la interacci\u00f3n manual.",
|
||||
"WizardCompleted": "Eso es todo lo que necesitamos por ahora. Media Browser ha comenzado a reunir informaci\u00f3n sobre su biblioteca de medios. Echa un vistazo a algunas de nuestras aplicaciones, y luego haga clic en <b>Finalizar<\/b> para ver el <b>Panel de control<\/b>.",
|
||||
"LabelConfigureSettings": "Configuraci\u00f3n de opciones",
|
||||
"LabelEnableVideoImageExtraction": "Habilitar extracci\u00f3n de im\u00e1genes de video",
|
||||
"VideoImageExtractionHelp": "Para los v\u00eddeos que no dispongan de im\u00e1genes y que no podemos encontrar en Internet. Esto agregar\u00e1 un tiempo adicional para la exploraci\u00f3n inicial de bibliotecas, pero resultar\u00e1 en una presentaci\u00f3n m\u00e1s agradable.",
|
||||
"LabelEnableChapterImageExtractionForMovies": "Extraer im\u00e1genes de cap\u00edtulos para pel\u00edculas",
|
||||
"LabelChapterImageExtractionForMoviesHelp": "Extraer im\u00e1genes de cap\u00edtulo permitir\u00e1 a los clientes mostrar men\u00fas gr\u00e1ficos de selecci\u00f3n de escenas. El proceso puede ser lento, intensivo en utilizaci\u00f3n del CPU y puede requerir varios gigabytes de espacio. Se ejecuta como una tarea nocturna, a las 4 de la ma\u00f1ana, aunque esto se puede configurar en el \u00e1rea de tareas programadas. No se recomienda ejecutar esta tarea durante las horas pico de uso.",
|
||||
"LabelEnableAutomaticPortMapping": "Habilitar asignaci\u00f3n de puertos autom\u00e1tico",
|
||||
"LabelEnableAutomaticPortMappingHelp": "UPnP permite la configuraci\u00f3n del router para acceso externo de forma f\u00e1cil y autom\u00e1tica. Esto puede no funcionar en algunos modelos de routers.",
|
||||
"ButtonOk": "OK",
|
||||
"ButtonCancel": "Cancelar",
|
||||
"ButtonNew": "Nuevo",
|
||||
"HeaderSetupLibrary": "Configurar biblioteca de medios",
|
||||
"ButtonAddMediaFolder": "Agregar una carpeta de medios",
|
||||
"LabelFolderType": "Tipo de carpeta:",
|
||||
"MediaFolderHelpPluginRequired": "* Requiere el uso de un plugin, por ejemplo GameBrowser o MB Bookshelf",
|
||||
"ReferToMediaLibraryWiki": "Consultar el wiki de la biblioteca de medios",
|
||||
"LabelCountry": "Pa\u00eds:",
|
||||
"LabelLanguage": "Idioma:",
|
||||
"HeaderPreferredMetadataLanguage": "Idioma preferido para metadata",
|
||||
"LabelSaveLocalMetadata": "Guardar im\u00e1genes y metadata en las carpetas de medios",
|
||||
"LabelSaveLocalMetadataHelp": "Guardar im\u00e1genes y metadata directamente en las carpetas de medios, permitir\u00e1 colocarlas en un lugar donde se pueden editar f\u00e1cilmente.",
|
||||
"LabelDownloadInternetMetadata": "Descargar imagenes y metadata de internet",
|
||||
"LabelDownloadInternetMetadataHelp": "Media Browser permite descargar informaci\u00f3n acerca de su media para enriquecer la presentaci\u00f3n.",
|
||||
"TabPreferences": "Preferencias",
|
||||
"TabPassword": "Contrase\u00f1a",
|
||||
"TabLibraryAccess": "Acceso a biblioteca",
|
||||
"TabImage": "imagen",
|
||||
"TabProfile": "Perfil",
|
||||
"TabMetadata": "Metadata",
|
||||
"TabImages": "Im\u00e1genes",
|
||||
"TabNotifications": "Notificaciones",
|
||||
"TabCollectionTitles": "T\u00edtulos",
|
||||
"LabelDisplayMissingEpisodesWithinSeasons": "Mostar episodios no disponibles en temporadas",
|
||||
"LabelUnairedMissingEpisodesWithinSeasons": "Mostrar episodios a\u00fan no emitidos en temporadas",
|
||||
"HeaderVideoPlaybackSettings": "Ajustes de Reproducci\u00f3n de Video",
|
||||
"HeaderPlaybackSettings": "Ajustes de reproducci\u00f3n",
|
||||
"LabelAudioLanguagePreference": "Preferencia de idioma de audio",
|
||||
"LabelSubtitleLanguagePreference": "Preferencia de idioma de subtitulos",
|
||||
"OptionDefaultSubtitles": "Por defecto",
|
||||
"OptionOnlyForcedSubtitles": "S\u00f3lo subt\u00edtulos forzados",
|
||||
"OptionAlwaysPlaySubtitles": "Mostrar siempre subt\u00edtulos",
|
||||
"OptionNoSubtitles": "Sin subt\u00edtulos",
|
||||
"OptionDefaultSubtitlesHelp": "Los subt\u00edtulos que concuerden con la preferencia de idioma se cargar\u00e1n cuando el audio est\u00e9 en un idioma extranjero.",
|
||||
"OptionOnlyForcedSubtitlesHelp": "S\u00f3lo se cargar\u00e1n los subt\u00edtulos marcados como forzados.",
|
||||
"OptionAlwaysPlaySubtitlesHelp": "Los subt\u00edtulos que concuerden con la preferencia de idioma se cargar\u00e1n independientemente del idioma de audio.",
|
||||
"OptionNoSubtitlesHelp": "Los subt\u00edtulos no se cargar\u00e1n de forma predeterminada.",
|
||||
"TabProfiles": "Perfiles",
|
||||
"TabSecurity": "Seguridad",
|
||||
"ButtonAddUser": "Agregar Usuario",
|
||||
"ButtonSave": "Grabar",
|
||||
"ButtonResetPassword": "Reiniciar Contrase\u00f1a",
|
||||
"LabelNewPassword": "Nueva Contrase\u00f1a:",
|
||||
"LabelNewPasswordConfirm": "Confirmaci\u00f3n de contrase\u00f1a nueva:",
|
||||
"HeaderCreatePassword": "Crear Contrase\u00f1a",
|
||||
"LabelCurrentPassword": "Contrase\u00f1a actual",
|
||||
"LabelMaxParentalRating": "M\u00e1xima clasificaci\u00f3n permitida",
|
||||
"MaxParentalRatingHelp": "El contenido con clasificaci\u00f3n parental superior se ocultar\u00e1 para este usuario.",
|
||||
"LibraryAccessHelp": "Seleccione las carpetas de medios para compartir con este usuario. Los administradores podr\u00e1n editar todas las carpetas usando el gestor de metadata.",
|
||||
"ChannelAccessHelp": "Seleccione los canales para compartir con este usuario. Los administradores podr\u00e1n editar todos los canales mediante el gestor de metadatos.",
|
||||
"ButtonDeleteImage": "Borrar imagen",
|
||||
"LabelSelectUsers": "Seleccionar usuarios:",
|
||||
"ButtonUpload": "Subir",
|
||||
"HeaderUploadNewImage": "Subir nueva imagen",
|
||||
"LabelDropImageHere": "Depositar Imagen Aqu\u00ed",
|
||||
"ImageUploadAspectRatioHelp": "Se Recomienda una Proporci\u00f3n de Aspecto 1:1. Solo JPG\/PNG",
|
||||
"MessageNothingHere": "Nada aqu\u00ed.",
|
||||
"MessagePleaseEnsureInternetMetadata": "Por favor aseg\u00farese que la descarga de metadata de internet esta habilitada",
|
||||
"TabSuggested": "Sugerencia",
|
||||
"TabLatest": "Novedades",
|
||||
"TabUpcoming": "Pr\u00f3ximos",
|
||||
"TabShows": "Programas",
|
||||
"TabEpisodes": "Episodios",
|
||||
"TabGenres": "G\u00e9neros",
|
||||
"TabPeople": "Gente",
|
||||
"TabNetworks": "redes",
|
||||
"HeaderUsers": "Usuarios",
|
||||
"HeaderFilters": "Filtros:",
|
||||
"ButtonFilter": "Filtro",
|
||||
"OptionFavorite": "Favoritos",
|
||||
"OptionLikes": "Me gusta",
|
||||
"OptionDislikes": "No me gusta",
|
||||
"OptionActors": "Actores",
|
||||
"OptionGuestStars": "Estrellas invitadas",
|
||||
"OptionDirectors": "Directores",
|
||||
"OptionWriters": "Guionistas",
|
||||
"OptionProducers": "Productores",
|
||||
"HeaderResume": "Continuar",
|
||||
"HeaderNextUp": "Siguiendo",
|
||||
"NoNextUpItemsMessage": "Nada encontrado. \u00a1Comienza a ver tus programas!",
|
||||
"HeaderLatestEpisodes": "Ultimos episodios",
|
||||
"HeaderPersonTypes": "Tipos de personas:",
|
||||
"TabSongs": "Canciones",
|
||||
"TabAlbums": "Albums",
|
||||
"TabArtists": "Artistas",
|
||||
"TabAlbumArtists": "Album Artistas",
|
||||
"TabMusicVideos": "Videos Musicales",
|
||||
"ButtonSort": "Ordenar",
|
||||
"HeaderSortBy": "Ordenar por:",
|
||||
"HeaderSortOrder": "Ordenado por:",
|
||||
"OptionPlayed": "Reproducido",
|
||||
"OptionUnplayed": "No reproducido",
|
||||
"OptionAscending": "Ascendente",
|
||||
"OptionDescending": "Descendente",
|
||||
"OptionRuntime": "Tiempo",
|
||||
"OptionReleaseDate": "Fecha de estreno",
|
||||
"OptionPlayCount": "N\u00famero de reproducc.",
|
||||
"OptionDatePlayed": "Fecha de reproducci\u00f3n",
|
||||
"OptionDateAdded": "A\u00f1adido el",
|
||||
"OptionAlbumArtist": "Album Artista",
|
||||
"OptionArtist": "Artista",
|
||||
"OptionAlbum": "Album",
|
||||
"OptionTrackName": "Nombre de pista",
|
||||
"OptionCommunityRating": "Valoraci\u00f3n comunidad",
|
||||
"OptionNameSort": "Nombre",
|
||||
"OptionFolderSort": "Carpetas",
|
||||
"OptionBudget": "Presupuesto",
|
||||
"OptionRevenue": "Recaudaci\u00f3n",
|
||||
"OptionPoster": "Poster",
|
||||
"OptionBackdrop": "Imagen de fondo",
|
||||
"OptionTimeline": "L\u00ednea de tiempo",
|
||||
"OptionThumb": "Miniatura",
|
||||
"OptionBanner": "Banner",
|
||||
"OptionCriticRating": "Valoraci\u00f3n cr\u00edtica",
|
||||
"OptionVideoBitrate": "Video Bitrate",
|
||||
"OptionResumable": "Se puede continuar",
|
||||
"ScheduledTasksHelp": "Click en una tarea para ajustar su programaci\u00f3n",
|
||||
"ScheduledTasksTitle": "Tareas programadas",
|
||||
"TabMyPlugins": "Mis Plugins",
|
||||
"TabCatalog": "Cat\u00e1logo",
|
||||
"PluginsTitle": "Plugins",
|
||||
"HeaderAutomaticUpdates": "Actualizaciones autom\u00e1ticas",
|
||||
"HeaderNowPlaying": "Reproduciendo ahora",
|
||||
"HeaderLatestAlbums": "\u00dcltimos Albums",
|
||||
"HeaderLatestSongs": "\u00daltimas canciones",
|
||||
"HeaderRecentlyPlayed": "Reproducido recientemente",
|
||||
"HeaderFrequentlyPlayed": "Reproducido frequentemente",
|
||||
"DevBuildWarning": "Las actualizaciones en desarrollo no est\u00e1n convenientemente probadas. La aplicaci\u00f3n se puede bloquear y caracter\u00edsticas completas pueden no funcionar del todo.",
|
||||
"LabelVideoType": "Tipo de video",
|
||||
"OptionBluray": "Bluray",
|
||||
"OptionDvd": "Dvd",
|
||||
"OptionIso": "Iso",
|
||||
"Option3D": "3D",
|
||||
"LabelFeatures": "Caracter\u00edsticas",
|
||||
"LabelService": "Servicio:",
|
||||
"LabelStatus": "Estado:",
|
||||
"LabelVersion": "Versi\u00f3n:",
|
||||
"LabelLastResult": "\u00daltimo resultado:",
|
||||
"OptionHasSubtitles": "Subt\u00edtulos",
|
||||
"OptionHasTrailer": "Trailer",
|
||||
"OptionHasThemeSong": "Banda sonora",
|
||||
"OptionHasThemeVideo": "Viideotema",
|
||||
"TabMovies": "Pel\u00edculas",
|
||||
"TabStudios": "Estudios",
|
||||
"TabTrailers": "Trailers",
|
||||
"HeaderLatestMovies": "\u00daltimas pel\u00edculas",
|
||||
"HeaderLatestTrailers": "\u00daltimos trailers",
|
||||
"OptionHasSpecialFeatures": "Caracter\u00edsticas especiales",
|
||||
"OptionImdbRating": "Valoraci\u00f3n IMDb",
|
||||
"OptionParentalRating": "Clasificaci\u00f3n parental",
|
||||
"OptionPremiereDate": "Fecha de estreno",
|
||||
"TabBasic": "B\u00e1sico",
|
||||
"TabAdvanced": "Avanzado",
|
||||
"HeaderStatus": "Estado",
|
||||
"OptionContinuing": "Continuando",
|
||||
"OptionEnded": "Finalizado",
|
||||
"HeaderAirDays": "D\u00eda emisi\u00f3n",
|
||||
"OptionSunday": "Domingo",
|
||||
"OptionMonday": "Lunes",
|
||||
"OptionTuesday": "Martes",
|
||||
"OptionWednesday": "Mi\u00e9rcoles",
|
||||
"OptionThursday": "Jueves",
|
||||
"OptionFriday": "Viernes",
|
||||
"OptionSaturday": "S\u00e1bado",
|
||||
"HeaderManagement": "Administraci\u00f3n",
|
||||
"OptionMissingImdbId": "Falta IMDb Id",
|
||||
"OptionMissingTvdbId": "Falta TheTVDB Id",
|
||||
"OptionMissingOverview": "Falta argumento",
|
||||
"OptionFileMetadataYearMismatch": "Archivo\/Metadata a\u00f1os no coinciden",
|
||||
"TabGeneral": "General",
|
||||
"TitleSupport": "Soporte",
|
||||
"TabLog": "Log",
|
||||
"TabAbout": "Acerca de",
|
||||
"TabSupporterKey": "Clave de Seguidor",
|
||||
"TabBecomeSupporter": "Hazte Seguidor",
|
||||
"MediaBrowserHasCommunity": "Media Browser cuenta con una pr\u00f3spera comunidad de usuarios y colaboradores.",
|
||||
"CheckoutKnowledgeBase": "Echa un vistazo a nuestra base de conocimiento para ayudarte a sacar el m\u00e1ximo provecho de Media Browser.",
|
||||
"SearchKnowledgeBase": "Buscar en la base de conocimiento",
|
||||
"VisitTheCommunity": "Visitar la comunidad",
|
||||
"VisitMediaBrowserWebsite": "Visitar la web de Media Browser",
|
||||
"VisitMediaBrowserWebsiteLong": "Visita la web de Media Browser para estar informado de las \u00faltimas not\u00edcias y mantenerte al d\u00eda con el blog de desarrolladores.",
|
||||
"OptionHideUser": "Ocultar este usuario en las pantallas de inicio de sesi\u00f3n",
|
||||
"OptionDisableUser": "Deshabilitar este usuario",
|
||||
"OptionDisableUserHelp": "Si est\u00e1 deshabilitado, el servidor no aceptar\u00e1 conexiones de este usuario. Si existen conexiones de este usuario, finalizar\u00e1n inmediatamente.",
|
||||
"HeaderAdvancedControl": "Control avanzado",
|
||||
"LabelName": "Nombre:",
|
||||
"OptionAllowUserToManageServer": "Permite a este usuario administrar el servidor",
|
||||
"HeaderFeatureAccess": "Permisos de acceso",
|
||||
"OptionAllowMediaPlayback": "Permitir reproducci\u00f3n de medios",
|
||||
"OptionAllowBrowsingLiveTv": "Acceso a TV en vivo",
|
||||
"OptionAllowDeleteLibraryContent": "Permitir a este usuario eliminar contenido de la biblioteca",
|
||||
"OptionAllowManageLiveTv": "Permitir la gesti\u00f3n de las grabaciones de TV en vivo",
|
||||
"OptionAllowRemoteControlOthers": "Permitir a este usuario controlar rem\u00f3tamente a otros usuarios",
|
||||
"OptionMissingTmdbId": "Falta Tmdb Id",
|
||||
"OptionIsHD": "HD",
|
||||
"OptionIsSD": "SD",
|
||||
"OptionMetascore": "Metavalor",
|
||||
"ButtonSelect": "Seleccionar",
|
||||
"ButtonSearch": "Buscar",
|
||||
"ButtonGroupVersions": "Versiones de Grupo",
|
||||
"ButtonAddToCollection": "A\u00f1adir a la colecci\u00f3n",
|
||||
"PismoMessage": "Usando Pismo File Mount a trav\u00e9s de una licencia donada.",
|
||||
"TangibleSoftwareMessage": "Utilizamos convertidores Java\/C# de Tangible Solutions a trav\u00e9s de una licencia donada.",
|
||||
"HeaderCredits": "Cr\u00e9ditos",
|
||||
"PleaseSupportOtherProduces": "Por favor apoye otros productos gratuitos que utilizamos:",
|
||||
"VersionNumber": "Versi\u00f3n {0}",
|
||||
"TabPaths": "Ruta",
|
||||
"TabServer": "Servidor",
|
||||
"TabTranscoding": "Transcodificaci\u00f3n",
|
||||
"TitleAdvanced": "Avanzado",
|
||||
"LabelAutomaticUpdateLevel": "Actualizaci\u00f3n de nivel autom\u00e1tica",
|
||||
"OptionRelease": "Release Oficial",
|
||||
"OptionBeta": "Beta",
|
||||
"OptionDev": "Desarrollo",
|
||||
"LabelAllowServerAutoRestart": "Permitir al servidor reiniciarse autom\u00e1ticamente para aplicar las actualizaciones",
|
||||
"LabelAllowServerAutoRestartHelp": "El servidor s\u00f3lo se reiniciar\u00e1 durante periodos de reposo, cuando no hayan usuarios activos.",
|
||||
"LabelEnableDebugLogging": "Habilitar entrada de debug",
|
||||
"LabelRunServerAtStartup": "Arrancar servidor al iniciar",
|
||||
"LabelRunServerAtStartupHelp": "Esto iniciar\u00e1 como aplicaci\u00f3n en el inicio. Para iniciar en modo servicio de windows, desmarque esto e inicie el servicio desde el panel de control de windows. Tenga en cuenta que no es posible inciar de las dos formas a la vez, usted debe salir de la aplicaci\u00f3n para iniciar el servicio.",
|
||||
"ButtonSelectDirectory": "Seleccionar directorio",
|
||||
"LabelCustomPaths": "Especificar las rutas personalizadas que desee. D\u00e9jelo en blanco para usar las rutas por defecto.",
|
||||
"LabelCachePath": "Ruta del cach\u00e9:",
|
||||
"LabelCachePathHelp": "Esta carpeta contienes archivos de cach\u00e9 del servidor, tales como im\u00e1genes.",
|
||||
"LabelImagesByNamePath": "Ruta de im\u00e1genes:",
|
||||
"LabelImagesByNamePathHelp": "Esta carpeta contiene im\u00e1genes de actores, artistas, g\u00e9neros y estudios.",
|
||||
"LabelMetadataPath": "Ruta de Metadata:",
|
||||
"LabelMetadataPathHelp": "Esta localizaci\u00f3n contiene im\u00e1genes y metadata descargados que no est\u00e1n configurados para ser guardados en carpetas de medios.",
|
||||
"LabelTranscodingTempPath": "Ruta temporal de transcodificaci\u00f3n:",
|
||||
"LabelTranscodingTempPathHelp": "Esta carpeta contiene archivos de trabajo usados por el transcodificador.",
|
||||
"TabBasics": "Basicos",
|
||||
"TabTV": "TV",
|
||||
"TabGames": "Juegos",
|
||||
"TabMusic": "M\u00fasica",
|
||||
"TabOthers": "Otros",
|
||||
"HeaderExtractChapterImagesFor": "Extraer im\u00e1genes de cap\u00edtulos para:",
|
||||
"OptionMovies": "Pel\u00edculas",
|
||||
"OptionEpisodes": "Episodios",
|
||||
"OptionOtherVideos": "Otros v\u00eddeos",
|
||||
"TitleMetadata": "Metadata",
|
||||
"LabelAutomaticUpdatesFanart": "Activar actualizaciones autom\u00e1ticas desde FanArt.tv",
|
||||
"LabelAutomaticUpdatesTmdb": "Activar actualizaciones autom\u00e1ticas desde TheMovieDB.org",
|
||||
"LabelAutomaticUpdatesTvdb": "Activar actualizaciones autom\u00e1ticas desde TheTVDB.com",
|
||||
"LabelAutomaticUpdatesFanartHelp": "Si est\u00e1 activado, las nuevas im\u00e1genes se descargan autom\u00e1ticamente a medida que se a\u00f1aden a fanart.tv. Im\u00e1genes existentes no ser\u00e1n reemplazadas.",
|
||||
"LabelAutomaticUpdatesTmdbHelp": "Si est\u00e1 activado, las nuevas im\u00e1genes se descargan autom\u00e1ticamente a medida que se a\u00f1aden a TheMovieDB.org. Im\u00e1genes existentes no ser\u00e1n reemplazados.",
|
||||
"LabelAutomaticUpdatesTvdbHelp": "Si est\u00e1 activado, las nuevas im\u00e1genes se descargan autom\u00e1ticamente a medida que se a\u00f1aden a TheTVDB.com. Im\u00e1genes existentes no ser\u00e1n reemplazados.",
|
||||
"ExtractChapterImagesHelp": "Extraer im\u00e1genes de cap\u00edtulo permitir\u00e1 a los clientes mostrar men\u00fas gr\u00e1ficos de selecci\u00f3n de escenas. El proceso puede ser lento, uso de CPU intensivo y puede requerir varios gigabytes de espacio. Se ejecuta como una tarea nocturna, a las 4 de la ma\u00f1ana, aunque esto se puede configurar en el \u00e1rea de tareas programadas. No se recomienda ejecutar esta tarea durante las horas pico.",
|
||||
"LabelMetadataDownloadLanguage": "Idioma preferido:",
|
||||
"ButtonAutoScroll": "Auto-desplazamiento",
|
||||
"LabelImageSavingConvention": "Sistema de guardado de im\u00e1genes:",
|
||||
"LabelImageSavingConventionHelp": "Media Browser reconoce im\u00e1genes de la mayor\u00eda de aplicaciones de medios. La elecci\u00f3n de su sistema de descarga es \u00fatil si tambi\u00e9n usa otros productos.",
|
||||
"OptionImageSavingCompatible": "Compatible - MB3\/Plex\/Xbmc",
|
||||
"OptionImageSavingStandard": "Est\u00e1ndard - MB3\/MB2",
|
||||
"ButtonSignIn": "Registrarse",
|
||||
"TitleSignIn": "Registrarse",
|
||||
"HeaderPleaseSignIn": "Por favor reg\u00edstrese",
|
||||
"LabelUser": "Usuario:",
|
||||
"LabelPassword": "Contrase\u00f1a:",
|
||||
"ButtonManualLogin": "Registro manual:",
|
||||
"PasswordLocalhostMessage": "No se necesitan contrase\u00f1as al iniciar sesi\u00f3n desde localhost.",
|
||||
"TabGuide": "Gu\u00eda",
|
||||
"TabChannels": "Canales",
|
||||
"TabCollections": "Colecciones",
|
||||
"HeaderChannels": "Canales",
|
||||
"TabRecordings": "Grabaciones",
|
||||
"TabScheduled": "Programado",
|
||||
"TabSeries": "Series",
|
||||
"TabFavorites": "Favoritos",
|
||||
"TabMyLibrary": "Mi biblioteca",
|
||||
"ButtonCancelRecording": "Cancelar grabaci\u00f3n",
|
||||
"HeaderPrePostPadding": "Pre\/post grabaci\u00f3n extra",
|
||||
"LabelPrePaddingMinutes": "Minutos previos extras:",
|
||||
"OptionPrePaddingRequired": "Minutos previos extras requeridos para grabar.",
|
||||
"LabelPostPaddingMinutes": "Minutos extras post grabaci\u00f3n:",
|
||||
"OptionPostPaddingRequired": "Minutos post grabaci\u00f3n extras requeridos para grabar.",
|
||||
"HeaderWhatsOnTV": "Que hacen ahora",
|
||||
"HeaderUpcomingTV": "Pr\u00f3ximos programas",
|
||||
"TabStatus": "Estado",
|
||||
"TabSettings": "Opciones",
|
||||
"ButtonRefreshGuideData": "Actualizar datos de la gu\u00eda",
|
||||
"OptionPriority": "Prioridad",
|
||||
"OptionRecordOnAllChannels": "Grabar programa en cualquier canal",
|
||||
"OptionRecordAnytime": "Grabar programa a cualquier hora",
|
||||
"OptionRecordOnlyNewEpisodes": "Grabar s\u00f3lo nuevos episodios",
|
||||
"HeaderDays": "D\u00edas",
|
||||
"HeaderActiveRecordings": "Grabaciones activas",
|
||||
"HeaderLatestRecordings": "\u00daltimas grabaciones",
|
||||
"HeaderAllRecordings": "Todas la grabaciones",
|
||||
"ButtonPlay": "Reproducir",
|
||||
"ButtonEdit": "Editar",
|
||||
"ButtonRecord": "Grabar",
|
||||
"ButtonDelete": "Borrar",
|
||||
"ButtonRemove": "Quitar",
|
||||
"OptionRecordSeries": "Grabar serie",
|
||||
"HeaderDetails": "Detalles",
|
||||
"TitleLiveTV": "Tv en vivo",
|
||||
"LabelNumberOfGuideDays": "N\u00famero de d\u00edas de descarga de la gu\u00eda.",
|
||||
"LabelNumberOfGuideDaysHelp": "Descargar m\u00e1s d\u00edas de la gu\u00eda ofrece la posibilidad de programar grabaciones con mayor antelaci\u00f3n y ver m\u00e1s listas, pero tambi\u00e9n tarda m\u00e1s en descargarse. Auto elegir\u00e1 en funci\u00f3n del n\u00famero de canales.",
|
||||
"LabelActiveService": "Activar servicio",
|
||||
"LabelActiveServiceHelp": "Es posible instalar m\u00faltiples plugins de tv, pero s\u00f3lo puede estar activo uno a la vez.",
|
||||
"OptionAutomatic": "Auto",
|
||||
"LiveTvPluginRequired": "El servicio de TV en vivo es necesario para poder continuar.",
|
||||
"LiveTvPluginRequiredHelp": "Instale uno de los plugins disponibles, como Next Pvr o ServerVmc.",
|
||||
"LabelCustomizeOptionsPerMediaType": "Personalizar por tipo de medio:",
|
||||
"OptionDownloadThumbImage": "Miniatura",
|
||||
"OptionDownloadMenuImage": "Men\u00fa",
|
||||
"OptionDownloadLogoImage": "Logo",
|
||||
"OptionDownloadBoxImage": "Caja",
|
||||
"OptionDownloadDiscImage": "Disco",
|
||||
"OptionDownloadBannerImage": "Pancarta",
|
||||
"OptionDownloadBackImage": "Atr\u00e1s",
|
||||
"OptionDownloadArtImage": "Arte",
|
||||
"OptionDownloadPrimaryImage": "Principal",
|
||||
"HeaderFetchImages": "Buscar im\u00e1genes",
|
||||
"HeaderImageSettings": "Opciones de im\u00e1gen",
|
||||
"TabOther": "Otros",
|
||||
"LabelMaxBackdropsPerItem": "M\u00e1ximo n\u00famero de im\u00e1genes de fondo por \u00edtem:",
|
||||
"LabelMaxScreenshotsPerItem": "M\u00e1ximo n\u00famero de capturas de pantalla por \u00edtem:",
|
||||
"LabelMinBackdropDownloadWidth": "Anchura m\u00ednima de descarga de im\u00e1genes de fondo:",
|
||||
"LabelMinScreenshotDownloadWidth": "Anchura m\u00ednima de descarga de capturas de pantalla:",
|
||||
"ButtonAddScheduledTaskTrigger": "A\u00f1adir eventos",
|
||||
"HeaderAddScheduledTaskTrigger": "A\u00f1adir eventos de ejecuci\u00f3n",
|
||||
"ButtonAdd": "A\u00f1adir",
|
||||
"LabelTriggerType": "Tipo de evento:",
|
||||
"OptionDaily": "Diario",
|
||||
"OptionWeekly": "Semanal",
|
||||
"OptionOnInterval": "En un intervalo",
|
||||
"OptionOnAppStartup": "Al iniciar la aplicaci\u00f3n",
|
||||
"OptionAfterSystemEvent": "Despu\u00e9s de un evento de sistema",
|
||||
"LabelDay": "D\u00eda:",
|
||||
"LabelTime": "Hora:",
|
||||
"LabelEvent": "Evento:",
|
||||
"OptionWakeFromSleep": "Despertar",
|
||||
"LabelEveryXMinutes": "Cada:",
|
||||
"HeaderTvTuners": "Sintonizadores",
|
||||
"HeaderGallery": "Galer\u00eda",
|
||||
"HeaderLatestGames": "\u00daltimos Juegos",
|
||||
"HeaderRecentlyPlayedGames": "Juegos utilizados recientemente",
|
||||
"TabGameSystems": "Sistema de Juego",
|
||||
"TitleMediaLibrary": "Librer\u00eda de medios",
|
||||
"TabFolders": "Carpetas",
|
||||
"TabPathSubstitution": "Ruta alternativa",
|
||||
"LabelSeasonZeroDisplayName": "Nombre de la Temporada 0:",
|
||||
"LabelEnableRealtimeMonitor": "Activar monitoreo en tiempo real",
|
||||
"LabelEnableRealtimeMonitorHelp": "Los cambios se procesar\u00e1n inmediatamente, en sistemas de archivo que lo soporten.",
|
||||
"ButtonScanLibrary": "Escanear Librer\u00eda",
|
||||
"HeaderNumberOfPlayers": "Jugadores:",
|
||||
"OptionAnyNumberOfPlayers": "Cualquiera",
|
||||
"Option1Player": "1+",
|
||||
"Option2Player": "2+",
|
||||
"Option3Player": "3+",
|
||||
"Option4Player": "4+",
|
||||
"HeaderMediaFolders": "Carpetas de medios",
|
||||
"HeaderThemeVideos": "V\u00eddeos de tema",
|
||||
"HeaderThemeSongs": "Canciones de tema",
|
||||
"HeaderScenes": "Escenas",
|
||||
"HeaderAwardsAndReviews": "Premios y reconocimientos",
|
||||
"HeaderSoundtracks": "Pistas de audio",
|
||||
"HeaderMusicVideos": "V\u00eddeos musicales",
|
||||
"HeaderSpecialFeatures": "Caracter\u00edsticas especiales",
|
||||
"HeaderCastCrew": "Reparto y equipo t\u00e9cnico",
|
||||
"HeaderAdditionalParts": "Partes adicionales",
|
||||
"ButtonSplitVersionsApart": "Dividir versiones aparte",
|
||||
"ButtonPlayTrailer": "Trailer",
|
||||
"LabelMissing": "Falta",
|
||||
"LabelOffline": "Apagado",
|
||||
"PathSubstitutionHelp": "Las rutas alternativas se utilizan para mapear una ruta en el servidor a la que los clientes puedan acceder. El permitir que los clientes se conecten directamente a trav\u00e9s de la red y puedan reproducir los medios directamente, evita utilizar recursos del servidor para la transcodificaci\u00f3n y el stream,",
|
||||
"HeaderFrom": "Desde",
|
||||
"HeaderTo": "Hasta",
|
||||
"LabelFrom": "Desde:",
|
||||
"LabelFromHelp": "Ejemplo: D:\\Pel\u00edculas (en el servidor)",
|
||||
"LabelTo": "Hasta:",
|
||||
"LabelToHelp": "Ejemplo: \\\\MiServidor\\Pel\u00edculas (ruta a la que puedan acceder los clientes)",
|
||||
"ButtonAddPathSubstitution": "A\u00f1adir ruta alternativa",
|
||||
"OptionSpecialEpisode": "Especiales",
|
||||
"OptionMissingEpisode": "Episodios que faltan",
|
||||
"OptionUnairedEpisode": "Episodios no emitidos",
|
||||
"OptionEpisodeSortName": "Nombre corto del episodio",
|
||||
"OptionSeriesSortName": "Nombre de la serie",
|
||||
"OptionTvdbRating": "Valoraci\u00f3n tvdb",
|
||||
"HeaderTranscodingQualityPreference": "Preferencia de calidad de transcodificaci\u00f3n:",
|
||||
"OptionAutomaticTranscodingHelp": "El servidor decidir\u00e1 la calidad y la velocidad",
|
||||
"OptionHighSpeedTranscodingHelp": "Calidad menor, pero codificaci\u00f3n r\u00e1pida",
|
||||
"OptionHighQualityTranscodingHelp": "C\u00e1lidad mayor, pero codificaci\u00f3n lenta",
|
||||
"OptionMaxQualityTranscodingHelp": "La mayor calidad posible con codificaci\u00f3n lenta y alto uso de CPU",
|
||||
"OptionHighSpeedTranscoding": "Mayor velocidad",
|
||||
"OptionHighQualityTranscoding": "Mayor calidad",
|
||||
"OptionMaxQualityTranscoding": "M\u00e1xima calidad",
|
||||
"OptionEnableDebugTranscodingLogging": "Activar el registro de depuraci\u00f3n del transcodificador",
|
||||
"OptionEnableDebugTranscodingLoggingHelp": "Esto crear\u00e1 archivos de registro muy grandes y s\u00f3lo se recomienda cuando sea necesario para solucionar problemas.",
|
||||
"OptionUpscaling": "Permitir que los clientes soliciten v\u00eddeo upscaled",
|
||||
"OptionUpscalingHelp": "En algunos casos esto se traducir\u00e1 en una mejora de la calidad del v\u00eddeo, pero aumentar\u00e1 el uso de CPU.",
|
||||
"EditCollectionItemsHelp": "Agregar o quitar pel\u00edculas, series, discos, libros o juegos que desee agrupar dentro de esta colecci\u00f3n.",
|
||||
"HeaderAddTitles": "A\u00f1adir T\u00edtulos",
|
||||
"LabelEnableDlnaPlayTo": "Actvar la reproducci\u00f3n en DLNAi",
|
||||
"LabelEnableDlnaPlayToHelp": "Media Browser puede detectar dispositivos en su red y ofrecer la posibilidad de controlarlos remotamente.",
|
||||
"LabelEnableDlnaDebugLogging": "Activar el registro de depuraci\u00f3n de DLNA",
|
||||
"LabelEnableDlnaDebugLoggingHelp": "Esto crear\u00e1 archivos de registro de gran tama\u00f1o y s\u00f3lo debe ser utilizado cuando sea necesario para solucionar problemas.",
|
||||
"LabelEnableDlnaClientDiscoveryInterval": "Intervalo de detecci\u00f3n de cliente (segundos)",
|
||||
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Determina la duraci\u00f3n en segundos del intervalo entre las b\u00fasquedas SSDP realizadas por Media Browser.",
|
||||
"HeaderCustomDlnaProfiles": "Perfiles personalizados",
|
||||
"HeaderSystemDlnaProfiles": "Perfiles del sistema",
|
||||
"CustomDlnaProfilesHelp": "Crear un perfil personalizado para un nuevo dispositivo o reemplazar un perfil del sistema.",
|
||||
"SystemDlnaProfilesHelp": "Los perfiles del sistema son de s\u00f3lo lectura. Para anular un perfil del sistema, crear un perfil personalizado del mismo dispositivo.",
|
||||
"TitleDashboard": "Panel de control",
|
||||
"TabHome": "Inicio",
|
||||
"TabInfo": "Info",
|
||||
"HeaderLinks": "Enlaces",
|
||||
"HeaderSystemPaths": "Rutas del sistema",
|
||||
"LinkCommunity": "Comunidad",
|
||||
"LinkGithub": "Github",
|
||||
"LinkApiDocumentation": "Documentaci\u00f3n API",
|
||||
"LabelFriendlyServerName": "Nombre informal del servidor:",
|
||||
"LabelFriendlyServerNameHelp": "Este nombre se podr\u00e1 utilizar para identificar este servidor. Si se deja en blanco se usar\u00e1 el nombre del ordenador.",
|
||||
"LabelPreferredDisplayLanguage": "Idioma de pantalla preferido",
|
||||
"LabelPreferredDisplayLanguageHelp": "La traducci\u00f3n de Media Browser es un proyecto en curso y a\u00fan no est\u00e1 completado.",
|
||||
"LabelReadHowYouCanContribute": "Lea acerca de c\u00f3mo usted puede contribuir.",
|
||||
"HeaderNewCollection": "Nueva colecci\u00f3n",
|
||||
"HeaderAddToCollection": "A\u00f1adir a la colecci\u00f3n",
|
||||
"ButtonSubmit": "Enviar",
|
||||
"NewCollectionNameExample": "Ejemplo: Star Wars Colecci\u00f3n",
|
||||
"OptionSearchForInternetMetadata": "Buscar en internet ilustraciones y metadatos",
|
||||
"ButtonCreate": "Crear",
|
||||
"LabelHttpServerPortNumber": "Puerto Http del servidor:",
|
||||
"LabelWebSocketPortNumber": "N\u00famero de puerto WebSocket:",
|
||||
"LabelEnableAutomaticPortHelp": "UPnP permite automatizar la configuraci\u00f3n del router para el acceso remoto. Esto puede no funcionar en algunos modelos de router.",
|
||||
"LabelExternalDDNS": "DDNS externa:",
|
||||
"LabelExternalDDNSHelp": "Si dispone de DNS din\u00e1mica, escr\u00edbala aqu\u00ed. Media Brower la utilizar\u00e1 para las conexiones remotas.",
|
||||
"TabResume": "Continuar",
|
||||
"TabWeather": "El tiempo",
|
||||
"TitleAppSettings": "Opciones de la App",
|
||||
"LabelMinResumePercentage": "Porcentaje m\u00ednimo para reanudaci\u00f3n:",
|
||||
"LabelMaxResumePercentage": "Porcentaje m\u00e1ximo para reanudaci\u00f3n::",
|
||||
"LabelMinResumeDuration": "Duraci\u00f3n m\u00ednima de reanudaci\u00f3n (segundos):",
|
||||
"LabelMinResumePercentageHelp": "Los t\u00edtulos se asumir\u00e1n como no reproducidos si se paran antes de este momento",
|
||||
"LabelMaxResumePercentageHelp": "Los t\u00edtulos se asumir\u00e1n como reproducidos si se paran despu\u00e9s de este momento",
|
||||
"LabelMinResumeDurationHelp": "Los t\u00edtulos m\u00e1s cortos de esto no ser\u00e1n reanudables",
|
||||
"TitleAutoOrganize": "Organizaci\u00f3n autom\u00e1tica",
|
||||
"TabActivityLog": "Log de actividad",
|
||||
"HeaderName": "Nombre",
|
||||
"HeaderDate": "Fecha",
|
||||
"HeaderSource": "Origen",
|
||||
"HeaderDestination": "Destino",
|
||||
"HeaderProgram": "Programa",
|
||||
"HeaderClients": "Clientes",
|
||||
"LabelCompleted": "Completado",
|
||||
"LabelFailed": "Err\u00f3neo",
|
||||
"LabelSkipped": "Omitido",
|
||||
"HeaderEpisodeOrganization": "Organizaci\u00f3n de episodios",
|
||||
"LabelSeries": "Serie:",
|
||||
"LabelSeasonNumber": "Temporada n\u00famero:",
|
||||
"LabelEpisodeNumber": "Episodio n\u00famero:",
|
||||
"LabelEndingEpisodeNumber": "N\u00famero episodio final:",
|
||||
"LabelEndingEpisodeNumberHelp": "S\u00f3lo requerido para archivos multi-episodio",
|
||||
"HeaderSupportTheTeam": "Apoye al Equipo de Media Browser",
|
||||
"LabelSupportAmount": "Importe (USD)",
|
||||
"HeaderSupportTheTeamHelp": "Ayude a garantizar el desarrollo continuo de este proyecto mediante una donaci\u00f3n. Una parte de todas las donaciones ir\u00e1n a parar a otras herramientas gratuitas de las que dependemos.",
|
||||
"ButtonEnterSupporterKey": "Entre la Key de Seguidor",
|
||||
"DonationNextStep": "Cuando haya terminado, vuelva y entre su key de seguidor que recibir\u00e1 por email.",
|
||||
"AutoOrganizeHelp": "Organizaci\u00f3n autom\u00e1tica monitoriza sus carpetas de descarga en busca de nuevos archivos y los mueve a sus directorios de medios.",
|
||||
"AutoOrganizeTvHelp": "La organizaci\u00f3n de archivos de TV s\u00f3lo a\u00f1adir\u00e1 episodios a series existentes. No crear\u00e1 carpetas para series nuevas.",
|
||||
"OptionEnableEpisodeOrganization": "Activar la organizaci\u00f3n de nuevos episodios",
|
||||
"LabelWatchFolder": "Ver carpeta:",
|
||||
"LabelWatchFolderHelp": "El servidor sondear\u00e1 esta carpeta durante la tarea programada \"Organizar nuevos archivos de medios\".",
|
||||
"ButtonViewScheduledTasks": "Ver tareas programadas",
|
||||
"LabelMinFileSizeForOrganize": "Tama\u00f1o m\u00ednimo de archivo (MB):",
|
||||
"LabelMinFileSizeForOrganizeHelp": "Los archivos menores de este tama\u00f1po se ignorar\u00e1n.",
|
||||
"LabelSeasonFolderPattern": "Patr\u00f3n de la carpeta para temporadas:",
|
||||
"LabelSeasonZeroFolderName": "Nombre de la carpeta para la temporada cero:",
|
||||
"HeaderEpisodeFilePattern": "Patr\u00f3n para archivos de episodio",
|
||||
"LabelEpisodePattern": "Patr\u00f3n de episodio:",
|
||||
"LabelMultiEpisodePattern": "Patr\u00f3n para multi-episodio:",
|
||||
"HeaderSupportedPatterns": "Patrones soportados",
|
||||
"HeaderTerm": "Plazo",
|
||||
"HeaderPattern": "Patr\u00f3n",
|
||||
"HeaderResult": "Resultado",
|
||||
"LabelDeleteEmptyFolders": "Borrar carpetas vacias despu\u00e9s de la organizaci\u00f3n",
|
||||
"LabelDeleteEmptyFoldersHelp": "Activar para mantener el directorio de descargas limpio.",
|
||||
"LabelDeleteLeftOverFiles": "Eliminar los archivos sobrantes con las siguientes extensiones:",
|
||||
"LabelDeleteLeftOverFilesHelp": "Separar con ;. Por ejemplo: .nfo;.txt",
|
||||
"OptionOverwriteExistingEpisodes": "Sobreescribir episodios ya existentes",
|
||||
"LabelTransferMethod": "M\u00e9todo de transferencia",
|
||||
"OptionCopy": "Copiar",
|
||||
"OptionMove": "Mover",
|
||||
"LabelTransferMethodHelp": "Copiar o mover archivos desde la carpeta de inspecci\u00f3n",
|
||||
"HeaderLatestNews": "Ultimas noticias",
|
||||
"HeaderHelpImproveMediaBrowser": "Ayuda a mejorar Media Browser",
|
||||
"HeaderRunningTasks": "Tareas en ejecuci\u00f3n",
|
||||
"HeaderActiveDevices": "Dispositivos activos",
|
||||
"HeaderPendingInstallations": "Instalaciones pendientes",
|
||||
"HeaerServerInformation": "Informaci\u00f3n del servidor",
|
||||
"ButtonRestartNow": "Reiniciar ahora",
|
||||
"ButtonRestart": "Reiniciar",
|
||||
"ButtonShutdown": "Apagar",
|
||||
"ButtonUpdateNow": "Actualizar ahora",
|
||||
"PleaseUpdateManually": "Por favor cierre el servidor y actualice manualmente.",
|
||||
"NewServerVersionAvailable": "\u00a1Hay disponible una nueva versi\u00f3n de Media Browser Server!",
|
||||
"ServerUpToDate": "Media Browser Server est\u00e1 actualizado",
|
||||
"ErrorConnectingToMediaBrowserRepository": "Hubo un error al conectarse remotamente al repositorio de Media Browser,",
|
||||
"LabelComponentsUpdated": "Los componentes siguientes se han instalado o actualizado:",
|
||||
"MessagePleaseRestartServerToFinishUpdating": "Reinicie el servidor para acabar de aplicar las actualizaciones.",
|
||||
"LabelDownMixAudioScale": "Escala de reducci\u00f3n de potencia de audio:",
|
||||
"LabelDownMixAudioScaleHelp": "Potenciador de audio. Establecer a 1 para preservar el volumen original.",
|
||||
"ButtonLinkKeys": "Enlazar claves",
|
||||
"LabelOldSupporterKey": "Antigua clave de seguidor",
|
||||
"LabelNewSupporterKey": "Nueva clave de seguidor",
|
||||
"HeaderMultipleKeyLinking": "Vinculaci\u00f3n de m\u00faltiples claves",
|
||||
"MultipleKeyLinkingHelp": "Si usted tiene m\u00e1s de una clave de seguidor, utilice este formulario para vincular los registros de la antigua clave con la nueva.",
|
||||
"LabelCurrentEmailAddress": "Cuenta de correo actual",
|
||||
"LabelCurrentEmailAddressHelp": "La direcci\u00f3n de correo electr\u00f3nico actual a la que se envi\u00f3 la nueva clave.",
|
||||
"HeaderForgotKey": "Perd\u00ed mi clave",
|
||||
"LabelEmailAddress": "Direcci\u00f3n de correo",
|
||||
"LabelSupporterEmailAddress": "La direcci\u00f3n de correo que utliz\u00f3 para comprar la clave.",
|
||||
"ButtonRetrieveKey": "Recuperar clave",
|
||||
"LabelSupporterKey": "Clave de seguidor (pegar desde el correo)",
|
||||
"LabelSupporterKeyHelp": "Entre su clave de seguidor para empezar a disfrutar de los beneficios adicionales que la comunidad ha creado para Media Browser.",
|
||||
"MessageInvalidKey": "La clave MB3 falta o es inv\u00e1lida",
|
||||
"ErrorMessageInvalidKey": "Para acceder al contenido premium debe registrarse, tambi\u00e9n debe ser un MB3 Seguidor. Por favor, done y apoye el desarrollo continuado del producto principal. Gracias.",
|
||||
"HeaderDisplaySettings": "Opciones de pantalla",
|
||||
"TabPlayTo": "Reproducir en",
|
||||
"LabelEnableDlnaServer": "Habilitar servidor Dlna",
|
||||
"LabelEnableDlnaServerHelp": "Permite que los dispositivos UPnp de su red puedan navegar y repoducir contenidos de Media Browser.",
|
||||
"LabelEnableBlastAliveMessages": "Explotar mensajes en vivo",
|
||||
"LabelEnableBlastAliveMessagesHelp": "Active aqu\u00ed si el servidor no es detectado correctamente por otros dispositivos UPnP en su red.",
|
||||
"LabelBlastMessageInterval": "Intervalo para mensajes en vivo (segundos)",
|
||||
"LabelBlastMessageIntervalHelp": "Determina la duraci\u00f3n en segundos entre los mensajes en vivo del servidor .",
|
||||
"LabelDefaultUser": "Usuario por defecto:",
|
||||
"LabelDefaultUserHelp": "Determina de q\u00fae usuario se utilizar\u00e1 su biblioteca de medios para mostrarla por defecto en los dipositivos conectados. Esto puede cambiarse para cada dispositivo mediante el uso de perfiles.",
|
||||
"TitleDlna": "DLNA",
|
||||
"TitleChannels": "Canales",
|
||||
"HeaderServerSettings": "Ajustes del Servidor",
|
||||
"LabelWeatherDisplayLocation": "Lugar del que mostar el tiempo:",
|
||||
"LabelWeatherDisplayLocationHelp": "C\u00f3digo postal USA \/ Ciudad, Estado, Pa\u00eds \/ Ciudad, Pa\u00eds",
|
||||
"LabelWeatherDisplayUnit": "Unidad de media para la temperatura:",
|
||||
"OptionCelsius": "Celsius",
|
||||
"OptionFahrenheit": "Fahrenheit",
|
||||
"HeaderRequireManualLogin": "Requerir entrada de usuario manual para:",
|
||||
"HeaderRequireManualLoginHelp": "Cuando est\u00e1 desactivado los clientes saldr\u00e1n en la pantalla de inicio para seleccionarlos visualmente.",
|
||||
"OptionOtherApps": "Otras aplicaciones",
|
||||
"OptionMobileApps": "Aplicaciones m\u00f3viles",
|
||||
"HeaderNotificationList": "Haga click en una notificaci\u00f3n para configurar sus opciones de env\u00edo.",
|
||||
"NotificationOptionApplicationUpdateAvailable": "Disponible actualizaci\u00f3n de la aplicaci\u00f3n",
|
||||
"NotificationOptionApplicationUpdateInstalled": "Se ha instalado la actualizaci\u00f3n de la aplicaci\u00f3n",
|
||||
"NotificationOptionPluginUpdateInstalled": "Se ha instalado la actualizaci\u00f3n del plugin",
|
||||
"NotificationOptionPluginInstalled": "Plugin instalado",
|
||||
"NotificationOptionPluginUninstalled": "Plugin desinstalado",
|
||||
"NotificationOptionVideoPlayback": "Reproducci\u00f3n de video",
|
||||
"NotificationOptionAudioPlayback": "Reproducci\u00f3n de audio",
|
||||
"NotificationOptionGamePlayback": "Iniciar juegos",
|
||||
"NotificationOptionVideoPlaybackStopped": "Reproducci\u00f3n de video detenida",
|
||||
"NotificationOptionAudioPlaybackStopped": "Reproducci\u00f3n de audio detenida",
|
||||
"NotificationOptionGamePlaybackStopped": "Reproducci\u00f3n de juego detenida",
|
||||
"NotificationOptionTaskFailed": "La tarea programada ha fallado",
|
||||
"NotificationOptionInstallationFailed": "Fallo en la instalaci\u00f3n",
|
||||
"NotificationOptionNewLibraryContent": "Nuevo contenido a\u00f1adido",
|
||||
"NotificationOptionNewLibraryContentMultiple": "Nuevo contenido a\u00f1adido (multiple)",
|
||||
"SendNotificationHelp": "Por defecto, las notificaciones aparecer\u00e1n en el panel de control. Compruebe el cat\u00e1logo de plugins para instalar opciones adicionales para las notificaciones.",
|
||||
"NotificationOptionServerRestartRequired": "Se requiere el reinicio del servidor",
|
||||
"LabelNotificationEnabled": "Activar esta notificaci\u00f3n",
|
||||
"LabelMonitorUsers": "Supervisar la actividad de:",
|
||||
"LabelSendNotificationToUsers": "Enviar la notificaci\u00f3n a:",
|
||||
"UsersNotNotifiedAboutSelfActivity": "Los usuarios no ser\u00e1n notificados acerca de sus propias actividades.",
|
||||
"LabelUseNotificationServices": "Usar los siguientes servicios:",
|
||||
"CategoryUser": "Usuario",
|
||||
"CategorySystem": "Sistema",
|
||||
"CategoryApplication": "Aplicaci\u00f3n",
|
||||
"CategoryPlugin": "Plugin",
|
||||
"LabelMessageTitle": "T\u00edtulo del mensaje:",
|
||||
"LabelAvailableTokens": "Tokens disponibles:",
|
||||
"AdditionalNotificationServices": "Visite el cat\u00e1logo de plugins para instalar servicios de notificaci\u00f3n adicionales.",
|
||||
"OptionAllUsers": "Todos los usuarios",
|
||||
"OptionAdminUsers": "Administradores",
|
||||
"OptionCustomUsers": "A medida",
|
||||
"ButtonArrowUp": "Arriba",
|
||||
"ButtonArrowDown": "Abajo",
|
||||
"ButtonArrowLeft": "Izquierda",
|
||||
"ButtonArrowRight": "Derecha",
|
||||
"ButtonBack": "Atr\u00e1s",
|
||||
"ButtonInfo": "Info",
|
||||
"ButtonOsd": "Visualizaci\u00f3n en pantalla",
|
||||
"ButtonPageUp": "P\u00e1gina arriba",
|
||||
"ButtonPageDown": "P\u00e1gina abajo",
|
||||
"PageAbbreviation": "PG",
|
||||
"ButtonHome": "Inicio",
|
||||
"ButtonSettings": "Opciones",
|
||||
"ButtonTakeScreenshot": "Captura de pantalla",
|
||||
"ButtonLetterUp": "Letter arriba",
|
||||
"ButtonLetterDown": "Letter abajo",
|
||||
"PageButtonAbbreviation": "PG",
|
||||
"LetterButtonAbbreviation": "A",
|
||||
"TabNowPlaying": "Reproduciendo ahora",
|
||||
"TabNavigation": "Navegaci\u00f3n",
|
||||
"TabControls": "Controles",
|
||||
"ButtonFullscreen": "Pantalla completa",
|
||||
"ButtonScenes": "Escenas",
|
||||
"ButtonSubtitles": "Subt\u00edtulos",
|
||||
"ButtonAudioTracks": "Pistas de audio",
|
||||
"ButtonPreviousTrack": "Pista anterior",
|
||||
"ButtonNextTrack": "Pista siguiente",
|
||||
"ButtonStop": "Detener",
|
||||
"ButtonPause": "Pausa",
|
||||
"LabelGroupMoviesIntoCollections": "Agrupar pel\u00edculas en colecciones",
|
||||
"LabelGroupMoviesIntoCollectionsHelp": "Cuando se muestran las listas de pel\u00edculas, las pel\u00edculas pertenecientes a una colecci\u00f3n se mostrar\u00e1n como un elemento agrupado.",
|
||||
"NotificationOptionPluginError": "Error en plugin",
|
||||
"ButtonVolumeUp": "Subir volumen",
|
||||
"ButtonVolumeDown": "Bajar volumen",
|
||||
"ButtonMute": "Silencio",
|
||||
"HeaderLatestMedia": "\u00daltimos medios",
|
||||
"OptionSpecialFeatures": "Caracter\u00edsticas especiales",
|
||||
"HeaderCollections": "Colecciones",
|
||||
"LabelProfileCodecsHelp": "Separados por comas. Esto se puede dejar vac\u00edo para aplicar a todos los codecs.",
|
||||
"LabelProfileContainersHelp": "Separados por comas. Esto se puede dejar vac\u00edo para aplicar a todos los contenedores.",
|
||||
"HeaderResponseProfile": "Perfil de respuesta",
|
||||
"LabelType": "Tipo:",
|
||||
"LabelProfileContainer": "Contenedor:",
|
||||
"LabelProfileVideoCodecs": "Codecs de video:",
|
||||
"LabelProfileAudioCodecs": "Codecs de audio:",
|
||||
"LabelProfileCodecs": "Codecs:",
|
||||
"HeaderDirectPlayProfile": "Perfil de reproducci\u00f3n directa",
|
||||
"HeaderTranscodingProfile": "Perfil de transcodificaci\u00f3n",
|
||||
"HeaderCodecProfile": "Perfil de codec",
|
||||
"HeaderCodecProfileHelp": "Perfiles de codec indican las limitaciones de un dispositivo cuando se reproducen codecs espec\u00edficos. Si se aplica una limitaci\u00f3n entonces el medio se transcodificar\u00e1, incluso si el codec est\u00e1 configurado para reproducci\u00f3n directa.",
|
||||
"HeaderContainerProfile": "Perfil de contenedor",
|
||||
"HeaderContainerProfileHelp": "Perfiles de codec indican las limitaciones de un dispositivo mientras reproduce formatos espec\u00edficos. If se aplica una limitaci\u00f3n entonces el medio se transcodificar\u00e1, incluso si el formato est\u00e1 configurado para reproducci\u00f3n directa.",
|
||||
"OptionProfileVideo": "Video",
|
||||
"OptionProfileAudio": "Audio",
|
||||
"OptionProfileVideoAudio": "Video audio",
|
||||
"OptionProfilePhoto": "Foto",
|
||||
"LabelUserLibrary": "Librer\u00eda de usuario:",
|
||||
"LabelUserLibraryHelp": "Seleccione de qu\u00e9 usuario se utilizar\u00e1 la librer\u00eda en el dispositivo. D\u00e9jelo vac\u00edo para utilizar la configuraci\u00f3n por defecto.",
|
||||
"OptionPlainStorageFolders": "Ver todas las carpetas como carpetas de almacenamiento sin formato.",
|
||||
"OptionPlainStorageFoldersHelp": "Si est\u00e1 activado, todas las carpetas se representan en DIDL como \"object.container.storageFolder\" en lugar de un tipo m\u00e1s espec\u00edfico, como por ejemplo \"object.container.person.musicArtist\".",
|
||||
"OptionPlainVideoItems": "Mostrar todos los videos como elementos de video sin formato",
|
||||
"OptionPlainVideoItemsHelp": "Si est\u00e1 habilitado, todos los v\u00eddeos est\u00e1n representados en DIDL como \"object.item.videoItem\" en lugar de un tipo m\u00e1s espec\u00edfico, como por ejemplo \"object.item.videoItem.movie\".",
|
||||
"LabelSupportedMediaTypes": "Tipos de medio soportados:",
|
||||
"TabIdentification": "Identificaci\u00f3n",
|
||||
"TabDirectPlay": "Reproducci\u00f3n directa",
|
||||
"TabContainers": "Contenedores",
|
||||
"TabCodecs": "Codecs",
|
||||
"TabResponses": "Respuestas",
|
||||
"HeaderProfileInformation": "Informaci\u00f3n del perfil",
|
||||
"LabelEmbedAlbumArtDidl": "Incorporar la car\u00e1tula del \u00e1lbum en didl",
|
||||
"LabelEmbedAlbumArtDidlHelp": "Algunos dispositivos prefieren este m\u00e9todo para obtener la car\u00e1tula del \u00e1lbum. Otros pueden fallar al reproducir con esta opci\u00f3n habilitada.",
|
||||
"LabelAlbumArtPN": "Car\u00e1tula del album PN:",
|
||||
"LabelAlbumArtHelp": "PN utilizado para la car\u00e1tula del \u00e1lbum, dentro del atributo dlna:profileID en upnp:albumArtURI. Algunos clientes requieren un valor espec\u00edfico, independientemente del tama\u00f1o de la imagen.",
|
||||
"LabelAlbumArtMaxWidth": "Anchura m\u00e1xima de la car\u00e1tula del album:",
|
||||
"LabelAlbumArtMaxWidthHelp": "Resoluci\u00f3n m\u00e1xima de la car\u00e1tula del \u00e1lbum expuesta a trav\u00e9s de upnp:albumArtURI.",
|
||||
"LabelAlbumArtMaxHeight": "Altura m\u00e1xima de la car\u00e1tula del album:",
|
||||
"LabelAlbumArtMaxHeightHelp": "Resoluci\u00f3n m\u00e1xima de la car\u00e1tula del \u00e1lbum expuesta a trav\u00e9s de upnp:albumArtURI.",
|
||||
"LabelIconMaxWidth": "Anchura m\u00e1xima de icono:",
|
||||
"LabelIconMaxWidthHelp": "Resoluci\u00f3n m\u00e1xima de los iconos expuestos via upnp:icon.",
|
||||
"LabelIconMaxHeight": "Altura m\u00e1xima de icono:",
|
||||
"LabelIconMaxHeightHelp": "Resoluci\u00f3n m\u00e1xima de los iconos expuestos via upnp:icon.",
|
||||
"LabelIdentificationFieldHelp": "Una subcadena insensible a may\u00fasculas o min\u00fasculas o una expresi\u00f3n regex.",
|
||||
"HeaderProfileServerSettingsHelp": "Estos valores controlan el modo en que Media Browser se presentar\u00e1 en el dispositivo.",
|
||||
"LabelMaxBitrate": "Bitrate m\u00e1ximo:",
|
||||
"LabelMaxBitrateHelp": "Especificar una tasa de bits m\u00e1xima en entornos de ancho de banda limitado, o si el dispositivo impone su propio l\u00edmite.",
|
||||
"OptionIgnoreTranscodeByteRangeRequests": "Ignorar las solicitudes de intervalo de bytes de transcodificaci\u00f3n",
|
||||
"OptionIgnoreTranscodeByteRangeRequestsHelp": "Si est\u00e1 activado, estas solicitudes ser\u00e1n atendidas pero ignorar\u00e1n el encabezado de intervalo de bytes.",
|
||||
"LabelFriendlyName": "Nombre amigable",
|
||||
"LabelManufacturer": "Fabricante",
|
||||
"LabelManufacturerUrl": "Url del fabricante",
|
||||
"LabelModelName": "Nombre de modelo",
|
||||
"LabelModelNumber": "N\u00famero de modelo",
|
||||
"LabelModelDescription": "Descripci\u00f3n de modelo",
|
||||
"LabelModelUrl": "Url del modelo",
|
||||
"LabelSerialNumber": "N\u00famero de serie",
|
||||
"LabelDeviceDescription": "Descripci\u00f3n del dispositivo",
|
||||
"HeaderIdentificationCriteriaHelp": "Entre al menos un criterio de identificaci\u00f3n.",
|
||||
"HeaderDirectPlayProfileHelp": "A\u00f1adir perfiles de reproducci\u00f3n directa para indicar qu\u00e9 formatos puede utilizar el dispositivo de forma nativa.",
|
||||
"HeaderTranscodingProfileHelp": "A\u00f1adir perfiles de transcodificaci\u00f3n para indicar qu\u00e9 formatos se deben utilizar cuando se requiera transcodificaci\u00f3n.",
|
||||
"HeaderResponseProfileHelp": "Perfiles de respuesta proporcionan una forma de personalizar la informaci\u00f3n que se env\u00eda al dispositivo cuando se reproducen ciertos tipos de medios.",
|
||||
"LabelXDlnaCap": "X-Dlna cap:",
|
||||
"LabelXDlnaCapHelp": "Determina el contenido del elemento X_DLNACAP en el espacio de nombre urn:schemas-dlna-org:device-1-0.",
|
||||
"LabelXDlnaDoc": "X-Dlna doc:",
|
||||
"LabelXDlnaDocHelp": "Determina el contenido del elemento X_DLNADOC en el espacio de nombreurn:schemas-dlna-org:device-1-0.",
|
||||
"LabelSonyAggregationFlags": "Agregaci\u00f3n de banderas Sony:",
|
||||
"LabelSonyAggregationFlagsHelp": "Determina el contenido del elemento aggregationFlags en el espacio de nombre urn:schemas-sonycom:av.",
|
||||
"LabelTranscodingContainer": "Contenedor:",
|
||||
"LabelTranscodingVideoCodec": "Codec de video:",
|
||||
"LabelTranscodingVideoProfile": "Perfil de video:",
|
||||
"LabelTranscodingAudioCodec": "Codec de audio:",
|
||||
"OptionEnableM2tsMode": "Activar modo M2ts",
|
||||
"OptionEnableM2tsModeHelp": "Activar modo m2ts cuando se codifique a mpegts",
|
||||
"OptionEstimateContentLength": "Estimar longitud del contenido al transcodificar",
|
||||
"OptionReportByteRangeSeekingWhenTranscoding": "Indicar que el servidor soporta la b\u00fasqueda de byte al transcodificar",
|
||||
"OptionReportByteRangeSeekingWhenTranscodingHelp": "Esto es necesario para algunos dispositivos que no buscan el tiempo muy bien.",
|
||||
"HeaderSubtitleDownloadingHelp": "Cuando Media Browser escanea los archivos de v\u00eddeo, puede buscar subt\u00edtulos faltantes y descargarlos usando un proveedor de subt\u00edtulos como OpenSubtitles.org.",
|
||||
"HeaderDownloadSubtitlesFor": "Descarga subt\u00edtulos para:",
|
||||
"MessageNoChapterProviders": "Instalar un plugin proveedor de cap\u00edtulos como ChapterDb o tagChimp para permitir opciones de cap\u00edtulo adicionales.",
|
||||
"LabelSkipIfGraphicalSubsPresent": "Omitir si el video ya contiene subt\u00edtulos gr\u00e1ficos",
|
||||
"LabelSkipIfGraphicalSubsPresentHelp": "Mantener versiones de texto de los subt\u00edtulos se traducir\u00e1 en una prestaci\u00f3n m\u00e1s eficiente para los clientes m\u00f3viles.",
|
||||
"TabSubtitles": "Subt\u00edtulos",
|
||||
"TabChapters": "Cap\u00edtulos",
|
||||
"HeaderDownloadChaptersFor": "Descarga nombres de los cap\u00edtulos de:",
|
||||
"LabelOpenSubtitlesUsername": "Usuario de Open Subtitles:",
|
||||
"LabelOpenSubtitlesPassword": "Contrase\u00f1a de Open Subtitles:",
|
||||
"HeaderChapterDownloadingHelp": "Cuando Media Browser escanea los archivos de v\u00eddeo, puede descargar nombres de los cap\u00edtulos desde la red utilizando plugins de cap\u00edtulos como ChapterDb y tagChimp.",
|
||||
"LabelPlayDefaultAudioTrack": "\nReproducir pista de audio predeterminado, independientemente del idioma",
|
||||
"LabelSubtitlePlaybackMode": "Modo de Subt\u00edtulo:",
|
||||
"LabelDownloadLanguages": "Idiomas de descarga:",
|
||||
"ButtonRegister": "Registrar",
|
||||
"LabelSkipIfAudioTrackPresent": "Omitir si la pista de audio por defecto coincide con el idioma de descarga",
|
||||
"LabelSkipIfAudioTrackPresentHelp": "Desactive esta opci\u00f3n para asegurar que todos los v\u00eddeos tienen subt\u00edtulos, sin importar el idioma de audio.",
|
||||
"HeaderSendMessage": "Enviar mensaje",
|
||||
"ButtonSend": "Enviar",
|
||||
"LabelMessageText": "Mensaje de texto:",
|
||||
"MessageNoAvailablePlugins": "No hay plugins disponibles.",
|
||||
"LabelDisplayPluginsFor": "Mostrar plugins para:",
|
||||
"PluginTabMediaBrowserClassic": "MB Classic",
|
||||
"PluginTabMediaBrowserTheater": "MB Theater",
|
||||
"TabOtherPlugins": "Otros",
|
||||
"LabelEpisodeName": "Nombre episodio",
|
||||
"LabelSeriesName": "Nombre de la serie",
|
||||
"ValueSeriesNamePeriod": "Series.name",
|
||||
"ValueSeriesNameUnderscore": "Series_name",
|
||||
"ValueEpisodeNamePeriod": "Episode.name",
|
||||
"ValueEpisodeNameUnderscore": "Episode_name",
|
||||
"HeaderTypeText": "Entrar texto",
|
||||
"LabelTypeText": "Texto",
|
||||
"HeaderSearchForSubtitles": "B\u00fasqueda de Subt\u00edtulos",
|
||||
"MessageNoSubtitleSearchResultsFound": "No se han encontrado resultados en la b\u00fasqueda.",
|
||||
"TabDisplay": "Pantalla",
|
||||
"TabLanguages": "Idiomas",
|
||||
"TabWebClient": "Cliente web",
|
||||
"LabelEnableThemeSongs": "Habilitar temas musicales",
|
||||
"LabelEnableBackdrops": "Habilitar im\u00e1genes de fondo",
|
||||
"LabelEnableThemeSongsHelp": "Si est\u00e1 habilitado, se reproducir\u00e1n temas musicales de fondo mientras navega por la biblioteca.",
|
||||
"LabelEnableBackdropsHelp": "Si est\u00e1 habilitado, se mostrar\u00e1n im\u00e1genes de fondo en algunas p\u00e1ginas mientras navega por la biblioteca.",
|
||||
"HeaderHomePage": "P\u00e1gina de inicio",
|
||||
"HeaderSettingsForThisDevice": "Opciones para este dispositivo",
|
||||
"OptionAuto": "Auto",
|
||||
"OptionYes": "Si",
|
||||
"OptionNo": "No",
|
||||
"LabelHomePageSection1": "Secci\u00f3n uno de la p\u00e1gina de inicio:",
|
||||
"LabelHomePageSection2": "Secci\u00f3n dos de la p\u00e1gina de inicio:",
|
||||
"LabelHomePageSection3": "Secci\u00f3n tres de la p\u00e1gina de inicio:",
|
||||
"LabelHomePageSection4": "Secci\u00f3n cuarta de la p\u00e1gina de inicio",
|
||||
"OptionMyViewsButtons": "Mis vistas (botones)",
|
||||
"OptionMyViews": "Mis vistas",
|
||||
"OptionMyViewsSmall": "Mis vistas (peque\u00f1o)",
|
||||
"OptionResumablemedia": "Continuar",
|
||||
"OptionLatestMedia": "\u00daltimos medios",
|
||||
"OptionLatestChannelMedia": "Ultimos elementos de canales",
|
||||
"HeaderLatestChannelItems": "Ultimos elementos de canales",
|
||||
"OptionNone": "Nada",
|
||||
"HeaderLiveTv": "TV en vivo",
|
||||
"HeaderReports": "Informes",
|
||||
"HeaderMetadataManager": "Metadata Manager",
|
||||
"HeaderPreferences": "Preferencias",
|
||||
"MessageLoadingChannels": "Cargando contenidos del canal...",
|
||||
"ButtonMarkRead": "Marcar como le\u00eddo",
|
||||
"OptionDefaultSort": "Por defecto",
|
||||
"OptionCommunityMostWatchedSort": "M\u00e1s visto",
|
||||
"TabNextUp": "Siguiendo",
|
||||
"MessageNoMovieSuggestionsAvailable": "No hay sugerencias de pel\u00edculas disponibles. Comience ver y calificar sus pel\u00edculas y vuelva para ver las recomendaciones.",
|
||||
"MessageNoCollectionsAvailable": "Colecciones le permitir\u00e1 disfrutar de grupos personalizados de Pel\u00edculas, Series, Discos, Libros y Juegos. Haga click en el bot\u00f3n nuevo para empezar a crear Colecciones.",
|
||||
"HeaderWelcomeToMediaBrowserWebClient": "Vienvenido al Cliente Web de Media Browser",
|
||||
"ButtonDismiss": "Descartar",
|
||||
"MessageLearnHowToCustomize": "Aprenda c\u00f3mo personalizar esta p\u00e1gina a sus propios gustos personales. Haga clic en su icono de usuario en la esquina superior derecha de la pantalla para ver y actualizar sus preferencias.",
|
||||
"ButtonEditOtherUserPreferences": "Editar preferencias personales de este usuario.",
|
||||
"LabelChannelStreamQuality": "Calidad preferida para la transmisi\u00f3n por Internet:",
|
||||
"LabelChannelStreamQualityHelp": "En un entorno de bajo ancho de banda, limitar la calidad puede ayudar a asegurar una experiencia de streaming suave.",
|
||||
"OptionBestAvailableStreamQuality": "Mejor disponible",
|
||||
"LabelEnableChannelContentDownloadingFor": "Habilitar descargas de contenido para el canal:",
|
||||
"LabelEnableChannelContentDownloadingForHelp": "Algunos canales soportan descargar contenido antes de ver. Habilite esta en ambientes de poco ancho de banda para descargar el contenido del canal durante las horas libres. El contenido se descarga como parte de la tarea programada de descargas de canal.",
|
||||
"LabelChannelDownloadPath": "Ruta para descargas de contenidos de canales:",
|
||||
"LabelChannelDownloadPathHelp": "Especifique una ruta personalizada si lo desea. D\u00e9jelo en blanco para utilizar un carpeta interna del programa.",
|
||||
"LabelChannelDownloadAge": "Borrar contenido despues de: (d\u00edas)",
|
||||
"LabelChannelDownloadAgeHelp": "Todo contenido descargado anterior se borrar\u00e1. Continuar\u00e1 estando disponible v\u00eda streaming de internet.",
|
||||
"ChannelSettingsFormHelp": "Instale canales como Trailers y Vimeo desde el cat\u00e1logo de plugins.",
|
||||
"LabelSelectCollection": "Seleccionar colecci\u00f3n:",
|
||||
"ViewTypeMovies": "Pel\u00edculas",
|
||||
"ViewTypeTvShows": "TV",
|
||||
"ViewTypeGames": "Juegos",
|
||||
"ViewTypeMusic": "M\u00fasica",
|
||||
"ViewTypeBoxSets": "Colecciones",
|
||||
"ViewTypeChannels": "Canales",
|
||||
"ViewTypeLiveTV": "Tv en vivo",
|
||||
"HeaderOtherDisplaySettings": "Configuraci\u00f3n de pantalla",
|
||||
"HeaderMyViews": "Mis vistas",
|
||||
"LabelSelectFolderGroups": "Agrupar autom\u00e1ticamente las siguientes carpetas en vistas tales como pel\u00edculas, m\u00fasica y televisi\u00f3n",
|
||||
"LabelSelectFolderGroupsHelp": "Las carpetas que no est\u00e9n marcadas se mostrar\u00e1n por s\u00ed mismas en su propia secci\u00f3n.",
|
||||
"OptionDisplayAdultContent": "Mostrar contenido para adultos",
|
||||
"OptionLibraryFolders": "Vista de carpeta",
|
||||
"TitleRemoteControl": "Control remoto",
|
||||
"OptionLatestTvRecordings": "\u00daltimas grabaciones",
|
||||
"LabelProtocolInfo": "Informaci\u00f3n de protocolo:",
|
||||
"LabelProtocolInfoHelp": "El valor que se utilizar\u00e1 cuando se responde a una solicitud GetProtocolInfo desde el dispositivo.",
|
||||
"TabXbmcMetadata": "Xbmc",
|
||||
"HeaderXbmcMetadataHelp": "Media Browser incluye soporte nativo para XBMC, Nfo, metadatos e im\u00e1genes. Para activar o desactivar los metadatos XBMC, utilice la ficha Avanzadas para configurar opciones para sus tipos de medios.",
|
||||
"LabelXbmcMetadataUser": "A\u00f1adir datos de reproducciones de usuario a los nfo\u00b4s para:",
|
||||
"LabelXbmcMetadataUserHelp": "Activar esto para mantener sincronizados los datos de reproducci\u00f3n entre Media Browser y Xbmc.",
|
||||
"LabelXbmcMetadataDateFormat": "Formato de fecha de estreno:",
|
||||
"LabelXbmcMetadataDateFormatHelp": "Todas las fechas dentro de los nfo se leer\u00e1n y se escribir\u00e1n usando este formato.",
|
||||
"LabelXbmcMetadataSaveImagePaths": "Grabar las rutas de las im\u00e1genes en los archivos nfo",
|
||||
"LabelXbmcMetadataSaveImagePathsHelp": "\nEsto se recomienda si usted tiene los nombres de archivo de imagen que no se ajusten a las directrices de XBMC.",
|
||||
"LabelXbmcMetadataEnablePathSubstitution": "Habilitar rutas de sustituci\u00f3n",
|
||||
"LabelXbmcMetadataEnablePathSubstitutionHelp": "Permite la sustituci\u00f3n de las rutas de im\u00e1genes utilizando la configuraci\u00f3n de rutas de sustituci\u00f3n en las opciones del servidor.",
|
||||
"LabelXbmcMetadataEnablePathSubstitutionHelp2": "Ver rutas de sustituci\u00f3n.",
|
||||
"LabelGroupChannelsIntoViews": "Visualice los siguientes canales dentro de mis vistas:",
|
||||
"LabelGroupChannelsIntoViewsHelp": "Si est\u00e1 activado, estos canales se mostrar\u00e1n directamente junto a Mis Vistas. Si est\u00e1 desactivada, ser\u00e1n mostrados separadamente en la vista de Canales.",
|
||||
"LabelDisplayCollectionsView": "Mostrar una vista Colecciones para mostrar colecciones de pel\u00edculas",
|
||||
"LabelXbmcMetadataEnableExtraThumbs": "Copiar extrafanart en extrathumbs",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "Cuando se descargan im\u00e1genes se pueden guardar tanto en extrafanart como en extrathumbs para una m\u00e1xima compatibilidad con el skin de XBMC.",
|
||||
"TabServices": "Servicios",
|
||||
"TabLogs": "Logs",
|
||||
"HeaderServerLogFiles": "Archivos de log del servidor:",
|
||||
"TabBranding": "Branding",
|
||||
"HeaderBrandingHelp": "Personalizar la apariencia de Explorador de medios para satisfacer las necesidades de su grupo u organizaci\u00f3n.",
|
||||
"LabelLoginDisclaimer": "Login renuncia:",
|
||||
"LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.",
|
||||
"LabelAutomaticallyDonate": "Donar autom\u00e1ticamente esta cantidad cada mes",
|
||||
"LabelAutomaticallyDonateHelp": "Usted puede cancelar en cualquier momento desde su cuenta de PayPal."
|
||||
}
|
|
@ -837,14 +837,14 @@
|
|||
"LabelGroupChannelsIntoViewsHelp": "Al habilitarse, estos canales ser\u00e1n desplegados directamente junto con otras vistas. Si permanecen deshabilitados, ser\u00e1n desplegados dentro de una vista independiente de Canales.",
|
||||
"LabelDisplayCollectionsView": "Desplegar una Vista de colecciones para mostrar las colecciones de pel\u00edculas",
|
||||
"LabelXbmcMetadataEnableExtraThumbs": "Copiar extrafanart en extrathumbs",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "Cuando se descargan las im\u00e1genes \u00e9stas pueden ser almacenadas en extrafanart y extrathumbs para una m\u00e1xima compatibilidad con los skins de Xbmc.",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "Cuando se descargan im\u00e1genes \u00e9stas pueden ser almacenadas en extrafanart y extrathumbs para una m\u00e1xima compatibilidad con los skins de Xbmc.",
|
||||
"TabServices": "Servicios",
|
||||
"TabLogs": "Registros",
|
||||
"HeaderServerLogFiles": "Archivos de registro del servidor:",
|
||||
"TabBranding": "Branding",
|
||||
"TabBranding": "Establecer Marca",
|
||||
"HeaderBrandingHelp": "Personaliza la apariencia de Media Browser para ajustarla a las necesidades de tu grupo u organizaci\u00f3n.",
|
||||
"LabelLoginDisclaimer": "Aviso legal de Inicio de Sesi\u00f3n:",
|
||||
"LabelLoginDisclaimerHelp": "Se mostrara al final de la pagina de inicio de sesi\u00f3n.",
|
||||
"LabelLoginDisclaimer": "Aviso de Inicio de Sesi\u00f3n:",
|
||||
"LabelLoginDisclaimerHelp": "Esto se mostrara al final de la pagina de inicio de sesi\u00f3n.",
|
||||
"LabelAutomaticallyDonate": "Donar autom\u00e1ticamente esta cantidad cada mes",
|
||||
"LabelAutomaticallyDonateHelp": "Puedes cancelarlo en cualquier momento por medio de tu cuenta PayPal."
|
||||
}
|
|
@ -837,14 +837,14 @@
|
|||
"LabelGroupChannelsIntoViewsHelp": "Se abilitata, questi canali verranno visualizzati direttamente accanto ad altri punti di vista. Se disattivato, saranno visualizzati all'interno di una visione canali separati.",
|
||||
"LabelDisplayCollectionsView": "Visualizzare una vista Collezioni per mostrare collezioni di film",
|
||||
"LabelXbmcMetadataEnableExtraThumbs": "Copy extrafanart into extrathumbs",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "When downloading images they can be saved into both extrafanart and extrathumbs for maximum Xbmc skin compatibility.",
|
||||
"TabServices": "Services",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "Quando si scaricano le immagini possono essere salvate in entrambi extrafanart e extrathumbs per la massima compatibilit\u00e0 cutanea XBMC.",
|
||||
"TabServices": "Servizi",
|
||||
"TabLogs": "Logs",
|
||||
"HeaderServerLogFiles": "Server log files:",
|
||||
"TabBranding": "Branding",
|
||||
"HeaderBrandingHelp": "Customize the appearance of Media Browser to fit the needs of your group or organization.",
|
||||
"HeaderBrandingHelp": "Personalizzare l'aspetto del browser media per soddisfare le esigenze del vostro gruppo o organizzazione.",
|
||||
"LabelLoginDisclaimer": "Login disclaimer:",
|
||||
"LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.",
|
||||
"LabelAutomaticallyDonate": "Automatically donate this amount each month",
|
||||
"LabelAutomaticallyDonateHelp": "You can cancel at any time via your PayPal account."
|
||||
"LabelLoginDisclaimerHelp": "Questo verr\u00e0 visualizzato nella parte inferiore della pagina di accesso.",
|
||||
"LabelAutomaticallyDonate": "Donare automaticamente questo importo ogni mese",
|
||||
"LabelAutomaticallyDonateHelp": "\u00c8 possibile annullare in qualsiasi momento tramite il vostro conto PayPal."
|
||||
}
|
|
@ -253,7 +253,7 @@
|
|||
"LabelEnableDebugLogging": "Enable debug logging",
|
||||
"LabelRunServerAtStartup": "Run server at startup",
|
||||
"LabelRunServerAtStartupHelp": "This will start the tray icon on windows startup. To start the windows service, uncheck this and run the service from the windows control panel. Please note that you cannot run both at the same time, so you will need to exit the tray icon before starting the service.",
|
||||
"ButtonSelectDirectory": "Select Directory",
|
||||
"ButtonSelectDirectory": "Wybierz folder",
|
||||
"LabelCustomPaths": "Specify custom paths where desired. Leave fields empty to use the defaults.",
|
||||
"LabelCachePath": "Cache path:",
|
||||
"LabelCachePathHelp": "This folder contains server cache files, such as images.",
|
||||
|
@ -265,13 +265,13 @@
|
|||
"LabelTranscodingTempPathHelp": "This folder contains working files used by the transcoder. Specify a custom path, or leave empty to use the default within the server's data folder.",
|
||||
"TabBasics": "Basics",
|
||||
"TabTV": "TV",
|
||||
"TabGames": "Games",
|
||||
"TabMusic": "Music",
|
||||
"TabOthers": "Others",
|
||||
"TabGames": "Gry",
|
||||
"TabMusic": "Muzyka",
|
||||
"TabOthers": "Inne",
|
||||
"HeaderExtractChapterImagesFor": "Extract chapter images for:",
|
||||
"OptionMovies": "Movies",
|
||||
"OptionEpisodes": "Episodes",
|
||||
"OptionOtherVideos": "Other Videos",
|
||||
"OptionMovies": "Filmy",
|
||||
"OptionEpisodes": "Odcinki",
|
||||
"OptionOtherVideos": "Inne widea",
|
||||
"TitleMetadata": "Metadata",
|
||||
"LabelAutomaticUpdatesFanart": "Enable automatic updates from FanArt.tv",
|
||||
"LabelAutomaticUpdatesTmdb": "Enable automatic updates from TheMovieDB.org",
|
||||
|
|
|
@ -837,14 +837,14 @@
|
|||
"LabelGroupChannelsIntoViewsHelp": "Se ativado, estes canais ser\u00e3o exibidos imediatamente ao lado de outras visualiza\u00e7\u00f5es. Se desativado, eles ser\u00e3o exibidos dentro de uma visualiza\u00e7\u00e3o separada de Canais.",
|
||||
"LabelDisplayCollectionsView": "Exibir uma visualiza\u00e7\u00e3o de Cole\u00e7\u00f5es para mostrar colet\u00e2neas de filmes",
|
||||
"LabelXbmcMetadataEnableExtraThumbs": "Copiar extrafanart para dentro de extrathumbs",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "Ao fazer o download de imagens elas podem ser salvas em ambas extrafanart e extrathumbs para uma maior compatibilidade com a skin do Xbmc",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "Ao fazer o download de imagens elas podem ser salvas em ambas extrafanart e extrathumbs para uma maior compatibilidade com a skin do Xbmc.",
|
||||
"TabServices": "Servi\u00e7os",
|
||||
"TabLogs": "Logs",
|
||||
"HeaderServerLogFiles": "Arquivos de log do servidor:",
|
||||
"TabBranding": "Marca",
|
||||
"HeaderBrandingHelp": "Personalizar a apar\u00eancia do Media Browser para as necessidades de seu grupo ou organiza\u00e7\u00e3o.",
|
||||
"LabelLoginDisclaimer": "Login disclaimer:",
|
||||
"LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.",
|
||||
"LabelAutomaticallyDonate": "Automatically donate this amount each month",
|
||||
"LabelAutomaticallyDonateHelp": "You can cancel at any time via your PayPal account."
|
||||
"LabelLoginDisclaimer": "Aviso legal no login:",
|
||||
"LabelLoginDisclaimerHelp": "Isto ser\u00e1 exibido na parte inferior da p\u00e1gina de login.",
|
||||
"LabelAutomaticallyDonate": "Doar automaticamente esta quantidade a cada m\u00eas",
|
||||
"LabelAutomaticallyDonateHelp": "Voc\u00ea pode cancelar a qualquer hora atrav\u00e9s de sua conta do PayPal."
|
||||
}
|
|
@ -284,7 +284,7 @@
|
|||
"ButtonAutoScroll": "\u0410\u0432\u0442\u043e\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430",
|
||||
"LabelImageSavingConvention": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432:",
|
||||
"LabelImageSavingConventionHelp": "\u0412 Media Browser \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0442\u0441\u044f \u0440\u0438\u0441\u0443\u043d\u043a\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0434\u0438\u0430\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432.",
|
||||
"OptionImageSavingCompatible": "\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 - Media Browse\/XBMCr\/Plex",
|
||||
"OptionImageSavingCompatible": "\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 - Media Browser\/XBMC\/Plex",
|
||||
"OptionImageSavingStandard": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 - MB2",
|
||||
"ButtonSignIn": "\u0412\u043e\u0439\u0442\u0438",
|
||||
"TitleSignIn": "\u0412\u0445\u043e\u0434",
|
||||
|
@ -427,7 +427,7 @@
|
|||
"OptionUpscalingHelp": "\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0438\u0434\u0435\u043e, \u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.",
|
||||
"EditCollectionItemsHelp": "\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0438\u043b\u0438 \u0443\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u043b\u044e\u0431\u044b\u0435 \u0444\u0438\u043b\u044c\u043c\u044b, \u0441\u0435\u0440\u0438\u0430\u043b\u044b, \u0430\u043b\u044c\u0431\u043e\u043c\u044b, \u043a\u043d\u0438\u0433\u0438 \u0438\u043b\u0438 \u0438\u0433\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e.",
|
||||
"HeaderAddTitles": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f",
|
||||
"LabelEnableDlnaPlayTo": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 DLNA",
|
||||
"LabelEnableDlnaPlayTo": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c DLNA-\u0440\u0435\u0436\u0438\u043c \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445",
|
||||
"LabelEnableDlnaPlayToHelp": "Media Browser \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0441\u0435\u0442\u0438 \u0438 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438.",
|
||||
"LabelEnableDlnaDebugLogging": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 DLNA \u0432 \u0416\u0443\u0440\u043d\u0430\u043b\u0435",
|
||||
"LabelEnableDlnaDebugLoggingHelp": "\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u0416\u0443\u0440\u043d\u0430\u043b\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430, \u0430 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0438\u043b\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043e\u043a.",
|
||||
|
@ -553,15 +553,15 @@
|
|||
"ErrorMessageInvalidKey": "\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0435\u043c\u0438\u0443\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u043f\u043e\u043d\u0441\u043e\u0440\u043e\u043c Media Browser. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u0430\u0440\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u043c \u0432\u0430\u0441.",
|
||||
"HeaderDisplaySettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
|
||||
"TabPlayTo": " \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435",
|
||||
"LabelEnableDlnaServer": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c DLNA \u0441\u0435\u0440\u0432\u0435\u0440",
|
||||
"LabelEnableDlnaServerHelp": "\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 UPnP \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0432 \u0441\u0435\u0442\u0438 \u043e\u0431\u0437\u043e\u0440 \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f Media Browser.",
|
||||
"LabelEnableDlnaServer": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c DLNA-\u0441\u0435\u0440\u0432\u0435\u0440",
|
||||
"LabelEnableDlnaServerHelp": "\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 UPnP-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0432 \u0441\u0435\u0442\u0438 \u043e\u0431\u0437\u043e\u0440 \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f Media Browser.",
|
||||
"LabelEnableBlastAliveMessages": "\u0423\u0447\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438",
|
||||
"LabelEnableBlastAliveMessagesHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u043c\u0438 UPnP \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0432 \u0441\u0435\u0442\u0438.",
|
||||
"LabelBlastMessageInterval": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0441",
|
||||
"LabelBlastMessageIntervalHelp": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.",
|
||||
"LabelDefaultUser": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",
|
||||
"LabelDefaultUserHelp": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u044c\u044f \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439.",
|
||||
"TitleDlna": "DLNA \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430",
|
||||
"TitleDlna": "DLNA-\u0440\u0435\u0436\u0438\u043c",
|
||||
"TitleChannels": "\u041a\u0430\u043d\u0430\u043b\u044b",
|
||||
"HeaderServerSettings": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430",
|
||||
"LabelWeatherDisplayLocation": "\u041f\u043e\u0433\u043e\u0434\u0430 \u0434\u043b\u044f \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438:",
|
||||
|
@ -822,14 +822,14 @@
|
|||
"OptionLatestTvRecordings": "\u041d\u043e\u0432\u0438\u043d\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439",
|
||||
"LabelProtocolInfo": "\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435:",
|
||||
"LabelProtocolInfoHelp": "\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b GetProtocolInfo \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.",
|
||||
"TabXbmcMetadata": "Xbmc",
|
||||
"HeaderXbmcMetadataHelp": "Media Browser \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0434\u043b\u044f Xbmc Nfo. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 Xbmc, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u0439.",
|
||||
"LabelXbmcMetadataUser": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 nfo \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043b\u044f:",
|
||||
"LabelXbmcMetadataUserHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 Media Browser \u0438 Xbmc \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.",
|
||||
"TabXbmcMetadata": "XBMC",
|
||||
"HeaderXbmcMetadataHelp": "Media Browser \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 XBMC \u0434\u043b\u044f NFO \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 XBMC, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0421\u043b\u0443\u0436\u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0435\u0439.",
|
||||
"LabelXbmcMetadataUser": "\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 NFO \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043b\u044f:",
|
||||
"LabelXbmcMetadataUserHelp": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 Media Browser \u0438 XBMC.",
|
||||
"LabelXbmcMetadataDateFormat": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b \u0432\u044b\u043f\u0443\u0441\u043a\u0430:",
|
||||
"LabelXbmcMetadataDateFormatHelp": "\u0412\u0441\u0435 \u0434\u0430\u0442\u044b \u0432 nfo \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430.",
|
||||
"LabelXbmcMetadataSaveImagePaths": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0443\u0442\u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0432 nfo \u0444\u0430\u0439\u043b\u0430\u0445",
|
||||
"LabelXbmcMetadataSaveImagePathsHelp": "\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u044f\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c Xbmc.",
|
||||
"LabelXbmcMetadataDateFormatHelp": "\u0412\u0441\u0435 \u0434\u0430\u0442\u044b \u0432 NFO \u0444\u0430\u0439\u043b\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430.",
|
||||
"LabelXbmcMetadataSaveImagePaths": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0443\u0442\u0438 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u0432 NFO \u0444\u0430\u0439\u043b\u0430\u0445",
|
||||
"LabelXbmcMetadataSaveImagePathsHelp": "\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u044f\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c XBMC.",
|
||||
"LabelXbmcMetadataEnablePathSubstitution": "\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0443\u0442\u0435\u0439",
|
||||
"LabelXbmcMetadataEnablePathSubstitutionHelp": "\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0443\u0442\u0435\u0439 \u043a \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u043f\u0443\u0442\u0435\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.",
|
||||
"LabelXbmcMetadataEnablePathSubstitutionHelp2": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0443\u0442\u0435\u0439.",
|
||||
|
|
|
@ -838,13 +838,13 @@
|
|||
"LabelDisplayCollectionsView": "Visa en Samlingar-vy f\u00f6r filmsamlingar",
|
||||
"LabelXbmcMetadataEnableExtraThumbs": "Kopiera extrafanart till extrathumbs",
|
||||
"LabelXbmcMetadataEnableExtraThumbsHelp": "N\u00e4r bilder h\u00e4mtas fr\u00e5n Internet kan de sparas i b\u00e5de extrafanart- och extrathumbs-mapparna f\u00f6r att ge maximal kompatibilitet med Xbmc-skins.",
|
||||
"TabServices": "Services",
|
||||
"TabLogs": "Logs",
|
||||
"HeaderServerLogFiles": "Server log files:",
|
||||
"TabServices": "Tj\u00e4nster",
|
||||
"TabLogs": "Loggfiler",
|
||||
"HeaderServerLogFiles": "Serverloggfiler:",
|
||||
"TabBranding": "Branding",
|
||||
"HeaderBrandingHelp": "Customize the appearance of Media Browser to fit the needs of your group or organization.",
|
||||
"LabelLoginDisclaimer": "Login disclaimer:",
|
||||
"LabelLoginDisclaimerHelp": "This will be displayed at the bottom of the login page.",
|
||||
"LabelAutomaticallyDonate": "Automatically donate this amount each month",
|
||||
"LabelAutomaticallyDonateHelp": "You can cancel at any time via your PayPal account."
|
||||
"HeaderBrandingHelp": "Anpassa utseendet p\u00e5 Media Browser till din grupp eller f\u00f6retags \u00f6nskem\u00e5l.",
|
||||
"LabelLoginDisclaimer": "Ansvarsbegr\u00e4nsning vid inloggning:",
|
||||
"LabelLoginDisclaimerHelp": "Detta visas l\u00e4ngst ned p\u00e5 inloggningssidan.",
|
||||
"LabelAutomaticallyDonate": "Donera automatiskt detta belopp varje m\u00e5nad",
|
||||
"LabelAutomaticallyDonateHelp": "Du kan avbryta n\u00e4r som helst via ditt PayPal-konto."
|
||||
}
|
|
@ -354,6 +354,8 @@
|
|||
<EmbeddedResource Include="Localization\Server\vi.json" />
|
||||
<EmbeddedResource Include="Localization\JavaScript\pl.json" />
|
||||
<EmbeddedResource Include="Localization\Server\pl.json" />
|
||||
<EmbeddedResource Include="Localization\JavaScript\es_ES.json" />
|
||||
<EmbeddedResource Include="Localization\Server\es_ES.json" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -14,6 +14,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||
// Windows builds: http://ffmpeg.zeranoe.com/builds/
|
||||
// Linux builds: http://ffmpeg.gusari.org/static/
|
||||
// OS X builds: http://ffmpegmac.net/
|
||||
// OS X x64: http://www.evermeet.cx/ffmpeg/
|
||||
|
||||
public static string Version = ffmpegOsType("Version");
|
||||
|
||||
|
@ -113,15 +114,23 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||
return new[]
|
||||
{
|
||||
"http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20140612-git-3a1c895-win32-static.7z",
|
||||
"https://www.dropbox.com/s/lllit55bynbz6zc/ffmpeg-20140612-git-3a1c895-win32-static.7z?dl=1"
|
||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/windows/ffmpeg-20140612-git-3a1c895-win32-static.7z"
|
||||
};
|
||||
|
||||
case PlatformID.Unix:
|
||||
if (PlatformDetection.IsMac && PlatformDetection.IsX86)
|
||||
{
|
||||
return new[]
|
||||
{
|
||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/osx/ffmpeg-osx-20131121.gz"
|
||||
};
|
||||
}
|
||||
|
||||
if (PlatformDetection.IsMac && PlatformDetection.IsX86_64)
|
||||
{
|
||||
return new[]
|
||||
{
|
||||
"https://www.dropbox.com/s/n188rxbulqem8ry/ffmpeg-osx-20131121.gz?dl=1"
|
||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/osx/ffprobe-x64-2.2.4.7z"
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -132,7 +141,7 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||
return new[]
|
||||
{
|
||||
"http://ffmpeg.gusari.org/static/32bit/ffmpeg.static.32bit.latest.tar.gz",
|
||||
"https://www.dropbox.com/s/k9s02pv5to6slfb/ffmpeg.static.32bit.2014-05-06.tar.gz?dl=1"
|
||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/linux/ffmpeg.static.32bit.2014-05-06.tar.gz"
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -141,13 +150,13 @@ namespace MediaBrowser.ServerApplication.FFMpeg
|
|||
return new[]
|
||||
{
|
||||
"http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz",
|
||||
"https://www.dropbox.com/s/onuregwghywnzjo/ffmpeg.static.64bit.2014-05-05.tar.gz?dl=1"
|
||||
"https://github.com/MediaBrowser/MediaBrowser.Resources/raw/master/ffmpeg/linux/ffmpeg.static.64bit.2014-05-05.tar.gz"
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//No Unix version available
|
||||
// No Unix version available
|
||||
return new string[] { };
|
||||
|
||||
default:
|
||||
|
|
|
@ -80,6 +80,10 @@
|
|||
<Project>{2E781478-814D-4A48-9D80-BFF206441A65}</Project>
|
||||
<Name>MediaBrowser.Server.Implementations</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\MediaBrowser.XbmcMetadata\MediaBrowser.XbmcMetadata.csproj">
|
||||
<Project>{23499896-b135-4527-8574-c26e926ea99e}</Project>
|
||||
<Name>MediaBrowser.XbmcMetadata</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
|
|
|
@ -56,13 +56,13 @@
|
|||
<Compile Include="Providers\MovieNfoProvider.cs" />
|
||||
<Compile Include="Providers\SeasonNfoProvider.cs" />
|
||||
<Compile Include="Providers\SeriesNfoProvider.cs" />
|
||||
<Compile Include="Savers\AlbumXmlSaver.cs" />
|
||||
<Compile Include="Savers\ArtistXmlSaver.cs" />
|
||||
<Compile Include="Savers\EpisodeXmlSaver.cs" />
|
||||
<Compile Include="Savers\MovieXmlSaver.cs" />
|
||||
<Compile Include="Savers\SeasonXmlSaver.cs" />
|
||||
<Compile Include="Savers\SeriesXmlSaver.cs" />
|
||||
<Compile Include="Savers\XmlSaverHelpers.cs" />
|
||||
<Compile Include="Savers\AlbumNfoSaver.cs" />
|
||||
<Compile Include="Savers\ArtistNfoSaver.cs" />
|
||||
<Compile Include="Savers\BaseNfoSaver.cs" />
|
||||
<Compile Include="Savers\EpisodeNfoSaver.cs" />
|
||||
<Compile Include="Savers\MovieNfoSaver.cs" />
|
||||
<Compile Include="Savers\SeasonNfoSaver.cs" />
|
||||
<Compile Include="Savers\SeriesNfoSaver.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
|
||||
|
|
|
@ -11,6 +11,7 @@ using System.Linq;
|
|||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
using MediaBrowser.XbmcMetadata.Savers;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Parsers
|
||||
{
|
||||
|
@ -63,8 +64,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
ValidationType = ValidationType.None
|
||||
};
|
||||
|
||||
//Fetch(item, metadataFile, settings, Encoding.GetEncoding("ISO-8859-1"), cancellationToken);
|
||||
Fetch(item, metadataFile, settings, Encoding.UTF8, cancellationToken);
|
||||
Fetch(item, metadataFile, settings, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -73,11 +73,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers
|
|||
/// <param name="item">The item.</param>
|
||||
/// <param name="metadataFile">The metadata file.</param>
|
||||
/// <param name="settings">The settings.</param>
|
||||
/// <param name="encoding">The encoding.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
private void Fetch(T item, string metadataFile, XmlReaderSettings settings, Encoding encoding, CancellationToken cancellationToken)
|
||||
private void Fetch(T item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken)
|
||||
{
|
||||
using (var streamReader = new StreamReader(metadataFile))
|
||||
using (var streamReader = BaseNfoSaver.GetStreamReader(metadataFile))
|
||||
{
|
||||
// Use XmlReader for best performance
|
||||
using (var reader = XmlReader.Create(streamReader, settings))
|
||||
|
|
112
MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs
Normal file
112
MediaBrowser.XbmcMetadata/Savers/AlbumNfoSaver.cs
Normal file
|
@ -0,0 +1,112 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class AlbumNfoSaver : BaseNfoSaver
|
||||
{
|
||||
public AlbumNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager)
|
||||
: base(fileSystem, configurationManager, libraryManager, userManager, userDataManager)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "album.nfo");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
return "album";
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is MusicAlbum && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
var album = (MusicAlbum)item;
|
||||
|
||||
var tracks = album.Tracks
|
||||
.ToList();
|
||||
|
||||
var artists = tracks
|
||||
.SelectMany(i =>
|
||||
{
|
||||
var list = new List<string>();
|
||||
|
||||
if (!string.IsNullOrEmpty(i.AlbumArtist))
|
||||
{
|
||||
list.Add(i.AlbumArtist);
|
||||
}
|
||||
list.AddRange(i.Artists);
|
||||
|
||||
return list;
|
||||
})
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
foreach (var artist in artists)
|
||||
{
|
||||
writer.WriteElementString("artist", artist);
|
||||
}
|
||||
|
||||
AddTracks(tracks, writer);
|
||||
}
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
private void AddTracks(IEnumerable<Audio> tracks, XmlWriter writer)
|
||||
{
|
||||
foreach (var track in tracks.OrderBy(i => i.ParentIndexNumber ?? 0).ThenBy(i => i.IndexNumber ?? 0))
|
||||
{
|
||||
writer.WriteStartElement("track");
|
||||
|
||||
if (track.IndexNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("position", track.IndexNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(track.Name))
|
||||
{
|
||||
writer.WriteElementString("title", track.Name);
|
||||
}
|
||||
|
||||
if (track.RunTimeTicks.HasValue)
|
||||
{
|
||||
var time = TimeSpan.FromTicks(track.RunTimeTicks.Value).ToString(@"mm\:ss");
|
||||
|
||||
writer.WriteElementString("duration", time);
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
}
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"track",
|
||||
"artist"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,134 +0,0 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class AlbumXmlSaver : IMetadataFileSaver
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IUserDataManager _userDataRepo;
|
||||
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly IServerConfigurationManager _config;
|
||||
|
||||
public AlbumXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_userDataRepo = userDataRepo;
|
||||
_fileSystem = fileSystem;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Xbmc Nfo";
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "album.nfo");
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
{
|
||||
var album = (MusicAlbum)item;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.Append("<album>");
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes(album, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
|
||||
|
||||
var tracks = album.Tracks
|
||||
.ToList();
|
||||
|
||||
var artists = tracks
|
||||
.SelectMany(i =>
|
||||
{
|
||||
var list = new List<string>();
|
||||
|
||||
if (!string.IsNullOrEmpty(i.AlbumArtist))
|
||||
{
|
||||
list.Add(i.AlbumArtist);
|
||||
}
|
||||
list.AddRange(i.Artists);
|
||||
|
||||
return list;
|
||||
})
|
||||
.Distinct(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
foreach (var artist in artists)
|
||||
{
|
||||
builder.Append("<artist>" + SecurityElement.Escape(artist) + "</artist>");
|
||||
}
|
||||
|
||||
AddTracks(tracks, builder);
|
||||
|
||||
builder.Append("</album>");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||
{
|
||||
"track",
|
||||
"artist"
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is MusicAlbum && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
private void AddTracks(IEnumerable<Audio> tracks, StringBuilder builder)
|
||||
{
|
||||
foreach (var track in tracks.OrderBy(i => i.ParentIndexNumber ?? 0).ThenBy(i => i.IndexNumber ?? 0))
|
||||
{
|
||||
builder.Append("<track>");
|
||||
|
||||
if (track.IndexNumber.HasValue)
|
||||
{
|
||||
builder.Append("<position>" + SecurityElement.Escape(track.IndexNumber.Value.ToString(UsCulture)) + "</position>");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(track.Name))
|
||||
{
|
||||
builder.Append("<title>" + SecurityElement.Escape(track.Name) + "</title>");
|
||||
}
|
||||
|
||||
if (track.RunTimeTicks.HasValue)
|
||||
{
|
||||
var time = TimeSpan.FromTicks(track.RunTimeTicks.Value).ToString(@"mm\:ss");
|
||||
|
||||
builder.Append("<duration>" + SecurityElement.Escape(time) + "</duration>");
|
||||
}
|
||||
|
||||
builder.Append("</track>");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
94
MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs
Normal file
94
MediaBrowser.XbmcMetadata/Savers/ArtistNfoSaver.cs
Normal file
|
@ -0,0 +1,94 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.XbmcMetadata.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class ArtistNfoSaver : BaseNfoSaver
|
||||
{
|
||||
public ArtistNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager)
|
||||
: base(fileSystem, configurationManager, libraryManager, userManager, userDataManager)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "artist.nfo");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
return "artist";
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is MusicArtist && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
var artist = (MusicArtist)item;
|
||||
|
||||
if (artist.EndDate.HasValue)
|
||||
{
|
||||
var formatString = ConfigurationManager.GetNfoConfiguration().ReleaseDateFormat;
|
||||
|
||||
writer.WriteElementString("disbanded", artist.EndDate.Value.ToString(formatString));
|
||||
}
|
||||
|
||||
var albums = artist
|
||||
.RecursiveChildren
|
||||
.OfType<MusicAlbum>()
|
||||
.ToList();
|
||||
|
||||
AddAlbums(albums, writer);
|
||||
}
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
private void AddAlbums(IEnumerable<MusicAlbum> albums, XmlWriter writer)
|
||||
{
|
||||
foreach (var album in albums)
|
||||
{
|
||||
writer.WriteStartElement("album");
|
||||
|
||||
if (!string.IsNullOrEmpty(album.Name))
|
||||
{
|
||||
writer.WriteElementString("title", album.Name);
|
||||
}
|
||||
|
||||
if (album.ProductionYear.HasValue)
|
||||
{
|
||||
writer.WriteElementString("year", album.ProductionYear.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
}
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"album",
|
||||
"disbanded"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,116 +0,0 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.XbmcMetadata.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class ArtistXmlSaver : IMetadataFileSaver
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IUserDataManager _userDataRepo;
|
||||
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly IServerConfigurationManager _config;
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
public ArtistXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_userDataRepo = userDataRepo;
|
||||
_fileSystem = fileSystem;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "artist.nfo");
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Xbmc Nfo";
|
||||
}
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
{
|
||||
var artist = (MusicArtist)item;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.Append("<artist>");
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes(artist, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
|
||||
|
||||
if (artist.EndDate.HasValue)
|
||||
{
|
||||
var formatString = _config.GetNfoConfiguration().ReleaseDateFormat;
|
||||
|
||||
builder.Append("<disbanded>" + SecurityElement.Escape(artist.EndDate.Value.ToString(formatString)) + "</disbanded>");
|
||||
}
|
||||
|
||||
var albums = artist
|
||||
.RecursiveChildren
|
||||
.OfType<MusicAlbum>()
|
||||
.ToList();
|
||||
|
||||
AddAlbums(albums, builder);
|
||||
|
||||
builder.Append("</artist>");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||
{
|
||||
"album",
|
||||
"disbanded"
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is MusicArtist && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
private void AddAlbums(IEnumerable<MusicAlbum> albums, StringBuilder builder)
|
||||
{
|
||||
foreach (var album in albums)
|
||||
{
|
||||
builder.Append("<album>");
|
||||
|
||||
if (!string.IsNullOrEmpty(album.Name))
|
||||
{
|
||||
builder.Append("<title>" + SecurityElement.Escape(album.Name) + "</title>");
|
||||
}
|
||||
|
||||
if (album.ProductionYear.HasValue)
|
||||
{
|
||||
builder.Append("<year>" + SecurityElement.Escape(album.ProductionYear.Value.ToString(UsCulture)) + "</year>");
|
||||
}
|
||||
|
||||
builder.Append("</album>");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
122
MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs
Normal file
122
MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs
Normal file
|
@ -0,0 +1,122 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.XbmcMetadata.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class EpisodeNfoSaver : BaseNfoSaver
|
||||
{
|
||||
public EpisodeNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager)
|
||||
: base(fileSystem, configurationManager, libraryManager, userManager, userDataManager)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return GetMovieSavePath(item);
|
||||
}
|
||||
|
||||
public static string GetMovieSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.ChangeExtension(item.Path, ".nfo");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
return "episodedetails";
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is Episode && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
var episode = (Episode)item;
|
||||
|
||||
if (episode.IndexNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("episode", episode.IndexNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (episode.IndexNumberEnd.HasValue)
|
||||
{
|
||||
writer.WriteElementString("episodenumberend", episode.IndexNumberEnd.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (episode.ParentIndexNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("season", episode.ParentIndexNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (episode.PremiereDate.HasValue)
|
||||
{
|
||||
var formatString = ConfigurationManager.GetNfoConfiguration().ReleaseDateFormat;
|
||||
|
||||
writer.WriteElementString("aired", episode.PremiereDate.Value.ToString(formatString));
|
||||
}
|
||||
|
||||
if (episode.AirsAfterSeasonNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("airsafter_season", episode.AirsAfterSeasonNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
if (episode.AirsBeforeEpisodeNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("airsbefore_episode", episode.AirsBeforeEpisodeNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
if (episode.AirsBeforeSeasonNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("airsbefore_season", episode.AirsBeforeSeasonNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (episode.DvdEpisodeNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("DVD_episodenumber", episode.DvdEpisodeNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (episode.DvdSeasonNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("DVD_season", episode.DvdSeasonNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
|
||||
if (episode.AbsoluteEpisodeNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("absolute_number", episode.AbsoluteEpisodeNumber.Value.ToString(UsCulture));
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"aired",
|
||||
"season",
|
||||
"episode",
|
||||
"episodenumberend",
|
||||
"airsafter_season",
|
||||
"airsbefore_episode",
|
||||
"airsbefore_season",
|
||||
"DVD_episodenumber",
|
||||
"DVD_season",
|
||||
"absolute_number"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,141 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using MediaBrowser.XbmcMetadata.Configuration;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class EpisodeXmlSaver : IMetadataFileSaver
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IUserDataManager _userDataRepo;
|
||||
|
||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
||||
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly IServerConfigurationManager _config;
|
||||
|
||||
public EpisodeXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_userDataRepo = userDataRepo;
|
||||
_fileSystem = fileSystem;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Xbmc Nfo";
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.ChangeExtension(item.Path, ".nfo");
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
{
|
||||
var episode = (Episode)item;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.Append("<episodedetails>");
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes(episode, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
|
||||
|
||||
if (episode.IndexNumber.HasValue)
|
||||
{
|
||||
builder.Append("<episode>" + episode.IndexNumber.Value.ToString(_usCulture) + "</episode>");
|
||||
}
|
||||
|
||||
if (episode.IndexNumberEnd.HasValue)
|
||||
{
|
||||
builder.Append("<episodenumberend>" + SecurityElement.Escape(episode.IndexNumberEnd.Value.ToString(_usCulture)) + "</episodenumberend>");
|
||||
}
|
||||
|
||||
if (episode.ParentIndexNumber.HasValue)
|
||||
{
|
||||
builder.Append("<season>" + episode.ParentIndexNumber.Value.ToString(_usCulture) + "</season>");
|
||||
}
|
||||
|
||||
if (episode.PremiereDate.HasValue)
|
||||
{
|
||||
var formatString = _config.GetNfoConfiguration().ReleaseDateFormat;
|
||||
|
||||
builder.Append("<aired>" + SecurityElement.Escape(episode.PremiereDate.Value.ToString(formatString)) + "</aired>");
|
||||
}
|
||||
|
||||
if (episode.AirsAfterSeasonNumber.HasValue)
|
||||
{
|
||||
builder.Append("<airsafter_season>" + SecurityElement.Escape(episode.AirsAfterSeasonNumber.Value.ToString(_usCulture)) + "</airsafter_season>");
|
||||
}
|
||||
if (episode.AirsBeforeEpisodeNumber.HasValue)
|
||||
{
|
||||
builder.Append("<airsbefore_episode>" + SecurityElement.Escape(episode.AirsBeforeEpisodeNumber.Value.ToString(_usCulture)) + "</airsbefore_episode>");
|
||||
}
|
||||
if (episode.AirsBeforeSeasonNumber.HasValue)
|
||||
{
|
||||
builder.Append("<airsbefore_season>" + SecurityElement.Escape(episode.AirsBeforeSeasonNumber.Value.ToString(_usCulture)) + "</airsbefore_season>");
|
||||
}
|
||||
|
||||
if (episode.DvdEpisodeNumber.HasValue)
|
||||
{
|
||||
builder.Append("<DVD_episodenumber>" + SecurityElement.Escape(episode.DvdEpisodeNumber.Value.ToString(_usCulture)) + "</DVD_episodenumber>");
|
||||
}
|
||||
|
||||
if (episode.DvdSeasonNumber.HasValue)
|
||||
{
|
||||
builder.Append("<DVD_season>" + SecurityElement.Escape(episode.DvdSeasonNumber.Value.ToString(_usCulture)) + "</DVD_season>");
|
||||
}
|
||||
|
||||
if (episode.AbsoluteEpisodeNumber.HasValue)
|
||||
{
|
||||
builder.Append("<absolute_number>" + SecurityElement.Escape(episode.AbsoluteEpisodeNumber.Value.ToString(_usCulture)) + "</absolute_number>");
|
||||
}
|
||||
|
||||
XmlSaverHelpers.AddMediaInfo((Episode)item, builder);
|
||||
|
||||
builder.Append("</episodedetails>");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||
{
|
||||
"aired",
|
||||
"season",
|
||||
"episode",
|
||||
"episodenumberend",
|
||||
"airsafter_season",
|
||||
"airsbefore_episode",
|
||||
"airsbefore_season",
|
||||
"DVD_episodenumber",
|
||||
"DVD_season",
|
||||
"absolute_number"
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is Episode && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,40 +6,20 @@ using MediaBrowser.Controller.Entities.TV;
|
|||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class MovieXmlSaver : IMetadataFileSaver
|
||||
public class MovieNfoSaver : BaseNfoSaver
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IUserDataManager _userDataRepo;
|
||||
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly IServerConfigurationManager _config;
|
||||
|
||||
public MovieXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
|
||||
public MovieNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager)
|
||||
: base(fileSystem, configurationManager, libraryManager, userManager, userDataManager)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_userDataRepo = userDataRepo;
|
||||
_fileSystem = fileSystem;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Xbmc Nfo";
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
public override string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return GetMovieSavePath(item);
|
||||
}
|
||||
|
@ -58,65 +38,12 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
return Path.ChangeExtension(item.Path, ".nfo");
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
var video = (Video)item;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
var tag = item is MusicVideo ? "musicvideo" : "movie";
|
||||
|
||||
builder.Append("<" + tag + ">");
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes(video, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
|
||||
|
||||
var imdb = item.GetProviderId(MetadataProviders.Imdb);
|
||||
|
||||
if (!string.IsNullOrEmpty(imdb))
|
||||
{
|
||||
builder.Append("<id>" + SecurityElement.Escape(imdb) + "</id>");
|
||||
}
|
||||
|
||||
var musicVideo = item as MusicVideo;
|
||||
|
||||
if (musicVideo != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(musicVideo.Artist))
|
||||
{
|
||||
builder.Append("<artist>" + SecurityElement.Escape(musicVideo.Artist) + "</artist>");
|
||||
}
|
||||
if (!string.IsNullOrEmpty(musicVideo.Album))
|
||||
{
|
||||
builder.Append("<album>" + SecurityElement.Escape(musicVideo.Album) + "</album>");
|
||||
}
|
||||
}
|
||||
|
||||
var movie = item as Movie;
|
||||
|
||||
if (movie != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(movie.TmdbCollectionName))
|
||||
{
|
||||
builder.Append("<set>" + SecurityElement.Escape(movie.TmdbCollectionName) + "</set>");
|
||||
}
|
||||
}
|
||||
|
||||
XmlSaverHelpers.AddMediaInfo((Video)item, builder);
|
||||
|
||||
builder.Append("</" + tag + ">");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||
{
|
||||
"album",
|
||||
"artist",
|
||||
"set",
|
||||
"id"
|
||||
});
|
||||
return item is MusicVideo ? "musicvideo" : "movie";
|
||||
}
|
||||
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
|
@ -133,5 +60,54 @@ namespace MediaBrowser.XbmcMetadata.Savers
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
var imdb = item.GetProviderId(MetadataProviders.Imdb);
|
||||
|
||||
if (!string.IsNullOrEmpty(imdb))
|
||||
{
|
||||
writer.WriteElementString("id", imdb);
|
||||
}
|
||||
|
||||
var musicVideo = item as MusicVideo;
|
||||
|
||||
if (musicVideo != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(musicVideo.Artist))
|
||||
{
|
||||
writer.WriteElementString("artist", musicVideo.Artist);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(musicVideo.Album))
|
||||
{
|
||||
writer.WriteElementString("album", musicVideo.Album);
|
||||
}
|
||||
}
|
||||
|
||||
var movie = item as Movie;
|
||||
|
||||
if (movie != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(movie.TmdbCollectionName))
|
||||
{
|
||||
writer.WriteElementString("set", movie.TmdbCollectionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"album",
|
||||
"artist",
|
||||
"set",
|
||||
"id"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
63
MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs
Normal file
63
MediaBrowser.XbmcMetadata/Savers/SeasonNfoSaver.cs
Normal file
|
@ -0,0 +1,63 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class SeasonNfoSaver : BaseNfoSaver
|
||||
{
|
||||
public SeasonNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager) : base(fileSystem, configurationManager, libraryManager, userManager, userDataManager)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "season.nfo");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
return "season";
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(item is Season))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return updateType >= ItemUpdateType.MetadataDownload || (updateType >= ItemUpdateType.MetadataImport && File.Exists(GetSavePath(item)));
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
var season = (Season)item;
|
||||
|
||||
if (season.IndexNumber.HasValue)
|
||||
{
|
||||
writer.WriteElementString("seasonnumber", season.IndexNumber.Value.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = base.GetTagsUsed();
|
||||
|
||||
list.Add("seasonnumber");
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class SeasonXmlSaver : IMetadataFileSaver
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IUserDataManager _userDataRepo;
|
||||
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly IServerConfigurationManager _config;
|
||||
|
||||
public SeasonXmlSaver(ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem, IServerConfigurationManager config)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_userDataRepo = userDataRepo;
|
||||
_fileSystem = fileSystem;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Xbmc Nfo";
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "season.nfo");
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.Append("<season>");
|
||||
|
||||
var season = (Season)item;
|
||||
|
||||
if (season.IndexNumber.HasValue)
|
||||
{
|
||||
builder.Append("<seasonnumber>" + SecurityElement.Escape(season.IndexNumber.Value.ToString(CultureInfo.InvariantCulture)) + "</seasonnumber>");
|
||||
}
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes((Season)item, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
|
||||
|
||||
builder.Append("</season>");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||
{
|
||||
"seasonnumber"
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(item is Season))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return updateType >= ItemUpdateType.MetadataDownload || (updateType >= ItemUpdateType.MetadataImport && File.Exists(GetSavePath(item)));
|
||||
}
|
||||
}
|
||||
}
|
113
MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs
Normal file
113
MediaBrowser.XbmcMetadata/Savers/SeriesNfoSaver.cs
Normal file
|
@ -0,0 +1,113 @@
|
|||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class SeriesNfoSaver : BaseNfoSaver
|
||||
{
|
||||
public SeriesNfoSaver(IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataManager)
|
||||
: base(fileSystem, configurationManager, libraryManager, userManager, userDataManager)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "tvshow.nfo");
|
||||
}
|
||||
|
||||
protected override string GetRootElementName(IHasMetadata item)
|
||||
{
|
||||
return "tvshow";
|
||||
}
|
||||
|
||||
public override bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is Series && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
protected override void WriteCustomElements(IHasMetadata item, XmlWriter writer)
|
||||
{
|
||||
var series = (Series)item;
|
||||
|
||||
var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
|
||||
|
||||
if (!string.IsNullOrEmpty(tvdb))
|
||||
{
|
||||
writer.WriteElementString("id", tvdb);
|
||||
|
||||
writer.WriteStartElement("episodeguide");
|
||||
|
||||
var language = item.GetPreferredMetadataLanguage();
|
||||
language = string.IsNullOrEmpty(language)
|
||||
? "en"
|
||||
: language;
|
||||
|
||||
writer.WriteStartElement("url");
|
||||
writer.WriteAttributeString("cache", string.Format("{0}.xml", tvdb));
|
||||
writer.WriteString(string.Format("http://www.thetvdb.com/api/1D62F2F90030C444/series/{0}/all/{1}.zip", tvdb, language));
|
||||
writer.WriteEndElement();
|
||||
|
||||
writer.WriteEndElement();
|
||||
}
|
||||
|
||||
writer.WriteElementString("season", "-1");
|
||||
writer.WriteElementString("episode", "-1");
|
||||
|
||||
if (series.Status.HasValue)
|
||||
{
|
||||
writer.WriteElementString("status", series.Status.Value.ToString());
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(series.AirTime))
|
||||
{
|
||||
writer.WriteElementString("airs_time", series.AirTime);
|
||||
}
|
||||
|
||||
if (series.AirDays.Count == 7)
|
||||
{
|
||||
writer.WriteElementString("airs_dayofweek", "Daily");
|
||||
}
|
||||
else if (series.AirDays.Count > 0)
|
||||
{
|
||||
writer.WriteElementString("airs_dayofweek", series.AirDays[0].ToString());
|
||||
}
|
||||
|
||||
if (series.AnimeSeriesIndex.HasValue)
|
||||
{
|
||||
writer.WriteElementString("animeseriesindex", series.AnimeSeriesIndex.Value.ToString(CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
|
||||
protected override List<string> GetTagsUsed()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
"id",
|
||||
"episodeguide",
|
||||
"season",
|
||||
"episode",
|
||||
"status",
|
||||
"airs_time",
|
||||
"airs_dayofweek",
|
||||
"animeseriesindex"
|
||||
};
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,122 +0,0 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.TV;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Model.Entities;
|
||||
|
||||
namespace MediaBrowser.XbmcMetadata.Savers
|
||||
{
|
||||
public class SeriesXmlSaver : IMetadataFileSaver
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IUserDataManager _userDataRepo;
|
||||
|
||||
private readonly IFileSystem _fileSystem;
|
||||
private readonly IServerConfigurationManager _config;
|
||||
|
||||
public SeriesXmlSaver(IServerConfigurationManager config, ILibraryManager libraryManager, IUserManager userManager, IUserDataManager userDataRepo, IFileSystem fileSystem)
|
||||
{
|
||||
_config = config;
|
||||
_libraryManager = libraryManager;
|
||||
_userManager = userManager;
|
||||
_userDataRepo = userDataRepo;
|
||||
_fileSystem = fileSystem;
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return "Xbmc Nfo";
|
||||
}
|
||||
}
|
||||
|
||||
public string GetSavePath(IHasMetadata item)
|
||||
{
|
||||
return Path.Combine(item.Path, "tvshow.nfo");
|
||||
}
|
||||
|
||||
public void Save(IHasMetadata item, CancellationToken cancellationToken)
|
||||
{
|
||||
var series = (Series)item;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.Append("<tvshow>");
|
||||
|
||||
XmlSaverHelpers.AddCommonNodes(series, builder, _libraryManager, _userManager, _userDataRepo, _fileSystem, _config);
|
||||
|
||||
var tvdb = item.GetProviderId(MetadataProviders.Tvdb);
|
||||
|
||||
if (!string.IsNullOrEmpty(tvdb))
|
||||
{
|
||||
builder.Append("<id>" + SecurityElement.Escape(tvdb) + "</id>");
|
||||
|
||||
builder.AppendFormat("<episodeguide><url cache=\"{0}.xml\">http://www.thetvdb.com/api/1D62F2F90030C444/series/{0}/all/{1}.zip</url></episodeguide>",
|
||||
tvdb,
|
||||
string.IsNullOrEmpty(_config.Configuration.PreferredMetadataLanguage) ? "en" : _config.Configuration.PreferredMetadataLanguage);
|
||||
}
|
||||
|
||||
builder.Append("<season>-1</season>");
|
||||
builder.Append("<episode>-1</episode>");
|
||||
|
||||
if (series.Status.HasValue)
|
||||
{
|
||||
builder.Append("<status>" + SecurityElement.Escape(series.Status.Value.ToString()) + "</status>");
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(series.AirTime))
|
||||
{
|
||||
builder.Append("<airs_time>" + SecurityElement.Escape(series.AirTime) + "</airs_time>");
|
||||
}
|
||||
|
||||
if (series.AirDays.Count == 7)
|
||||
{
|
||||
builder.Append("<airs_dayofweek>" + SecurityElement.Escape("Daily") + "</airs_dayofweek>");
|
||||
}
|
||||
else if (series.AirDays.Count > 0)
|
||||
{
|
||||
builder.Append("<airs_dayofweek>" + SecurityElement.Escape(series.AirDays[0].ToString()) + "</airs_dayofweek>");
|
||||
}
|
||||
|
||||
if (series.AnimeSeriesIndex.HasValue)
|
||||
{
|
||||
builder.Append("<animeseriesindex>" + SecurityElement.Escape(series.AnimeSeriesIndex.Value.ToString(CultureInfo.InvariantCulture)) + "</animeseriesindex>");
|
||||
}
|
||||
|
||||
builder.Append("</tvshow>");
|
||||
|
||||
var xmlFilePath = GetSavePath(item);
|
||||
|
||||
XmlSaverHelpers.Save(builder, xmlFilePath, new List<string>
|
||||
{
|
||||
"id",
|
||||
"episodeguide",
|
||||
"season",
|
||||
"episode",
|
||||
"status",
|
||||
"airs_time",
|
||||
"airs_dayofweek",
|
||||
"animeseriesindex"
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
|
||||
{
|
||||
if (!item.SupportsLocalMetadata)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return item is Series && updateType >= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user